code: def signatures(self, all_are_optional: Optional[bool] = False) -> List[str]:
          
          if self._type_reference:
              # This assumes that references are to things that have signatures
              ref = self._context.reference(self._type_reference)
              if not getattr(ref, 'signatures', None):
                  raise NotImplementedError("Reference to " + self._type_reference + " is not valid")
              return self._context.reference(self._type_reference).signatures(all_are_optional)
          else:
              return [f"{self._names[rn]}: {self.python_type()} = " 
                      f"{self._ebnf.mt_value(self._typ)}" for rn, cn in self._names.items() if is_valid_python(cn)]
docs: Return the __init__ signature element(s) (var: type = default value).  Note that signatures are not
          generated for non-python names, although we do take the liberty of suffixing a '_' for reserved words
          (e.g. class: @int  generates "class_: int = None"
  
          :param all_are_optional: If True, all items are considered to be optional
  
          :return: List of signatures