Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion cpp/genetic_value_to_fitness/GeneticValueIsTrait.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ class GeneticValueIsTraitTrampoline : public fwdpy11::GeneticValueIsTrait
PYBIND11_OVERLOAD_PURE(void, fwdpy11::GeneticValueIsTrait, update, pop);
}

std::size_t
ndim() const
{
PYBIND11_OVERLOAD_PURE(std::size_t, fwdpy11::GeneticValueIsTrait, ndim);
}

std::shared_ptr<fwdpy11::GeneticValueToFitnessMap>
clone() const override
// Implementation details from pybind11 issue 1049
Expand All @@ -49,7 +55,7 @@ init_GeneticValueIsTrait(py::module& m)
m, "GeneticValueIsTrait",
"ABC for functions mapping genetic values representing traits to "
"fitness.")
.def(py::init<std::size_t>(), py::arg("ndim") = 1);
.def(py::init<>());

py::class_<fwdpy11::DiploidGeneticValueToFitnessData>(
m, "DiploidGeneticValueToFitnessData", py::buffer_protocol())
Expand Down
4 changes: 2 additions & 2 deletions fwdpy11/custom_genetic_value_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ def clone(self):
# create a new object without initializing it
cloned = cls.__new__(cls)
# clone C++ state
base.__init__(cloned, *args)
base.__init__(cloned)
# clone Python state
cloned.__dict__.update(self.__dict__)
return cloned
Expand All @@ -19,7 +19,7 @@ def __init__(self, ndim=1):
def __call__(self, cls):
from fwdpy11 import GeneticValueIsTrait

return _make_cloner(cls, GeneticValueIsTrait, self.ndim)
return _make_cloner(cls, GeneticValueIsTrait)


def genetic_value_noise_default_clone(cls):
Expand Down
8 changes: 7 additions & 1 deletion fwdpy11/headers/fwdpy11/genetic_value_to_fitness/GSSmo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace fwdpy11
std::vector<Optimum> optima;

GSSmo(std::vector<Optimum> optima_)
: GeneticValueIsTrait{1}, VS{std::numeric_limits<double>::quiet_NaN()},
: GeneticValueIsTrait{}, VS{std::numeric_limits<double>::quiet_NaN()},
opt{std::numeric_limits<double>::quiet_NaN()}, current_optimum(0),
optima(std::move(optima_))
{
Expand Down Expand Up @@ -80,6 +80,12 @@ namespace fwdpy11
{
return std::make_shared<GSSmo>(optima);
}

std::size_t
ndim() const override
{
return 1;
}
};
} // namespace fwdpy11

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ namespace fwdpy11

public:
explicit GaussianStabilizingSelection(const GSSmo &input)
: GeneticValueIsTrait(input.ndim()), pimpl(input.clone())
: GeneticValueIsTrait(), pimpl(input.clone())
{
}

explicit GaussianStabilizingSelection(const MultivariateGSSmo &input)
: GeneticValueIsTrait(input.ndim()), pimpl(input.clone())
: GeneticValueIsTrait(), pimpl(input.clone())
{
}

Expand All @@ -41,5 +41,11 @@ namespace fwdpy11
{
return this->pimpl->clone();
}

std::size_t
ndim() const override
{
return pimpl->ndim();
}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,31 +24,19 @@

namespace fwdpy11
{
class GeneticValueIsTrait : public GeneticValueToFitnessMap
struct GeneticValueIsTrait : public GeneticValueToFitnessMap
/// Another ABC. Effectively a type trait
{
private:
std::size_t dim;

public:
explicit GeneticValueIsTrait(std::size_t ndim)
: GeneticValueToFitnessMap(), dim(ndim)
explicit GeneticValueIsTrait() : GeneticValueToFitnessMap()
{
}
virtual ~GeneticValueIsTrait() = default;
GeneticValueIsTrait(const GeneticValueIsTrait&) = delete;
GeneticValueIsTrait(GeneticValueIsTrait&&) = default;
GeneticValueIsTrait& operator=(const GeneticValueIsTrait&) = delete;
GeneticValueIsTrait& operator=(GeneticValueIsTrait&&) = default;
std::size_t
ndim() const override
{
return this->dim;
}

bool
is_fitness() const override
{
bool is_fitness() const final {
return false;
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ namespace fwdpy11
double VW;

MultivariateGSSmo(const std::vector<PleiotropicOptima> &po)
: GeneticValueIsTrait{po.empty() ? 0 : po[0].optima.size()}, optima(po),
: GeneticValueIsTrait{}, optima(po),
current_timepoint(0), current_timepoint_optima{},
VW{std::numeric_limits<double>::quiet_NaN()}
{
Expand Down
Loading