22 """Python helpers for pybind11 wrapping of Transform classes and subclasses
24 .. _pybind11_transform_classes:
26 Transform Classes and Subclasses
27 --------------------------------
29 Transforms are instances of
30 lsst::afw::geom::Transform<FromEndpoint, ToEndpoint>
31 and subclasses, such as lsst::afw::geom::SkyWcs.
33 In Python the templated Transform classes have names such as
34 `lsst.afw.geom.TransformSpherePointToPoint2` for
35 `lsst::afw::geom::Transform<SpherePointEndpoint, Point2Endpoint>`
39 __all__ = [
"addTransformMethods",
"reduceTransform",
"transformRegistry"]
44 transformRegistry = {}
49 matrix = self._getJacobian(x)
50 matrix.shape = (self.toEndpoint.nAxes,
51 self.fromEndpoint.nAxes)
55 def then(self, next, simplify=True):
56 """Concatenate two transforms
58 The result of A.then(B) is is C(x) = B(A(x))
60 if self.toEndpoint == next.fromEndpoint:
61 return self._then(next, simplify=simplify)
64 "Cannot concatenate %r and %r: endpoints do not match."
69 """Unpickle a Transform object
81 The unpickled Transform.
83 return cls.readString(state)
87 """Pickle a Transform object
89 This provides the `__reduce__` implementation for a Transform.
91 return unpickleTransform, (
type(transform), transform.writeString())
95 """Add pure python methods to the specified Transform class, and register
96 the class in `transformRegistry`
98 All :ref:`_pybind11_transform_classes` must call this function.
102 cls : :ref:`_pybind11_transform_classes`
103 A Transform class or subclass, e.g.
104 `lsst.afw.geom.TransformPoint2ToSpherePoint`
106 global transformRegistry
107 className = cls.__name__
108 if className
in transformRegistry:
109 raise RuntimeError(f
"Class {className!r}={transformRegistry[className]} already registered; "
110 f
"cannot register class {cls}")
111 transformRegistry[cls.__name__] = cls
112 cls.getJacobian = getJacobian
114 cls.__reduce__ = reduceTransform