Source code for virtual_ecosystem.models.animal.protocols
"""The `models.animal.protocols` module contains a class provides eatability definition
used by AnimalCohorts, PlantResources, and Carcasses in the
:mod:`~virtual_ecosystem.models.animal` module.
""" # noqa: D205
from typing import Protocol, runtime_checkable
from virtual_ecosystem.models.animal.animal_traits import VerticalOccupancy
from virtual_ecosystem.models.animal.cnp import CNP
from virtual_ecosystem.models.animal.functional_group import FunctionalGroup
[docs]
class Consumer(Protocol):
"""This is the protocol for defining consumers (currently just AnimalCohort)."""
functional_group: FunctionalGroup
individuals: int
[docs]
class Pool(Protocol):
"""This is a protocol for defining dummy abiotic pools containing energy."""
mass_current: float
[docs]
class DecayPool(Protocol):
"""Defines biotic pools containing both accessible and inaccessible nutrients."""
scavengeable_carbon: float
decomposed_carbon: float
scavengeable_nitrogen: float
decomposed_nitrogen: float
scavengeable_phosphorus: float
decomposed_phosphorus: float
[docs]
class Resource(Protocol):
"""This is the protocol for defining what classes work as trophic resources."""
cell_id: int
vertical_occupancy: VerticalOccupancy
@property
def mass_current(self) -> float:
"""The mass_current method defines current total mass."""
...
[docs]
def get_eaten(
self,
consumed_mass: float,
consumer: Consumer,
) -> tuple[dict[str, float], dict[str, float]]:
"""The get_eaten method defines a resource."""
...
[docs]
@runtime_checkable
class ScavengeableResource(Protocol):
"""The protocol for linking the get_eaten mixin with CNP."""
scavengeable_cnp: CNP
decomposed_cnp: CNP