hestia-earth-models 0.67.0__py3-none-any.whl → 0.68.0__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.
Files changed (161) hide show
  1. hestia_earth/models/aware/scarcityWeightedWaterUse.py +5 -6
  2. hestia_earth/models/blonkConsultants2016/ch4ToAirNaturalVegetationBurning.py +1 -1
  3. hestia_earth/models/blonkConsultants2016/co2ToAirAboveGroundBiomassStockChangeLandUseChange.py +1 -1
  4. hestia_earth/models/blonkConsultants2016/n2OToAirNaturalVegetationBurningDirect.py +1 -1
  5. hestia_earth/models/blonkConsultants2016/utils.py +9 -9
  6. hestia_earth/models/cache_sites.py +26 -14
  7. hestia_earth/models/chaudharyBrooks2018/damageToTerrestrialEcosystemsLandOccupation.py +2 -2
  8. hestia_earth/models/chaudharyBrooks2018/damageToTerrestrialEcosystemsLandTransformation.py +2 -2
  9. hestia_earth/models/chaudharyBrooks2018/utils.py +13 -8
  10. hestia_earth/models/cml2001Baseline/abioticResourceDepletionFossilFuels.py +2 -3
  11. hestia_earth/models/cml2001Baseline/abioticResourceDepletionMineralsAndMetals.py +1 -1
  12. hestia_earth/models/cml2001Baseline/resourceUseEnergyDepletionDuringCycle.py +5 -10
  13. hestia_earth/models/config/Cycle.json +15 -0
  14. hestia_earth/models/config/ImpactAssessment.json +14 -1
  15. hestia_earth/models/config/Site.json +8 -0
  16. hestia_earth/models/cycle/completeness/freshForage.py +7 -3
  17. hestia_earth/models/cycle/excretaKgMass.py +2 -2
  18. hestia_earth/models/cycle/inorganicFertiliser.py +67 -17
  19. hestia_earth/models/cycle/materialAndSubstrate.py +3 -2
  20. hestia_earth/models/cycle/pastureGrass.py +3 -3
  21. hestia_earth/models/dammgen2009/noxToAirExcreta.py +1 -1
  22. hestia_earth/models/ecoinventV3AndEmberClimate/__init__.py +1 -1
  23. hestia_earth/models/ecoinventV3AndEmberClimate/utils.py +2 -6
  24. hestia_earth/models/emissionNotRelevant/__init__.py +4 -4
  25. hestia_earth/models/environmentalFootprintV3_1/environmentalFootprintSingleOverallScore.py +60 -46
  26. hestia_earth/models/environmentalFootprintV3_1/photochemicalOzoneCreationPotentialHumanHealthNmvocEq.py +36 -0
  27. hestia_earth/models/environmentalFootprintV3_1/scarcityWeightedWaterUse.py +2 -2
  28. hestia_earth/models/environmentalFootprintV3_1/soilQualityIndexLandOccupation.py +9 -8
  29. hestia_earth/models/environmentalFootprintV3_1/soilQualityIndexLandTransformation.py +45 -34
  30. hestia_earth/models/environmentalFootprintV3_1/soilQualityIndexTotalLandUseEffects.py +24 -21
  31. hestia_earth/models/faostat2018/coldCarcassWeightPerHead.py +2 -2
  32. hestia_earth/models/faostat2018/coldDressedCarcassWeightPerHead.py +2 -2
  33. hestia_earth/models/faostat2018/liveweightPerHead.py +7 -8
  34. hestia_earth/models/faostat2018/product/price.py +34 -28
  35. hestia_earth/models/faostat2018/readyToCookWeightPerHead.py +2 -2
  36. hestia_earth/models/faostat2018/utils.py +15 -27
  37. hestia_earth/models/frischknechtEtAl2000/ionisingRadiationKbqU235Eq.py +16 -9
  38. hestia_earth/models/geospatialDatabase/altitude.py +60 -0
  39. hestia_earth/models/geospatialDatabase/croppingIntensity.py +1 -1
  40. hestia_earth/models/geospatialDatabase/ecoClimateZone.py +2 -2
  41. hestia_earth/models/geospatialDatabase/longFallowRatio.py +1 -1
  42. hestia_earth/models/geospatialDatabase/utils.py +4 -1
  43. hestia_earth/models/globalCropWaterModel2008/rootingDepth.py +2 -3
  44. hestia_earth/models/haversineFormula/transport/distance.py +3 -3
  45. hestia_earth/models/hestia/landCover.py +72 -45
  46. hestia_earth/models/hestia/landTransformation100YearAverageDuringCycle.py +1 -1
  47. hestia_earth/models/hestia/landTransformation20YearAverageDuringCycle.py +1 -1
  48. hestia_earth/models/hestia/seed_emissions.py +11 -7
  49. hestia_earth/models/impact_assessment/__init__.py +3 -3
  50. hestia_earth/models/ipcc2019/aboveGroundBiomass.py +1 -1
  51. hestia_earth/models/ipcc2019/animal/fatContent.py +1 -1
  52. hestia_earth/models/ipcc2019/animal/hoursWorkedPerDay.py +1 -1
  53. hestia_earth/models/ipcc2019/animal/liveweightGain.py +1 -1
  54. hestia_earth/models/ipcc2019/animal/liveweightPerHead.py +1 -1
  55. hestia_earth/models/ipcc2019/animal/milkYieldPerAnimal.py +1 -1
  56. hestia_earth/models/ipcc2019/animal/pastureGrass.py +1 -1
  57. hestia_earth/models/ipcc2019/animal/pregnancyRateTotal.py +1 -1
  58. hestia_earth/models/ipcc2019/animal/trueProteinContent.py +1 -1
  59. hestia_earth/models/ipcc2019/animal/utils.py +5 -7
  60. hestia_earth/models/ipcc2019/animal/weightAtMaturity.py +1 -1
  61. hestia_earth/models/ipcc2019/belowGroundBiomass.py +1 -1
  62. hestia_earth/models/ipcc2019/ch4ToAirEntericFermentation.py +2 -2
  63. hestia_earth/models/ipcc2019/ch4ToAirExcreta.py +6 -7
  64. hestia_earth/models/ipcc2019/ch4ToAirFloodedRice.py +5 -3
  65. hestia_earth/models/ipcc2019/co2ToAirCarbonStockChange_utils.py +1 -1
  66. hestia_earth/models/ipcc2019/croppingDuration.py +3 -6
  67. hestia_earth/models/ipcc2019/nonCo2EmissionsToAirNaturalVegetationBurning.py +947 -0
  68. hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_1_utils.py +4 -4
  69. hestia_earth/models/ipcc2019/organicCarbonPerHa_tier_2_utils.py +1 -1
  70. hestia_earth/models/ipcc2019/pastureGrass.py +1 -1
  71. hestia_earth/models/koble2014/residueBurnt.py +5 -7
  72. hestia_earth/models/koble2014/residueRemoved.py +5 -7
  73. hestia_earth/models/lcImpactAllEffects100Years/damageToHumanHealthWaterStress.py +2 -2
  74. hestia_earth/models/lcImpactAllEffectsInfinite/damageToHumanHealthWaterStress.py +2 -2
  75. hestia_earth/models/lcImpactCertainEffects100Years/damageToHumanHealthWaterStress.py +2 -2
  76. hestia_earth/models/lcImpactCertainEffectsInfinite/damageToHumanHealthWaterStress.py +2 -2
  77. hestia_earth/models/log.py +1 -1
  78. hestia_earth/models/mocking/search-results.json +3477 -1045
  79. hestia_earth/models/site/management.py +1 -1
  80. hestia_earth/models/site/post_checks/__init__.py +3 -2
  81. hestia_earth/models/site/post_checks/country.py +9 -0
  82. hestia_earth/models/site/pre_checks/__init__.py +3 -2
  83. hestia_earth/models/site/pre_checks/country.py +9 -0
  84. hestia_earth/models/utils/__init__.py +1 -16
  85. hestia_earth/models/utils/blank_node.py +89 -36
  86. hestia_earth/models/utils/completeness.py +3 -2
  87. hestia_earth/models/utils/cycle.py +5 -4
  88. hestia_earth/models/utils/ecoClimateZone.py +2 -2
  89. hestia_earth/models/utils/emission.py +5 -5
  90. hestia_earth/models/utils/feedipedia.py +6 -6
  91. hestia_earth/models/utils/impact_assessment.py +6 -6
  92. hestia_earth/models/utils/indicator.py +9 -7
  93. hestia_earth/models/utils/inorganicFertiliser.py +4 -6
  94. hestia_earth/models/utils/input.py +6 -5
  95. hestia_earth/models/utils/lookup.py +35 -105
  96. hestia_earth/models/utils/management.py +4 -4
  97. hestia_earth/models/utils/measurement.py +6 -7
  98. hestia_earth/models/utils/method.py +20 -0
  99. hestia_earth/models/utils/practice.py +4 -5
  100. hestia_earth/models/utils/product.py +4 -5
  101. hestia_earth/models/utils/property.py +12 -22
  102. hestia_earth/models/utils/site.py +14 -8
  103. hestia_earth/models/utils/term.py +27 -1
  104. hestia_earth/models/version.py +1 -1
  105. hestia_earth/orchestrator/log.py +0 -11
  106. hestia_earth/orchestrator/models/__init__.py +17 -4
  107. hestia_earth/orchestrator/strategies/run/add_blank_node_if_missing.py +2 -20
  108. {hestia_earth_models-0.67.0.dist-info → hestia_earth_models-0.68.0.dist-info}/METADATA +2 -2
  109. {hestia_earth_models-0.67.0.dist-info → hestia_earth_models-0.68.0.dist-info}/RECORD +159 -151
  110. tests/models/cml2001Baseline/test_abioticResourceDepletionFossilFuels.py +3 -3
  111. tests/models/cml2001Baseline/test_resourceUseEnergyDepletionDuringCycle.py +68 -35
  112. tests/models/cycle/test_coldCarcassWeightPerHead.py +1 -1
  113. tests/models/cycle/test_coldDressedCarcassWeightPerHead.py +1 -1
  114. tests/models/cycle/test_concentrateFeed.py +1 -1
  115. tests/models/cycle/test_energyContentLowerHeatingValue.py +1 -1
  116. tests/models/cycle/test_excretaKgMass.py +1 -1
  117. tests/models/cycle/test_feedConversionRatio.py +3 -3
  118. tests/models/cycle/test_pastureGrass.py +1 -1
  119. tests/models/cycle/test_readyToCookWeightPerHead.py +1 -1
  120. tests/models/environmentalFootprintV3_1/test_environmentalFootprintSingleOverallScore.py +38 -8
  121. tests/models/environmentalFootprintV3_1/test_photochemicalOzoneCreationPotentialHumanHealthNmvocEq.py +30 -0
  122. tests/models/environmentalFootprintV3_1/test_soilQualityIndexLandTransformation.py +65 -36
  123. tests/models/environmentalFootprintV3_1/test_soilQualityIndexTotalLandUseEffects.py +30 -7
  124. tests/models/faostat2018/product/test_price.py +27 -14
  125. tests/models/faostat2018/test_faostat_utils.py +4 -24
  126. tests/models/faostat2018/test_liveweightPerHead.py +9 -9
  127. tests/models/globalCropWaterModel2008/test_rootingDepth.py +7 -3
  128. tests/models/haversineFormula/transport/test_distance.py +1 -1
  129. tests/models/hestia/test_landCover.py +53 -5
  130. tests/models/ipcc2019/animal/test_pastureGrass.py +5 -3
  131. tests/models/ipcc2019/test_aboveGroundCropResidueTotal.py +4 -4
  132. tests/models/ipcc2019/test_belowGroundCropResidue.py +4 -4
  133. tests/models/ipcc2019/test_ch4ToAirEntericFermentation.py +10 -10
  134. tests/models/ipcc2019/test_croppingDuration.py +1 -1
  135. tests/models/ipcc2019/test_nonCo2EmissionsToAirNaturalVegetationBurning.py +83 -0
  136. tests/models/ipcc2019/test_organicCarbonPerHa.py +12 -12
  137. tests/models/ipcc2019/test_pastureGrass.py +5 -3
  138. tests/models/pooreNemecek2018/test_excretaKgN.py +5 -5
  139. tests/models/pooreNemecek2018/test_excretaKgVs.py +2 -2
  140. tests/models/site/post_checks/test_country.py +6 -0
  141. tests/models/site/pre_checks/test_cache_geospatialDatabase.py +1 -1
  142. tests/models/site/pre_checks/test_country.py +12 -0
  143. tests/models/site/test_management.py +1 -4
  144. tests/models/test_ecoinventV3.py +7 -3
  145. tests/models/utils/test_blank_node.py +17 -177
  146. tests/models/utils/test_dataCompleteness.py +5 -5
  147. tests/models/utils/test_emission.py +2 -2
  148. tests/models/utils/test_indicator.py +2 -2
  149. tests/models/utils/test_input.py +2 -2
  150. tests/models/utils/test_measurement.py +2 -4
  151. tests/models/utils/test_practice.py +4 -2
  152. tests/models/utils/test_product.py +2 -2
  153. tests/models/utils/test_property.py +4 -2
  154. tests/models/utils/test_site.py +7 -0
  155. tests/orchestrator/models/test_transformations.py +4 -1
  156. tests/orchestrator/strategies/run/test_add_blank_node_if_missing.py +4 -9
  157. hestia_earth/models/environmentalFootprintV3_1/utils.py +0 -17
  158. tests/models/utils/test_lookup.py +0 -10
  159. {hestia_earth_models-0.67.0.dist-info → hestia_earth_models-0.68.0.dist-info}/LICENSE +0 -0
  160. {hestia_earth_models-0.67.0.dist-info → hestia_earth_models-0.68.0.dist-info}/WHEEL +0 -0
  161. {hestia_earth_models-0.67.0.dist-info → hestia_earth_models-0.68.0.dist-info}/top_level.txt +0 -0
