CompoundModel¶

class
astropy.modeling.
CompoundModel
(op, left, right, name=None, inverse=None)[source]¶ Bases:
astropy.modeling.Model
Base class for compound models.
While it can be used directly, the recommended way to combine models is through the model operators.
Attributes Summary
eqcons
List of parameter equality constraints. fittable
Set the fittable attribute on a compound model. has_user_bounding_box
A flag indicating whether or not a custom bounding_box has been assigned to this model by a user, via assignment to model.bounding_box
.ineqcons
List of parameter inequality constraints. input_units
This property is used to indicate what units or sets of units the evaluate method expects, and returns a dictionary mapping inputs to units (or None
if any units are accepted).input_units_allow_dimensionless
Allow dimensionless input (and corresponding output). input_units_equivalencies
input_units_strict
Enforce strict units on inputs to evaluate. inverse
Returns a new Model
instance which performs the inverse transform, if an analytic inverse is defined for this model.isleaf
n_inputs
The number of inputs of a model. n_outputs
The number of outputs of a model. n_submodels
Return the number of components in a single model, which is obviously 1. param_names
An ordered list of parameter names. return_units
This property is used to indicate what units or sets of units the output of evaluate should be in, and returns a dictionary mapping outputs to units (or None
if any units are accepted).submodel_names
Return the names of submodels in a CompoundModel
.Methods Summary
__call__
(self, \*args, \*\*kw)Evaluate this model using the given input(s) and the parameter values that were specified when the model was instantiated. both_inverses_exist
(self)if both members of this compound model have inverses return True evaluate
(self, \*args, \*\*kwargs)Evaluate the model on some input variables. has_inverse
(self)inputs_map
(self)Map the names of the inputs to this ExpressionTree to the inputs to the leaf models. outputs_map
(self)Map the names of the outputs to this ExpressionTree to the outputs to the leaf models. rename
(self, name)Creates a copy of this model class with a new name, inputs or outputs. render
(self[, out, coords])Evaluate a model at fixed positions, respecting the bounding_box
.traverse_postorder
(self[, include_operator])Postorder traversal of the CompoundModel tree. Attributes Documentation

eqcons
¶ List of parameter equality constraints.

fittable
¶ Set the fittable attribute on a compound model.

has_user_bounding_box
¶ A flag indicating whether or not a custom bounding_box has been assigned to this model by a user, via assignment to
model.bounding_box
.

ineqcons
¶ List of parameter inequality constraints.

input_units
¶ This property is used to indicate what units or sets of units the evaluate method expects, and returns a dictionary mapping inputs to units (or
None
if any units are accepted).Model subclasses can also use function annotations in evaluate to indicate valid input units, in which case this property should not be overridden since it will return the input units based on the annotations.

input_units_allow_dimensionless
¶ Allow dimensionless input (and corresponding output). If this is True, input values to evaluate will gain the units specified in input_units. If this is a dictionary then it should map input name to a bool to allow dimensionless numbers for that input. Only has an effect if input_units is defined.

input_units_equivalencies
¶

input_units_strict
¶ Enforce strict units on inputs to evaluate. If this is set to True, input values to evaluate will be in the exact units specified by input_units. If the input quantities are convertible to input_units, they are converted. If this is a dictionary then it should map input name to a bool to set strict input units for that parameter.

inverse
¶ Returns a new
Model
instance which performs the inverse transform, if an analytic inverse is defined for this model.Even on models that don’t have an inverse defined, this property can be set with a manuallydefined inverse, such a precomputed or experimentally determined inverse (often given as a
PolynomialModel
, but not by requirement).A custom inverse can be deleted with
del model.inverse
. In this case the model’s inverse is reset to its default, if a default exists (otherwise the default is to raiseNotImplementedError
).Note to authors of
Model
subclasses: To define an inverse for a model simply override this property to return the appropriate model representing the inverse. The machinery that will make the inverse manuallyoverridable is added automatically by the base class.

isleaf
¶

n_inputs
¶ The number of inputs of a model.

n_outputs
¶ The number of outputs of a model.

n_submodels
¶ Return the number of components in a single model, which is obviously 1.

param_names
¶ An ordered list of parameter names.

return_units
¶ This property is used to indicate what units or sets of units the output of evaluate should be in, and returns a dictionary mapping outputs to units (or
None
if any units are accepted).Model subclasses can also use function annotations in evaluate to indicate valid output units, in which case this property should not be overridden since it will return the return units based on the annotations.

submodel_names
¶ Return the names of submodels in a
CompoundModel
.
Methods Documentation

__call__
(self, *args, **kw)[source]¶ Evaluate this model using the given input(s) and the parameter values that were specified when the model was instantiated.

inputs_map
(self)[source]¶ Map the names of the inputs to this ExpressionTree to the inputs to the leaf models.

outputs_map
(self)[source]¶ Map the names of the outputs to this ExpressionTree to the outputs to the leaf models.

rename
(self, name)[source]¶ Creates a copy of this model class with a new name, inputs or outputs.
The new class is technically a subclass of the original class, so that instance and type checks will still work. For example:
>>> from astropy.modeling.models import Rotation2D >>> SkyRotation = Rotation2D.rename('SkyRotation') >>> SkyRotation <class 'astropy.modeling.core.SkyRotation'> Name: SkyRotation (Rotation2D) N_inputs: 2 N_outputs: 2 Fittable parameters: ('angle',) >>> issubclass(SkyRotation, Rotation2D) True >>> r = SkyRotation(90) >>> isinstance(r, Rotation2D) True

render
(self, out=None, coords=None)[source]¶ Evaluate a model at fixed positions, respecting the
bounding_box
.The key difference relative to evaluating the model directly is that this method is limited to a bounding box if the
Model.bounding_box
attribute is set.Parameters:  out :
numpy.ndarray
, optional An array that the evaluated model will be added to. If this is not given (or given as
None
), a new array will be created. coords : array_like, optional
An array to be used to translate from the model’s input coordinates to the
out
array. It should have the property thatself(coords)
yields the same shape asout
. Ifout
is not specified,coords
will be used to determine the shape of the returned array. If this is not provided (or None), the model will be evaluated on a grid determined byModel.bounding_box
.
Returns:  out :
numpy.ndarray
The model added to
out
ifout
is notNone
, or else a new array from evaluating the model overcoords
. Ifout
andcoords
are bothNone
, the returned array is limited to theModel.bounding_box
limits. IfModel.bounding_box
isNone
,arr
orcoords
must be passed.
Raises:  ValueError
If
coords
are not given and the theModel.bounding_box
of this model is not set.
Examples
 out :
