From aaf684b9a4d8e728ca8e97ac7375351824b1cbbf Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Fri, 2 Sep 2022 19:06:32 +0200
Subject: [PATCH] correct declarations of INode::validate overrides

---
 Device/Beam/IFootprintFactor.h            |   2 +-
 Param/Distrib/Distributions.h             |  12 +--
 Sample/Aggregate/ParticleLayout.h         |   2 +-
 Sample/Correlations/Profiles1D.h          |   2 +-
 Sample/Correlations/Profiles2D.h          |   2 +-
 Sample/HardParticle/Bipyramid4.h          |   2 +-
 Sample/HardParticle/Box.h                 |   2 +-
 Sample/HardParticle/CantellatedCube.h     |   2 +-
 Sample/HardParticle/Cone.h                |   2 +-
 Sample/HardParticle/Cylinder.h            |   2 +-
 Sample/HardParticle/Dodecahedron.h        |   2 +-
 Sample/HardParticle/EllipsoidalCylinder.h |   2 +-
 Sample/HardParticle/HemiEllipsoid.h       |   2 +-
 Sample/HardParticle/HollowSphere.h        |   2 +-
 Sample/HardParticle/HorizontalCylinder.h  |   2 +-
 Sample/HardParticle/Icosahedron.h         |   2 +-
 Sample/HardParticle/LongBoxGauss.h        |   2 +-
 Sample/HardParticle/LongBoxLorentz.h      |   2 +-
 Sample/HardParticle/PlatonicOctahedron.h  |   2 +-
 Sample/HardParticle/PlatonicTetrahedron.h |   2 +-
 Sample/HardParticle/Prism3.h              |   2 +-
 Sample/HardParticle/Prism6.h              |   2 +-
 Sample/HardParticle/Pyramid2.h            |   2 +-
 Sample/HardParticle/Pyramid3.h            |   2 +-
 Sample/HardParticle/Pyramid4.h            |   2 +-
 Sample/HardParticle/Pyramid6.h            |   2 +-
 Sample/HardParticle/Sphere.h              |   2 +-
 Sample/HardParticle/Spheroid.h            |   2 +-
 Sample/HardParticle/TruncatedCube.h       |   2 +-
 Sample/HardParticle/TruncatedSphere.h     |   2 +-
 Sample/HardParticle/TruncatedSpheroid.h   |   2 +-
 Sample/Interface/LayerInterface.h         |   2 +-
 Sample/Multilayer/Layer.h                 |   2 +-
 Sample/Multilayer/MultiLayer.h            |   2 +-
 Sample/Particle/Crystal.h                 |   2 +-
 Sample/Particle/IFormFactor.h             |   2 -
 Sample/Particle/IParticle.h               |   2 +-
 Sample/Particle/MesoCrystal.h             |   2 +-
 Sample/Particle/Particle.h                |   2 +-
 Sample/Particle/ParticleComposition.h     |   2 +-
 Sample/Particle/ParticleCoreShell.h       |   2 +-
 Sample/SoftParticle/FuzzySphere.h         |   2 +-
 Sample/SoftParticle/Gauss.h               |   2 +-
 Sim/Background/ConstantBackground.h       |   2 +-
 auto/Wrap/doxygenDevice.i                 |   2 +-
 auto/Wrap/doxygenParam.i                  |  12 +--
 auto/Wrap/doxygenSample.i                 |  83 ++++++++-------
 auto/Wrap/doxygenSim.i                    |   2 +-
 auto/Wrap/libBornAgainDevice.py           |   2 +-
 auto/Wrap/libBornAgainDevice_wrap.cpp     |   2 +-
 auto/Wrap/libBornAgainParam.py            |  12 +--
 auto/Wrap/libBornAgainParam_wrap.cpp      |  12 +--
 auto/Wrap/libBornAgainSample.py           |  86 +++++++---------
 auto/Wrap/libBornAgainSample_wrap.cpp     | 118 +++++++---------------
 auto/Wrap/libBornAgainSim.py              |   2 +-
 auto/Wrap/libBornAgainSim_wrap.cpp        |   2 +-
 56 files changed, 190 insertions(+), 243 deletions(-)

diff --git a/Device/Beam/IFootprintFactor.h b/Device/Beam/IFootprintFactor.h
index a8839327def..b88a5ed233a 100644
--- a/Device/Beam/IFootprintFactor.h
+++ b/Device/Beam/IFootprintFactor.h
@@ -41,7 +41,7 @@ public:
     //! Calculate footprint correction coefficient from the beam incident angle _alpha_.
     virtual double calculate(double alpha) const = 0;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 protected:
     const double& m_width_ratio; //!< Beam to sample width ratio
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index 250644fcf64..78c4bd02a6b 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -115,7 +115,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_min;
@@ -157,7 +157,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_mean;
@@ -202,7 +202,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_mean;
@@ -247,7 +247,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_median;
@@ -291,7 +291,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_mean;
@@ -340,7 +340,7 @@ public:
     std::string pythonConstructor(const std::string& units) const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     void adjustLimitsToNonZeroSamples(double& min, double& max, size_t nbr_samples) const;
diff --git a/Sample/Aggregate/ParticleLayout.h b/Sample/Aggregate/ParticleLayout.h
index 9478e6a82b9..3c93dbb57ae 100644
--- a/Sample/Aggregate/ParticleLayout.h
+++ b/Sample/Aggregate/ParticleLayout.h
@@ -60,7 +60,7 @@ public:
 
     double weightedParticleSurfaceDensity() const;
 
-    std::string validate() const;
+    std::string validate() const override;
 
 private:
     void addAndRegisterAbstractParticle(IParticle* child);
diff --git a/Sample/Correlations/Profiles1D.h b/Sample/Correlations/Profiles1D.h
index 99e05fa1026..319eafaeb21 100644
--- a/Sample/Correlations/Profiles1D.h
+++ b/Sample/Correlations/Profiles1D.h
@@ -186,7 +186,7 @@ public:
     std::string pythonConstructor() const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 protected:
     const double& m_eta; //!< balances between Gauss (eta=0) and Lorentz (eta=1)
diff --git a/Sample/Correlations/Profiles2D.h b/Sample/Correlations/Profiles2D.h
index 3bc98ac0492..80f6928d787 100644
--- a/Sample/Correlations/Profiles2D.h
+++ b/Sample/Correlations/Profiles2D.h
@@ -174,7 +174,7 @@ public:
     std::string pythonConstructor() const override;
 #endif
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 protected:
     const double& m_eta;
diff --git a/Sample/HardParticle/Bipyramid4.h b/Sample/HardParticle/Bipyramid4.h
index 4c77b8ae954..b1731241d3e 100644
--- a/Sample/HardParticle/Bipyramid4.h
+++ b/Sample/HardParticle/Bipyramid4.h
@@ -41,7 +41,7 @@ public:
     double height() const { return m_height; }
     double heightRatio() const { return m_height_ratio; }
     double alpha() const { return m_alpha; }
-    std::string validate() const final;
+    std::string validate() const override;
 #endif // USER_API
 
 private:
diff --git a/Sample/HardParticle/Box.h b/Sample/HardParticle/Box.h
index 276834aeb5a..b5b0351b430 100644
--- a/Sample/HardParticle/Box.h
+++ b/Sample/HardParticle/Box.h
@@ -44,7 +44,7 @@ public:
     double radialExtension() const override { return m_length / 2.0; }
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/CantellatedCube.h b/Sample/HardParticle/CantellatedCube.h
index 45aa397ea4a..a468f3acf2c 100644
--- a/Sample/HardParticle/CantellatedCube.h
+++ b/Sample/HardParticle/CantellatedCube.h
@@ -39,7 +39,7 @@ public:
 
     double length() const { return m_length; }
     double removedLength() const { return m_removed_length; }
-    std::string validate() const final;
+    std::string validate() const override;
 #endif // USER_API
 
 private:
diff --git a/Sample/HardParticle/Cone.h b/Sample/HardParticle/Cone.h
index c49c52ad57f..bddc31a8e56 100644
--- a/Sample/HardParticle/Cone.h
+++ b/Sample/HardParticle/Cone.h
@@ -43,7 +43,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 #endif // USER_API
 
