code: def make_generic_copy(self, deeply=False):
          
          if deeply:
              kwargs = deepcopy(self.__dict__)
          else:
              kwargs = self.__dict__.copy()
          for attr in ['evidence', 'belief', 'uuid', 'supports', 'supported_by',
                       'is_activation']:
              kwargs.pop(attr, None)
          for attr in ['_full_hash', '_shallow_hash']:
              my_hash = kwargs.pop(attr, None)
              my_shallow_hash = kwargs.pop(attr, None)
          for attr in self._agent_order:
              attr_value = kwargs.get(attr)
              if isinstance(attr_value, list):
                  kwargs[attr] = sorted_agents(attr_value)
          new_instance = self.__class__(**kwargs)
          new_instance._full_hash = my_hash
          new_instance._shallow_hash = my_shallow_hash
          return new_instance
docs: Make a new matching Statement with no provenance.
  
          All agents and other attributes besides evidence, belief, supports, and
          supported_by will be copied over, and a new uuid will be assigned.
          Thus, the new Statement will satisfy `new_stmt.matches(old_stmt)`.
  
          If `deeply` is set to True, all the attributes will be deep-copied,
          which is comparatively slow. Otherwise, attributes of this statement
          may be altered by changes to the new matching statement.