hestia-earth-models 0.64.2__py3-none-any.whl → 0.64.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hestia-earth-models might be problematic. Click here for more details.

Files changed (45) hide show
  1. hestia_earth/models/agribalyse2016/machineryInfrastructureDepreciatedAmountPerCycle.py +2 -2
  2. hestia_earth/models/cycle/animal/input/hestiaAggregatedData.py +5 -2
  3. hestia_earth/models/cycle/animal/input/properties.py +2 -1
  4. hestia_earth/models/cycle/animal/milkYield.py +2 -1
  5. hestia_earth/models/cycle/concentrateFeed.py +8 -8
  6. hestia_earth/models/cycle/cycleDuration.py +4 -5
  7. hestia_earth/models/cycle/siteDuration.py +15 -5
  8. hestia_earth/models/cycle/startDateDefinition.py +3 -4
  9. hestia_earth/models/cycle/stockingDensityAnimalHousingAverage.py +52 -0
  10. hestia_earth/models/ipcc2019/aboveGroundBiomass.py +762 -0
  11. hestia_earth/models/ipcc2019/aboveGroundBiomass_utils.py +180 -0
  12. hestia_earth/models/ipcc2019/animal/liveweightGain.py +88 -0
  13. hestia_earth/models/ipcc2019/animal/liveweightPerHead.py +88 -0
  14. hestia_earth/models/ipcc2019/animal/pastureGrass.py +51 -42
  15. hestia_earth/models/ipcc2019/animal/utils.py +20 -0
  16. hestia_earth/models/ipcc2019/animal/weightAtMaturity.py +10 -15
  17. hestia_earth/models/ipcc2019/ch4ToAirExcreta.py +2 -2
  18. hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_1_utils.py +37 -50
  19. hestia_earth/models/ipcc2019/organicCarbonPerHa_utils.py +0 -19
  20. hestia_earth/models/ipcc2019/pastureGrass.py +44 -31
  21. hestia_earth/models/ipcc2019/pastureGrass_utils.py +38 -22
  22. hestia_earth/models/mocking/search-results.json +223 -223
  23. hestia_earth/models/poschEtAl2008/terrestrialEutrophicationPotentialAccumulatedExceedance.py +40 -0
  24. hestia_earth/models/utils/blank_node.py +20 -1
  25. hestia_earth/models/utils/crop.py +4 -0
  26. hestia_earth/models/utils/ecoClimateZone.py +99 -0
  27. hestia_earth/models/utils/productivity.py +1 -1
  28. hestia_earth/models/utils/property.py +2 -2
  29. hestia_earth/models/version.py +1 -1
  30. {hestia_earth_models-0.64.2.dist-info → hestia_earth_models-0.64.3.dist-info}/METADATA +1 -1
  31. {hestia_earth_models-0.64.2.dist-info → hestia_earth_models-0.64.3.dist-info}/RECORD +45 -31
  32. tests/models/cycle/test_siteDuration.py +22 -0
  33. tests/models/cycle/test_stockingDensityAnimalHousingAverage.py +42 -0
  34. tests/models/ipcc2019/animal/test_liveweightGain.py +20 -0
  35. tests/models/ipcc2019/animal/test_liveweightPerHead.py +20 -0
  36. tests/models/ipcc2019/animal/test_pastureGrass.py +1 -1
  37. tests/models/ipcc2019/test_aboveGroundBiomass.py +182 -0
  38. tests/models/ipcc2019/test_aboveGroundBiomass_utils.py +92 -0
  39. tests/models/ipcc2019/test_organicCarbonPerHa_tier_1_utils.py +3 -2
  40. tests/models/ipcc2019/test_pastureGrass.py +2 -2
  41. tests/models/poschEtAl2008/test_terrestrialEutrophicationPotentialAccumulatedExceedance.py +44 -0
  42. tests/models/utils/test_ecoClimateZone.py +152 -0
  43. {hestia_earth_models-0.64.2.dist-info → hestia_earth_models-0.64.3.dist-info}/LICENSE +0 -0
  44. {hestia_earth_models-0.64.2.dist-info → hestia_earth_models-0.64.3.dist-info}/WHEEL +0 -0
  45. {hestia_earth_models-0.64.2.dist-info → hestia_earth_models-0.64.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,40 @@
1
+ from hestia_earth.models.log import logRequirements, logShouldRun
2
+ from hestia_earth.models.utils.impact_assessment import impact_country_value
3
+ from hestia_earth.models.utils.indicator import _new_indicator
4
+ from . import MODEL
5
+
6
+ REQUIREMENTS = {
7
+ "ImpactAssessment": {
8
+ "or": {
9
+ "country": {"@type": "Term", "termType": "region"},
10
+ "site": {
11
+ "@type": "Site",
12
+ "region": {"@type": "Term", "termType": "region"}
13
+ }
14
+ },
15
+ "emissionsResourceUse": [{"@type": "Indicator", "value": "", "term.termType": "emission"}]
16
+ }
17
+ }
18
+ RETURNS = {
19
+ "Indicator": {
20
+ "value": ""
21
+ }
22
+ }
23
+ LOOKUPS = {
24
+ "region-emission-terrestrialEutrophicationPotentialAccumulatedExceedance": ""
25
+ }
26
+ TERM_ID = 'terrestrialEutrophicationPotentialAccumulatedExceedance'
27
+
28
+
29
+ def _indicator(value: float):
30
+ indicator = _new_indicator(TERM_ID, MODEL)
31
+ indicator['value'] = value
32
+ return indicator
33
+
34
+
35
+ def run(impact_assessment: dict):
36
+ value = impact_country_value(MODEL, TERM_ID, impact_assessment, f"{list(LOOKUPS.keys())[0]}.csv")
37
+ logRequirements(impact_assessment, model=MODEL, term=TERM_ID,
38
+ value=value)
39
+ logShouldRun(impact_assessment, MODEL, TERM_ID, True)
40
+ return _indicator(value)
@@ -41,6 +41,25 @@ from .lookup import (
41
41
  from .term import get_lookup_value
42
42
 
43
43
 
44
+ def merge_blank_nodes(source: list, new_values: list):
45
+ """
46
+ Merge a list of blank nodes into an existing list of blank nodes.
47
+ Warning: we only consider the `term.@id` here, and not the full list of properties that make the nodes unique.
48
+ This should only be used when merging simple list of nested blank nodes.
49
+ """
50
+ for new_value in non_empty_list(new_values):
51
+ term_id = new_value.get('term', {}).get('@id')
52
+ index = next(
53
+ (i for i, data in enumerate(source) if data.get('term', {}).get('@id') == term_id),
54
+ None
55
+ )
56
+ if index is None:
57
+ source.append(new_value)
58
+ else:
59
+ source[index] = source[index] | new_value
60
+ return source
61
+
62
+
44
63
  def lookups_logs(model: str, blank_nodes: list, lookups_per_termType: dict, **log_args):
45
64
  def mapper(blank_node: dict):
46
65
  term = blank_node.get('term', {})
@@ -69,7 +88,7 @@ def properties_logs(blank_nodes: list, properties: Union[dict, list]):
69
88
  props = props if isinstance(props, list) else [props]
70
89
 
71
90
  def _reduce_properties_logs(logs: dict, prop: str):
72
- value = get_node_property(term, prop).get('value')
91
+ value = get_node_property(blank_node, prop).get('value')
73
92
  return logs | {prop: value}
74
93
 
75
94
  return reduce(_reduce_properties_logs, properties, {'id': term_id})
@@ -37,6 +37,10 @@ def is_plantation(model: str, log_id: str, term_id: str):
37
37
  return get_crop_lookup_value(model, log_id, term_id, 'isPlantation')
38
38
 
39
39
 
40
+ def is_permanent_crop(model: str, log_id: str, term: dict):
41
+ return get_crop_grouping_fao(model, log_id, term) == 'Permanent crops'
42
+
43
+
40
44
  def valid_site_type(cycle: dict, include_permanent_pasture=False):
41
45
  """
42
46
  Check if the `site.siteType` of the cycle is `cropland`.
@@ -1,7 +1,69 @@
1
+ from enum import Enum
2
+ from functools import reduce
3
+ from typing import Any, Optional, Union
4
+
5
+ from hestia_earth.schema import NodeType
6
+
7
+ from hestia_earth.utils.blank_node import get_node_value
1
8
  from hestia_earth.utils.lookup import download_lookup, _get_single_table_value, column_name, extract_grouped_data
9
+ from hestia_earth.utils.model import find_term_match
2
10
  from hestia_earth.utils.tools import safe_parse_float
3
11
 
4
12
 
13
+ class EcoClimateZone(Enum):
14
+ """
15
+ Enum representing eco-climate zones. The value of each member of the Enum correctly corresponds with the values of
16
+ `ecoClimateZone` term and the `ecoClimateZone-lookup.csv`.
17
+ """
18
+ WARM_TEMPERATE_MOIST = 1
19
+ WARM_TEMPERATE_DRY = 2
20
+ COOL_TEMPERATE_MOIST = 3
21
+ COOL_TEMPERATE_DRY = 4
22
+ POLAR_MOIST = 5
23
+ POLAR_DRY = 6
24
+ BOREAL_MOIST = 7
25
+ BOREAL_DRY = 8
26
+ TROPICAL_MONTANE = 9
27
+ TROPICAL_WET = 10
28
+ TROPICAL_MOIST = 11
29
+ TROPICAL_DRY = 12
30
+
31
+
32
+ def get_eco_climate_zone_value(node: dict, as_enum: bool = False) -> Union[int, EcoClimateZone, None]:
33
+ """
34
+ Get the eco-climate zone value from a Site.
35
+
36
+ Parameters
37
+ ----------
38
+ node : dict
39
+ A HESTIA [Site](https://www-staging.hestia.earth/schema/Site) or
40
+ [Cycle](https://www-staging.hestia.earth/schema/Cycle).
41
+
42
+ Returns
43
+ -------
44
+ int | None
45
+ The eco-climate zone value if found, otherwise `None`.
46
+ """
47
+ site = (
48
+ node.get("site", {}) if node.get("@type") == NodeType.CYCLE.value
49
+ else node if node.get("@type") == NodeType.SITE.value
50
+ else {}
51
+ )
52
+ eco_climate_zone = find_term_match(site.get("measurements", []), "ecoClimateZone")
53
+ value = get_node_value(eco_climate_zone, default=None)
54
+ return _eco_climate_zone_node_value_to_enum(value) if as_enum else value
55
+
56
+
57
+ def _eco_climate_zone_node_value_to_enum(value: Optional[int]) -> Optional[EcoClimateZone]:
58
+ """
59
+ Safe conversion between int (`ecoClimateZone` measurement node value) and `EcoClimateZone` enum members.
60
+
61
+ If node value is invalid, return `None`.
62
+ """
63
+ should_run = isinstance(value, int) and 1 <= value <= 12
64
+ return EcoClimateZone(value) if should_run else None
65
+
66
+
5
67
  def get_ecoClimateZone_lookup_value(eco_climate_zone: str, col_name: str, group_name: str = None) -> float:
6
68
  """
7
69
  Get a value from the `ecoClimateZone` lookup table.
@@ -29,3 +91,40 @@ def get_ecoClimateZone_lookup_value(eco_climate_zone: str, col_name: str, group_
29
91
  )
30
92
  except Exception:
31
93
  return 0
94
+
95
+
96
+ def get_ecoClimateZone_lookup_grouped_value(
97
+ eco_climate_zone: str, col_name: str, default: Any = None
98
+ ) -> Optional[dict]:
99
+ """
100
+ Get a grouped value from the `ecoClimateZone` lookup table formatted as a dictionary
101
+
102
+ Parameters
103
+ ----------
104
+ eco_climate_zone : str
105
+ The `ecoClimateZone` as a string.
106
+ col_name : str
107
+ The name of the column in the lookup table.
108
+ default : Any, optional
109
+ The default value to return if no lookup value, or invalid lookup value is retrieved.
110
+
111
+ Returns
112
+ -------
113
+ float
114
+ The value associated with the `ecoClimateZone`.
115
+ """
116
+ try:
117
+ lookup = download_lookup('ecoClimateZone.csv')
118
+ code = int(str(eco_climate_zone))
119
+ data = _get_single_table_value(lookup, column_name('ecoClimateZone'), code, column_name(col_name))
120
+ grouped_data = reduce(
121
+ lambda prev, curr: {
122
+ **prev,
123
+ **{curr.split(':')[0]: safe_parse_float(curr.split(':')[1])}
124
+ },
125
+ data.split(';'),
126
+ {}
127
+ ) if data is not None and isinstance(data, str) and len(data) > 1 else default
128
+ return grouped_data
129
+ except Exception:
130
+ return default
@@ -16,6 +16,6 @@ PRODUCTIVITY_KEY = {
16
16
  }
17
17
 
18
18
 
19
- def _get_productivity(country: dict, default: PRODUCTIVITY = PRODUCTIVITY.HIGH):
19
+ def get_productivity(country: dict, default: PRODUCTIVITY = PRODUCTIVITY.HIGH):
20
20
  hdi = safe_parse_float(get_lookup_value(country, 'hdi'), None)
21
21
  return next((key for key in PRODUCTIVITY_KEY if hdi and PRODUCTIVITY_KEY[key](hdi)), default)
@@ -103,12 +103,12 @@ def node_property_lookup_value(model: str, node_term: dict, prop_id: str, defaul
103
103
  return default
104
104
 
105
105
 
106
- def get_node_property_value(model: str, node: dict, prop_id: str, default=None, **log_args):
106
+ def get_node_property_value(model: str, node: dict, prop_id: str, default=None, handle_percents=True, **log_args):
107
107
  prop = get_node_property(node, prop_id)
108
108
  term = (prop or {}).get('term', download_hestia(prop_id))
109
109
  units = (term or {}).get('units')
110
110
  value = prop.get('value') if prop else node_property_lookup_value(model, node.get('term', {}), prop_id, **log_args)
111
- return default if value is None else (value / 100 if units == '%' else value)
111
+ return default if value is None else (value / 100 if units == '%' and handle_percents else value)
112
112
 
113
113
 
114
114
  def get_node_property_value_converted(model: str, node: dict, prop_id: str, default=None, **log_args):
@@ -1 +1 @@
1
- VERSION = '0.64.2'
1
+ VERSION = '0.64.3'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hestia-earth-models
3
- Version: 0.64.2
3
+ Version: 0.64.3
4
4
  Summary: HESTIA's set of modules for filling gaps in the activity data using external datasets (e.g. populating soil properties with a geospatial dataset using provided coordinates) and internal lookups (e.g. populating machinery use from fuel use). Includes rules for when gaps should be filled versus not (e.g. never gap fill yield, gap fill crop residue if yield provided etc.).
5
5
  Home-page: https://gitlab.com/hestia-earth/hestia-engine-models
6
6
  Author: HESTIA Team
@@ -4,10 +4,10 @@ hestia_earth/models/cache_sites.py,sha256=KQp9cUKE-aIcYJoMWEtKFYS8gBFfsx5LKQhqoW
4
4
  hestia_earth/models/log.py,sha256=DbfNcGzaC5hzkuMDxQqW6XYoNBI4Uxw4SIoOYoZA6og,3474
5
5
  hestia_earth/models/preload_requests.py,sha256=Ibx-YOhR_1yuyFBxsLUbvJHVK7PLyMLoPu5l9jDN_Qk,1342
6
6
  hestia_earth/models/requirements.py,sha256=eU4yT443fx7BnaokhrLB_PCizJI7Y6m4auyo8vQauNg,17363
7
- hestia_earth/models/version.py,sha256=zhuRvhTOGAr79_4TdettlTNm_GVkWPyvMGpCa_UD5hQ,19
7
+ hestia_earth/models/version.py,sha256=cWRcfrSfUqZXz_T4QMCr6gCvhrQsvhSQIXauvglcjCA,19
8
8
  hestia_earth/models/agribalyse2016/__init__.py,sha256=WvK0qCQbnYtg9oZxrACd1wGormZyXibPtpCnIQeDqbw,415
9
9
  hestia_earth/models/agribalyse2016/fuelElectricity.py,sha256=tnGxBmJdPfPFfehLUQcefEqy1lHvzsSpx_s7O8nf3Zs,4412
10
- hestia_earth/models/agribalyse2016/machineryInfrastructureDepreciatedAmountPerCycle.py,sha256=_Rbngu0DzHKa62JwBl58ZC_ui1zLF2que_nB7ukhOQc,3392
10
+ hestia_earth/models/agribalyse2016/machineryInfrastructureDepreciatedAmountPerCycle.py,sha256=BPjnWmg73i_OxM2ouCdMTWZtPIqyoUAXrvutntyteE0,3390
11
11
  hestia_earth/models/akagiEtAl2011AndIpcc2006/__init__.py,sha256=WK7xQwUPX48JGqZeb2S2EKdtXuxMjY7HYyUFHItUqUo,425
12
12
  hestia_earth/models/akagiEtAl2011AndIpcc2006/ch4ToAirCropResidueBurning.py,sha256=Mea3L8blwJpRzzJHIMJH71Pn93gz1M2KN2pb43tGBfs,1642
13
13
  hestia_earth/models/akagiEtAl2011AndIpcc2006/n2OToAirCropResidueBurningDirect.py,sha256=3_Q3Q2d80y05sFpg_UfLHtjhzSdkG_PRntVD52B-BOI,1648
@@ -37,10 +37,10 @@ hestia_earth/models/cycle/__init__.py,sha256=VowO3kOHb0LpURsljNaJsYO7s6vgjhul6bF
37
37
  hestia_earth/models/cycle/aboveGroundCropResidueTotal.py,sha256=9swq4YEeJQ2YjVOmghgBYWkMZWdNU4MKCUBY5FsmBSU,3088
38
38
  hestia_earth/models/cycle/coldCarcassWeightPerHead.py,sha256=fQ7huuxyS5PQkRmR_tRCOz9rV3LJwLfLQJjH_TcTz6k,2955
39
39
  hestia_earth/models/cycle/coldDressedCarcassWeightPerHead.py,sha256=k0xg5SIfJGwEKteFr2Fh-lh8yDC_sqQw_lBnnfwl9zU,3069
40
- hestia_earth/models/cycle/concentrateFeed.py,sha256=vE6cKhwDflU2IMn3Dpy8tvmZxqCLEp5r8vLC65eQDGI,5863
40
+ hestia_earth/models/cycle/concentrateFeed.py,sha256=0oL2Odcl9PEZJyG6gfH8bGPNHAICpTFfuL1bJalTJg0,5985
41
41
  hestia_earth/models/cycle/cropResidueManagement.py,sha256=QTRCCFu9VvD_a3_8aAj216vsuhAJEhlAwTJH7ifMkDo,2237
42
42
  hestia_earth/models/cycle/croppingIntensity.py,sha256=44CgDqXg9CBRfTPYTyOleQT-M4_tsQgPba-0vjjk_C4,1770
43
- hestia_earth/models/cycle/cycleDuration.py,sha256=SuTFqCP3Zr3nOV9HuvvvIVcaHtOlTAdSaaswvRLSEwc,3242
43
+ hestia_earth/models/cycle/cycleDuration.py,sha256=ccODF5CJBEd55-CMttCr0eI4uH7OoRvYJZjcth09QMg,3193
44
44
  hestia_earth/models/cycle/endDate.py,sha256=xxTa3Pmu7udJwGYiTn7tcp9_Pl_SM7de9ezbR7sYvUk,1382
45
45
  hestia_earth/models/cycle/energyContentLowerHeatingValue.py,sha256=AyVKCQbb3Pto3Ca__F0KJ_wlwTxbPd7mUyehZW7AJPM,2212
46
46
  hestia_earth/models/cycle/excretaKgMass.py,sha256=iA8Kfl3WvyxbQpx1QOGPQZ9O_Pc5rj7xhucYx3rB8Co,3949
@@ -59,19 +59,20 @@ hestia_earth/models/cycle/residueBurnt.py,sha256=HwU1D9ibiIul-FlXDUcEMDEc_KxpB8u
59
59
  hestia_earth/models/cycle/residueIncorporated.py,sha256=9_s2RMOy5D20eq9ziDBEA_Y7RiFFMeK0bDJ65CW4qlE,2763
60
60
  hestia_earth/models/cycle/residueLeftOnField.py,sha256=qYxKGAdUORN7Vjqj7AZC2VGV_rM3MN0-padDGhgjiNU,2175
61
61
  hestia_earth/models/cycle/residueRemoved.py,sha256=jxDu_Jfcyd-rm-qo8ZuRIf-GGxtFBMpmGy1zHOavwy0,2135
62
- hestia_earth/models/cycle/siteDuration.py,sha256=793ez4IDOHxsbDIREZQ5rUgS6FQare2jL6SZ8qemxKs,2014
62
+ hestia_earth/models/cycle/siteDuration.py,sha256=8VCYn608Lw1A6gLOG2bA1Z2tAQbmDg_yXeq6sgkrXac,2342
63
63
  hestia_earth/models/cycle/siteUnusedDuration.py,sha256=orYGlbzGMpjuDAtZe7KkCOLWrwUYR1H4A0ccAbutW3s,2189
64
64
  hestia_earth/models/cycle/startDate.py,sha256=pbBi55b6uJezPE8EOovOCSwQVrbwpmxwmravOCIh2zg,2683
65
- hestia_earth/models/cycle/startDateDefinition.py,sha256=--U3YLZjJ3WIHl8dxAOewGfMcYtOZS-M2KanJKG1cJw,2246
65
+ hestia_earth/models/cycle/startDateDefinition.py,sha256=6oJmT6XRKYbv2Jer2UJpkOQqHQKjIAEqPz7yv7k-HP4,2187
66
+ hestia_earth/models/cycle/stockingDensityAnimalHousingAverage.py,sha256=RQaVqyWSBWOSDl7pcnOm-nqWqgZlMsJaXd2Stu08-Qg,1542
66
67
  hestia_earth/models/cycle/transformation.py,sha256=06KTfVubh2I47dfnG9Iv6AbuUBbURM8BAVOkRu7XmHw,1255
67
68
  hestia_earth/models/cycle/unknownPreSeasonWaterRegime.py,sha256=9EP8FMXO5fHqmhVNSqR_Dfe38KxwyPOCF6kMewiI_VE,1478
68
69
  hestia_earth/models/cycle/utils.py,sha256=ZcVwvRwVNK48jZfnhrHl2ai4a96YzcmRgO-eQXwQNjo,1408
69
70
  hestia_earth/models/cycle/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- hestia_earth/models/cycle/animal/milkYield.py,sha256=bx8oNw9tZkqSgcRlbxIL6V2nEHx-p0KJc31v7PaLKxI,2926
71
+ hestia_earth/models/cycle/animal/milkYield.py,sha256=O5-OruRhUpKpxsfhGskTHLP8PDd-awAxlEh8acq_PaQ,3011
71
72
  hestia_earth/models/cycle/animal/properties.py,sha256=OGjRl79w-h439jTkjA8b4V61fMuo0McoUs3JrgK-0Zc,596
72
73
  hestia_earth/models/cycle/animal/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- hestia_earth/models/cycle/animal/input/hestiaAggregatedData.py,sha256=neIyzpLIuVheD2A42KdqKAtdgVa2SJ15KdpoxQ8JH1E,2505
74
- hestia_earth/models/cycle/animal/input/properties.py,sha256=2bKyyclrt0O7zvtD1Ij7g1qfb0raBylrdO--cZjcnpg,3354
74
+ hestia_earth/models/cycle/animal/input/hestiaAggregatedData.py,sha256=EpJ6qU0jsoSMEuZYIKCn1f-loJ53_nmpnyDhH5sZTuw,2529
75
+ hestia_earth/models/cycle/animal/input/properties.py,sha256=qFdvoRa5RtQrf-CnWHdi6g40lD4Rncrb_610O0lhUq0,3439
75
76
  hestia_earth/models/cycle/completeness/__init__.py,sha256=rkwGtxIay_AleJCT7al_ngnix_xRqySVie7qvHXMQI0,1517
76
77
  hestia_earth/models/cycle/completeness/animalFeed.py,sha256=8Fo1TqwSuiPudvd2vJ-LVxSyOdD8mDCOZMvjuj5W2uo,1012
77
78
  hestia_earth/models/cycle/completeness/cropResidue.py,sha256=zSiu9h0NxEBDUWlaKBh1QcX4jDIklrs0BC2NWMCQQ80,2549
@@ -229,12 +230,14 @@ hestia_earth/models/ipcc2013ExcludingFeedbacks/gwp100.py,sha256=8VRg-Vvzc86_CQmB
229
230
  hestia_earth/models/ipcc2013IncludingFeedbacks/__init__.py,sha256=VJ16KIGQQHybzZiTvu3mpZy_3j0xcd06RHHCfPrCMgU,427
230
231
  hestia_earth/models/ipcc2013IncludingFeedbacks/gwp100.py,sha256=PTE0FEV5x7MZgWpA6iu7EtIYaYKl6Udc9icpafkqlEA,979
231
232
  hestia_earth/models/ipcc2019/__init__.py,sha256=LdRpu8KbEc-MroIwXfKDjfj-xbgmfUYgctjKVvtpRfQ,409
233
+ hestia_earth/models/ipcc2019/aboveGroundBiomass.py,sha256=6nsyVJgFutf4r9ur73mgQE_6j91opQr4fR1I0o1sZYs,26316
234
+ hestia_earth/models/ipcc2019/aboveGroundBiomass_utils.py,sha256=orzL_o_V4u9n7KyBKKs28m0MSox7qwKHmQ58R66ekXU,7027
232
235
  hestia_earth/models/ipcc2019/aboveGroundCropResidueTotal.py,sha256=lT2QVV5c2LvQqZRfPEvFT_bMTayMXgIsFLnx8I6iYzw,3089
233
236
  hestia_earth/models/ipcc2019/belowGroundCropResidue.py,sha256=7AFU2Q0qPAvv6uEKWByS38jl77FvjTPbGm2GQ53waGg,3499
234
237
  hestia_earth/models/ipcc2019/carbonContent.py,sha256=tlQvu4Auhpjmaz7XrZz86xwxVrJhsYYf8DFA_aQeev4,7255
235
238
  hestia_earth/models/ipcc2019/ch4ToAirAquacultureSystems.py,sha256=q6yyEiYQhHJ2VyQy2Fa84cuTl1D8bjBXOK3UpaRuo20,3196
236
239
  hestia_earth/models/ipcc2019/ch4ToAirEntericFermentation.py,sha256=khX90NjkmlvosyRZ77QxgwTKwg42Z_ftOWTTAanHViw,11420
237
- hestia_earth/models/ipcc2019/ch4ToAirExcreta.py,sha256=jEGgEUhMr0JHq_-lPJioKHOQGQXrQvblU51AppXKvB0,6719
240
+ hestia_earth/models/ipcc2019/ch4ToAirExcreta.py,sha256=eY_yb7ncTb_2HoUUgXZnnRHiybTXYj_DTe3CmDzD3fY,6717
238
241
  hestia_earth/models/ipcc2019/ch4ToAirFloodedRice.py,sha256=TJ4J7VA5n4RPrJYZQeR3lc3ZoCw7T1E5Cb1XJewr834,7331
239
242
  hestia_earth/models/ipcc2019/co2ToAirLimeHydrolysis.py,sha256=7z0zdqiiWQwkyJCgSNMoK2mft3cJkTRlqwKrMuSKdWI,2454
240
243
  hestia_earth/models/ipcc2019/co2ToAirSoilOrganicCarbonStockChangeManagementChange.py,sha256=D-4h4a8Ob_radqS6Gj3K8eLqTeXJrFIbfO9viusd6Pc,27585
@@ -259,15 +262,18 @@ hestia_earth/models/ipcc2019/no3ToGroundwaterOrganicFertiliser.py,sha256=px2SN-u
259
262
  hestia_earth/models/ipcc2019/noxToAirInorganicFertiliser.py,sha256=fmmFgjtvOD2TrrLY03jYly_KvDnCsAXqhL_tmZQQt-A,4480
260
263
  hestia_earth/models/ipcc2019/noxToAirOrganicFertiliser.py,sha256=9dx_MRTwJGxJRq6mj2EJQMdQ2w6j7lw0fQk0If_cIGc,4152
261
264
  hestia_earth/models/ipcc2019/organicCarbonPerHa.py,sha256=iRUSVxMpBGgsVDkuBABPKI4Khr5jIpAwuBe66c1PeV0,8658
262
- hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_1_utils.py,sha256=JxVJ9mRml63VhwNSNq7H3O7YQJoXLgP4j9fIRs3ms5o,82431
265
+ hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_1_utils.py,sha256=d112vbcbKHHoy0q3ncaI3d9dsAPydSEaWbXWupJe1-c,81908
263
266
  hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_2_utils.py,sha256=A84r6u45HFk5jEb2nTWGTFTwX1qjq8F6qwkNUuiyH48,63542
264
- hestia_earth/models/ipcc2019/organicCarbonPerHa_utils.py,sha256=jIhRks8ewCtQNIIN89N_4A4Tp529YMQnk4YmZV6FOCY,10668
265
- hestia_earth/models/ipcc2019/pastureGrass.py,sha256=4ZPbLlaIVf4-_ItoLU8fFhRhkWIUFIOcX2isSUOtLco,9550
266
- hestia_earth/models/ipcc2019/pastureGrass_utils.py,sha256=KA5MAnaPXBgrNncBhcQtOF-cdLwEKI6O2F_DPEz5oTM,13502
267
+ hestia_earth/models/ipcc2019/organicCarbonPerHa_utils.py,sha256=HGJC2zcEvtbkovccAZ5MYm84wBXUZH0Q3UyJOXD0ltA,10157
268
+ hestia_earth/models/ipcc2019/pastureGrass.py,sha256=w8LMbxJTdZtC2nrWoooPA0jrA9-FIFBZA-dBpGyqAUg,10158
269
+ hestia_earth/models/ipcc2019/pastureGrass_utils.py,sha256=Bzz4yPDdA7YVUhhJhQCCVu0uKONeO3b6a48_ZITZgzU,13889
267
270
  hestia_earth/models/ipcc2019/utils.py,sha256=MSDMu15D9DnilFUgi4_6jYXC0FaKso3OODauGTMB6hs,6229
268
271
  hestia_earth/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
- hestia_earth/models/ipcc2019/animal/pastureGrass.py,sha256=fSsWwf6lBlro4DIwbcAHSv0L-UMFe-liljfNr-kXWYw,11476
270
- hestia_earth/models/ipcc2019/animal/weightAtMaturity.py,sha256=5smSAmKVCIlELCD6S_3I16YuSWNFhcClGDOdvrIuYsE,3657
272
+ hestia_earth/models/ipcc2019/animal/liveweightGain.py,sha256=FssMhdOvPpLqzojWTgnpZYGd3w1FC5CUd9fwdiYJRzU,2558
273
+ hestia_earth/models/ipcc2019/animal/liveweightPerHead.py,sha256=UKr1JvZyDv38ThvJdBO_OO09TzlSiSX49M-HOZ6CN9E,2574
274
+ hestia_earth/models/ipcc2019/animal/pastureGrass.py,sha256=edBXCVjJB5ZBGJ9_zE3H6xKpT84hPqe3dv5JF879tXw,12066
275
+ hestia_earth/models/ipcc2019/animal/utils.py,sha256=ziyphGLEO_eitOLtBG0BLpJfmN3csqUetFZuDo8FX2U,990
276
+ hestia_earth/models/ipcc2019/animal/weightAtMaturity.py,sha256=snbCjA2AZImd3yr4DIl5XwwoVoX9xF7djTuHI1qJmCA,3329
271
277
  hestia_earth/models/ipcc2021/__init__.py,sha256=VTgGFKhwMmk_nuI1RRq0in27fHYVPBonlXlPK00K8no,409
272
278
  hestia_earth/models/ipcc2021/gwp100.py,sha256=v-DYU-11XnWI1Ns1GEiKrJqL3JafxvhTsLmuBuFcxJU,1021
273
279
  hestia_earth/models/jarvisAndPain1994/__init__.py,sha256=ercUwy29sV7oPIESj8UjsGB5lqiBCss9OZcbjxeeG8E,418
@@ -380,7 +386,7 @@ hestia_earth/models/linkedImpactAssessment/landTransformationFromPermanentPastur
380
386
  hestia_earth/models/linkedImpactAssessment/utils.py,sha256=dGwGc2d-8_WQElTpfyPmz5vQtL-LHQRmiZnCTuPXMDs,1876
381
387
  hestia_earth/models/mocking/__init__.py,sha256=n3Fkkrvh8zHNWiJZmnfQ7WZ91JRzAO9P6pSG1JpwtXo,687
382
388
  hestia_earth/models/mocking/mock_search.py,sha256=qgABw-sZK37XtsALKt8AHF2VJPUrZSnHv5Qj1Dn93oA,2405
383
- hestia_earth/models/mocking/search-results.json,sha256=mbdSj0kpcZiabKvMZipfGvwSokugpHBU4Z5fvVHnuTw,53137
389
+ hestia_earth/models/mocking/search-results.json,sha256=MG2gaJm0DPR-7nRYr3IN5_cRvNcquom-gY02_5hMP5k,53136
384
390
  hestia_earth/models/pooreNemecek2018/__init__.py,sha256=nPboL7ULJzL5nJD5q7q9VOZt_fxbKVm8fmn1Az5YkVY,417
385
391
  hestia_earth/models/pooreNemecek2018/aboveGroundCropResidueTotal.py,sha256=Qt-mel4dkhK6N5uUOutNOinCTFjbjtGzITaaI0LvYc4,2396
386
392
  hestia_earth/models/pooreNemecek2018/belowGroundCropResidue.py,sha256=JT0RybbvWVlo01FO8K0Yj41HrEaJT3Kj1xfayr2X-xw,2315
@@ -409,6 +415,7 @@ hestia_earth/models/pooreNemecek2018/saplings.py,sha256=LS0zepV51-LlVmPBAjj5nlfg
409
415
  hestia_earth/models/pooreNemecek2018/utils.py,sha256=to2vtONKCbuG1gVSDvsUcG7EnlahELfG_57gzIAHlv0,1710
410
416
  hestia_earth/models/poschEtAl2008/__init__.py,sha256=nvyyGglxCTV4PpxcOjY7jJb0v8Bjzj435Zt1j6VcryM,414
411
417
  hestia_earth/models/poschEtAl2008/terrestrialAcidificationPotentialAccumulatedExceedance.py,sha256=gbD8fgvdHANXsuPPWRx4Flcqhk3fPD5ROrrb2LMgmS8,1279
418
+ hestia_earth/models/poschEtAl2008/terrestrialEutrophicationPotentialAccumulatedExceedance.py,sha256=X1CixghiqYiE1N-sWhXuFcy9nxCA2RdBiClFAgUWTgw,1281
412
419
  hestia_earth/models/recipe2016Egalitarian/__init__.py,sha256=OvZoSgfaMe6DWIdqr-Sx3ouzXlp994oro7Mi0Xid18Q,422
413
420
  hestia_earth/models/recipe2016Egalitarian/damageToFreshwaterEcosystemsSpeciesYear.py,sha256=b1UZAsy3yGlHYxH2YhBhhSnjm5zzQl8Z32DcQBjgWNE,1123
414
421
  hestia_earth/models/recipe2016Egalitarian/damageToHumanHealth.py,sha256=dJ8WinGe52wFQCMKtT_B7c1MFM_GbBo8aqfw0n2pw94,1087
@@ -544,16 +551,16 @@ hestia_earth/models/utils/aggregated.py,sha256=sz6usleZmo_tC_hIvmGgYsX8-H0dulXmm
544
551
  hestia_earth/models/utils/animalProduct.py,sha256=M5IunAKGY6oZv3j1Ascl34ywyeLWApqOIlBzbtlA2FE,721
545
552
  hestia_earth/models/utils/aquacultureManagement.py,sha256=dxrbC1Xf140cohxTbSw6TxLAnAASWTdNZwBBam4yQnw,171
546
553
  hestia_earth/models/utils/array_builders.py,sha256=0_Ik0gKoh1QBijyb-55odh8_dIs-CWQ3lgUN1Hnc4Y8,18749
547
- hestia_earth/models/utils/blank_node.py,sha256=WA3cb3QQ0HeCPwao4VDBXp5OssXrg-QElr_14HOUHa4,44499
554
+ hestia_earth/models/utils/blank_node.py,sha256=YlHyxirCIt7PGEBJoal7cOXzegWbX9X3cpknKEznlQc,45238
548
555
  hestia_earth/models/utils/completeness.py,sha256=2-GusD9UycobDZq8y5jar0ZcOjyqnSbzPRT_5XMc4YA,1259
549
556
  hestia_earth/models/utils/constant.py,sha256=7wn5LBdsqlLdCrPaVASYjsxNtbaOSdqVWKedOFgyzfY,3249
550
- hestia_earth/models/utils/crop.py,sha256=kG054fryqPSBpmzvJFBy_CLiOdjrt7RMk5uTItO5ADg,2246
557
+ hestia_earth/models/utils/crop.py,sha256=5KigEHd15nT8O9_1woxKJF5rEWiSkIkJqDAXet8BB9g,2383
551
558
  hestia_earth/models/utils/cropResidue.py,sha256=_0Q35CrliJeo31xGHsPWe8A2oHxijdIsOrf3gBEqhlA,612
552
559
  hestia_earth/models/utils/cropResidueManagement.py,sha256=nIDFjf39rDD10UHSVudfDyu-EiL261g8jyrgS-2aDKw,347
553
560
  hestia_earth/models/utils/currency.py,sha256=f_ArJANb--pZq4LL49SXQ1AMX_oKroqwBXKRRQqZwsM,578
554
561
  hestia_earth/models/utils/cycle.py,sha256=W-VIReb1OVooV6EIj-P6gUlr-W17_6USdnnj4ihMTTc,16741
555
562
  hestia_earth/models/utils/descriptive_stats.py,sha256=qOyG8_TpWYmaxZ0h99n9L71gDLLiVMrMf0ChtxnZLjw,8559
556
- hestia_earth/models/utils/ecoClimateZone.py,sha256=NHFt-A9EiWXC6tUNIxkgOWUZOjj4I4uwJIP9ddDZegw,1112
563
+ hestia_earth/models/utils/ecoClimateZone.py,sha256=A3ZtF_B2wr6v7clbVi0zWQ-bOXRoOKq4vGq8mhNf9Ec,4316
557
564
  hestia_earth/models/utils/emission.py,sha256=5Dz8Z4P6QXbYSvOzVcqJy3R_oZMrp77_Iwj5xZsxsKc,3769
558
565
  hestia_earth/models/utils/excretaManagement.py,sha256=NuWPQjFZxMVt9sYgBjcqhGWCFk_OKb3sA9Ovcff3fRQ,428
559
566
  hestia_earth/models/utils/feedipedia.py,sha256=ImUAURcwJDtSvu1s4MDeM1VpbU8mVTp9jh9ENNOB0Mw,3515
@@ -570,8 +577,8 @@ hestia_earth/models/utils/organicFertiliser.py,sha256=2HY-a0EBzUw4DkEAXClLMXVCEZ
570
577
  hestia_earth/models/utils/pesticideAI.py,sha256=6f8b-dFm3qr-eY049_eOvj_iDk4XBam61csozdDAvyA,2361
571
578
  hestia_earth/models/utils/practice.py,sha256=tNadOzsrNlCEt801B815XaruJXzZ5yPASam7B3sWpXE,1091
572
579
  hestia_earth/models/utils/product.py,sha256=DhDgiReR8k9n9aaRM2xk3PIY3nfoE1ISKg9pKsBVzVQ,10143
573
- hestia_earth/models/utils/productivity.py,sha256=bUBVCZInGqHuHZvHDSYPQkjWXQxOtTjEk-1-f_BsFOo,594
574
- hestia_earth/models/utils/property.py,sha256=_9Wy0oZIBLsa-jOiGLokKehYLNdz-_7LfLaE4fb6SWM,5085
580
+ hestia_earth/models/utils/productivity.py,sha256=rTJX_nemxHpOcPN7jiM2hFHknoLUIW8y-hFxVxIkg70,593
581
+ hestia_earth/models/utils/property.py,sha256=gBy6FidNDhjzokOXOWcIDBMKcdPPBXxIZgdAxgQsmWc,5127
575
582
  hestia_earth/models/utils/site.py,sha256=zEj2PtIghk-L_vVJidlXM6_ed7HTc2-ogP0sQSh49vw,3874
576
583
  hestia_earth/models/utils/source.py,sha256=Y-CcO5Y3q5Hz4A4RdX35C1EUjL9w1NKnOrzVfOWQ7nU,1748
577
584
  hestia_earth/models/utils/temperature.py,sha256=ljlG4-yCgFFb6LRZweb18cZKLrr7K2mqd4E4Hz_D1f8,476
@@ -641,10 +648,11 @@ tests/models/cycle/test_residueBurnt.py,sha256=eBAzGR1210cBYH_s6oI1yCG6tVKUj9gGs
641
648
  tests/models/cycle/test_residueIncorporated.py,sha256=esB_wnpf6W0PB24HW0YUgtfD9mxLDIY22eNVD4WAYFA,1719
642
649
  tests/models/cycle/test_residueLeftOnField.py,sha256=_8CoSp-7z3BBLGN5Hv067FRYz8yDFw5fi_Cu5n6Rl3g,1290
643
650
  tests/models/cycle/test_residueRemoved.py,sha256=R5v8lwGyz_4a9_X_LnugBEmgVgcisS5LTM5GFCtKIco,1278
644
- tests/models/cycle/test_siteDuration.py,sha256=43Hjb0f2lXCRGqj-UmfLVmk7OGJswawtcA2q5wlffXk,1712
651
+ tests/models/cycle/test_siteDuration.py,sha256=x98shgDOAPp7Bf8j7R251qzn4oVZyqmtlmwcoG2nVwE,2358
645
652
  tests/models/cycle/test_siteUnusedDuration.py,sha256=5h9R3guw6ErU_sE5omoiK9Fpke74SmQWsJYWYURE9Fo,1532
646
653
  tests/models/cycle/test_startDate.py,sha256=-U1_XIx8v5zxK3oK5fCIIsS7GFKymNh3m0SgJ0J2iZ8,1223
647
654
  tests/models/cycle/test_startDateDefinition.py,sha256=42BmsT1I7Jq_YMVN-VNU7a0fIZ2w3i5jgwy4H_r4dNM,920
655
+ tests/models/cycle/test_stockingDensityAnimalHousingAverage.py,sha256=Pj3rxJNXF0rmGjRomZOHV6ZVngypzbVIGwAHbVIOLFI,1286
648
656
  tests/models/cycle/test_transformations.py,sha256=Ws_8KhNqeHogGFXTQ4qZXQ5Ph2I3ZUaY0yO1itFUHLk,464
649
657
  tests/models/cycle/test_unknownPreSeasonWaterRegime.py,sha256=4JSSpDvBQEQrDoytNVzuIcm9UVio4TzZpZm52iMWBVA,1220
650
658
  tests/models/cycle/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -795,6 +803,8 @@ tests/models/ipcc2013ExcludingFeedbacks/test_gwp100.py,sha256=Od9ALNCag5pCVJnp2p
795
803
  tests/models/ipcc2013IncludingFeedbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
796
804
  tests/models/ipcc2013IncludingFeedbacks/test_gwp100.py,sha256=4HydDKiZDpxtgqgjpAg4cTVQu-jM-_tdDdJFmNNrwSc,875
797
805
  tests/models/ipcc2019/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
806
+ tests/models/ipcc2019/test_aboveGroundBiomass.py,sha256=Y9hSe_7XWDAmHcUKShoqp3nQZ67poHjvxLeDg3QruWY,5318
807
+ tests/models/ipcc2019/test_aboveGroundBiomass_utils.py,sha256=8Z9OXTIutB-_XeF3dCBjMW4bolEzreOE8QD8kahMcag,4182
798
808
  tests/models/ipcc2019/test_aboveGroundCropResidueTotal.py,sha256=AADYB1g9vftH7YSvNyihHu8GQOiA7VhXxVQ-oJQNT88,2581
799
809
  tests/models/ipcc2019/test_belowGroundCropResidue.py,sha256=HUxHZLBdLX_E_oc3wqTwNtGY4M4yCWcxx-1iBYPF7_s,2576
800
810
  tests/models/ipcc2019/test_carbonContent.py,sha256=_GWF5nGy-PxiqBZ5V7W_sHMz75YRzmxr79R-sZZg7yk,4146
@@ -825,12 +835,14 @@ tests/models/ipcc2019/test_no3ToGroundwaterOrganicFertiliser.py,sha256=e1ZViD12q
825
835
  tests/models/ipcc2019/test_noxToAirInorganicFertiliser.py,sha256=NZBSBJLM_j2PEpHRON2ysgKNF8x5sHfQVoAKQdGsfzk,1537
826
836
  tests/models/ipcc2019/test_noxToAirOrganicFertiliser.py,sha256=LR5pjV5vRbgSSQAw8kYRp_ij4CHInzgaDS6EggQuBiw,1104
827
837
  tests/models/ipcc2019/test_organicCarbonPerHa.py,sha256=9i1xEv5QEc8C9e0c0iVGwLOWisZVYwwlnAsEVmMv5Lg,13245
828
- tests/models/ipcc2019/test_organicCarbonPerHa_tier_1_utils.py,sha256=e5RpK4GlH9tNxbwEyPQkO2lMwYBtGNp8ha8j4bZF9eg,20699
838
+ tests/models/ipcc2019/test_organicCarbonPerHa_tier_1_utils.py,sha256=62z1uWd37ol42hGPMgspFsi76v1rpix17PkUMyh8hqQ,20751
829
839
  tests/models/ipcc2019/test_organicCarbonPerHa_tier_2_utils.py,sha256=6YXLqH5wz_cvYlJjCacCv9UTYpnXYxURLKQz6N9ZMPg,6807
830
840
  tests/models/ipcc2019/test_organicCarbonPerHa_utils.py,sha256=Zd2QlN_Q3k9djuByOH62A00tryVzlvNtsd46N79TTeU,1778
831
- tests/models/ipcc2019/test_pastureGrass.py,sha256=xcFXpszkqgeJImWOp-JlJxpcSHQKC-Pi0zdaKfai4a4,2660
841
+ tests/models/ipcc2019/test_pastureGrass.py,sha256=mKx8NnTtMT9TrXxRNLv73wD1TWBaiRZzA1xh2ukb-HI,2667
832
842
  tests/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
833
- tests/models/ipcc2019/animal/test_pastureGrass.py,sha256=IifdYacwC_cXn5wHeLqq2e0fJeIe8WLWOumYKY36MrE,1979
843
+ tests/models/ipcc2019/animal/test_liveweightGain.py,sha256=XN1Ly_Jeg4zoRVQAVX2D0ORxmKjrcW163bI0wpLjUWs,663
844
+ tests/models/ipcc2019/animal/test_liveweightPerHead.py,sha256=oMzpf7crgkTXO3sF88i4XhJXVOqkCFgKbZruE9kCQTY,666
845
+ tests/models/ipcc2019/animal/test_pastureGrass.py,sha256=vuwd7WPUKIWaYREv_UmEa8m9llZSr0OclDsmnSDtHOQ,1987
834
846
  tests/models/ipcc2019/animal/test_weightAtMaturity.py,sha256=Tss9bTVz66yXVEBZT31KMm6gd45B9E1DJLqwYArPuYY,665
835
847
  tests/models/ipcc2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
836
848
  tests/models/ipcc2021/test_gwp100.py,sha256=JRklKMSg-OXopb9ZufGgl94deuMuJSsfNXRZDBtOZrE,1119
@@ -968,6 +980,7 @@ tests/models/pooreNemecek2018/test_rotationDuration.py,sha256=tD2E91beAXdyT-xf5Q
968
980
  tests/models/pooreNemecek2018/test_saplings.py,sha256=uJyUWUocvrcPndv-YFLs0WfxGEAG1kM8HEWZwutRhvs,1621
969
981
  tests/models/poschEtAl2008/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
970
982
  tests/models/poschEtAl2008/test_terrestrialAcidificationPotentialAccumulatedExceedance.py,sha256=NJ_W-ypWwjBuGiaXUeJvaQ9ZufoqlSWk1NYE9tt94ZA,1612
983
+ tests/models/poschEtAl2008/test_terrestrialEutrophicationPotentialAccumulatedExceedance.py,sha256=m-AUbdVDBEFEcmNOv13cYvNZQgDMYhHX33kfWywXQWM,1485
971
984
  tests/models/recipe2016Egalitarian/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
972
985
  tests/models/recipe2016Egalitarian/test_damageToFreshwaterEcosystemsSpeciesYear.py,sha256=OC8WjzPuyz5fd_E-LxFbOg3sasVc6LMJ9UK-jAKO7LU,697
973
986
  tests/models/recipe2016Egalitarian/test_damageToHumanHealth.py,sha256=fWjzC9r6itihyW6AdmDkotbhML_0KavXernOpnK1SmY,677
@@ -1102,6 +1115,7 @@ tests/models/utils/test_cropResidueManagement.py,sha256=RQt8lexeJzCyxZceIutgDpw7
1102
1115
  tests/models/utils/test_currency.py,sha256=BPsojPsY9QW2aj8vgbjkPQXU8GU6wDwwtPZ3HdC4KTU,277
1103
1116
  tests/models/utils/test_dataCompleteness.py,sha256=mW6rA7ddhtjZsLxwo5xDnvBdxmqTsivy4RTIU-2Lvk0,1713
1104
1117
  tests/models/utils/test_descriptive_stats.py,sha256=S-N4-JavFw8UQKju7QhvtimsAIe0TI4DjQT-0q_Y-Sk,3988
1118
+ tests/models/utils/test_ecoClimateZone.py,sha256=Pzy1wuCqkz4Ftms-6eCxdYg1sdOVu8bobTNVd-TUm3U,4280
1105
1119
  tests/models/utils/test_emission.py,sha256=3KfhQGV5Vh_WXTPt6McvZ2dBp9TVM7eAUTLgRHkBOvU,2146
1106
1120
  tests/models/utils/test_feedipedia.py,sha256=S7c1W4bJ5xWXPh42pPbl3R7lDX_iEeaEtFaPXgB7hgE,906
1107
1121
  tests/models/utils/test_impact_assessment.py,sha256=qEm4Y5txWnkSJKP1puvwgKFXkv06c7vUKmwDyIJxkdc,1114
@@ -1118,8 +1132,8 @@ tests/models/utils/test_source.py,sha256=_Ol-OrJs2Tt9iZAZ_RY2qRuSbnE4yz5OuEGkDSb
1118
1132
  tests/models/utils/test_term.py,sha256=M5Sa26v2gzQYbZ4H_fo7DspnaCx__-WtL-MULGapCWk,3509
1119
1133
  tests/models/webbEtAl2012AndSintermannEtAl2012/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1120
1134
  tests/models/webbEtAl2012AndSintermannEtAl2012/test_nh3ToAirOrganicFertiliser.py,sha256=qi2FNXS5Af2WDtm7nq_FsprH3BfCF0XxnE0XHmC4aIY,2244
1121
- hestia_earth_models-0.64.2.dist-info/LICENSE,sha256=AC7h7GAgCZGJK_Tzh6LUCrML9gQEfowWwecEw2w54QM,1154
1122
- hestia_earth_models-0.64.2.dist-info/METADATA,sha256=62AGAT6inNKY_pNYwL2qKTpk8LFW3wbjLS7DAnLCcag,3343
1123
- hestia_earth_models-0.64.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1124
- hestia_earth_models-0.64.2.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
1125
- hestia_earth_models-0.64.2.dist-info/RECORD,,
1135
+ hestia_earth_models-0.64.3.dist-info/LICENSE,sha256=AC7h7GAgCZGJK_Tzh6LUCrML9gQEfowWwecEw2w54QM,1154
1136
+ hestia_earth_models-0.64.3.dist-info/METADATA,sha256=oHbT7czZE9hSI1j9SqhXt2G2cy3LZgsY-whn_0Ybxpc,3343
1137
+ hestia_earth_models-0.64.3.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1138
+ hestia_earth_models-0.64.3.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
1139
+ hestia_earth_models-0.64.3.dist-info/RECORD,,
@@ -59,3 +59,25 @@ def test_run():
59
59
 
60
60
  value = run(data)
61
61
  assert float(value) == float(expected)
62
+
63
+
64
+ def test_run_temporary_crop():
65
+ with open(f"{fixtures_folder}/temporary-crop/cycle.jsonld", encoding='utf-8') as f:
66
+ data = json.load(f)
67
+
68
+ with open(f"{fixtures_folder}/result.txt", encoding='utf-8') as f:
69
+ expected = f.read().strip()
70
+
71
+ value = run(data)
72
+ assert float(value) == float(expected)
73
+
74
+
75
+ def test_run_permanent_crop():
76
+ with open(f"{fixtures_folder}/permanent-crop/cycle.jsonld", encoding='utf-8') as f:
77
+ data = json.load(f)
78
+
79
+ with open(f"{fixtures_folder}/result.txt", encoding='utf-8') as f:
80
+ expected = f.read().strip()
81
+
82
+ value = run(data)
83
+ assert float(value) == float(expected)
@@ -0,0 +1,42 @@
1
+ from unittest.mock import patch
2
+ import pytest
3
+ import json
4
+ from tests.utils import fixtures_path, fake_new_practice
5
+
6
+ from hestia_earth.models.cycle.stockingDensityAnimalHousingAverage import MODEL, TERM_ID, run, _should_run
7
+
8
+ class_path = f"hestia_earth.models.{MODEL}.{TERM_ID}"
9
+ fixtures_folder = f"{fixtures_path}/{MODEL}/{TERM_ID}"
10
+
11
+
12
+ @pytest.mark.parametrize(
13
+ 'test_name,cycle,expected_should_run',
14
+ [
15
+ (
16
+ 'no live animal => no run',
17
+ {'products': [{'term': {'termType': 'crop'}}]},
18
+ False
19
+ ),
20
+ (
21
+ 'with live animal => run',
22
+ {'products': [{'term': {'termType': 'liveAnimal'}}]},
23
+ True
24
+ ),
25
+ ]
26
+ )
27
+ @patch(f"{class_path}.get_lookup_value", return_value=10)
28
+ def test_should_run(mock_lookup, test_name, cycle, expected_should_run):
29
+ should_run, *args = _should_run(cycle)
30
+ assert should_run == expected_should_run, test_name
31
+
32
+
33
+ @patch(f"{class_path}._new_practice", side_effect=fake_new_practice)
34
+ def test_run(*args):
35
+ with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
36
+ cycle = json.load(f)
37
+
38
+ with open(f"{fixtures_folder}/result.jsonld", encoding='utf-8') as f:
39
+ expected = json.load(f)
40
+
41
+ result = run(cycle)
42
+ assert result == expected
@@ -0,0 +1,20 @@
1
+ from unittest.mock import patch
2
+ import json
3
+ from tests.utils import fixtures_path, fake_new_property
4
+
5
+ from hestia_earth.models.ipcc2019.animal.liveweightGain import MODEL, TERM_ID, run
6
+
7
+ class_path = f"hestia_earth.models.{MODEL}.animal.{TERM_ID}"
8
+ fixtures_folder = f"{fixtures_path}/{MODEL}/animal/{TERM_ID}"
9
+
10
+
11
+ @patch(f"{class_path}._new_property", side_effect=fake_new_property)
12
+ def test_run(*args):
13
+ with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
14
+ cycle = json.load(f)
15
+
16
+ with open(f"{fixtures_folder}/result.jsonld", encoding='utf-8') as f:
17
+ expected = json.load(f)
18
+
19
+ value = run(cycle)
20
+ assert value == expected
@@ -0,0 +1,20 @@
1
+ from unittest.mock import patch
2
+ import json
3
+ from tests.utils import fixtures_path, fake_new_property
4
+
5
+ from hestia_earth.models.ipcc2019.animal.liveweightPerHead import MODEL, TERM_ID, run
6
+
7
+ class_path = f"hestia_earth.models.{MODEL}.animal.{TERM_ID}"
8
+ fixtures_folder = f"{fixtures_path}/{MODEL}/animal/{TERM_ID}"
9
+
10
+
11
+ @patch(f"{class_path}._new_property", side_effect=fake_new_property)
12
+ def test_run(*args):
13
+ with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
14
+ cycle = json.load(f)
15
+
16
+ with open(f"{fixtures_folder}/result.jsonld", encoding='utf-8') as f:
17
+ expected = json.load(f)
18
+
19
+ value = run(cycle)
20
+ assert value == expected
@@ -10,7 +10,7 @@ class_path_utils = f"hestia_earth.models.{MODEL}.pastureGrass_utils"
10
10
  fixtures_folder = f"{fixtures_path}/{MODEL}/animal/{MODEL_KEY}"
11
11
 
12
12
 
13
- def fake_download_hestia(term_id: str, *args): return TERMS_BY_ID[term_id]
13
+ def fake_download_hestia(term_id: str, *args): return TERMS_BY_ID.get(term_id, {})
14
14
 
15
15
 
16
16
  @patch(f"{class_path_utils}.download_hestia", side_effect=fake_download_hestia)