24#include "pybind11/pybind11.h"
25#include "pybind11/stl.h"
27#include "ndarray/pybind11.h"
35using namespace py::literals;
41using utils::python::WrapperCollection;
45using PyBaseColumnView = py::class_<BaseColumnView, std::shared_ptr<BaseColumnView>>;
47using PyBitsColumn = py::class_<BitsColumn, std::shared_ptr<BitsColumn>>;
49template <
typename T,
typename PyClass>
50static void declareBaseColumnViewOverloads(PyClass &cls) {
51 cls.def(
"_basicget", [](BaseColumnView & self, Key<T>
const &key) ->
typename ndarray::Array<T, 1>
const {
56template <
typename U,
typename PyClass>
57static void declareBaseColumnViewArrayOverloads(PyClass &cls) {
60 typename ndarray::Array<U, 2, 1>
const {
return self[key]; });
63template <
typename PyClass>
64static void declareBaseColumnViewFlagOverloads(PyClass &cls) {
66 [](BaseColumnView &self, Key<Flag>
const &key) -> ndarray::Array<bool const, 1, 1>
const {
67 return ndarray::copy(self[key]);
71static void declareBaseColumnView(WrapperCollection &wrappers) {
75 wrappers.wrapType(PyBaseColumnView(wrappers.module,
"_BaseColumnViewBase"), [](
auto &mod,
auto &cls) {
76 cls.def(
"getTable", &BaseColumnView::getTable);
77 cls.def_property_readonly(
"table", &BaseColumnView::getTable);
78 cls.def(
"getSchema", &BaseColumnView::getSchema);
79 cls.def_property_readonly(
"schema", &BaseColumnView::getSchema);
81 cls.def(
"_getBits", &BaseColumnView::getBits);
82 cls.def(
"getAllBits", &BaseColumnView::getAllBits);
83 declareBaseColumnViewOverloads<std::uint8_t>(cls);
84 declareBaseColumnViewOverloads<std::uint16_t>(cls);
85 declareBaseColumnViewOverloads<std::int32_t>(cls);
86 declareBaseColumnViewOverloads<std::int64_t>(cls);
87 declareBaseColumnViewOverloads<float>(cls);
88 declareBaseColumnViewOverloads<double>(cls);
89 declareBaseColumnViewFlagOverloads(cls);
92 declareBaseColumnViewArrayOverloads<std::uint8_t>(cls);
93 declareBaseColumnViewArrayOverloads<std::uint16_t>(cls);
94 declareBaseColumnViewArrayOverloads<int>(cls);
95 declareBaseColumnViewArrayOverloads<float>(cls);
96 declareBaseColumnViewArrayOverloads<double>(cls);
100 using AngleArray = ndarray::Array<lsst::geom::Angle, 1>;
101 using DoubleArray = ndarray::Array<double, 1>;
102 cls.def(
"_basicget", [](BaseColumnView &self, Key<lsst::geom::Angle> const &key) -> DoubleArray {
103 ndarray::Array<lsst::geom::Angle, 1, 0> a = self[key];
104 return ndarray::detail::ArrayAccess<DoubleArray>::construct(
105 reinterpret_cast<double *>(a.getData()),
106 ndarray::detail::ArrayAccess<AngleArray>::getCore(a));
111static void declareBitsColumn(WrapperCollection &wrappers) {
112 wrappers.wrapType(PyBitsColumn(wrappers.module,
"BitsColumn"), [](
auto &mod,
auto &cls) {
113 cls.def(
"getArray", &BitsColumn::getArray);
114 cls.def_property_readonly(
"array", &BitsColumn::getArray);
115 cls.def(
"getBit", (BitsColumn::SizeT(BitsColumn::*)(Key<Flag> const &) const) & BitsColumn::getBit,
117 cls.def(
"getBit", (BitsColumn::SizeT(BitsColumn::*)(std::string const &) const) & BitsColumn::getBit,
119 cls.def(
"getMask", (BitsColumn::SizeT(BitsColumn::*)(Key<Flag> const &) const) & BitsColumn::getMask,
121 cls.def(
"getMask", (BitsColumn::SizeT(BitsColumn::*)(std::string const &) const) & BitsColumn::getMask,
129 declareBaseColumnView(wrappers);
130 declareBitsColumn(wrappers);
Tag types used to declare specialized field types.
void wrapBaseColumnView(WrapperCollection &wrappers)