From 83091b4d95d8f729c5b2ac9ffae0c510aa165b0b Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Fri, 14 Aug 2020 15:44:20 +0200
Subject: [PATCH] Distributions now also delegating parameter registration to
 INode

and unrelated: rm unused fct args
---
 Core/Parametrization/Distributions.cpp | 112 ++++++---
 Core/Parametrization/Distributions.h   |  35 +--
 Core/Scattering/Rotations.cpp          |  21 +-
 GUI/coregui/Models/ModelMapper.cpp     |   5 +-
 auto/Wrap/libBornAgainCore.py          |  20 +-
 auto/Wrap/libBornAgainCore_wrap.cpp    | 316 +++++++++++++++++++++----
 6 files changed, 394 insertions(+), 115 deletions(-)

diff --git a/Core/Parametrization/Distributions.cpp b/Core/Parametrization/Distributions.cpp
index 92127008fd5..211c42bc8d8 100644
--- a/Core/Parametrization/Distributions.cpp
+++ b/Core/Parametrization/Distributions.cpp
@@ -16,8 +16,8 @@
 #include "Core/Basics/Exceptions.h"
 #include "Core/Basics/MathConstants.h"
 #include "Core/Parametrization/ParameterPool.h"
-#include "Core/Parametrization/ParameterSample.h"
 #include "Core/Parametrization/RealParameter.h"
+#include "Core/Parametrization/ParameterSample.h"
 #include <algorithm>
 #include <cmath>
 #include <limits>
@@ -124,13 +124,21 @@ IDistribution1D::generateSamplesFromValues(const std::vector<double>& sample_val
 // class DistributionGate
 // ************************************************************************** //
 
-DistributionGate::DistributionGate(double min, double max) : m_min(min), m_max(max)
+DistributionGate::DistributionGate(const std::vector<double> P)
+    : IDistribution1D(
+        {"DistributionGate",
+         "class_tooltip",
+         {{"Min", "", "para_tooltip", -INF, +INF, 0}, {"Max", "", "para_tooltip", -INF, +INF, 0}}},
+        P),
+      m_min(m_P[0]), m_max(m_P[1])
 {
-    setName("DistributionGate");
     if (m_max < m_min)
         throw Exceptions::ClassInitializationException("DistributionGate: max<min");
-    registerParameter("Min", &m_min);
-    registerParameter("Max", &m_max);
+}
+
+DistributionGate::DistributionGate(double min, double max)
+    : DistributionGate(std::vector<double>{min, max})
+{
 }
 
 DistributionGate::DistributionGate() : DistributionGate(0., 1.) {}
@@ -144,10 +152,9 @@ double DistributionGate::probabilityDensity(double x) const
     return 1.0 / (m_max - m_min);
 }
 