diff --git a/Sample/HardParticle/Cylinder.h b/Sample/HardParticle/Cylinder.h
index 290757775f9..7ded4762096 100644
--- a/Sample/HardParticle/Cylinder.h
+++ b/Sample/HardParticle/Cylinder.h
@@ -41,7 +41,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/Dodecahedron.h b/Sample/HardParticle/Dodecahedron.h
index 22f8107913b..feff5d0786f 100644
--- a/Sample/HardParticle/Dodecahedron.h
+++ b/Sample/HardParticle/Dodecahedron.h
@@ -35,7 +35,7 @@ public:
 
     double edge() const { return m_edge; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/EllipsoidalCylinder.h b/Sample/HardParticle/EllipsoidalCylinder.h
index 07085c3bdb1..a852e5f98ab 100644
--- a/Sample/HardParticle/EllipsoidalCylinder.h
+++ b/Sample/HardParticle/EllipsoidalCylinder.h
@@ -46,7 +46,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius_x;
diff --git a/Sample/HardParticle/HemiEllipsoid.h b/Sample/HardParticle/HemiEllipsoid.h
index 5cdf01f2dc0..50c9c1e2721 100644
--- a/Sample/HardParticle/HemiEllipsoid.h
+++ b/Sample/HardParticle/HemiEllipsoid.h
@@ -48,7 +48,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius_x;
diff --git a/Sample/HardParticle/HollowSphere.h b/Sample/HardParticle/HollowSphere.h
index f4594c45e5e..4a5c428eb30 100644
--- a/Sample/HardParticle/HollowSphere.h
+++ b/Sample/HardParticle/HollowSphere.h
@@ -38,7 +38,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     bool checkParameters() const;
diff --git a/Sample/HardParticle/HorizontalCylinder.h b/Sample/HardParticle/HorizontalCylinder.h
index 3d8a13334d3..91932e7aa48 100644
--- a/Sample/HardParticle/HorizontalCylinder.h
+++ b/Sample/HardParticle/HorizontalCylinder.h
@@ -50,7 +50,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/Icosahedron.h b/Sample/HardParticle/Icosahedron.h
index c455ff03987..1a930a74c26 100644
--- a/Sample/HardParticle/Icosahedron.h
+++ b/Sample/HardParticle/Icosahedron.h
@@ -35,7 +35,7 @@ public:
 
     double edge() const { return m_edge; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/LongBoxGauss.h b/Sample/HardParticle/LongBoxGauss.h
index 6d619d3ff93..e31b81e59f3 100644
--- a/Sample/HardParticle/LongBoxGauss.h
+++ b/Sample/HardParticle/LongBoxGauss.h
@@ -42,7 +42,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/LongBoxLorentz.h b/Sample/HardParticle/LongBoxLorentz.h
index 1ada0917c1c..9f30438c302 100644
--- a/Sample/HardParticle/LongBoxLorentz.h
+++ b/Sample/HardParticle/LongBoxLorentz.h
@@ -46,7 +46,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/PlatonicOctahedron.h b/Sample/HardParticle/PlatonicOctahedron.h
index cfa9f7e664d..7affe089fc9 100644
--- a/Sample/HardParticle/PlatonicOctahedron.h
+++ b/Sample/HardParticle/PlatonicOctahedron.h
@@ -36,7 +36,7 @@ public:
     double edge() const { return m_edge; }
     double height() const { return sqrt(1 / 2.) * m_edge; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/PlatonicTetrahedron.h b/Sample/HardParticle/PlatonicTetrahedron.h
index a320703fe84..96d63989fcb 100644
--- a/Sample/HardParticle/PlatonicTetrahedron.h
+++ b/Sample/HardParticle/PlatonicTetrahedron.h
@@ -36,7 +36,7 @@ public:
     double edge() const { return m_edge; }
     double height() const { return sqrt(2. / 3) * m_edge; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/Prism3.h b/Sample/HardParticle/Prism3.h
index 131e8ee7005..ec84c1773b5 100644
--- a/Sample/HardParticle/Prism3.h
+++ b/Sample/HardParticle/Prism3.h
@@ -37,7 +37,7 @@ public:
     double baseEdge() const { return m_base_edge; }
     double height() const override { return m_height; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/Prism6.h b/Sample/HardParticle/Prism6.h
index d49ade631d4..cfcc2558031 100644
--- a/Sample/HardParticle/Prism6.h
+++ b/Sample/HardParticle/Prism6.h
@@ -37,7 +37,7 @@ public:
     double baseEdge() const { return m_base_edge; }
     double height() const override { return m_height; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/Pyramid2.h b/Sample/HardParticle/Pyramid2.h
index 62c814fc50d..9b6d40a26ce 100644
--- a/Sample/HardParticle/Pyramid2.h
+++ b/Sample/HardParticle/Pyramid2.h
@@ -41,7 +41,7 @@ public:
     double height() const { return m_height; }
     double alpha() const { return m_alpha; }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/Pyramid3.h b/Sample/HardParticle/Pyramid3.h
index 745ba90c4b3..836dfe8fae3 100644
--- a/Sample/HardParticle/Pyramid3.h
+++ b/Sample/HardParticle/Pyramid3.h
@@ -39,7 +39,7 @@ public:
     double baseEdge() const { return m_base_edge; }
     double height() const { return m_height; }
     double alpha() const { return m_alpha; }
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/Pyramid4.h b/Sample/HardParticle/Pyramid4.h
index a39a04e35f1..87f7eeb9d9b 100644
--- a/Sample/HardParticle/Pyramid4.h
+++ b/Sample/HardParticle/Pyramid4.h
@@ -38,7 +38,7 @@ public:
     double height() const { return m_height; }
     double baseEdge() const { return m_base_edge; }
     double alpha() const { return m_alpha; }
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/Pyramid6.h b/Sample/HardParticle/Pyramid6.h
index 4c392659187..26ed3504e86 100644
--- a/Sample/HardParticle/Pyramid6.h
+++ b/Sample/HardParticle/Pyramid6.h
@@ -39,7 +39,7 @@ public:
     double baseEdge() const { return m_base_edge; }
     double height() const { return m_height; }
     double alpha() const { return m_alpha; }
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/Sphere.h b/Sample/HardParticle/Sphere.h
index 2a3646fd500..2f7935abb6a 100644
--- a/Sample/HardParticle/Sphere.h
+++ b/Sample/HardParticle/Sphere.h
@@ -40,7 +40,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 protected:
     bool canSliceAnalytically(const IRotation*) const override { return true; }
diff --git a/Sample/HardParticle/Spheroid.h b/Sample/HardParticle/Spheroid.h
index fed06872fe9..5bf936325fd 100644
--- a/Sample/HardParticle/Spheroid.h
+++ b/Sample/HardParticle/Spheroid.h
@@ -42,7 +42,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/TruncatedCube.h b/Sample/HardParticle/TruncatedCube.h
index 43f21c231c0..a4edfda9e1c 100644
--- a/Sample/HardParticle/TruncatedCube.h
+++ b/Sample/HardParticle/TruncatedCube.h
@@ -36,7 +36,7 @@ public:
 
     double length() const { return m_length; }
     double removedLength() const { return m_removed_length; }
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     static const ff::PolyhedralTopology topology;
diff --git a/Sample/HardParticle/TruncatedSphere.h b/Sample/HardParticle/TruncatedSphere.h
index c89ee680711..9a4741deebd 100644
--- a/Sample/HardParticle/TruncatedSphere.h
+++ b/Sample/HardParticle/TruncatedSphere.h
@@ -46,7 +46,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/TruncatedSpheroid.h b/Sample/HardParticle/TruncatedSpheroid.h
index ddc9b49eba1..7ffecc4955f 100644
--- a/Sample/HardParticle/TruncatedSpheroid.h
+++ b/Sample/HardParticle/TruncatedSpheroid.h
@@ -49,7 +49,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/Interface/LayerInterface.h b/Sample/Interface/LayerInterface.h
index 49f46760030..1aa7568a908 100644
--- a/Sample/Interface/LayerInterface.h
+++ b/Sample/Interface/LayerInterface.h
@@ -54,7 +54,7 @@ public:
 
     std::vector<const INode*> nodeChildren() const override;
 
-    std::string validate() const;
+    std::string validate() const override;
 
 private:
     void setLayersTopBottom(const Layer* top_layer, const Layer* bottom_layer);
diff --git a/Sample/Multilayer/Layer.h b/Sample/Multilayer/Layer.h
index aedfd0ba0b5..737c0c5c527 100644
--- a/Sample/Multilayer/Layer.h
+++ b/Sample/Multilayer/Layer.h
@@ -47,7 +47,7 @@ public:
     void setNumberOfSlices(unsigned int n_slices) { m_n_slices = n_slices; }
     unsigned int numberOfSlices() const { return m_n_slices; }
 
-    std::string validate() const;
+    std::string validate() const override;
 
 private:
     Material m_material;                                    //!< material
diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h
index 69299e91373..afd567d96fe 100644
--- a/Sample/Multilayer/MultiLayer.h
+++ b/Sample/Multilayer/MultiLayer.h
@@ -75,7 +75,7 @@ public:
     void setSampleName(const std::string& name) { m_sample_name = name; }
     const std::string& sampleName() const { return m_sample_name; }
 
-    std::string validate() const;
+    std::string validate() const override;
 
 private:
     //! Adds the layer with simultaneous registration in parent class
diff --git a/Sample/Particle/Crystal.h b/Sample/Particle/Crystal.h
index dccbe561960..7ef9b442ecc 100644
--- a/Sample/Particle/Crystal.h
+++ b/Sample/Particle/Crystal.h
@@ -50,7 +50,7 @@ public:
 
     Crystal* transformed(const IRotation* rotation, const R3& translation) const;
 
-    std::string validate() const { return ""; }
+    std::string validate() const override { return ""; }
 
 private:
     Crystal(IParticle* basis, const Lattice3D& lattice, double position_variance = 0);
diff --git a/Sample/Particle/IFormFactor.h b/Sample/Particle/IFormFactor.h
index c6083c0b2a6..043c15b2cbf 100644
--- a/Sample/Particle/IFormFactor.h
+++ b/Sample/Particle/IFormFactor.h
@@ -66,8 +66,6 @@ public:
     //! multiplies with the unit matrix.
     virtual SpinMatrix formfactor_pol(C3 q) const;
 
-    virtual std::string validate() const { return ""; }
-
 protected:
     //! IShape3D object, used to retrieve vertices (which may be approximate in the case
     //! of round shapes). For soft particles, this will be a hard mean shape.
diff --git a/Sample/Particle/IParticle.h b/Sample/Particle/IParticle.h
index c8d6b37c100..456922472ad 100644
--- a/Sample/Particle/IParticle.h
+++ b/Sample/Particle/IParticle.h
@@ -74,7 +74,7 @@ public:
     virtual std::vector<std::unique_ptr<IParticle>> decompose() const;
 #endif
 
-    virtual std::string validate() const = 0;
+    std::string validate() const override = 0;
 
 protected:
     double m_abundance{1.0}; // not a Parameter
diff --git a/Sample/Particle/MesoCrystal.h b/Sample/Particle/MesoCrystal.h
index e42dc950662..dbc6686e4ec 100644
--- a/Sample/Particle/MesoCrystal.h
+++ b/Sample/Particle/MesoCrystal.h
@@ -37,7 +37,7 @@ public:
     const IFormFactor* outerShape() const { return m_meso_formfactor.get(); }
     const Crystal& particleStructure() const;
 
-    std::string validate() const final { return ""; }
+    std::string validate() const override { return ""; }
 
 private:
     MesoCrystal(Crystal* crystal, IFormFactor* formfactor);
diff --git a/Sample/Particle/Particle.h b/Sample/Particle/Particle.h
index cc717438425..42cb8f24c27 100644
--- a/Sample/Particle/Particle.h
+++ b/Sample/Particle/Particle.h
@@ -37,7 +37,7 @@ public:
 
     const IFormFactor* formfactor_at_bottom() const { return m_formfactor.get(); }
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const Material m_material;
diff --git a/Sample/Particle/ParticleComposition.h b/Sample/Particle/ParticleComposition.h
index 119c353ff15..90238cb706b 100644
--- a/Sample/Particle/ParticleComposition.h
+++ b/Sample/Particle/ParticleComposition.h
@@ -44,7 +44,7 @@ public:
 
     std::vector<const IParticle*> particles() const;
 
-    std::string validate() const final { return ""; }
+    std::string validate() const override { return ""; }
 
 private:
     OwningVector<IParticle> m_particles;
diff --git a/Sample/Particle/ParticleCoreShell.h b/Sample/Particle/ParticleCoreShell.h
index 6411e8bf6c8..56f48384380 100644
--- a/Sample/Particle/ParticleCoreShell.h
+++ b/Sample/Particle/ParticleCoreShell.h
@@ -35,7 +35,7 @@ public:
     const Particle* shellParticle() const { return m_shell.get(); }
     const Particle* coreParticle() const { return m_core.get(); }
 
-    std::string validate() const final { return ""; }
+    std::string validate() const override { return ""; }
 
 protected:
     std::unique_ptr<Particle> m_shell;
diff --git a/Sample/SoftParticle/FuzzySphere.h b/Sample/SoftParticle/FuzzySphere.h
index 21dd8e552c7..f366aa2657a 100644
--- a/Sample/SoftParticle/FuzzySphere.h
+++ b/Sample/SoftParticle/FuzzySphere.h
@@ -38,7 +38,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_radius;
diff --git a/Sample/SoftParticle/Gauss.h b/Sample/SoftParticle/Gauss.h
index 8dc86bb81be..c97136a045e 100644
--- a/Sample/SoftParticle/Gauss.h
+++ b/Sample/SoftParticle/Gauss.h
@@ -38,7 +38,7 @@ public:
 
     complex_t formfactor_at_bottom(C3 q) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_mean_radius;
diff --git a/Sim/Background/ConstantBackground.h b/Sim/Background/ConstantBackground.h
index deac8e4f88d..63d274907ea 100644
--- a/Sim/Background/ConstantBackground.h
+++ b/Sim/Background/ConstantBackground.h
@@ -37,7 +37,7 @@ public:
 
     double addBackground(double intensity) const override;
 
-    std::string validate() const final;
+    std::string validate() const override;
 
 private:
     const double& m_background_value;
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index af375d66aa7..5c9f973c261 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -1042,7 +1042,7 @@ IFootprintFactor::calculate
 Calculate footprint correction coefficient from the beam incident angle  alpha. 
 ";
 
-%feature("docstring")  IFootprintFactor::validate "std::string IFootprintFactor::validate() const final
+%feature("docstring")  IFootprintFactor::validate "std::string IFootprintFactor::validate() const override
 IFootprintFactor::validate";
 
 
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index 727eb16b870..f64da0e9c20 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -59,7 +59,7 @@ DistributionCosine::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionCosine::validate "std::string DistributionCosine::validate() const final
+%feature("docstring")  DistributionCosine::validate "std::string DistributionCosine::validate() const override
 DistributionCosine::validate";
 
 
@@ -124,7 +124,7 @@ DistributionGate::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionGate::validate "std::string DistributionGate::validate() const final
+%feature("docstring")  DistributionGate::validate "std::string DistributionGate::validate() const override
 DistributionGate::validate";
 
 
@@ -186,7 +186,7 @@ DistributionGaussian::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionGaussian::validate "std::string DistributionGaussian::validate() const final
+%feature("docstring")  DistributionGaussian::validate "std::string DistributionGaussian::validate() const override
 DistributionGaussian::validate";
 
 
@@ -282,7 +282,7 @@ DistributionLogNormal::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionLogNormal::validate "std::string DistributionLogNormal::validate() const final
+%feature("docstring")  DistributionLogNormal::validate "std::string DistributionLogNormal::validate() const override
 DistributionLogNormal::validate";
 
 
@@ -344,7 +344,7 @@ DistributionLorentz::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionLorentz::validate "std::string DistributionLorentz::validate() const final
+%feature("docstring")  DistributionLorentz::validate "std::string DistributionLorentz::validate() const override
 DistributionLorentz::validate";
 
 
@@ -412,7 +412,7 @@ DistributionTrapezoid::pythonConstructor
 Prints distribution with constructor parameters in given units. ba.DistributionGaussian(2.0*deg, 0.02*deg) 
 ";
 
-%feature("docstring")  DistributionTrapezoid::validate "std::string DistributionTrapezoid::validate() const final
+%feature("docstring")  DistributionTrapezoid::validate "std::string DistributionTrapezoid::validate() const override
 DistributionTrapezoid::validate";
 
 
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 9b89529f379..928c6c1bba8 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -223,7 +223,7 @@ Bipyramid4::heightRatio";
 %feature("docstring")  Bipyramid4::alpha "double Bipyramid4::alpha() const
 Bipyramid4::alpha";
 
-%feature("docstring")  Bipyramid4::validate "std::string Bipyramid4::validate() const final
+%feature("docstring")  Bipyramid4::validate "std::string Bipyramid4::validate() const override
 Bipyramid4::validate";
 
 
@@ -272,7 +272,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  Box::formfactor_at_bottom "complex_t Box::formfactor_at_bottom(C3 q) const override
 Box::formfactor_at_bottom";
 
-%feature("docstring")  Box::validate "std::string Box::validate() const final
+%feature("docstring")  Box::validate "std::string Box::validate() const override
 Box::validate";
 
 
@@ -317,7 +317,7 @@ CantellatedCube::length";
 %feature("docstring")  CantellatedCube::removedLength "double CantellatedCube::removedLength() const
 CantellatedCube::removedLength";
 
-%feature("docstring")  CantellatedCube::validate "std::string CantellatedCube::validate() const final
+%feature("docstring")  CantellatedCube::validate "std::string CantellatedCube::validate() const override
 CantellatedCube::validate";
 
 
@@ -363,7 +363,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  Cone::formfactor_at_bottom "complex_t Cone::formfactor_at_bottom(C3 q) const override
 Cone::formfactor_at_bottom";
 
-%feature("docstring")  Cone::validate "std::string Cone::validate() const final
+%feature("docstring")  Cone::validate "std::string Cone::validate() const override
 Cone::validate";
 
 
@@ -489,7 +489,7 @@ Crystal::position_variance";
 %feature("docstring")  Crystal::transformed "Crystal * Crystal::transformed(const IRotation *rotation, const R3 &translation) const
 Crystal::transformed";
 
-%feature("docstring")  Crystal::validate "std::string Crystal::validate() const
+%feature("docstring")  Crystal::validate "std::string Crystal::validate() const override
 Crystal::validate";
 
 
@@ -532,7 +532,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  Cylinder::formfactor_at_bottom "complex_t Cylinder::formfactor_at_bottom(C3 q) const override
 Cylinder::formfactor_at_bottom";
 
-%feature("docstring")  Cylinder::validate "std::string Cylinder::validate() const final
+%feature("docstring")  Cylinder::validate "std::string Cylinder::validate() const override
 Cylinder::validate";
 
 
@@ -654,7 +654,7 @@ Dodecahedron::parDefs";
 %feature("docstring")  Dodecahedron::edge "double Dodecahedron::edge() const
 Dodecahedron::edge";
 
-%feature("docstring")  Dodecahedron::validate "std::string Dodecahedron::validate() const final
+%feature("docstring")  Dodecahedron::validate "std::string Dodecahedron::validate() const override
 Dodecahedron::validate";
 
 
@@ -720,7 +720,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  EllipsoidalCylinder::formfactor_at_bottom "complex_t EllipsoidalCylinder::formfactor_at_bottom(C3 q) const override
 EllipsoidalCylinder::formfactor_at_bottom";
 
-%feature("docstring")  EllipsoidalCylinder::validate "std::string EllipsoidalCylinder::validate() const final
+%feature("docstring")  EllipsoidalCylinder::validate "std::string EllipsoidalCylinder::validate() const override
 EllipsoidalCylinder::validate";
 
 
@@ -769,7 +769,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  FuzzySphere::formfactor_at_bottom "complex_t FuzzySphere::formfactor_at_bottom(C3 q) const override
 FuzzySphere::formfactor_at_bottom";
 
-%feature("docstring")  FuzzySphere::validate "std::string FuzzySphere::validate() const final
+%feature("docstring")  FuzzySphere::validate "std::string FuzzySphere::validate() const override
 FuzzySphere::validate";
 
 
@@ -843,7 +843,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  GaussSphere::formfactor_at_bottom "complex_t GaussSphere::formfactor_at_bottom(C3 q) const override
 GaussSphere::formfactor_at_bottom";
 
-%feature("docstring")  GaussSphere::validate "std::string GaussSphere::validate() const final
+%feature("docstring")  GaussSphere::validate "std::string GaussSphere::validate() const override
 GaussSphere::validate";
 
 
@@ -892,7 +892,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  HemiEllipsoid::formfactor_at_bottom "complex_t HemiEllipsoid::formfactor_at_bottom(C3 q) const override
 HemiEllipsoid::formfactor_at_bottom";
 
-%feature("docstring")  HemiEllipsoid::validate "std::string HemiEllipsoid::validate() const final
+%feature("docstring")  HemiEllipsoid::validate "std::string HemiEllipsoid::validate() const override
 HemiEllipsoid::validate";
 
 
@@ -962,7 +962,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  HollowSphere::formfactor_at_bottom "complex_t HollowSphere::formfactor_at_bottom(C3 q) const override
 HollowSphere::formfactor_at_bottom";
 
-%feature("docstring")  HollowSphere::validate "std::string HollowSphere::validate() const final
+%feature("docstring")  HollowSphere::validate "std::string HollowSphere::validate() const override
 HollowSphere::validate";
 
 
@@ -1014,7 +1014,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  HorizontalCylinder::formfactor_at_bottom "complex_t HorizontalCylinder::formfactor_at_bottom(C3 q) const override
 HorizontalCylinder::formfactor_at_bottom";
 
-%feature("docstring")  HorizontalCylinder::validate "std::string HorizontalCylinder::validate() const final
+%feature("docstring")  HorizontalCylinder::validate "std::string HorizontalCylinder::validate() const override
 HorizontalCylinder::validate";
 
 
@@ -1046,7 +1046,7 @@ Icosahedron::parDefs";
 %feature("docstring")  Icosahedron::edge "double Icosahedron::edge() const
 Icosahedron::edge";
 
-%feature("docstring")  Icosahedron::validate "std::string Icosahedron::validate() const final
+%feature("docstring")  Icosahedron::validate "std::string Icosahedron::validate() const override
 Icosahedron::validate";
 
 
@@ -1183,9 +1183,6 @@ IFormFactor::formfactor_pol
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f in case of matrix interactions. Default implementation calls formfactor_at_bottom(q) and multiplies with the unit matrix. 
 ";
 
-%feature("docstring")  IFormFactor::validate "virtual std::string IFormFactor::validate() const
-IFormFactor::validate";
-
 
 // File: classIFormFactorPolyhedron.xml
 %feature("docstring") IFormFactorPolyhedron "
@@ -1980,7 +1977,7 @@ IParticle::decompose
 Decompose in constituent  IParticle objects. 
 ";
 
-%feature("docstring")  IParticle::validate "virtual std::string IParticle::validate() const =0
+%feature("docstring")  IParticle::validate "std::string IParticle::validate() const override=0
 IParticle::validate";
 
 
@@ -2544,7 +2541,7 @@ Layer::setNumberOfSlices";
 %feature("docstring")  Layer::numberOfSlices "unsigned int Layer::numberOfSlices() const
 Layer::numberOfSlices";
 
-%feature("docstring")  Layer::validate "std::string Layer::validate() const
+%feature("docstring")  Layer::validate "std::string Layer::validate() const override
 Layer::validate";
 
 
@@ -2586,7 +2583,7 @@ LayerInterface::bottomLayer";
 %feature("docstring")  LayerInterface::nodeChildren "std::vector< const INode * > LayerInterface::nodeChildren() const override
 LayerInterface::nodeChildren";
 
-%feature("docstring")  LayerInterface::validate "std::string LayerInterface::validate() const
+%feature("docstring")  LayerInterface::validate "std::string LayerInterface::validate() const override
 LayerInterface::validate";
 
 
@@ -2723,7 +2720,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  LongBoxGauss::formfactor_at_bottom "complex_t LongBoxGauss::formfactor_at_bottom(C3 q) const override
 LongBoxGauss::formfactor_at_bottom";
 
-%feature("docstring")  LongBoxGauss::validate "std::string LongBoxGauss::validate() const final
+%feature("docstring")  LongBoxGauss::validate "std::string LongBoxGauss::validate() const override
 LongBoxGauss::validate";
 
 
@@ -2769,7 +2766,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  LongBoxLorentz::formfactor_at_bottom "complex_t LongBoxLorentz::formfactor_at_bottom(C3 q) const override
 LongBoxLorentz::formfactor_at_bottom";
 
-%feature("docstring")  LongBoxLorentz::validate "std::string LongBoxLorentz::validate() const final
+%feature("docstring")  LongBoxLorentz::validate "std::string LongBoxLorentz::validate() const override
 LongBoxLorentz::validate";
 
 
@@ -3019,7 +3016,7 @@ MesoCrystal::outerShape";
 %feature("docstring")  MesoCrystal::particleStructure "const Crystal & MesoCrystal::particleStructure() const
 MesoCrystal::particleStructure";
 
-%feature("docstring")  MesoCrystal::validate "std::string MesoCrystal::validate() const final
+%feature("docstring")  MesoCrystal::validate "std::string MesoCrystal::validate() const override
 MesoCrystal::validate";
 
 
@@ -3178,7 +3175,7 @@ MultiLayer::setSampleName";
 %feature("docstring")  MultiLayer::sampleName "const std::string & MultiLayer::sampleName() const
 MultiLayer::sampleName";
 
-%feature("docstring")  MultiLayer::validate "std::string MultiLayer::validate() const
+%feature("docstring")  MultiLayer::validate "std::string MultiLayer::validate() const override
 MultiLayer::validate";
 
 
@@ -3227,7 +3224,7 @@ Returns nullptr, unless overwritten to return a specific material.
 %feature("docstring")  Particle::formfactor_at_bottom "const IFormFactor * Particle::formfactor_at_bottom() const
 Particle::formfactor_at_bottom";
 
-%feature("docstring")  Particle::validate "std::string Particle::validate() const final
+%feature("docstring")  Particle::validate "std::string Particle::validate() const override
 Particle::validate";
 
 
@@ -3278,7 +3275,7 @@ Returns number of different particles.
 %feature("docstring")  ParticleComposition::particles "std::vector< const IParticle * > ParticleComposition::particles() const
 ParticleComposition::particles";
 
-%feature("docstring")  ParticleComposition::validate "std::string ParticleComposition::validate() const final
+%feature("docstring")  ParticleComposition::validate "std::string ParticleComposition::validate() const override
 ParticleComposition::validate";
 
 
@@ -3313,7 +3310,7 @@ ParticleCoreShell::shellParticle";
 %feature("docstring")  ParticleCoreShell::coreParticle "const Particle * ParticleCoreShell::coreParticle() const
 ParticleCoreShell::coreParticle";
 
-%feature("docstring")  ParticleCoreShell::validate "std::string ParticleCoreShell::validate() const final
+%feature("docstring")  ParticleCoreShell::validate "std::string ParticleCoreShell::validate() const override
 ParticleCoreShell::validate";
 
 
@@ -3403,7 +3400,7 @@ Sets the relative weight of this layout.
 %feature("docstring")  ParticleLayout::weightedParticleSurfaceDensity "double ParticleLayout::weightedParticleSurfaceDensity() const
 ParticleLayout::weightedParticleSurfaceDensity";
 
-%feature("docstring")  ParticleLayout::validate "std::string ParticleLayout::validate() const
+%feature("docstring")  ParticleLayout::validate "std::string ParticleLayout::validate() const override
 ParticleLayout::validate";
 
 
@@ -3438,7 +3435,7 @@ PlatonicOctahedron::edge";
 %feature("docstring")  PlatonicOctahedron::height "double PlatonicOctahedron::height() const
 PlatonicOctahedron::height";
 
-%feature("docstring")  PlatonicOctahedron::validate "std::string PlatonicOctahedron::validate() const final
+%feature("docstring")  PlatonicOctahedron::validate "std::string PlatonicOctahedron::validate() const override
 PlatonicOctahedron::validate";
 
 
@@ -3473,7 +3470,7 @@ PlatonicTetrahedron::edge";
 %feature("docstring")  PlatonicTetrahedron::height "double PlatonicTetrahedron::height() const
 PlatonicTetrahedron::height";
 
-%feature("docstring")  PlatonicTetrahedron::validate "std::string PlatonicTetrahedron::validate() const final
+%feature("docstring")  PlatonicTetrahedron::validate "std::string PlatonicTetrahedron::validate() const override
 PlatonicTetrahedron::validate";
 
 
@@ -3508,7 +3505,7 @@ Prism3::baseEdge";
 %feature("docstring")  Prism3::height "double Prism3::height() const override
 Prism3::height";
 
-%feature("docstring")  Prism3::validate "std::string Prism3::validate() const final
+%feature("docstring")  Prism3::validate "std::string Prism3::validate() const override
 Prism3::validate";
 
 
@@ -3543,7 +3540,7 @@ Prism6::baseEdge";
 %feature("docstring")  Prism6::height "double Prism6::height() const override
 Prism6::height";
 
-%feature("docstring")  Prism6::validate "std::string Prism6::validate() const final
+%feature("docstring")  Prism6::validate "std::string Prism6::validate() const override
 Prism6::validate";
 
 
@@ -3791,7 +3788,7 @@ Profile1DVoigt::pythonConstructor
 Creates the Python constructor of this class (or derived classes) 
 ";
 
-%feature("docstring")  Profile1DVoigt::validate "std::string Profile1DVoigt::validate() const final
+%feature("docstring")  Profile1DVoigt::validate "std::string Profile1DVoigt::validate() const override
 Profile1DVoigt::validate";
 
 
@@ -3979,7 +3976,7 @@ Profile2DVoigt::pythonConstructor
 Creates the Python constructor of this class (or derived classes) 
 ";
 
-%feature("docstring")  Profile2DVoigt::validate "std::string Profile2DVoigt::validate() const final
+%feature("docstring")  Profile2DVoigt::validate "std::string Profile2DVoigt::validate() const override
 Profile2DVoigt::validate";
 
 
@@ -4020,7 +4017,7 @@ Pyramid2::height";
 %feature("docstring")  Pyramid2::alpha "double Pyramid2::alpha() const
 Pyramid2::alpha";
 
-%feature("docstring")  Pyramid2::validate "std::string Pyramid2::validate() const final
+%feature("docstring")  Pyramid2::validate "std::string Pyramid2::validate() const override
 Pyramid2::validate";
 
 
@@ -4058,7 +4055,7 @@ Pyramid3::height";
 %feature("docstring")  Pyramid3::alpha "double Pyramid3::alpha() const
 Pyramid3::alpha";
 
-%feature("docstring")  Pyramid3::validate "std::string Pyramid3::validate() const final
+%feature("docstring")  Pyramid3::validate "std::string Pyramid3::validate() const override
 Pyramid3::validate";
 
 
@@ -4096,7 +4093,7 @@ Pyramid4::baseEdge";
 %feature("docstring")  Pyramid4::alpha "double Pyramid4::alpha() const
 Pyramid4::alpha";
 
-%feature("docstring")  Pyramid4::validate "std::string Pyramid4::validate() const final
+%feature("docstring")  Pyramid4::validate "std::string Pyramid4::validate() const override
 Pyramid4::validate";
 
 
@@ -4134,7 +4131,7 @@ Pyramid6::height";
 %feature("docstring")  Pyramid6::alpha "double Pyramid6::alpha() const
 Pyramid6::alpha";
 
-%feature("docstring")  Pyramid6::validate "std::string Pyramid6::validate() const final
+%feature("docstring")  Pyramid6::validate "std::string Pyramid6::validate() const override
 Pyramid6::validate";
 
 
@@ -4520,7 +4517,7 @@ Sphere::topZ";
 %feature("docstring")  Sphere::formfactor_at_bottom "complex_t Sphere::formfactor_at_bottom(C3 q) const override
 Sphere::formfactor_at_bottom";
 
-%feature("docstring")  Sphere::validate "std::string Sphere::validate() const final
+%feature("docstring")  Sphere::validate "std::string Sphere::validate() const override
 Sphere::validate";
 
 
@@ -4563,7 +4560,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  Spheroid::formfactor_at_bottom "complex_t Spheroid::formfactor_at_bottom(C3 q) const override
 Spheroid::formfactor_at_bottom";
 
-%feature("docstring")  Spheroid::validate "std::string Spheroid::validate() const final
+%feature("docstring")  Spheroid::validate "std::string Spheroid::validate() const override
 Spheroid::validate";
 
 
@@ -4631,7 +4628,7 @@ TruncatedCube::length";
 %feature("docstring")  TruncatedCube::removedLength "double TruncatedCube::removedLength() const
 TruncatedCube::removedLength";
 
-%feature("docstring")  TruncatedCube::validate "std::string TruncatedCube::validate() const final
+%feature("docstring")  TruncatedCube::validate "std::string TruncatedCube::validate() const override
 TruncatedCube::validate";
 
 
@@ -4689,7 +4686,7 @@ TruncatedSphere::formfactor_at_bottom
 Complex form factor. 
 ";
 
-%feature("docstring")  TruncatedSphere::validate "std::string TruncatedSphere::validate() const final
+%feature("docstring")  TruncatedSphere::validate "std::string TruncatedSphere::validate() const override
 TruncatedSphere::validate";
 
 
@@ -4738,7 +4735,7 @@ Returns the (approximate in some cases) radial size of the particle of this form
 %feature("docstring")  TruncatedSpheroid::formfactor_at_bottom "complex_t TruncatedSpheroid::formfactor_at_bottom(C3 q) const override
 TruncatedSpheroid::formfactor_at_bottom";
 
-%feature("docstring")  TruncatedSpheroid::validate "std::string TruncatedSpheroid::validate() const final
+%feature("docstring")  TruncatedSpheroid::validate "std::string TruncatedSpheroid::validate() const override
 TruncatedSpheroid::validate";
 
 
diff --git a/auto/Wrap/doxygenSim.i b/auto/Wrap/doxygenSim.i
index 6a75c9159a2..6c2cea73bef 100644
--- a/auto/Wrap/doxygenSim.i
+++ b/auto/Wrap/doxygenSim.i
@@ -281,7 +281,7 @@ ConstantBackground::backgroundValue";
 %feature("docstring")  ConstantBackground::addBackground "double ConstantBackground::addBackground(double intensity) const override
 ConstantBackground::addBackground";
 
-%feature("docstring")  ConstantBackground::validate "std::string ConstantBackground::validate() const final
+%feature("docstring")  ConstantBackground::validate "std::string ConstantBackground::validate() const override
 ConstantBackground::validate";
 
 
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index bb97a97e0cc..c582f62f711 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -2607,7 +2607,7 @@ class IFootprintFactor(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     def validate(self):
         r"""
         validate(IFootprintFactor self) -> std::string
-        std::string IFootprintFactor::validate() const final
+        std::string IFootprintFactor::validate() const override
         IFootprintFactor::validate
         """
         return _libBornAgainDevice.IFootprintFactor_validate(self)
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 957cf817b06..ff4bb1884a2 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -38514,7 +38514,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFootprintFactor_validate", _wrap_IFootprintFactor_validate, METH_O, "\n"
 		"IFootprintFactor_validate(IFootprintFactor self) -> std::string\n"
-		"std::string IFootprintFactor::validate() const final\n"
+		"std::string IFootprintFactor::validate() const override\n"
 		"IFootprintFactor::validate\n"
 		""},
 	 { "IFootprintFactor_swigregister", IFootprintFactor_swigregister, METH_O, NULL},
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index e50d5bb321b..2760c8cd832 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -2370,7 +2370,7 @@ class DistributionGate(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionGate self) -> std::string
-        std::string DistributionGate::validate() const final
+        std::string DistributionGate::validate() const override
         DistributionGate::validate
         """
         return _libBornAgainParam.DistributionGate_validate(self)
@@ -2481,7 +2481,7 @@ class DistributionLorentz(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionLorentz self) -> std::string
-        std::string DistributionLorentz::validate() const final
+        std::string DistributionLorentz::validate() const override
         DistributionLorentz::validate
         """
         return _libBornAgainParam.DistributionLorentz_validate(self)
@@ -2592,7 +2592,7 @@ class DistributionGaussian(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionGaussian self) -> std::string
-        std::string DistributionGaussian::validate() const final
+        std::string DistributionGaussian::validate() const override
         DistributionGaussian::validate
         """
         return _libBornAgainParam.DistributionGaussian_validate(self)
@@ -2710,7 +2710,7 @@ class DistributionLogNormal(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionLogNormal self) -> std::string
-        std::string DistributionLogNormal::validate() const final
+        std::string DistributionLogNormal::validate() const override
         DistributionLogNormal::validate
         """
         return _libBornAgainParam.DistributionLogNormal_validate(self)
@@ -2821,7 +2821,7 @@ class DistributionCosine(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionCosine self) -> std::string
-        std::string DistributionCosine::validate() const final
+        std::string DistributionCosine::validate() const override
         DistributionCosine::validate
         """
         return _libBornAgainParam.DistributionCosine_validate(self)
@@ -2948,7 +2948,7 @@ class DistributionTrapezoid(IDistribution1D):
     def validate(self):
         r"""
         validate(DistributionTrapezoid self) -> std::string
-        std::string DistributionTrapezoid::validate() const final
+        std::string DistributionTrapezoid::validate() const override
         DistributionTrapezoid::validate
         """
         return _libBornAgainParam.DistributionTrapezoid_validate(self)
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index 4de4c046c80..a13099ccf14 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -35072,7 +35072,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGate_validate", _wrap_DistributionGate_validate, METH_O, "\n"
 		"DistributionGate_validate(DistributionGate self) -> std::string\n"
-		"std::string DistributionGate::validate() const final\n"
+		"std::string DistributionGate::validate() const override\n"
 		"DistributionGate::validate\n"
 		""},
 	 { "delete_DistributionGate", _wrap_delete_DistributionGate, METH_O, "delete_DistributionGate(DistributionGate self)"},
@@ -35139,7 +35139,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLorentz_validate", _wrap_DistributionLorentz_validate, METH_O, "\n"
 		"DistributionLorentz_validate(DistributionLorentz self) -> std::string\n"
-		"std::string DistributionLorentz::validate() const final\n"
+		"std::string DistributionLorentz::validate() const override\n"
 		"DistributionLorentz::validate\n"
 		""},
 	 { "delete_DistributionLorentz", _wrap_delete_DistributionLorentz, METH_O, "delete_DistributionLorentz(DistributionLorentz self)"},
@@ -35206,7 +35206,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_validate", _wrap_DistributionGaussian_validate, METH_O, "\n"
 		"DistributionGaussian_validate(DistributionGaussian self) -> std::string\n"
-		"std::string DistributionGaussian::validate() const final\n"
+		"std::string DistributionGaussian::validate() const override\n"
 		"DistributionGaussian::validate\n"
 		""},
 	 { "delete_DistributionGaussian", _wrap_delete_DistributionGaussian, METH_O, "delete_DistributionGaussian(DistributionGaussian self)"},
@@ -35277,7 +35277,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_validate", _wrap_DistributionLogNormal_validate, METH_O, "\n"
 		"DistributionLogNormal_validate(DistributionLogNormal self) -> std::string\n"
-		"std::string DistributionLogNormal::validate() const final\n"
+		"std::string DistributionLogNormal::validate() const override\n"
 		"DistributionLogNormal::validate\n"
 		""},
 	 { "delete_DistributionLogNormal", _wrap_delete_DistributionLogNormal, METH_O, "delete_DistributionLogNormal(DistributionLogNormal self)"},
@@ -35344,7 +35344,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionCosine_validate", _wrap_DistributionCosine_validate, METH_O, "\n"
 		"DistributionCosine_validate(DistributionCosine self) -> std::string\n"
-		"std::string DistributionCosine::validate() const final\n"
+		"std::string DistributionCosine::validate() const override\n"
 		"DistributionCosine::validate\n"
 		""},
 	 { "delete_DistributionCosine", _wrap_delete_DistributionCosine, METH_O, "delete_DistributionCosine(DistributionCosine self)"},
@@ -35421,7 +35421,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_validate", _wrap_DistributionTrapezoid_validate, METH_O, "\n"
 		"DistributionTrapezoid_validate(DistributionTrapezoid self) -> std::string\n"
-		"std::string DistributionTrapezoid::validate() const final\n"
+		"std::string DistributionTrapezoid::validate() const override\n"
 		"DistributionTrapezoid::validate\n"
 		""},
 	 { "delete_DistributionTrapezoid", _wrap_delete_DistributionTrapezoid, METH_O, "delete_DistributionTrapezoid(DistributionTrapezoid self)"},
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index e70eda8034e..4e4ad306f98 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -2771,14 +2771,6 @@ class IFormFactor(ISampleNode):
 
         """
         return _libBornAgainSample.IFormFactor_formfactor_pol(self, q)
-
-    def validate(self):
-        r"""
-        validate(IFormFactor self) -> std::string
-        virtual std::string IFormFactor::validate() const
-        IFormFactor::validate
-        """
-        return _libBornAgainSample.IFormFactor_validate(self)
     def __disown__(self):
         self.this.disown()
         _libBornAgainSample.disown_IFormFactor(self)
@@ -3380,7 +3372,7 @@ class Crystal(ISampleNode):
     def validate(self):
         r"""
         validate(Crystal self) -> std::string
-        std::string Crystal::validate() const
+        std::string Crystal::validate() const override
         Crystal::validate
         """
         return _libBornAgainSample.Crystal_validate(self)
@@ -3523,7 +3515,7 @@ class IParticle(ISampleNode):
     def validate(self):
         r"""
         validate(IParticle self) -> std::string
-        virtual std::string IParticle::validate() const =0
+        std::string IParticle::validate() const override=0
         IParticle::validate
         """
         return _libBornAgainSample.IParticle_validate(self)
@@ -3598,7 +3590,7 @@ class MesoCrystal(IParticle):
     def validate(self):
         r"""
         validate(MesoCrystal self) -> std::string
-        std::string MesoCrystal::validate() const final
+        std::string MesoCrystal::validate() const override
         MesoCrystal::validate
         """
         return _libBornAgainSample.MesoCrystal_validate(self)
@@ -3676,7 +3668,7 @@ class Particle(IParticle):
     def validate(self):
         r"""
         validate(Particle self) -> std::string
-        std::string Particle::validate() const final
+        std::string Particle::validate() const override
         Particle::validate
         """
         return _libBornAgainSample.Particle_validate(self)
@@ -3770,7 +3762,7 @@ class ParticleComposition(IParticle):
     def validate(self):
         r"""
         validate(ParticleComposition self) -> std::string
-        std::string ParticleComposition::validate() const final
+        std::string ParticleComposition::validate() const override
         ParticleComposition::validate
         """
         return _libBornAgainSample.ParticleComposition_validate(self)
@@ -3845,7 +3837,7 @@ class ParticleCoreShell(IParticle):
     def validate(self):
         r"""
         validate(ParticleCoreShell self) -> std::string
-        std::string ParticleCoreShell::validate() const final
+        std::string ParticleCoreShell::validate() const override
         ParticleCoreShell::validate
         """
         return _libBornAgainSample.ParticleCoreShell_validate(self)
@@ -4390,7 +4382,7 @@ class Profile1DVoigt(IProfile1D):
     def validate(self):
         r"""
         validate(Profile1DVoigt self) -> std::string
-        std::string Profile1DVoigt::validate() const final
+        std::string Profile1DVoigt::validate() const override
         Profile1DVoigt::validate
         """
         return _libBornAgainSample.Profile1DVoigt_validate(self)
@@ -4828,7 +4820,7 @@ class Profile2DVoigt(IProfile2D):
     def validate(self):
         r"""
         validate(Profile2DVoigt self) -> std::string
-        std::string Profile2DVoigt::validate() const final
+        std::string Profile2DVoigt::validate() const override
         Profile2DVoigt::validate
         """
         return _libBornAgainSample.Profile2DVoigt_validate(self)
@@ -6691,7 +6683,7 @@ class ParticleLayout(ISampleNode):
     def validate(self):
         r"""
         validate(ParticleLayout self) -> std::string
-        std::string ParticleLayout::validate() const
+        std::string ParticleLayout::validate() const override
         ParticleLayout::validate
         """
         return _libBornAgainSample.ParticleLayout_validate(self)
@@ -6965,7 +6957,7 @@ class Layer(ISampleNode):
     def validate(self):
         r"""
         validate(Layer self) -> std::string
-        std::string Layer::validate() const
+        std::string Layer::validate() const override
         Layer::validate
         """
         return _libBornAgainSample.Layer_validate(self)
@@ -7151,7 +7143,7 @@ class MultiLayer(ISampleNode):
     def validate(self):
         r"""
         validate(MultiLayer self) -> std::string
-        std::string MultiLayer::validate() const
+        std::string MultiLayer::validate() const override
         MultiLayer::validate
         """
         return _libBornAgainSample.MultiLayer_validate(self)
@@ -7649,7 +7641,7 @@ class Bipyramid4(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Bipyramid4 self) -> std::string
-        std::string Bipyramid4::validate() const final
+        std::string Bipyramid4::validate() const override
         Bipyramid4::validate
         """
         return _libBornAgainSample.Bipyramid4_validate(self)
@@ -7759,7 +7751,7 @@ class Box(IFormFactorPrism):
     def validate(self):
         r"""
         validate(Box self) -> std::string
-        std::string Box::validate() const final
+        std::string Box::validate() const override
         Box::validate
         """
         return _libBornAgainSample.Box_validate(self)
@@ -7835,7 +7827,7 @@ class CantellatedCube(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(CantellatedCube self) -> std::string
-        std::string CantellatedCube::validate() const final
+        std::string CantellatedCube::validate() const override
         CantellatedCube::validate
         """
         return _libBornAgainSample.CantellatedCube_validate(self)
@@ -7937,7 +7929,7 @@ class Cone(IFormFactor):
     def validate(self):
         r"""
         validate(Cone self) -> std::string
-        std::string Cone::validate() const final
+        std::string Cone::validate() const override
         Cone::validate
         """
         return _libBornAgainSample.Cone_validate(self)
@@ -8187,7 +8179,7 @@ class Cylinder(IFormFactor):
     def validate(self):
         r"""
         validate(Cylinder self) -> std::string
-        std::string Cylinder::validate() const final
+        std::string Cylinder::validate() const override
         Cylinder::validate
         """
         return _libBornAgainSample.Cylinder_validate(self)
@@ -8255,7 +8247,7 @@ class Dodecahedron(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Dodecahedron self) -> std::string
-        std::string Dodecahedron::validate() const final
+        std::string Dodecahedron::validate() const override
         Dodecahedron::validate
         """
         return _libBornAgainSample.Dodecahedron_validate(self)
@@ -8357,7 +8349,7 @@ class EllipsoidalCylinder(IFormFactor):
     def validate(self):
         r"""
         validate(EllipsoidalCylinder self) -> std::string
-        std::string EllipsoidalCylinder::validate() const final
+        std::string EllipsoidalCylinder::validate() const override
         EllipsoidalCylinder::validate
         """
         return _libBornAgainSample.EllipsoidalCylinder_validate(self)
@@ -8459,7 +8451,7 @@ class Sphere(IFormFactor):
     def validate(self):
         r"""
         validate(Sphere self) -> std::string
-        std::string Sphere::validate() const final
+        std::string Sphere::validate() const override
         Sphere::validate
         """
         return _libBornAgainSample.Sphere_validate(self)
@@ -8553,7 +8545,7 @@ class Spheroid(IFormFactor):
     def validate(self):
         r"""
         validate(Spheroid self) -> std::string
-        std::string Spheroid::validate() const final
+        std::string Spheroid::validate() const override
         Spheroid::validate
         """
         return _libBornAgainSample.Spheroid_validate(self)
@@ -8656,7 +8648,7 @@ class HemiEllipsoid(IFormFactor):
     def validate(self):
         r"""
         validate(HemiEllipsoid self) -> std::string
-        std::string HemiEllipsoid::validate() const final
+        std::string HemiEllipsoid::validate() const override
         HemiEllipsoid::validate
         """
         return _libBornAgainSample.HemiEllipsoid_validate(self)
@@ -8733,7 +8725,7 @@ class HollowSphere(IFormFactor):
     def validate(self):
         r"""
         validate(HollowSphere self) -> std::string
-        std::string HollowSphere::validate() const final
+        std::string HollowSphere::validate() const override
         HollowSphere::validate
         """
         return _libBornAgainSample.HollowSphere_validate(self)
@@ -8844,7 +8836,7 @@ class HorizontalCylinder(IFormFactor):
     def validate(self):
         r"""
         validate(HorizontalCylinder self) -> std::string
-        std::string HorizontalCylinder::validate() const final
+        std::string HorizontalCylinder::validate() const override
         HorizontalCylinder::validate
         """
         return _libBornAgainSample.HorizontalCylinder_validate(self)
@@ -8912,7 +8904,7 @@ class Icosahedron(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Icosahedron self) -> std::string
-        std::string Icosahedron::validate() const final
+        std::string Icosahedron::validate() const override
         Icosahedron::validate
         """
         return _libBornAgainSample.Icosahedron_validate(self)
@@ -9014,7 +9006,7 @@ class LongBoxGauss(IFormFactor):
     def validate(self):
         r"""
         validate(LongBoxGauss self) -> std::string
-        std::string LongBoxGauss::validate() const final
+        std::string LongBoxGauss::validate() const override
         LongBoxGauss::validate
         """
         return _libBornAgainSample.LongBoxGauss_validate(self)
@@ -9116,7 +9108,7 @@ class LongBoxLorentz(IFormFactor):
     def validate(self):
         r"""
         validate(LongBoxLorentz self) -> std::string
-        std::string LongBoxLorentz::validate() const final
+        std::string LongBoxLorentz::validate() const override
         LongBoxLorentz::validate
         """
         return _libBornAgainSample.LongBoxLorentz_validate(self)
@@ -9192,7 +9184,7 @@ class PlatonicOctahedron(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(PlatonicOctahedron self) -> std::string
-        std::string PlatonicOctahedron::validate() const final
+        std::string PlatonicOctahedron::validate() const override
         PlatonicOctahedron::validate
         """
         return _libBornAgainSample.PlatonicOctahedron_validate(self)
@@ -9268,7 +9260,7 @@ class PlatonicTetrahedron(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(PlatonicTetrahedron self) -> std::string
-        std::string PlatonicTetrahedron::validate() const final
+        std::string PlatonicTetrahedron::validate() const override
         PlatonicTetrahedron::validate
         """
         return _libBornAgainSample.PlatonicTetrahedron_validate(self)
@@ -9344,7 +9336,7 @@ class Prism3(IFormFactorPrism):
     def validate(self):
         r"""
         validate(Prism3 self) -> std::string
-        std::string Prism3::validate() const final
+        std::string Prism3::validate() const override
         Prism3::validate
         """
         return _libBornAgainSample.Prism3_validate(self)
@@ -9420,7 +9412,7 @@ class Prism6(IFormFactorPrism):
     def validate(self):
         r"""
         validate(Prism6 self) -> std::string
-        std::string Prism6::validate() const final
+        std::string Prism6::validate() const override
         Prism6::validate
         """
         return _libBornAgainSample.Prism6_validate(self)
@@ -9512,7 +9504,7 @@ class Pyramid2(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Pyramid2 self) -> std::string
-        std::string Pyramid2::validate() const final
+        std::string Pyramid2::validate() const override
         Pyramid2::validate
         """
         return _libBornAgainSample.Pyramid2_validate(self)
@@ -9596,7 +9588,7 @@ class Pyramid3(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Pyramid3 self) -> std::string
-        std::string Pyramid3::validate() const final
+        std::string Pyramid3::validate() const override
         Pyramid3::validate
         """
         return _libBornAgainSample.Pyramid3_validate(self)
@@ -9680,7 +9672,7 @@ class Pyramid4(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Pyramid4 self) -> std::string
-        std::string Pyramid4::validate() const final
+        std::string Pyramid4::validate() const override
         Pyramid4::validate
         """
         return _libBornAgainSample.Pyramid4_validate(self)
@@ -9764,7 +9756,7 @@ class Pyramid6(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(Pyramid6 self) -> std::string
-        std::string Pyramid6::validate() const final
+        std::string Pyramid6::validate() const override
         Pyramid6::validate
         """
         return _libBornAgainSample.Pyramid6_validate(self)
@@ -9996,7 +9988,7 @@ class TruncatedCube(IFormFactorPolyhedron):
     def validate(self):
         r"""
         validate(TruncatedCube self) -> std::string
-        std::string TruncatedCube::validate() const final
+        std::string TruncatedCube::validate() const override
         TruncatedCube::validate
         """
         return _libBornAgainSample.TruncatedCube_validate(self)
@@ -10100,7 +10092,7 @@ class TruncatedSphere(IFormFactor):
     def validate(self):
         r"""
         validate(TruncatedSphere self) -> std::string
-        std::string TruncatedSphere::validate() const final
+        std::string TruncatedSphere::validate() const override
         TruncatedSphere::validate
         """
         return _libBornAgainSample.TruncatedSphere_validate(self)
@@ -10210,7 +10202,7 @@ class TruncatedSpheroid(IFormFactor):
     def validate(self):
         r"""
         validate(TruncatedSpheroid self) -> std::string
-        std::string TruncatedSpheroid::validate() const final
+        std::string TruncatedSpheroid::validate() const override
         TruncatedSpheroid::validate
         """
         return _libBornAgainSample.TruncatedSpheroid_validate(self)
@@ -10296,7 +10288,7 @@ class GaussSphere(IFormFactor):
     def validate(self):
         r"""
         validate(GaussSphere self) -> std::string
-        std::string GaussSphere::validate() const final
+        std::string GaussSphere::validate() const override
         GaussSphere::validate
         """
         return _libBornAgainSample.GaussSphere_validate(self)
@@ -10374,7 +10366,7 @@ class FuzzySphere(IFormFactor):
     def validate(self):
         r"""
         validate(FuzzySphere self) -> std::string
-        std::string FuzzySphere::validate() const final
+        std::string FuzzySphere::validate() const override
         FuzzySphere::validate
         """
         return _libBornAgainSample.FuzzySphere_validate(self)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index a01bb16d026..152d5e3833e 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -33449,41 +33449,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IFormFactor_validate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFormFactor *arg1 = (IFormFactor *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  Swig::Director *director = 0;
-  bool upcall = false;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_validate" "', argument " "1"" of type '" "IFormFactor const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFormFactor * >(argp1);
-  director = SWIG_DIRECTOR_CAST(arg1);
-  upcall = (director && (director->swig_get_self()==swig_obj[0]));
-  try {
-    if (upcall) {
-      result = ((IFormFactor const *)arg1)->IFormFactor::validate();
-    } else {
-      result = ((IFormFactor const *)arg1)->validate();
-    }
-  } catch (Swig::DirectorException&) {
-    SWIG_fail;
-  }
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_disown_IFormFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactor *arg1 = (IFormFactor *) 0 ;
@@ -61971,11 +61936,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f in case of matrix interactions. Default implementation calls formfactor_at_bottom(q) and multiplies with the unit matrix. \n"
 		"\n"
 		""},
-	 { "IFormFactor_validate", _wrap_IFormFactor_validate, METH_O, "\n"
-		"IFormFactor_validate(IFormFactor self) -> std::string\n"
-		"virtual std::string IFormFactor::validate() const\n"
-		"IFormFactor::validate\n"
-		""},
 	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
 	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
 	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
@@ -62306,7 +62266,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Crystal_validate", _wrap_Crystal_validate, METH_O, "\n"
 		"Crystal_validate(Crystal self) -> std::string\n"
-		"std::string Crystal::validate() const\n"
+		"std::string Crystal::validate() const override\n"
 		"Crystal::validate\n"
 		""},
 	 { "Crystal_swigregister", Crystal_swigregister, METH_O, NULL},
@@ -62403,7 +62363,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_validate", _wrap_IParticle_validate, METH_O, "\n"
 		"IParticle_validate(IParticle self) -> std::string\n"
-		"virtual std::string IParticle::validate() const =0\n"
+		"std::string IParticle::validate() const override=0\n"
 		"IParticle::validate\n"
 		""},
 	 { "IParticle_swigregister", IParticle_swigregister, METH_O, NULL},
@@ -62446,7 +62406,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MesoCrystal_validate", _wrap_MesoCrystal_validate, METH_O, "\n"
 		"MesoCrystal_validate(MesoCrystal self) -> std::string\n"
-		"std::string MesoCrystal::validate() const final\n"
+		"std::string MesoCrystal::validate() const override\n"
 		"MesoCrystal::validate\n"
 		""},
 	 { "MesoCrystal_swigregister", MesoCrystal_swigregister, METH_O, NULL},
@@ -62493,7 +62453,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Particle_validate", _wrap_Particle_validate, METH_O, "\n"
 		"Particle_validate(Particle self) -> std::string\n"
-		"std::string Particle::validate() const final\n"
+		"std::string Particle::validate() const override\n"
 		"Particle::validate\n"
 		""},
 	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
@@ -62550,7 +62510,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleComposition_validate", _wrap_ParticleComposition_validate, METH_O, "\n"
 		"ParticleComposition_validate(ParticleComposition self) -> std::string\n"
-		"std::string ParticleComposition::validate() const final\n"
+		"std::string ParticleComposition::validate() const override\n"
 		"ParticleComposition::validate\n"
 		""},
 	 { "ParticleComposition_swigregister", ParticleComposition_swigregister, METH_O, NULL},
@@ -62594,7 +62554,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleCoreShell_validate", _wrap_ParticleCoreShell_validate, METH_O, "\n"
 		"ParticleCoreShell_validate(ParticleCoreShell self) -> std::string\n"
-		"std::string ParticleCoreShell::validate() const final\n"
+		"std::string ParticleCoreShell::validate() const override\n"
 		"ParticleCoreShell::validate\n"
 		""},
 	 { "ParticleCoreShell_swigregister", ParticleCoreShell_swigregister, METH_O, NULL},
@@ -62896,7 +62856,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Profile1DVoigt_validate", _wrap_Profile1DVoigt_validate, METH_O, "\n"
 		"Profile1DVoigt_validate(Profile1DVoigt self) -> std::string\n"
-		"std::string Profile1DVoigt::validate() const final\n"
+		"std::string Profile1DVoigt::validate() const override\n"
 		"Profile1DVoigt::validate\n"
 		""},
 	 { "delete_Profile1DVoigt", _wrap_delete_Profile1DVoigt, METH_O, "delete_Profile1DVoigt(Profile1DVoigt self)"},
