190 p.first, value_func);
199 auto py_range_obj = p.second.attr(
"get_range")();
202 std::string type_string(py::extract<char const*>(py_range_obj.attr(
"__class__").attr(
"__name__")));
204 if (type_string ==
"Unbounded") {
209 }
else if (type_string ==
"Range") {
218 return {min_func(init, o), max_func(init, o)};
221 bool is_exponential = py::extract<int>(py_range_obj.attr(
"get_type")().attr(
"value")) == 2;
223 if (is_exponential) {
232 p.first, init_value_func, converter);
237 auto py_func = p.second.attr(
"func");
239 py::list dependees = py::extract<py::list>(p.second.attr(
"params"));
240 for (
int i = 0; i < py::len(dependees); ++i) {
241 int id = py::extract<int>(dependees[i].attr(
"id"));
246 ::get(
"Dependent parameter", expr_builder, py_func, params.
size());
250 context[
"coordinate_system"] = cs;
251 return dependent(context, params);
255 p.first, dependent_func, params);
259 int value_id = py::extract<int>(p.second.attr(
"value").attr(
"id"));
264 int x_coord_id = py::extract<int>(p.second.attr(
"x_coord").attr(
"id"));
265 int y_coord_id = py::extract<int>(p.second.attr(
"y_coord").attr(
"id"));
266 int flux_id = py::extract<int>(p.second.attr(
"flux").attr(
"id"));
272 int x_coord_id = py::extract<int>(p.second.attr(
"x_coord").attr(
"id"));
273 int y_coord_id = py::extract<int>(p.second.attr(
"y_coord").attr(
"id"));
274 int flux_id = py::extract<int>(p.second.attr(
"flux").attr(
"id"));
275 int effective_radius_id = py::extract<int>(p.second.attr(
"effective_radius").attr(
"id"));
276 int aspect_ratio_id = py::extract<int>(p.second.attr(
"aspect_ratio").attr(
"id"));
277 int angle_id = py::extract<int>(p.second.attr(
"angle").attr(
"id"));
278 int n_id = py::extract<int>(p.second.attr(
"n").attr(
"id"));
286 int x_coord_id = py::extract<int>(p.second.attr(
"x_coord").attr(
"id"));
287 int y_coord_id = py::extract<int>(p.second.attr(
"y_coord").attr(
"id"));
288 int flux_id = py::extract<int>(p.second.attr(
"flux").attr(
"id"));
289 int effective_radius_id = py::extract<int>(p.second.attr(
"effective_radius").attr(
"id"));
290 int aspect_ratio_id = py::extract<int>(p.second.attr(
"aspect_ratio").attr(
"id"));
291 int angle_id = py::extract<int>(p.second.attr(
"angle").attr(
"id"));
298 int x_coord_id = py::extract<int>(p.second.attr(
"x_coord").attr(
"id"));
299 int y_coord_id = py::extract<int>(p.second.attr(
"y_coord").attr(
"id"));
300 int flux_id = py::extract<int>(p.second.attr(
"flux").attr(
"id"));
301 int effective_radius_id = py::extract<int>(p.second.attr(
"effective_radius").attr(
"id"));
302 int aspect_ratio_id = py::extract<int>(p.second.attr(
"aspect_ratio").attr(
"id"));
303 int angle_id = py::extract<int>(p.second.attr(
"angle").attr(
"id"));
309#ifdef WITH_ONNX_MODELS
311 int x_coord_id = py::extract<int>(p.second.attr(
"x_coord").attr(
"id"));
312 int y_coord_id = py::extract<int>(p.second.attr(
"y_coord").attr(
"id"));
313 int flux_id = py::extract<int>(p.second.attr(
"flux").attr(
"id"));
314 int aspect_ratio_id = py::extract<int>(p.second.attr(
"aspect_ratio").attr(
"id"));
315 int angle_id = py::extract<int>(p.second.attr(
"angle").attr(
"id"));
316 int scale_id = py::extract<int>(p.second.attr(
"scale").attr(
"id"));
319 py::dict parameters = py::extract<py::dict>(p.second.attr(
"params"));
320 py::list names = parameters.keys();
321 for (
int i = 0; i < py::len(names); ++i) {
322 std::string name = py::extract<std::string>(names[i]);
323 params[name] =
m_parameters.at(py::extract<int>(parameters[names[i]].attr(
"id")));
327 py::list models = py::extract<py::list>(p.second.attr(
"models"));
328 for (
int i = 0; i < py::len(models); ++i) {
329 std::string model_filename = py::extract<std::string>(models[i]);
332 if (onnx_models.
back()->getOutputType() != ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT ||
333 onnx_models.
back()->getOutputShape().size() != 4 ||
334 onnx_models.
back()->getOutputShape()[1] != onnx_models.
back()->getOutputShape()[2] ||
335 onnx_models.
back()->getOutputShape()[3] != 1)
337 throw Elements::Exception() <<
"ONNX models for ModelFitting must output a square array of floats";
353 for (
int x : p.second) {
360 auto& prior = p.second;
361 int param_id = py::extract<int>(prior.attr(
"param"));
388 py::extract<int>(parameters[
"window_type"].attr(
"value"))());