daffidwilde / edo

A library for generating artificial datasets through genetic evolution.
https://doi.org/10.1007/s10489-019-01592-4
MIT License
13 stars 0 forks source link

Saving histories (individuals and their metadata) #126

Closed daffidwilde closed 4 years ago

daffidwilde commented 4 years ago

This PR moves some of the internal functionality away from the Distribution class and into the dynamic <Family.distribution.name>Subtype type. Namely:

Example:

>>> import numpy as np
>>> import pandas as pd
>>> 
>>> from edo import Family
>>> from edo.distributions import Uniform, Poisson
>>> from edo.individual import Individual
>>> 
>>> np.random.seed(0)
>>> distributions = [Uniform, Poisson]
>>> families = [Family(dist) for dist in distributions]
>>> 
>>> metadata = [family.make_instance() for family in families]
>>> dataframe = pd.DataFrame({i: meta.sample(5) for i, meta in enumerate(metadata)})
>>> individual = Individual(dataframe, metadata)
>>> 
>>> individual.to_file("individual/")
PosixPath('individual')
>>> 
>>> saved = Individual.from_file(distributions, "individual/")
>>> 
>>> np.allclose(saved.dataframe.values, individual.dataframe.values)
True
>>> saved.metadata, individual.metadata
([Uniform(bounds=[0.98, 4.3]), Poisson(lam=6.03)],
 [Uniform(bounds=[0.98, 4.3]), Poisson(lam=6.03)])