LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Functions
lsst::sphgeom::python Namespace Reference

Functions

ptrdiff_t convertIndex (ptrdiff_t len, pybind11::int_ i)
 Convert a Python index i over a sequence with length len to a non-negative (C++ style) index, and perform a bounds-check.
 
pybind11::bytes encode (Region const &self)
 Encode a Region as a pybind11 bytes object.
 
template<typename R >
std::unique_ptr< R > decode (pybind11::bytes bytes)
 Decode a Region from a pybind11 bytes object.
 
template<typename S >
std::vector< std::unique_ptr< Region > > convert_region_sequence (S const &seq)
 Create a vector of Region (or Region-subclass) pointers by copying the regions from a sized Python iterable (e.g.
 

Function Documentation

◆ convert_region_sequence()

template<typename S >
std::vector< std::unique_ptr< Region > > lsst::sphgeom::python::convert_region_sequence ( S const & seq)
inline

Create a vector of Region (or Region-subclass) pointers by copying the regions from a sized Python iterable (e.g.

S == py::tuple).

Note that the pybind11 built-in STL conversions don't work, because they use unique_ptr - we can't transfer ownership out of Python, and those converters don't know about our clone methods.

Definition at line 83 of file utils.h.

83 {
85 result.reserve(seq.size());
86 for (pybind11::handle py_region : seq) {
87 result.push_back(py_region.cast<Region const &>().clone());
88 }
89 return result;
90}
py::object result
Definition _schema.cc:429
Region is a minimal interface for 2-dimensional regions on the unit sphere.
Definition Region.h:87
virtual std::unique_ptr< Region > clone() const =0
clone returns a deep copy of this region.
T reserve(T... args)

◆ convertIndex()

ptrdiff_t lsst::sphgeom::python::convertIndex ( ptrdiff_t len,
pybind11::int_ i )
inline

Convert a Python index i over a sequence with length len to a non-negative (C++ style) index, and perform a bounds-check.

Definition at line 48 of file utils.h.

48 {
49 auto j = static_cast<ptrdiff_t>(i);
50 if ((j == -1 && PyErr_Occurred()) || j < -len || j >= len) {
51 PyErr_Clear();
52 throw pybind11::index_error(
53 pybind11::str("Index {} not in range({}, {})")
54 .format(i, -len, len));
55 }
56 return (j < 0) ? j + len : j;
57}

◆ decode()

template<typename R >
std::unique_ptr< R > lsst::sphgeom::python::decode ( pybind11::bytes bytes)

Decode a Region from a pybind11 bytes object.

Definition at line 69 of file utils.h.

69 {
70 std::uint8_t const *buffer = reinterpret_cast<std::uint8_t const *>(
71 PYBIND11_BYTES_AS_STRING(bytes.ptr()));
72 size_t n = static_cast<size_t>(PYBIND11_BYTES_SIZE(bytes.ptr()));
73 return R::decode(buffer, n);
74}
table::Key< table::Array< std::uint8_t > > bytes
Definition python.h:135

◆ encode()

pybind11::bytes lsst::sphgeom::python::encode ( Region const & self)
inline

Encode a Region as a pybind11 bytes object.

Definition at line 61 of file utils.h.

61 {
62 std::vector<std::uint8_t> bytes = self.encode();
63 return pybind11::bytes(reinterpret_cast<char const *>(bytes.data()),
64 bytes.size());
65}