'Projects all architecture fields that are specified in the given
spec onto the instance spec if they\'re missing from the instance
spec. This will only work if the two specs are compatible.'

def constrain(self, other):

    other = self._autospec(other)
    if (not self.satisfies(other)):
        raise UnsatisfiableArchitectureSpecError(self, other)
    constrained = False
    for (attr, svalue) in iteritems(self.to_cmp_dict()):
        ovalue = getattr(other, attr)
        if ((svalue is None) and (ovalue is not None)):
            setattr(self, attr, ovalue)
            constrained = True
    return constrained
