LSST Applications 30.0.7,g0e76e35be5+e8e946ae08,g19811a7679+138f7293ba,g199a45376c+5e234f8357,g1fd858c14a+2f48dbc4c4,g262e1987ae+fb36cac54d,g29ae962dfc+d9108a0941,g2c21b0017a+4f59a27f16,g31e44d4a5c+b0138be388,g33ac35c1f1+28b9f72785,g35bb328faa+b0138be388,g40c9b15c53+823ad735c1,g47891489e3+bcc48a0b46,g53246c7159+b0138be388,g64539dfbff+e8e946ae08,g67b6fd64d1+bcc48a0b46,g74acd417e5+422380537a,g76965917b2+a5ca99c4d9,g786e29fd12+796b79145d,g7aefaa3e3d+dc0c200193,g86b635cae8+734fe384f0,g87389fa792+d8b5378923,g89139ef638+bcc48a0b46,g8bbb235e95+3f4f7f9447,g8ea07a8fe4+78a4c88802,g9290983e33+ffdc83c6f7,g92c671f44c+e8e946ae08,gaa753fd333+03f406da14,gbf99507273+b0138be388,gc49b57b85e+8df26ee1f0,gca7fc764a6+bcc48a0b46,gd7ef33dd92+bcc48a0b46,gdab6d2f7ff+422380537a,ge1c02a5578+b0138be388,ge410e46f29+bcc48a0b46,ge80df9fc40+e6db5413d1,geaed405ab2+1de65a85c6,gf5dcc679e7+35a0ce2edd,gf5f1c85443+e8e946ae08
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)