@@ -96,7 +96,7 @@ def _measurement(
96
96
  Build a HESTIA `Measurement` node to contain a value and descriptive statistics calculated by the models.
97
97
 
98
98
  The `descriptive_stats_dict` parameter should include the following keys and values from the
99
- [Measurement](https://www-staging.hestia.earth/schema/Measurement) schema:
99
+ [Measurement](https://hestia.earth/schema/Measurement) schema:
100
100
  ```
101
101
  {
102
102
  "value": list[float],
@@ -874,9 +874,9 @@ def _compile_inventory(
874
874
  site_id : str
875
875
  The `@id` of the site.
876
876
  site_type : str
877
- A valid [site type](https://www-staging.hestia.earth/schema/Site#siteType).
877
+ A valid [site type](https://hestia.earth/schema/Site#siteType).
878
878
  management_nodes : list[dict]
879
- A list of [Management nodes](https://www-staging.hestia.earth/schema/Management).
879
+ A list of [Management nodes](https://hestia.earth/schema/Management).
880
880
  ipcc_soil_category : IpccSoilCategory
881
881
  The site's assigned IPCC soil category.
882
882
 
@@ -949,7 +949,7 @@ def _assign_ipcc_soil_category(
949
949
  Parameters
950
950
  ----------
951
951
  measurement_nodes : list[dict]
952
- List of A list of [Measurement nodes](https://www-staging.hestia.earth/schema/Measurement)..
952
+ List of A list of [Measurement nodes](https://hestia.earth/schema/Measurement)..
953
953
  default : IpccSoilCategory, optional
954
954
  The default soil category if none matches, by default IpccSoilCategory.LOW_ACTIVITY_CLAY_SOILS.
955
955
 
@@ -110,7 +110,7 @@ def _measurement(
110
110
  Build a HESTIA `Measurement` node to contain a value and descriptive statistics calculated by the models.
111
111
 
112
112
  The `descriptive_stats_dict` parameter should include the following keys and values from the
113
- [Measurement](https://www-staging.hestia.earth/schema/Measurement) schema:
113
+ [Measurement](https://hestia.earth/schema/Measurement) schema:
114
114
  ```
115
115
  {
116
116
  "value": list[float],
@@ -140,7 +140,7 @@ LOOKUPS = {
140
140
  "mjKgABNetEnergyGrowthSheepGoatsIpcc2019",
141
141
  "isWoolProducingAnimal"
142
142
  ],
143
- "system-liveAnimal-activityCoefficient-ipcc2019": "using animal term @id",
143
+ "system-liveAnimal-activityCoefficient-ipcc2019": "",
144
144
  "landCover": "grazedPastureGrassInputId",
145
145
  "crop-property": ["energyDigestibilityRuminants", "energyContentHigherHeatingValue"],
146
146
  "crop": "grazedPastureGrassInputId",
@@ -1,8 +1,8 @@
1
- from hestia_earth.utils.lookup import get_table_value, download_lookup, column_name
2
1
  from hestia_earth.utils.tools import safe_parse_float
3
2
 
4
- from hestia_earth.models.log import logRequirements, debugMissingLookup
3
+ from hestia_earth.models.log import logRequirements
5
4
  from hestia_earth.models.utils.term import get_lookup_value
5
+ from hestia_earth.models.utils.lookup import get_region_lookup_value
6
6
  from . import MODEL
7
7
  from .utils import _should_run, _practice
8
8
 
@@ -17,7 +17,7 @@ REQUIREMENTS = {
17
17
  }
18
18
  LOOKUPS = {
19
19
  "crop": ["cropGroupingResidue", "Combustion_Factor_crop_residue"],
20
- "region-crop-cropGroupingResidue-burnt": "using result from `cropGroupingResidue`"
20
+ "region-crop-cropGroupingResidue-burnt": ""
21
21
  }
22
22
  RETURNS = {
23
23
  "Practice": [{
@@ -30,12 +30,10 @@ LOOKUP_NAME = 'region-crop-cropGroupingResidue-burnt.csv'
30
30
 
31
31
  def _get_default_percent(cycle: dict, term: dict, country_id: str):
32
32
  crop_grouping = get_lookup_value(term, LOOKUPS['crop'][0], model=MODEL, term=TERM_ID)
33
- lookup = download_lookup(LOOKUP_NAME)
34
33
  percent = safe_parse_float(
35
- get_table_value(lookup, 'termid', country_id, column_name(crop_grouping)), None
34
+ get_region_lookup_value(LOOKUP_NAME, country_id, crop_grouping, model=MODEL, term=TERM_ID), None
36
35
  ) if crop_grouping else None
37
- debugMissingLookup(LOOKUP_NAME, 'termid', country_id, crop_grouping, percent, model=MODEL)
38
- comb_factor = safe_parse_float(get_lookup_value(term, LOOKUPS['crop'][1], model=MODEL, term=TERM_ID))
36
+ comb_factor = safe_parse_float(get_lookup_value(term, LOOKUPS['crop'][1]))
39
37
  logRequirements(cycle, model=MODEL, term=TERM_ID,
40
38
  crop_grouping=crop_grouping,
41
39
  country_id=country_id,
@@ -1,8 +1,8 @@
1
- from hestia_earth.utils.lookup import get_table_value, download_lookup, column_name
2
1
  from hestia_earth.utils.tools import safe_parse_float
3
2
 
4
- from hestia_earth.models.log import logRequirements, debugMissingLookup
3
+ from hestia_earth.models.log import logRequirements
5
4
  from hestia_earth.models.utils.term import get_lookup_value
5
+ from hestia_earth.models.utils.lookup import get_region_lookup_value
6
6
  from . import MODEL
7
7
  from .utils import _should_run, _practice
8
8
 
@@ -17,7 +17,7 @@ REQUIREMENTS = {
17
17
  }
18
18
  LOOKUPS = {
19
19
  "crop": "cropGroupingResidue",
20
- "region-crop-cropGroupingResidue-removed": "using result from `cropGroupingResidue`"
20
+ "region-crop-cropGroupingResidue-removed": ""
21
21
  }
22
22
  RETURNS = {
23
23
  "Practice": [{
@@ -30,11 +30,9 @@ LOOKUP_NAME = 'region-crop-cropGroupingResidue-removed.csv'
30
30
 
31
31
  def _get_default_percent(cycle: dict, term: dict, country_id: str):
32
32
  crop_grouping = get_lookup_value(term, LOOKUPS['crop'], model=MODEL, term=TERM_ID)
33
- percent = get_table_value(
34
- download_lookup(LOOKUP_NAME), 'termid', country_id, column_name(crop_grouping)
33
+ percent = get_region_lookup_value(
34
+ LOOKUP_NAME, country_id, crop_grouping, model=MODEL, term=TERM_ID
35
35
  ) if crop_grouping else None
36
- debugMissingLookup(LOOKUP_NAME, 'termid', country_id, crop_grouping, percent,
37
- model=MODEL, term=TERM_ID)
38
36
  logRequirements(cycle, model=MODEL, term=TERM_ID,
39
37
  crop_grouping=crop_grouping,
40
38
  country_id=country_id,
@@ -22,8 +22,8 @@ RETURNS = {
22
22
  }
23
23
  LOOKUPS = {
24
24
  "@doc": "Different lookup files are used depending on the situation",
25
- "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `awareWaterBasinId`",
26
- "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `region`"
25
+ "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "",
26
+ "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": ""
27
27
  }
28
28
  TERM_ID = 'damageToHumanHealthWaterStress'
29
29
  LOOKUP_SUFFIX = 'resourceUse-WaterStressDamageToHumanHealthLCImpactCF'
@@ -22,8 +22,8 @@ RETURNS = {
22
22
  }
23
23
  LOOKUPS = {
24
24
  "@doc": "Different lookup files are used depending on the situation",
25
- "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `awareWaterBasinId`",
26
- "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `region`"
25
+ "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "",
26
+ "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": ""
27
27
  }
28
28
  TERM_ID = 'damageToHumanHealthWaterStress'
29
29
  LOOKUP_SUFFIX = 'resourceUse-WaterStressDamageToHumanHealthLCImpactCF'
@@ -22,8 +22,8 @@ RETURNS = {
22
22
  }
23
23
  LOOKUPS = {
24
24
  "@doc": "Different lookup files are used depending on the situation",
25
- "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `awareWaterBasinId`",
26
- "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `region`"
25
+ "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "",
26
+ "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": ""
27
27
  }
28
28
  TERM_ID = 'damageToHumanHealthWaterStress'
29
29
  LOOKUP_SUFFIX = 'resourceUse-WaterStressDamageToHumanHealthLCImpactCF'
@@ -22,8 +22,8 @@ RETURNS = {
22
22
  }
23
23
  LOOKUPS = {
24
24
  "@doc": "Different lookup files are used depending on the situation",
25
- "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `awareWaterBasinId`",
26
- "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "using `region`"
25
+ "awareWaterBasinId-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": "",
26
+ "region-resourceUse-WaterStressDamageToHumanHealthLCImpactCF": ""
27
27
  }
28
28
  TERM_ID = 'damageToHumanHealthWaterStress'
29
29
  LOOKUP_SUFFIX = 'resourceUse-WaterStressDamageToHumanHealthLCImpactCF'
@@ -65,7 +65,7 @@ def logShouldRun(log_node: dict, model: str, term: Union[str, None], should_run:
65
65
  def debugMissingLookup(lookup_name: str, row: str, row_value: str, col: str, value, **kwargs):
66
66
  if value is None or value == '':
67
67
  extra = (', ' + _join_args(**kwargs)) if len(kwargs.keys()) > 0 else ''
68
- logger.warning('Missing lookup=%s, %s=%s, column=%s' + extra, lookup_name, row, row_value, col)
68
+ logger.warning(f'Missing lookup={lookup_name}, {row}={row_value}, column={col}' + extra)
69
69
 
70
70
 
71
71
  def logErrorRun(model: str, term: str, error: str):