hestia-earth-models 0.59.7__py3-none-any.whl → 0.60.1__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 (39) hide show
  1. hestia_earth/models/cache_sites.py +40 -16
  2. hestia_earth/models/ipcc2019/animal/__init__.py +0 -0
  3. hestia_earth/models/ipcc2019/animal/pastureGrass.py +298 -0
  4. hestia_earth/models/ipcc2019/{co2ToAirSoilCarbonStockChangeManagementChange.py → co2ToAirSoilOrganicCarbonStockChangeManagementChange.py} +2 -2
  5. hestia_earth/models/ipcc2019/pastureGrass.py +73 -447
  6. hestia_earth/models/ipcc2019/pastureGrass_utils.py +415 -0
  7. hestia_earth/models/mocking/search-results.json +215 -207
  8. hestia_earth/models/site/pre_checks/cache_geospatialDatabase.py +16 -4
  9. hestia_earth/models/utils/completeness.py +17 -14
  10. hestia_earth/models/utils/feedipedia.py +23 -23
  11. hestia_earth/models/utils/property.py +3 -1
  12. hestia_earth/models/version.py +1 -1
  13. {hestia_earth_models-0.59.7.dist-info → hestia_earth_models-0.60.1.dist-info}/LICENSE +1 -1
  14. {hestia_earth_models-0.59.7.dist-info → hestia_earth_models-0.60.1.dist-info}/METADATA +1 -1
  15. {hestia_earth_models-0.59.7.dist-info → hestia_earth_models-0.60.1.dist-info}/RECORD +39 -34
  16. tests/models/cycle/animal/input/test_properties.py +3 -1
  17. tests/models/cycle/animal/test_properties.py +4 -2
  18. tests/models/cycle/input/test_properties.py +3 -1
  19. tests/models/cycle/product/test_properties.py +2 -1
  20. tests/models/cycle/test_coldCarcassWeightPerHead.py +1 -0
  21. tests/models/cycle/test_coldDressedCarcassWeightPerHead.py +1 -0
  22. tests/models/cycle/test_energyContentLowerHeatingValue.py +1 -0
  23. tests/models/cycle/test_feedConversionRatio.py +10 -0
  24. tests/models/cycle/test_readyToCookWeightPerHead.py +1 -0
  25. tests/models/ipcc2006/test_n2OToAirCropResidueDecompositionDirect.py +4 -1
  26. tests/models/ipcc2019/animal/__init__.py +0 -0
  27. tests/models/ipcc2019/animal/test_pastureGrass.py +45 -0
  28. tests/models/ipcc2019/test_ch4ToAirEntericFermentation.py +32 -8
  29. tests/models/ipcc2019/{test_co2ToAirSoilCarbonStockChangeManagementChange.py → test_co2ToAirSoilOrganicCarbonStockChangeManagementChange.py} +1 -1
  30. tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionDirect.py +6 -1
  31. tests/models/ipcc2019/test_n2OToAirInorganicFertiliserDirect.py +6 -1
  32. tests/models/ipcc2019/test_n2OToAirOrganicFertiliserDirect.py +6 -1
  33. tests/models/ipcc2019/test_pastureGrass.py +32 -8
  34. tests/models/pooreNemecek2018/test_excretaKgN.py +5 -0
  35. tests/models/pooreNemecek2018/test_excretaKgVs.py +5 -0
  36. tests/models/pooreNemecek2018/test_no3ToGroundwaterSoilFlux.py +1 -0
  37. tests/models/test_cache_sites.py +10 -7
  38. {hestia_earth_models-0.59.7.dist-info → hestia_earth_models-0.60.1.dist-info}/WHEEL +0 -0
  39. {hestia_earth_models-0.59.7.dist-info → hestia_earth_models-0.60.1.dist-info}/top_level.txt +0 -0
@@ -47,6 +47,14 @@ def cache_site_results(results: list, collections: list, area_size: int = None):
47
47
  )
48
48
 
49
49
 
50
+ def _is_collection_by_year(collection: dict):
51
+ return any([
52
+ 'year' in collection,
53
+ 'start_date' in collection,
54
+ 'end_date' in collection
55
+ ])
56
+
57
+
50
58
  def _extend_collection_by_month(year: int):
51
59
  return [{
52
60
  'start_date': first_day_of_month(year, month).strftime('%Y-%m-%d'),
@@ -77,10 +85,12 @@ def _extend_collections(values: list, years: list = []):
77
85
  ])
78
86
 
79
87
 
80
- def list_collections(years: list = [], include_region: bool = False):
88
+ def list_collections(years: list = [], include_region: bool = False, years_only: bool = False):
81
89
  ee_params = list_ee_params()
82
90
  # only cache `raster` results as can be combined in a single query
83
91
  rasters = [value for value in ee_params if value.get('params').get('ee_type') == 'raster']
92
+ rasters = _extend_collections(rasters, years or [])
93
+ rasters = [raster for raster in rasters if not years_only or _is_collection_by_year(raster)]
84
94
 
85
95
  vectors = [
86
96
  value for value in ee_params if all([
@@ -88,8 +98,10 @@ def list_collections(years: list = [], include_region: bool = False):
88
98
  include_region or not value.get('params').get('collection', '').startswith('gadm36')
89
99
  ])
90
100
  ]
101
+ # no vectors are running with specific years
102
+ vectors = [] if years_only else _extend_collections(vectors)
91
103
 
92
- return (_extend_collections(rasters, years or []), _extend_collections(vectors))
104
+ return (rasters, vectors)
93
105
 
94
106
 
95
107
  def _cache_results(site: dict, area_size: float):
@@ -113,11 +125,11 @@ def _cache_results(site: dict, area_size: float):
113
125
  return cache_site_results(raster_results + vector_results, rasters + vectors, area_size)
114
126
 
115
127
 
116
- def _should_run(site: dict, area_size: float = None):
128
+ def _should_run(site: dict, area_size: float = None, check_has_cache: bool = True):
117
129
  area_size = area_size or get_area_size(site)
118
130
  contains_geospatial_data = has_geospatial_data(site)
119
131
  contains_coordinates = has_coordinates(site)
120
- has_cache = cached_value(site, CACHE_VALUE) is not None
132
+ has_cache = check_has_cache and cached_value(site, CACHE_VALUE) is not None
121
133
 