@@ -63129,7 +63089,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Profile2DVoigt_validate", _wrap_Profile2DVoigt_validate, METH_O, "\n"
 		"Profile2DVoigt_validate(Profile2DVoigt self) -> std::string\n"
-		"std::string Profile2DVoigt::validate() const final\n"
+		"std::string Profile2DVoigt::validate() const override\n"
 		"Profile2DVoigt::validate\n"
 		""},
 	 { "delete_Profile2DVoigt", _wrap_delete_Profile2DVoigt, METH_O, "delete_Profile2DVoigt(Profile2DVoigt self)"},
@@ -64277,7 +64237,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleLayout_validate", _wrap_ParticleLayout_validate, METH_O, "\n"
 		"ParticleLayout_validate(ParticleLayout self) -> std::string\n"
-		"std::string ParticleLayout::validate() const\n"
+		"std::string ParticleLayout::validate() const override\n"
 		"ParticleLayout::validate\n"
 		""},
 	 { "ParticleLayout_swigregister", ParticleLayout_swigregister, METH_O, NULL},
@@ -64450,7 +64410,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_validate", _wrap_Layer_validate, METH_O, "\n"
 		"Layer_validate(Layer self) -> std::string\n"
-		"std::string Layer::validate() const\n"
+		"std::string Layer::validate() const override\n"
 		"Layer::validate\n"
 		""},
 	 { "Layer_swigregister", Layer_swigregister, METH_O, NULL},
