Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
643e0f9
Draft class for handling plant resource pools.
TaranRallings Jul 31, 2025
2e950ff
Revised new plant resource pool class and added populate method.
TaranRallings Aug 1, 2025
c07a523
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 4, 2025
accdc3b
Fixed spelling error in data call.
TaranRallings Aug 4, 2025
3d59ba4
Added an aggregated plant resource class option to draft.
TaranRallings Aug 4, 2025
87edfc8
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 8, 2025
c1233e0
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 11, 2025
00e635e
Merge branch '989-foraging-methods-refactor-to-reduce-resuse' into 90…
TaranRallings Aug 11, 2025
b96ee58
Added a mushroom functionality to animal cohort class.
TaranRallings Aug 12, 2025
16fe071
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 12, 2025
f0db6fe
Changed get_X_resource methods of AnimalCohort to all use a single ge…
TaranRallings Aug 13, 2025
aaf6266
Added mushrooms to foraging.
TaranRallings Aug 15, 2025
489ebbf
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 20, 2025
03f7f17
Added fungus into prey selection and updated tests.
TaranRallings Aug 22, 2025
2f9e30f
Revised draft of plant resource class.
TaranRallings Aug 22, 2025
f0994b2
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 26, 2025
392d20e
Merge branch 'develop' into 908-animal---animal-plant-piping-update
TaranRallings Aug 28, 2025
8e8fce4
Added pom and bacteria to DietType.
TaranRallings Aug 28, 2025
a6b2996
Removed extra plant changes from branching.
TaranRallings Aug 28, 2025
b0b0762
Fixed testing around fungal fruiting foraging.
TaranRallings Aug 28, 2025
7fbc3ca
Reworked foraging to capture pom, bacteria, and fungus.
TaranRallings Aug 28, 2025
b04c47e
Fixed all existing tests for the soil pool piping update.
TaranRallings Aug 28, 2025
23631ef
Adjusted some diet naming.
TaranRallings Aug 28, 2025
7a93eb0
Added tests for new soil foraging methods.
TaranRallings Aug 29, 2025
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
215 changes: 215 additions & 0 deletions tests/models/animals/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,39 @@ def herbivore_cohort_instance(
)


@pytest.fixture
def fungivore_functional_group_instance(shared_datadir, constants_instance):
"""Fixture for an animal functional group used in tests."""
from virtual_ecosystem.models.animal.functional_group import (
import_functional_groups,
)

file = shared_datadir / "example_functional_group_import.csv"
fg_list = import_functional_groups(file, constants_instance)

return fg_list[16]


@pytest.fixture
def fungivore_cohort_instance(
fungivore_functional_group_instance,
animal_data_for_cohorts_instance,
constants_instance,
):
"""Fixture for an animal cohort used in tests."""
from virtual_ecosystem.models.animal.animal_cohorts import AnimalCohort

return AnimalCohort(
fungivore_functional_group_instance,
10000.0,
1,
10,
1, # centroid
animal_data_for_cohorts_instance.grid, # grid
constants_instance,
)


@pytest.fixture
def predator_functional_group_instance(shared_datadir, constants_instance):
"""Fixture for an animal functional group used in tests."""
Expand Down Expand Up @@ -820,6 +853,39 @@ def predator_cohort_instance(
)


@pytest.fixture
def earthworm_functional_group_instance(shared_datadir, constants_instance):
"""Fixture for an animal functional group used in tests."""
from virtual_ecosystem.models.animal.functional_group import (
import_functional_groups,
)

file = shared_datadir / "example_functional_group_import.csv"
fg_list = import_functional_groups(file, constants_instance)

return fg_list[12]


@pytest.fixture
def earthworm_cohort_instance(
earthworm_functional_group_instance,
animal_data_for_cohorts_instance,
constants_instance,
):
"""Fixture for an animal cohort used in tests."""
from virtual_ecosystem.models.animal.animal_cohorts import AnimalCohort

return AnimalCohort(
earthworm_functional_group_instance,
1.0,
1,
100,
1, # centroid
animal_data_for_cohorts_instance.grid,
constants_instance,
)


@pytest.fixture
def caterpillar_functional_group_instance(shared_datadir, constants_instance):
"""Fixture for an animal functional group used in tests."""
Expand Down Expand Up @@ -1108,3 +1174,152 @@ def herbivory_waste_pool_instance():
)

return herbivory_waste


@pytest.fixture
def mushroom_instance(litter_soil_data_instance):
"""Fixture for a single FungalFruitPool object."""
from virtual_ecosystem.models.animal.decay import (
FungalFruitPool,
) # Adjust as needed

return FungalFruitPool(
cell_id=0,
data=litter_soil_data_instance,
cell_area=100.0, # m²
c_n_ratio=25.0,
c_p_ratio=100.0,
)


