hestia-earth-models 0.64.1__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 (47) 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 +19 -10
  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/ch4ToAirAquacultureSystems.py +96 -0
  18. hestia_earth/models/ipcc2019/ch4ToAirExcreta.py +2 -2
  19. hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_1_utils.py +37 -50
  20. hestia_earth/models/ipcc2019/organicCarbonPerHa_utils.py +0 -19
  21. hestia_earth/models/ipcc2019/pastureGrass.py +44 -31
  22. hestia_earth/models/ipcc2019/pastureGrass_utils.py +38 -22
  23. hestia_earth/models/mocking/search-results.json +489 -249
  24. hestia_earth/models/poschEtAl2008/terrestrialEutrophicationPotentialAccumulatedExceedance.py +40 -0
  25. hestia_earth/models/utils/blank_node.py +20 -1
  26. hestia_earth/models/utils/crop.py +4 -0
  27. hestia_earth/models/utils/ecoClimateZone.py +99 -0
  28. hestia_earth/models/utils/productivity.py +1 -1
  29. hestia_earth/models/utils/property.py +2 -2
  30. hestia_earth/models/version.py +1 -1
  31. {hestia_earth_models-0.64.1.dist-info → hestia_earth_models-0.64.3.dist-info}/METADATA +1 -1
  32. {hestia_earth_models-0.64.1.dist-info → hestia_earth_models-0.64.3.dist-info}/RECORD +47 -31
  33. tests/models/cycle/test_siteDuration.py +22 -0
  34. tests/models/cycle/test_stockingDensityAnimalHousingAverage.py +42 -0
  35. tests/models/ipcc2019/animal/test_liveweightGain.py +20 -0
  36. tests/models/ipcc2019/animal/test_liveweightPerHead.py +20 -0
  37. tests/models/ipcc2019/animal/test_pastureGrass.py +1 -1
  38. tests/models/ipcc2019/test_aboveGroundBiomass.py +182 -0
  39. tests/models/ipcc2019/test_aboveGroundBiomass_utils.py +92 -0
  40. tests/models/ipcc2019/test_ch4ToAirAquacultureSystems.py +60 -0
  41. tests/models/ipcc2019/test_organicCarbonPerHa_tier_1_utils.py +3 -2
  42. tests/models/ipcc2019/test_pastureGrass.py +2 -2
  43. tests/models/poschEtAl2008/test_terrestrialEutrophicationPotentialAccumulatedExceedance.py +44 -0
  44. tests/models/utils/test_ecoClimateZone.py +152 -0
  45. {hestia_earth_models-0.64.1.dist-info → hestia_earth_models-0.64.3.dist-info}/LICENSE +0 -0
  46. {hestia_earth_models-0.64.1.dist-info → hestia_earth_models-0.64.3.dist-info}/WHEEL +0 -0
  47. {hestia_earth_models-0.64.1.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.1'
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.1
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=ynV6q1Uuf9gDmUxe-eyYGdhh8GzowZGw5X9OY5kt03Y,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=wiq9KLRuipHz_2_CVfXDuUek0JN1ZPSyKSimtJntG9E,5636
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,11 +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
238
+ hestia_earth/models/ipcc2019/ch4ToAirAquacultureSystems.py,sha256=q6yyEiYQhHJ2VyQy2Fa84cuTl1D8bjBXOK3UpaRuo20,3196
235
239
  hestia_earth/models/ipcc2019/ch4ToAirEntericFermentation.py,sha256=khX90NjkmlvosyRZ77QxgwTKwg42Z_ftOWTTAanHViw,11420
236
- hestia_earth/models/ipcc2019/ch4ToAirExcreta.py,sha256=jEGgEUhMr0JHq_-lPJioKHOQGQXrQvblU51AppXKvB0,6719
240
+ hestia_earth/models/ipcc2019/ch4ToAirExcreta.py,sha256=eY_yb7ncTb_2HoUUgXZnnRHiybTXYj_DTe3CmDzD3fY,6717
237
241
  hestia_earth/models/ipcc2019/ch4ToAirFloodedRice.py,sha256=TJ4J7VA5n4RPrJYZQeR3lc3ZoCw7T1E5Cb1XJewr834,7331
238
242
  hestia_earth/models/ipcc2019/co2ToAirLimeHydrolysis.py,sha256=7z0zdqiiWQwkyJCgSNMoK2mft3cJkTRlqwKrMuSKdWI,2454
239
243
  hestia_earth/models/ipcc2019/co2ToAirSoilOrganicCarbonStockChangeManagementChange.py,sha256=D-4h4a8Ob_radqS6Gj3K8eLqTeXJrFIbfO9viusd6Pc,27585
@@ -258,15 +262,18 @@ hestia_earth/models/ipcc2019/no3ToGroundwaterOrganicFertiliser.py,sha256=px2SN-u
258
262
  hestia_earth/models/ipcc2019/noxToAirInorganicFertiliser.py,sha256=fmmFgjtvOD2TrrLY03jYly_KvDnCsAXqhL_tmZQQt-A,4480
259
263
  hestia_earth/models/ipcc2019/noxToAirOrganicFertiliser.py,sha256=9dx_MRTwJGxJRq6mj2EJQMdQ2w6j7lw0fQk0If_cIGc,4152
260
264
  hestia_earth/models/ipcc2019/organicCarbonPerHa.py,sha256=iRUSVxMpBGgsVDkuBABPKI4Khr5jIpAwuBe66c1PeV0,8658
261
- 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
262
266
  hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_2_utils.py,sha256=A84r6u45HFk5jEb2nTWGTFTwX1qjq8F6qwkNUuiyH48,63542
263
- hestia_earth/models/ipcc2019/organicCarbonPerHa_utils.py,sha256=jIhRks8ewCtQNIIN89N_4A4Tp529YMQnk4YmZV6FOCY,10668
264
- hestia_earth/models/ipcc2019/pastureGrass.py,sha256=4ZPbLlaIVf4-_ItoLU8fFhRhkWIUFIOcX2isSUOtLco,9550
265
- 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
266
270
  hestia_earth/models/ipcc2019/utils.py,sha256=MSDMu15D9DnilFUgi4_6jYXC0FaKso3OODauGTMB6hs,6229
267
271
  hestia_earth/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
268
- hestia_earth/models/ipcc2019/animal/pastureGrass.py,sha256=fSsWwf6lBlro4DIwbcAHSv0L-UMFe-liljfNr-kXWYw,11476
269
- 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
270
277
  hestia_earth/models/ipcc2021/__init__.py,sha256=VTgGFKhwMmk_nuI1RRq0in27fHYVPBonlXlPK00K8no,409
271
278
  hestia_earth/models/ipcc2021/gwp100.py,sha256=v-DYU-11XnWI1Ns1GEiKrJqL3JafxvhTsLmuBuFcxJU,1021
272
279
  hestia_earth/models/jarvisAndPain1994/__init__.py,sha256=ercUwy29sV7oPIESj8UjsGB5lqiBCss9OZcbjxeeG8E,418
@@ -379,7 +386,7 @@ hestia_earth/models/linkedImpactAssessment/landTransformationFromPermanentPastur
379
386
  hestia_earth/models/linkedImpactAssessment/utils.py,sha256=dGwGc2d-8_WQElTpfyPmz5vQtL-LHQRmiZnCTuPXMDs,1876
380
387
  hestia_earth/models/mocking/__init__.py,sha256=n3Fkkrvh8zHNWiJZmnfQ7WZ91JRzAO9P6pSG1JpwtXo,687
381
388
  hestia_earth/models/mocking/mock_search.py,sha256=qgABw-sZK37XtsALKt8AHF2VJPUrZSnHv5Qj1Dn93oA,2405
382
- hestia_earth/models/mocking/search-results.json,sha256=Hq-CDpm39QU5BB1x3ncyXYj5_4aIUzywOmYsjTHpDLA,47243
389
+ hestia_earth/models/mocking/search-results.json,sha256=MG2gaJm0DPR-7nRYr3IN5_cRvNcquom-gY02_5hMP5k,53136
383
390
  hestia_earth/models/pooreNemecek2018/__init__.py,sha256=nPboL7ULJzL5nJD5q7q9VOZt_fxbKVm8fmn1Az5YkVY,417
384
391
  hestia_earth/models/pooreNemecek2018/aboveGroundCropResidueTotal.py,sha256=Qt-mel4dkhK6N5uUOutNOinCTFjbjtGzITaaI0LvYc4,2396
385
392
  hestia_earth/models/pooreNemecek2018/belowGroundCropResidue.py,sha256=JT0RybbvWVlo01FO8K0Yj41HrEaJT3Kj1xfayr2X-xw,2315
@@ -408,6 +415,7 @@ hestia_earth/models/pooreNemecek2018/saplings.py,sha256=LS0zepV51-LlVmPBAjj5nlfg
408
415
  hestia_earth/models/pooreNemecek2018/utils.py,sha256=to2vtONKCbuG1gVSDvsUcG7EnlahELfG_57gzIAHlv0,1710
409
416
  hestia_earth/models/poschEtAl2008/__init__.py,sha256=nvyyGglxCTV4PpxcOjY7jJb0v8Bjzj435Zt1j6VcryM,414
410
417
  hestia_earth/models/poschEtAl2008/terrestrialAcidificationPotentialAccumulatedExceedance.py,sha256=gbD8fgvdHANXsuPPWRx4Flcqhk3fPD5ROrrb2LMgmS8,1279
418
+ hestia_earth/models/poschEtAl2008/terrestrialEutrophicationPotentialAccumulatedExceedance.py,sha256=X1CixghiqYiE1N-sWhXuFcy9nxCA2RdBiClFAgUWTgw,1281
411
419
  hestia_earth/models/recipe2016Egalitarian/__init__.py,sha256=OvZoSgfaMe6DWIdqr-Sx3ouzXlp994oro7Mi0Xid18Q,422
412
420
  hestia_earth/models/recipe2016Egalitarian/damageToFreshwaterEcosystemsSpeciesYear.py,sha256=b1UZAsy3yGlHYxH2YhBhhSnjm5zzQl8Z32DcQBjgWNE,1123
413
421
  hestia_earth/models/recipe2016Egalitarian/damageToHumanHealth.py,sha256=dJ8WinGe52wFQCMKtT_B7c1MFM_GbBo8aqfw0n2pw94,1087
@@ -543,16 +551,16 @@ hestia_earth/models/utils/aggregated.py,sha256=sz6usleZmo_tC_hIvmGgYsX8-H0dulXmm
543
551
  hestia_earth/models/utils/animalProduct.py,sha256=M5IunAKGY6oZv3j1Ascl34ywyeLWApqOIlBzbtlA2FE,721
544
552
  hestia_earth/models/utils/aquacultureManagement.py,sha256=dxrbC1Xf140cohxTbSw6TxLAnAASWTdNZwBBam4yQnw,171
545
553
  hestia_earth/models/utils/array_builders.py,sha256=0_Ik0gKoh1QBijyb-55odh8_dIs-CWQ3lgUN1Hnc4Y8,18749
546
- hestia_earth/models/utils/blank_node.py,sha256=WA3cb3QQ0HeCPwao4VDBXp5OssXrg-QElr_14HOUHa4,44499
554
+ hestia_earth/models/utils/blank_node.py,sha256=YlHyxirCIt7PGEBJoal7cOXzegWbX9X3cpknKEznlQc,45238
547
555
  hestia_earth/models/utils/completeness.py,sha256=2-GusD9UycobDZq8y5jar0ZcOjyqnSbzPRT_5XMc4YA,1259
548
556
  hestia_earth/models/utils/constant.py,sha256=7wn5LBdsqlLdCrPaVASYjsxNtbaOSdqVWKedOFgyzfY,3249
549
- hestia_earth/models/utils/crop.py,sha256=kG054fryqPSBpmzvJFBy_CLiOdjrt7RMk5uTItO5ADg,2246
557
+ hestia_earth/models/utils/crop.py,sha256=5KigEHd15nT8O9_1woxKJF5rEWiSkIkJqDAXet8BB9g,2383
550
558
  hestia_earth/models/utils/cropResidue.py,sha256=_0Q35CrliJeo31xGHsPWe8A2oHxijdIsOrf3gBEqhlA,612
551
559
  hestia_earth/models/utils/cropResidueManagement.py,sha256=nIDFjf39rDD10UHSVudfDyu-EiL261g8jyrgS-2aDKw,347
552
560
  hestia_earth/models/utils/currency.py,sha256=f_ArJANb--pZq4LL49SXQ1AMX_oKroqwBXKRRQqZwsM,578
553
561
  hestia_earth/models/utils/cycle.py,sha256=W-VIReb1OVooV6EIj-P6gUlr-W17_6USdnnj4ihMTTc,16741
554
562
  hestia_earth/models/utils/descriptive_stats.py,sha256=qOyG8_TpWYmaxZ0h99n9L71gDLLiVMrMf0ChtxnZLjw,8559
555
- hestia_earth/models/utils/ecoClimateZone.py,sha256=NHFt-A9EiWXC6tUNIxkgOWUZOjj4I4uwJIP9ddDZegw,1112
563
+ hestia_earth/models/utils/ecoClimateZone.py,sha256=A3ZtF_B2wr6v7clbVi0zWQ-bOXRoOKq4vGq8mhNf9Ec,4316
556
564
  hestia_earth/models/utils/emission.py,sha256=5Dz8Z4P6QXbYSvOzVcqJy3R_oZMrp77_Iwj5xZsxsKc,3769
557
565
  hestia_earth/models/utils/excretaManagement.py,sha256=NuWPQjFZxMVt9sYgBjcqhGWCFk_OKb3sA9Ovcff3fRQ,428
558
566
  hestia_earth/models/utils/feedipedia.py,sha256=ImUAURcwJDtSvu1s4MDeM1VpbU8mVTp9jh9ENNOB0Mw,3515
@@ -569,8 +577,8 @@ hestia_earth/models/utils/organicFertiliser.py,sha256=2HY-a0EBzUw4DkEAXClLMXVCEZ
569
577
  hestia_earth/models/utils/pesticideAI.py,sha256=6f8b-dFm3qr-eY049_eOvj_iDk4XBam61csozdDAvyA,2361
570
578
  hestia_earth/models/utils/practice.py,sha256=tNadOzsrNlCEt801B815XaruJXzZ5yPASam7B3sWpXE,1091
571
579
  hestia_earth/models/utils/product.py,sha256=DhDgiReR8k9n9aaRM2xk3PIY3nfoE1ISKg9pKsBVzVQ,10143
572
- hestia_earth/models/utils/productivity.py,sha256=bUBVCZInGqHuHZvHDSYPQkjWXQxOtTjEk-1-f_BsFOo,594
573
- 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
574
582
  hestia_earth/models/utils/site.py,sha256=zEj2PtIghk-L_vVJidlXM6_ed7HTc2-ogP0sQSh49vw,3874
575
583
  hestia_earth/models/utils/source.py,sha256=Y-CcO5Y3q5Hz4A4RdX35C1EUjL9w1NKnOrzVfOWQ7nU,1748
576
584
  hestia_earth/models/utils/temperature.py,sha256=ljlG4-yCgFFb6LRZweb18cZKLrr7K2mqd4E4Hz_D1f8,476
@@ -640,10 +648,11 @@ tests/models/cycle/test_residueBurnt.py,sha256=eBAzGR1210cBYH_s6oI1yCG6tVKUj9gGs
640
648
  tests/models/cycle/test_residueIncorporated.py,sha256=esB_wnpf6W0PB24HW0YUgtfD9mxLDIY22eNVD4WAYFA,1719
641
649
  tests/models/cycle/test_residueLeftOnField.py,sha256=_8CoSp-7z3BBLGN5Hv067FRYz8yDFw5fi_Cu5n6Rl3g,1290
642
650
  tests/models/cycle/test_residueRemoved.py,sha256=R5v8lwGyz_4a9_X_LnugBEmgVgcisS5LTM5GFCtKIco,1278
643
- tests/models/cycle/test_siteDuration.py,sha256=43Hjb0f2lXCRGqj-UmfLVmk7OGJswawtcA2q5wlffXk,1712
651
+ tests/models/cycle/test_siteDuration.py,sha256=x98shgDOAPp7Bf8j7R251qzn4oVZyqmtlmwcoG2nVwE,2358
644
652
  tests/models/cycle/test_siteUnusedDuration.py,sha256=5h9R3guw6ErU_sE5omoiK9Fpke74SmQWsJYWYURE9Fo,1532
645
653
  tests/models/cycle/test_startDate.py,sha256=-U1_XIx8v5zxK3oK5fCIIsS7GFKymNh3m0SgJ0J2iZ8,1223
646
654
  tests/models/cycle/test_startDateDefinition.py,sha256=42BmsT1I7Jq_YMVN-VNU7a0fIZ2w3i5jgwy4H_r4dNM,920
655
+ tests/models/cycle/test_stockingDensityAnimalHousingAverage.py,sha256=Pj3rxJNXF0rmGjRomZOHV6ZVngypzbVIGwAHbVIOLFI,1286
647
656
  tests/models/cycle/test_transformations.py,sha256=Ws_8KhNqeHogGFXTQ4qZXQ5Ph2I3ZUaY0yO1itFUHLk,464
648
657
  tests/models/cycle/test_unknownPreSeasonWaterRegime.py,sha256=4JSSpDvBQEQrDoytNVzuIcm9UVio4TzZpZm52iMWBVA,1220
649
658
  tests/models/cycle/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -794,9 +803,12 @@ tests/models/ipcc2013ExcludingFeedbacks/test_gwp100.py,sha256=Od9ALNCag5pCVJnp2p
794
803
  tests/models/ipcc2013IncludingFeedbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
795
804
  tests/models/ipcc2013IncludingFeedbacks/test_gwp100.py,sha256=4HydDKiZDpxtgqgjpAg4cTVQu-jM-_tdDdJFmNNrwSc,875
796
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
797
808
  tests/models/ipcc2019/test_aboveGroundCropResidueTotal.py,sha256=AADYB1g9vftH7YSvNyihHu8GQOiA7VhXxVQ-oJQNT88,2581
798
809
  tests/models/ipcc2019/test_belowGroundCropResidue.py,sha256=HUxHZLBdLX_E_oc3wqTwNtGY4M4yCWcxx-1iBYPF7_s,2576
799
810
  tests/models/ipcc2019/test_carbonContent.py,sha256=_GWF5nGy-PxiqBZ5V7W_sHMz75YRzmxr79R-sZZg7yk,4146
811
+ tests/models/ipcc2019/test_ch4ToAirAquacultureSystems.py,sha256=o7bHOS4JkwexRrDhLzpfr8nyYCctgRL32YZbam5RBrI,1891
800
812
  tests/models/ipcc2019/test_ch4ToAirEntericFermentation.py,sha256=3Hv86L4X_Va2mZL4KI-36AV00z-KBbKo0cb2ABg6Rv8,7928
801
813
  tests/models/ipcc2019/test_ch4ToAirExcreta.py,sha256=e58NXmBW2SNVLUqQO9A66Xq6jiGTyhdFZDZk51JApF8,2902
802
814
  tests/models/ipcc2019/test_ch4ToAirFloodedRice.py,sha256=FAp5b45WdX5Ih4yGUOZ4CmVD8smW1Lw1tnulx9AKVBI,1980
@@ -823,12 +835,14 @@ tests/models/ipcc2019/test_no3ToGroundwaterOrganicFertiliser.py,sha256=e1ZViD12q
823
835
  tests/models/ipcc2019/test_noxToAirInorganicFertiliser.py,sha256=NZBSBJLM_j2PEpHRON2ysgKNF8x5sHfQVoAKQdGsfzk,1537
824
836
  tests/models/ipcc2019/test_noxToAirOrganicFertiliser.py,sha256=LR5pjV5vRbgSSQAw8kYRp_ij4CHInzgaDS6EggQuBiw,1104
825
837
  tests/models/ipcc2019/test_organicCarbonPerHa.py,sha256=9i1xEv5QEc8C9e0c0iVGwLOWisZVYwwlnAsEVmMv5Lg,13245
826
- 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
827
839
  tests/models/ipcc2019/test_organicCarbonPerHa_tier_2_utils.py,sha256=6YXLqH5wz_cvYlJjCacCv9UTYpnXYxURLKQz6N9ZMPg,6807
828
840
  tests/models/ipcc2019/test_organicCarbonPerHa_utils.py,sha256=Zd2QlN_Q3k9djuByOH62A00tryVzlvNtsd46N79TTeU,1778
829
- tests/models/ipcc2019/test_pastureGrass.py,sha256=xcFXpszkqgeJImWOp-JlJxpcSHQKC-Pi0zdaKfai4a4,2660
841
+ tests/models/ipcc2019/test_pastureGrass.py,sha256=mKx8NnTtMT9TrXxRNLv73wD1TWBaiRZzA1xh2ukb-HI,2667
830
842
  tests/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
831
- 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
832
846
  tests/models/ipcc2019/animal/test_weightAtMaturity.py,sha256=Tss9bTVz66yXVEBZT31KMm6gd45B9E1DJLqwYArPuYY,665
833
847
  tests/models/ipcc2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
834
848
  tests/models/ipcc2021/test_gwp100.py,sha256=JRklKMSg-OXopb9ZufGgl94deuMuJSsfNXRZDBtOZrE,1119
@@ -966,6 +980,7 @@ tests/models/pooreNemecek2018/test_rotationDuration.py,sha256=tD2E91beAXdyT-xf5Q
966
980
  tests/models/pooreNemecek2018/test_saplings.py,sha256=uJyUWUocvrcPndv-YFLs0WfxGEAG1kM8HEWZwutRhvs,1621
967
981
  tests/models/poschEtAl2008/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
968
982
  tests/models/poschEtAl2008/test_terrestrialAcidificationPotentialAccumulatedExceedance.py,sha256=NJ_W-ypWwjBuGiaXUeJvaQ9ZufoqlSWk1NYE9tt94ZA,1612
983
+ tests/models/poschEtAl2008/test_terrestrialEutrophicationPotentialAccumulatedExceedance.py,sha256=m-AUbdVDBEFEcmNOv13cYvNZQgDMYhHX33kfWywXQWM,1485
969
984
  tests/models/recipe2016Egalitarian/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
970
985
  tests/models/recipe2016Egalitarian/test_damageToFreshwaterEcosystemsSpeciesYear.py,sha256=OC8WjzPuyz5fd_E-LxFbOg3sasVc6LMJ9UK-jAKO7LU,697
971
986
  tests/models/recipe2016Egalitarian/test_damageToHumanHealth.py,sha256=fWjzC9r6itihyW6AdmDkotbhML_0KavXernOpnK1SmY,677
@@ -1100,6 +1115,7 @@ tests/models/utils/test_cropResidueManagement.py,sha256=RQt8lexeJzCyxZceIutgDpw7
1100
1115
  tests/models/utils/test_currency.py,sha256=BPsojPsY9QW2aj8vgbjkPQXU8GU6wDwwtPZ3HdC4KTU,277
1101
1116
  tests/models/utils/test_dataCompleteness.py,sha256=mW6rA7ddhtjZsLxwo5xDnvBdxmqTsivy4RTIU-2Lvk0,1713
1102
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
1103
1119
  tests/models/utils/test_emission.py,sha256=3KfhQGV5Vh_WXTPt6McvZ2dBp9TVM7eAUTLgRHkBOvU,2146
1104
1120
  tests/models/utils/test_feedipedia.py,sha256=S7c1W4bJ5xWXPh42pPbl3R7lDX_iEeaEtFaPXgB7hgE,906
1105
1121
  tests/models/utils/test_impact_assessment.py,sha256=qEm4Y5txWnkSJKP1puvwgKFXkv06c7vUKmwDyIJxkdc,1114
@@ -1116,8 +1132,8 @@ tests/models/utils/test_source.py,sha256=_Ol-OrJs2Tt9iZAZ_RY2qRuSbnE4yz5OuEGkDSb
1116
1132
  tests/models/utils/test_term.py,sha256=M5Sa26v2gzQYbZ4H_fo7DspnaCx__-WtL-MULGapCWk,3509
1117
1133
  tests/models/webbEtAl2012AndSintermannEtAl2012/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1118
1134
  tests/models/webbEtAl2012AndSintermannEtAl2012/test_nh3ToAirOrganicFertiliser.py,sha256=qi2FNXS5Af2WDtm7nq_FsprH3BfCF0XxnE0XHmC4aIY,2244
1119
- hestia_earth_models-0.64.1.dist-info/LICENSE,sha256=AC7h7GAgCZGJK_Tzh6LUCrML9gQEfowWwecEw2w54QM,1154
1120
- hestia_earth_models-0.64.1.dist-info/METADATA,sha256=2I5vnl3mTZYWnqfJFd_A_KY0KomvUj2GMXm7GLaEPGo,3343
1121
- hestia_earth_models-0.64.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
1122
- hestia_earth_models-0.64.1.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
1123
- hestia_earth_models-0.64.1.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)