@@ -64565,7 +64525,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MultiLayer_validate", _wrap_MultiLayer_validate, METH_O, "\n"
 		"MultiLayer_validate(MultiLayer self) -> std::string\n"
-		"std::string MultiLayer::validate() const\n"
+		"std::string MultiLayer::validate() const override\n"
 		"MultiLayer::validate\n"
 		""},
 	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
@@ -64796,7 +64756,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Bipyramid4_validate", _wrap_Bipyramid4_validate, METH_O, "\n"
 		"Bipyramid4_validate(Bipyramid4 self) -> std::string\n"
-		"std::string Bipyramid4::validate() const final\n"
+		"std::string Bipyramid4::validate() const override\n"
 		"Bipyramid4::validate\n"
 		""},
 	 { "delete_Bipyramid4", _wrap_delete_Bipyramid4, METH_O, "delete_Bipyramid4(Bipyramid4 self)"},
@@ -64859,7 +64819,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Box_validate", _wrap_Box_validate, METH_O, "\n"
 		"Box_validate(Box self) -> std::string\n"
-		"std::string Box::validate() const final\n"
+		"std::string Box::validate() const override\n"
 		"Box::validate\n"
 		""},
 	 { "delete_Box", _wrap_delete_Box, METH_O, "delete_Box(Box self)"},
