From 7e672b2d3ebf0d4f2540e3a6311de045dc478956 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Mon, 19 Sep 2016 17:43:21 +0200
Subject: [PATCH] Changes in FitSuite::addFitParameter

---
 Core/Fitting/FitParameterLinked.cpp           |   3 +-
 Core/Fitting/FitParameterLinked.h             |   5 +-
 Core/Fitting/FitSuite.cpp                     |   6 +-
 Core/Fitting/FitSuite.h                       |   8 +-
 Core/Fitting/FitSuiteImp.cpp                  |  15 +-
 Core/Fitting/FitSuiteImp.h                    |   6 +-
 .../FitCylindersPrisms_detailed.py            |   8 +-
 GUI/coregui/Models/DomainFittingBuilder.cpp   |   4 +-
 Tests/Functional/Fit/ExperimentalFitTest.cpp  |   2 +-
 Tests/Functional/Fit/IMinimizerTest.cpp       |   2 +-
 Tests/Functional/Fit/MinimizerTests.cpp       |   9 +-
 .../Functional/PyFit/testfit_UsingBuilder.py  |  10 +-
 .../UnitTests/Fit/0/FitParameterLinkedTest.h  |   2 +-
 Wrap/swig/libBornAgainFit.i                   |   5 +-
 auto/Wrap/libBornAgainCore.py                 |   5 +-
 auto/Wrap/libBornAgainCore_wrap.cpp           | 772 +++++++---------
 auto/Wrap/libBornAgainFit.py                  | 402 +++-----
 auto/Wrap/libBornAgainFit_wrap.cpp            | 867 ++++++------------
 18 files changed, 744 insertions(+), 1387 deletions(-)

diff --git a/Core/Fitting/FitParameterLinked.cpp b/Core/Fitting/FitParameterLinked.cpp
index 093814f30e8..41e371536bd 100644
--- a/Core/Fitting/FitParameterLinked.cpp
+++ b/Core/Fitting/FitParameterLinked.cpp
@@ -18,7 +18,8 @@
 #include "ParameterPool.h"
 #include "RealParameter.h"
 
-FitParameterLinked::FitParameterLinked(const std::string& name, double value, double step, const AttLimits& lim)
+FitParameterLinked::FitParameterLinked(const std::string& name, double value,
+                                       const AttLimits& lim, double step)
     : FitParameter(name, value, lim, step)
 {}
 
diff --git a/Core/Fitting/FitParameterLinked.h b/Core/Fitting/FitParameterLinked.h
index 8d51585cb52..036e48180b0 100644
--- a/Core/Fitting/FitParameterLinked.h
+++ b/Core/Fitting/FitParameterLinked.h
@@ -29,8 +29,9 @@ class BA_CORE_API_ FitParameterLinked : public FitParameter
 {
  public:
     FitParameterLinked() {}
-    FitParameterLinked(const std::string& name, double value, double step,
-        const AttLimits& lim=AttLimits::limitless());
+    FitParameterLinked(const std::string& name, double value,
+        const AttLimits& lim=AttLimits::limitless(), double step = 0.0);
+
     FitParameterLinked(const FitParameterLinked&) = delete;
     FitParameterLinked& operator=(const FitParameterLinked&) = delete;
     ~FitParameterLinked() final;
diff --git a/Core/Fitting/FitSuite.cpp b/Core/Fitting/FitSuite.cpp
index 7e9f98d6662..d8f52f0f0d2 100644
--- a/Core/Fitting/FitSuite.cpp
+++ b/Core/Fitting/FitSuite.cpp
@@ -40,10 +40,10 @@ void FitSuite::addSimulationAndRealData(const GISASSimulation& simulation,
     m_impl->addSimulationAndRealData(simulation, *data, weight);
 }
 
-void FitSuite::addFitParameter(const std::string& name, double value, const RealLimits& lim,
-                               const Attributes& attr, double step)
+void FitSuite::addFitParameter(const std::string& name, double value,
+                               const AttLimits& limits, double step)
 {
-    m_impl->addFitParameter(name, value, lim, attr, step);
+    m_impl->addFitParameter(name, value, limits, step);
 }
 
 void FitSuite::setMinimizer(const std::string& minimizer_name, const std::string& algorithm_name,
diff --git a/Core/Fitting/FitSuite.h b/Core/Fitting/FitSuite.h
index 26099c26989..32ecbb34a13 100644
--- a/Core/Fitting/FitSuite.h
+++ b/Core/Fitting/FitSuite.h
@@ -16,10 +16,9 @@
 #ifndef FITSUITE_H
 #define FITSUITE_H
 
-#include "Attributes.h"
-#include "RealLimits.h"
 #include "IObserver.h"
 #include "OutputData.h"
+#include "AttLimits.h"
 
 class GISASSimulation;
 class IHistogram;
@@ -59,11 +58,10 @@ public:
     //! Adds fit parameter
     //! @param name The name of fit parameter
     //! @param value Parameter's starting value
-    //! @param attlim Limits attribute
+    //! @param limits Limits attribute
     //! @param step Initial parameter's step (some minimizers don't use it)
     void addFitParameter(const std::string& name, double value,
-                         const RealLimits& lim=RealLimits::limitless(),
-                         const Attributes& attr=Attributes::free(), double step = 0.0);
+                         const AttLimits& limits=AttLimits::limitless(), double step = 0.0);
 
     //! Sets minimizer with given name and algorithm type
     //! @param minimizer_name The name of the minimizer
diff --git a/Core/Fitting/FitSuiteImp.cpp b/Core/Fitting/FitSuiteImp.cpp
index f19b92ebca0..bf96e5280ff 100644
--- a/Core/Fitting/FitSuiteImp.cpp
+++ b/Core/Fitting/FitSuiteImp.cpp
@@ -61,23 +61,18 @@ void FitSuiteImp::addSimulationAndRealData(const GISASSimulation& simulation,
 //! Adds fit parameter, step is calculated from initial parameter value
 void FitSuiteImp::addFitParameter(const std::string& name, double value)
 {
-    addFitParameter(name, value, RealLimits::limitless(), Attributes::free());
+    addFitParameter(name, value, AttLimits::limitless());
 }
 
 //! Adds fit parameter, step is calculated from initial parameter value
-void FitSuiteImp::addFitParameter(const std::string& name, double value, const RealLimits& lim,
-                                const Attributes& attr, double step, double error)
+void FitSuiteImp::addFitParameter(const std::string& name, double value,
+                                  const AttLimits& limits, double step)
 {
     if(step <=0.0)
         step = value * getOptions().getStepFactor();
-//    for(auto par: m_fit_parameters.getFitParameters()) {
-//        if( par->getName() == name )
-//            throw std::runtime_error(
-//                "FitSuiteParameters:addtFitParameter() -> Error. Existing parameter '"+name+"'");
-//    }
-//    m_fit_parameters.addFitParameter(new FitParameterLinked(name, value, step, lim, attr, error));
+
     m_kernel->fitParameters()->addFitParameter(
-                new FitParameterLinked(name, value, step, AttLimits(lim, attr)));
+                new FitParameterLinked(name, value, limits, step));
 }
 
 void FitSuiteImp::addFitStrategy(const IFitStrategy& strategy)
diff --git a/Core/Fitting/FitSuiteImp.h b/Core/Fitting/FitSuiteImp.h
index 35ec239a2dc..bd405cd4dd5 100644
--- a/Core/Fitting/FitSuiteImp.h
+++ b/Core/Fitting/FitSuiteImp.h
@@ -27,8 +27,7 @@
 #include <atomic>
 #endif
 
-class Attributes;
-class RealLimits;
+class AttLimits;
 class GISASSimulation;
 class IMinimizer;
 class FitKernel;
@@ -56,8 +55,7 @@ class BA_CORE_API_ FitSuiteImp
     void addFitParameter(const std::string& name, double value);
     //! Adds fit parameter
     void addFitParameter(const std::string& name, double value,
-                         const RealLimits& lim, const Attributes& attr,
-                         double step=0.0, double error=0.0);
+                         const AttLimits& limits, double step = 0.0);
 
     //! Adds fit strategy
     void addFitStrategy(const IFitStrategy& strategy);
diff --git a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
index 05ccf276361..ee12e0f1e67 100644
--- a/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
+++ b/Examples/python/fitting/ex02_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py
@@ -161,13 +161,13 @@ def create_fit():
 
     # setting fitting parameters with starting values
     fit_suite.addFitParameter("*Cylinder/Height", 4.*nm,
-                              ba.RealLimits.lowerLimited(0.01))
+                              ba.AttLimits.lowerLimited(0.01))
     fit_suite.addFitParameter("*Cylinder/Radius", 6.*nm,
-                              ba.RealLimits.lowerLimited(0.01))
+                              ba.AttLimits.lowerLimited(0.01))
     fit_suite.addFitParameter("*Prism3/Height", 4.*nm,
-                              ba.RealLimits.lowerLimited(0.01))
+                              ba.AttLimits.lowerLimited(0.01))
     fit_suite.addFitParameter("*Prism3/BaseEdge", 12.*nm,
-                              ba.RealLimits.lowerLimited(0.01))
+                              ba.AttLimits.lowerLimited(0.01))
 
     return fit_suite
 
diff --git a/GUI/coregui/Models/DomainFittingBuilder.cpp b/GUI/coregui/Models/DomainFittingBuilder.cpp
index 6d1dd395767..e2f68a3623f 100644
--- a/GUI/coregui/Models/DomainFittingBuilder.cpp
+++ b/GUI/coregui/Models/DomainFittingBuilder.cpp
@@ -48,8 +48,8 @@ std::shared_ptr<FitSuite> DomainFittingBuilder::createFitSuite(JobItem *jobItem)
             QString link = linkItem->getItemValue(FitParameterLinkItem::P_LINK).toString();
             std::string domainPath = "*" + ModelPath::translateParameterName(jobItem->getMultiLayerItem()->parent(), link);
             linkItem->setItemValue(FitParameterLinkItem::P_DOMAIN, QString::fromStdString(domainPath));
-            result->addFitParameter(domainPath, value, parItem->getLimits());
-
+//            result->addFitParameter(domainPath, value, parItem->getLimits());
+            assert(0);
             //FIXME only link is possible at the time due to limitations in FitCore
             break;
         }
diff --git a/Tests/Functional/Fit/ExperimentalFitTest.cpp b/Tests/Functional/Fit/ExperimentalFitTest.cpp
index a00435024a0..bceb8e90d6f 100644
--- a/Tests/Functional/Fit/ExperimentalFitTest.cpp
+++ b/Tests/Functional/Fit/ExperimentalFitTest.cpp
@@ -29,6 +29,6 @@ std::unique_ptr<FitSuite> ExperimentalFitTest::createFitSuite()
     for (const auto& par: m_parameters)
         result->addFitParameter(
             par.m_name, par.m_start_value,
-            RealLimits::lowerLimited(0.01), Attributes::free(), par.m_start_value/100.);
+            AttLimits::lowerLimited(0.01), par.m_start_value/100.);
     return result;
 }
diff --git a/Tests/Functional/Fit/IMinimizerTest.cpp b/Tests/Functional/Fit/IMinimizerTest.cpp
index b644bdf697e..360173f724e 100644
--- a/Tests/Functional/Fit/IMinimizerTest.cpp
+++ b/Tests/Functional/Fit/IMinimizerTest.cpp
@@ -94,7 +94,7 @@ std::unique_ptr<FitSuite> IMinimizerTest::createFitSuite()
     for (size_t i = 0; i < m_parameters.size(); ++i)
         result->addFitParameter(
             m_parameters[i].m_name, m_parameters[i].m_start_value,
-            RealLimits::lowerLimited(0.01), Attributes::free(), m_parameters[i].m_start_value / 100.);
+            AttLimits::lowerLimited(0.01), m_parameters[i].m_start_value / 100.);
     return result;
 }
 
diff --git a/Tests/Functional/Fit/MinimizerTests.cpp b/Tests/Functional/Fit/MinimizerTests.cpp
index 19a1fb66c8c..ace0cbd8293 100644
--- a/Tests/Functional/Fit/MinimizerTests.cpp
+++ b/Tests/Functional/Fit/MinimizerTests.cpp
@@ -62,8 +62,7 @@ std::unique_ptr<FitSuite> GSLSimulatedAnnealingTest::createFitSuite()
     result->setMinimizer(minimizer);
     for (const auto& par: m_parameters)
         result->addFitParameter(
-            par.m_name, par.m_start_value,
-            RealLimits::limited(4.0, 6.0), Attributes::free(), par.m_start_value/100.);
+            par.m_name, par.m_start_value, AttLimits::limited(4.0, 6.0), par.m_start_value/100.);
     return result;
 }
 
@@ -84,13 +83,9 @@ std::unique_ptr<FitSuite> GeneticTest::createFitSuite()
     minimizer->setMaxIterations(1);
     minimizer->setRandomSeed(1);
 
-    // FIXME
-//    minimizer->getOptions()->setMaxIterations(1);
-//    minimizer->getOptions()->setValue("RandomSeed",1);
     result->setMinimizer(minimizer);
     for (const auto& par: m_parameters)
         result->addFitParameter(
-            par.m_name, par.m_start_value,
-            RealLimits::limited(4.0, 6.0), Attributes::free(), par.m_start_value/100.);
+            par.m_name, par.m_start_value, AttLimits::limited(4.0, 6.0), par.m_start_value/100.);
     return result;
 }