-std::vector<double> DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor,
+std::vector<double> DistributionGate::equidistantPoints(size_t nbr_samples, double /*sigma_factor*/,
                                                         const RealLimits& limits) const
 {
-    (void)sigma_factor;
     double xmin = m_min;
     double xmax = m_max;
     adjustMinMaxForLimits(xmin, xmax, limits);
@@ -163,13 +170,21 @@ bool DistributionGate::isDelta() const
 // class DistributionLorentz
 // ************************************************************************** //
 
-DistributionLorentz::DistributionLorentz(double mean, double hwhm) : m_mean(mean), m_hwhm(hwhm)
+DistributionLorentz::DistributionLorentz(const std::vector<double> P)
+    : IDistribution1D({"DistributionLorentz",
+                       "class_tooltip",
+                       {{"Mean", "", "para_tooltip", -INF, +INF, 0},
+                        {"HWHM", "", "para_tooltip", -INF, +INF, 0}}},
+                      P),
+      m_mean(m_P[0]), m_hwhm(m_P[1])
 {
-    setName("DistributionLorentz");
     if (m_hwhm < 0.0)
         throw Exceptions::ClassInitializationException("DistributionLorentz: hwhm<0");
-    registerParameter("Mean", &m_mean);
-    registerParameter("HWHM", &m_hwhm);
+}
+
+DistributionLorentz::DistributionLorentz(double mean, double hwhm)
+    : DistributionLorentz(std::vector<double>{mean, hwhm})
+{
 }
 
 DistributionLorentz::DistributionLorentz() : DistributionLorentz(0., 1.) {}
@@ -201,14 +216,21 @@ bool DistributionLorentz::isDelta() const
 // class DistributionGaussian
 // ************************************************************************** //
 
-DistributionGaussian::DistributionGaussian(double mean, double std_dev)
-    : m_mean(mean), m_std_dev(std_dev)
+DistributionGaussian::DistributionGaussian(const std::vector<double> P)
+    : IDistribution1D({"DistributionGaussian",
+                       "class_tooltip",
+                       {{"Mean", "", "para_tooltip", -INF, +INF, 0},
+                        {"StdDev", "", "para_tooltip", -INF, +INF, 0}}},
+                      P),
+      m_mean(m_P[0]), m_std_dev(m_P[1])
 {
-    setName("DistributionGaussian");
     if (m_std_dev < 0.0)
         throw Exceptions::ClassInitializationException("DistributionGaussian: std_dev < 0");
-    registerParameter("Mean", &m_mean);
-    registerParameter("StdDev", &m_std_dev);
+}
+
+DistributionGaussian::DistributionGaussian(double mean, double std_dev)
+    : DistributionGaussian(std::vector<double>{mean, std_dev})
+{
 }
 
 DistributionGaussian::DistributionGaussian() : DistributionGaussian(0., 1.) {}
@@ -241,18 +263,27 @@ bool DistributionGaussian::isDelta() const
 // class DistributionLogNormal
 // ************************************************************************** //
 
-DistributionLogNormal::DistributionLogNormal(double median, double scale_param)
-    : m_median(median), m_scale_param(scale_param)
+DistributionLogNormal::DistributionLogNormal(const std::vector<double> P)
+    : IDistribution1D({"DistributionLogNormal",
+                       "class_tooltip",
+                       {{"Median", "", "para_tooltip", -INF, +INF, 0},
+                        {"ScaleParameter", "", "para_tooltip", -INF, +INF, 0}}},
+                      P),
+      m_median(m_P[0]), m_scale_param(m_P[1])
 {
-    setName("DistributionLogNormal");
     if (m_scale_param < 0.0)
         throw Exceptions::ClassInitializationException("DistributionLogNormal: scale_param < 0");
     if (m_median <= 0.0)
         throw Exceptions::ClassInitializationException("DistributionLogNormal: median < 0");
-    registerParameter("Median", &m_median);
-    registerParameter("ScaleParameter", &m_scale_param);
 }
 
+DistributionLogNormal::DistributionLogNormal(double median, double scale_param)
+    : DistributionLogNormal(std::vector<double>{median, scale_param})
+{
+}
+
+DistributionTrapezoid::DistributionTrapezoid() : DistributionTrapezoid(0., 0., 1., 0.) {}
+
 double DistributionLogNormal::probabilityDensity(double x) const
 {
     if (m_scale_param == 0.0)
@@ -299,13 +330,21 @@ void DistributionLogNormal::setUnits(const std::string& units)
 // class DistributionCosine
 // ************************************************************************** //
 
-DistributionCosine::DistributionCosine(double mean, double sigma) : m_mean(mean), m_sigma(sigma)
+DistributionCosine::DistributionCosine(const std::vector<double> P)
+    : IDistribution1D({"DistributionCosine",
+                       "class_tooltip",
+                       {{"Mean", "", "para_tooltip", -INF, +INF, 0},
+                        {"Sigma", "", "para_tooltip", -INF, +INF, 0}}},
+                      P),
+      m_mean(m_P[0]), m_sigma(m_P[1])
 {
-    setName("DistributionCosine");
     if (m_sigma < 0.0)
         throw Exceptions::ClassInitializationException("DistributionCosine: sigma<0");
-    registerParameter("Mean", &m_mean);
-    registerParameter("Sigma", &m_sigma);
+}
+
+DistributionCosine::DistributionCosine(double mean, double sigma)
+    : DistributionCosine(std::vector<double>{mean, sigma})
+{
 }
 
 DistributionCosine::DistributionCosine() : DistributionCosine(0., 1.) {}
@@ -339,24 +378,29 @@ bool DistributionCosine::isDelta() const
 // class DistributionTrapezoidal
 // ************************************************************************** //
 
-DistributionTrapezoid::DistributionTrapezoid(double center, double left, double middle,
-                                             double right)
-    : m_center(center), m_left(left), m_middle(middle), m_right(right)
+DistributionTrapezoid::DistributionTrapezoid(const std::vector<double> P)
+    : IDistribution1D({"DistributionTrapezoid",
+                       "class_tooltip",
+                       {{"Center", "", "para_tooltip", -INF, +INF, 0},
+                        {"LeftWidth", "", "para_tooltip", -INF, +INF, 0},
+                        {"MiddleWidth", "", "para_tooltip", -INF, +INF, 0},
+                        {"RightWidth", "", "para_tooltip", -INF, +INF, 0}}},
+                      P),
+      m_center(m_P[0]), m_left(m_P[1]), m_middle(m_P[2]), m_right(m_P[3])
 {
-    setName("DistributionTrapezoid");
     if (m_left < 0.0)
         throw Exceptions::ClassInitializationException("DistributionTrapezoid: leftWidth < 0");
     if (m_middle < 0.0)
         throw Exceptions::ClassInitializationException("DistributionTrapezoid: middleWidth < 0");
     if (m_right < 0.0)
         throw Exceptions::ClassInitializationException("DistributionTrapezoid: rightWidth < 0");
-    registerParameter("Center", &m_center);
-    registerParameter("LeftWidth", &m_left);
-    registerParameter("MiddleWidth", &m_middle);
-    registerParameter("RightWidth", &m_right);
 }
 
-DistributionTrapezoid::DistributionTrapezoid() : DistributionTrapezoid(0., 0., 1., 0.) {}
+DistributionTrapezoid::DistributionTrapezoid(double center, double left, double middle,
+                                             double right)
+    : DistributionTrapezoid(std::vector<double>{center, left, middle, right})
+{
+}
 
 double DistributionTrapezoid::probabilityDensity(double x) const
 {
diff --git a/Core/Parametrization/Distributions.h b/Core/Parametrization/Distributions.h
index 87f4793c96d..738d080307f 100644
--- a/Core/Parametrization/Distributions.h
+++ b/Core/Parametrization/Distributions.h
@@ -32,7 +32,6 @@ class ParameterSample;
 class BA_CORE_API_ IDistribution1D : public ICloneable, public INode
 {
 public:
-    IDistribution1D() = default;
     IDistribution1D(const NodeMeta& meta, const std::vector<double>& PValues);
 
     virtual IDistribution1D* clone() const = 0;
@@ -86,6 +85,7 @@ protected:
 class BA_CORE_API_ DistributionGate : public IDistribution1D
 {
 public:
+    DistributionGate(const std::vector<double> P);
     DistributionGate(double min, double max);
     DistributionGate();
 
@@ -105,8 +105,8 @@ public:
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
 private:
-    double m_min;
-    double m_max;
+    const double& m_min;
+    const double& m_max;
 };
 
 // ************************************************************************** //
@@ -119,6 +119,7 @@ private:
 class BA_CORE_API_ DistributionLorentz : public IDistribution1D
 {
 public:
+    DistributionLorentz(const std::vector<double> P);
     DistributionLorentz(double mean, double hwhm);
     DistributionLorentz();
 
@@ -137,8 +138,8 @@ public:
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
 private:
-    double m_mean;
-    double m_hwhm;
+    const double& m_mean;
+    const double& m_hwhm;
 };
 
 // ************************************************************************** //
@@ -151,6 +152,7 @@ private:
 class BA_CORE_API_ DistributionGaussian : public IDistribution1D
 {
 public:
+    DistributionGaussian(const std::vector<double> P);
     DistributionGaussian(double mean, double std_dev);
     DistributionGaussian();
 
@@ -172,8 +174,8 @@ public:
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
 private:
-    double m_mean;
-    double m_std_dev;
+    const double& m_mean;
+    const double& m_std_dev;
 };
 
 // ************************************************************************** //
@@ -186,6 +188,7 @@ private:
 class BA_CORE_API_ DistributionLogNormal : public IDistribution1D
 {
 public:
+    DistributionLogNormal(const std::vector<double> P);
     DistributionLogNormal(double median, double scale_param);
     DistributionLogNormal() = delete;
 
@@ -210,8 +213,8 @@ public:
     virtual void setUnits(const std::string& units);
 
 private:
-    double m_median;
-    double m_scale_param;
+    const double& m_median;
+    const double& m_scale_param;
 };
 
 // ************************************************************************** //
@@ -224,6 +227,7 @@ private:
 class BA_CORE_API_ DistributionCosine : public IDistribution1D
 {
 public:
+    DistributionCosine(const std::vector<double> P);
     DistributionCosine(double mean, double sigma);
     DistributionCosine();
 
@@ -242,8 +246,8 @@ public:
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
 private:
-    double m_mean;
-    double m_sigma;
+    const double& m_mean;
+    const double& m_sigma;
 };
 
 // ************************************************************************** //
@@ -256,6 +260,7 @@ private:
 class BA_CORE_API_ DistributionTrapezoid : public IDistribution1D
 {
 public:
+    DistributionTrapezoid(const std::vector<double> P);
     DistributionTrapezoid(double center, double left, double middle, double right);
     DistributionTrapezoid();
 
@@ -280,10 +285,10 @@ public:
 
 private:
     void adjustLimitsToNonZeroSamples(double& min, double& max, size_t nbr_samples) const;
-    double m_center;
-    double m_left;
-    double m_middle;
-    double m_right;
+    const double& m_center;
+    const double& m_left;
+    const double& m_middle;
+    const double& m_right;
 };
 
 #endif // BORNAGAIN_CORE_PARAMETRIZATION_DISTRIBUTIONS_H
diff --git a/Core/Scattering/Rotations.cpp b/Core/Scattering/Rotations.cpp
index 6ce31721724..fb499db3e0c 100644
--- a/Core/Scattering/Rotations.cpp
+++ b/Core/Scattering/Rotations.cpp
@@ -101,10 +101,9 @@ Transform3D IdentityRotation::getTransform3D() const
 //! Constructor of rotation around x-axis
 //! @param angle: rotation angle around x-axis in radians
 RotationX::RotationX(const std::vector<double> P)
-    : IRotation({"XRotation",
-                 "class_tooltip",
-                 {{"Angle", "rad", "Angle around x axis", -INF, +INF, 0}}},
-                P),
+    : IRotation(
+        {"XRotation", "class_tooltip", {{"Angle", "rad", "Angle around x axis", -INF, +INF, 0}}},
+        P),
       m_angle(m_P[0])
 {
 }
@@ -123,10 +122,9 @@ Transform3D RotationX::getTransform3D() const
 //! Constructor of rotation around y-axis
 //! @param angle: rotation angle around y-axis in radians
 RotationY::RotationY(const std::vector<double> P)
-    : IRotation({"YRotation",
-                 "class_tooltip",
-                 {{"Angle", "rad", "Angle around y axis", -INF, +INF, 0}}},
-                P),
+    : IRotation(
+        {"YRotation", "class_tooltip", {{"Angle", "rad", "Angle around y axis", -INF, +INF, 0}}},
+        P),
       m_angle(m_P[0])
 {
 }
@@ -147,10 +145,9 @@ Transform3D RotationY::getTransform3D() const
 //! Constructor of rotation around z-axis
 //! @param angle: rotation angle around z-axis in radians
 RotationZ::RotationZ(const std::vector<double> P)
-    : IRotation({"ZRotation",
-                 "class_tooltip",
-                 {{"Angle", "rad", "Angle around z axis", -INF, +INF, 0}}},
-                P),
+    : IRotation(
+        {"ZRotation", "class_tooltip", {{"Angle", "rad", "Angle around z axis", -INF, +INF, 0}}},
+        P),
       m_angle(m_P[0])
 {
 }
diff --git a/GUI/coregui/Models/ModelMapper.cpp b/GUI/coregui/Models/ModelMapper.cpp
index 82f2519da51..0021ef25161 100644
--- a/GUI/coregui/Models/ModelMapper.cpp
+++ b/GUI/coregui/Models/ModelMapper.cpp
@@ -34,10 +34,7 @@ void ModelMapper::setOnValueChange(std::function<void(void)> f, const void* call
 
 void ModelMapper::setOnPropertyChange(std::function<void(QString)> f, const void* caller)
 {
-    auto ff = [=](SessionItem* item, const QString& property) {
-        (void)item;
-        f(property);
-    };
+    auto ff = [=](SessionItem* /*item*/, const QString& property) { f(property); };
     m_onPropertyChange.push_back(call_item_str_t(ff, caller));
 }
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 9d44d54318a..b07ad6f8a8d 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -6693,8 +6693,9 @@ class DistributionGate(IDistribution1D):
 
     def __init__(self, *args):
         r"""
-        __init__(DistributionGate self) -> DistributionGate
+        __init__(DistributionGate self, vdouble1d_t P) -> DistributionGate
         __init__(DistributionGate self, double min, double max) -> DistributionGate
+        __init__(DistributionGate self) -> DistributionGate
         DistributionGate::DistributionGate(double min, double max)
 
         """
@@ -6793,8 +6794,9 @@ class DistributionLorentz(IDistribution1D):
 
     def __init__(self, *args):
         r"""
-        __init__(DistributionLorentz self) -> DistributionLorentz
+        __init__(DistributionLorentz self, vdouble1d_t P) -> DistributionLorentz
         __init__(DistributionLorentz self, double mean, double hwhm) -> DistributionLorentz
+        __init__(DistributionLorentz self) -> DistributionLorentz
         DistributionLorentz::DistributionLorentz(double mean, double hwhm)
 
         """
@@ -6885,8 +6887,9 @@ class DistributionGaussian(IDistribution1D):
 
     def __init__(self, *args):
         r"""
-        __init__(DistributionGaussian self) -> DistributionGaussian
+        __init__(DistributionGaussian self, vdouble1d_t P) -> DistributionGaussian
         __init__(DistributionGaussian self, double mean, double std_dev) -> DistributionGaussian
+        __init__(DistributionGaussian self) -> DistributionGaussian
         DistributionGaussian::DistributionGaussian(double mean, double std_dev)
 
         """
@@ -6975,13 +6978,14 @@ class DistributionLogNormal(IDistribution1D):
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
-    def __init__(self, median, scale_param):
+    def __init__(self, *args):
         r"""
+        __init__(DistributionLogNormal self, vdouble1d_t P) -> DistributionLogNormal
         __init__(DistributionLogNormal self, double median, double scale_param) -> DistributionLogNormal
         DistributionLogNormal::DistributionLogNormal(double median, double scale_param)
 
         """
-        _libBornAgainCore.DistributionLogNormal_swiginit(self, _libBornAgainCore.new_DistributionLogNormal(median, scale_param))
+        _libBornAgainCore.DistributionLogNormal_swiginit(self, _libBornAgainCore.new_DistributionLogNormal(*args))
 
     def clone(self):
         r"""
@@ -7086,8 +7090,9 @@ class DistributionCosine(IDistribution1D):
 
     def __init__(self, *args):
         r"""
-        __init__(DistributionCosine self) -> DistributionCosine
+        __init__(DistributionCosine self, vdouble1d_t P) -> DistributionCosine
         __init__(DistributionCosine self, double mean, double sigma) -> DistributionCosine
+        __init__(DistributionCosine self) -> DistributionCosine
         DistributionCosine::DistributionCosine(double mean, double sigma)
 
         """
@@ -7178,8 +7183,9 @@ class DistributionTrapezoid(IDistribution1D):
 
     def __init__(self, *args):
         r"""
-        __init__(DistributionTrapezoid self) -> DistributionTrapezoid
+        __init__(DistributionTrapezoid self, vdouble1d_t P) -> DistributionTrapezoid
         __init__(DistributionTrapezoid self, double center, double left, double middle, double right) -> DistributionTrapezoid
+        __init__(DistributionTrapezoid self) -> DistributionTrapezoid
         DistributionTrapezoid::DistributionTrapezoid(double center, double left_width, double middle_width, double right_width)
 
         """
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index ee3cbcee0be..7d559cc33c5 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -61779,12 +61779,22 @@ SWIGINTERN PyObject *IDistribution1D_swigregister(PyObject *SWIGUNUSEDPARM(self)
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionGate__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_new_DistributionGate__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
   DistributionGate *result = 0 ;
   
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (DistributionGate *)new DistributionGate();
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionGate" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionGate *)new DistributionGate(arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionGate, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -61821,6 +61831,19 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionGate__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  DistributionGate *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (DistributionGate *)new DistributionGate();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionGate, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_DistributionGate(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
@@ -61830,7 +61853,15 @@ SWIGINTERN PyObject *_wrap_new_DistributionGate(PyObject *self, PyObject *args)
   if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionGate", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 0) {
-    return _wrap_new_DistributionGate__SWIG_0(self, argc, argv);
+    return _wrap_new_DistributionGate__SWIG_2(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionGate__SWIG_0(self, argc, argv);
+    }
   }
   if (argc == 2) {
     int _v;
@@ -61852,8 +61883,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionGate(PyObject *self, PyObject *args)
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionGate'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    DistributionGate::DistributionGate()\n"
-    "    DistributionGate::DistributionGate(double,double)\n");
+    "    DistributionGate::DistributionGate(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionGate::DistributionGate(double,double)\n"
+    "    DistributionGate::DistributionGate()\n");
   return 0;
 }
 
@@ -62214,12 +62246,22 @@ SWIGINTERN PyObject *DistributionGate_swiginit(PyObject *SWIGUNUSEDPARM(self), P
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionLorentz__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_new_DistributionLorentz__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
   DistributionLorentz *result = 0 ;
   
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (DistributionLorentz *)new DistributionLorentz();
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionLorentz *)new DistributionLorentz(arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -62256,6 +62298,19 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionLorentz__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  DistributionLorentz *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (DistributionLorentz *)new DistributionLorentz();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionLorentz, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_DistributionLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
@@ -62265,7 +62320,15 @@ SWIGINTERN PyObject *_wrap_new_DistributionLorentz(PyObject *self, PyObject *arg
   if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionLorentz", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 0) {
-    return _wrap_new_DistributionLorentz__SWIG_0(self, argc, argv);
+    return _wrap_new_DistributionLorentz__SWIG_2(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionLorentz__SWIG_0(self, argc, argv);
+    }
   }
   if (argc == 2) {
     int _v;
@@ -62287,8 +62350,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionLorentz(PyObject *self, PyObject *arg
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    DistributionLorentz::DistributionLorentz()\n"
-    "    DistributionLorentz::DistributionLorentz(double,double)\n");
+    "    DistributionLorentz::DistributionLorentz(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionLorentz::DistributionLorentz(double,double)\n"
+    "    DistributionLorentz::DistributionLorentz()\n");
   return 0;
 }
 
@@ -62626,12 +62690,22 @@ SWIGINTERN PyObject *DistributionLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self)
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionGaussian__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_new_DistributionGaussian__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
   DistributionGaussian *result = 0 ;
   
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (DistributionGaussian *)new DistributionGaussian();
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionGaussian" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionGaussian *)new DistributionGaussian(arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionGaussian, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -62668,6 +62742,19 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionGaussian__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  DistributionGaussian *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (DistributionGaussian *)new DistributionGaussian();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionGaussian, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_DistributionGaussian(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
@@ -62677,7 +62764,15 @@ SWIGINTERN PyObject *_wrap_new_DistributionGaussian(PyObject *self, PyObject *ar
   if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionGaussian", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 0) {
-    return _wrap_new_DistributionGaussian__SWIG_0(self, argc, argv);
+    return _wrap_new_DistributionGaussian__SWIG_2(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionGaussian__SWIG_0(self, argc, argv);
+    }
   }
   if (argc == 2) {
     int _v;
@@ -62699,8 +62794,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionGaussian(PyObject *self, PyObject *ar
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionGaussian'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    DistributionGaussian::DistributionGaussian()\n"
-    "    DistributionGaussian::DistributionGaussian(double,double)\n");
+    "    DistributionGaussian::DistributionGaussian(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionGaussian::DistributionGaussian(double,double)\n"
+    "    DistributionGaussian::DistributionGaussian()\n");
   return 0;
 }
 
@@ -63038,7 +63134,30 @@ SWIGINTERN PyObject *DistributionGaussian_swiginit(PyObject *SWIGUNUSEDPARM(self
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionLogNormal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_DistributionLogNormal__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
+  DistributionLogNormal *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionLogNormal" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionLogNormal *)new DistributionLogNormal(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionLogNormal, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_DistributionLogNormal__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -63046,10 +63165,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionLogNormal(PyObject *SWIGUNUSEDPARM(se
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
   DistributionLogNormal *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "new_DistributionLogNormal", 2, 2, swig_obj)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
     SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_DistributionLogNormal" "', argument " "1"" of type '" "double""'");
@@ -63068,6 +63186,48 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionLogNormal(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[3] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionLogNormal", 0, 2, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionLogNormal__SWIG_0(self, argc, argv);
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_DistributionLogNormal__SWIG_1(self, argc, argv);
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionLogNormal'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    DistributionLogNormal::DistributionLogNormal(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionLogNormal::DistributionLogNormal(double,double)\n");
+  return 0;
+}
+
+
 SWIGINTERN PyObject *_wrap_DistributionLogNormal_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   DistributionLogNormal *arg1 = (DistributionLogNormal *) 0 ;
@@ -63460,12 +63620,22 @@ SWIGINTERN PyObject *DistributionLogNormal_swiginit(PyObject *SWIGUNUSEDPARM(sel
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionCosine__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_new_DistributionCosine__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
   DistributionCosine *result = 0 ;
   
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (DistributionCosine *)new DistributionCosine();
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionCosine" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionCosine *)new DistributionCosine(arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionCosine, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -63502,6 +63672,19 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionCosine__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  DistributionCosine *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (DistributionCosine *)new DistributionCosine();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionCosine, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_DistributionCosine(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
@@ -63511,7 +63694,15 @@ SWIGINTERN PyObject *_wrap_new_DistributionCosine(PyObject *self, PyObject *args
   if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionCosine", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 0) {
-    return _wrap_new_DistributionCosine__SWIG_0(self, argc, argv);
+    return _wrap_new_DistributionCosine__SWIG_2(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionCosine__SWIG_0(self, argc, argv);
+    }
   }
   if (argc == 2) {
     int _v;
@@ -63533,8 +63724,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionCosine(PyObject *self, PyObject *args
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionCosine'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    DistributionCosine::DistributionCosine()\n"
-    "    DistributionCosine::DistributionCosine(double,double)\n");
+    "    DistributionCosine::DistributionCosine(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionCosine::DistributionCosine(double,double)\n"
+    "    DistributionCosine::DistributionCosine()\n");
   return 0;
 }
 
@@ -63872,12 +64064,22 @@ SWIGINTERN PyObject *DistributionCosine_swiginit(PyObject *SWIGUNUSEDPARM(self),
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
   DistributionTrapezoid *result = 0 ;
   
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
-  result = (DistributionTrapezoid *)new DistributionTrapezoid();
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_DistributionTrapezoid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > > const""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (DistributionTrapezoid *)new DistributionTrapezoid(arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionTrapezoid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -63930,6 +64132,19 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid__SWIG_2(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+  PyObject *resultobj = 0;
+  DistributionTrapezoid *result = 0 ;
+  
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  result = (DistributionTrapezoid *)new DistributionTrapezoid();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DistributionTrapezoid, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
@@ -63939,7 +64154,15 @@ SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid(PyObject *self, PyObject *a
   if (!(argc = SWIG_Python_UnpackTuple(args, "new_DistributionTrapezoid", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 0) {
-    return _wrap_new_DistributionTrapezoid__SWIG_0(self, argc, argv);
+    return _wrap_new_DistributionTrapezoid__SWIG_2(self, argc, argv);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_DistributionTrapezoid__SWIG_0(self, argc, argv);
+    }
   }
   if (argc == 4) {
     int _v;
@@ -63973,8 +64196,9 @@ SWIGINTERN PyObject *_wrap_new_DistributionTrapezoid(PyObject *self, PyObject *a
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_DistributionTrapezoid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    DistributionTrapezoid::DistributionTrapezoid()\n"
-    "    DistributionTrapezoid::DistributionTrapezoid(double,double,double,double)\n");
+    "    DistributionTrapezoid::DistributionTrapezoid(std::vector< double,std::allocator< double > > const)\n"
+    "    DistributionTrapezoid::DistributionTrapezoid(double,double,double,double)\n"
+    "    DistributionTrapezoid::DistributionTrapezoid()\n");
   return 0;
 }
 
@@ -125535,8 +125759,9 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IDistribution1D_swigregister", IDistribution1D_swigregister, METH_O, NULL},
 	 { "new_DistributionGate", _wrap_new_DistributionGate, METH_VARARGS, "\n"
-		"DistributionGate()\n"
-		"new_DistributionGate(double min, double max) -> DistributionGate\n"
+		"DistributionGate(vdouble1d_t P)\n"
+		"DistributionGate(double min, double max)\n"
+		"new_DistributionGate() -> DistributionGate\n"
 		"DistributionGate::DistributionGate(double min, double max)\n"
 		"\n"
 		""},
@@ -125598,8 +125823,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "DistributionGate_swigregister", DistributionGate_swigregister, METH_O, NULL},
 	 { "DistributionGate_swiginit", DistributionGate_swiginit, METH_VARARGS, NULL},
 	 { "new_DistributionLorentz", _wrap_new_DistributionLorentz, METH_VARARGS, "\n"
-		"DistributionLorentz()\n"
-		"new_DistributionLorentz(double mean, double hwhm) -> DistributionLorentz\n"
+		"DistributionLorentz(vdouble1d_t P)\n"
+		"DistributionLorentz(double mean, double hwhm)\n"
+		"new_DistributionLorentz() -> DistributionLorentz\n"
 		"DistributionLorentz::DistributionLorentz(double mean, double hwhm)\n"
 		"\n"
 		""},
@@ -125656,8 +125882,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "DistributionLorentz_swigregister", DistributionLorentz_swigregister, METH_O, NULL},
 	 { "DistributionLorentz_swiginit", DistributionLorentz_swiginit, METH_VARARGS, NULL},
 	 { "new_DistributionGaussian", _wrap_new_DistributionGaussian, METH_VARARGS, "\n"
-		"DistributionGaussian()\n"
-		"new_DistributionGaussian(double mean, double std_dev) -> DistributionGaussian\n"
+		"DistributionGaussian(vdouble1d_t P)\n"
+		"DistributionGaussian(double mean, double std_dev)\n"
+		"new_DistributionGaussian() -> DistributionGaussian\n"
 		"DistributionGaussian::DistributionGaussian(double mean, double std_dev)\n"
 		"\n"
 		""},
@@ -125714,6 +125941,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "DistributionGaussian_swigregister", DistributionGaussian_swigregister, METH_O, NULL},
 	 { "DistributionGaussian_swiginit", DistributionGaussian_swiginit, METH_VARARGS, NULL},
 	 { "new_DistributionLogNormal", _wrap_new_DistributionLogNormal, METH_VARARGS, "\n"
+		"DistributionLogNormal(vdouble1d_t P)\n"
 		"new_DistributionLogNormal(double median, double scale_param) -> DistributionLogNormal\n"
 		"DistributionLogNormal::DistributionLogNormal(double median, double scale_param)\n"
 		"\n"
@@ -125783,8 +126011,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "DistributionLogNormal_swigregister", DistributionLogNormal_swigregister, METH_O, NULL},
 	 { "DistributionLogNormal_swiginit", DistributionLogNormal_swiginit, METH_VARARGS, NULL},
 	 { "new_DistributionCosine", _wrap_new_DistributionCosine, METH_VARARGS, "\n"
-		"DistributionCosine()\n"
-		"new_DistributionCosine(double mean, double sigma) -> DistributionCosine\n"
+		"DistributionCosine(vdouble1d_t P)\n"
+		"DistributionCosine(double mean, double sigma)\n"
+		"new_DistributionCosine() -> DistributionCosine\n"
 		"DistributionCosine::DistributionCosine(double mean, double sigma)\n"
 		"\n"
 		""},
@@ -125841,8 +126070,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "DistributionCosine_swigregister", DistributionCosine_swigregister, METH_O, NULL},
 	 { "DistributionCosine_swiginit", DistributionCosine_swiginit, METH_VARARGS, NULL},
 	 { "new_DistributionTrapezoid", _wrap_new_DistributionTrapezoid, METH_VARARGS, "\n"
-		"DistributionTrapezoid()\n"
-		"new_DistributionTrapezoid(double center, double left, double middle, double right) -> DistributionTrapezoid\n"
+		"DistributionTrapezoid(vdouble1d_t P)\n"
+		"DistributionTrapezoid(double center, double left, double middle, double right)\n"
+		"new_DistributionTrapezoid() -> DistributionTrapezoid\n"
 		"DistributionTrapezoid::DistributionTrapezoid(double center, double left_width, double middle_width, double right_width)\n"
 		"\n"
 		""},
-- 
GitLab