# CompoundModel¶

class astropy.modeling.CompoundModel(op, left, right, name=None, inverse=None)[source]

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. 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__(*args, **kw) Evaluate this model using the given input(s) and the parameter values that were specified when the model was instantiated. if both members of this compound model have inverses return True evaluate(*args, **kw) Evaluate the model on some input variables. Map the names of the inputs to this ExpressionTree to the inputs to the leaf models. Map the names of the outputs to this ExpressionTree to the outputs to the leaf models. rename(name) Creates a copy of this model class with a new name, inputs or outputs. render([out, coords]) Evaluate a model at fixed positions, respecting the bounding_box. replace_submodel(name, model) Construct a new CompoundModel instance from an existing CompoundModel, replacing the named submodel with a new model. traverse_postorder([include_operator]) Postorder traversal of the CompoundModel tree.

Attributes Documentation

eqcons
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
input_units
input_units_allow_dimensionless
input_units_equivalencies
input_units_strict
isleaf
n_inputs

The number of inputs of a model.

n_outputs

The number of outputs of a model.

n_submodels
param_names

An ordered list of parameter names.

return_units
submodel_names

Return the names of submodels in a CompoundModel.

Methods Documentation

__call__(*args, **kw)[source]

Evaluate this model using the given input(s) and the parameter values that were specified when the model was instantiated.

both_inverses_exist()[source]

if both members of this compound model have inverses return True

evaluate(*args, **kw)[source]

Evaluate the model on some input variables.

inputs_map()[source]

Map the names of the inputs to this ExpressionTree to the inputs to the leaf models.

outputs_map()[source]

Map the names of the outputs to this ExpressionTree to the outputs to the leaf models.

rename(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(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
outnumpy.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.

coordsarray_like, optional

An array to be used to translate from the model’s input coordinates to the out array. It should have the property that self(coords) yields the same shape as out. If out 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 by Model.bounding_box.

Returns
outnumpy.ndarray

The model added to out if out is not None, or else a new array from evaluating the model over coords. If out and coords are both None, the returned array is limited to the Model.bounding_box limits. If Model.bounding_box is None, arr or coords must be passed.

Raises
ValueError

If coords are not given and the the Model.bounding_box of this model is not set.

Examples

Efficient Model Rendering with Bounding Boxes

replace_submodel(name, model)[source]

Construct a new CompoundModel instance from an existing CompoundModel, replacing the named submodel with a new model.

In order to ensure that inverses and names are kept/reconstructed, it’s necessary to rebuild the CompoundModel from the replaced node all the way back to the base. The original CompoundModel is left untouched.

Parameters
namestr

name of submodel to be replaced

modelModel

replacement model

traverse_postorder(include_operator=False)[source]

Postorder traversal of the CompoundModel tree.