@@ -64900,7 +64860,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "CantellatedCube_validate", _wrap_CantellatedCube_validate, METH_O, "\n"
 		"CantellatedCube_validate(CantellatedCube self) -> std::string\n"
-		"std::string CantellatedCube::validate() const final\n"
+		"std::string CantellatedCube::validate() const override\n"
 		"CantellatedCube::validate\n"
 		""},
 	 { "delete_CantellatedCube", _wrap_delete_CantellatedCube, METH_O, "delete_CantellatedCube(CantellatedCube self)"},
@@ -64958,7 +64918,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Cone_validate", _wrap_Cone_validate, METH_O, "\n"
 		"Cone_validate(Cone self) -> std::string\n"
-		"std::string Cone::validate() const final\n"
+		"std::string Cone::validate() const override\n"
 		"Cone::validate\n"
 		""},
 	 { "delete_Cone", _wrap_delete_Cone, METH_O, "delete_Cone(Cone self)"},
@@ -65089,7 +65049,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Cylinder_validate", _wrap_Cylinder_validate, METH_O, "\n"
 		"Cylinder_validate(Cylinder self) -> std::string\n"
-		"std::string Cylinder::validate() const final\n"
+		"std::string Cylinder::validate() const override\n"
 		"Cylinder::validate\n"
 		""},
 	 { "delete_Cylinder", _wrap_delete_Cylinder, METH_O, "delete_Cylinder(Cylinder self)"},
