LSST Applications g0fba68d861+5616995c1c,g1ebb85f214+2420ccdea7,g1fd858c14a+44c57a1f81,g21d47ad084+8e51fce9ac,g262e1987ae+1a7d68eb3b,g2cef7863aa+3bd8df3d95,g35bb328faa+fcb1d3bbc8,g36ff55ed5b+2420ccdea7,g47891489e3+5c6313fe9a,g53246c7159+fcb1d3bbc8,g646c943bdb+dbb9921566,g67b6fd64d1+5c6313fe9a,g6bd32b75b5+2420ccdea7,g74acd417e5+37fc0c974d,g786e29fd12+cf7ec2a62a,g86c591e316+6e13bcb9e9,g87389fa792+1e0a283bba,g89139ef638+5c6313fe9a,g90f42f885a+fce05a46d3,g9125e01d80+fcb1d3bbc8,g93e38de9ac+5345a64125,g95a1e89356+47d08a1cc6,g97be763408+bba861c665,ga9e4eb89a6+85210110a1,gb0b61e0e8e+1f27f70249,gb58c049af0+f03b321e39,gb89ab40317+5c6313fe9a,gc4e39d7843+4e09c98c3d,gd16ba4ae74+5402bcf54a,gd8ff7fe66e+2420ccdea7,gd9a9a58781+fcb1d3bbc8,gdab6d2f7ff+37fc0c974d,gde280f09ee+604b327636,ge278dab8ac+50e2446c94,ge410e46f29+5c6313fe9a,gef3c2e6661+6b480e0fb7,gf67bdafdda+5c6313fe9a,gffca2db377+fcb1d3bbc8,v29.2.0.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
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}
Region is a minimal interface for 2-dimensional regions on the unit sphere.
Definition Region.h:89
virtual std::unique_ptr< Region > clone() const =0
clone returns a deep copy of this region.

◆ 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}

◆ 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}
T data(T... args)
T size(T... args)