lsst.sphgeom
gdcc65144bf+d801c9999e
Toggle main menu visibility
Loading...
Searching...
No Matches
utils.h
1
/*
2
* This file is part of sphgeom.
3
*
4
* Developed for the LSST Data Management System.
5
* This product includes software developed by the LSST Project
6
* (http://www.lsst.org).
7
* See the COPYRIGHT file at the top-level directory of this distribution
8
* for details of code ownership.
9
*
10
* This software is dual licensed under the GNU General Public License and also
11
* under a 3-clause BSD license. Recipients may choose which of these licenses
12
* to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
13
* respectively. If you choose the GPL option then the following text applies
14
* (but note that there is still no warranty even if you opt for BSD instead):
15
*
16
* This program is free software: you can redistribute it and/or modify
17
* it under the terms of the GNU General Public License as published by
18
* the Free Software Foundation, either version 3 of the License, or
19
* (at your option) any later version.
20
*
21
* This program is distributed in the hope that it will be useful,
22
* but WITHOUT ANY WARRANTY; without even the implied warranty of
23
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24
* GNU General Public License for more details.
25
*
26
* You should have received a copy of the GNU General Public License
27
* along with this program. If not, see <http://www.gnu.org/licenses/>.
28
*/
29
30
#ifndef LSST_SPHGEOM_PYTHON_UTILS_H_
31
#define LSST_SPHGEOM_PYTHON_UTILS_H_
32
33
#include "pybind11/pybind11.h"
34
35
#include <limits>
36
#include <sstream>
37
#include <stdexcept>
38
#include <cstdint>
39
40
#include "
lsst/sphgeom/Region.h
"
41
42
namespace
lsst {
43
namespace
sphgeom
{
44
namespace
python {
45
48
inline
ptrdiff_t convertIndex(ptrdiff_t len, pybind11::int_ i) {
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
}
58
59
61
inline
pybind11::bytes encode(Region
const
&self) {
62
std::vector<std::uint8_t> bytes = self.encode();
63
return
pybind11::bytes(
reinterpret_cast<
char
const
*
>
(bytes.data()),
64
bytes.size());
65
}
66
68
template
<
typename
R>
69
std::unique_ptr<R> decode(pybind11::bytes bytes) {
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
}
75
82
template
<
typename
S>
83
inline
std::vector<std::unique_ptr<Region>> convert_region_sequence(S
const
& seq) {
84
std::vector<std::unique_ptr<Region>> result;
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
}
91
92
}
// python
93
}
// sphgeom
94
}
// lsst
95
96
#endif
// LSST_SPHGEOM_PYTHON_UTILS_H_
Region.h
This file defines an interface for spherical regions.
lsst::sphgeom
Definition
Angle.h:45
include
lsst
sphgeom
python
utils.h
Generated by
1.17.0