code: def factor_for_space(self, spc):
          
          if spc == TrivialSpace:
              ops_on_spc = [
                  o for o in self.operands if o.space is TrivialSpace]
              ops_not_on_spc = [
                  o for o in self.operands if o.space > TrivialSpace]
          else:
              ops_on_spc = [
                  o for o in self.operands if (o.space & spc) > TrivialSpace]
              ops_not_on_spc = [
                  o for o in self.operands if (o.space & spc) is TrivialSpace]
          return (
              self.__class__._times_cls.create(*ops_on_spc),
              self.__class__._times_cls.create(*ops_not_on_spc))
docs: Return a tuple of two products, where the first product contains the
          given Hilbert space, and the second product is disjunct from it.