code: def extend(self, name, opts, info):
          '''
          Extend this type to construct a sub-type.
  
          Args:
              name (str): The name of the new sub-type.
              opts (dict): The type options for the sub-type.
              info (dict): The type info for the sub-type.
  
          Returns:
              (synapse.types.Type): A new sub-type instance.
          '''
          tifo = self.info.copy()
          tifo.update(info)
  
          topt = self.opts.copy()
          topt.update(opts)
  
          tobj = self.__class__(self.modl, name, tifo, topt)
          tobj.subof = self.name
          return tobf extend(self, name, opts, info):
          '''
          Extend this type to construct a sub-type.
  
          Args:
              name (str): The name of the new sub-type.
              opts (dict): The type options for the sub-type.
              info (dict): The type info for the sub-type.
  
          Returns:
              (synapse.types.Type): A new sub-type instance.
          '''
          tifo = self.info.copy()
          tifo.update(info)
  
          topt = self.opts.copy()
          topt.update(opts)
  
          tobj = self.__class__(self.modl, name, tifo, topt)
          tobj.subof = self.name
          return tobj
docs: Extend this type to construct a sub-type.
  
          Args:
              name (str): The name of the new sub-type.
              opts (dict): The type options for the sub-type.
              info (dict): The type info for the sub-type.
  
          Returns:
              (synapse.types.Type): A new sub-type instance.