def make_config_tensorflow( name: str, cls: Type, properties: Optional[Dict[str, Tuple[Type, field]]] = None, ): """ Given a tensorflow class, read its docstring and ``__init__`` parameters to generate a config class with properties containing the correct types, and default values. """ if properties is None: properties = {} doc_params = tensorflow_docstring_args(cls) properties.update(doc_params) return make_config( name, [tuple([key] + list(value)) for key, value in properties.items()] )
def make_pytorch_config( name: str, cls: Type, properties: Optional[Dict[str, Tuple[Type, field]]] = None, ): """ Given a class or function, read its docstring and ``__init__`` parameters to generate a config class with properties containing the correct types, and default values. """ if properties is None: properties = {} properties.update(inspect_pytorch_params(cls)) return make_config( name, [tuple([key] + list(value)) for key, value in properties.items()])
def mkscikit_config_cls( name: str, cls: Type, properties: Optional[Dict[str, Tuple[Type, field]]] = None, ): """ Given a scikit class, read its docstring and ``__init__`` parameters to generate a config class with properties containing the correct types, and default values. """ if properties is None: properties = {} parameters = inspect.signature(cls).parameters docstring = inspect.getdoc(cls) docparams = {} # Parse parameters and their datatypes from docstring last_param_name = None for line in docstring.split("\n"): if not ":" in line: continue param_name, dtypes = line.split(":", maxsplit=1) param_name = param_name.strip() dtypes = dtypes.strip() if not param_name in parameters or param_name in docparams: continue docparams[param_name] = dtypes last_param_name = param_name # Ensure all required parameters are present in docstring for param_name, param in parameters.items(): if param_name in ["args", "kwargs"]: continue if not param_name in docparams: raise ParameterNotInDocString( f"{param_name} for {cls.__qualname__}") properties[param_name] = scikit_doc_to_field(docparams[param_name], param) return make_config( name, [tuple([key] + list(value)) for key, value in properties.items()])
dffml_cls_ctx = type( name + "ScorerContext", (parentContext, ), {}, ) dffml_cls = type( name + "Scorer", (parentScorer, ), { "CONTEXT": dffml_cls_ctx, "CONFIG": make_config( name + "Config", [ tuple([key] + list(value)) for key, value in properties.items() ], ), "SCIKIT_SCORER": functools.partial(method), }, ) # Add the ENTRY_POINT_ORIG_LABEL dffml_cls = entrypoint(entrypoint_name)(dffml_cls) setattr(sys.modules[__name__], dffml_cls_ctx.__qualname__, dffml_cls_ctx) setattr(sys.modules[__name__], dffml_cls.__qualname__, dffml_cls)