@@ -65125,7 +65085,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Dodecahedron_validate", _wrap_Dodecahedron_validate, METH_O, "\n"
 		"Dodecahedron_validate(Dodecahedron self) -> std::string\n"
-		"std::string Dodecahedron::validate() const final\n"
+		"std::string Dodecahedron::validate() const override\n"
 		"Dodecahedron::validate\n"
 		""},
 	 { "delete_Dodecahedron", _wrap_delete_Dodecahedron, METH_O, "delete_Dodecahedron(Dodecahedron self)"},
@@ -65183,7 +65143,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "EllipsoidalCylinder_validate", _wrap_EllipsoidalCylinder_validate, METH_O, "\n"
 		"EllipsoidalCylinder_validate(EllipsoidalCylinder self) -> std::string\n"
-		"std::string EllipsoidalCylinder::validate() const final\n"
+		"std::string EllipsoidalCylinder::validate() const override\n"
 		"EllipsoidalCylinder::validate\n"
 		""},
 	 { "delete_EllipsoidalCylinder", _wrap_delete_EllipsoidalCylinder, METH_O, "delete_EllipsoidalCylinder(EllipsoidalCylinder self)"},
@@ -65241,7 +65201,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Sphere_validate", _wrap_Sphere_validate, METH_O, "\n"
 		"Sphere_validate(Sphere self) -> std::string\n"
