23 #include "pybind11/pybind11.h" 
   24 #include "pybind11/stl.h" 
   34 using namespace pybind11::literals;
 
   42 void declareDipoleCentroidControl(
py::module &mod) {
 
   43     py::class_<DipoleCentroidControl, std::shared_ptr<DipoleCentroidControl>> 
cls(mod,
 
   44                                                                                   "DipoleCentroidControl");
 
   46     cls.def(py::init<>());
 
   49 void declareDipoleFluxControl(
py::module &mod) {
 
   50     py::class_<DipoleFluxControl, std::shared_ptr<DipoleFluxControl>> 
cls(mod, 
"DipoleFluxControl");
 
   52     cls.def(py::init<>());
 
   55 void declareDipolePsfFluxControl(
py::module &mod) {
 
   57             mod, 
"PsfDipoleFluxControl");
 
   59     cls.def(py::init<>());
 
   67 void declareDipoleCentroidAlgorithm(
py::module &mod) {
 
   69     py::class_<DipoleCentroidAlgorithm, std::shared_ptr<DipoleCentroidAlgorithm>, meas::base::SimpleAlgorithm>
 
   70             cls(mod, 
"_DipoleCentroidAlgorithm");
 
   72     cls.attr(
"FAILURE") = py::cast(DipoleCentroidAlgorithm::FAILURE);
 
   73     cls.attr(
"POS_FLAG") = py::cast(DipoleCentroidAlgorithm::POS_FLAG);
 
   74     cls.attr(
"NEG_FLAG") = py::cast(DipoleCentroidAlgorithm::NEG_FLAG);
 
   75     cls.def_static(
"getFlagDefinitions", &DipoleCentroidAlgorithm::getFlagDefinitions,
 
   76                    py::return_value_policy::copy);
 
   78     cls.def(
"getPositiveKeys", &DipoleCentroidAlgorithm::getPositiveKeys);
 
   79     cls.def(
"getNegativeKeys", &DipoleCentroidAlgorithm::getNegativeKeys);
 
   82 void declareDipoleFluxAlgorithm(
py::module &mod) {
 
   84     py::class_<DipoleFluxAlgorithm, std::shared_ptr<DipoleFluxAlgorithm>, meas::base::SimpleAlgorithm> 
cls(
 
   85             mod, 
"_DipoleFluxAlgorithm");
 
   87     cls.attr(
"FAILURE") = py::cast(DipoleFluxAlgorithm::FAILURE);
 
   88     cls.attr(
"POS_FLAG") = py::cast(DipoleFluxAlgorithm::POS_FLAG);
 
   89     cls.attr(
"NEG_FLAG") = py::cast(DipoleFluxAlgorithm::NEG_FLAG);
 
   90     cls.def_static(
"getFlagDefinitions", &DipoleFluxAlgorithm::getFlagDefinitions,
 
   91                    py::return_value_policy::copy);
 
   93     cls.def(
"getPositiveKeys", &DipoleFluxAlgorithm::getPositiveKeys);
 
   94     cls.def(
"getNegativeKeys", &DipoleFluxAlgorithm::getNegativeKeys);
 
   98     py::module::import(
"lsst.meas.base");
 
  100     py::class_<NaiveDipoleFlux, std::shared_ptr<NaiveDipoleFlux>, DipoleFluxAlgorithm> 
cls(mod,
 
  103     cls.def(py::init<NaiveDipoleFlux::Control const &, std::string const &, afw::table::Schema &>(), 
"ctrl"_a,
 
  104             "name"_a, 
"schema"_a);
 
  107     cls.def(
"fail", &NaiveDipoleFlux::fail, 
"measRecord"_a, 
"error"_a = NULL);
 
  110 void declareNaiveDipoleCentroid(
py::module &mod) {
 
  111     py::class_<NaiveDipoleCentroid, std::shared_ptr<NaiveDipoleCentroid>, DipoleCentroidAlgorithm> 
cls(
 
  112             mod, 
"NaiveDipoleCentroid");
 
  114     cls.def(py::init<NaiveDipoleCentroid::Control const &, std::string const &, afw::table::Schema &>(),
 
  115             "ctrl"_a, 
"name"_a, 
"schema"_a);
 
  117     cls.def(
"getCenterKeys", &NaiveDipoleCentroid::getCenterKeys);
 
  118     cls.def(
"getPositiveKeys", &NaiveDipoleCentroid::getPositiveKeys);
 
  119     cls.def(
"getNegativeKeys", &NaiveDipoleCentroid::getNegativeKeys);
 
  122     cls.def(
"mergeCentroids", &NaiveDipoleCentroid::mergeCentroids, 
"source"_a, 
"posValue"_a, 
"negValue"_a);
 
  123     cls.def(
"fail", &NaiveDipoleCentroid::fail, 
"measRecord"_a, 
"error"_a = NULL);
 
  127     py::class_<PsfDipoleFlux, std::shared_ptr<PsfDipoleFlux>, DipoleFluxAlgorithm> 
cls(mod, 
"PsfDipoleFlux");
 
  129     cls.def(py::init<PsfDipoleFlux::Control const &, std::string const &, afw::table::Schema &>(), 
"ctrl"_a,
 
  130             "name"_a, 
"schema"_a);
 
  132     cls.def(
"chi2", &PsfDipoleFlux::chi2, 
"source"_a, 
"exposure"_a, 
"negCenterX"_a, 
"negCenterY"_a,
 
  133             "negFlux"_a, 
"posCenterX"_a, 
"posCenterY"_a, 
"posFlux"_a);
 
  135     cls.def(
"fail", &PsfDipoleFlux::fail, 
"measRecord"_a, 
"error"_a = NULL);
 
  141     py::module::import(
"lsst.afw.table");
 
  142     py::module::import(
"lsst.meas.base");
 
  143     py::module::import(
"lsst.pex.config");
 
  145     declareDipoleCentroidControl(mod);
 
  146     declareDipoleFluxControl(mod);
 
  147     declareDipolePsfFluxControl(mod);
 
  148     declareDipoleCentroidAlgorithm(mod);
 
  149     declareDipoleFluxAlgorithm(mod);
 
  150     declareNaiveDipoleFlux(mod);
 
  151     declareNaiveDipoleCentroid(mod);
 
  152     declarePsfDipoleFlux(mod);