122
134
  debugValues(site,
123
135
  area_size=area_size,
@@ -1,7 +1,15 @@
1
1
  from typing import Union
2
- from hestia_earth.schema import TermTermType
2
+ from hestia_earth.schema import Completeness, TermTermType
3
3
  from hestia_earth.utils.api import download_hestia
4
4
 
5
+ completeness_fields = Completeness().required
6
+
7
+
8
+ def _completeness_term_type(cycle: dict, term: Union[str, dict, TermTermType]):
9
+ return (
10
+ term if term in cycle.get('completeness', {}) or term in completeness_fields else None
11
+ ) if isinstance(term, str) else None if isinstance(term, dict) else term.value
12
+
5
13
 
6
14
  def _get_term_type_completeness(cycle: dict, term: Union[str, dict]):
7
15
  term = download_hestia(term) if isinstance(term, str) else term
@@ -9,21 +17,16 @@ def _get_term_type_completeness(cycle: dict, term: Union[str, dict]):
9
17
  return cycle.get('completeness', {}).get(term_type, False)
10
18
 
11
19
 
12
- def _is_term_type_complete(cycle: dict, term: Union[str, dict, TermTermType]):
13
- term_type = (
14
- term if term in cycle.get('completeness', {}) else None
15
- ) if isinstance(term, str) else None if isinstance(term, dict) else term.value
16
- completeness = _get_term_type_completeness(cycle, term) if term_type is None else (
20
+ def _completeness_value(cycle: dict, term: Union[str, dict, TermTermType]):
21
+ term_type = _completeness_term_type(cycle, term)
22
+ return _get_term_type_completeness(cycle, term) if term_type is None else (
17
23
  cycle.get('completeness', {}).get(term_type, False)
18
24
  )
19
- return completeness is True
25
+
26
+
27
+ def _is_term_type_complete(cycle: dict, term: Union[str, dict, TermTermType]):
28
+ return _completeness_value(cycle, term) is True
20
29
 
21
30
 
22
31
  def _is_term_type_incomplete(cycle: dict, term: Union[str, dict, TermTermType]):
23
- term_type = (
24
- term if term in cycle.get('completeness', {}) else None
25
- ) if isinstance(term, str) else None if isinstance(term, dict) else term.value
26
- completeness = _get_term_type_completeness(cycle, term) if term_type is None else (
27
- cycle.get('completeness', {}).get(term_type, False)
28
- )
29
- return completeness is False
32
+ return _completeness_value(cycle, term) is False
@@ -6,12 +6,6 @@ from hestia_earth.models.log import logShouldRun
6
6
  from .property import _new_property
7
7
 
8
8
  DRY_MATTER_TERM_ID = 'dryMatter'
9
- DM_PROP_MAPPING = {
10
- 'value': 'Avg',
11
- 'sd': 'SD',
12
- 'min': 'Min',
13
- 'max': 'Max'
14
- }
15
9
 
16
10
 
17
11
  def get_feedipedia_properties():
@@ -26,34 +20,40 @@ def get_feedipedia_properties():
26
20
  def _dm_property(term_id: str, property_values: dict, dm_property_values: dict, dry_matter_property: dict):
27
21
  blank_node = _new_property(term_id)
28
22
  blank_node_data = {}
29
- for hestia_key, lookup_key in DM_PROP_MAPPING.items():
30
- new_dm_value = safe_parse_float(dry_matter_property.get(hestia_key))
31
- old_dm_value = safe_parse_float(dm_property_values.get(lookup_key))
32
- old_property_value = safe_parse_float(property_values.get(lookup_key))
23
+ for property_key in property_values.keys():
24
+ new_dm_value = safe_parse_float(dry_matter_property.get(property_key))
25
+ old_dm_value = safe_parse_float(dm_property_values.get(property_key))
26
+ old_property_value = safe_parse_float(property_values.get(property_key))
33
27
  if all([new_dm_value, old_dm_value, old_property_value]):
34
- blank_node_data[hestia_key] = round(old_property_value / old_dm_value * new_dm_value, 2)
28
+ blank_node_data[property_key] = round(old_property_value / old_dm_value * new_dm_value, 2)
35
29
  return (blank_node | blank_node_data) if blank_node_data else None
36
30
 
37
31
 
38
- def _parse_properties(value: str):
39
- values = value.split(';')
40
- return {value.split(':')[0]: value.split(':')[1] for value in values}
32
+ def _map_properties(lookup, term_id: str, column_prefix: str):
33
+ value = get_table_value(lookup, 'termid', term_id, column_name(column_prefix))
34
+ sd = get_table_value(lookup, 'termid', term_id, column_name(f"{column_prefix}-sd"))
35
+ min = get_table_value(lookup, 'termid', term_id, column_name(f"{column_prefix}-min"))
36
+ max = get_table_value(lookup, 'termid', term_id, column_name(f"{column_prefix}-max"))
37
+ return {'value': value, 'sd': sd, 'min': min, 'max': max}
41
38
 
42
39
 
43
40
  def rescale_properties_from_dryMatter(model: str, node: dict, blank_nodes: list):
44
41
  properties = get_feedipedia_properties()
42
+ # download all to save time
43
+ term_types = [blank_node.get('term', {}).get('termType') for blank_node in blank_nodes]
44
+ term_types_lookups = {term_type: download_lookup(f"{term_type}-property.csv") for term_type in term_types}
45
45
 
46
- def exec_property(input: dict, property_id: str, dry_matter_property: dict):
47
- term_id = input.get('term', {}).get('@id')
48
- term_type = input.get('term', {}).get('termType')
49
- lookup = download_lookup(f"{term_type}-property.csv")
50
-
51
- dm_property_value = get_table_value(lookup, 'termid', term_id, column_name(DRY_MATTER_TERM_ID))
52
- property_value = get_table_value(lookup, 'termid', term_id, column_name(property_id))
46
+ def exec_property(blank_node: dict, property_id: str, dry_matter_property: dict):
47
+ term_id = blank_node.get('term', {}).get('@id')
48
+ term_type = blank_node.get('term', {}).get('termType')
49
+ lookup = term_types_lookups[term_type]
53
50
 
54
51
  return _dm_property(
55
- property_id, _parse_properties(property_value), _parse_properties(dm_property_value), dry_matter_property
56
- ) if all([property_id, property_value, dm_property_value]) else None
52
+ property_id,
53
+ _map_properties(lookup, term_id, column_prefix=property_id),
54
+ _map_properties(lookup, term_id, column_prefix=DRY_MATTER_TERM_ID),
55
+ dry_matter_property
56
+ ) if all([property_id]) else None
57
57
 
58
58
  def exec(blank_node: dict):
59
59
  term_id = blank_node.get('term', {}).get('@id')
@@ -94,7 +94,9 @@ def node_property_lookup_value(model: str, term: dict, prop_id: str, default=Non
94
94
  lookup = download_lookup(lookup_name)
95
95
  term_id = term.get('@id')
96
96
  lookup_value = get_table_value(lookup, 'termid', term_id, column_name(prop_id))
97
- value = extract_grouped_data(lookup_value, 'Avg') if 'Avg' in lookup_value else lookup_value
97
+ value = extract_grouped_data(lookup_value, 'Avg') if (
98
+ isinstance(lookup_value, str) and 'Avg' in lookup_value
99
+ ) else lookup_value
98
100
  debugMissingLookup(lookup_name, 'termid', term_id, prop_id, value, model=model, term=term_id, **log_args)
99
101
  return safe_parse_float(value, default=None)
100
102
  except Exception:
@@ -1 +1 @@
1
- VERSION = '0.59.7'
1
+ VERSION = '0.60.1'
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019-2023 Harmonized Environmental Storage and Tracking of the Impacts of Agriculture (Hestia) Project
3
+ Copyright (c) 2019-2024 Harmonised Environmental Storage and Tracking of the Impacts of Agriculture (HESTIA) Project
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hestia-earth-models
3
- Version: 0.59.7
3
+ Version: 0.60.1
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
@@ -1,9 +1,9 @@
1
1
  hestia_earth/__init__.py,sha256=G-d438vPx7m_ks5e9XTtM3u7LDRO5dSSukibukWmyPM,56
2
2
  hestia_earth/models/__init__.py,sha256=qEFeq3yuf3lQKVseALmL8aPM8fpCS54B_5pry00M3hk,76
3
- hestia_earth/models/cache_sites.py,sha256=tPuUiSVSwKfTueuinDsiVRAbxIdDmpJ8V0AOdMOX_yE,4783
3
+ hestia_earth/models/cache_sites.py,sha256=KQp9cUKE-aIcYJoMWEtKFYS8gBFfsx5LKQhqoWpUSoM,6065
4
4
  hestia_earth/models/log.py,sha256=b63I3qyTtQs17xxbq8RI0Fv2lvZ1oDZ9k0njhxqiFFk,3459
5
5
  hestia_earth/models/requirements.py,sha256=znNZJAhwX2iYiKcAQXPftY7z_1MsNa0QxCXkXyHm_U0,17363
6
- hestia_earth/models/version.py,sha256=YdTI02fIcHtygnhw1S3ojSKc9kpReMFy_DlUYJO0yXY,19
6
+ hestia_earth/models/version.py,sha256=jkZGW0WUYUex4V7qv5qCaUMLtL80ETv20-KbHpaM3KA,19
7
7
  hestia_earth/models/agribalyse2016/__init__.py,sha256=WvK0qCQbnYtg9oZxrACd1wGormZyXibPtpCnIQeDqbw,415
8
8
  hestia_earth/models/agribalyse2016/fuelElectricity.py,sha256=mrh8seYSYdTgcMDCETLiknuPeJehg071YoG4UiyW0yU,4404
9
9
  hestia_earth/models/agribalyse2016/machineryInfrastructureDepreciatedAmountPerCycle.py,sha256=_Rbngu0DzHKa62JwBl58ZC_ui1zLF2que_nB7ukhOQc,3392
@@ -229,7 +229,7 @@ hestia_earth/models/ipcc2019/ch4ToAirEntericFermentation.py,sha256=khX90Njkmlvos
229
229
  hestia_earth/models/ipcc2019/ch4ToAirExcreta.py,sha256=IzYHdnzT8Z-WQGoZIt9-O98VqriA5rKr38He_TbYadk,6723
230
230
  hestia_earth/models/ipcc2019/ch4ToAirFloodedRice.py,sha256=f3orp6tDZ7f8bE9-lLZC0H_SgCKsDASAlphVRAHKJ0I,6885
231
231
  hestia_earth/models/ipcc2019/co2ToAirLimeHydrolysis.py,sha256=7z0zdqiiWQwkyJCgSNMoK2mft3cJkTRlqwKrMuSKdWI,2454
232
- hestia_earth/models/ipcc2019/co2ToAirSoilCarbonStockChangeManagementChange.py,sha256=lW3OZcIO3QEifrs_g_K_aytSXvpPFN51vYVuZRGIdDc,25367
232
+ hestia_earth/models/ipcc2019/co2ToAirSoilOrganicCarbonStockChangeManagementChange.py,sha256=kWrWxhr-48jmbyt57EIjth8IWsl5-Yt1I-uTBSUqFuA,25381
233
233
  hestia_earth/models/ipcc2019/co2ToAirUreaHydrolysis.py,sha256=071H3ykjzJFW2K5PKvbAaeIj0aL8LTzMiG_pIeYEpEc,3520
234
234
  hestia_earth/models/ipcc2019/croppingDuration.py,sha256=_jlFrTNDOARH2_g8s4dzuaCoLHSX2BHzSQd3uuQN32Y,3173
235
235
  hestia_earth/models/ipcc2019/ligninContent.py,sha256=wp5EbCthCDAKyvPBfZULS9-uKEY58TQQ8ey1pf-juv8,7267
@@ -251,8 +251,11 @@ hestia_earth/models/ipcc2019/no3ToGroundwaterOrganicFertiliser.py,sha256=zOhp6Nh
251
251
  hestia_earth/models/ipcc2019/noxToAirInorganicFertiliser.py,sha256=D-UyzY55mOiIcXRzEtvPY-r1bDFgb9YqA08SmHsQeNA,4226
252
252
  hestia_earth/models/ipcc2019/noxToAirOrganicFertiliser.py,sha256=SVgVNp76bIv9oUjrZZuI6xYLo4Gw2DRU5tbp14gydOE,3911
253
253
  hestia_earth/models/ipcc2019/organicCarbonPerHa.py,sha256=omxrtnAZ58qHQYIhi38R7VFn7SRzf8Kk89KgP0VELFQ,141507
254
- hestia_earth/models/ipcc2019/pastureGrass.py,sha256=ntgDsXYIJA3xN5Cn2VzlZ2zDItTb6jXwONOW4VSfFqA,23177
254
+ hestia_earth/models/ipcc2019/pastureGrass.py,sha256=TNKK3P0s0euV1jnZTFVxomed5G74R2dAHjKnoGZSS0g,8708
255
+ hestia_earth/models/ipcc2019/pastureGrass_utils.py,sha256=nUJYYkovzF7QD4LeUqhV5mBYFKdrhxeG4gyPRv0Xpuk,16002
255
256
  hestia_earth/models/ipcc2019/utils.py,sha256=MSDMu15D9DnilFUgi4_6jYXC0FaKso3OODauGTMB6hs,6229
257
+ hestia_earth/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
+ hestia_earth/models/ipcc2019/animal/pastureGrass.py,sha256=naNAVtNkij7NOBbycijklXHMPP-LB26QnrJV2bb8_Gw,10688
256
259
  hestia_earth/models/ipcc2021/__init__.py,sha256=VTgGFKhwMmk_nuI1RRq0in27fHYVPBonlXlPK00K8no,409
257
260
  hestia_earth/models/ipcc2021/gwp100.py,sha256=v-DYU-11XnWI1Ns1GEiKrJqL3JafxvhTsLmuBuFcxJU,1021
258
261
  hestia_earth/models/jarvisAndPain1994/__init__.py,sha256=ercUwy29sV7oPIESj8UjsGB5lqiBCss9OZcbjxeeG8E,418
@@ -353,7 +356,7 @@ hestia_earth/models/lcImpactCertainEffectsInfinite/damageToTerrestrialEcosystems
353
356
  hestia_earth/models/linkedImpactAssessment/__init__.py,sha256=d19wzr4GnWXpMWRhchqwp3S8txrUkpIWrGPwnWdXhjI,6236
354
357
  hestia_earth/models/mocking/__init__.py,sha256=kmSeOTSvurMUxw7Ajhf3G-SVPQ1NgmirMTk4TSOEicY,765
355
358
  hestia_earth/models/mocking/mock_search.py,sha256=V-ycVBTkJu7PP37Ivy_16hpKBV4aEtJb5S9DfChPNSU,2038
356
- hestia_earth/models/mocking/search-results.json,sha256=4jtf6WHW7XorahPkYbGLFzjW19pM4iSgBmjcPa-v18A,39322
359
+ hestia_earth/models/mocking/search-results.json,sha256=d8oBES7NajlmrvfYZUeyGhDJsOQIOXQlY4ky6lsmoZ8,39547
357
360
  hestia_earth/models/pooreNemecek2018/__init__.py,sha256=nPboL7ULJzL5nJD5q7q9VOZt_fxbKVm8fmn1Az5YkVY,417
358
361
  hestia_earth/models/pooreNemecek2018/aboveGroundCropResidueTotal.py,sha256=Qt-mel4dkhK6N5uUOutNOinCTFjbjtGzITaaI0LvYc4,2396
359
362
  hestia_earth/models/pooreNemecek2018/belowGroundCropResidue.py,sha256=JT0RybbvWVlo01FO8K0Yj41HrEaJT3Kj1xfayr2X-xw,2315
@@ -473,7 +476,7 @@ hestia_earth/models/site/measurement/value.py,sha256=7IhUbIj7n5vB7yXoNxXsWbliEJj
473
476
  hestia_earth/models/site/post_checks/__init__.py,sha256=CkExxesk1GuG8NjrbKfix1iDuVUgU-9i1ccM_X7MZn4,284
474
477
  hestia_earth/models/site/post_checks/cache.py,sha256=_MZsNsclecUdHDT2MsYx4cEsVUXydIasddgZNA6SU4k,284
475
478
  hestia_earth/models/site/pre_checks/__init__.py,sha256=fjv6nU5fiL-CLyaa-cBpiLB-xujgPzeK7i7ZJuTOjCI,394
476
- hestia_earth/models/site/pre_checks/cache_geospatialDatabase.py,sha256=K-6EvJvcBijo_gVeIlOtYsYwdM9iBVTBy0jOSmr4OL4,4831
479
+ hestia_earth/models/site/pre_checks/cache_geospatialDatabase.py,sha256=MoQ76e0S63uvoFhqBbhG0GuoJ9bZgX_vrXz2_Id44Jw,5290
477
480
  hestia_earth/models/site/pre_checks/cache_sources.py,sha256=RzvSgHJTpVkAB3mEvRju_irDQmdJRK7GUdU6PhS2Gaw,904
478
481
  hestia_earth/models/site/pre_checks/cache_years.py,sha256=qGwTaHlWxnVT7iVxXVcpJ-oG6M-VH4ZpCDTdTixUHR4,883
479
482
  hestia_earth/models/stehfestBouwman2006/__init__.py,sha256=EhvD4NK6oEPevusLb1WdYV3GT_fCtQx4gvdMhK_dEIQ,420
@@ -511,7 +514,7 @@ hestia_earth/models/utils/aggregated.py,sha256=sz6usleZmo_tC_hIvmGgYsX8-H0dulXmm
511
514
  hestia_earth/models/utils/animalProduct.py,sha256=M5IunAKGY6oZv3j1Ascl34ywyeLWApqOIlBzbtlA2FE,721
512
515
  hestia_earth/models/utils/aquacultureManagement.py,sha256=3uSTSMDNNPa26NTJGZCYwByv3QZVyxj6bh2aFCoBzHk,126
513
516
  hestia_earth/models/utils/blank_node.py,sha256=VviIxvHSTxKYr0KaWR56b2ro1WEN-BwKvQ5LndyWgks,40879
514
- hestia_earth/models/utils/completeness.py,sha256=gRl8LkAYmanEZf9ln8IrQPXtW1Ds75rvu1ST0g5-2zI,1246
517
+ hestia_earth/models/utils/completeness.py,sha256=2-GusD9UycobDZq8y5jar0ZcOjyqnSbzPRT_5XMc4YA,1259
515
518
  hestia_earth/models/utils/constant.py,sha256=5H7odhRwU_LmUhYwf8c1LsdqXSYbLWkuknvtRDqUBTQ,3194
516
519
  hestia_earth/models/utils/crop.py,sha256=S8UycHpkgx_TznW3Q7pchEMlCQ623T_SqU6V5fBLBLc,1520
517
520
  hestia_earth/models/utils/cropResidue.py,sha256=_0Q35CrliJeo31xGHsPWe8A2oHxijdIsOrf3gBEqhlA,612
@@ -521,7 +524,7 @@ hestia_earth/models/utils/cycle.py,sha256=F5dykDeHJfnSm6m7YCqQT3Ip3OZsAB-oipbKwb
521
524
  hestia_earth/models/utils/ecoClimateZone.py,sha256=NHFt-A9EiWXC6tUNIxkgOWUZOjj4I4uwJIP9ddDZegw,1112
522
525
  hestia_earth/models/utils/emission.py,sha256=AVp-ngrb4VHYT8BG1QA5EEb17edT3cLonsXV3cNm04U,1576
523
526
  hestia_earth/models/utils/excretaManagement.py,sha256=NuWPQjFZxMVt9sYgBjcqhGWCFk_OKb3sA9Ovcff3fRQ,428
524
- hestia_earth/models/utils/feedipedia.py,sha256=fqlpAwG_jbZAFPWJ-yUI7gwn0oq--1GLTlHLsCeBbPQ,3181
527
+ hestia_earth/models/utils/feedipedia.py,sha256=ImUAURcwJDtSvu1s4MDeM1VpbU8mVTp9jh9ENNOB0Mw,3515
525
528
  hestia_earth/models/utils/fuel.py,sha256=r1MKMMxg-PYiVlRutP83RuvY2rsdCQ1iN6ekSGGQGpA,1379
526
529
  hestia_earth/models/utils/impact_assessment.py,sha256=H1_cvLwC8nb3A5ckS9uvWrLqUDU_9i9BdQiPpn52xIg,6890
527
530
  hestia_earth/models/utils/indicator.py,sha256=fPq38ifd53xWbuOfoiVwiA0Nwa7jVPJLSAPpOMMil8Q,423
@@ -534,7 +537,7 @@ hestia_earth/models/utils/pesticideAI.py,sha256=oAQTUlgXnSJrBGvIphlmVcjx2gbCHH6k
534
537
  hestia_earth/models/utils/practice.py,sha256=tNadOzsrNlCEt801B815XaruJXzZ5yPASam7B3sWpXE,1091
535
538
  hestia_earth/models/utils/product.py,sha256=H9UqJNzTqtMWXDQnbRkZlTpv_hg4s-Tya469fBk8InA,10143
536
539
  hestia_earth/models/utils/productivity.py,sha256=bUBVCZInGqHuHZvHDSYPQkjWXQxOtTjEk-1-f_BsFOo,594
537
- hestia_earth/models/utils/property.py,sha256=XSSPRUJm6fcc4kJWjZ8A_ZCie7h3QsjwlUg2wDWytdQ,5002
540
+ hestia_earth/models/utils/property.py,sha256=gHPEmy3Sw599ox64Gv-LCvjhP1THlBXBaBlTOK5lvog,5060
538
541
  hestia_earth/models/utils/site.py,sha256=oLuai82WdN_qAAG09XmLEbhf7-jr7AT7BGxRBUs1Bno,3292
539
542
  hestia_earth/models/utils/source.py,sha256=HhZkvQoFdy6j6FC2cwP5EbHXHFM4pif9gpnuzeDwEh4,1746
540
543
  hestia_earth/models/utils/temperature.py,sha256=ljlG4-yCgFFb6LRZweb18cZKLrr7K2mqd4E4Hz_D1f8,476
@@ -543,7 +546,7 @@ hestia_earth/models/utils/transformation.py,sha256=nyT5Mz4_VgFwhkL8JoNX9kxxow0zu
543
546
  hestia_earth/models/webbEtAl2012AndSintermannEtAl2012/__init__.py,sha256=Niv7ZFMBCwThlbCKGOwA17QdkpOUDFrqrFItGNqnZAA,434
544
547
  hestia_earth/models/webbEtAl2012AndSintermannEtAl2012/nh3ToAirOrganicFertiliser.py,sha256=G2eq00XGdr1ZEZ5Ru1nBIR-sD7iM9hGYhvk8r5wL3dA,3910
545
548
  tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
546
- tests/models/test_cache_sites.py,sha256=SJdx3isXOcOi1StOKBZNSJxR0bsl7gZ85x2RGwm6-6E,1794
549
+ tests/models/test_cache_sites.py,sha256=AsZSGb4ruFqag74wRaQxpoZxbMxexPY8q8sMb2ergzg,1986
547
550
  tests/models/test_ecoinventV3.py,sha256=zyIWeeS7VndjXAHcROhDi3E0I52U8uQu8u-t1EXwqW8,1492
548
551
  tests/models/test_emissionNotRelevant.py,sha256=YXTdRfcdR_JepHuj2P3Y3r0aFMKNOmsXQHY48tmLTQo,1316
549
552
  tests/models/test_linkedImpactAssessment.py,sha256=RiBNTF34GMA5YsuJ0MAsEPhMuHNC2W0Qq9YnWYDpXM4,1172
@@ -576,18 +579,18 @@ tests/models/cml2001NonBaseline/test_eutrophicationPotentialIncludingFateAverage
576
579
  tests/models/cml2001NonBaseline/test_terrestrialAcidificationPotentialExcludingFate.py,sha256=zytN80ZmXjLBSiXPj_G0aaMyMx1aVukJaGouZQDMLBs,907
577
580
  tests/models/cycle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
578
581
  tests/models/cycle/test_aboveGroundCropResidueTotal.py,sha256=qXx--kj9VHfiHqJfpAffSRvfaAcyYJppqTqgjQkXG4w,1311
579
- tests/models/cycle/test_coldCarcassWeightPerHead.py,sha256=2QVjVLJyCuh6x8AhRO2RyONu1CHqDx50VmtdEzl_4Y0,1347
580
- tests/models/cycle/test_coldDressedCarcassWeightPerHead.py,sha256=pq_UCnaKL4pLMG1KqN9erXBOMFmvYSqW_eYRjTZjd6A,1361
582
+ tests/models/cycle/test_coldCarcassWeightPerHead.py,sha256=omaBrhWBGzx4PrJ37JUhbUJrMK9UdD3a9xjHZtHt6YU,1437
583
+ tests/models/cycle/test_coldDressedCarcassWeightPerHead.py,sha256=DrdI1TUmggeeQvza4WHfbzt9lk-TdKtuvZGYNpTgQ9U,1451
581
584
  tests/models/cycle/test_completeness.py,sha256=Ku1ZSApGaACkXe3ae14yP01C4GssHMwlPG_UPrSytPo,1625
582
585
  tests/models/cycle/test_concentrateFeed.py,sha256=tgkThL4g293CexLvb89ftO9UqUbHhNOxiP6QMmsqCCo,2013
583
586
  tests/models/cycle/test_cropResidueManagement.py,sha256=vQWl7rDYLJjiKyBQlCiOA76LpzM4dI2t7JJ30uF8H9M,2020
584
587
  tests/models/cycle/test_cycleDuration.py,sha256=jD9L6eGwi0woUMpqcGm6MxP_Wvh_H6FCSmiHME5eOZc,1296
585
588
  tests/models/cycle/test_endDate.py,sha256=SY04-jtp9dAaCJpFv8Ef09jhUmsB0IWRphWrilR_wv4,649
586
- tests/models/cycle/test_energyContentLowerHeatingValue.py,sha256=96QQXbuNPySy7TB76DHg1DoC2YsXp32tpnBM39VJ2Bs,1114
589
+ tests/models/cycle/test_energyContentLowerHeatingValue.py,sha256=ZvHigQrtneKrRc8qr7rN8aj6tuA0ds0V6Brh0UzN_T8,1204
587
590
  tests/models/cycle/test_excretaKgMass.py,sha256=xpuq0k5HKvnGmWdJy0GmIv6A4xYk2VDFB4BMb8J2Z0g,2925
588
591
  tests/models/cycle/test_excretaKgN.py,sha256=xoe0PF-DwhVkihN-1BonUa7u_QNM9lr7CmGXsOozQ0Y,1090
589
592
  tests/models/cycle/test_excretaKgVs.py,sha256=A5IzG9vcjJxba_ZjBeTprjGL4hO3NkwrS0LSqgX8eOs,1093
590
- tests/models/cycle/test_feedConversionRatio.py,sha256=AikefswCdd0_YS800_v5uh9rdP8LsWdXfTXjY24C5e0,1759
593
+ tests/models/cycle/test_feedConversionRatio.py,sha256=V6zpZvUmBN0LciJW5YbHHaRQX6iEFdlFx9cSdX--owc,2149
591
594
  tests/models/cycle/test_inorganicFertiliser.py,sha256=c-JDYC0qDK4JWlYDaGX53AcKfetz_YifSfdhy-v-WMo,642
592
595
  tests/models/cycle/test_irrigatedTypeUnspecified.py,sha256=9YGwpDO_RHMaldvjJZ0xdrdfUzYDnLPt6nMJ2eRXSTI,2151
593
596
  tests/models/cycle/test_liveAnimal.py,sha256=7fRPgEnIwcir-tYwUNnr6gc2e5_vnZi-t8EuuiPioeM,2139
@@ -596,7 +599,7 @@ tests/models/cycle/test_pastureGrass.py,sha256=hNRjBLYXGybzHPMfBOCgcRjGkDBmW0k_G
596
599
  tests/models/cycle/test_pastureSystem.py,sha256=VlPn4mlaNimiu3liV5EMELJueUCqSSJ1l82yMV0UK90,1590
597
600
  tests/models/cycle/test_post_checks.py,sha256=yeUm-uZ4Om8poct2TgpFQEy-Hg72LNacyQcQ2Qh4Yyw,286
598
601
  tests/models/cycle/test_pre_checks.py,sha256=ZFQOq6vIe-xMLisvSsJAPjt3XIgKk-x3G5cFJIzfOWc,284
599
- tests/models/cycle/test_readyToCookWeightPerHead.py,sha256=xL-y2wsOxgqGBIamC5zURY41JBqAMAMw1YL2U_f06iM,1347
602
+ tests/models/cycle/test_readyToCookWeightPerHead.py,sha256=KbjiMmcgychGDyuFylqqJHlQUp2PO1puBKPgwTqIy10,1437
600
603
  tests/models/cycle/test_residueBurnt.py,sha256=eBAzGR1210cBYH_s6oI1yCG6tVKUj9gGs2LnN_q6Iq4,1272
601
604
  tests/models/cycle/test_residueIncorporated.py,sha256=esB_wnpf6W0PB24HW0YUgtfD9mxLDIY22eNVD4WAYFA,1719
602
605
  tests/models/cycle/test_residueLeftOnField.py,sha256=_8CoSp-7z3BBLGN5Hv067FRYz8yDFw5fi_Cu5n6Rl3g,1290
@@ -606,10 +609,10 @@ tests/models/cycle/test_startDate.py,sha256=on3OdP7HtR005cQUTiFbiz_iQ7pX53WZ368w
606
609
  tests/models/cycle/test_transformations.py,sha256=Ws_8KhNqeHogGFXTQ4qZXQ5Ph2I3ZUaY0yO1itFUHLk,464
607
610
  tests/models/cycle/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
608
611
  tests/models/cycle/animal/test_milkYield.py,sha256=e3FX8ikrS7nNeOuy8K7rNLs577odN5xrFohUWQw-tag,1323
609
- tests/models/cycle/animal/test_properties.py,sha256=MwpvaRKaqpM8o3p5efgPtnyJMIP4W55TEL4hYfUJV90,567
612
+ tests/models/cycle/animal/test_properties.py,sha256=ND9ltZQie1xXtQvAzoDUkBYGV_N3rw5D5W-irARvO0s,715
610
613
  tests/models/cycle/animal/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
611
614
  tests/models/cycle/animal/input/test_hestiaAggregatedData.py,sha256=19rTpeoktPFMyOSolACMJkSe2p96xLsXAeRVjND0WbY,1229
612
- tests/models/cycle/animal/input/test_properties.py,sha256=Sh8xuGfneo1BMp7jN_ud2dfFhiogC8fi9rNo4ajQOlc,1794
615
+ tests/models/cycle/animal/input/test_properties.py,sha256=rp-PfGijk-Sbh1NsV5nkf9gh_xZpGocDgWIl8N7VtTo,1983
613
616
  tests/models/cycle/completeness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
614
617
  tests/models/cycle/completeness/test_animalFeed.py,sha256=J52m1kInw8mPE_pwx0j3QGKI8ZpDGeN2TLqUuArn7WA,348
615
618
  tests/models/cycle/completeness/test_cropResidue.py,sha256=TzPrnvAQA5GzmwL-bYOLgR3wjtMdKuPx55wT_HHfJ6c,592
@@ -619,7 +622,7 @@ tests/models/cycle/completeness/test_seed.py,sha256=txpypNeoX08QC3wPUd92gnWuvPTs
619
622
  tests/models/cycle/completeness/test_soilAmendment.py,sha256=EjvXIKioQx4vCqrotD33kLZCtZTYohzYtXSifMGnO6w,636
620
623
  tests/models/cycle/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
621
624
  tests/models/cycle/input/test_hestiaAggregatedData.py,sha256=qKe_XrIK9CTXx2V2XJefEOzx9A0GoZFwg4WUs3Hxkw4,3080
622
- tests/models/cycle/input/test_properties.py,sha256=zKCryKaBhDlH-Qr88V2w5lgSyyRZX5rt8rQgFuuNbFE,1773
625
+ tests/models/cycle/input/test_properties.py,sha256=5O2ubBE_WSLz5NRtLTGwsE-gADIcw7sZyJqL0w7GYcQ,1962
623
626
  tests/models/cycle/input/test_value.py,sha256=NR7KHsqnPnw43BB1efT0KPaszY4DKY293Av-lVde-DI,977
624
627
  tests/models/cycle/post_checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
625
628
  tests/models/cycle/post_checks/test_cache.py,sha256=5QD8Yk9HbDePHSIXOJUM_ptZCroOQRf53bIXZod6fTA,194
@@ -634,7 +637,7 @@ tests/models/cycle/product/test_currency.py,sha256=r7TA0FDDS9U50-FolEMXESi4pvSmw
634
637
  tests/models/cycle/product/test_economicValueShare.py,sha256=58EsOw5nZWGTsKK_LFblIz3YwmCXROT-GffHojmd674,4417
635
638
  tests/models/cycle/product/test_price.py,sha256=zmWNdF2P4k2QTje_62NJDklCIwmk2vF8xuOoVzL9qf0,1193
636
639
  tests/models/cycle/product/test_primary.py,sha256=UfLOOxUkDyeSOmDv4NyN6v5Yf0RO9etZNT797fbCbpA,1862
637
- tests/models/cycle/product/test_properties.py,sha256=AsiojZohbOlD77i_fwW05qQGg1-utIwKIIrM0ZmybqA,1045
640
+ tests/models/cycle/product/test_properties.py,sha256=7pcBH_Ny8JeQ2dWXBU-ZSmY5iYl0f_qFejp8Vk5e1H8,1142
638
641
  tests/models/cycle/product/test_revenue.py,sha256=brcr-zPhhLChw3t-oyApVdcMjvyRszDVELMQLi4t398,917
639
642
  tests/models/cycle/product/test_value.py,sha256=IfkcE8kgrvXg_iIbnoJ3n0CIjlfgg_lHkILQ8u38HVE,963
640
643
  tests/models/dammgen2009/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -740,7 +743,7 @@ tests/models/ipcc2006/test_aboveGroundCropResidueRemoved.py,sha256=5F7eU4qWYfTZA
740
743
  tests/models/ipcc2006/test_aboveGroundCropResidueTotal.py,sha256=FrSR1xBTRtJ99pXAklXLtDRC00FSW1vXSAvQNeBoXTQ,1725
741
744
  tests/models/ipcc2006/test_belowGroundCropResidue.py,sha256=cFqLDFy5pcgOyzKC9l-RClEP6CWCdVNnq48S90SITVM,1720
742
745
  tests/models/ipcc2006/test_co2ToAirOrganicSoilCultivation.py,sha256=wM1BYFcK28aiNVP6JUEWdc90kCd3w4rjOnpxzwuYV_o,1609
743
- tests/models/ipcc2006/test_n2OToAirCropResidueDecompositionDirect.py,sha256=rmL8K9ToJa9SAO-kxSd8Zz3cl5bTWrDRDxsPAMMTmCo,1626
746
+ tests/models/ipcc2006/test_n2OToAirCropResidueDecompositionDirect.py,sha256=pgUznkTiyLwhMVHzFE40wzwvtY40OsPQp1QWTsaPDqU,1815
744
747
  tests/models/ipcc2006/test_n2OToAirCropResidueDecompositionIndirect.py,sha256=cxn5rX_pZqbl7m8rhJARuyjG2P5O-BQbufeEcTmO06k,1357
745
748
  tests/models/ipcc2006/test_n2OToAirExcretaDirect.py,sha256=tm6Lm90_4qEkCU6UIFsOD6yhrMrq69lkF1LvCjXPjE4,2132
746
749
  tests/models/ipcc2006/test_n2OToAirExcretaIndirect.py,sha256=712I87Wkpp4KcHfHaK1kgfD6nfHGo3iZqKIwfMG9a6A,1282
@@ -757,21 +760,21 @@ tests/models/ipcc2019/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
757
760
  tests/models/ipcc2019/test_aboveGroundCropResidueTotal.py,sha256=AADYB1g9vftH7YSvNyihHu8GQOiA7VhXxVQ-oJQNT88,2581
758
761
  tests/models/ipcc2019/test_belowGroundCropResidue.py,sha256=HUxHZLBdLX_E_oc3wqTwNtGY4M4yCWcxx-1iBYPF7_s,2576
759
762
  tests/models/ipcc2019/test_carbonContent.py,sha256=_GWF5nGy-PxiqBZ5V7W_sHMz75YRzmxr79R-sZZg7yk,4146
760
- tests/models/ipcc2019/test_ch4ToAirEntericFermentation.py,sha256=Cz3ks35iEeoO-l8bf0CI4ZxzgoNIE3Pfzg6Ys_Elbt8,6728
763
+ tests/models/ipcc2019/test_ch4ToAirEntericFermentation.py,sha256=eqHm9JexHOx_Qbi25oDCYXJqPC8wdWxGUnqnfEAqQsQ,7996
761
764
  tests/models/ipcc2019/test_ch4ToAirExcreta.py,sha256=e58NXmBW2SNVLUqQO9A66Xq6jiGTyhdFZDZk51JApF8,2902
762
765
  tests/models/ipcc2019/test_ch4ToAirFloodedRice.py,sha256=FAp5b45WdX5Ih4yGUOZ4CmVD8smW1Lw1tnulx9AKVBI,1980
763
766
  tests/models/ipcc2019/test_co2ToAirLimeHydrolysis.py,sha256=e5iuZ-kQNEVih0ZRgRPWqaUtXcLpfkoU7sQypbqA9_Y,1345
764
- tests/models/ipcc2019/test_co2ToAirSoilCarbonStockChangeManagementChange.py,sha256=nYrMq4gAGl9HoGlvo9vonMnY-wkFi5FaEGI3SMcqtPo,7124
767
+ tests/models/ipcc2019/test_co2ToAirSoilOrganicCarbonStockChangeManagementChange.py,sha256=NbEADyVQY6AAhpRemmJO9E4j9CzQ-3LK4MHDk3HJHIQ,7131
765
768
  tests/models/ipcc2019/test_co2ToAirUreaHydrolysis.py,sha256=MmtEME0xjsa3KojFk_fxOLK6RZM_6p5HIpY2DOFHVu4,1530
766
769
  tests/models/ipcc2019/test_croppingDuration.py,sha256=gLRXeR6Tqa7ciD9KTRfsIflSeIIWT2iOpZMdcxAQla4,1871
767
770
  tests/models/ipcc2019/test_ligninContent.py,sha256=eIKEN__ab-0R52EhlhPSBiHnmTl6xOf1XbI33O-W9A4,4146
768
- tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionDirect.py,sha256=lVfSKpVszGK42pzo2FefXNZRmXbqOt25IBcnxvhC_X0,2418
771
+ tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionDirect.py,sha256=vKbWQNZAGPtsqonM-Cc3n3hNitft0hcjn2TNrTFC1iY,2729
769
772
  tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionIndirect.py,sha256=it2PVNYBNAvQWmWLDJ9Evjqtx7SJl-X0ZyQz3Fuvb3k,2119
770
773
  tests/models/ipcc2019/test_n2OToAirExcretaDirect.py,sha256=JYvBK4edcqfHrMPwgBFXF6km51ew9RISUcfQ_RNf2RY,1216
771
774
  tests/models/ipcc2019/test_n2OToAirExcretaIndirect.py,sha256=z46L5JMB4-W0uCyyFlLKTEyDnt2gUHRkH7dEXK6ioHk,2098
772
- tests/models/ipcc2019/test_n2OToAirInorganicFertiliserDirect.py,sha256=ffk-aom1BqyEmqm-JESWX5MErrAVAgVuH1gjW32U5Pk,2407
775
+ tests/models/ipcc2019/test_n2OToAirInorganicFertiliserDirect.py,sha256=uSdklDRTxYfMo3J6lMxUJeIeinLHvY_MRZiN9NdHmdA,2718
773
776
  tests/models/ipcc2019/test_n2OToAirInorganicFertiliserIndirect.py,sha256=RnU8CkUCYBBO1bgJALnoVgjTHLL1L1sja2nsyeVA_cg,2113
774
- tests/models/ipcc2019/test_n2OToAirOrganicFertiliserDirect.py,sha256=XQpzdEFT7qSw6KKRYEZ6Cmzkc_xLyG98FHH1PSfOUo0,2403
777
+ tests/models/ipcc2019/test_n2OToAirOrganicFertiliserDirect.py,sha256=ofEcYrwvvXfoZHRWaaMtKMK2NbEtX_67laDeu_lDTXg,2714
775
778
  tests/models/ipcc2019/test_n2OToAirOrganicFertiliserIndirect.py,sha256=hW84sTlhB8mKRSFJX_iQS4gYo74zCtY-9zr1VHLC5GU,2111
776
779
  tests/models/ipcc2019/test_nh3ToAirInorganicFertiliser.py,sha256=xmRHSTmyh--EZX29Z5NHD4LqEZl7Lkc5HntBCXlIRHE,1537
777
780
  tests/models/ipcc2019/test_nh3ToAirOrganicFertiliser.py,sha256=Z4a20I2UnZdzm6FqHnlHRXXVCY993_SHT7nG-zAhx-c,1104
@@ -783,7 +786,9 @@ tests/models/ipcc2019/test_no3ToGroundwaterOrganicFertiliser.py,sha256=e1ZViD12q
783
786
  tests/models/ipcc2019/test_noxToAirInorganicFertiliser.py,sha256=NZBSBJLM_j2PEpHRON2ysgKNF8x5sHfQVoAKQdGsfzk,1537
784
787
  tests/models/ipcc2019/test_noxToAirOrganicFertiliser.py,sha256=LR5pjV5vRbgSSQAw8kYRp_ij4CHInzgaDS6EggQuBiw,1104
785
788
  tests/models/ipcc2019/test_organicCarbonPerHa.py,sha256=TO3ubi8z8-iYEAdf295Z30ft5W1652GPkmaiQCb7QN4,23197
786
- tests/models/ipcc2019/test_pastureGrass.py,sha256=pE4PWdR541v4xWDYihP7Dou8V1iqg5GwD5_rjGRzrds,2292
789
+ tests/models/ipcc2019/test_pastureGrass.py,sha256=hn6tw-ifMTn00_WmYPIjRdm56SMF1w-eqETngVE29ns,3373
790
+ tests/models/ipcc2019/animal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
791
+ tests/models/ipcc2019/animal/test_pastureGrass.py,sha256=2ZbeIxxEZ9xaDkfCY2pLripmtOG89iHMTrPqa2-UuQg,1983
787
792
  tests/models/ipcc2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
788
793
  tests/models/ipcc2021/test_gwp100.py,sha256=JRklKMSg-OXopb9ZufGgl94deuMuJSsfNXRZDBtOZrE,1119
789
794
  tests/models/jarvisAndPain1994/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -885,8 +890,8 @@ tests/models/pooreNemecek2018/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
885
890
  tests/models/pooreNemecek2018/test_aboveGroundCropResidueTotal.py,sha256=m-cpFULarm0Ee4MV-OvhYPRg7W2_mvbrqHkjDZgcQsw,1660
886
891
  tests/models/pooreNemecek2018/test_belowGroundCropResidue.py,sha256=A6EOD2B6frN0UtuUTP3GwZ7bNEtEudQfztHXjdiDwdQ,1655
887
892
  tests/models/pooreNemecek2018/test_ch4ToAirAquacultureSystems.py,sha256=rUxD57yl82Ht8IyhbiQhi0xl8L9iLdnLpbI-T5C0Mck,2722
888
- tests/models/pooreNemecek2018/test_excretaKgN.py,sha256=w6SuQ3gHzl7AP0Fljaqdqf7u0zWZCpWC-nTIjqQ_tSg,3613
889
- tests/models/pooreNemecek2018/test_excretaKgVs.py,sha256=NZX7b4bf_srAOsvLXHxD9ChmMB0lSaUcmgSU2COLmHM,2814
893
+ tests/models/pooreNemecek2018/test_excretaKgN.py,sha256=lKM-Q7TjQoxjvjY9tCcmJxoWvHuxglNCVsPXh6JBgCY,4063
894
+ tests/models/pooreNemecek2018/test_excretaKgVs.py,sha256=LIoLevR0tHrZwazuGprt6SCFtmDrj4NBq1s1SJEhQCA,3252
890
895
  tests/models/pooreNemecek2018/test_landOccupationDuringCycle.py,sha256=XbsApbRIuzq4GeaN7PrzlMA7grU7y6j_HPesgQIf_Uw,1650
891
896
  tests/models/pooreNemecek2018/test_longFallowPeriod.py,sha256=zAa-zmCbHOjCUsOQdEvZRBw_r8gdmxYZXYurRGVLxfM,923
892
897
  tests/models/pooreNemecek2018/test_n2OToAirAquacultureSystemsDirect.py,sha256=4YAoUhIwfEmRe2B5BvNg247VeB7UXHNeZqr2mRtJA7Y,2207
@@ -896,7 +901,7 @@ tests/models/pooreNemecek2018/test_no3ToGroundwaterCropResidueDecomposition.py,s
896
901
  tests/models/pooreNemecek2018/test_no3ToGroundwaterExcreta.py,sha256=r4ZbfPGqSjZxy-U1IjyBtnRw1OBDu2ed5uywOLckDXU,901
897
902
  tests/models/pooreNemecek2018/test_no3ToGroundwaterInorganicFertiliser.py,sha256=jWHqwoix6_4skCfZoWG5Lz_K-u-zk6L8mDLLHw73R3U,913
898
903
  tests/models/pooreNemecek2018/test_no3ToGroundwaterOrganicFertiliser.py,sha256=Rdjw7Ntw3vdgonHGh-pqhCoxc_y-Z9esgekY64e13T8,911
899
- tests/models/pooreNemecek2018/test_no3ToGroundwaterSoilFlux.py,sha256=GELyuHIQc7g34wjkdT3OtCY_BNxFEO2tiUIWZIgocb0,3374
904
+ tests/models/pooreNemecek2018/test_no3ToGroundwaterSoilFlux.py,sha256=Ti1DXFnE14E8AqC8kcBAyOTALXOI9QUs5NKBrpSfKeA,3452
900
905
  tests/models/pooreNemecek2018/test_noxToAirAquacultureSystems.py,sha256=79zcDMM6HNxZzFjxPVkFcIHUPKaGwnc_3tWHEBeEtq8,2201
901
906
  tests/models/pooreNemecek2018/test_nurseryDensity.py,sha256=uRKvWqI94YghWGdGLoRuDIQFlebALoVE6IguK_8_p90,921
902
907
  tests/models/pooreNemecek2018/test_nurseryDuration.py,sha256=PFUlx-mjZBGvyAax8m6GR61Ak9CxjMvAMAojmA39WUk,922
@@ -1049,8 +1054,8 @@ tests/models/utils/test_source.py,sha256=mv3vHZV5cjpoLA2I1109-YUkuzAiuhbRSnv_76_
1049
1054
  tests/models/utils/test_term.py,sha256=M5Sa26v2gzQYbZ4H_fo7DspnaCx__-WtL-MULGapCWk,3509
1050
1055
  tests/models/webbEtAl2012AndSintermannEtAl2012/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1051
1056
  tests/models/webbEtAl2012AndSintermannEtAl2012/test_nh3ToAirOrganicFertiliser.py,sha256=qi2FNXS5Af2WDtm7nq_FsprH3BfCF0XxnE0XHmC4aIY,2244
1052
- hestia_earth_models-0.59.7.dist-info/LICENSE,sha256=EFSZhfUdZCTsCIYdHzTGewMKfRfp7X9t1s2aaKxm8O0,1154
1053
- hestia_earth_models-0.59.7.dist-info/METADATA,sha256=ZIvcMUOqXgRxksT65t2aFMM4hzvl0Wox15BJuffBBGo,3134
1054
- hestia_earth_models-0.59.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
1055
- hestia_earth_models-0.59.7.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
1056
- hestia_earth_models-0.59.7.dist-info/RECORD,,
1057
+ hestia_earth_models-0.60.1.dist-info/LICENSE,sha256=AC7h7GAgCZGJK_Tzh6LUCrML9gQEfowWwecEw2w54QM,1154
1058
+ hestia_earth_models-0.60.1.dist-info/METADATA,sha256=tJULz_gVDoPAkvfkSD8ooAES548NXNxa4hQkQ_sS2WM,3134
1059
+ hestia_earth_models-0.60.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
1060
+ hestia_earth_models-0.60.1.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
1061
+ hestia_earth_models-0.60.1.dist-info/RECORD,,
@@ -19,6 +19,7 @@ def fake_load_calculated_node(node, node_type):
19
19
 
20
20
 
21
21
  @patch(f"{class_path}._load_calculated_node", side_effect=fake_load_calculated_node)
22
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
22
23
  def test_run(*args):
23
24
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
24
25
  cycle = json.load(f)
@@ -42,7 +43,8 @@ def test_run_with_dryMatter(*args):
42
43
  assert result == expected
43
44
 
44
45
 
45
- def test_run_with_min_max():
46
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
47
+ def test_run_with_min_max(*args):
46
48
  with open(f"{fixtures_folder}/with-min-max/cycle.jsonld", encoding='utf-8') as f:
47
49
  cycle = json.load(f)
48
50
 
@@ -1,5 +1,6 @@
1
+ from unittest.mock import patch
1
2
  import json
2
- from tests.utils import fixtures_path
3
+ from tests.utils import fixtures_path, fake_new_property
3
4
 
4
5
  from hestia_earth.models.cycle.animal.properties import MODEL_KEY, run
5
6
 
@@ -7,7 +8,8 @@ class_path = f"hestia_earth.models.cycle.animal.{MODEL_KEY}"
7
8
  fixtures_folder = f"{fixtures_path}/cycle/animal/{MODEL_KEY}"
8
9
 
9
10
 
10
- def test_run_with_min_max():
11
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
12
+ def test_run_with_min_max(*args):
11
13
  with open(f"{fixtures_folder}/with-min-max/cycle.jsonld", encoding='utf-8') as f:
12
14
  cycle = json.load(f)
13
15
 
@@ -19,6 +19,7 @@ def fake_load_calculated_node(node, node_type):
19
19
 
20
20
 
21
21
  @patch(f"{class_path}._load_calculated_node", side_effect=fake_load_calculated_node)
22
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
22
23
  def test_run(*args):
23
24
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
24
25
  cycle = json.load(f)
@@ -42,7 +43,8 @@ def test_run_with_dryMatter(*args):
42
43
  assert result == expected
43
44
 
44
45
 
45
- def test_run_with_min_max():
46
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
47
+ def test_run_with_min_max(*args):
46
48
  with open(f"{fixtures_folder}/with-min-max/cycle.jsonld", encoding='utf-8') as f:
47
49
  cycle = json.load(f)
48
50
 
@@ -20,7 +20,8 @@ def test_run_with_dryMatter(*args):
20
20
  assert result == expected
21
21
 
22
22
 
23
- def test_run_with_min_max():
23
+ @patch('hestia_earth.models.utils.feedipedia._new_property', side_effect=fake_new_property)
24
+ def test_run_with_min_max(*args):
24
25
  with open(f"{fixtures_folder}/with-min-max/cycle.jsonld", encoding='utf-8') as f:
25
26
  cycle = json.load(f)
26
27
 
@@ -34,6 +34,7 @@ def test_should_run():
34
34
  assert should_run is True
35
35
 
36
36
 
37
+ @patch("hestia_earth.models.utils.property.download_hestia", return_value={'units': '%'})
37
38
  @patch(f"{class_path}._new_property", side_effect=fake_new_property)
38
39
  def test_run(*args):
39
40
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
@@ -34,6 +34,7 @@ def test_should_run():
34
34
  assert should_run is True
35
35
 
36
36
 
37
+ @patch("hestia_earth.models.utils.property.download_hestia", return_value={'units': '%'})
37
38
  @patch(f"{class_path}._new_property", side_effect=fake_new_property)
38
39
  def test_run(*args):
39
40
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
@@ -24,6 +24,7 @@ def test_should_run_input():
24
24
  assert _should_run_input({})(input) is True
25
25
 
26
26
 
27
+ @patch("hestia_earth.models.utils.property.download_hestia", return_value={'units': '%'})
27
28
  @patch(f"{class_path}.get_wood_fuel_terms", return_value=['woodPellets', 'woodFuel'])
28
29
  @patch(f"{class_path}._new_property", side_effect=fake_new_property)
29
30
  def test_run(*args):
@@ -8,6 +8,14 @@ from hestia_earth.models.cycle.feedConversionRatio import MODEL, run, _should_ru
8
8
  class_path = f"hestia_earth.models.{MODEL}.feedConversionRatio"
9
9
  fixtures_folder = f"{fixtures_path}/{MODEL}/feedConversionRatio"
10
10
 
11
+ TERMS_BY_ID = {
12
+ 'energyContentHigherHeatingValue': {'units': 'MJ / kg'},
13
+ 'crudeProteinContent': {'units': '%'},
14
+ }
15
+
16
+
17
+ def fake_download_hestia(term_id: str, *args): return TERMS_BY_ID[term_id]
18
+
11
19
 
12
20
  @patch(f"{class_path}.get_total_value_converted_with_min_ratio", return_value=10)
13
21
  def test_should_run(*args):
@@ -29,6 +37,7 @@ def test_should_run(*args):
29
37
  assert should_run is True
30
38
 
31
39
 
40
+ @patch("hestia_earth.models.utils.property.download_hestia", side_effect=fake_download_hestia)
32
41
  @patch(f"{class_path}.is_run_required", return_value=True)
33
42
  @patch(f"{class_path}._new_practice", side_effect=fake_new_practice)
34
43
  def test_run(*args):
@@ -42,6 +51,7 @@ def test_run(*args):
42
51
  assert value == expected
43
52
 
44
53
 
54
+ @patch("hestia_earth.models.utils.property.download_hestia", side_effect=fake_download_hestia)
45
55
  @patch(f"{class_path}.is_run_required", return_value=True)
46
56
  @patch(f"{class_path}._new_practice", side_effect=fake_new_practice)
47
57
  def test_run_with_carcass(*args):
@@ -34,6 +34,7 @@ def test_should_run():
34
34
  assert should_run is True
35
35
 
36
36
 
37
+ @patch("hestia_earth.models.utils.property.download_hestia", return_value={'units': '%'})
37
38
  @patch(f"{class_path}._new_property", side_effect=fake_new_property)
38
39
  def test_run(*args):
39
40
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
@@ -8,9 +8,10 @@ class_path = f"hestia_earth.models.{MODEL}.{TERM_ID}"
8
8
  fixtures_folder = f"{fixtures_path}/{MODEL}/{TERM_ID}"
9
9
 
10
10
 
11
+ @patch(f"{class_path}.has_flooded_rice", return_value=False)
11
12
  @patch(f"{class_path}._is_term_type_complete", return_value=False)
12
13
  @patch(f"{class_path}.get_crop_residue_decomposition_N_total", return_value=0)
13
- def test_should_run(mock_N_total, mock_complete):
14
+ def test_should_run(mock_N_total, mock_complete, *args):
14
15
  # no N => no run
15
16
  should_run, *args = _should_run({})
16
17
  assert not should_run
@@ -26,6 +27,7 @@ def test_should_run(mock_N_total, mock_complete):
26
27
  assert should_run is True
27
28
 
28
29
 
30
+ @patch(f"{class_path}.has_flooded_rice", return_value=False)
29
31
  @patch(f"{class_path}._new_emission", side_effect=fake_new_emission)
30
32
  def test_run(*args):
31
33
  with open(f"{fixtures_folder}/cycle.jsonld", encoding='utf-8') as f:
@@ -38,6 +40,7 @@ def test_run(*args):
38
40
  assert value == expected
39
41
 
40
42
 
43
+ @patch(f"{class_path}.has_flooded_rice", return_value=True)
41
44
  @patch(f"{class_path}._new_emission", side_effect=fake_new_emission)
42
45
  def test_run_flooded_rice(*args):
43
46
  with open(f"{fixtures_folder}/with-flooded-rice/cycle.jsonld", encoding='utf-8') as f:
File without changes