Source code for alogos.systems.whge.representation

"""Representations for WHGE."""

from bitarray import bitarray as _bitarray

from ... import exceptions as _exceptions
from .. import _shared


_LABEL = "WHGE"


[docs]class Genotype(_shared.representation.BaseGenotype): """WHGE genotype.""" __slots__ = () _label = _LABEL
[docs] def __init__(self, data): """Create a WHGE genotype with immutable data. Parameters ---------- data : `bitarray`, or `str` of ``"0"`` and ``"1"`` characters The provided data is converted to the first form. Examples -------- The argument `data` could get following values of different types that all lead to the same result: - ``bitarray.bitarray("11110000")`` The package containing this data structure is available on PyPI under the name `bitarray <https://pypi.org/project/bitarray/>`__ - ``"11110000"`` Raises ------ GenotypeError If the provided data can not be converted to the desired form. """ # Immutable data attribute object.__setattr__(self, "data", self._convert_input(data))
def _convert_input(self, data): """Convert different genotype formats to a single one.""" if not isinstance(data, _bitarray) or not data: try: if isinstance(data, str): data = _bitarray(data) else: raise TypeError assert data except Exception: _exceptions.raise_whge_genotype_error(data) return data # Copying
[docs] def copy(self): """Create a deep copy of the genotype.""" return Genotype(self.data.copy())
def __copy__(self): """Create a deep copy of the genotype.""" return Genotype(self.data.copy()) def __deepcopy__(self, memo): """Create a deep copy of the genotype.""" return Genotype(self.data.copy()) # Representation def __str__(self): """Compute the "informal" string representation of the genotype.""" return self.data.to01() def _repr_pretty_(self, p, cycle): """Provide rich display representation for IPython and Jupyter.""" p.text(str(self) if not cycle else "...") # Hashing def __hash__(self): """Calculate a hash value for this object. It is used for operations on hashed collections such as `set` and `dict`. References ---------- - https://docs.python.org/3/reference/datamodel.html#object.__hash__ """ try: return self._hash except AttributeError: self._hash = hash(self.data.tobytes()) return self._hash
[docs]class Individual(_shared.representation.BaseIndividual): """WHGE individual having a WHGE genotype.""" __slots__ = () _label = _LABEL def _repr_pretty_(self, p, cycle): """Provide rich display representation for IPython and Jupyter.""" p.text(str(self) if not cycle else "...")
[docs]class Population(_shared.representation.BasePopulation): """WHGE population consisting of WHGE individuals.""" __slots__ = () _label = _LABEL def _repr_pretty_(self, p, cycle): """Provide rich display representation for IPython and Jupyter.""" p.text(str(self) if not cycle else "...")