Parameters#

class scarlet2.Parameters(base)[source]#

Bases: dict

Collection class that contains parameters

Collection of optimizable parameters

This class creates a Pytree with the same shape as base and with Parameter instances and the nodes corresponding to the optimized parameters in base.

base#

Module(s) the parameters refer to

Type:

Module or tuple of modules

Examples

>>> with Scene(model_frame) as scene:
>>>     Source(center1, spectrum1, morph1)
>>>     Source(center2, spectrum2, morph2)
>>>
>>> with Parameters(scene):
>>>     Parameter(scene.sources[0].spectrum.data,
>>>               name=f"spectrum:0",
>>>               constraint=constraints.positive,
>>>               stepsize=relative_step)
>>> maxiter = 200
>>> scene_ = scene.fit(observation, max_iter=maxiter)

This example defines a scene with two sources, initialized with their respective center, spectrum, and morphology parameters. It then fits observation by adjusting only the spectrum array of the first source for 200 steps.

__iadd__(name, node, parameter)[source]#

Add parameter to collection

Parameters:
  • name (str) – Parameter name

  • node (jnp.ndarray) – Parameter array in the base model

  • parameter (Parameter) – Parameter specification to be added

__isub__(name)[source]#

Remove parameter from collection

Parameters:

name (str) – Parameter name in the base model

clear() → None.  Remove all items from D.#
copy() → a shallow copy of D#
classmethod fromkeys(iterable, value=None, /)#

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)#

Return the value for key if key is in the dictionary, else default.

items() → a set-like object providing a view on D's items#
keys() → a set-like object providing a view on D's keys#
pop(k[, d]) → v, remove specified key and return the corresponding value.#

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()#

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

remap(other, exclude=None)[source]#

Add parameters from other to this collection

Every parameter is stored with the index of its node in the leaves of its base. If the structure of base changes, e.g. because a model component is replaced by one of a different type, these indices are invalid. This method matches nodes of other.base and base by their path in the tree, so that every parameter of other refers to the node at the same location in base. The Parameter instances of other are reused without modification.

Note that nodes are matched by location, so parameters are associated with the wrong nodes if elements are inserted into or removed from a list (e.g. sources).

Parameters:
  • other (Parameters) – Collection for a module with a (partially) matching structure

  • exclude (callable, optional) – Function other.base -> node that selects subtree(s) whose parameters are not added, as in equinox.tree_at()

Returns:

This collection

Return type:

Parameters

Raises:

RuntimeError – If a parameter of other is not excluded and has no node at the same path in base

Examples

>>> scene_ = eqx.tree_at(lambda sc: sc.sources[0].morphology, scene, sersic)
>>> with Parameters(scene_) as parameters:
>>>     parameters.remap(scene.parameters, exclude=lambda sc: sc.sources[0].morphology)
>>>     Parameter(scene_.sources[0].morphology.size, name="size:0", stepsize=0.1)
setdefault(key, default=None, /)#

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) → None.  Update D from dict/iterable E and F.#

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values() → an object providing a view on D's values#