hestia-earth-models 0.59.0__py3-none-any.whl → 0.59.2__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.
- hestia_earth/models/cycle/irrigatedTypeUnspecified.py +6 -7
- hestia_earth/models/impact_assessment/irrigated.py +4 -1
- hestia_earth/models/ipcc2006/n2OToAirCropResidueDecompositionIndirect.py +3 -3
- hestia_earth/models/ipcc2006/n2OToAirExcretaIndirect.py +3 -3
- hestia_earth/models/ipcc2006/n2OToAirInorganicFertiliserIndirect.py +5 -4
- hestia_earth/models/ipcc2006/n2OToAirOrganicFertiliserIndirect.py +5 -4
- hestia_earth/models/ipcc2006/utils.py +0 -16
- hestia_earth/models/ipcc2019/n2OToAirCropResidueDecompositionDirect.py +8 -7
- hestia_earth/models/ipcc2019/n2OToAirCropResidueDecompositionIndirect.py +100 -0
- hestia_earth/models/ipcc2019/n2OToAirExcretaIndirect.py +100 -0
- hestia_earth/models/ipcc2019/n2OToAirInorganicFertiliserIndirect.py +54 -61
- hestia_earth/models/ipcc2019/n2OToAirOrganicFertiliserIndirect.py +58 -66
- hestia_earth/models/ipcc2019/nh3ToAirOrganicFertiliser.py +104 -0
- hestia_earth/models/ipcc2019/noxToAirOrganicFertiliser.py +104 -0
- hestia_earth/models/ipcc2019/organicCarbonPerHa.py +60 -22
- hestia_earth/models/ipcc2019/utils.py +28 -16
- hestia_earth/models/mocking/search-results.json +35 -39
- hestia_earth/models/site/soilMeasurement.py +197 -0
- hestia_earth/models/utils/cycle.py +7 -6
- hestia_earth/models/utils/emission.py +15 -0
- hestia_earth/models/utils/site.py +1 -1
- hestia_earth/models/version.py +1 -1
- {hestia_earth_models-0.59.0.dist-info → hestia_earth_models-0.59.2.dist-info}/METADATA +1 -1
- {hestia_earth_models-0.59.0.dist-info → hestia_earth_models-0.59.2.dist-info}/RECORD +35 -25
- tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionIndirect.py +71 -0
- tests/models/ipcc2019/test_n2OToAirExcretaIndirect.py +71 -0
- tests/models/ipcc2019/test_n2OToAirInorganicFertiliserIndirect.py +36 -13
- tests/models/ipcc2019/test_n2OToAirOrganicFertiliserIndirect.py +36 -13
- tests/models/ipcc2019/test_nh3ToAirOrganicFertiliser.py +35 -0
- tests/models/ipcc2019/test_noxToAirOrganicFertiliser.py +35 -0
- tests/models/ipcc2019/test_organicCarbonPerHa.py +45 -4
- tests/models/site/test_soilMeasurement.py +159 -0
- {hestia_earth_models-0.59.0.dist-info → hestia_earth_models-0.59.2.dist-info}/LICENSE +0 -0
- {hestia_earth_models-0.59.0.dist-info → hestia_earth_models-0.59.2.dist-info}/WHEEL +0 -0
- {hestia_earth_models-0.59.0.dist-info → hestia_earth_models-0.59.2.dist-info}/top_level.txt +0 -0
|
@@ -918,11 +918,11 @@
|
|
|
918
918
|
},
|
|
919
919
|
{
|
|
920
920
|
"@type": "Term",
|
|
921
|
-
"@id": "
|
|
921
|
+
"@id": "residueIncorporated"
|
|
922
922
|
},
|
|
923
923
|
{
|
|
924
924
|
"@type": "Term",
|
|
925
|
-
"@id": "
|
|
925
|
+
"@id": "residueIncorporatedMoreThan30DaysBeforeCultivation"
|
|
926
926
|
},
|
|
927
927
|
{
|
|
928
928
|
"@type": "Term",
|
|
@@ -1028,11 +1028,11 @@
|
|
|
1028
1028
|
},
|
|
1029
1029
|
{
|
|
1030
1030
|
"@type": "Term",
|
|
1031
|
-
"@id": "
|
|
1031
|
+
"@id": "digestibleEnergySalmonids"
|
|
1032
1032
|
},
|
|
1033
1033
|
{
|
|
1034
1034
|
"@type": "Term",
|
|
1035
|
-
"@id": "
|
|
1035
|
+
"@id": "digestibleEnergyPigs"
|
|
1036
1036
|
},
|
|
1037
1037
|
{
|
|
1038
1038
|
"@type": "Term",
|
|
@@ -1111,43 +1111,43 @@
|
|
|
1111
1111
|
"results": [
|
|
1112
1112
|
{
|
|
1113
1113
|
"@type": "Term",
|
|
1114
|
-
"@id": "
|
|
1114
|
+
"@id": "excretaPoultryKgN"
|
|
1115
1115
|
},
|
|
1116
1116
|
{
|
|
1117
1117
|
"@type": "Term",
|
|
1118
|
-
"@id": "
|
|
1118
|
+
"@id": "excretaGoatsKgN"
|
|
1119
1119
|
},
|
|
1120
1120
|
{
|
|
1121
1121
|
"@type": "Term",
|
|
1122
|
-
"@id": "
|
|
1122
|
+
"@id": "excretaBeefCattleExceptFeedlotFedKgN"
|
|
1123
1123
|
},
|
|
1124
1124
|
{
|
|
1125
1125
|
"@type": "Term",
|
|
1126
|
-
"@id": "
|
|
1126
|
+
"@id": "excretaDeerKgN"
|
|
1127
1127
|
},
|
|
1128
1128
|
{
|
|
1129
1129
|
"@type": "Term",
|
|
1130
|
-
"@id": "
|
|
1130
|
+
"@id": "excretaSolidFishCrustaceansKgN"
|
|
1131
1131
|
},
|
|
1132
1132
|
{
|
|
1133
1133
|
"@type": "Term",
|
|
1134
|
-
"@id": "
|
|
1134
|
+
"@id": "excretaDucksKgN"
|
|
1135
1135
|
},
|
|
1136
1136
|
{
|
|
1137
1137
|
"@type": "Term",
|
|
1138
|
-
"@id": "
|
|
1138
|
+
"@id": "excretaInsectsKgN"
|
|
1139
1139
|
},
|
|
1140
1140
|
{
|
|
1141
1141
|
"@type": "Term",
|
|
1142
|
-
"@id": "
|
|
1142
|
+
"@id": "excretaBeefCattleFeedlotFedKgN"
|
|
1143
1143
|
},
|
|
1144
1144
|
{
|
|
1145
1145
|
"@type": "Term",
|
|
1146
|
-
"@id": "
|
|
1146
|
+
"@id": "excretaGeeseKgN"
|
|
1147
1147
|
},
|
|
1148
1148
|
{
|
|
1149
1149
|
"@type": "Term",
|
|
1150
|
-
"@id": "
|
|
1150
|
+
"@id": "excretaKgN"
|
|
1151
1151
|
},
|
|
1152
1152
|
{
|
|
1153
1153
|
"@type": "Term",
|
|
@@ -1299,7 +1299,7 @@
|
|
|
1299
1299
|
"@type": "Term",
|
|
1300
1300
|
"name": "Generic crop, seed",
|
|
1301
1301
|
"@id": "genericCropSeed",
|
|
1302
|
-
"_score":
|
|
1302
|
+
"_score": 23.9092
|
|
1303
1303
|
}
|
|
1304
1304
|
]
|
|
1305
1305
|
},
|
|
@@ -1337,31 +1337,19 @@
|
|
|
1337
1337
|
"results": [
|
|
1338
1338
|
{
|
|
1339
1339
|
"@type": "Term",
|
|
1340
|
-
"@id": "
|
|
1340
|
+
"@id": "rainfedDeepWater"
|
|
1341
1341
|
},
|
|
1342
1342
|
{
|
|
1343
1343
|
"@type": "Term",
|
|
1344
|
-
"@id": "
|
|
1344
|
+
"@id": "rainfedDeepWaterWaterDepth50100Cm"
|
|
1345
1345
|
},
|
|
1346
1346
|
{
|
|
1347
1347
|
"@type": "Term",
|
|
1348
|
-
"@id": "
|
|
1348
|
+
"@id": "rainfedDeepWaterWaterDepth100Cm"
|
|
1349
1349
|
},
|
|
1350
1350
|
{
|
|
1351
1351
|
"@type": "Term",
|
|
1352
|
-
"@id": "
|
|
1353
|
-
},
|
|
1354
|
-
{
|
|
1355
|
-
"@type": "Term",
|
|
1356
|
-
"@id": "irrigatedSurfaceIrrigation"
|
|
1357
|
-
},
|
|
1358
|
-
{
|
|
1359
|
-
"@type": "Term",
|
|
1360
|
-
"@id": "irrigated"
|
|
1361
|
-
},
|
|
1362
|
-
{
|
|
1363
|
-
"@type": "Term",
|
|
1364
|
-
"@id": "irrigatedManualIrrigation"
|
|
1352
|
+
"@id": "irrigatedTypeUnspecified"
|
|
1365
1353
|
},
|
|
1366
1354
|
{
|
|
1367
1355
|
"@type": "Term",
|
|
@@ -1375,6 +1363,10 @@
|
|
|
1375
1363
|
"@type": "Term",
|
|
1376
1364
|
"@id": "irrigatedSubIrrigation"
|
|
1377
1365
|
},
|
|
1366
|
+
{
|
|
1367
|
+
"@type": "Term",
|
|
1368
|
+
"@id": "irrigatedSurfaceIrrigationDrainageRegimeUnspecified"
|
|
1369
|
+
},
|
|
1378
1370
|
{
|
|
1379
1371
|
"@type": "Term",
|
|
1380
1372
|
"@id": "irrigatedDripIrrigation"
|
|
@@ -1389,15 +1381,19 @@
|
|
|
1389
1381
|
},
|
|
1390
1382
|
{
|
|
1391
1383
|
"@type": "Term",
|
|
1392
|
-
"@id": "
|
|
1384
|
+
"@id": "irrigatedCenterPivotIrrigation"
|
|
1393
1385
|
},
|
|
1394
1386
|
{
|
|
1395
1387
|
"@type": "Term",
|
|
1396
|
-
"@id": "
|
|
1388
|
+
"@id": "irrigatedSurfaceIrrigationContinuouslyFlooded"
|
|
1397
1389
|
},
|
|
1398
1390
|
{
|
|
1399
1391
|
"@type": "Term",
|
|
1400
|
-
"@id": "
|
|
1392
|
+
"@id": "irrigatedSurfaceIrrigationMultipleDrainagePeriods"
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"@type": "Term",
|
|
1396
|
+
"@id": "irrigatedSurfaceIrrigationSingleDrainagePeriod"
|
|
1401
1397
|
}
|
|
1402
1398
|
]
|
|
1403
1399
|
},
|
|
@@ -1736,23 +1732,23 @@
|
|
|
1736
1732
|
"results": [
|
|
1737
1733
|
{
|
|
1738
1734
|
"@type": "Term",
|
|
1739
|
-
"@id": "
|
|
1735
|
+
"@id": "ridgeTillage"
|
|
1740
1736
|
},
|
|
1741
1737
|
{
|
|
1742
1738
|
"@type": "Term",
|
|
1743
|
-
"@id": "
|
|
1739
|
+
"@id": "noTillage"
|
|
1744
1740
|
},
|
|
1745
1741
|
{
|
|
1746
1742
|
"@type": "Term",
|
|
1747
|
-
"@id": "
|
|
1743
|
+
"@id": "fullInversionTillage"
|
|
1748
1744
|
},
|
|
1749
1745
|
{
|
|
1750
1746
|
"@type": "Term",
|
|
1751
|
-
"@id": "
|
|
1747
|
+
"@id": "fullTillage"
|
|
1752
1748
|
},
|
|
1753
1749
|
{
|
|
1754
1750
|
"@type": "Term",
|
|
1755
|
-
"@id": "
|
|
1751
|
+
"@id": "minimumTillage"
|
|
1756
1752
|
},
|
|
1757
1753
|
{
|
|
1758
1754
|
"@type": "Term",
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Soil Measurement
|
|
3
|
+
|
|
4
|
+
This model harmonises matching soil measurements into depth ranges of 0-30 and 0-50 and gap fills missing measurements.
|
|
5
|
+
"""
|
|
6
|
+
from collections import defaultdict
|
|
7
|
+
from copy import deepcopy
|
|
8
|
+
from hestia_earth.schema import MeasurementMethodClassification
|
|
9
|
+
from hestia_earth.utils.tools import non_empty_list, flatten
|
|
10
|
+
|
|
11
|
+
from hestia_earth.models.log import logRequirements, logShouldRun, logErrorRun
|
|
12
|
+
from hestia_earth.models.utils.measurement import _new_measurement
|
|
13
|
+
from hestia_earth.models.utils.term import get_lookup_value
|
|
14
|
+
from . import MODEL
|
|
15
|
+
|
|
16
|
+
REQUIREMENTS = {
|
|
17
|
+
"Site": {
|
|
18
|
+
"measurements": [
|
|
19
|
+
{"@type": "Measurement", "depthUpper": "", "depthLower": ""}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
RETURNS = {
|
|
25
|
+
"Measurement": [{
|
|
26
|
+
"value": "",
|
|
27
|
+
"depthUpper": 0,
|
|
28
|
+
"depthLower": [30, 50],
|
|
29
|
+
"dates": "",
|
|
30
|
+
"methodClassification": "modelled using other measurements"
|
|
31
|
+
}]
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
LOOKUPS = {
|
|
35
|
+
"measurement": ["recommendAddingDepth", "depthSensitive"]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
MODEL_KEY = 'soilMeasurement'
|
|
39
|
+
STANDARD_DEPTHS = {(0, 30), (0, 50)}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _measurement(value: float, date: str, term_id: str, standard_fields: dict):
|
|
43
|
+
data = _new_measurement(term=term_id)
|
|
44
|
+
data["value"] = [value]
|
|
45
|
+
data["depthUpper"] = standard_fields["depthUpper"]
|
|
46
|
+
data["depthLower"] = standard_fields["depthLower"]
|
|
47
|
+
data["methodClassification"] = MeasurementMethodClassification.MODELLED_USING_OTHER_MEASUREMENTS.value
|
|
48
|
+
if date and date[0]:
|
|
49
|
+
data["dates"] = [date]
|
|
50
|
+
return data
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _get_overlap(in_lower: int, in_upper: int, out_lower: int, out_upper: int):
|
|
54
|
+
"""Returns the amount of overlap between upper-lower and range_upper-range_lower."""
|
|
55
|
+
if in_lower >= in_upper or out_lower >= out_upper or in_lower >= out_upper or in_upper <= out_lower:
|
|
56
|
+
return 0
|
|
57
|
+
|
|
58
|
+
overlap_range = [max(in_lower, out_lower), min(in_upper, out_upper)]
|
|
59
|
+
return max(overlap_range) - min(overlap_range)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _harmonise_measurements(measurements_list: list, standard_depth_lower: int, standard_depth_upper: int) -> float:
|
|
63
|
+
"""Gather measurements and calculate modelled value."""
|
|
64
|
+
total_weight_values = 0
|
|
65
|
+
total_weights = 0
|
|
66
|
+
for measurement_dict in measurements_list:
|
|
67
|
+
value = measurement_dict.get("value", [])[0]
|
|
68
|
+
depth_lower = measurement_dict.get("depthLower", 0)
|
|
69
|
+
depth_upper = measurement_dict.get("depthUpper", 0)
|
|
70
|
+
# Note that the upper/lower here is reversed as lower in the ground (greater depth),
|
|
71
|
+
# means higher numbers.
|
|
72
|
+
weight = _get_overlap(
|
|
73
|
+
in_lower=depth_upper,
|
|
74
|
+
in_upper=depth_lower,
|
|
75
|
+
out_lower=standard_depth_upper,
|
|
76
|
+
out_upper=standard_depth_lower
|
|
77
|
+
)
|
|
78
|
+
total_weights += weight
|
|
79
|
+
total_weight_values += value * weight
|
|
80
|
+
modelled_value = total_weight_values / total_weights if total_weights else 0
|
|
81
|
+
return modelled_value
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _expand_multiple_measurements(measurements):
|
|
85
|
+
"""Split/expand measurements with arrays of values and dates into distinct measurements."""
|
|
86
|
+
expanded_measurements = []
|
|
87
|
+
for measurement in measurements:
|
|
88
|
+
if "dates" in measurement and len(measurement.get("value", [])) != len(measurement.get("dates", [])):
|
|
89
|
+
logErrorRun(
|
|
90
|
+
model=MODEL,
|
|
91
|
+
term=measurement.get("term", {}),
|
|
92
|
+
error="Inconsistent field lengths between values and dates fields in measurement."
|
|
93
|
+
)
|
|
94
|
+
elif len(measurement.get("value", [])) < 2:
|
|
95
|
+
expanded_measurements.append(measurement)
|
|
96
|
+
else:
|
|
97
|
+
for v, d in zip(measurement.get("value", []), measurement.get("dates", [])):
|
|
98
|
+
new_measurement = deepcopy(measurement)
|
|
99
|
+
new_measurement.update({"value": [v], "dates": [d]})
|
|
100
|
+
expanded_measurements.append(new_measurement)
|
|
101
|
+
|
|
102
|
+
return expanded_measurements
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _group_measurements_by_date_method_term(measurements):
|
|
106
|
+
group_by_result = defaultdict(list)
|
|
107
|
+
for measurement_dict in measurements:
|
|
108
|
+
dates = measurement_dict.get("dates", [])
|
|
109
|
+
method = measurement_dict.get("method", {}).get("@id", "")
|
|
110
|
+
term_id = measurement_dict.get("term", {}).get("@id", "")
|
|
111
|
+
if not dates:
|
|
112
|
+
dates = [measurement_dict.get('endDate', "")]
|
|
113
|
+
group_by_result[(dates[0], method, term_id)].append(measurement_dict)
|
|
114
|
+
return group_by_result
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _run_harmonisation(measurements: list, needed_depths: list):
|
|
118
|
+
results = []
|
|
119
|
+
grouped_measurements = _group_measurements_by_date_method_term(
|
|
120
|
+
_expand_multiple_measurements(measurements)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
for (date, method, term_id), measurements_list in grouped_measurements.items():
|
|
124
|
+
# For a target depth
|
|
125
|
+
for depth_upper, depth_lower in needed_depths:
|
|
126
|
+
modelled_value = _harmonise_measurements(
|
|
127
|
+
measurements_list=measurements_list,
|
|
128
|
+
standard_depth_upper=depth_upper,
|
|
129
|
+
standard_depth_lower=depth_lower
|
|
130
|
+
)
|
|
131
|
+
if modelled_value:
|
|
132
|
+
results.append(
|
|
133
|
+
_measurement(
|
|
134
|
+
value=modelled_value,
|
|
135
|
+
date=date,
|
|
136
|
+
standard_fields={
|
|
137
|
+
"depthUpper": depth_upper,
|
|
138
|
+
"depthLower": depth_lower
|
|
139
|
+
},
|
|
140
|
+
term_id=term_id
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
return results
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _run_gap_fill_depths(measurements_missing_depths: list) -> list:
|
|
148
|
+
return [dict(m, **{"depthUpper": 0, "depthLower": 30}) for m in measurements_missing_depths]
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _get_needed_depths(site: dict) -> list:
|
|
152
|
+
needed_depths = list(STANDARD_DEPTHS)
|
|
153
|
+
for measurement in site.get("measurements", []):
|
|
154
|
+
if (measurement.get("depthUpper"), measurement.get("depthLower")) in needed_depths:
|
|
155
|
+
needed_depths.remove((int(measurement["depthUpper"]), int(measurement["depthLower"])))
|
|
156
|
+
|
|
157
|
+
return needed_depths
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _should_run(site: dict, model_key: str):
|
|
161
|
+
# we only work with measurements with depths
|
|
162
|
+
measurements = [
|
|
163
|
+
m for m in site.get("measurements", [])
|
|
164
|
+
if get_lookup_value(m.get("term", {}), LOOKUPS["measurement"][0], model=MODEL, model_key=model_key)
|
|
165
|
+
]
|
|
166
|
+
|
|
167
|
+
measurements_with_depths = [m for m in measurements if all([
|
|
168
|
+
"depthUpper" in m.keys(),
|
|
169
|
+
"depthLower" in m.keys(),
|
|
170
|
+
(int(m.get("depthUpper", 0)), int(m.get("depthLower", 0))) not in STANDARD_DEPTHS
|
|
171
|
+
])]
|
|
172
|
+
has_measurements_with_depths = len(measurements_with_depths) > 0
|
|
173
|
+
|
|
174
|
+
measurements_missing_depth_recommended = [m for m in measurements if all([
|
|
175
|
+
"depthUpper" not in m.keys(),
|
|
176
|
+
"depthLower" not in m.keys(),
|
|
177
|
+
not get_lookup_value(m.get("term", {}), LOOKUPS["measurement"][1], model=MODEL, model_key=model_key)
|
|
178
|
+
])]
|
|
179
|
+
|
|
180
|
+
logRequirements(site, model=MODEL, model_key=model_key,
|
|
181
|
+
has_measurements_with_depths=has_measurements_with_depths,
|
|
182
|
+
has_missing_depths=bool(measurements_missing_depth_recommended))
|
|
183
|
+
|
|
184
|
+
should_run = has_measurements_with_depths or bool(measurements_missing_depth_recommended)
|
|
185
|
+
for measurement in measurements_with_depths + measurements_missing_depth_recommended:
|
|
186
|
+
term_id = measurement.get("term", {}).get("@id", {})
|
|
187
|
+
logShouldRun(site, MODEL, term_id, should_run)
|
|
188
|
+
return should_run, measurements_with_depths, measurements_missing_depth_recommended
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def run(site: dict):
|
|
192
|
+
should_run, measurements_with_depths, measurements_missing_depth = _should_run(site=site, model_key=MODEL_KEY)
|
|
193
|
+
needed_depths = _get_needed_depths(site)
|
|
194
|
+
return non_empty_list(flatten(
|
|
195
|
+
_run_harmonisation(measurements=measurements_with_depths, needed_depths=needed_depths)
|
|
196
|
+
+ _run_gap_fill_depths(measurements_missing_depths=measurements_missing_depth)
|
|
197
|
+
)) if should_run else []
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from hestia_earth.schema import CycleFunctionalUnit, SiteSiteType, TermTermType
|
|
2
2
|
from hestia_earth.utils.model import filter_list_term_type, find_term_match, find_primary_product
|
|
3
|
-
from hestia_earth.utils.tools import
|
|
3
|
+
from hestia_earth.utils.tools import list_sum, safe_parse_float, safe_parse_date
|
|
4
4
|
|
|
5
5
|
from ..log import logRequirements, debugValues
|
|
6
6
|
from .lookup import factor_value
|
|
@@ -368,7 +368,7 @@ def is_organic(cycle: dict):
|
|
|
368
368
|
return any([get_lookup_value(p.get('term', {}), 'isOrganic') == 'organic' for p in practices])
|
|
369
369
|
|
|
370
370
|
|
|
371
|
-
def is_irrigated(cycle: dict):
|
|
371
|
+
def is_irrigated(cycle: dict, **log_ars):
|
|
372
372
|
"""
|
|
373
373
|
Check if the `Cycle` is irrigated, i.e. if it contains an irrigated `Practice` with a value above `0`.
|
|
374
374
|
|
|
@@ -376,16 +376,17 @@ def is_irrigated(cycle: dict):
|
|
|
376
376
|
----------
|
|
377
377
|
cycle : dict
|
|
378
378
|
The `Cycle`.
|
|
379
|
+
log_ars : dict[str, Any]
|
|
380
|
+
Extra loggging, e.g. model, term.
|
|
379
381
|
|
|
380
382
|
Returns
|
|
381
383
|
-------
|
|
382
384
|
bool
|
|
383
385
|
`True` if the `Cycle` is irrigated, `False` otherwise.
|
|
384
386
|
"""
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
]
|
|
388
|
-
return list_sum(flatten([p.get('value', []) for p in irrigated_practices])) > 0
|
|
387
|
+
practices = filter_list_term_type(cycle.get('practices', []), TermTermType.WATERREGIME)
|
|
388
|
+
irrigated_practices = [p for p in practices if get_lookup_value(p.get('term', {}), 'irrigated', **log_ars)]
|
|
389
|
+
return any([list_sum(p.get('value', []), 0) > 0 for p in irrigated_practices])
|
|
389
390
|
|
|
390
391
|
|
|
391
392
|
def cycle_end_year(cycle: dict):
|
|
@@ -4,6 +4,8 @@ from hestia_earth.utils.model import linked_node
|
|
|
4
4
|
from hestia_earth.utils.lookup import get_table_value, download_lookup, column_name
|
|
5
5
|
|
|
6
6
|
from . import _term_id, _include_methodModel
|
|
7
|
+
from .blank_node import find_terms_value
|
|
8
|
+
from .constant import Units, get_atomic_conversion
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
def _new_emission(term, model=None):
|
|
@@ -17,3 +19,16 @@ def is_in_system_boundary(term_id: str):
|
|
|
17
19
|
value = get_table_value(lookup, 'termid', term_id, column_name('inHestiaDefaultSystemBoundary'))
|
|
18
20
|
# handle numpy boolean
|
|
19
21
|
return not (not value)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_nh3_no3_nox_to_n(cycle: dict, nh3_term_id: str, no3_term_id: str, nox_term_id: str, allow_none: bool = False):
|
|
25
|
+
default_value = 0 if allow_none else None
|
|
26
|
+
|
|
27
|
+
nh3 = find_terms_value(cycle.get('emissions', []), nh3_term_id, default=default_value)
|
|
28
|
+
nh3 = None if nh3 is None else nh3 / get_atomic_conversion(Units.KG_NH3, Units.TO_N)
|
|
29
|
+
no3 = find_terms_value(cycle.get('emissions', []), no3_term_id, default=default_value)
|
|
30
|
+
no3 = None if no3 is None else no3 / get_atomic_conversion(Units.KG_NO3, Units.TO_N)
|
|
31
|
+
nox = find_terms_value(cycle.get('emissions', []), nox_term_id, default=default_value)
|
|
32
|
+
nox = None if nox is None else nox / get_atomic_conversion(Units.KG_NOX, Units.TO_N)
|
|
33
|
+
|
|
34
|
+
return (nh3, no3, nox)
|
|
@@ -61,7 +61,7 @@ def related_cycles(site_id: str):
|
|
|
61
61
|
The related `Cycle`s as `dict`.
|
|
62
62
|
"""
|
|
63
63
|
nodes = find_related(SchemaType.SITE, site_id, SchemaType.CYCLE)
|
|
64
|
-
return
|
|
64
|
+
return non_empty_list(map(lambda node: download_hestia(node.get('@id'), SchemaType.CYCLE), nodes or []))
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
def _cycle_end_year(cycle: dict):
|
hestia_earth/models/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
VERSION = '0.59.
|
|
1
|
+
VERSION = '0.59.2'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hestia-earth-models
|
|
3
|
-
Version: 0.59.
|
|
3
|
+
Version: 0.59.2
|
|
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
|
|
@@ -3,7 +3,7 @@ hestia_earth/models/__init__.py,sha256=qEFeq3yuf3lQKVseALmL8aPM8fpCS54B_5pry00M3
|
|
|
3
3
|
hestia_earth/models/cache_sites.py,sha256=kp_3D09P-JdAn9vt7eU-KKTwd6BAXWKQL_0UQCDsH2s,4798
|
|
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=
|
|
6
|
+
hestia_earth/models/version.py,sha256=58Yl5t5ON-GW8LlDihjO_US-BZGFRvSNjAnjUrGJ5wQ,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
|
|
@@ -44,7 +44,7 @@ hestia_earth/models/cycle/excretaKgMass.py,sha256=iA8Kfl3WvyxbQpx1QOGPQZ9O_Pc5rj
|
|
|
44
44
|
hestia_earth/models/cycle/excretaKgN.py,sha256=mgJTneQIYJ9Su-rTK5ppb_k3YhICFNWsfPZtGR98RI0,2968
|
|
45
45
|
hestia_earth/models/cycle/excretaKgVs.py,sha256=ed-DcQoQXZgWF8UZDs2N-G6EBIOPmpXu3BD6jdmh0V0,2973
|
|
46
46
|
hestia_earth/models/cycle/inorganicFertiliser.py,sha256=3pJRcbZ0OQSNkFq_YC4McpiwLvWJpnL29AhhmCxr7RI,6938
|
|
47
|
-
hestia_earth/models/cycle/irrigatedTypeUnspecified.py,sha256=
|
|
47
|
+
hestia_earth/models/cycle/irrigatedTypeUnspecified.py,sha256=KlIa5eDvT47Twz6Q1kpw0rMlRjCK25CExaW58DEvc9w,2125
|
|
48
48
|
hestia_earth/models/cycle/liveAnimal.py,sha256=orJz6ZN3bbGNzU9s5xsTk3u8K4ntPSv1_PyG0Nwslh8,3934
|
|
49
49
|
hestia_earth/models/cycle/milkYield.py,sha256=RGaD5RtinMTsu6p49YUgr5z1NAVgCNFNPmwWa_Wrk3Q,5718
|
|
50
50
|
hestia_earth/models/cycle/pastureGrass.py,sha256=7PrmDMJPtsbKGa8WIOh_4NXNtbH3Pxb23pmjawQuY9o,1226
|
|
@@ -176,7 +176,7 @@ hestia_earth/models/impact_assessment/__init__.py,sha256=gTR_PhWps593fPhm-V826VL
|
|
|
176
176
|
hestia_earth/models/impact_assessment/emissions.py,sha256=zRQd17joMqij8mjRcrY9LssHgwzsYC5bkoy7iGdjj-Q,3429
|
|
177
177
|
hestia_earth/models/impact_assessment/freshwaterWithdrawalsDuringCycle.py,sha256=wvNwABEh4blgm95G9y_yorMNEjyYsq4MZiFggkPRuIE,3932
|
|
178
178
|
hestia_earth/models/impact_assessment/freshwaterWithdrawalsInputsProduction.py,sha256=DSLX_aEWaUFcFZRD46bG5lIQ4TtAtIqH-sMkVCJH2Dg,990
|
|
179
|
-
hestia_earth/models/impact_assessment/irrigated.py,sha256=
|
|
179
|
+
hestia_earth/models/impact_assessment/irrigated.py,sha256=qopAYbD91uu1Q2hJ3aB5Xl3br2Nzh7LoMTRCFOXmOv0,783
|
|
180
180
|
hestia_earth/models/impact_assessment/landOccupationInputsProduction.py,sha256=SggB_4tpiKNeb6TIQWBm-X9VwG4pzLoyHdK8JroRIsE,576
|
|
181
181
|
hestia_earth/models/impact_assessment/landTransformationFromCropland100YearAverageInputsProduction.py,sha256=jxeJS8r1qYIoyeEE-MGKbldEDL3x9CG8aIb4JdcUnj4,1036
|
|
182
182
|
hestia_earth/models/impact_assessment/landTransformationFromCropland20YearAverageInputsProduction.py,sha256=vluuIcr1jYhs11oz7nANk2qUuUVPy5uNkvpfMv_M4LE,1034
|
|
@@ -202,15 +202,15 @@ hestia_earth/models/ipcc2006/aboveGroundCropResidueRemoved.py,sha256=6FDgMH5eiO1
|
|
|
202
202
|
hestia_earth/models/ipcc2006/aboveGroundCropResidueTotal.py,sha256=vD_kpvOJmjTOjDEnlqSYBSZxjuPGvzpmCr0JIC84GKE,3431
|
|
203
203
|
hestia_earth/models/ipcc2006/belowGroundCropResidue.py,sha256=KzeRphJb1IWB_EPVcxa9tbCoNmEe80D9lKxgQOqfKoU,4138
|
|
204
204
|
hestia_earth/models/ipcc2006/co2ToAirOrganicSoilCultivation.py,sha256=8AzFuqRprk6o-uyyI3XYsTGl2dP_ALgYJXWCseYEBQ8,3029
|
|
205
|
-
hestia_earth/models/ipcc2006/n2OToAirCropResidueDecompositionIndirect.py,sha256=
|
|
205
|
+
hestia_earth/models/ipcc2006/n2OToAirCropResidueDecompositionIndirect.py,sha256=kf4WjdMzs6d8h433LFuUH9LJKJ_aMHTqEHDToGY5-Xk,2315
|
|
206
206
|
hestia_earth/models/ipcc2006/n2OToAirExcretaDirect.py,sha256=VvQTIh58JyhrdPk5FdJQBkjBDr5-Cv7CnGkNEcco3P4,1986
|
|
207
|
-
hestia_earth/models/ipcc2006/n2OToAirExcretaIndirect.py,sha256=
|
|
207
|
+
hestia_earth/models/ipcc2006/n2OToAirExcretaIndirect.py,sha256=me1MLX2WI5A_VZ11774CRxwRC6seOaxgMg_GGYCckIk,2243
|
|
208
208
|
hestia_earth/models/ipcc2006/n2OToAirInorganicFertiliserDirect.py,sha256=hhFioTDxWZ2g_SjDt0k5tq6P8AJrq48i65qUpAfW_sU,2144
|
|
209
|
-
hestia_earth/models/ipcc2006/n2OToAirInorganicFertiliserIndirect.py,sha256=
|
|
209
|
+
hestia_earth/models/ipcc2006/n2OToAirInorganicFertiliserIndirect.py,sha256=MNFyXPCLX_RqfRQkO0UzVIYVevpEBO3R2uh3sIoIycM,2863
|
|
210
210
|
hestia_earth/models/ipcc2006/n2OToAirOrganicFertiliserDirect.py,sha256=MZUmA3ajGkpi4wr020OU6m4WJdujjKkRhUVsbPgUVb8,2094
|
|
211
|
-
hestia_earth/models/ipcc2006/n2OToAirOrganicFertiliserIndirect.py,sha256=
|
|
211
|
+
hestia_earth/models/ipcc2006/n2OToAirOrganicFertiliserIndirect.py,sha256=pgNG18EwgTA7kmVw9QFtucMn8ScVeEKJAsSPxcExbI8,2801
|
|
212
212
|
hestia_earth/models/ipcc2006/n2OToAirOrganicSoilCultivationDirect.py,sha256=0J6ntZxYyLg3pUQeSQelDe36fb0nQtbMLjIBtwzHUyc,3038
|
|
213
|
-
hestia_earth/models/ipcc2006/utils.py,sha256=
|
|
213
|
+
hestia_earth/models/ipcc2006/utils.py,sha256=7-0rfkjgm8tH0dx5nfi-9sFP07L9Dli_2UCZf6eL2qU,541
|
|
214
214
|
hestia_earth/models/ipcc2013ExcludingFeedbacks/__init__.py,sha256=v4Qe-X4w3tqIHGJBNnEAK81x4ZuQMwYxQYXRncugmcU,427
|
|
215
215
|
hestia_earth/models/ipcc2013ExcludingFeedbacks/gwp100.py,sha256=8VRg-Vvzc86_CQmBH-iHNhaSnAFHew2swAMecT0aXW4,979
|
|
216
216
|
hestia_earth/models/ipcc2013IncludingFeedbacks/__init__.py,sha256=VJ16KIGQQHybzZiTvu3mpZy_3j0xcd06RHHCfPrCMgU,427
|
|
@@ -227,20 +227,24 @@ hestia_earth/models/ipcc2019/co2ToAirSoilCarbonStockChangeManagementChange.py,sh
|
|
|
227
227
|
hestia_earth/models/ipcc2019/co2ToAirUreaHydrolysis.py,sha256=ICE3r8GMoHj6WfMUxQdqdejRpOLa3cxDMyF3GvSTW0U,3700
|
|
228
228
|
hestia_earth/models/ipcc2019/croppingDuration.py,sha256=_jlFrTNDOARH2_g8s4dzuaCoLHSX2BHzSQd3uuQN32Y,3173
|
|
229
229
|
hestia_earth/models/ipcc2019/ligninContent.py,sha256=wp5EbCthCDAKyvPBfZULS9-uKEY58TQQ8ey1pf-juv8,7267
|
|
230
|
-
hestia_earth/models/ipcc2019/n2OToAirCropResidueDecompositionDirect.py,sha256=
|
|
230
|
+
hestia_earth/models/ipcc2019/n2OToAirCropResidueDecompositionDirect.py,sha256=Fand7NbT27unwgFTxi_9NxT024s63vQ7U6-tk9yp3d8,3990
|
|
231
|
+
hestia_earth/models/ipcc2019/n2OToAirCropResidueDecompositionIndirect.py,sha256=_Oj6Jw8F4rce7FmhWkzeqyB7W3ZQWpOiA10p6xrfSwc,3777
|
|
231
232
|
hestia_earth/models/ipcc2019/n2OToAirExcretaDirect.py,sha256=9rpp5NvFZOGRSnkfLhBoMqArdzKSd4fH-fgQEnbTT4I,1722
|
|
233
|
+
hestia_earth/models/ipcc2019/n2OToAirExcretaIndirect.py,sha256=4TfJg5OhTnj_ulW-IH8Jz1hMRB0zKMQdh0vBZKL6nqg,3650
|
|
232
234
|
hestia_earth/models/ipcc2019/n2OToAirInorganicFertiliserDirect.py,sha256=NfS6EiEVSf-hpWHqO3r-1PKPuHPVb6ijTNLTbOlRCp0,4062
|
|
233
|
-
hestia_earth/models/ipcc2019/n2OToAirInorganicFertiliserIndirect.py,sha256=
|
|
235
|
+
hestia_earth/models/ipcc2019/n2OToAirInorganicFertiliserIndirect.py,sha256=iNjwTyktLqD0HpwfwAEnAHbQUDNQmT7ekONF_lJobzE,3715
|
|
234
236
|
hestia_earth/models/ipcc2019/n2OToAirOrganicFertiliserDirect.py,sha256=pMyl6UtUVgPWfczgA_cdm1RUdMGi4Ln16qWrw1eesv4,4138
|
|
235
|
-
hestia_earth/models/ipcc2019/n2OToAirOrganicFertiliserIndirect.py,sha256=
|
|
237
|
+
hestia_earth/models/ipcc2019/n2OToAirOrganicFertiliserIndirect.py,sha256=9YbaR8h7P-4rLHgcwtDLnQ_hT7cKzyELjCVJ9lWV2jI,3701
|
|
238
|
+
hestia_earth/models/ipcc2019/nh3ToAirOrganicFertiliser.py,sha256=fsuc4pojyOfNrfnwLpVlfUWScm6SznJ5s_rbxhB6zJg,3717
|
|
236
239
|
hestia_earth/models/ipcc2019/nitrogenContent.py,sha256=6fGG7diDp9zAidVH75gXz9c8uxURx0Q2COo8KrkT3I4,7191
|
|
237
240
|
hestia_earth/models/ipcc2019/no3ToGroundwaterCropResidueDecomposition.py,sha256=8NOjbqJuQ-wnLz3bYmwaygSzKBdaF3N7hoELGNnO4YQ,3115
|
|
238
241
|
hestia_earth/models/ipcc2019/no3ToGroundwaterExcreta.py,sha256=mJUXLGtg9EOZq9LH0KFOKvzER1ypCUucs0ZMaNYMShc,2991
|
|
239
242
|
hestia_earth/models/ipcc2019/no3ToGroundwaterInorganicFertiliser.py,sha256=wTvMBthqmiKMn4nLbL4VD6_8_gGI2WGR3OYz3KK8sXs,3105
|
|
240
243
|
hestia_earth/models/ipcc2019/no3ToGroundwaterOrganicFertiliser.py,sha256=zOhp6NhYUuUNU_LMMwhZBP78YC2XRWRlGnajBUX2AN8,3095
|
|
241
|
-
hestia_earth/models/ipcc2019/
|
|
244
|
+
hestia_earth/models/ipcc2019/noxToAirOrganicFertiliser.py,sha256=VK3F0GUBG5CYJj0tLercVryj1ezj58PxaFi_zqijHvE,3717
|
|
245
|
+
hestia_earth/models/ipcc2019/organicCarbonPerHa.py,sha256=ADn2kv6uzfJb71ti8ydI3aGiGQMj0HsIZDjgxdU2Aic,142289
|
|
242
246
|
hestia_earth/models/ipcc2019/pastureGrass.py,sha256=CpDEtdnbKd_8eaDLcflJ-dGik3t879HIoEIzuaHNmC0,23168
|
|
243
|
-
hestia_earth/models/ipcc2019/utils.py,sha256=
|
|
247
|
+
hestia_earth/models/ipcc2019/utils.py,sha256=MSDMu15D9DnilFUgi4_6jYXC0FaKso3OODauGTMB6hs,6229
|
|
244
248
|
hestia_earth/models/ipcc2021/__init__.py,sha256=VTgGFKhwMmk_nuI1RRq0in27fHYVPBonlXlPK00K8no,409
|
|
245
249
|
hestia_earth/models/ipcc2021/gwp100.py,sha256=v-DYU-11XnWI1Ns1GEiKrJqL3JafxvhTsLmuBuFcxJU,1021
|
|
246
250
|
hestia_earth/models/jarvisAndPain1994/__init__.py,sha256=ercUwy29sV7oPIESj8UjsGB5lqiBCss9OZcbjxeeG8E,418
|
|
@@ -341,7 +345,7 @@ hestia_earth/models/lcImpactCertainEffectsInfinite/damageToTerrestrialEcosystems
|
|
|
341
345
|
hestia_earth/models/linkedImpactAssessment/__init__.py,sha256=GZb-7uylALKNabUQaPjwekZHqBBeVCuL3wG2OzHeEo8,4565
|
|
342
346
|
hestia_earth/models/mocking/__init__.py,sha256=kmSeOTSvurMUxw7Ajhf3G-SVPQ1NgmirMTk4TSOEicY,765
|
|
343
347
|
hestia_earth/models/mocking/mock_search.py,sha256=V-ycVBTkJu7PP37Ivy_16hpKBV4aEtJb5S9DfChPNSU,2038
|
|
344
|
-
hestia_earth/models/mocking/search-results.json,sha256=
|
|
348
|
+
hestia_earth/models/mocking/search-results.json,sha256=lqiVVybBoRY40119-ykY8FND8RfzK0WLCcBKlQzHE-8,39777
|
|
345
349
|
hestia_earth/models/pooreNemecek2018/__init__.py,sha256=nPboL7ULJzL5nJD5q7q9VOZt_fxbKVm8fmn1Az5YkVY,417
|
|
346
350
|
hestia_earth/models/pooreNemecek2018/aboveGroundCropResidueTotal.py,sha256=Qt-mel4dkhK6N5uUOutNOinCTFjbjtGzITaaI0LvYc4,2396
|
|
347
351
|
hestia_earth/models/pooreNemecek2018/belowGroundCropResidue.py,sha256=JT0RybbvWVlo01FO8K0Yj41HrEaJT3Kj1xfayr2X-xw,2315
|
|
@@ -447,6 +451,7 @@ hestia_earth/models/site/precipitationAnnual.py,sha256=to14BEFjUaYyCu5aIBQZtuaIr
|
|
|
447
451
|
hestia_earth/models/site/precipitationMonthly.py,sha256=yGUbiUCu1Prp3qVHuZodGrcfrbYu170WTUGyaj-KEjY,1896
|
|
448
452
|
hestia_earth/models/site/rainfallAnnual.py,sha256=Ix_B8Ny7IIRkJ_3lUvoHOjPgqCyR9I0U3_ADUUtMqsY,2003
|
|
449
453
|
hestia_earth/models/site/rainfallMonthly.py,sha256=2Uo8F-YxnTK0_txlHmiAyVp1bGfWD4bneRKyg4tdQkI,1881
|
|
454
|
+
hestia_earth/models/site/soilMeasurement.py,sha256=pFh7-lpcBrvpOZ071XhadpuK_5AoywIFaekRfGosY5U,7839
|
|
450
455
|
hestia_earth/models/site/temperatureAnnual.py,sha256=Q3b1RH2_hpA0JWwOYA5nKgMGcXHjV8-akXT9vB0cbwc,2012
|
|
451
456
|
hestia_earth/models/site/temperatureMonthly.py,sha256=yXwpFCGT2tUqvVBNedaPyBmN_KlzZqo5yv2TWem1pBk,1890
|
|
452
457
|
hestia_earth/models/site/totalNitrogenPerKgSoil.py,sha256=8ERrTZpN_yCRUyFg_EYaX4abE9jLcyX3lx3MO4Bi6CE,1938
|
|
@@ -501,9 +506,9 @@ hestia_earth/models/utils/crop.py,sha256=S8UycHpkgx_TznW3Q7pchEMlCQ623T_SqU6V5fB
|
|
|
501
506
|
hestia_earth/models/utils/cropResidue.py,sha256=_0Q35CrliJeo31xGHsPWe8A2oHxijdIsOrf3gBEqhlA,612
|
|
502
507
|
hestia_earth/models/utils/cropResidueManagement.py,sha256=nIDFjf39rDD10UHSVudfDyu-EiL261g8jyrgS-2aDKw,347
|
|
503
508
|
hestia_earth/models/utils/currency.py,sha256=f_ArJANb--pZq4LL49SXQ1AMX_oKroqwBXKRRQqZwsM,578
|
|
504
|
-
hestia_earth/models/utils/cycle.py,sha256=
|
|
509
|
+
hestia_earth/models/utils/cycle.py,sha256=F5dykDeHJfnSm6m7YCqQT3Ip3OZsAB-oipbKwbvslBE,16647
|
|
505
510
|
hestia_earth/models/utils/ecoClimateZone.py,sha256=NHFt-A9EiWXC6tUNIxkgOWUZOjj4I4uwJIP9ddDZegw,1112
|
|
506
|
-
hestia_earth/models/utils/emission.py,sha256=
|
|
511
|
+
hestia_earth/models/utils/emission.py,sha256=AVp-ngrb4VHYT8BG1QA5EEb17edT3cLonsXV3cNm04U,1576
|
|
507
512
|
hestia_earth/models/utils/excretaManagement.py,sha256=NuWPQjFZxMVt9sYgBjcqhGWCFk_OKb3sA9Ovcff3fRQ,428
|
|
508
513
|
hestia_earth/models/utils/feedipedia.py,sha256=fqlpAwG_jbZAFPWJ-yUI7gwn0oq--1GLTlHLsCeBbPQ,3181
|
|
509
514
|
hestia_earth/models/utils/fuel.py,sha256=r1MKMMxg-PYiVlRutP83RuvY2rsdCQ1iN6ekSGGQGpA,1379
|
|
@@ -519,7 +524,7 @@ hestia_earth/models/utils/practice.py,sha256=tNadOzsrNlCEt801B815XaruJXzZ5yPASam
|
|
|
519
524
|
hestia_earth/models/utils/product.py,sha256=XwxrRwdREWc4N5cE0oLJbLdEucKFRKgKNDj-Kd8mZEQ,9837
|
|
520
525
|
hestia_earth/models/utils/productivity.py,sha256=bUBVCZInGqHuHZvHDSYPQkjWXQxOtTjEk-1-f_BsFOo,594
|
|
521
526
|
hestia_earth/models/utils/property.py,sha256=7UV9pxSX49RnUsbEqOeohzxyXXShao1XAnEYCCVKS0k,4923
|
|
522
|
-
hestia_earth/models/utils/site.py,sha256=
|
|
527
|
+
hestia_earth/models/utils/site.py,sha256=4i6rjvFIzOEcsNcF1B9I8OFdVR_iFDODcWgq2_XFXfc,3155
|
|
523
528
|
hestia_earth/models/utils/source.py,sha256=HhZkvQoFdy6j6FC2cwP5EbHXHFM4pif9gpnuzeDwEh4,1746
|
|
524
529
|
hestia_earth/models/utils/temperature.py,sha256=ljlG4-yCgFFb6LRZweb18cZKLrr7K2mqd4E4Hz_D1f8,476
|
|
525
530
|
hestia_earth/models/utils/term.py,sha256=_DahtnHIS5wtyEXew3gpV52QjnsAWQZmyxnz4fu6mrI,17780
|
|
@@ -744,17 +749,21 @@ tests/models/ipcc2019/test_co2ToAirUreaHydrolysis.py,sha256=MmtEME0xjsa3KojFk_fx
|
|
|
744
749
|
tests/models/ipcc2019/test_croppingDuration.py,sha256=gLRXeR6Tqa7ciD9KTRfsIflSeIIWT2iOpZMdcxAQla4,1871
|
|
745
750
|
tests/models/ipcc2019/test_ligninContent.py,sha256=eIKEN__ab-0R52EhlhPSBiHnmTl6xOf1XbI33O-W9A4,4146
|
|
746
751
|
tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionDirect.py,sha256=lVfSKpVszGK42pzo2FefXNZRmXbqOt25IBcnxvhC_X0,2418
|
|
752
|
+
tests/models/ipcc2019/test_n2OToAirCropResidueDecompositionIndirect.py,sha256=it2PVNYBNAvQWmWLDJ9Evjqtx7SJl-X0ZyQz3Fuvb3k,2119
|
|
747
753
|
tests/models/ipcc2019/test_n2OToAirExcretaDirect.py,sha256=JYvBK4edcqfHrMPwgBFXF6km51ew9RISUcfQ_RNf2RY,1216
|
|
754
|
+
tests/models/ipcc2019/test_n2OToAirExcretaIndirect.py,sha256=z46L5JMB4-W0uCyyFlLKTEyDnt2gUHRkH7dEXK6ioHk,2098
|
|
748
755
|
tests/models/ipcc2019/test_n2OToAirInorganicFertiliserDirect.py,sha256=ffk-aom1BqyEmqm-JESWX5MErrAVAgVuH1gjW32U5Pk,2407
|
|
749
|
-
tests/models/ipcc2019/test_n2OToAirInorganicFertiliserIndirect.py,sha256=
|
|
756
|
+
tests/models/ipcc2019/test_n2OToAirInorganicFertiliserIndirect.py,sha256=RnU8CkUCYBBO1bgJALnoVgjTHLL1L1sja2nsyeVA_cg,2113
|
|
750
757
|
tests/models/ipcc2019/test_n2OToAirOrganicFertiliserDirect.py,sha256=XQpzdEFT7qSw6KKRYEZ6Cmzkc_xLyG98FHH1PSfOUo0,2403
|
|
751
|
-
tests/models/ipcc2019/test_n2OToAirOrganicFertiliserIndirect.py,sha256=
|
|
758
|
+
tests/models/ipcc2019/test_n2OToAirOrganicFertiliserIndirect.py,sha256=hW84sTlhB8mKRSFJX_iQS4gYo74zCtY-9zr1VHLC5GU,2111
|
|
759
|
+
tests/models/ipcc2019/test_nh3ToAirOrganicFertiliser.py,sha256=Z4a20I2UnZdzm6FqHnlHRXXVCY993_SHT7nG-zAhx-c,1104
|
|
752
760
|
tests/models/ipcc2019/test_nitrogenContent.py,sha256=rKl_05PCC0OSsAhG0cHJOqnt9LsCaFnRpJorkm1TShA,3704
|
|
753
761
|
tests/models/ipcc2019/test_no3ToGroundwaterCropResidueDecomposition.py,sha256=4__3HDUDWt5KjQGcXEFXHBgP_jT0rxvIzpBLH_mP9WE,1729
|
|
754
762
|
tests/models/ipcc2019/test_no3ToGroundwaterExcreta.py,sha256=Z-pCBQvlUf0ttmCERgezW-6e3KlX45YEVccOwthf5lU,1588
|
|
755
763
|
tests/models/ipcc2019/test_no3ToGroundwaterInorganicFertiliser.py,sha256=e7REnQ9r9a8xroq5aPp0NIzmkad_6MyTuceRTYoKdkE,1613
|
|
756
764
|
tests/models/ipcc2019/test_no3ToGroundwaterOrganicFertiliser.py,sha256=e1ZViD12qB3bLdH3TJw3GbBP8iqMen-UJbcFkytb3VQ,1609
|
|
757
|
-
tests/models/ipcc2019/
|
|
765
|
+
tests/models/ipcc2019/test_noxToAirOrganicFertiliser.py,sha256=LR5pjV5vRbgSSQAw8kYRp_ij4CHInzgaDS6EggQuBiw,1104
|
|
766
|
+
tests/models/ipcc2019/test_organicCarbonPerHa.py,sha256=lsg148KPupjF4ds8yUy1Cl2hcVXaGT9AIgkGycbHqXI,21643
|
|
758
767
|
tests/models/ipcc2019/test_pastureGrass.py,sha256=pE4PWdR541v4xWDYihP7Dou8V1iqg5GwD5_rjGRzrds,2292
|
|
759
768
|
tests/models/ipcc2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
760
769
|
tests/models/ipcc2021/test_gwp100.py,sha256=JRklKMSg-OXopb9ZufGgl94deuMuJSsfNXRZDBtOZrE,1119
|
|
@@ -956,6 +965,7 @@ tests/models/site/test_precipitationAnnual.py,sha256=h0tXvykZw4Zaw225RHfvw-3DvAy
|
|
|
956
965
|
tests/models/site/test_precipitationMonthly.py,sha256=iccr-_ZrseM_OT3AKZbTNQhRFSIe-R6wXTDS-2wIVew,995
|
|
957
966
|
tests/models/site/test_rainfallAnnual.py,sha256=4YYna66qjJptPJ_URvdcQuRC3dri9SB0xmWP8DFwslM,986
|
|
958
967
|
tests/models/site/test_rainfallMonthly.py,sha256=A3gIe2Yxt9CLtLcAJNCQ0-8aRB49VdfKBLBy-7eDgJw,985
|
|
968
|
+
tests/models/site/test_soilMeasurement.py,sha256=yXOG0EKyk57NvIqVDIohjZRubQ4aJoLw63Nwi6H54r8,4445
|
|
959
969
|
tests/models/site/test_temperatureAnnual.py,sha256=nOJG9ZJ8NCMM8T47uxxBeloIYLFN6-xtvUBqJsqt8xk,992
|
|
960
970
|
tests/models/site/test_temperatureMonthly.py,sha256=C2lv-lpYqH7VUGOlxNLE6d7k_dFS6NYe8BvMlrJorCw,991
|
|
961
971
|
tests/models/site/test_totalNitrogenPerKgSoil.py,sha256=2ILrA0jQKGniiKwS5FF3ZLtudgUgjcMnzFtrHpJKPTc,1161
|
|
@@ -1017,8 +1027,8 @@ tests/models/utils/test_source.py,sha256=mv3vHZV5cjpoLA2I1109-YUkuzAiuhbRSnv_76_
|
|
|
1017
1027
|
tests/models/utils/test_term.py,sha256=JJmzyHnhVGeQ7tG-T6DjE7CoIJPH0guH-y2kjGeZiJY,3756
|
|
1018
1028
|
tests/models/webbEtAl2012AndSintermannEtAl2012/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1019
1029
|
tests/models/webbEtAl2012AndSintermannEtAl2012/test_nh3ToAirOrganicFertiliser.py,sha256=qi2FNXS5Af2WDtm7nq_FsprH3BfCF0XxnE0XHmC4aIY,2244
|
|
1020
|
-
hestia_earth_models-0.59.
|
|
1021
|
-
hestia_earth_models-0.59.
|
|
1022
|
-
hestia_earth_models-0.59.
|
|
1023
|
-
hestia_earth_models-0.59.
|
|
1024
|
-
hestia_earth_models-0.59.
|
|
1030
|
+
hestia_earth_models-0.59.2.dist-info/LICENSE,sha256=EFSZhfUdZCTsCIYdHzTGewMKfRfp7X9t1s2aaKxm8O0,1154
|
|
1031
|
+
hestia_earth_models-0.59.2.dist-info/METADATA,sha256=-qJ0J6ITtaF7C2fKg8Y38GtdFxZq0FMtcW4XO-H1pkA,3134
|
|
1032
|
+
hestia_earth_models-0.59.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
1033
|
+
hestia_earth_models-0.59.2.dist-info/top_level.txt,sha256=1dqA9TqpOLTEgpqa-YBsmbCmmNU1y56AtfFGEceZ2A0,19
|
|
1034
|
+
hestia_earth_models-0.59.2.dist-info/RECORD,,
|