24 #include "pybind11/pybind11.h" 
   26 #include "ndarray/pybind11.h" 
   35 using namespace pybind11::literals;
 
   43     using PyPrior = py::class_<Prior, std::shared_ptr<Prior>>;
 
   44     PyPrior 
cls(mod, 
"Prior");
 
   45     cls.def(
"getTag", &Prior::getTag);
 
   46     cls.def(
"evaluate", &Prior::evaluate, 
"nonlinear"_a, 
"amplitudes"_a);
 
   47     cls.def(
"evaluateDerivatives", &Prior::evaluateDerivatives, 
"nonlinear"_a, 
"amplitudes"_a,
 
   48             "nonlinearGradient"_a, 
"amplitudeGradient"_a, 
"nonlinearHessian"_a, 
"amplitudeHessian"_a,
 
   50     cls.def(
"marginalize", &Prior::marginalize, 
"gradient"_a, 
"hessian"_a, 
"nonlinear"_a);
 
   51     cls.def(
"maximize", &Prior::maximize, 
"gradient"_a, 
"hessian"_a, 
"nonlinear"_a, 
"amplitudes"_a);
 
   52     cls.def(
"drawAmplitudes", &Prior::drawAmplitudes, 
"gradient"_a, 
"hessian"_a, 
"nonlinear"_a, 
"rng"_a,
 
   53             "amplitudes"_a, 
"weights"_a, 
"multiplyWeights"_a = 
false);
 
   56 static void declareMixturePrior(
py::module &mod) {
 
   57     using Class = MixturePrior;
 
   58     using PyClass = py::class_<Class, std::shared_ptr<Class>, Prior>;
 
   61     cls.def_static(
"getUpdateRestriction", &Class::getUpdateRestriction,
 
   62                    py::return_value_policy::reference);  
 
   63     cls.def(
"getMixture", &Class::getMixture);
 
   67 static void declareSemiEmpiricalPrior(
py::module &mod) {
 
   68     using Class = SemiEmpiricalPrior;
 
   69     using Control = SemiEmpiricalPriorControl;
 
   70     using PyControl = py::class_<Control, std::shared_ptr<Control>>;
 
   71     using PyClass = py::class_<Class, std::shared_ptr<Class>, Prior>;
 
   73     PyControl clsControl(mod, 
"SemiEmpiricalPriorControl");
 
   74     clsControl.def(py::init<>());
 
   85     cls.def(py::init<Control>(), 
"ctrl"_a);
 
   86     cls.attr(
"Control") = clsControl;
 
   90 static void declareSoftenedLinearPrior(
py::module &mod) {
 
   91     using Class = SoftenedLinearPrior;
 
   92     using Control = SoftenedLinearPriorControl;
 
   93     using PyControl = py::class_<Control, std::shared_ptr<Control>>;
 
   94     using PyClass = py::class_<Class, std::shared_ptr<Class>, Prior>;
 
   96     PyControl clsControl(mod, 
"SoftenedLinearPriorControl");
 
   97     clsControl.def(py::init<>());
 
  107     cls.def(py::init<Control>(), 
"ctrl"_a);
 
  108     cls.def(
"getControl", &Class::getControl, py::return_value_policy::copy);
 
  109     cls.attr(
"Control") = clsControl;
 
  114     py::module::import(
"lsst.meas.modelfit.mixture");
 
  117     declareMixturePrior(mod);
 
  118     declareSemiEmpiricalPrior(mod);
 
  119     declareSoftenedLinearPrior(mod);