diff --git a/Tests/Functional/PyFit/testfit_UsingBuilder.py b/Tests/Functional/PyFit/testfit_UsingBuilder.py
index 676ac8dca90..e9ff318f6f3 100644
--- a/Tests/Functional/PyFit/testfit_UsingBuilder.py
+++ b/Tests/Functional/PyFit/testfit_UsingBuilder.py
@@ -42,15 +42,15 @@ def runTest():
     fitSuite.setMinimizer("Minuit2", "Combined")
     fitSuite.initPrint(10)
     fitSuite.addFitParameter(
-        "*SampleBuilder/cylinder_height",  4*nanometer,  RealLimits.lowerLimited(0.01) )
+        "*SampleBuilder/cylinder_height",  4*nanometer,  AttLimits.lowerLimited(0.01))
     fitSuite.addFitParameter(
-        "*SampleBuilder/cylinder_radius",  6*nanometer,  RealLimits.lowerLimited(0.01) )
+        "*SampleBuilder/cylinder_radius",  6*nanometer,  AttLimits.lowerLimited(0.01))
     fitSuite.addFitParameter(
-        "*SampleBuilder/prism3_half_side", 4*nanometer,  RealLimits.lowerLimited(0.01) )
+        "*SampleBuilder/prism3_half_side", 4*nanometer,  AttLimits.lowerLimited(0.01))
     fitSuite.addFitParameter(
-        "*SampleBuilder/prism3_height",    6*nanometer,  RealLimits.lowerLimited(0.01) )
+        "*SampleBuilder/prism3_height",    6*nanometer,  AttLimits.lowerLimited(0.01))
     fitSuite.addFitParameter(
-        "*SampleBuilder/cylinder_ratio", 0.2, RealLimits.limitless(), Attributes.fixed())
+        "*SampleBuilder/cylinder_ratio", 0.2, AttLimits.fixed())
 
     # chiModule = ChiSquaredModule()
     # chiModule.setChiSquaredFunction( SquaredFunctionMeanSquaredError() )