-		"std::string Sphere::validate() const final\n"
+		"std::string Sphere::validate() const override\n"
 		"Sphere::validate\n"
 		""},
 	 { "delete_Sphere", _wrap_delete_Sphere, METH_O, "delete_Sphere(Sphere self)"},
@@ -65294,7 +65254,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Spheroid_validate", _wrap_Spheroid_validate, METH_O, "\n"
 		"Spheroid_validate(Spheroid self) -> std::string\n"
-		"std::string Spheroid::validate() const final\n"
+		"std::string Spheroid::validate() const override\n"
 		"Spheroid::validate\n"
 		""},
 	 { "delete_Spheroid", _wrap_delete_Spheroid, METH_O, "delete_Spheroid(Spheroid self)"},
@@ -65357,7 +65317,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HemiEllipsoid_validate", _wrap_HemiEllipsoid_validate, METH_O, "\n"
 		"HemiEllipsoid_validate(HemiEllipsoid self) -> std::string\n"
-		"std::string HemiEllipsoid::validate() const final\n"
+		"std::string HemiEllipsoid::validate() const override\n"
 		"HemiEllipsoid::validate\n"
 		""},
 	 { "HemiEllipsoid_swigregister", HemiEllipsoid_swigregister, METH_O, NULL},
@@ -65399,7 +65359,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HollowSphere_validate", _wrap_HollowSphere_validate, METH_O, "\n"
 		"HollowSphere_validate(HollowSphere self) -> std::string\n"
