From d0d5434a9a848fe5da2af20452deb2cb1c471b1a Mon Sep 17 00:00:00 2001 From: Clemens Schmid Date: Mon, 2 Feb 2026 14:49:16 +0100 Subject: [PATCH 1/3] expose lsq.GetVarianceCovarianceMap() --- src/extensions/lsq_ext.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/extensions/lsq_ext.cpp b/src/extensions/lsq_ext.cpp index b63d1044..116d5e67 100644 --- a/src/extensions/lsq_ext.cpp +++ b/src/extensions/lsq_ext.cpp @@ -19,6 +19,8 @@ #include #include +#include +#include #include @@ -45,6 +47,22 @@ bool _SafeRefine(LSQNumObj & lsq, REAL maxChi2factor, int nbCycle, bool useLeven callBeginEndOptimization, minChi2var); } +bp::dict _GetVarianceCovarianceMap(LSQNumObj & lsq) +{ + const std::map, REAL> &m = + lsq.GetVarianceCovarianceMap(); + bp::dict d; + for (std::map, REAL>::const_iterator it = m.begin(); + it != m.end(); ++it) + { + const RefinablePar *pi = it->first.first; + const RefinablePar *pj = it->first.second; + d[bp::make_tuple(bp::ptr(const_cast(pi)), + bp::ptr(const_cast(pj)))] = it->second; + } + return d; +} + } // namespace void wrap_lsq() @@ -102,6 +120,7 @@ void wrap_lsq() .def("GetLSQDeriv", &LSQNumObj::GetLSQDeriv, bp::arg("par"), return_value_policy()) + .def("GetVarianceCovarianceMap", &_GetVarianceCovarianceMap) .def("BeginOptimization", &LSQNumObj::BeginOptimization, (bp::arg("allowApproximations")=false, bp::arg("enableRestraints")=false)) From e52f3c97681faeae30ce3e3b70e06780b0859c3e Mon Sep 17 00:00:00 2001 From: Clemens Schmid Date: Mon, 2 Feb 2026 15:49:28 +0100 Subject: [PATCH 2/3] change keys of cov matrix to param names instead of param pointers --- src/extensions/lsq_ext.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/extensions/lsq_ext.cpp b/src/extensions/lsq_ext.cpp index 116d5e67..b28ba8d0 100644 --- a/src/extensions/lsq_ext.cpp +++ b/src/extensions/lsq_ext.cpp @@ -57,8 +57,7 @@ bp::dict _GetVarianceCovarianceMap(LSQNumObj & lsq) { const RefinablePar *pi = it->first.first; const RefinablePar *pj = it->first.second; - d[bp::make_tuple(bp::ptr(const_cast(pi)), - bp::ptr(const_cast(pj)))] = it->second; + d[bp::make_tuple(pi->GetName(), pj->GetName())] = it->second; } return d; } From 65f5c0323f7ae4c8deb546222902d2a1585ce9e7 Mon Sep 17 00:00:00 2001 From: Clemens Schmid Date: Tue, 25 Aug 2026 14:17:04 +0200 Subject: [PATCH 3/3] add news file --- news/get_variance_covariance_map.rst | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 news/get_variance_covariance_map.rst diff --git a/news/get_variance_covariance_map.rst b/news/get_variance_covariance_map.rst new file mode 100644 index 00000000..5e9db10f --- /dev/null +++ b/news/get_variance_covariance_map.rst @@ -0,0 +1,23 @@ +**Added:** + +* Expose ``lsq.GetVarianceCovarianceMap()`` for covariance between refined parameters + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* + +**Security:** + +*