code: def equivalentClass(self, *others):
          
          # FIXME this makes the data model mutable!
          # TODO symmetry here
  
          # serious modelling issue
          # If you make two bags equivalent to eachother
          # then in the set theory model it becomes impossible
          # to have a set that is _just_ one or the other of the bags
          # which I do not think that we want
          for other in others:
              if isinstance(other, self.__class__):
                  #if isinstance(other, NegPhenotype):  # FIXME maybe this is the issue with neg equivs?
                  otherid = other.id_
              else:
                  otherid = other
  
              self.out_graph.add((self.id_, owl.equivalentClass, otherid))
              self._equivalent_bags_ids.add(otherid)
  
          return self
docs: as implemented this acts as a permenant bag union operator
              and therefore should be used with extreme caution since
              in any given context the computed label/identifier will
              no longer reflect the entailed/reasoned bag
  
              In a static context this means that we might want to have
              an ilxtr:assertedAlwaysImplies -> bag union neuron