docs: def from_callable(cls, func, ignored_parameters=set()):
          """
          Reads a function or method signature to produce a set of parameters
          """
          group = cls()
          signature = inspect.signature(func)
          for parameter in signature.parameters.values():
              if parameter.name.startswith('_') or parameter.name in ignored_parameters:
                  continue
              parameter = Parameter.from_callable_parameter(parameter)
              group[parameter.name] = parameter
          return group