@pytest.fixture
def fungal_fruit_list_instance(litter_soil_data_instance):
"""Fixture for multiple FungalFruitPool objects across grid cells."""
from virtual_ecosystem.models.animal.decay import FungalFruitPool

return [
FungalFruitPool(
cell_id=cell_id,
data=litter_soil_data_instance,
cell_area=100.0,
c_n_ratio=25.0,
c_p_ratio=100.0,
)
for cell_id in litter_soil_data_instance.grid.cell_id
]


@pytest.fixture
def microbial_cnp_ratios() -> dict[str, dict[str, float]]:
"""Reusable microbial C:N:P ratios for SoilPool construction.

Returns:
Mapping from pool name to C:N and C:P ratios (unitless). Used by
SoilPool for bacteria and fungi stoichiometry.
"""

return {
"bacteria": {"nitrogen": 5.0, "phosphorus": 30.0},
"saprotrophic_fungi": {"nitrogen": 10.0, "phosphorus": 80.0},
"arbuscular_mycorrhiza": {"nitrogen": 12.0, "phosphorus": 90.0},
"ectomycorrhiza": {"nitrogen": 8.0, "phosphorus": 70.0},
}


@pytest.fixture
def soil_fungi_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for a single SoilPool 'fungi' object."""
from virtual_ecosystem.models.animal.decay import SoilPool

return SoilPool(
pool_name="fungi",
cell_id=0,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)


@pytest.fixture
def soil_fungi_list_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for SoilPool 'fungi' objects across all grid cells."""
from virtual_ecosystem.models.animal.decay import SoilPool

return [
SoilPool(
pool_name="fungi",
cell_id=cell_id,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)
for cell_id in litter_soil_data_instance.grid.cell_id
]


@pytest.fixture
def pom_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for a single SoilPool 'pom' object."""
from virtual_ecosystem.models.animal.decay import SoilPool

return SoilPool(
pool_name="pom",
cell_id=0,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)


@pytest.fixture
def pom_list_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for SoilPool 'pom' objects across all grid cells."""
from virtual_ecosystem.models.animal.decay import SoilPool

return [
SoilPool(
pool_name="pom",
cell_id=cell_id,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)
for cell_id in litter_soil_data_instance.grid.cell_id
]


@pytest.fixture
def bacteria_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for a single SoilPool 'bacteria' object."""
from virtual_ecosystem.models.animal.decay import SoilPool

return SoilPool(
pool_name="bacteria",
cell_id=0,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)


@pytest.fixture
def bacteria_list_instance(litter_soil_data_instance, microbial_cnp_ratios):
"""Fixture for SoilPool 'bacteria' objects across all grid cells."""
from virtual_ecosystem.models.animal.decay import SoilPool

return [
SoilPool(
pool_name="bacteria",
cell_id=cell_id,
data=litter_soil_data_instance,
cell_area=litter_soil_data_instance.grid.cell_area,
max_depth_microbial_activity=0.2,
c_n_p_ratios=microbial_cnp_ratios,
)
for cell_id in litter_soil_data_instance.grid.cell_id
]
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ butterfly,invertebrate,foliage_fruit,ectothermic,terrestrial,semelparous,indirec
caterpillar,invertebrate,foliage_fruit,ectothermic,terrestrial,nonreproductive,indirect,larval,butterfly,uricotelic,none,canopy,0.0005,0.005, 0.005
frog,amphibian,vertebrates_invertebrates_carcasses,ectothermic,aquatic,iteroparous,direct,adult,frog,ureotelic,none,ground,0.005,0.5, 0.005
swallow,bird,invertebrates,endothermic,terrestrial,iteroparous,direct,adult,swallow,uricotelic,seasonal,canopy,0.005,0.2, 0.005
earthworm,invertebrate,detritus,ectothermic,terrestrial,iteroparous,direct,adult,earthworm,uricotelic,none,soil,0.0005,0.005, 0.005
earthworm,invertebrate,detritus_fungi_pom_bacteria,ectothermic,terrestrial,iteroparous,direct,adult,earthworm,uricotelic,none,soil,0.0005,0.005, 0.005
dung_beetle,invertebrate,waste,ectothermic,terrestrial,iteroparous,direct,adult,dung_beetle,uricotelic,none,soil_ground,0.0003,0.003, 0.005
scavenging_mammal,mammal,carcasses,endothermic,terrestrial,iteroparous,direct,adult,scavenging_mammal,ureotelic,none,ground,2.0,20.0, 0.005
detritivorous_insect,invertebrate,detritus,ectothermic,terrestrial,iteroparous,direct,adult,detritivorous_insect,uricotelic,none,soil_ground,0.0004,0.004, 0.005
fungivorous_mammal,mammal,mushrooms,endothermic,terrestrial,iteroparous,direct,adult,fungivorous_mammal,ureotelic,none,soil_ground,1.0,10.0, 0.005
Loading
Loading