Skip to content

Commit dce625d

Browse files
committed
refactor GeneticValueIsTrait as ABC
1 parent be5aee0 commit dce625d

File tree

6 files changed

+28
-22
lines changed

6 files changed

+28
-22
lines changed

cpp/genetic_value_to_fitness/GeneticValueIsTrait.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ class GeneticValueIsTraitTrampoline : public fwdpy11::GeneticValueIsTrait
2828
PYBIND11_OVERLOAD_PURE(void, fwdpy11::GeneticValueIsTrait, update, pop);
2929
}
3030

31+
std::size_t
32+
ndim() const
33+
{
34+
PYBIND11_OVERLOAD_PURE(std::size_t, fwdpy11::GeneticValueIsTrait, ndim);
35+
}
36+
3137
std::shared_ptr<fwdpy11::GeneticValueToFitnessMap>
3238
clone() const override
3339
// Implementation details from pybind11 issue 1049
@@ -49,7 +55,7 @@ init_GeneticValueIsTrait(py::module& m)
4955
m, "GeneticValueIsTrait",
5056
"ABC for functions mapping genetic values representing traits to "
5157
"fitness.")
52-
.def(py::init<std::size_t>(), py::arg("ndim") = 1);
58+
.def(py::init<>());
5359

5460
py::class_<fwdpy11::DiploidGeneticValueToFitnessData>(
5561
m, "DiploidGeneticValueToFitnessData", py::buffer_protocol())

fwdpy11/custom_genetic_value_decorators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ def clone(self):
33
# create a new object without initializing it
44
cloned = cls.__new__(cls)
55
# clone C++ state
6-
base.__init__(cloned, *args)
6+
base.__init__(cloned)
77
# clone Python state
88
cloned.__dict__.update(self.__dict__)
99
return cloned
@@ -19,7 +19,7 @@ def __init__(self, ndim=1):
1919
def __call__(self, cls):
2020
from fwdpy11 import GeneticValueIsTrait
2121

22-
return _make_cloner(cls, GeneticValueIsTrait, self.ndim)
22+
return _make_cloner(cls, GeneticValueIsTrait)
2323

2424

2525
def genetic_value_noise_default_clone(cls):

fwdpy11/headers/fwdpy11/genetic_value_to_fitness/GSSmo.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace fwdpy11
1616
std::vector<Optimum> optima;
1717

1818
GSSmo(std::vector<Optimum> optima_)
19-
: GeneticValueIsTrait{1}, VS{std::numeric_limits<double>::quiet_NaN()},
19+
: GeneticValueIsTrait{}, VS{std::numeric_limits<double>::quiet_NaN()},
2020
opt{std::numeric_limits<double>::quiet_NaN()}, current_optimum(0),
2121
optima(std::move(optima_))
2222
{
@@ -80,6 +80,12 @@ namespace fwdpy11
8080
{
8181
return std::make_shared<GSSmo>(optima);
8282
}
83+
84+
std::size_t
85+
ndim() const override
86+
{
87+
return 1;
88+
}
8389
};
8490
} // namespace fwdpy11
8591

fwdpy11/headers/fwdpy11/genetic_value_to_fitness/GaussianStabilizingSelection.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ namespace fwdpy11
1515

1616
public:
1717
explicit GaussianStabilizingSelection(const GSSmo &input)
18-
: GeneticValueIsTrait(input.ndim()), pimpl(input.clone())
18+
: GeneticValueIsTrait(), pimpl(input.clone())
1919
{
2020
}
2121

2222
explicit GaussianStabilizingSelection(const MultivariateGSSmo &input)
23-
: GeneticValueIsTrait(input.ndim()), pimpl(input.clone())
23+
: GeneticValueIsTrait(), pimpl(input.clone())
2424
{
2525
}
2626

@@ -41,5 +41,11 @@ namespace fwdpy11
4141
{
4242
return this->pimpl->clone();
4343
}
44+
45+
std::size_t
46+
ndim() const override
47+
{
48+
return pimpl->ndim();
49+
}
4450
};
4551
}

fwdpy11/headers/fwdpy11/genetic_value_to_fitness/GeneticValueIsTrait.hpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,19 @@
2424

2525
namespace fwdpy11
2626
{
27-
class GeneticValueIsTrait : public GeneticValueToFitnessMap
27+
struct GeneticValueIsTrait : public GeneticValueToFitnessMap
2828
/// Another ABC. Effectively a type trait
2929
{
30-
private:
31-
std::size_t dim;
32-
33-
public:
34-
explicit GeneticValueIsTrait(std::size_t ndim)
35-
: GeneticValueToFitnessMap(), dim(ndim)
30+
explicit GeneticValueIsTrait() : GeneticValueToFitnessMap()
3631
{
3732
}
3833
virtual ~GeneticValueIsTrait() = default;
3934
GeneticValueIsTrait(const GeneticValueIsTrait&) = delete;
4035
GeneticValueIsTrait(GeneticValueIsTrait&&) = default;
4136
GeneticValueIsTrait& operator=(const GeneticValueIsTrait&) = delete;
4237
GeneticValueIsTrait& operator=(GeneticValueIsTrait&&) = default;
43-
std::size_t
44-
ndim() const override
45-
{
46-
return this->dim;
47-
}
4838

49-
bool
50-
is_fitness() const override
51-
{
39+
bool is_fitness() const final {
5240
return false;
5341
}
5442
};

fwdpy11/headers/fwdpy11/genetic_value_to_fitness/MultivariateGSSmo.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace fwdpy11
3838
double VW;
3939

4040
MultivariateGSSmo(const std::vector<PleiotropicOptima> &po)
41-
: GeneticValueIsTrait{po.empty() ? 0 : po[0].optima.size()}, optima(po),
41+
: GeneticValueIsTrait{}, optima(po),
4242
current_timepoint(0), current_timepoint_optima{},
4343
VW{std::numeric_limits<double>::quiet_NaN()}
4444
{

0 commit comments

Comments
 (0)