diff --git a/Tests/UnitTests/Fit/0/FitParameterLinkedTest.h b/Tests/UnitTests/Fit/0/FitParameterLinkedTest.h
index 08de8b293c5..174bf011b06 100644
--- a/Tests/UnitTests/Fit/0/FitParameterLinkedTest.h
+++ b/Tests/UnitTests/Fit/0/FitParameterLinkedTest.h
@@ -34,7 +34,7 @@ TEST_F(FitParameterLinkedTest, FitParameterLinkedWithValue)
 {
     AttLimits limits = AttLimits::limited(-10.0, 2.0);
 
-    FitParameterLinked fitParameter("FitPL", 2.0, 0.2, limits);
+    FitParameterLinked fitParameter("FitPL", 2.0, limits, 0.2);
 
     EXPECT_EQ("FitPL", fitParameter.name());
     EXPECT_EQ(2.0, fitParameter.value());
diff --git a/Wrap/swig/libBornAgainFit.i b/Wrap/swig/libBornAgainFit.i
index 9b12200789e..381d1fbc45a 100644
--- a/Wrap/swig/libBornAgainFit.i
+++ b/Wrap/swig/libBornAgainFit.i
@@ -61,6 +61,7 @@ import_array();
 %import "WinDllMacros.h"
 
 %{
+#include "AttLimits.h"
 #include "FitParameter.h"
 #include "FitParameterSet.h"
 #include "IMinimizer.h"
@@ -76,9 +77,7 @@ import_array();
 // The following goes verbatim from libBornAgainFit.i to libBornAgainFit_wrap.cxx.
 // Note that the order matters, as base classes must be included before derived classes.
 
-%include "Attributes.h"
-%include "RealLimits.h"
-
+%include "AttLimits.h"
 %include "IMinimizer.h"
 %include "FitParameter.h"
 %include "FitParameterSet.h"
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index a338ba17e17..76d7102454a 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -5784,9 +5784,8 @@ class FitSuite(IObservable):
 
     def addFitParameter(self, *args):
         """
-        addFitParameter(FitSuite self, std::string const & name, double value, RealLimits lim, Attributes attr, double step=0.0)
-        addFitParameter(FitSuite self, std::string const & name, double value, RealLimits lim, Attributes attr)
-        addFitParameter(FitSuite self, std::string const & name, double value, RealLimits lim)
+        addFitParameter(FitSuite self, std::string const & name, double value, AttLimits const & limits, double step=0.0)
+        addFitParameter(FitSuite self, std::string const & name, double value, AttLimits const & limits)
         addFitParameter(FitSuite self, std::string const & name, double value)
 
         void FitSuite::addFitParameter(const std::string &name, double value, const RealLimits &lim=RealLimits::limitless(), const Attributes &attr=Attributes::free(), double step=0.0)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index f20dc6619c0..ec8d663be84 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3455,297 +3455,298 @@ namespace Swig {
 /* -------- TYPES TABLE (BEGIN) -------- */
 
 #define SWIGTYPE_p_AngularPixelMap swig_types[0]
-#define SWIGTYPE_p_Attributes swig_types[1]
-#define SWIGTYPE_p_BasicVector3DT_double_t swig_types[2]
-#define SWIGTYPE_p_BasicVector3DT_int_t swig_types[3]
-#define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[4]
-#define SWIGTYPE_p_Beam swig_types[5]
-#define SWIGTYPE_p_Bin1D swig_types[6]
-#define SWIGTYPE_p_Bin1DCVector swig_types[7]
-#define SWIGTYPE_p_Bin1DKVector swig_types[8]
-#define SWIGTYPE_p_CallbackMap_t swig_types[9]
-#define SWIGTYPE_p_ChiSquaredModule swig_types[10]
-#define SWIGTYPE_p_ConstKBinAxis swig_types[11]
-#define SWIGTYPE_p_CreateItemCallback swig_types[12]
-#define SWIGTYPE_p_Crystal swig_types[13]
-#define SWIGTYPE_p_CustomBinAxis swig_types[14]
-#define SWIGTYPE_p_DescriptionMap_t swig_types[15]
-#define SWIGTYPE_p_DetectorMask swig_types[16]
-#define SWIGTYPE_p_DistributionCosine swig_types[17]
-#define SWIGTYPE_p_DistributionGate swig_types[18]
-#define SWIGTYPE_p_DistributionGaussian swig_types[19]
-#define SWIGTYPE_p_DistributionHandler swig_types[20]
-#define SWIGTYPE_p_DistributionLogNormal swig_types[21]
-#define SWIGTYPE_p_DistributionLorentz swig_types[22]
-#define SWIGTYPE_p_FTDecayFunction1DCauchy swig_types[23]
-#define SWIGTYPE_p_FTDecayFunction1DGauss swig_types[24]
-#define SWIGTYPE_p_FTDecayFunction1DTriangle swig_types[25]
-#define SWIGTYPE_p_FTDecayFunction1DVoigt swig_types[26]
-#define SWIGTYPE_p_FTDecayFunction2DCauchy swig_types[27]
-#define SWIGTYPE_p_FTDecayFunction2DGauss swig_types[28]
-#define SWIGTYPE_p_FTDecayFunction2DVoigt swig_types[29]
-#define SWIGTYPE_p_FTDistribution1DCauchy swig_types[30]
-#define SWIGTYPE_p_FTDistribution1DCosine swig_types[31]
-#define SWIGTYPE_p_FTDistribution1DGate swig_types[32]
-#define SWIGTYPE_p_FTDistribution1DGauss swig_types[33]
-#define SWIGTYPE_p_FTDistribution1DTriangle swig_types[34]
-#define SWIGTYPE_p_FTDistribution1DVoigt swig_types[35]
-#define SWIGTYPE_p_FTDistribution2DCauchy swig_types[36]
-#define SWIGTYPE_p_FTDistribution2DCone swig_types[37]
-#define SWIGTYPE_p_FTDistribution2DGate swig_types[38]
-#define SWIGTYPE_p_FTDistribution2DGauss swig_types[39]
-#define SWIGTYPE_p_FTDistribution2DVoigt swig_types[40]
-#define SWIGTYPE_p_FitObject swig_types[41]
-#define SWIGTYPE_p_FitObjects_t swig_types[42]
-#define SWIGTYPE_p_FitOptions swig_types[43]
-#define SWIGTYPE_p_FitParameterSet swig_types[44]
-#define SWIGTYPE_p_FitStrategyAdjustMinimizer swig_types[45]
-#define SWIGTYPE_p_FitStrategyDefault swig_types[46]
-#define SWIGTYPE_p_FitSuite swig_types[47]
-#define SWIGTYPE_p_FitSuiteImp swig_types[48]
-#define SWIGTYPE_p_FitSuiteObjects swig_types[49]
-#define SWIGTYPE_p_FitSuiteStrategies swig_types[50]
-#define SWIGTYPE_p_FixedBinAxis swig_types[51]
-#define SWIGTYPE_p_FormFactorAnisoPyramid swig_types[52]
-#define SWIGTYPE_p_FormFactorBox swig_types[53]
-#define SWIGTYPE_p_FormFactorCone swig_types[54]
-#define SWIGTYPE_p_FormFactorCone6 swig_types[55]
-#define SWIGTYPE_p_FormFactorCrystal swig_types[56]
-#define SWIGTYPE_p_FormFactorCuboctahedron swig_types[57]
-#define SWIGTYPE_p_FormFactorCylinder swig_types[58]
-#define SWIGTYPE_p_FormFactorDecoratorDebyeWaller swig_types[59]
-#define SWIGTYPE_p_FormFactorDecoratorFactor swig_types[60]
-#define SWIGTYPE_p_FormFactorDecoratorMaterial swig_types[61]
-#define SWIGTYPE_p_FormFactorDecoratorPositionFactor swig_types[62]
-#define SWIGTYPE_p_FormFactorDecoratorRotation swig_types[63]
-#define SWIGTYPE_p_FormFactorDodecahedron swig_types[64]
-#define SWIGTYPE_p_FormFactorEllipsoidalCylinder swig_types[65]
-#define SWIGTYPE_p_FormFactorFullSphere swig_types[66]
-#define SWIGTYPE_p_FormFactorFullSpheroid swig_types[67]
-#define SWIGTYPE_p_FormFactorGauss swig_types[68]
-#define SWIGTYPE_p_FormFactorHemiEllipsoid swig_types[69]
-#define SWIGTYPE_p_FormFactorIcosahedron swig_types[70]
-#define SWIGTYPE_p_FormFactorLongBoxGauss swig_types[71]
-#define SWIGTYPE_p_FormFactorLongBoxLorentz swig_types[72]
-#define SWIGTYPE_p_FormFactorLongRipple1Gauss swig_types[73]
-#define SWIGTYPE_p_FormFactorLongRipple1Lorentz swig_types[74]
-#define SWIGTYPE_p_FormFactorLongRipple2Gauss swig_types[75]
-#define SWIGTYPE_p_FormFactorLongRipple2Lorentz swig_types[76]
-#define SWIGTYPE_p_FormFactorLorentz swig_types[77]
-#define SWIGTYPE_p_FormFactorPolygonalPrism swig_types[78]
-#define SWIGTYPE_p_FormFactorPolygonalSurface swig_types[79]
-#define SWIGTYPE_p_FormFactorPolyhedron swig_types[80]
-#define SWIGTYPE_p_FormFactorPrism3 swig_types[81]
-#define SWIGTYPE_p_FormFactorPrism6 swig_types[82]
-#define SWIGTYPE_p_FormFactorPyramid swig_types[83]
-#define SWIGTYPE_p_FormFactorRipple1 swig_types[84]
-#define SWIGTYPE_p_FormFactorRipple2 swig_types[85]
-#define SWIGTYPE_p_FormFactorSphereGaussianRadius swig_types[86]
-#define SWIGTYPE_p_FormFactorSphereLogNormalRadius swig_types[87]
-#define SWIGTYPE_p_FormFactorSphereUniformRadius swig_types[88]
-#define SWIGTYPE_p_FormFactorTetrahedron swig_types[89]
-#define SWIGTYPE_p_FormFactorTrivial swig_types[90]
-#define SWIGTYPE_p_FormFactorTruncatedCube swig_types[91]
-#define SWIGTYPE_p_FormFactorTruncatedSphere swig_types[92]
-#define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[93]
-#define SWIGTYPE_p_FormFactorWeighted swig_types[94]
-#define SWIGTYPE_p_GISASSimulation swig_types[95]
-#define SWIGTYPE_p_Geometry__Ellipse swig_types[96]
-#define SWIGTYPE_p_Geometry__HorizontalLine swig_types[97]
-#define SWIGTYPE_p_Geometry__IShape2D swig_types[98]
-#define SWIGTYPE_p_Geometry__Line swig_types[99]
-#define SWIGTYPE_p_Geometry__Polygon swig_types[100]
-#define SWIGTYPE_p_Geometry__PolygonPrivate swig_types[101]
-#define SWIGTYPE_p_Geometry__Rectangle swig_types[102]
-#define SWIGTYPE_p_Geometry__VerticalLine swig_types[103]
-#define SWIGTYPE_p_Histogram1D swig_types[104]
-#define SWIGTYPE_p_Histogram2D swig_types[105]
-#define SWIGTYPE_p_HomogeneousMagneticMaterial swig_types[106]
-#define SWIGTYPE_p_HomogeneousMaterial swig_types[107]
-#define SWIGTYPE_p_IAbstractParticle swig_types[108]
-#define SWIGTYPE_p_IAxis swig_types[109]
-#define SWIGTYPE_p_IChiSquaredModule swig_types[110]
-#define SWIGTYPE_p_ICloneable swig_types[111]
-#define SWIGTYPE_p_IClusteredParticles swig_types[112]
-#define SWIGTYPE_p_ICompositeSample swig_types[113]
-#define SWIGTYPE_p_IDetector2D swig_types[114]
-#define SWIGTYPE_p_IDetectorResolution swig_types[115]
-#define SWIGTYPE_p_IDistribution1D swig_types[116]
-#define SWIGTYPE_p_IFTDecayFunction1D swig_types[117]
-#define SWIGTYPE_p_IFTDecayFunction2D swig_types[118]
-#define SWIGTYPE_p_IFTDistribution1D swig_types[119]
-#define SWIGTYPE_p_IFTDistribution2D swig_types[120]
-#define SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t swig_types[121]
-#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[122]
-#define SWIGTYPE_p_IFitObserver swig_types[123]
-#define SWIGTYPE_p_IFitStrategy swig_types[124]
-#define SWIGTYPE_p_IFormFactor swig_types[125]
-#define SWIGTYPE_p_IFormFactorBorn swig_types[126]
-#define SWIGTYPE_p_IFormFactorDecorator swig_types[127]
-#define SWIGTYPE_p_IHistogram swig_types[128]
-#define SWIGTYPE_p_IIntensityFunction swig_types[129]
-#define SWIGTYPE_p_IIntensityNormalizer swig_types[130]
-#define SWIGTYPE_p_IInterferenceFunction swig_types[131]
-#define SWIGTYPE_p_ILayerRTCoefficients swig_types[132]
-#define SWIGTYPE_p_ILayout swig_types[133]
-#define SWIGTYPE_p_IMaterial swig_types[134]
-#define SWIGTYPE_p_IMinimizer swig_types[135]
-#define SWIGTYPE_p_IMultiLayerBuilder swig_types[136]
-#define SWIGTYPE_p_INamed swig_types[137]
-#define SWIGTYPE_p_INoncopyable swig_types[138]
-#define SWIGTYPE_p_IObservable swig_types[139]
-#define SWIGTYPE_p_IObserver swig_types[140]
-#define SWIGTYPE_p_IParameterT_double_t swig_types[141]
-#define SWIGTYPE_p_IParameterized swig_types[142]
-#define SWIGTYPE_p_IParticle swig_types[143]
-#define SWIGTYPE_p_IPixelMap swig_types[144]
-#define SWIGTYPE_p_IResolutionFunction2D swig_types[145]
-#define SWIGTYPE_p_IRotation swig_types[146]
-#define SWIGTYPE_p_IRoughness swig_types[147]
-#define SWIGTYPE_p_ISample swig_types[148]
-#define SWIGTYPE_p_ISampleVisitor swig_types[149]
-#define SWIGTYPE_p_ISelectionRule swig_types[150]
-#define SWIGTYPE_p_ISquaredFunction swig_types[151]
-#define SWIGTYPE_p_Instrument swig_types[152]
-#define SWIGTYPE_p_IntensityDataFunctions swig_types[153]
-#define SWIGTYPE_p_IntensityDataIOFactory swig_types[154]
-#define SWIGTYPE_p_IntensityFunctionLog swig_types[155]
-#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[156]
-#define SWIGTYPE_p_IntensityNormalizer swig_types[157]
-#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[158]
-#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[159]
-#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[160]
-#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[161]
-#define SWIGTYPE_p_InterferenceFunctionNone swig_types[162]
-#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[163]
-#define SWIGTYPE_p_IsGISAXSDetector swig_types[164]
-#define SWIGTYPE_p_Lattice swig_types[165]
-#define SWIGTYPE_p_Lattice1DParameters swig_types[166]
-#define SWIGTYPE_p_Lattice2DParameters swig_types[167]
-#define SWIGTYPE_p_Layer swig_types[168]
-#define SWIGTYPE_p_LayerInterface swig_types[169]
-#define SWIGTYPE_p_LayerRTCoefficients_t swig_types[170]
-#define SWIGTYPE_p_LayerRoughness swig_types[171]
-#define SWIGTYPE_p_MSG__Logger swig_types[172]
-#define SWIGTYPE_p_Mask swig_types[173]
-#define SWIGTYPE_p_MesoCrystal swig_types[174]
-#define SWIGTYPE_p_MultiLayer swig_types[175]
-#define SWIGTYPE_p_MultiLayerRTCoefficients_t swig_types[176]
-#define SWIGTYPE_p_ObsoleteMinimizerOptions swig_types[177]
-#define SWIGTYPE_p_OffSpecSimulation swig_types[178]
-#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[179]
-#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[180]
-#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[181]
-#define SWIGTYPE_p_OutputDataT_bool_t swig_types[182]
-#define SWIGTYPE_p_OutputDataT_double_t swig_types[183]
-#define SWIGTYPE_p_OutputDataT_std__complexT_double_t_t swig_types[184]
-#define SWIGTYPE_p_ParameterDistribution swig_types[185]
-#define SWIGTYPE_p_ParameterPool swig_types[186]
-#define SWIGTYPE_p_ParameterSample swig_types[187]
-#define SWIGTYPE_p_Particle swig_types[188]
-#define SWIGTYPE_p_ParticleComposition swig_types[189]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[190]
-#define SWIGTYPE_p_ParticleDistribution swig_types[191]
-#define SWIGTYPE_p_ParticleLayout swig_types[192]
-#define SWIGTYPE_p_PolygonalTopology swig_types[193]
-#define SWIGTYPE_p_PolyhedralEdge swig_types[194]
-#define SWIGTYPE_p_PolyhedralFace swig_types[195]
-#define SWIGTYPE_p_PolyhedralTopology swig_types[196]
-#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[197]
-#define SWIGTYPE_p_RealLimits swig_types[198]
-#define SWIGTYPE_p_RealParameter swig_types[199]
-#define SWIGTYPE_p_RectPixelMap swig_types[200]
-#define SWIGTYPE_p_RectangularDetector swig_types[201]
-#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[202]
-#define SWIGTYPE_p_RotationEuler swig_types[203]
-#define SWIGTYPE_p_RotationX swig_types[204]
-#define SWIGTYPE_p_RotationY swig_types[205]
-#define SWIGTYPE_p_RotationZ swig_types[206]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[207]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[208]
-#define SWIGTYPE_p_Simulation swig_types[209]
-#define SWIGTYPE_p_SimulationOptions swig_types[210]
-#define SWIGTYPE_p_SpecularSimulation swig_types[211]
-#define SWIGTYPE_p_SphericalDetector swig_types[212]
-#define SWIGTYPE_p_SquaredFunctionDefault swig_types[213]
-#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[214]
-#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[215]
-#define SWIGTYPE_p_SquaredFunctionSimError swig_types[216]
-#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[217]
-#define SWIGTYPE_p_ThreadInfo swig_types[218]
-#define SWIGTYPE_p_Transform3D swig_types[219]
-#define SWIGTYPE_p_VariableBinAxis swig_types[220]
-#define SWIGTYPE_p_WavevectorInfo swig_types[221]
-#define SWIGTYPE_p__object swig_types[222]
-#define SWIGTYPE_p_allocator_type swig_types[223]
-#define SWIGTYPE_p_bool swig_types[224]
-#define SWIGTYPE_p_char swig_types[225]
-#define SWIGTYPE_p_const_iterator swig_types[226]
-#define SWIGTYPE_p_const_reference swig_types[227]
-#define SWIGTYPE_p_difference_type swig_types[228]
-#define SWIGTYPE_p_double swig_types[229]
-#define SWIGTYPE_p_int swig_types[230]
-#define SWIGTYPE_p_iterator swig_types[231]
-#define SWIGTYPE_p_long_long swig_types[232]
-#define SWIGTYPE_p_observer_t swig_types[233]
-#define SWIGTYPE_p_observerlist_t swig_types[234]
-#define SWIGTYPE_p_p__object swig_types[235]
-#define SWIGTYPE_p_reference swig_types[236]
-#define SWIGTYPE_p_short swig_types[237]
-#define SWIGTYPE_p_signed_char swig_types[238]
-#define SWIGTYPE_p_size_type swig_types[239]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[240]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[241]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[242]
-#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[243]
-#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[244]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[245]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[246]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[247]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[248]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[249]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[250]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[251]
-#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[252]
-#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[253]
-#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[254]
-#define SWIGTYPE_p_std__invalid_argument swig_types[255]
-#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[256]
-#define SWIGTYPE_p_std__ostream swig_types[257]
-#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[258]
-#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[259]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[260]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[261]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[262]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[263]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[264]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[265]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[266]
-#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[267]
-#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[268]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[269]
-#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[270]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[271]
-#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[272]
-#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[273]
-#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[274]
-#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[275]
-#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[276]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[277]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[278]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[279]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[280]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[281]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[282]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[283]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[284]
-#define SWIGTYPE_p_unsigned_char swig_types[285]
-#define SWIGTYPE_p_unsigned_int swig_types[286]
-#define SWIGTYPE_p_unsigned_long_long swig_types[287]
-#define SWIGTYPE_p_unsigned_short swig_types[288]
-#define SWIGTYPE_p_value_type swig_types[289]
-static swig_type_info *swig_types[291];
-static swig_module_info swig_module = {swig_types, 290, 0, 0, 0, 0};
+#define SWIGTYPE_p_AttLimits swig_types[1]
+#define SWIGTYPE_p_Attributes swig_types[2]
+#define SWIGTYPE_p_BasicVector3DT_double_t swig_types[3]
+#define SWIGTYPE_p_BasicVector3DT_int_t swig_types[4]
+#define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[5]
+#define SWIGTYPE_p_Beam swig_types[6]
+#define SWIGTYPE_p_Bin1D swig_types[7]
+#define SWIGTYPE_p_Bin1DCVector swig_types[8]
+#define SWIGTYPE_p_Bin1DKVector swig_types[9]
+#define SWIGTYPE_p_CallbackMap_t swig_types[10]
+#define SWIGTYPE_p_ChiSquaredModule swig_types[11]
+#define SWIGTYPE_p_ConstKBinAxis swig_types[12]
+#define SWIGTYPE_p_CreateItemCallback swig_types[13]
+#define SWIGTYPE_p_Crystal swig_types[14]
+#define SWIGTYPE_p_CustomBinAxis swig_types[15]
+#define SWIGTYPE_p_DescriptionMap_t swig_types[16]
+#define SWIGTYPE_p_DetectorMask swig_types[17]
+#define SWIGTYPE_p_DistributionCosine swig_types[18]
+#define SWIGTYPE_p_DistributionGate swig_types[19]
+#define SWIGTYPE_p_DistributionGaussian swig_types[20]
+#define SWIGTYPE_p_DistributionHandler swig_types[21]
+#define SWIGTYPE_p_DistributionLogNormal swig_types[22]
+#define SWIGTYPE_p_DistributionLorentz swig_types[23]
+#define SWIGTYPE_p_FTDecayFunction1DCauchy swig_types[24]
+#define SWIGTYPE_p_FTDecayFunction1DGauss swig_types[25]
+#define SWIGTYPE_p_FTDecayFunction1DTriangle swig_types[26]
+#define SWIGTYPE_p_FTDecayFunction1DVoigt swig_types[27]
+#define SWIGTYPE_p_FTDecayFunction2DCauchy swig_types[28]
+#define SWIGTYPE_p_FTDecayFunction2DGauss swig_types[29]
+#define SWIGTYPE_p_FTDecayFunction2DVoigt swig_types[30]
+#define SWIGTYPE_p_FTDistribution1DCauchy swig_types[31]
+#define SWIGTYPE_p_FTDistribution1DCosine swig_types[32]
+#define SWIGTYPE_p_FTDistribution1DGate swig_types[33]
+#define SWIGTYPE_p_FTDistribution1DGauss swig_types[34]
+#define SWIGTYPE_p_FTDistribution1DTriangle swig_types[35]
+#define SWIGTYPE_p_FTDistribution1DVoigt swig_types[36]
+#define SWIGTYPE_p_FTDistribution2DCauchy swig_types[37]
+#define SWIGTYPE_p_FTDistribution2DCone swig_types[38]
+#define SWIGTYPE_p_FTDistribution2DGate swig_types[39]
+#define SWIGTYPE_p_FTDistribution2DGauss swig_types[40]
+#define SWIGTYPE_p_FTDistribution2DVoigt swig_types[41]
+#define SWIGTYPE_p_FitObject swig_types[42]
+#define SWIGTYPE_p_FitObjects_t swig_types[43]
+#define SWIGTYPE_p_FitOptions swig_types[44]
+#define SWIGTYPE_p_FitParameterSet swig_types[45]
+#define SWIGTYPE_p_FitStrategyAdjustMinimizer swig_types[46]
+#define SWIGTYPE_p_FitStrategyDefault swig_types[47]
+#define SWIGTYPE_p_FitSuite swig_types[48]
+#define SWIGTYPE_p_FitSuiteImp swig_types[49]
+#define SWIGTYPE_p_FitSuiteObjects swig_types[50]
+#define SWIGTYPE_p_FitSuiteStrategies swig_types[51]
+#define SWIGTYPE_p_FixedBinAxis swig_types[52]
+#define SWIGTYPE_p_FormFactorAnisoPyramid swig_types[53]
+#define SWIGTYPE_p_FormFactorBox swig_types[54]
+#define SWIGTYPE_p_FormFactorCone swig_types[55]
+#define SWIGTYPE_p_FormFactorCone6 swig_types[56]
+#define SWIGTYPE_p_FormFactorCrystal swig_types[57]
+#define SWIGTYPE_p_FormFactorCuboctahedron swig_types[58]
+#define SWIGTYPE_p_FormFactorCylinder swig_types[59]
+#define SWIGTYPE_p_FormFactorDecoratorDebyeWaller swig_types[60]
+#define SWIGTYPE_p_FormFactorDecoratorFactor swig_types[61]
+#define SWIGTYPE_p_FormFactorDecoratorMaterial swig_types[62]
+#define SWIGTYPE_p_FormFactorDecoratorPositionFactor swig_types[63]
+#define SWIGTYPE_p_FormFactorDecoratorRotation swig_types[64]
+#define SWIGTYPE_p_FormFactorDodecahedron swig_types[65]
+#define SWIGTYPE_p_FormFactorEllipsoidalCylinder swig_types[66]
+#define SWIGTYPE_p_FormFactorFullSphere swig_types[67]
+#define SWIGTYPE_p_FormFactorFullSpheroid swig_types[68]
+#define SWIGTYPE_p_FormFactorGauss swig_types[69]
+#define SWIGTYPE_p_FormFactorHemiEllipsoid swig_types[70]
+#define SWIGTYPE_p_FormFactorIcosahedron swig_types[71]
+#define SWIGTYPE_p_FormFactorLongBoxGauss swig_types[72]
+#define SWIGTYPE_p_FormFactorLongBoxLorentz swig_types[73]
+#define SWIGTYPE_p_FormFactorLongRipple1Gauss swig_types[74]
+#define SWIGTYPE_p_FormFactorLongRipple1Lorentz swig_types[75]
+#define SWIGTYPE_p_FormFactorLongRipple2Gauss swig_types[76]
+#define SWIGTYPE_p_FormFactorLongRipple2Lorentz swig_types[77]
+#define SWIGTYPE_p_FormFactorLorentz swig_types[78]
+#define SWIGTYPE_p_FormFactorPolygonalPrism swig_types[79]
+#define SWIGTYPE_p_FormFactorPolygonalSurface swig_types[80]
+#define SWIGTYPE_p_FormFactorPolyhedron swig_types[81]
+#define SWIGTYPE_p_FormFactorPrism3 swig_types[82]
+#define SWIGTYPE_p_FormFactorPrism6 swig_types[83]
+#define SWIGTYPE_p_FormFactorPyramid swig_types[84]
+#define SWIGTYPE_p_FormFactorRipple1 swig_types[85]
+#define SWIGTYPE_p_FormFactorRipple2 swig_types[86]
+#define SWIGTYPE_p_FormFactorSphereGaussianRadius swig_types[87]
+#define SWIGTYPE_p_FormFactorSphereLogNormalRadius swig_types[88]
+#define SWIGTYPE_p_FormFactorSphereUniformRadius swig_types[89]
+#define SWIGTYPE_p_FormFactorTetrahedron swig_types[90]
+#define SWIGTYPE_p_FormFactorTrivial swig_types[91]
+#define SWIGTYPE_p_FormFactorTruncatedCube swig_types[92]
+#define SWIGTYPE_p_FormFactorTruncatedSphere swig_types[93]
+#define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[94]
+#define SWIGTYPE_p_FormFactorWeighted swig_types[95]
+#define SWIGTYPE_p_GISASSimulation swig_types[96]
+#define SWIGTYPE_p_Geometry__Ellipse swig_types[97]
+#define SWIGTYPE_p_Geometry__HorizontalLine swig_types[98]
+#define SWIGTYPE_p_Geometry__IShape2D swig_types[99]
+#define SWIGTYPE_p_Geometry__Line swig_types[100]
+#define SWIGTYPE_p_Geometry__Polygon swig_types[101]
+#define SWIGTYPE_p_Geometry__PolygonPrivate swig_types[102]
+#define SWIGTYPE_p_Geometry__Rectangle swig_types[103]
+#define SWIGTYPE_p_Geometry__VerticalLine swig_types[104]
+#define SWIGTYPE_p_Histogram1D swig_types[105]
+#define SWIGTYPE_p_Histogram2D swig_types[106]
+#define SWIGTYPE_p_HomogeneousMagneticMaterial swig_types[107]
+#define SWIGTYPE_p_HomogeneousMaterial swig_types[108]
+#define SWIGTYPE_p_IAbstractParticle swig_types[109]
+#define SWIGTYPE_p_IAxis swig_types[110]
+#define SWIGTYPE_p_IChiSquaredModule swig_types[111]
+#define SWIGTYPE_p_ICloneable swig_types[112]
+#define SWIGTYPE_p_IClusteredParticles swig_types[113]
+#define SWIGTYPE_p_ICompositeSample swig_types[114]
+#define SWIGTYPE_p_IDetector2D swig_types[115]
+#define SWIGTYPE_p_IDetectorResolution swig_types[116]
+#define SWIGTYPE_p_IDistribution1D swig_types[117]
+#define SWIGTYPE_p_IFTDecayFunction1D swig_types[118]
+#define SWIGTYPE_p_IFTDecayFunction2D swig_types[119]
+#define SWIGTYPE_p_IFTDistribution1D swig_types[120]
+#define SWIGTYPE_p_IFTDistribution2D swig_types[121]
+#define SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t swig_types[122]
+#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[123]
+#define SWIGTYPE_p_IFitObserver swig_types[124]
+#define SWIGTYPE_p_IFitStrategy swig_types[125]
+#define SWIGTYPE_p_IFormFactor swig_types[126]
+#define SWIGTYPE_p_IFormFactorBorn swig_types[127]
+#define SWIGTYPE_p_IFormFactorDecorator swig_types[128]
+#define SWIGTYPE_p_IHistogram swig_types[129]
+#define SWIGTYPE_p_IIntensityFunction swig_types[130]
+#define SWIGTYPE_p_IIntensityNormalizer swig_types[131]
+#define SWIGTYPE_p_IInterferenceFunction swig_types[132]
+#define SWIGTYPE_p_ILayerRTCoefficients swig_types[133]
+#define SWIGTYPE_p_ILayout swig_types[134]
+#define SWIGTYPE_p_IMaterial swig_types[135]
+#define SWIGTYPE_p_IMinimizer swig_types[136]
+#define SWIGTYPE_p_IMultiLayerBuilder swig_types[137]
+#define SWIGTYPE_p_INamed swig_types[138]
+#define SWIGTYPE_p_INoncopyable swig_types[139]
+#define SWIGTYPE_p_IObservable swig_types[140]
+#define SWIGTYPE_p_IObserver swig_types[141]
+#define SWIGTYPE_p_IParameterT_double_t swig_types[142]
+#define SWIGTYPE_p_IParameterized swig_types[143]
+#define SWIGTYPE_p_IParticle swig_types[144]
+#define SWIGTYPE_p_IPixelMap swig_types[145]
+#define SWIGTYPE_p_IResolutionFunction2D swig_types[146]
+#define SWIGTYPE_p_IRotation swig_types[147]
+#define SWIGTYPE_p_IRoughness swig_types[148]
+#define SWIGTYPE_p_ISample swig_types[149]
+#define SWIGTYPE_p_ISampleVisitor swig_types[150]
+#define SWIGTYPE_p_ISelectionRule swig_types[151]
+#define SWIGTYPE_p_ISquaredFunction swig_types[152]
+#define SWIGTYPE_p_Instrument swig_types[153]
+#define SWIGTYPE_p_IntensityDataFunctions swig_types[154]
+#define SWIGTYPE_p_IntensityDataIOFactory swig_types[155]
+#define SWIGTYPE_p_IntensityFunctionLog swig_types[156]
+#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[157]
+#define SWIGTYPE_p_IntensityNormalizer swig_types[158]
+#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[159]
+#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[160]
+#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[161]
+#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[162]
+#define SWIGTYPE_p_InterferenceFunctionNone swig_types[163]
+#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[164]
+#define SWIGTYPE_p_IsGISAXSDetector swig_types[165]
+#define SWIGTYPE_p_Lattice swig_types[166]
+#define SWIGTYPE_p_Lattice1DParameters swig_types[167]
+#define SWIGTYPE_p_Lattice2DParameters swig_types[168]
+#define SWIGTYPE_p_Layer swig_types[169]
+#define SWIGTYPE_p_LayerInterface swig_types[170]
+#define SWIGTYPE_p_LayerRTCoefficients_t swig_types[171]
+#define SWIGTYPE_p_LayerRoughness swig_types[172]
+#define SWIGTYPE_p_MSG__Logger swig_types[173]
+#define SWIGTYPE_p_Mask swig_types[174]
+#define SWIGTYPE_p_MesoCrystal swig_types[175]
+#define SWIGTYPE_p_MultiLayer swig_types[176]
+#define SWIGTYPE_p_MultiLayerRTCoefficients_t swig_types[177]
+#define SWIGTYPE_p_ObsoleteMinimizerOptions swig_types[178]
+#define SWIGTYPE_p_OffSpecSimulation swig_types[179]
+#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[180]
+#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[181]
+#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[182]
+#define SWIGTYPE_p_OutputDataT_bool_t swig_types[183]
+#define SWIGTYPE_p_OutputDataT_double_t swig_types[184]
+#define SWIGTYPE_p_OutputDataT_std__complexT_double_t_t swig_types[185]
+#define SWIGTYPE_p_ParameterDistribution swig_types[186]
+#define SWIGTYPE_p_ParameterPool swig_types[187]
+#define SWIGTYPE_p_ParameterSample swig_types[188]
+#define SWIGTYPE_p_Particle swig_types[189]
+#define SWIGTYPE_p_ParticleComposition swig_types[190]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[191]
+#define SWIGTYPE_p_ParticleDistribution swig_types[192]
+#define SWIGTYPE_p_ParticleLayout swig_types[193]
+#define SWIGTYPE_p_PolygonalTopology swig_types[194]
+#define SWIGTYPE_p_PolyhedralEdge swig_types[195]
+#define SWIGTYPE_p_PolyhedralFace swig_types[196]
+#define SWIGTYPE_p_PolyhedralTopology swig_types[197]
+#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[198]
+#define SWIGTYPE_p_RealLimits swig_types[199]
+#define SWIGTYPE_p_RealParameter swig_types[200]
+#define SWIGTYPE_p_RectPixelMap swig_types[201]
+#define SWIGTYPE_p_RectangularDetector swig_types[202]
+#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[203]
+#define SWIGTYPE_p_RotationEuler swig_types[204]
+#define SWIGTYPE_p_RotationX swig_types[205]
+#define SWIGTYPE_p_RotationY swig_types[206]
+#define SWIGTYPE_p_RotationZ swig_types[207]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[208]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[209]
+#define SWIGTYPE_p_Simulation swig_types[210]
+#define SWIGTYPE_p_SimulationOptions swig_types[211]
+#define SWIGTYPE_p_SpecularSimulation swig_types[212]
+#define SWIGTYPE_p_SphericalDetector swig_types[213]
+#define SWIGTYPE_p_SquaredFunctionDefault swig_types[214]
+#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[215]
+#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[216]
+#define SWIGTYPE_p_SquaredFunctionSimError swig_types[217]
+#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[218]
+#define SWIGTYPE_p_ThreadInfo swig_types[219]
+#define SWIGTYPE_p_Transform3D swig_types[220]
+#define SWIGTYPE_p_VariableBinAxis swig_types[221]
+#define SWIGTYPE_p_WavevectorInfo swig_types[222]
+#define SWIGTYPE_p__object swig_types[223]
+#define SWIGTYPE_p_allocator_type swig_types[224]
+#define SWIGTYPE_p_bool swig_types[225]
+#define SWIGTYPE_p_char swig_types[226]
+#define SWIGTYPE_p_const_iterator swig_types[227]
+#define SWIGTYPE_p_const_reference swig_types[228]
+#define SWIGTYPE_p_difference_type swig_types[229]
+#define SWIGTYPE_p_double swig_types[230]
+#define SWIGTYPE_p_int swig_types[231]
+#define SWIGTYPE_p_iterator swig_types[232]
+#define SWIGTYPE_p_long_long swig_types[233]
+#define SWIGTYPE_p_observer_t swig_types[234]
+#define SWIGTYPE_p_observerlist_t swig_types[235]
+#define SWIGTYPE_p_p__object swig_types[236]
+#define SWIGTYPE_p_reference swig_types[237]
+#define SWIGTYPE_p_short swig_types[238]
+#define SWIGTYPE_p_signed_char swig_types[239]
+#define SWIGTYPE_p_size_type swig_types[240]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[241]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[242]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[243]
+#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[244]
+#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[245]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[246]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[247]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[248]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[249]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[250]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[251]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[252]
+#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[253]
+#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[254]
+#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[255]
+#define SWIGTYPE_p_std__invalid_argument swig_types[256]
+#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[257]
+#define SWIGTYPE_p_std__ostream swig_types[258]
+#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[259]
+#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[260]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[261]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[262]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[263]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[264]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[265]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[266]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[267]
+#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[268]
+#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[269]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[270]
+#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[271]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[272]
+#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[273]
+#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[274]
+#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[275]
+#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[276]
+#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[277]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[278]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[279]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[280]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[281]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[282]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[283]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[284]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[285]
+#define SWIGTYPE_p_unsigned_char swig_types[286]
+#define SWIGTYPE_p_unsigned_int swig_types[287]
+#define SWIGTYPE_p_unsigned_long_long swig_types[288]
+#define SWIGTYPE_p_unsigned_short swig_types[289]
+#define SWIGTYPE_p_value_type swig_types[290]
+static swig_type_info *swig_types[292];
+static swig_module_info swig_module = {swig_types, 291, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -39165,9 +39166,8 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_0(PyObject *SWIGUNUSED
   FitSuite *arg1 = (FitSuite *) 0 ;
   std::string *arg2 = 0 ;
   double arg3 ;
-  RealLimits *arg4 = 0 ;
-  Attributes *arg5 = 0 ;
-  double arg6 ;
+  AttLimits *arg4 = 0 ;
+  double arg5 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   int res2 = SWIG_OLDOBJ ;
@@ -39175,18 +39175,15 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_0(PyObject *SWIGUNUSED
   int ecode3 = 0 ;
   void *argp4 = 0 ;
   int res4 = 0 ;
-  void *argp5 = 0 ;
-  int res5 = 0 ;
-  double val6 ;
-  int ecode6 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
   PyObject * obj2 = 0 ;
   PyObject * obj3 = 0 ;
   PyObject * obj4 = 0 ;
-  PyObject * obj5 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOOOOO:FitSuite_addFitParameter",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOOOO:FitSuite_addFitParameter",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitSuite, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitSuite_addFitParameter" "', argument " "1"" of type '" "FitSuite *""'"); 
@@ -39208,28 +39205,20 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_0(PyObject *SWIGUNUSED
     SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitSuite_addFitParameter" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_RealLimits,  0  | 0);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_AttLimits,  0  | 0);
   if (!SWIG_IsOK(res4)) {
-    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "AttLimits const &""'"); 
   }
   if (!argp4) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
-  }
-  arg4 = reinterpret_cast< RealLimits * >(argp4);
-  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_Attributes,  0  | 0);
-  if (!SWIG_IsOK(res5)) {
-    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "FitSuite_addFitParameter" "', argument " "5"" of type '" "Attributes const &""'"); 
-  }
-  if (!argp5) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "5"" of type '" "Attributes const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "AttLimits const &""'"); 
   }
-  arg5 = reinterpret_cast< Attributes * >(argp5);
-  ecode6 = SWIG_AsVal_double(obj5, &val6);
-  if (!SWIG_IsOK(ecode6)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode6), "in method '" "FitSuite_addFitParameter" "', argument " "6"" of type '" "double""'");
+  arg4 = reinterpret_cast< AttLimits * >(argp4);
+  ecode5 = SWIG_AsVal_double(obj4, &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "FitSuite_addFitParameter" "', argument " "5"" of type '" "double""'");
   } 
-  arg6 = static_cast< double >(val6);
-  (arg1)->addFitParameter((std::string const &)*arg2,arg3,(RealLimits const &)*arg4,(Attributes const &)*arg5,arg6);
+  arg5 = static_cast< double >(val5);
+  (arg1)->addFitParameter((std::string const &)*arg2,arg3,(AttLimits const &)*arg4,arg5);
   resultobj = SWIG_Py_Void();
   if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
@@ -39244,77 +39233,7 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_1(PyObject *SWIGUNUSED
   FitSuite *arg1 = (FitSuite *) 0 ;
   std::string *arg2 = 0 ;
   double arg3 ;
-  RealLimits *arg4 = 0 ;
-  Attributes *arg5 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  double val3 ;
-  int ecode3 = 0 ;
-  void *argp4 = 0 ;
-  int res4 = 0 ;
-  void *argp5 = 0 ;
-  int res5 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  PyObject * obj3 = 0 ;
-  PyObject * obj4 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOOOO:FitSuite_addFitParameter",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitSuite, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitSuite_addFitParameter" "', argument " "1"" of type '" "FitSuite *""'"); 
-  }
-  arg1 = reinterpret_cast< FitSuite * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitSuite_addFitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitSuite_addFitParameter" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_RealLimits,  0  | 0);
-  if (!SWIG_IsOK(res4)) {
-    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
-  }
-  if (!argp4) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
-  }
-  arg4 = reinterpret_cast< RealLimits * >(argp4);
-  res5 = SWIG_ConvertPtr(obj4, &argp5, SWIGTYPE_p_Attributes,  0  | 0);
-  if (!SWIG_IsOK(res5)) {
-    SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "FitSuite_addFitParameter" "', argument " "5"" of type '" "Attributes const &""'"); 
-  }
-  if (!argp5) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "5"" of type '" "Attributes const &""'"); 
-  }
-  arg5 = reinterpret_cast< Attributes * >(argp5);
-  (arg1)->addFitParameter((std::string const &)*arg2,arg3,(RealLimits const &)*arg4,(Attributes const &)*arg5);
-  resultobj = SWIG_Py_Void();
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitSuite *arg1 = (FitSuite *) 0 ;
-  std::string *arg2 = 0 ;
-  double arg3 ;
-  RealLimits *arg4 = 0 ;
+  AttLimits *arg4 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   int res2 = SWIG_OLDOBJ ;
@@ -39349,15 +39268,15 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_2(PyObject *SWIGUNUSED
     SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitSuite_addFitParameter" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_RealLimits,  0  | 0);
+  res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_AttLimits,  0  | 0);
   if (!SWIG_IsOK(res4)) {
-    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "AttLimits const &""'"); 
   }
   if (!argp4) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "RealLimits const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitSuite_addFitParameter" "', argument " "4"" of type '" "AttLimits const &""'"); 
   }
-  arg4 = reinterpret_cast< RealLimits * >(argp4);
-  (arg1)->addFitParameter((std::string const &)*arg2,arg3,(RealLimits const &)*arg4);
+  arg4 = reinterpret_cast< AttLimits * >(argp4);
+  (arg1)->addFitParameter((std::string const &)*arg2,arg3,(AttLimits const &)*arg4);
   resultobj = SWIG_Py_Void();
   if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
@@ -39367,7 +39286,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitSuite *arg1 = (FitSuite *) 0 ;
   std::string *arg2 = 0 ;
@@ -39415,14 +39334,14 @@ fail:
 
 SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[7] = {
+  PyObject *argv[6] = {
     0
   };
   Py_ssize_t ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
   argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 6) && (ii < argc); ii++) {
+  for (ii = 0; (ii < 5) && (ii < argc); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
   if (argc == 3) {
@@ -39439,7 +39358,7 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter(PyObject *self, PyObject *ar
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_FitSuite_addFitParameter__SWIG_3(self, args);
+          return _wrap_FitSuite_addFitParameter__SWIG_2(self, args);
         }
       }
     }
@@ -39458,10 +39377,10 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter(PyObject *self, PyObject *ar
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_RealLimits, 0);
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_AttLimits, 0);
           _v = SWIG_CheckState(res);
           if (_v) {
-            return _wrap_FitSuite_addFitParameter__SWIG_2(self, args);
+            return _wrap_FitSuite_addFitParameter__SWIG_1(self, args);
           }
         }
       }
@@ -39481,46 +39400,15 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter(PyObject *self, PyObject *ar
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_RealLimits, 0);
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_AttLimits, 0);
           _v = SWIG_CheckState(res);
           if (_v) {
-            int res = SWIG_ConvertPtr(argv[4], 0, SWIGTYPE_p_Attributes, 0);
-            _v = SWIG_CheckState(res);
-            if (_v) {
-              return _wrap_FitSuite_addFitParameter__SWIG_1(self, args);
+            {
+              int res = SWIG_AsVal_double(argv[4], NULL);
+              _v = SWIG_CheckState(res);
             }
-          }
-        }
-      }
-    }
-  }
-  if (argc == 6) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitSuite, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_RealLimits, 0);
-          _v = SWIG_CheckState(res);
-          if (_v) {
-            int res = SWIG_ConvertPtr(argv[4], 0, SWIGTYPE_p_Attributes, 0);
-            _v = SWIG_CheckState(res);
             if (_v) {
-              {
-                int res = SWIG_AsVal_double(argv[5], NULL);
-                _v = SWIG_CheckState(res);
-              }
-              if (_v) {
-                return _wrap_FitSuite_addFitParameter__SWIG_0(self, args);
-              }
+              return _wrap_FitSuite_addFitParameter__SWIG_0(self, args);
             }
           }
         }
@@ -39531,9 +39419,8 @@ SWIGINTERN PyObject *_wrap_FitSuite_addFitParameter(PyObject *self, PyObject *ar
 fail:
   SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitSuite_addFitParameter'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    FitSuite::addFitParameter(std::string const &,double,RealLimits const &,Attributes const &,double)\n"
-    "    FitSuite::addFitParameter(std::string const &,double,RealLimits const &,Attributes const &)\n"
-    "    FitSuite::addFitParameter(std::string const &,double,RealLimits const &)\n"
+    "    FitSuite::addFitParameter(std::string const &,double,AttLimits const &,double)\n"
+    "    FitSuite::addFitParameter(std::string const &,double,AttLimits const &)\n"
     "    FitSuite::addFitParameter(std::string const &,double)\n");
   return 0;
 }
@@ -102588,9 +102475,8 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"FitSuite_addFitParameter", _wrap_FitSuite_addFitParameter, METH_VARARGS, (char *)"\n"
-		"addFitParameter(std::string const & name, double value, RealLimits lim, Attributes attr, double step=0.0)\n"
-		"addFitParameter(std::string const & name, double value, RealLimits lim, Attributes attr)\n"
-		"addFitParameter(std::string const & name, double value, RealLimits lim)\n"
+		"addFitParameter(std::string const & name, double value, AttLimits const & limits, double step=0.0)\n"
+		"addFitParameter(std::string const & name, double value, AttLimits const & limits)\n"
 		"FitSuite_addFitParameter(FitSuite self, std::string const & name, double value)\n"
 		"\n"
 		"void FitSuite::addFitParameter(const std::string &name, double value, const RealLimits &lim=RealLimits::limitless(), const Attributes &attr=Attributes::free(), double step=0.0)\n"
@@ -114821,6 +114707,7 @@ static void *_p_ResolutionFunction2DGaussianTo_p_IResolutionFunction2D(void *x,
     return (void *)((IResolutionFunction2D *)  ((ResolutionFunction2DGaussian *) x));
 }
 static swig_type_info _swigt__p_AngularPixelMap = {"_p_AngularPixelMap", "AngularPixelMap *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_AttLimits = {"_p_AttLimits", "AttLimits *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Attributes = {"_p_Attributes", "Attributes *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_double_t = {"_p_BasicVector3DT_double_t", "std::vector< BasicVector3D< double > >::value_type *|kvector_t *|BasicVector3D< double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_int_t = {"_p_BasicVector3DT_int_t", "ivector_t *|BasicVector3D< int > *", 0, 0, (void*)0, 0};
@@ -115113,6 +115000,7 @@ static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0
 
 static swig_type_info *swig_type_initial[] = {
   &_swigt__p_AngularPixelMap,
+  &_swigt__p_AttLimits,
   &_swigt__p_Attributes,
   &_swigt__p_BasicVector3DT_double_t,
   &_swigt__p_BasicVector3DT_int_t,
@@ -115405,6 +115293,7 @@ static swig_type_info *swig_type_initial[] = {
 };
 
 static swig_cast_info _swigc__p_AngularPixelMap[] = {  {&_swigt__p_AngularPixelMap, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_AttLimits[] = {  {&_swigt__p_AttLimits, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Attributes[] = {  {&_swigt__p_Attributes, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_double_t[] = {  {&_swigt__p_BasicVector3DT_double_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_int_t[] = {  {&_swigt__p_BasicVector3DT_int_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -115697,6 +115586,7 @@ static swig_cast_info _swigc__p_value_type[] = {  {&_swigt__p_value_type, 0, 0,
 
 static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_AngularPixelMap,
+  _swigc__p_AttLimits,
   _swigc__p_Attributes,
   _swigc__p_BasicVector3DT_double_t,
   _swigc__p_BasicVector3DT_int_t,
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index 98163d32731..135dd18ebe0 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -1437,356 +1437,168 @@ class vector_string_t(_object):
 vector_string_t_swigregister = _libBornAgainFit.vector_string_t_swigregister
 vector_string_t_swigregister(vector_string_t)
 
-class Attributes(_object):
-    """
-
-
-    Attributes for a fit parameter. Currently, the only attribute is fixed/free.
-
-    C++ includes: Attributes.h
-
-    """
+class AttLimits(_object):
+    """Proxy of C++ AttLimits class."""
 
     __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, Attributes, name, value)
+    __setattr__ = lambda self, name, value: _swig_setattr(self, AttLimits, name, value)
     __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, Attributes, name)
+    __getattr__ = lambda self, name: _swig_getattr(self, AttLimits, name)
     __repr__ = _swig_repr
 
-    def __init__(self):
+    def __init__(self, *args):
         """
-        __init__(Attributes self) -> Attributes
-
-        Attributes::Attributes()
-
+        __init__(AttLimits self) -> AttLimits
+        __init__(AttLimits self, RealLimits const & limits, Attributes const & fixedAttr) -> AttLimits
         """
-        this = _libBornAgainFit.new_Attributes()
+        this = _libBornAgainFit.new_AttLimits(*args)
         try:
             self.this.append(this)
         except Exception:
             self.this = this
 
-    def fixed():
-        """fixed() -> Attributes"""
-        return _libBornAgainFit.Attributes_fixed()
-
-    if _newclass:
-        fixed = staticmethod(fixed)
-    __swig_getmethods__["fixed"] = lambda x: fixed
-
-    def free():
-        """free() -> Attributes"""
-        return _libBornAgainFit.Attributes_free()
+    def limitless():
+        """limitless() -> AttLimits"""
+        return _libBornAgainFit.AttLimits_limitless()
 
     if _newclass:
-        free = staticmethod(free)
-    __swig_getmethods__["free"] = lambda x: free
-
-    def setFixed(self, is_fixed):
-        """
-        setFixed(Attributes self, bool is_fixed)
-
-        void Attributes::setFixed(bool is_fixed)
-
-        """
-        return _libBornAgainFit.Attributes_setFixed(self, is_fixed)
-
-
-    def isFixed(self):
-        """
-        isFixed(Attributes self) -> bool
-
-        bool Attributes::isFixed() const 
-
-        """
-        return _libBornAgainFit.Attributes_isFixed(self)
-
-
-    def isFree(self):
-        """isFree(Attributes self) -> bool"""
-        return _libBornAgainFit.Attributes_isFree(self)
-
-
-    def __eq__(self, other):
-        """__eq__(Attributes self, Attributes other) -> bool"""
-        return _libBornAgainFit.Attributes___eq__(self, other)
-
-
-    def __ne__(self, other):
-        """__ne__(Attributes self, Attributes other) -> bool"""
-        return _libBornAgainFit.Attributes___ne__(self, other)
-
-    __swig_destroy__ = _libBornAgainFit.delete_Attributes
-    __del__ = lambda self: None
-Attributes_swigregister = _libBornAgainFit.Attributes_swigregister
-Attributes_swigregister(Attributes)
-
-def Attributes_fixed():
-    """Attributes_fixed() -> Attributes"""
-    return _libBornAgainFit.Attributes_fixed()
-
-def Attributes_free():
-    """Attributes_free() -> Attributes"""
-    return _libBornAgainFit.Attributes_free()
-
-class RealLimits(_object):
-    """
-
-
-    Limits for a real fit parameter.
-
-    C++ includes: RealLimits.h
-
-    """
-
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, RealLimits, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, RealLimits, name)
-    __repr__ = _swig_repr
-
-    def __init__(self):
-        """
-        __init__(RealLimits self) -> RealLimits
-
-        RealLimits::RealLimits()
-
-        """
-        this = _libBornAgainFit.new_RealLimits()
-        try:
-            self.this.append(this)
-        except Exception:
-            self.this = this
-
-    def hasLowerLimit(self):
-        """
-        hasLowerLimit(RealLimits self) -> bool
-
-        bool RealLimits::hasLowerLimit() const
-
-        if has lower limit 
-
-        """
-        return _libBornAgainFit.RealLimits_hasLowerLimit(self)
-
-
-    def getLowerLimit(self):
-        """
-        getLowerLimit(RealLimits self) -> double
-
-        double RealLimits::getLowerLimit() const
-
-        Returns lower limit. 
-
-        """
-        return _libBornAgainFit.RealLimits_getLowerLimit(self)
-
-
-    def setLowerLimit(self, value):
-        """
-        setLowerLimit(RealLimits self, double value)
-
-        void RealLimits::setLowerLimit(double value)
-
-        Sets lower limit. 
-
-        """
-        return _libBornAgainFit.RealLimits_setLowerLimit(self, value)
-
-
-    def removeLowerLimit(self):
-        """
-        removeLowerLimit(RealLimits self)
-
-        void RealLimits::removeLowerLimit()
-
-        remove lower limit 
-
-        """
-        return _libBornAgainFit.RealLimits_removeLowerLimit(self)
-
-
-    def hasUpperLimit(self):
-        """
-        hasUpperLimit(RealLimits self) -> bool
-
-        bool RealLimits::hasUpperLimit() const
-
-        if has upper limit 
-
-        """
-        return _libBornAgainFit.RealLimits_hasUpperLimit(self)
-
-
-    def getUpperLimit(self):
-        """
-        getUpperLimit(RealLimits self) -> double
-
-        double RealLimits::getUpperLimit() const
-
-        Returns upper limit. 
-
-        """
-        return _libBornAgainFit.RealLimits_getUpperLimit(self)
-
-
-    def setUpperLimit(self, value):
-        """
-        setUpperLimit(RealLimits self, double value)
-
-        void RealLimits::setUpperLimit(double value)
-
-        Sets upper limit. 
-
-        """
-        return _libBornAgainFit.RealLimits_setUpperLimit(self, value)
-
-
-    def removeUpperLimit(self):
-        """
-        removeUpperLimit(RealLimits self)
-
-        void RealLimits::removeUpperLimit()
-
-        remove upper limit 
-
-        """
-        return _libBornAgainFit.RealLimits_removeUpperLimit(self)
-
-
-    def hasLowerAndUpperLimits(self):
-        """
-        hasLowerAndUpperLimits(RealLimits self) -> bool
-
-        bool RealLimits::hasLowerAndUpperLimits() const
-
-        if has lower and upper limit 
-
-        """
-        return _libBornAgainFit.RealLimits_hasLowerAndUpperLimits(self)
-
-
-    def setLimits(self, xmin, xmax):
-        """
-        setLimits(RealLimits self, double xmin, double xmax)
-
-        void RealLimits::setLimits(double xmin, double xmax)
-
-        Sets lower and upper limits. 
-
-        """
-        return _libBornAgainFit.RealLimits_setLimits(self, xmin, xmax)
-
-
-    def removeLimits(self):
-        """
-        removeLimits(RealLimits self)
-
-        void RealLimits::removeLimits()
-
-        remove limits 
-
-        """
-        return _libBornAgainFit.RealLimits_removeLimits(self)
-
-
-    def isInRange(self, value):
-        """
-        isInRange(RealLimits self, double value) -> bool
-
-        bool RealLimits::isInRange(double value) const
-
-        returns true if proposed value is in limits range 
-
-        """
-        return _libBornAgainFit.RealLimits_isInRange(self, value)
-
+        limitless = staticmethod(limitless)
+    __swig_getmethods__["limitless"] = lambda x: limitless
 
     def lowerLimited(bound_value):
-        """lowerLimited(double bound_value) -> RealLimits"""
-        return _libBornAgainFit.RealLimits_lowerLimited(bound_value)
+        """lowerLimited(double bound_value) -> AttLimits"""
+        return _libBornAgainFit.AttLimits_lowerLimited(bound_value)
 
     if _newclass:
         lowerLimited = staticmethod(lowerLimited)
     __swig_getmethods__["lowerLimited"] = lambda x: lowerLimited
 
     def positive():
-        """positive() -> RealLimits"""
-        return _libBornAgainFit.RealLimits_positive()
+        """positive() -> AttLimits"""
+        return _libBornAgainFit.AttLimits_positive()
 
     if _newclass:
         positive = staticmethod(positive)
     __swig_getmethods__["positive"] = lambda x: positive
 
     def nonnegative():
-        """nonnegative() -> RealLimits"""
-        return _libBornAgainFit.RealLimits_nonnegative()
+        """nonnegative() -> AttLimits"""
+        return _libBornAgainFit.AttLimits_nonnegative()
 
     if _newclass:
         nonnegative = staticmethod(nonnegative)
     __swig_getmethods__["nonnegative"] = lambda x: nonnegative
 
     def upperLimited(bound_value):
-        """upperLimited(double bound_value) -> RealLimits"""
-        return _libBornAgainFit.RealLimits_upperLimited(bound_value)
+        """upperLimited(double bound_value) -> AttLimits"""
+        return _libBornAgainFit.AttLimits_upperLimited(bound_value)
 
     if _newclass:
         upperLimited = staticmethod(upperLimited)
     __swig_getmethods__["upperLimited"] = lambda x: upperLimited
 
     def limited(left_bound_value, right_bound_value):
-        """limited(double left_bound_value, double right_bound_value) -> RealLimits"""
-        return _libBornAgainFit.RealLimits_limited(left_bound_value, right_bound_value)
+        """limited(double left_bound_value, double right_bound_value) -> AttLimits"""
+        return _libBornAgainFit.AttLimits_limited(left_bound_value, right_bound_value)
 
     if _newclass:
         limited = staticmethod(limited)
     __swig_getmethods__["limited"] = lambda x: limited
 
-    def limitless():
-        """limitless() -> RealLimits"""
-        return _libBornAgainFit.RealLimits_limitless()
+    def fixed():
+        """fixed() -> AttLimits"""
+        return _libBornAgainFit.AttLimits_fixed()
 
     if _newclass:
-        limitless = staticmethod(limitless)
-    __swig_getmethods__["limitless"] = lambda x: limitless
+        fixed = staticmethod(fixed)
+    __swig_getmethods__["fixed"] = lambda x: fixed
+
+    def isFixed(self):
+        """isFixed(AttLimits self) -> bool"""
+        return _libBornAgainFit.AttLimits_isFixed(self)
+
+
+    def isLimited(self):
+        """isLimited(AttLimits self) -> bool"""
+        return _libBornAgainFit.AttLimits_isLimited(self)
+
+
+    def isUpperLimited(self):
+        """isUpperLimited(AttLimits self) -> bool"""
+        return _libBornAgainFit.AttLimits_isUpperLimited(self)
+
+
+    def isLowerLimited(self):
+        """isLowerLimited(AttLimits self) -> bool"""
+        return _libBornAgainFit.AttLimits_isLowerLimited(self)
+
+
+    def isLimitless(self):
+        """isLimitless(AttLimits self) -> bool"""
+        return _libBornAgainFit.AttLimits_isLimitless(self)
+
+
+    def lowerLimit(self):
+        """lowerLimit(AttLimits self) -> double"""
+        return _libBornAgainFit.AttLimits_lowerLimit(self)
+
+
+    def upperLimit(self):
+        """upperLimit(AttLimits self) -> double"""
+        return _libBornAgainFit.AttLimits_upperLimit(self)
+
+
+    def setFixed(self, isFixed):
+        """setFixed(AttLimits self, bool isFixed)"""
+        return _libBornAgainFit.AttLimits_setFixed(self, isFixed)
+
 
     def __eq__(self, other):
-        """__eq__(RealLimits self, RealLimits other) -> bool"""
-        return _libBornAgainFit.RealLimits___eq__(self, other)
+        """__eq__(AttLimits self, AttLimits other) -> bool"""
+        return _libBornAgainFit.AttLimits___eq__(self, other)
 
 
     def __ne__(self, other):
-        """__ne__(RealLimits self, RealLimits other) -> bool"""
-        return _libBornAgainFit.RealLimits___ne__(self, other)
+        """__ne__(AttLimits self, AttLimits other) -> bool"""
+        return _libBornAgainFit.AttLimits___ne__(self, other)
+
 
-    __swig_destroy__ = _libBornAgainFit.delete_RealLimits
+    def toString(self):
+        """toString(AttLimits self) -> std::string"""
+        return _libBornAgainFit.AttLimits_toString(self)
+
+    __swig_destroy__ = _libBornAgainFit.delete_AttLimits
     __del__ = lambda self: None
-RealLimits_swigregister = _libBornAgainFit.RealLimits_swigregister
-RealLimits_swigregister(RealLimits)
+AttLimits_swigregister = _libBornAgainFit.AttLimits_swigregister
+AttLimits_swigregister(AttLimits)
+
+def AttLimits_limitless():
+    """AttLimits_limitless() -> AttLimits"""
+    return _libBornAgainFit.AttLimits_limitless()
 
-def RealLimits_lowerLimited(bound_value):
-    """RealLimits_lowerLimited(double bound_value) -> RealLimits"""
-    return _libBornAgainFit.RealLimits_lowerLimited(bound_value)
+def AttLimits_lowerLimited(bound_value):
+    """AttLimits_lowerLimited(double bound_value) -> AttLimits"""
+    return _libBornAgainFit.AttLimits_lowerLimited(bound_value)
 
-def RealLimits_positive():
-    """RealLimits_positive() -> RealLimits"""
-    return _libBornAgainFit.RealLimits_positive()
+def AttLimits_positive():
+    """AttLimits_positive() -> AttLimits"""
+    return _libBornAgainFit.AttLimits_positive()
 
-def RealLimits_nonnegative():
-    """RealLimits_nonnegative() -> RealLimits"""
-    return _libBornAgainFit.RealLimits_nonnegative()
+def AttLimits_nonnegative():
+    """AttLimits_nonnegative() -> AttLimits"""
+    return _libBornAgainFit.AttLimits_nonnegative()
 
-def RealLimits_upperLimited(bound_value):
-    """RealLimits_upperLimited(double bound_value) -> RealLimits"""
-    return _libBornAgainFit.RealLimits_upperLimited(bound_value)
+def AttLimits_upperLimited(bound_value):
+    """AttLimits_upperLimited(double bound_value) -> AttLimits"""
+    return _libBornAgainFit.AttLimits_upperLimited(bound_value)
 
-def RealLimits_limited(left_bound_value, right_bound_value):
-    """RealLimits_limited(double left_bound_value, double right_bound_value) -> RealLimits"""
-    return _libBornAgainFit.RealLimits_limited(left_bound_value, right_bound_value)
+def AttLimits_limited(left_bound_value, right_bound_value):
+    """AttLimits_limited(double left_bound_value, double right_bound_value) -> AttLimits"""
+    return _libBornAgainFit.AttLimits_limited(left_bound_value, right_bound_value)
 
-def RealLimits_limitless():
-    """RealLimits_limitless() -> RealLimits"""
-    return _libBornAgainFit.RealLimits_limitless()
+def AttLimits_fixed():
+    """AttLimits_fixed() -> AttLimits"""
+    return _libBornAgainFit.AttLimits_fixed()
 
 class IMinimizer(_object):
     """
@@ -1953,8 +1765,8 @@ class FitParameter(_object):
     def __init__(self, *args):
         """
         __init__(FitParameter self) -> FitParameter
-        __init__(FitParameter self, std::string const & name, double value, AttLimits const & limits, double step=0.0) -> FitParameter
-        __init__(FitParameter self, std::string const & name, double value, AttLimits const & limits) -> FitParameter
+        __init__(FitParameter self, std::string const & name, double value, AttLimits limits, double step=0.0) -> FitParameter
+        __init__(FitParameter self, std::string const & name, double value, AttLimits limits) -> FitParameter
         __init__(FitParameter self, std::string const & name, double value) -> FitParameter
 
         FitParameter::FitParameter(const std::string &name, double value, double step=0.0, const RealLimits &limits=RealLimits::limitless(), const Attributes &attr=Attributes::free(), double error=0.0)
@@ -2025,14 +1837,14 @@ class FitParameter(_object):
 
     def limits(self, *args):
         """
-        limits(FitParameter self) -> AttLimits const
-        limits(FitParameter self) -> AttLimits &
+        limits(FitParameter self) -> AttLimits
+        limits(FitParameter self) -> AttLimits
         """
         return _libBornAgainFit.FitParameter_limits(self, *args)
 
 
     def setLimits(self, limits):
-        """setLimits(FitParameter self, AttLimits const & limits) -> FitParameter"""
+        """setLimits(FitParameter self, AttLimits limits) -> FitParameter"""
         return _libBornAgainFit.FitParameter_setLimits(self, limits)
 
 
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 3c8e7ac86b2..892fd6ad718 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -6087,6 +6087,7 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include <numpy/arrayobject.h>
 
 
+#include "AttLimits.h"
 #include "FitParameter.h"
 #include "FitParameterSet.h"
 #include "IMinimizer.h"
@@ -18553,122 +18554,22 @@ SWIGINTERN PyObject *vector_string_t_swigregister(PyObject *SWIGUNUSEDPARM(self)
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_Attributes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AttLimits__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  Attributes *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)":new_Attributes")) SWIG_fail;
-  result = (Attributes *)new Attributes();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Attributes, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Attributes_fixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes result;
-  
-  if (!PyArg_ParseTuple(args,(char *)":Attributes_fixed")) SWIG_fail;
-  result = Attributes::fixed();
-  resultobj = SWIG_NewPointerObj((new Attributes(static_cast< const Attributes& >(result))), SWIGTYPE_p_Attributes, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Attributes_free(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes result;
-  
-  if (!PyArg_ParseTuple(args,(char *)":Attributes_free")) SWIG_fail;
-  result = Attributes::free();
-  resultobj = SWIG_NewPointerObj((new Attributes(static_cast< const Attributes& >(result))), SWIGTYPE_p_Attributes, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Attributes_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
-  bool arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  bool val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:Attributes_setFixed",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Attributes_setFixed" "', argument " "1"" of type '" "Attributes *""'"); 
-  }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
-  ecode2 = SWIG_AsVal_bool(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Attributes_setFixed" "', argument " "2"" of type '" "bool""'");
-  } 
-  arg2 = static_cast< bool >(val2);
-  (arg1)->setFixed(arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Attributes_isFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:Attributes_isFixed",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Attributes_isFixed" "', argument " "1"" of type '" "Attributes const *""'"); 
-  }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
-  result = (bool)((Attributes const *)arg1)->isFixed();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Attributes_isFree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
+  AttLimits *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:Attributes_isFree",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Attributes_isFree" "', argument " "1"" of type '" "Attributes const *""'"); 
-  }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
-  result = (bool)((Attributes const *)arg1)->isFree();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (!PyArg_ParseTuple(args,(char *)":new_AttLimits")) SWIG_fail;
+  result = (AttLimits *)new AttLimits();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Attributes___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AttLimits__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
+  RealLimits *arg1 = 0 ;
   Attributes *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -18676,215 +18577,212 @@ SWIGINTERN PyObject *_wrap_Attributes___eq__(PyObject *SWIGUNUSEDPARM(self), PyO
   int res2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  bool result;
+  AttLimits *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:Attributes___eq__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_AttLimits",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_RealLimits,  0  | 0);
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Attributes___eq__" "', argument " "1"" of type '" "Attributes const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_AttLimits" "', argument " "1"" of type '" "RealLimits const &""'"); 
   }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AttLimits" "', argument " "1"" of type '" "RealLimits const &""'"); 
+  }
+  arg1 = reinterpret_cast< RealLimits * >(argp1);
   res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Attributes,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Attributes___eq__" "', argument " "2"" of type '" "Attributes const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_AttLimits" "', argument " "2"" of type '" "Attributes const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Attributes___eq__" "', argument " "2"" of type '" "Attributes const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AttLimits" "', argument " "2"" of type '" "Attributes const &""'"); 
   }
   arg2 = reinterpret_cast< Attributes * >(argp2);
-  result = (bool)((Attributes const *)arg1)->operator ==((Attributes const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  result = (AttLimits *)new AttLimits((RealLimits const &)*arg1,(Attributes const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Attributes___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
-  Attributes *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  bool result;
+SWIGINTERN PyObject *_wrap_new_AttLimits(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[3] = {
+    0
+  };
+  Py_ssize_t ii;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:Attributes___ne__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Attributes___ne__" "', argument " "1"" of type '" "Attributes const *""'"); 
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Attributes,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Attributes___ne__" "', argument " "2"" of type '" "Attributes const &""'"); 
+  if (argc == 0) {
+    return _wrap_new_AttLimits__SWIG_0(self, args);
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Attributes___ne__" "', argument " "2"" of type '" "Attributes const &""'"); 
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_RealLimits, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_Attributes, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_new_AttLimits__SWIG_1(self, args);
+      }
+    }
   }
-  arg2 = reinterpret_cast< Attributes * >(argp2);
-  result = (bool)((Attributes const *)arg1)->operator !=((Attributes const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_AttLimits'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    AttLimits::AttLimits()\n"
+    "    AttLimits::AttLimits(RealLimits const &,Attributes const &)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_AttLimits_limitless(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  AttLimits result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":AttLimits_limitless")) SWIG_fail;
+  result = AttLimits::limitless();
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Attributes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_lowerLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  Attributes *arg1 = (Attributes *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
   PyObject * obj0 = 0 ;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_Attributes",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Attributes, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Attributes" "', argument " "1"" of type '" "Attributes *""'"); 
-  }
-  arg1 = reinterpret_cast< Attributes * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_lowerLimited",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "AttLimits_lowerLimited" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = AttLimits::lowerLimited(arg1);
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *Attributes_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Attributes, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_RealLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_positive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *result = 0 ;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)":new_RealLimits")) SWIG_fail;
-  result = (RealLimits *)new RealLimits();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealLimits, SWIG_POINTER_NEW |  0 );
+  if (!PyArg_ParseTuple(args,(char *)":AttLimits_positive")) SWIG_fail;
+  result = AttLimits::positive();
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_hasLowerLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_nonnegative(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_hasLowerLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasLowerLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  result = (bool)((RealLimits const *)arg1)->hasLowerLimit();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (!PyArg_ParseTuple(args,(char *)":AttLimits_nonnegative")) SWIG_fail;
+  result = AttLimits::nonnegative();
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_getLowerLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_upperLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
   PyObject * obj0 = 0 ;
-  double result;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_getLowerLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_getLowerLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  result = (double)((RealLimits const *)arg1)->getLowerLimit();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_upperLimited",&obj0)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "AttLimits_upperLimited" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = AttLimits::upperLimited(arg1);
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_setLowerLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_limited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  double arg1 ;
   double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
+  double val1 ;
+  int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits_setLowerLimit",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_setLowerLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
+  if (!PyArg_ParseTuple(args,(char *)"OO:AttLimits_limited",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "AttLimits_limited" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(obj1, &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "RealLimits_setLowerLimit" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "AttLimits_limited" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  (arg1)->setLowerLimit(arg2);
-  resultobj = SWIG_Py_Void();
+  result = AttLimits::limited(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_removeLowerLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_fixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
+  AttLimits result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_removeLowerLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_removeLowerLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
-  }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  (arg1)->removeLowerLimit();
-  resultobj = SWIG_Py_Void();
+  if (!PyArg_ParseTuple(args,(char *)":AttLimits_fixed")) SWIG_fail;
+  result = AttLimits::fixed();
+  resultobj = SWIG_NewPointerObj((new AttLimits(static_cast< const AttLimits& >(result))), SWIGTYPE_p_AttLimits, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_hasUpperLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_isFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_hasUpperLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_isFixed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasUpperLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_isFixed" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  result = (bool)((RealLimits const *)arg1)->hasUpperLimit();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (bool)((AttLimits const *)arg1)->isFixed();
   resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
@@ -18892,94 +18790,87 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_getUpperLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_isLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  double result;
+  bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_getUpperLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_isLimited",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_getUpperLimit" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_isLimited" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  result = (double)((RealLimits const *)arg1)->getUpperLimit();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (bool)((AttLimits const *)arg1)->isLimited();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_setUpperLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_isUpperLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  double arg2 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
+  bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits_setUpperLimit",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_isUpperLimited",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_setUpperLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_isUpperLimited" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "RealLimits_setUpperLimit" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  (arg1)->setUpperLimit(arg2);
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (bool)((AttLimits const *)arg1)->isUpperLimited();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_removeUpperLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_isLowerLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
+  bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_removeUpperLimit",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_isLowerLimited",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_removeUpperLimit" "', argument " "1"" of type '" "RealLimits *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_isLowerLimited" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  (arg1)->removeUpperLimit();
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (bool)((AttLimits const *)arg1)->isLowerLimited();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_hasLowerAndUpperLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_isLimitless(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_hasLowerAndUpperLimits",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_isLimitless",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_hasLowerAndUpperLimits" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_isLimitless" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  result = (bool)((RealLimits const *)arg1)->hasLowerAndUpperLimits();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (bool)((AttLimits const *)arg1)->isLimitless();
   resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
@@ -18987,215 +18878,118 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_setLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_lowerLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  double arg2 ;
-  double arg3 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
+  double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:RealLimits_setLimits",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_lowerLimit",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_setLimits" "', argument " "1"" of type '" "RealLimits *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_lowerLimit" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "RealLimits_setLimits" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "RealLimits_setLimits" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  (arg1)->setLimits(arg2,arg3);
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (double)((AttLimits const *)arg1)->lowerLimit();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_removeLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_upperLimit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
+  double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_removeLimits",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_upperLimit",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_removeLimits" "', argument " "1"" of type '" "RealLimits *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_upperLimit" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  (arg1)->removeLimits();
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = (double)((AttLimits const *)arg1)->upperLimit();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_isInRange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  double arg2 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
+  bool arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  double val2 ;
+  bool val2 ;
   int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits_isInRange",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:AttLimits_setFixed",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_isInRange" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_setFixed" "', argument " "1"" of type '" "AttLimits *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  ecode2 = SWIG_AsVal_bool(obj1, &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "RealLimits_isInRange" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (bool)((RealLimits const *)arg1)->isInRange(arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_lowerLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  PyObject * obj0 = 0 ;
-  RealLimits result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_lowerLimited",&obj0)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "RealLimits_lowerLimited" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "AttLimits_setFixed" "', argument " "2"" of type '" "bool""'");
   } 
-  arg1 = static_cast< double >(val1);
-  result = RealLimits::lowerLimited(arg1);
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_positive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits result;
-  
-  if (!PyArg_ParseTuple(args,(char *)":RealLimits_positive")) SWIG_fail;
-  result = RealLimits::positive();
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_nonnegative(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits result;
-  
-  if (!PyArg_ParseTuple(args,(char *)":RealLimits_nonnegative")) SWIG_fail;
-  result = RealLimits::nonnegative();
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_upperLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  PyObject * obj0 = 0 ;
-  RealLimits result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:RealLimits_upperLimited",&obj0)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "RealLimits_upperLimited" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  result = RealLimits::upperLimited(arg1);
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
+  arg2 = static_cast< bool >(val2);
+  (arg1)->setFixed(arg2);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits_limited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
+  AttLimits *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  RealLimits result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits_limited",&obj0,&obj1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(obj0, &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "RealLimits_limited" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "RealLimits_limited" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = RealLimits::limited(arg1,arg2);
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_RealLimits_limitless(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  RealLimits result;
+  bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)":RealLimits_limitless")) SWIG_fail;
-  result = RealLimits::limitless();
-  resultobj = SWIG_NewPointerObj((new RealLimits(static_cast< const RealLimits& >(result))), SWIGTYPE_p_RealLimits, SWIG_POINTER_OWN |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:AttLimits___eq__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits___eq__" "', argument " "1"" of type '" "AttLimits const *""'"); 
+  }
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_AttLimits,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AttLimits___eq__" "', argument " "2"" of type '" "AttLimits const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AttLimits___eq__" "', argument " "2"" of type '" "AttLimits const &""'"); 
+  }
+  arg2 = reinterpret_cast< AttLimits * >(argp2);
+  result = (bool)((AttLimits const *)arg1)->operator ==((AttLimits const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  RealLimits *arg2 = 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
+  AttLimits *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -19204,21 +18998,21 @@ SWIGINTERN PyObject *_wrap_RealLimits___eq__(PyObject *SWIGUNUSEDPARM(self), PyO
   PyObject * obj1 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits___eq__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:AttLimits___ne__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits___eq__" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits___ne__" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_RealLimits,  0  | 0);
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_AttLimits,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "RealLimits___eq__" "', argument " "2"" of type '" "RealLimits const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AttLimits___ne__" "', argument " "2"" of type '" "AttLimits const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "RealLimits___eq__" "', argument " "2"" of type '" "RealLimits const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AttLimits___ne__" "', argument " "2"" of type '" "AttLimits const &""'"); 
   }
-  arg2 = reinterpret_cast< RealLimits * >(argp2);
-  result = (bool)((RealLimits const *)arg1)->operator ==((RealLimits const &)*arg2);
+  arg2 = reinterpret_cast< AttLimits * >(argp2);
+  result = (bool)((AttLimits const *)arg1)->operator !=((AttLimits const &)*arg2);
   resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
@@ -19226,53 +19020,41 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_RealLimits___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AttLimits_toString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
-  RealLimits *arg2 = 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  bool result;
+  std::string result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:RealLimits___ne__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AttLimits_toString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits___ne__" "', argument " "1"" of type '" "RealLimits const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AttLimits_toString" "', argument " "1"" of type '" "AttLimits const *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_RealLimits,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "RealLimits___ne__" "', argument " "2"" of type '" "RealLimits const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "RealLimits___ne__" "', argument " "2"" of type '" "RealLimits const &""'"); 
-  }
-  arg2 = reinterpret_cast< RealLimits * >(argp2);
-  result = (bool)((RealLimits const *)arg1)->operator !=((RealLimits const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
+  result = ((AttLimits const *)arg1)->toString();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_RealLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_AttLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  RealLimits *arg1 = (RealLimits *) 0 ;
+  AttLimits *arg1 = (AttLimits *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_RealLimits",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealLimits, SWIG_POINTER_DISOWN |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_AttLimits",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AttLimits, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_RealLimits" "', argument " "1"" of type '" "RealLimits *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_AttLimits" "', argument " "1"" of type '" "AttLimits *""'"); 
   }
-  arg1 = reinterpret_cast< RealLimits * >(argp1);
+  arg1 = reinterpret_cast< AttLimits * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -19281,10 +19063,10 @@ fail:
 }
 
 
-SWIGINTERN PyObject *RealLimits_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *AttLimits_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_RealLimits, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_AttLimits, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
@@ -22258,143 +22040,30 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"vector_string_t_capacity", _wrap_vector_string_t_capacity, METH_VARARGS, (char *)"vector_string_t_capacity(vector_string_t self) -> std::vector< std::string >::size_type"},
 	 { (char *)"delete_vector_string_t", _wrap_delete_vector_string_t, METH_VARARGS, (char *)"delete_vector_string_t(vector_string_t self)"},
 	 { (char *)"vector_string_t_swigregister", vector_string_t_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_Attributes", _wrap_new_Attributes, METH_VARARGS, (char *)"\n"
-		"new_Attributes() -> Attributes\n"
-		"\n"
-		"Attributes::Attributes()\n"
-		"\n"
-		""},
-	 { (char *)"Attributes_fixed", _wrap_Attributes_fixed, METH_VARARGS, (char *)"Attributes_fixed() -> Attributes"},
-	 { (char *)"Attributes_free", _wrap_Attributes_free, METH_VARARGS, (char *)"Attributes_free() -> Attributes"},
-	 { (char *)"Attributes_setFixed", _wrap_Attributes_setFixed, METH_VARARGS, (char *)"\n"
-		"Attributes_setFixed(Attributes self, bool is_fixed)\n"
-		"\n"
-		"void Attributes::setFixed(bool is_fixed)\n"
-		"\n"
-		""},
-	 { (char *)"Attributes_isFixed", _wrap_Attributes_isFixed, METH_VARARGS, (char *)"\n"
-		"Attributes_isFixed(Attributes self) -> bool\n"
-		"\n"
-		"bool Attributes::isFixed() const \n"
-		"\n"
-		""},
-	 { (char *)"Attributes_isFree", _wrap_Attributes_isFree, METH_VARARGS, (char *)"Attributes_isFree(Attributes self) -> bool"},
-	 { (char *)"Attributes___eq__", _wrap_Attributes___eq__, METH_VARARGS, (char *)"Attributes___eq__(Attributes self, Attributes other) -> bool"},
-	 { (char *)"Attributes___ne__", _wrap_Attributes___ne__, METH_VARARGS, (char *)"Attributes___ne__(Attributes self, Attributes other) -> bool"},
-	 { (char *)"delete_Attributes", _wrap_delete_Attributes, METH_VARARGS, (char *)"delete_Attributes(Attributes self)"},
-	 { (char *)"Attributes_swigregister", Attributes_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_RealLimits", _wrap_new_RealLimits, METH_VARARGS, (char *)"\n"
-		"new_RealLimits() -> RealLimits\n"
-		"\n"
-		"RealLimits::RealLimits()\n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_hasLowerLimit", _wrap_RealLimits_hasLowerLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_hasLowerLimit(RealLimits self) -> bool\n"
-		"\n"
-		"bool RealLimits::hasLowerLimit() const\n"
-		"\n"
-		"if has lower limit \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_getLowerLimit", _wrap_RealLimits_getLowerLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_getLowerLimit(RealLimits self) -> double\n"
-		"\n"
-		"double RealLimits::getLowerLimit() const\n"
-		"\n"
-		"Returns lower limit. \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_setLowerLimit", _wrap_RealLimits_setLowerLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_setLowerLimit(RealLimits self, double value)\n"
-		"\n"
-		"void RealLimits::setLowerLimit(double value)\n"
-		"\n"
-		"Sets lower limit. \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_removeLowerLimit", _wrap_RealLimits_removeLowerLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_removeLowerLimit(RealLimits self)\n"
-		"\n"
-		"void RealLimits::removeLowerLimit()\n"
-		"\n"
-		"remove lower limit \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_hasUpperLimit", _wrap_RealLimits_hasUpperLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_hasUpperLimit(RealLimits self) -> bool\n"
-		"\n"
-		"bool RealLimits::hasUpperLimit() const\n"
-		"\n"
-		"if has upper limit \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_getUpperLimit", _wrap_RealLimits_getUpperLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_getUpperLimit(RealLimits self) -> double\n"
-		"\n"
-		"double RealLimits::getUpperLimit() const\n"
-		"\n"
-		"Returns upper limit. \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_setUpperLimit", _wrap_RealLimits_setUpperLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_setUpperLimit(RealLimits self, double value)\n"
-		"\n"
-		"void RealLimits::setUpperLimit(double value)\n"
-		"\n"
-		"Sets upper limit. \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_removeUpperLimit", _wrap_RealLimits_removeUpperLimit, METH_VARARGS, (char *)"\n"
-		"RealLimits_removeUpperLimit(RealLimits self)\n"
-		"\n"
-		"void RealLimits::removeUpperLimit()\n"
-		"\n"
-		"remove upper limit \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_hasLowerAndUpperLimits", _wrap_RealLimits_hasLowerAndUpperLimits, METH_VARARGS, (char *)"\n"
-		"RealLimits_hasLowerAndUpperLimits(RealLimits self) -> bool\n"
-		"\n"
-		"bool RealLimits::hasLowerAndUpperLimits() const\n"
-		"\n"
-		"if has lower and upper limit \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_setLimits", _wrap_RealLimits_setLimits, METH_VARARGS, (char *)"\n"
-		"RealLimits_setLimits(RealLimits self, double xmin, double xmax)\n"
-		"\n"
-		"void RealLimits::setLimits(double xmin, double xmax)\n"
-		"\n"
-		"Sets lower and upper limits. \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_removeLimits", _wrap_RealLimits_removeLimits, METH_VARARGS, (char *)"\n"
-		"RealLimits_removeLimits(RealLimits self)\n"
-		"\n"
-		"void RealLimits::removeLimits()\n"
-		"\n"
-		"remove limits \n"
-		"\n"
-		""},
-	 { (char *)"RealLimits_isInRange", _wrap_RealLimits_isInRange, METH_VARARGS, (char *)"\n"
-		"RealLimits_isInRange(RealLimits self, double value) -> bool\n"
-		"\n"
-		"bool RealLimits::isInRange(double value) const\n"
-		"\n"
-		"returns true if proposed value is in limits range \n"
-		"\n"
+	 { (char *)"new_AttLimits", _wrap_new_AttLimits, METH_VARARGS, (char *)"\n"
+		"AttLimits()\n"
+		"new_AttLimits(RealLimits const & limits, Attributes const & fixedAttr) -> AttLimits\n"
 		""},
-	 { (char *)"RealLimits_lowerLimited", _wrap_RealLimits_lowerLimited, METH_VARARGS, (char *)"RealLimits_lowerLimited(double bound_value) -> RealLimits"},
-	 { (char *)"RealLimits_positive", _wrap_RealLimits_positive, METH_VARARGS, (char *)"RealLimits_positive() -> RealLimits"},
-	 { (char *)"RealLimits_nonnegative", _wrap_RealLimits_nonnegative, METH_VARARGS, (char *)"RealLimits_nonnegative() -> RealLimits"},
-	 { (char *)"RealLimits_upperLimited", _wrap_RealLimits_upperLimited, METH_VARARGS, (char *)"RealLimits_upperLimited(double bound_value) -> RealLimits"},
-	 { (char *)"RealLimits_limited", _wrap_RealLimits_limited, METH_VARARGS, (char *)"RealLimits_limited(double left_bound_value, double right_bound_value) -> RealLimits"},
-	 { (char *)"RealLimits_limitless", _wrap_RealLimits_limitless, METH_VARARGS, (char *)"RealLimits_limitless() -> RealLimits"},
-	 { (char *)"RealLimits___eq__", _wrap_RealLimits___eq__, METH_VARARGS, (char *)"RealLimits___eq__(RealLimits self, RealLimits other) -> bool"},
-	 { (char *)"RealLimits___ne__", _wrap_RealLimits___ne__, METH_VARARGS, (char *)"RealLimits___ne__(RealLimits self, RealLimits other) -> bool"},
-	 { (char *)"delete_RealLimits", _wrap_delete_RealLimits, METH_VARARGS, (char *)"delete_RealLimits(RealLimits self)"},
-	 { (char *)"RealLimits_swigregister", RealLimits_swigregister, METH_VARARGS, NULL},
+	 { (char *)"AttLimits_limitless", _wrap_AttLimits_limitless, METH_VARARGS, (char *)"AttLimits_limitless() -> AttLimits"},
+	 { (char *)"AttLimits_lowerLimited", _wrap_AttLimits_lowerLimited, METH_VARARGS, (char *)"AttLimits_lowerLimited(double bound_value) -> AttLimits"},
+	 { (char *)"AttLimits_positive", _wrap_AttLimits_positive, METH_VARARGS, (char *)"AttLimits_positive() -> AttLimits"},
+	 { (char *)"AttLimits_nonnegative", _wrap_AttLimits_nonnegative, METH_VARARGS, (char *)"AttLimits_nonnegative() -> AttLimits"},
+	 { (char *)"AttLimits_upperLimited", _wrap_AttLimits_upperLimited, METH_VARARGS, (char *)"AttLimits_upperLimited(double bound_value) -> AttLimits"},
+	 { (char *)"AttLimits_limited", _wrap_AttLimits_limited, METH_VARARGS, (char *)"AttLimits_limited(double left_bound_value, double right_bound_value) -> AttLimits"},
+	 { (char *)"AttLimits_fixed", _wrap_AttLimits_fixed, METH_VARARGS, (char *)"AttLimits_fixed() -> AttLimits"},
+	 { (char *)"AttLimits_isFixed", _wrap_AttLimits_isFixed, METH_VARARGS, (char *)"AttLimits_isFixed(AttLimits self) -> bool"},
+	 { (char *)"AttLimits_isLimited", _wrap_AttLimits_isLimited, METH_VARARGS, (char *)"AttLimits_isLimited(AttLimits self) -> bool"},
+	 { (char *)"AttLimits_isUpperLimited", _wrap_AttLimits_isUpperLimited, METH_VARARGS, (char *)"AttLimits_isUpperLimited(AttLimits self) -> bool"},
+	 { (char *)"AttLimits_isLowerLimited", _wrap_AttLimits_isLowerLimited, METH_VARARGS, (char *)"AttLimits_isLowerLimited(AttLimits self) -> bool"},
+	 { (char *)"AttLimits_isLimitless", _wrap_AttLimits_isLimitless, METH_VARARGS, (char *)"AttLimits_isLimitless(AttLimits self) -> bool"},
+	 { (char *)"AttLimits_lowerLimit", _wrap_AttLimits_lowerLimit, METH_VARARGS, (char *)"AttLimits_lowerLimit(AttLimits self) -> double"},
+	 { (char *)"AttLimits_upperLimit", _wrap_AttLimits_upperLimit, METH_VARARGS, (char *)"AttLimits_upperLimit(AttLimits self) -> double"},
+	 { (char *)"AttLimits_setFixed", _wrap_AttLimits_setFixed, METH_VARARGS, (char *)"AttLimits_setFixed(AttLimits self, bool isFixed)"},
+	 { (char *)"AttLimits___eq__", _wrap_AttLimits___eq__, METH_VARARGS, (char *)"AttLimits___eq__(AttLimits self, AttLimits other) -> bool"},
+	 { (char *)"AttLimits___ne__", _wrap_AttLimits___ne__, METH_VARARGS, (char *)"AttLimits___ne__(AttLimits self, AttLimits other) -> bool"},
+	 { (char *)"AttLimits_toString", _wrap_AttLimits_toString, METH_VARARGS, (char *)"AttLimits_toString(AttLimits self) -> std::string"},
+	 { (char *)"delete_AttLimits", _wrap_delete_AttLimits, METH_VARARGS, (char *)"delete_AttLimits(AttLimits self)"},
+	 { (char *)"AttLimits_swigregister", AttLimits_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_IMinimizer", _wrap_new_IMinimizer, METH_VARARGS, (char *)"\n"
 		"new_IMinimizer() -> IMinimizer\n"
 		"\n"
@@ -22483,8 +22152,8 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IMinimizer_swigregister", IMinimizer_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_FitParameter", _wrap_new_FitParameter, METH_VARARGS, (char *)"\n"
 		"FitParameter()\n"
-		"FitParameter(std::string const & name, double value, AttLimits const & limits, double step=0.0)\n"
-		"FitParameter(std::string const & name, double value, AttLimits const & limits)\n"
+		"FitParameter(std::string const & name, double value, AttLimits limits, double step=0.0)\n"
+		"FitParameter(std::string const & name, double value, AttLimits limits)\n"
 		"new_FitParameter(std::string const & name, double value) -> FitParameter\n"
 		"\n"
 		"FitParameter::FitParameter(const std::string &name, double value, double step=0.0, const RealLimits &limits=RealLimits::limitless(), const Attributes &attr=Attributes::free(), double error=0.0)\n"
@@ -22520,10 +22189,10 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"FitParameter_limits", _wrap_FitParameter_limits, METH_VARARGS, (char *)"\n"
-		"limits() -> AttLimits const\n"
-		"FitParameter_limits(FitParameter self) -> AttLimits &\n"
+		"limits() -> AttLimits\n"
+		"FitParameter_limits(FitParameter self) -> AttLimits\n"
 		""},
-	 { (char *)"FitParameter_setLimits", _wrap_FitParameter_setLimits, METH_VARARGS, (char *)"FitParameter_setLimits(FitParameter self, AttLimits const & limits) -> FitParameter"},
+	 { (char *)"FitParameter_setLimits", _wrap_FitParameter_setLimits, METH_VARARGS, (char *)"FitParameter_setLimits(FitParameter self, AttLimits limits) -> FitParameter"},
 	 { (char *)"FitParameter_lowerLimited", _wrap_FitParameter_lowerLimited, METH_VARARGS, (char *)"FitParameter_lowerLimited(FitParameter self, double bound_value) -> FitParameter"},
 	 { (char *)"FitParameter_positive", _wrap_FitParameter_positive, METH_VARARGS, (char *)"FitParameter_positive(FitParameter self) -> FitParameter"},
 	 { (char *)"FitParameter_nonnegative", _wrap_FitParameter_nonnegative, METH_VARARGS, (char *)"FitParameter_nonnegative(FitParameter self) -> FitParameter"},
-- 
GitLab