# Class AbstractMathTransform.Inverse

Object
FormattableObject
AbstractMathTransform
Inverse

All Implemented Interfaces:
  `Parameterized`, `LenientComparable`, `Printable`, `MathTransform`

Direct Known Subclasses:
  `AbstractMathTransform1D​.Inverse`, `AbstractMathTransform2D​.Inverse`

Enclosing class:
  `AbstractMathTransform`

protected abstract static class AbstractMathTransform.Inverse extends AbstractMathTransform
Base class for implementations of inverse math transforms. Subclasses need to implement the `inverse()` method.

## Serialization

This object may or may not be serializable, at implementation choices. Most Apache SIS implementations are serializable, but the serialized objects are not guaranteed to be compatible with future SIS versions. Serialization should be used only for short term storage or RMI between applications running the same SIS version.

Since:
  0.5

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class AbstractMathTransform

  `AbstractMathTransform​.Inverse`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `Inverse()`
  Constructs an inverse math transform.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected int`
  `computeHashCode()`
  Computes a hash value for this transform.
  `Matrix`
  `derivative(DirectPosition point)`
  Gets the derivative of this transform at a point.
  `boolean`
  `equals(Object object, ComparisonMode mode)`
  Compares the specified object with this inverse math transform for equality.
  `protected String`
  `formatTo(Formatter formatter)`
  Formats the inner part of a Well Known Text version 1 (WKT 1) element.
  `Optional<Envelope>`
  `getDomain(DomainDefinition criteria)`
  Returns the ranges of coordinate values which can be used as inputs.
  `int`
  `getSourceDimensions()`
  Gets the dimension of input points.
  `int`
  `getTargetDimensions()`
  Gets the dimension of output points.
  `abstract MathTransform`
  `inverse()`
  Returns the inverse of this math transform.
  `boolean`
  `isIdentity()`
  Tests whether this transform does not move any points.

  ### Methods inherited from class AbstractMathTransform

  `equals, getContextualParameters, getParameterDescriptors, getParameterValues, hashCode, transform, transform, transform, transform, transform, transform, tryConcatenate, tryConcatenate`

  ### Methods inherited from class FormattableObject

  `print, toString, toString, toWKT`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface MathTransform

  `toWKT`

- ## Constructor Details

  - ### Inverse

    protected Inverse()
    Constructs an inverse math transform.

- ## Method Details

  - ### getSourceDimensions

    public int getSourceDimensions()
    Gets the dimension of input points. The default implementation returns the dimension of output points of the inverse math transform.
    Specified by:
      `getSourceDimensions` in interface `MathTransform`
    Specified by:
      `getSourceDimensions` in class `AbstractMathTransform`
    Returns:
      the number of dimensions of input points.
    See Also:
      - `DefaultOperationMethod​.getSourceDimensions()`

  - ### getTargetDimensions

    public int getTargetDimensions()
    Gets the dimension of output points. The default implementation returns the dimension of input points of the inverse math transform.
    Specified by:
      `getTargetDimensions` in interface `MathTransform`
    Specified by:
      `getTargetDimensions` in class `AbstractMathTransform`
    Returns:
      the number of dimensions of output points.
    See Also:
      - `DefaultOperationMethod​.getTargetDimensions()`

  - ### getDomain

    public Optional<Envelope> getDomain(DomainDefinition criteria) throws TransformException
    Returns the ranges of coordinate values which can be used as inputs. The default implementation invokes `inverse()​.getDomain(criteria)` and transforms the returned envelope.
    Overrides:
      `getDomain` in class `AbstractMathTransform`
    Parameters:
      `criteria` - controls the definition of transform domain.
    Returns:
      estimation of a domain where this transform is considered numerically applicable.
    Throws:
      `TransformException` - if the domain cannot be estimated.
    Since:
      1.3
    See Also:
      - `MathTransforms​.getDomain(MathTransform)`
      - `CoordinateOperation​.getDomainOfValidity()`

  - ### derivative

    public Matrix derivative(DirectPosition point) throws TransformException
    Gets the derivative of this transform at a point. The default implementation computes the inverse of the matrix returned by the inverse math transform.
    Specified by:
      `derivative` in interface `MathTransform`
    Overrides:
      `derivative` in class `AbstractMathTransform`
    Parameters:
      `point` - the coordinate tuple where to evaluate the derivative.
    Returns:
      the derivative at the specified point (never `null`).
    Throws:
      `NullPointerException` - if the derivative depends on coordinates and `point` is `null`.
      `MismatchedDimensionException` - if `point` does not have the expected dimension.
      `TransformException` - if the derivative cannot be evaluated at the specified point.

  - ### inverse

    public abstract MathTransform inverse()
    Returns the inverse of this math transform. The returned transform should be the enclosing math transform.
    Specified by:
      `inverse` in interface `MathTransform`
    Overrides:
      `inverse` in class `AbstractMathTransform`
    Returns:
      the inverse of this transform.

  - ### isIdentity

    public boolean isIdentity()
    Tests whether this transform does not move any points. The default implementation delegates this tests to the inverse math transform.
    Specified by:
      `isIdentity` in interface `MathTransform`
    Overrides:
      `isIdentity` in class `AbstractMathTransform`
    Returns:
      `true` if this `MathTransform` is an identity transform; `false` otherwise.

  - ### computeHashCode

    protected int computeHashCode()
    Computes a hash value for this transform. This method is invoked by `AbstractMathTransform​.hashCode()` when first needed.
    Overrides:
      `computeHashCode` in class `AbstractMathTransform`
    Returns:
      the hash code value. This value may change between different execution of the Apache SIS library.

  - ### equals

    public boolean equals(Object object, ComparisonMode mode)
    Compares the specified object with this inverse math transform for equality. The default implementation tests if `object` in an instance of the same class as `this`, and if so compares their inverse `MathTransform`.
    Specified by:
      `equals` in interface `LenientComparable`
    Overrides:
      `equals` in class `AbstractMathTransform`
    Parameters:
      `object` - the object to compare with this transform.
      `mode` - the strictness level of the comparison. Default to `STRICT`.
    Returns:
      `true` if the given object is considered equals to this math transform.
    See Also:
      - `Utilities​.deepEquals(Object, Object, ComparisonMode)`

  - ### formatTo

    protected String formatTo(Formatter formatter)
    Formats the inner part of a Well Known Text version 1 (WKT 1) element. If this inverse math transform has any parameter values, then this method formats the WKT as in the super-class method. Otherwise this method formats the math transform as an `"Inverse_MT"` entity.

    #### Compatibility note

    `Param_MT` and `Inverse_MT` are defined in the WKT 1 specification only.
    Overrides:
      `formatTo` in class `AbstractMathTransform`
    Parameters:
      `formatter` - the formatter to use.
    Returns:
      the WKT element name, which is `"Param_MT"` or `"Inverse_MT"` in the default implementation.
    See Also:
      - `DefaultMathTransformFactory​.createFromWKT(String)`