class eradiate.scenes.spectra._core.SpectrumFactory(registry=_Nothing.NOTHING)[source]#

Bases: Factory

alias(type_id, alias_id, overwrite_id=False)#

Register a new alias to a registered type.

  • type_id – ID of the aliased type.

  • alias_id – Created alias ID.



New in version 22.2.0.

convert(value=<class 'dessinemoi._core._Missing'>, *, allowed_cls=None)#

Convert a dictionary to one of the types supported by the factory.


All arguments, except self and value, are keyword-only.

  • value – Value to attempt conversion of. If value is a dictionary, the method tries to convert it to a registered type based on the type. If value is not a dictionary, it is returned without change. If value is unset, the method returns a callable which can later be used for conversion.

  • allowed_cls – Types to restrict conversion to. If set, value will be checked and an exception will be raised if it does not have one of the allowed types.


Created object if value is a dictionary; value otherwise.


TypeError – If allowed_cls is specified and value.type refers to a disallowed type or type(value) is disallowed.

Changed in version 21.3.0: Made all args keyword-only except for value.


Generate a converter wrapping SpectrumFactory.convert() to handle defaults for shortened spectrum definitions. The produced converter processes a parameter value as follows:

  • if value is an int, a float or a pint.Quantity, the converter calls itself using a dictionary {"type": "uniform", "quantity": quantity, "value": value};

  • if value is a dictionary, it adds a "quantity": quantity entry for the following values of the "type" entry:

    • "uniform";

    • "interpolated";

    • "multi_delta";

  • otherwise, it forwards value to SpectrumFactory.convert().


quantity (str or PhysicalQuantity) – Quantity specifier (converted by PhysicalQuantity). See PhysicalQuantity.spectrum() for suitable values.


callable() – Generated converter.

create(type_id, allowed_cls=None, construct=None, args=None, kwargs=None)#

Create a new instance of a registered type.

  • type_id – ID of the type to be instantiated.

  • allowed_cls – If not None, one or several types to which creation shall be restricted. If type_id does not reference one of these allowed types, an exception will be raised.

  • construct – If not None, attempt instantiation using a class method constructor instead of the default constructor.

  • args – A sequence of arguments to pass to the constructor of the created type.

  • kwargs – A mapping of keyword arguments to passed to the constructor of the created type.


Created object.

  • ValueError – If type_id does not reference a registered type.

  • TypeError – If the requested type is not allowed.

Changed in version 21.2.0: Added construct keyword argument.


Return the type corresponding to the requested type ID. Lazy types will be loaded.


type_id – ID of a registered type.


Corresponding type.

New in version 22.1.1.

register(cls=<class 'dessinemoi._core._Missing'>, *, type_id=None, dict_constructor=None, aliases=None, overwrite_id=False, allow_lazy=True)#

If parameter cls is passed, register cls to the factory. Otherwise, i.e. if this method is used as a decorator, register the decorated class to the factory.


All arguments, except cls, are keyword-only.

  • cls – If set, type to register to the factory. If unset, this function returns a callable which can be used to register classes. In practice, this parameter is unset when the method is used as a class decorator. A LazyType instance or a string convertible to LazyType may also be passed.

  • type_id – Identifier string used to register cls. Required if cls is a lazy type or if it does not specify its identifier itself.

  • dict_constructor – Class method to be used for dictionary-based construction. If None, the default constructor is used.

  • aliases – If True, a given type can be registered multiple times under different IDs.

  • overwrite_id – If True, existing IDs can be overwritten.

  • allow_lazy – If False, force eager loading of lazy types.

  • ValueError – If allow_aliases is False and cls is already registered.

  • ValueError – If allow_id_overwrite is False and type_id is already used to reference a type in the registry.

Changed in version 21.3.0: Made keyword-only.

Changed in version 21.3.0: Added dict_constructor argument.

Changed in version 22.1.0: Added allow_lazy argument. Accept LazyType and strings for cls.

Changed in version 22.2.0: Renamed allow_id_overwrite to overwrite_id. Removed allow_aliases, replaced by aliases.

register_lazy_batch(specs, cls_prefix='')#

Register multiple lazy types at once.

  • specs (list of tuple[str, str, dict]) – A list of (cls, type_id, kwargs) tuples where cls is the name of the target type (relative to cls_prefix), type_id is the ID for the registered type and kwargs is a dictionary containing keyword arguments for the Factory.register() method.

  • cls_prefix (str) – A prefix relative to which lazy type names are expressed.

property registered_types#

List of currently registered types, without duplicates.

New in version 21.3.0.


Dictionary holding the factory registry.

Changed in version 21.3.0: Changed type from Dict[str, Type] to Dict[str, FactoryRegistryEntry].