def restrict_attribute_inverse(prop, inverse)
      logger.debug { "Restricting #{prop.declarer.qp}.#{prop} to #{qp} with inverse #{inverse}..." }
      rst_prop = prop.restrict(self, :inverse => inverse)
      logger.debug { "Restricted #{prop.declarer.qp}.#{prop} to #{qp} with inverse #{inverse}." }
      rst_prop
    end
def restrict_attribute_inverse(prop, inverse)
      logger.debug { "Restricting #{prop.declarer.qp}.#{prop} to #{qp} with inverse #{inverse}..." }
      rst_prop = prop.restrict(self, :inverse => inverse)
      logger.debug { "Restricted #{prop.declarer.qp}.#{prop} to #{qp} with inverse #{inverse}." }
      rst_prop
    end
Copies the given attribute metadata from its declarer to this class. The new attribute metadata
 has the same attribute access methods, but the declarer is this class and the inverse is the
 given inverse attribute.

 @param [Property] prop the attribute to copy
 @param [Symbol] the attribute inverse
 @return [Property] the copied attribute metadata