Skip to content
Back to top
View this page

# LabelMapperDict

class gwcs.selector.LabelMapperDict(inputs, mapper, inputs_mapping=None, atol=1e-08, name=None, **kwargs)

  Bases: `_LabelMapper`

  Maps a number to a transform, which when evaluated returns a label.

  Use case: inverse transforms of an IFU. For an IFU observation, the keys are constant angles (corresponding to a slice) and values are transforms which return a slice number.

  Parameters:
    inputs tuple of str

      Names for the inputs, e.g. (‘alpha’, ‘beta’, lam’)

    mapper dict

      Maps key values to transforms.

    inputs_mapping `Mapping`

      An optional Mapping model to be prepended to the LabelMapper with the purpose to filter the inputs or change their order. It returns a number which is one of the keys of `mapper`.

    atol float

      Absolute tolerance when comparing inputs to `mapper.keys`. It is passed to np.isclose.

    name str

      The name of this transform.

  Attributes Summary

  `atol` |
  `bbox_with_units` |
  `bounding_box` | A `tuple` of length `n_inputs` defining the bounding box limits, or raise `NotImplementedError` for no bounding_box.
  `bounds` | A `dict` mapping parameter names to their upper and lower bounds as `(min, max)` tuples or `[min, max]` lists.
  `cov_matrix` | Fitter should set covariance matrix, if available.
  `eqcons` | List of parameter equality constraints.
  `fittable` |
  `fixed` | A `dict` mapping parameter names to their fixed constraint.
  `has_bounds` | Whether the model has any bounds constraints.
  `has_fixed` | Whether the model has any fixed constraints.
  `has_tied` | Whether the model has any tied constraints.
  `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`.
  `has_user_inverse` | A flag indicating whether or not a custom inverse model has been assigned to this model by a user, via assignment to `model.inverse`.
  `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.
  `inputs` |
  `inputs_mapping` |
  `inverse` | Returns a new `Model` instance which performs the inverse transform, if an analytic inverse is defined for this model.
  `linear` |
  `mapper` |
  `meta` | A dict-like object to store optional information.
  `model_constraints` | Primarily for informational purposes, these are the types of constraints that constrain model evaluation.
  `model_set_axis` | The index of the model set axis--that is the axis of a parameter array that pertains to which model a parameter value pertains to--as specified when the model was initialized.
  `n_inputs` | The number of inputs.
  `n_outputs` |
  `n_submodels` | Return the number of components in a single model, which is obviously 1.
  `name` | User-provided name for this model instance.
  `no_label` |
  `outputs` |
  `param_names` | Names of the parameters that describe models of this type.
  `param_sets` | Return parameters as a pset.
  `parameter_constraints` | Primarily for informational purposes, these are the types of constraints that can be set on a model's parameters.
  `parameters` | A flattened array of all parameter values in all parameter sets.
  `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).
  `separable` | A flag indicating whether a model is separable.
  `standard_broadcasting` |
  `stds` | Standard deviation of parameters, if covariance matrix is available.
  `sync_constraints` | This is a boolean property that indicates whether or not accessing constraints automatically check the constituent models current values.
  `tied` | A `dict` mapping parameter names to their tied constraint.
  `uses_quantity` | True if this model has been created with `Quantity` objects or if there are no parameters.

  Methods Summary

  `__call__`(*args, **kwargs) | Evaluate this model using the given input(s) and the parameter values that were specified when the model was instantiated.
  `coerce_units`([input_units, return_units, ...]) | Attach units to this (unitless) model.
  `copy`() | Return a copy of this model.
  `deepcopy`() | Return a deep copy of this model.
  `evaluate`(*args) | Evaluate the model on some input variables.
  `filter_inputs`(args, inputs_mapping) |
  `get_bounding_box`([with_bbox]) | Return the `bounding_box` of a model if it exists or `None` otherwise.
  `has_inverse`() | Returns True if the model has an analytic or user inverse defined.
  `input_shape`(inputs) | Get input shape for bounding_box evaluation.
  `output_units`(**kwargs) | Return a dictionary of output units for this model given a dictionary of fitting inputs and outputs.
  `prepare_inputs`(*inputs[, model_set_axis, ...]) | This method is used in `__call__` to ensure that all the inputs to the model can be broadcast into compatible shapes (if one or both of them are input as arrays), particularly if there are more than one parameter sets.
  `prepare_outputs`(broadcasted_shapes, ...) |
  `rename`([name, inputs, outputs]) | Return a copy of this model with a new name.
  `render`([out, coords]) | Evaluate a model at fixed positions, respecting the `bounding_box`.
  `set_slice_args`(*args) |
  `strip_units_from_tree`() |
  `sum_of_implicit_terms`(*args, **kwargs) | Evaluate the sum of any implicit model terms on some input variables.
  `with_units_from_data`(**kwargs) | Return an instance of the model which has units for which the parameter values are compatible with the data units specified.
  `without_units_for_data`(**kwargs) | Return an instance of the model for which the parameter values have been converted to the right units for the data, then the units have been stripped away.

  Attributes Documentation

  atol
  bbox_with_units
  bounding_box

    A `tuple` of length `n_inputs` defining the bounding box limits, or raise `NotImplementedError` for no bounding_box.

    The default limits are given by a `bounding_box` property or method defined in the class body of a specific model. If not defined then this property just raises `NotImplementedError` by default (but may be assigned a custom value by a user). `bounding_box` can be set manually to an array-like object of shape `(model.n_inputs, 2)`. For further usage, see astropy:bounding-boxes

    The limits are ordered according to the `numpy` `'C'` indexing convention, and are the reverse of the model input order, e.g. for inputs `('x', 'y', 'z')`, `bounding_box` is defined:

    - for 1D: `(x_low, x_high)`

    - for 2D: `((y_low, y_high), (x_low, x_high))`

    - for 3D: `((z_low, z_high), (y_low, y_high), (x_low, x_high))`

    Examples

    Setting the `bounding_box` limits for a 1D and 2D model:

        >>> from astropy.modeling.models import Gaussian1D, Gaussian2D
        >>> model_1d = Gaussian1D()
        >>> model_2d = Gaussian2D(x_stddev=1, y_stddev=1)
        >>> model_1d.bounding_box = (-5, 5)
        >>> model_2d.bounding_box = ((-6, 6), (-5, 5))

    Setting the bounding_box limits for a user-defined 3D `custom_model`:

        >>> from astropy.modeling.models import custom_model
        >>> def const3d(x, y, z, amp=1):
        ...    return amp
        ...
        >>> Const3D = custom_model(const3d)
        >>> model_3d = Const3D()
        >>> model_3d.bounding_box = ((-6, 6), (-5, 5), (-4, 4))

    To reset `bounding_box` to its default limits just delete the user-defined value–this will reset it back to the default defined on the class:

        >>> del model_1d.bounding_box

    To disable the bounding box entirely (including the default), set `bounding_box` to `None`:

        >>> model_1d.bounding_box = None
        >>> model_1d.bounding_box
        Traceback (most recent call last):
        NotImplementedError: No bounding box is defined for this model
        (note: the bounding box was explicitly disabled for this model;
        use `del model.bounding_box` to restore the default bounding box,
        if one is defined for this model).

  bounds

    A `dict` mapping parameter names to their upper and lower bounds as `(min, max)` tuples or `[min, max]` lists.

  cov_matrix

    Fitter should set covariance matrix, if available.

  eqcons

    List of parameter equality constraints.

  fittable = False
  fixed

    A `dict` mapping parameter names to their fixed constraint.

  has_bounds

    Whether the model has any bounds constraints.

  has_fixed

    Whether the model has any fixed constraints.

  has_tied

    Whether the model has any tied constraints.

  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`.

  has_user_inverse

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

  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 sub-classes 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 = None
  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.

  inputs
  inputs_mapping
  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 manually-defined inverse, such a pre-computed 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 raise `NotImplementedError`).

    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 manually-overridable is added automatically by the base class.

  linear = False
  mapper
  meta = None

    A dict-like object to store optional information.

  model_constraints = ('eqcons', 'ineqcons')

    Primarily for informational purposes, these are the types of constraints that constrain model evaluation.

  model_set_axis

    The index of the model set axis–that is the axis of a parameter array that pertains to which model a parameter value pertains to–as specified when the model was initialized.

    See the documentation on astropy:modeling-model-sets for more details.

  n_inputs

    The number of inputs.

  n_outputs = 1
  n_submodels

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

  name

    User-provided name for this model instance.

  no_label
  outputs
  param_names = ()

    Names of the parameters that describe models of this type.

    The parameters in this tuple are in the same order they should be passed in when initializing a model of a specific type. Some types of models, such as polynomial models, have a different number of parameters depending on some other property of the model, such as the degree.

    When defining a custom model class the value of this attribute is automatically set by the `Parameter` attributes defined in the class body.

  param_sets

    Return parameters as a pset.

    This is a list with one item per parameter set, which is an array of that parameter’s values across all parameter sets, with the last axis associated with the parameter set.

  parameter_constraints = ('fixed', 'tied', 'bounds')

    Primarily for informational purposes, these are the types of constraints that can be set on a model’s parameters.

  parameters

    A flattened array of all parameter values in all parameter sets.

    Fittable parameters maintain this list and fitters modify it.

  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 sub-classes 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.

  separable

    A flag indicating whether a model is separable.

  standard_broadcasting = False
  stds

    Standard deviation of parameters, if covariance matrix is available.

  sync_constraints

    This is a boolean property that indicates whether or not accessing constraints automatically check the constituent models current values. It defaults to True on creation of a model, but for fitting purposes it should be set to False for performance reasons.

  tied

    A `dict` mapping parameter names to their tied constraint.

  uses_quantity

    True if this model has been created with `Quantity` objects or if there are no parameters.

    This can be used to determine if this model should be evaluated with `Quantity` or regular floats.

  Methods Documentation

  __call__(*args, **kwargs)

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

  coerce_units(input_units=None, return_units=None, input_units_equivalencies=None, input_units_allow_dimensionless=False)

    Attach units to this (unitless) model.

    Parameters:
      input_units dict or tuple, optional

        Input units to attach. If dict, each key is the name of a model input, and the value is the unit to attach. If tuple, the elements are units to attach in order corresponding to `inputs`.

      return_units dict or tuple, optional

        Output units to attach. If dict, each key is the name of a model output, and the value is the unit to attach. If tuple, the elements are units to attach in order corresponding to `outputs`.

      input_units_equivalencies dict, optional

        Default equivalencies to apply to input values. If set, this should be a dictionary where each key is a string that corresponds to one of the model inputs.

      input_units_allow_dimensionless bool or dict, optional

        Allow dimensionless input. 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.

    Returns:
      `CompoundModel`

        A `CompoundModel` composed of the current model plus `UnitsMapping` model(s) that attach the units.

    Raises:
      ValueError

        If the current model already has units.

    Examples

    Wrapping a unitless model to require and convert units:

        >>> from astropy.modeling.models import Polynomial1D
        >>> from astropy import units as u
        >>> poly = Polynomial1D(1, c0=1, c1=2)
        >>> model = poly.coerce_units((u.m,), (u.s,))
        >>> model(u.Quantity(10, u.m))
        <Quantity 21. s>
        >>> model(u.Quantity(1000, u.cm))
        <Quantity 21. s>
        >>> model(u.Quantity(10, u.cm))
        <Quantity 1.2 s>

    Wrapping a unitless model but still permitting unitless input:

        >>> from astropy.modeling.models import Polynomial1D
        >>> from astropy import units as u
        >>> poly = Polynomial1D(1, c0=1, c1=2)
        >>> model = poly.coerce_units((u.m,), (u.s,), input_units_allow_dimensionless=True)
        >>> model(u.Quantity(10, u.m))
        <Quantity 21. s>
        >>> model(10)
        <Quantity 21. s>

  copy()

    Return a copy of this model.

    Uses a deep copy so that all model attributes, including parameter values, are copied as well.

  deepcopy()

    Return a deep copy of this model.

  evaluate(*args)

    Evaluate the model on some input variables.

  filter_inputs(args, inputs_mapping)
  get_bounding_box(with_bbox=True)

    Return the `bounding_box` of a model if it exists or `None` otherwise.

    Parameters:
      with_bbox

        The value of the `with_bounding_box` keyword argument when calling the model. Default is `True` for usage when looking up the model’s `bounding_box` without risk of error.

  has_inverse()

    Returns True if the model has an analytic or user inverse defined.

  input_shape(inputs)

    Get input shape for bounding_box evaluation.

  output_units(**kwargs)

    Return a dictionary of output units for this model given a dictionary of fitting inputs and outputs.

    The input and output Quantity objects should be given as keyword arguments.

    Notes

    This method is needed in order to be able to fit models with units in the parameters, since we need to temporarily strip away the units from the model during the fitting (which might be done by e.g. scipy functions).

    This method will force extra model evaluations, which maybe computationally expensive. To avoid this, one can add a return_units property to the model, see astropy:models_return_units.

  prepare_inputs(*inputs, model_set_axis=None, equivalencies=None, **kwargs)

    This method is used in `__call__` to ensure that all the inputs to the model can be broadcast into compatible shapes (if one or both of them are input as arrays), particularly if there are more than one parameter sets. This also makes sure that (if applicable) the units of the input will be compatible with the evaluate method.

  prepare_outputs(broadcasted_shapes, *outputs, **kwargs)
  classmethod rename(name=None, inputs=None, outputs=None)

    Return a copy of this model with a new name.

  render(out=None, coords=None)

    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 `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 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 `bounding_box`.

    Returns:
      out `numpy.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 `bounding_box` limits. If `bounding_box` is `None`, `arr` or `coords` must be passed.

    Raises:
      ValueError

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

    Examples

    astropy:bounding-boxes

  set_slice_args(*args)
  strip_units_from_tree()
  sum_of_implicit_terms(*args, **kwargs)

    Evaluate the sum of any implicit model terms on some input variables. This includes any fixed terms used in evaluating a linear model that do not have corresponding parameters exposed to the user. The prototypical case is `astropy.modeling.functional_models.Shift`, which corresponds to a function y = a + bx, where b=1 is intrinsically fixed by the type of model, such that sum_of_implicit_terms(x) == x. This method is needed by linear fitters to correct the dependent variable for the implicit term(s) when solving for the remaining terms (ie. a = y - bx).

  with_units_from_data(**kwargs)

    Return an instance of the model which has units for which the parameter values are compatible with the data units specified.

    The input and output Quantity objects should be given as keyword arguments.

    Notes

    This method is needed in order to be able to fit models with units in the parameters, since we need to temporarily strip away the units from the model during the fitting (which might be done by e.g. scipy functions).

    The units that the parameters will gain are not necessarily the units of the input data, but are derived from them. Model subclasses that want fitting to work in the presence of quantities need to define a `_parameter_units_for_data_units` method that takes the input and output units (as two dictionaries) and returns a dictionary giving the target units for each parameter.

  without_units_for_data(**kwargs)

    Return an instance of the model for which the parameter values have been converted to the right units for the data, then the units have been stripped away.

    The input and output Quantity objects should be given as keyword arguments.

    Notes

    This method is needed in order to be able to fit models with units in the parameters, since we need to temporarily strip away the units from the model during the fitting (which might be done by e.g. scipy functions).

    The units that the parameters should be converted to are not necessarily the units of the input data, but are derived from them. Model subclasses that want fitting to work in the presence of quantities need to define a `_parameter_units_for_data_units` method that takes the input and output units (as two dictionaries) and returns a dictionary giving the target units for each parameter.