-		"std::string HollowSphere::validate() const final\n"
+		"std::string HollowSphere::validate() const override\n"
 		"HollowSphere::validate\n"
 		""},
 	 { "delete_HollowSphere", _wrap_delete_HollowSphere, METH_O, "delete_HollowSphere(HollowSphere self)"},
@@ -65463,7 +65423,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HorizontalCylinder_validate", _wrap_HorizontalCylinder_validate, METH_O, "\n"
 		"HorizontalCylinder_validate(HorizontalCylinder self) -> std::string\n"
-		"std::string HorizontalCylinder::validate() const final\n"
+		"std::string HorizontalCylinder::validate() const override\n"
 		"HorizontalCylinder::validate\n"
 		""},
 	 { "delete_HorizontalCylinder", _wrap_delete_HorizontalCylinder, METH_O, "delete_HorizontalCylinder(HorizontalCylinder self)"},
@@ -65499,7 +65459,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Icosahedron_validate", _wrap_Icosahedron_validate, METH_O, "\n"
 		"Icosahedron_validate(Icosahedron self) -> std::string\n"
-		"std::string Icosahedron::validate() const final\n"
+		"std::string Icosahedron::validate() const override\n"
 		"Icosahedron::validate\n"
 		""},
 	 { "delete_Icosahedron", _wrap_delete_Icosahedron, METH_O, "delete_Icosahedron(Icosahedron self)"},
@@ -65557,7 +65517,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "LongBoxGauss_validate", _wrap_LongBoxGauss_validate, METH_O, "\n"
 		"LongBoxGauss_validate(LongBoxGauss self) -> std::string\n"
-		"std::string LongBoxGauss::validate() const final\n"
+		"std::string LongBoxGauss::validate() const override\n"
 		"LongBoxGauss::validate\n"
 		""},
 	 { "delete_LongBoxGauss", _wrap_delete_LongBoxGauss, METH_O, "delete_LongBoxGauss(LongBoxGauss self)"},
@@ -65615,7 +65575,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "LongBoxLorentz_validate", _wrap_LongBoxLorentz_validate, METH_O, "\n"
 		"LongBoxLorentz_validate(LongBoxLorentz self) -> std::string\n"
-		"std::string LongBoxLorentz::validate() const final\n"
+		"std::string LongBoxLorentz::validate() const override\n"
 		"LongBoxLorentz::validate\n"
 		""},
 	 { "delete_LongBoxLorentz", _wrap_delete_LongBoxLorentz, METH_O, "delete_LongBoxLorentz(LongBoxLorentz self)"},
@@ -65656,7 +65616,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PlatonicOctahedron_validate", _wrap_PlatonicOctahedron_validate, METH_O, "\n"
 		"PlatonicOctahedron_validate(PlatonicOctahedron self) -> std::string\n"
-		"std::string PlatonicOctahedron::validate() const final\n"
+		"std::string PlatonicOctahedron::validate() const override\n"
 		"PlatonicOctahedron::validate\n"
 		""},
 	 { "delete_PlatonicOctahedron", _wrap_delete_PlatonicOctahedron, METH_O, "delete_PlatonicOctahedron(PlatonicOctahedron self)"},
@@ -65697,7 +65657,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PlatonicTetrahedron_validate", _wrap_PlatonicTetrahedron_validate, METH_O, "\n"
 		"PlatonicTetrahedron_validate(PlatonicTetrahedron self) -> std::string\n"
-		"std::string PlatonicTetrahedron::validate() const final\n"
+		"std::string PlatonicTetrahedron::validate() const override\n"
 		"PlatonicTetrahedron::validate\n"
 		""},
 	 { "delete_PlatonicTetrahedron", _wrap_delete_PlatonicTetrahedron, METH_O, "delete_PlatonicTetrahedron(PlatonicTetrahedron self)"},
@@ -65738,7 +65698,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Prism3_validate", _wrap_Prism3_validate, METH_O, "\n"
 		"Prism3_validate(Prism3 self) -> std::string\n"
-		"std::string Prism3::validate() const final\n"
+		"std::string Prism3::validate() const override\n"
 		"Prism3::validate\n"
 		""},
 	 { "delete_Prism3", _wrap_delete_Prism3, METH_O, "delete_Prism3(Prism3 self)"},
@@ -65779,7 +65739,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Prism6_validate", _wrap_Prism6_validate, METH_O, "\n"
 		"Prism6_validate(Prism6 self) -> std::string\n"
-		"std::string Prism6::validate() const final\n"
+		"std::string Prism6::validate() const override\n"
 		"Prism6::validate\n"
 		""},
 	 { "delete_Prism6", _wrap_delete_Prism6, METH_O, "delete_Prism6(Prism6 self)"},
@@ -65830,7 +65790,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Pyramid2_validate", _wrap_Pyramid2_validate, METH_O, "\n"
 		"Pyramid2_validate(Pyramid2 self) -> std::string\n"
-		"std::string Pyramid2::validate() const final\n"
+		"std::string Pyramid2::validate() const override\n"
 		"Pyramid2::validate\n"
 		""},
 	 { "delete_Pyramid2", _wrap_delete_Pyramid2, METH_O, "delete_Pyramid2(Pyramid2 self)"},
@@ -65876,7 +65836,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Pyramid3_validate", _wrap_Pyramid3_validate, METH_O, "\n"
 		"Pyramid3_validate(Pyramid3 self) -> std::string\n"
-		"std::string Pyramid3::validate() const final\n"
+		"std::string Pyramid3::validate() const override\n"
 		"Pyramid3::validate\n"
 		""},
 	 { "delete_Pyramid3", _wrap_delete_Pyramid3, METH_O, "delete_Pyramid3(Pyramid3 self)"},
@@ -65922,7 +65882,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Pyramid4_validate", _wrap_Pyramid4_validate, METH_O, "\n"
 		"Pyramid4_validate(Pyramid4 self) -> std::string\n"
-		"std::string Pyramid4::validate() const final\n"
+		"std::string Pyramid4::validate() const override\n"
 		"Pyramid4::validate\n"
 		""},
 	 { "delete_Pyramid4", _wrap_delete_Pyramid4, METH_O, "delete_Pyramid4(Pyramid4 self)"},
@@ -65968,7 +65928,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Pyramid6_validate", _wrap_Pyramid6_validate, METH_O, "\n"
 		"Pyramid6_validate(Pyramid6 self) -> std::string\n"
-		"std::string Pyramid6::validate() const final\n"
+		"std::string Pyramid6::validate() const override\n"
 		"Pyramid6::validate\n"
 		""},
 	 { "delete_Pyramid6", _wrap_delete_Pyramid6, METH_O, "delete_Pyramid6(Pyramid6 self)"},
@@ -66087,7 +66047,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "TruncatedCube_validate", _wrap_TruncatedCube_validate, METH_O, "\n"
 		"TruncatedCube_validate(TruncatedCube self) -> std::string\n"
-		"std::string TruncatedCube::validate() const final\n"
+		"std::string TruncatedCube::validate() const override\n"
 		"TruncatedCube::validate\n"
 		""},
 	 { "delete_TruncatedCube", _wrap_delete_TruncatedCube, METH_O, "delete_TruncatedCube(TruncatedCube self)"},
@@ -66147,7 +66107,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "TruncatedSphere_validate", _wrap_TruncatedSphere_validate, METH_O, "\n"
 		"TruncatedSphere_validate(TruncatedSphere self) -> std::string\n"
-		"std::string TruncatedSphere::validate() const final\n"
+		"std::string TruncatedSphere::validate() const override\n"
 		"TruncatedSphere::validate\n"
 		""},
 	 { "delete_TruncatedSphere", _wrap_delete_TruncatedSphere, METH_O, "delete_TruncatedSphere(TruncatedSphere self)"},
@@ -66210,7 +66170,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "TruncatedSpheroid_validate", _wrap_TruncatedSpheroid_validate, METH_O, "\n"
 		"TruncatedSpheroid_validate(TruncatedSpheroid self) -> std::string\n"
-		"std::string TruncatedSpheroid::validate() const final\n"
+		"std::string TruncatedSpheroid::validate() const override\n"
 		"TruncatedSpheroid::validate\n"
 		""},
 	 { "delete_TruncatedSpheroid", _wrap_delete_TruncatedSpheroid, METH_O, "delete_TruncatedSpheroid(TruncatedSpheroid self)"},
@@ -66258,7 +66218,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "GaussSphere_validate", _wrap_GaussSphere_validate, METH_O, "\n"
 		"GaussSphere_validate(GaussSphere self) -> std::string\n"
-		"std::string GaussSphere::validate() const final\n"
+		"std::string GaussSphere::validate() const override\n"
 		"GaussSphere::validate\n"
 		""},
 	 { "delete_GaussSphere", _wrap_delete_GaussSphere, METH_O, "delete_GaussSphere(GaussSphere self)"},
@@ -66301,7 +66261,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FuzzySphere_validate", _wrap_FuzzySphere_validate, METH_O, "\n"
 		"FuzzySphere_validate(FuzzySphere self) -> std::string\n"
-		"std::string FuzzySphere::validate() const final\n"
+		"std::string FuzzySphere::validate() const override\n"
 		"FuzzySphere::validate\n"
 		""},
 	 { "delete_FuzzySphere", _wrap_delete_FuzzySphere, METH_O, "delete_FuzzySphere(FuzzySphere self)"},
diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py
index ca8bf9faf12..519c0abd126 100644
--- a/auto/Wrap/libBornAgainSim.py
+++ b/auto/Wrap/libBornAgainSim.py
@@ -3770,7 +3770,7 @@ class ConstantBackground(IBackground):
     def validate(self):
         r"""
         validate(ConstantBackground self) -> std::string
-        std::string ConstantBackground::validate() const final
+        std::string ConstantBackground::validate() const override
         ConstantBackground::validate
         """
         return _libBornAgainSim.ConstantBackground_validate(self)
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index c1a7590cdb1..859cbc86bd3 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -40374,7 +40374,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ConstantBackground_validate", _wrap_ConstantBackground_validate, METH_O, "\n"
 		"ConstantBackground_validate(ConstantBackground self) -> std::string\n"
-		"std::string ConstantBackground::validate() const final\n"
+		"std::string ConstantBackground::validate() const override\n"
 		"ConstantBackground::validate\n"
 		""},
 	 { "delete_ConstantBackground", _wrap_delete_ConstantBackground, METH_O, "delete_ConstantBackground(ConstantBackground self)"},
-- 
GitLab