diff --git a/.claude/skills/model-calibration/SKILL.md b/.claude/skills/model-calibration/SKILL.md index a565be62..cd34ca5c 100644 --- a/.claude/skills/model-calibration/SKILL.md +++ b/.claude/skills/model-calibration/SKILL.md @@ -79,6 +79,7 @@ tools/calibrate food_demand tools/calibrate cost tools/calibrate stability tools/calibrate --check # per-step staleness + provenance probe (no execution) +tools/calibrate --record # re-stamp the set as it stands (no execution) tools/calibrate --base config/.yaml [all||--check] # calibrate a dedicated set for another config ``` @@ -109,22 +110,23 @@ see [local_machine_smk_defaults.md](../../memory/local_machine_smk_defaults.md). tools/calibrate --check ``` -This runs a Snakemake dry-run per step and reports `[up-to-date]` or -`[STALE]`. `tools/smk` also prints a one-line mtime-based reminder on -every invocation, but treat that as advisory -- `git pull` touches -mtimes and produces false positives. +Takes ~20 s for the `default` set, ~30 s for `gbd-anchored`. It compares +content hashes recorded in `data/curated/calibration//fingerprint.yaml` +against the step's external DAG leaves (curated/bundled/manually-downloaded +data, rule files, scripts), its config (YAML round-tripped, so comments don't +count), and the artefacts the step wrote. Everything inside the artefact set is +excluded, so the answer is stable: a completed chain reports all-green, and +mtime churn from `git checkout` or `touch` is invisible. -`--check` is more informative but is still mtime-based, and the steps -write into a directory they all read from, so it oscillates: re-running -any step rewrites its artefacts (often byte-for-byte identical) and the -later steps immediately report `[STALE]`. A freshly completed full chain -frequently still shows one or more steps stale. Treat `[STALE]` as "worth -investigating", not "the set is wrong". The decisive test is to re-run -the step and diff its artefacts -- if they come back identical, the flag -was bookkeeping. Don't chase `--check` to all-green by re-running steps -in a loop; it does not converge. +`tools/smk` also prints a one-line mtime-based reminder on every invocation. +That one *is* advisory and does produce false positives after `git pull`; +silence it with `SMK_SKIP_CALIBRATION_HINT=1`. -Silence the mtime hint in scripted contexts with `SMK_SKIP_CALIBRATION_HINT=1`. +Editing any rule file or script in a step's DAG marks it stale, including +inert changes (refactors, comments, unrelated rules). When you have +established the artefacts are unaffected, `tools/calibrate --record` +re-stamps the set without solving. It asserts the artefacts are current, so +don't reach for it to make a genuine `[STALE]` go away. ### Triggers for a full re-run (start from `feed`) @@ -203,7 +205,7 @@ sequential (each Broyden iteration depends on the previous solve). ## Output landing zones -- `data/curated/calibration//*` -- one artefact set per base config, plus its `provenance.yaml` stamp; the `default` and `gbd-anchored` sets are **git-tracked**. Commit a set together as a refresh; mixed-vintage artefacts are the most common cause of confusing downstream solves. +- `data/curated/calibration//*` -- one artefact set per base config, plus its `provenance.yaml` stamp and `fingerprint.yaml` input hashes; the `default` and `gbd-anchored` sets are **git-tracked**. Commit a set together as a refresh; mixed-vintage artefacts are the most common cause of confusing downstream solves. - `processing/calibration--/*` -- one upstream prep tree per step (~250 MB each), NOT committed. - `results/calibration--/*` -- per-iteration solve logs, NOT committed. - `results/calibration--stability/calibration/deviation_penalty_trace.csv` -- per-iter Broyden trace (per-component lambda, achieved deviations, residual norm). Inspect when stability behaves oddly. @@ -212,7 +214,7 @@ sequential (each Broyden iteration depends on the previous solve). - A config selects its set with `calibration.source` (default: `default`); all artefact paths resolve through the `{calibration_source}` placeholder at config-load time. - Structurally divergent configs must either calibrate their own set (`calibration.source: ` + `tools/calibrate --base config/.yaml`), point at a compatible set, or set `calibration.accept_provenance_mismatch: true` (test/tutorial-grade escape hatch: warning instead of error). -- The provenance check covers config drift only; code/data staleness remains `tools/calibrate --check`'s job. Both run from `tools/calibrate --check`. +- The provenance check covers structural config drift only; input and code staleness is the fingerprint's job. Both run from `tools/calibrate --check`. - The stamp compares all non-solve-time leaves minus exempt machinery keys (see `PROVENANCE_EXEMPT_PREFIXES` in `workflow/validation/calibration_provenance.py`). Solve-time knobs (GHG price, value_per_yll, deviation_penalty, scenario overrides) never trip it. - `tests/test_calibration_provenance.py::TestDefaultStampConsistency` fails when `config/default.yaml` changes structurally without a recalibration/restamp -- that is the intended forcing function. @@ -291,9 +293,9 @@ historical centre once the chain absorbs its gaps cleanly. - **Each step must disable the calibrations of every *later* step.** The chain is a single forward pass, not an iteration to a fixed point, so a step that consumes a successor's artefact is fit against whatever - vintage happens to be on disk -- and `tools/calibrate --check` then - reports that step permanently `[STALE]`, advising a re-run that - restarts the cycle forever. The disable blocks in the step configs form + vintage happens to be on disk. That artefact is then an external leaf of + the step's DAG, so `tools/calibrate --check` goes stale every time the + successor is regenerated, and the chain never settles. The disable blocks in the step configs form a lower triangle (feed disables the other four, food_waste the last three, and so on); preserve it when adding a calibration. diff --git a/CHANGELOG.md b/CHANGELOG.md index be239635..864cb1e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -86,6 +86,15 @@ introduce breaking changes to configuration and outputs. ### Changed +- `tools/calibrate --check` now answers by content instead of by file + timestamp. Each artefact set carries a `fingerprint.yaml` hashing the step's + external inputs (curated, bundled and manually downloaded data, the rule + files and scripts its DAG runs, and its config), so `git checkout`, `touch` + and comment-only config edits no longer report anything, and re-running one + step no longer marks its successors stale. New `tools/calibrate --record` + re-stamps a set without solving, for when a code change provably cannot move + the artefacts. + - `planning_horizon` now defaults to 2020, matching `baseline_year`, so an unmodified run solves the observed year the calibration artefacts are fit against. Configs that previously relied on the 2030 default (including @@ -243,6 +252,17 @@ introduce breaking changes to configuration and outputs. ### Fixed +- Workflow startup no longer builds a full copy of the configuration for every + configured scenario when deciding whether health data is needed. On configs + with generated scenario ensembles this dominated DAG construction: for + `gsa.yaml` (16384 samples) Snakefile parsing drops from ~35 s to ~4 s, and + every Snakemake invocation against such a config benefits. + +- Solve-time calibration artefacts (feed corrections, exogenous feed and + forage, food-demand multipliers, the calibrated deviation penalty) are now + declared as inputs of `solve_model` and `calibrate_deviation_penalty`, so + Snakemake reruns solves when they change. + - The feed calibration step no longer consumes the food-waste calibration artefact, which is produced by a later step in the chain. Feed was effectively fit against whichever vintage happened to be on disk, a full diff --git a/REUSE.toml b/REUSE.toml index d8b0b7a4..c33488bb 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -36,6 +36,14 @@ precedence = "aggregate" SPDX-FileCopyrightText = "2026 Koen van Greevenbroek" SPDX-License-Identifier = "CC-BY-4.0" +# Machine-generated calibration input fingerprints (written by +# workflow/scripts/calibration_fingerprint.py via tools/calibrate). +[[annotations]] +path = "data/curated/calibration/**/fingerprint.yaml" +precedence = "aggregate" +SPDX-FileCopyrightText = "2026 Koen van Greevenbroek" +SPDX-License-Identifier = "CC-BY-4.0" + # Root LICENSE copy so GitHub detects the project license (it only scans the # repository root, not LICENSES/). The canonical text lives in LICENSES/. [[annotations]] diff --git a/data/curated/calibration/default/fingerprint.yaml b/data/curated/calibration/default/fingerprint.yaml new file mode 100644 index 00000000..57bc6f88 --- /dev/null +++ b/data/curated/calibration/default/fingerprint.yaml @@ -0,0 +1,814 @@ +# Content fingerprint of each calibration step's external inputs, written by +# workflow/scripts/calibration_fingerprint.py via tools/calibrate. Compared by +# `tools/calibrate --check`; do not edit by hand. +# Licensing: see the annotation in REUSE.toml. +steps: + cost: + artefacts: + data/curated/calibration/default/animal_cost.csv: eb7c0e40dc065ffde962d06a635fd64e95c21b9b5dd2f55e9944d4a20f0422dc + data/curated/calibration/default/crop_cost.csv: 89ce3ca3136edbaaf0fe54f6a3259b91dfabe7def2dab4aaf79b602212fbbd8e + data/curated/calibration/default/grassland_cost.csv: f202991ef38df2163060e5232209490effea748c7aa827494d12d8bacdece850 + data/curated/calibration/default/multi_crop_cost.csv: 16b75ffda24cff11340555a603499350379c917fb1266805e6bdc93e51437c80 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/consumer_values.smk: 4f3fb2650b690a41b45443b322745b698910abae3cb013f70e0eea8e54ba6290 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/calibrate_food_utility_blocks.py: e20676cd1b44c4504df3c9856131fa234088b1fd77c9f242144483f6f58ad330 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_consumer_values.py: eba7d4bd3d10632fc5fbcbc46f65acd5775f2bb74ca3aa3f5d6ff15113c3dd97 + workflow/scripts/extract_cost_calibration.py: f7475beca73108a5f6ef63f1c284625e996abc9dadf9efc981c92e2f259d3f23 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/cost.yaml: 45abcb2e750d90543222119fdd53cbd2e7f0b639e52f8bd4897ee36ea5414801 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/default/deviation_penalty.yaml: a20304c2ecfc7d1109d43aaded46fd650bdc5524f43e6d6365b56fc225faeca0 + data/curated/calibration/default/exogenous_feed.csv: 3ebcac7797beb398a9ff227f700cab0f1e01fef27d361696d1c2b05c274cb39d + data/curated/calibration/default/exogenous_forage.csv: d806b2e98968a5d0e3b8618d3882152102f11e4ce62a4de233b8560e7e1aeccc + data/curated/calibration/default/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/default/food_demand.csv: a7cc72a127b566e59057cf2cdc9a8595b79a00dfa0503a29fb55b0afa350c6e5 + data/curated/calibration/default/food_waste.yaml: 4ef037a0318401bc676f7ed65affedf80edcfdaf60ce2edcba54308810376b77 + data/curated/calibration/default/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + feed: + artefacts: + data/curated/calibration/default/exogenous_feed.csv: 3ebcac7797beb398a9ff227f700cab0f1e01fef27d361696d1c2b05c274cb39d + data/curated/calibration/default/exogenous_forage.csv: d806b2e98968a5d0e3b8618d3882152102f11e4ce62a4de233b8560e7e1aeccc + data/curated/calibration/default/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/default/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_exogenous_feed_calibration.py: e72a80a835bbf1cca799f46e861ceef67c0e03a2fdaebc4ded10d31b55d4a5bd + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_grassland_calibration.py: be8c246c265cb22c19939a4000dff6e16170ab78196be4380ae55ca3dd213681 + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/feed.yaml: dc76da31efdef7eb308b665b728b847c756883b1a3d478721baacfa3ffe64488 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/default/deviation_penalty.yaml: a20304c2ecfc7d1109d43aaded46fd650bdc5524f43e6d6365b56fc225faeca0 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + food_demand: + artefacts: + data/curated/calibration/default/food_demand.csv: a7cc72a127b566e59057cf2cdc9a8595b79a00dfa0503a29fb55b0afa350c6e5 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_food_demand_calibration.py: b231f34617c676c5df60abe4c418388b84a3d41acfd78313804489be9017172e + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/food_demand.yaml: 75f8d91dc73aece4621d940b183457348b3c513218d06fa00e40af2b6729769a + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/default/deviation_penalty.yaml: a20304c2ecfc7d1109d43aaded46fd650bdc5524f43e6d6365b56fc225faeca0 + data/curated/calibration/default/exogenous_feed.csv: 3ebcac7797beb398a9ff227f700cab0f1e01fef27d361696d1c2b05c274cb39d + data/curated/calibration/default/exogenous_forage.csv: d806b2e98968a5d0e3b8618d3882152102f11e4ce62a4de233b8560e7e1aeccc + data/curated/calibration/default/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/default/food_waste.yaml: 4ef037a0318401bc676f7ed65affedf80edcfdaf60ce2edcba54308810376b77 + data/curated/calibration/default/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + food_waste: + artefacts: + data/curated/calibration/default/food_waste.yaml: 4ef037a0318401bc676f7ed65affedf80edcfdaf60ce2edcba54308810376b77 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_food_waste_calibration.py: 5973b801374e00d03362fd1b2fb7df684ea28b2c0c069a1c4c51a9b93923da98 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/food_waste.yaml: d003b796f7a10db3f2cb4c8269d05e6a5c76aac0b17196e9c75dbf5c3a9755f7 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/default/deviation_penalty.yaml: a20304c2ecfc7d1109d43aaded46fd650bdc5524f43e6d6365b56fc225faeca0 + data/curated/calibration/default/exogenous_feed.csv: 3ebcac7797beb398a9ff227f700cab0f1e01fef27d361696d1c2b05c274cb39d + data/curated/calibration/default/exogenous_forage.csv: d806b2e98968a5d0e3b8618d3882152102f11e4ce62a4de233b8560e7e1aeccc + data/curated/calibration/default/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/default/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + stability: + artefacts: + data/curated/calibration/default/deviation_penalty.yaml: a20304c2ecfc7d1109d43aaded46fd650bdc5524f43e6d6365b56fc225faeca0 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/deviation_penalty.smk: 4c6b2723520befa5a4bfc54e40ff5e93c27e2234a1762b6f63b311de3ed78209 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/calibrate_deviation_penalty.py: ab82cb7c0d206581c7ed3a85c473a9063e5bb64c1072d26aec247789e7ee63eb + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/stability.yaml: 35c57a354cadf204a243a3d7bf7f3726ded6c9a81d5738da00f1ef31a8012971 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/default/animal_cost.csv: eb7c0e40dc065ffde962d06a635fd64e95c21b9b5dd2f55e9944d4a20f0422dc + data/curated/calibration/default/crop_cost.csv: 89ce3ca3136edbaaf0fe54f6a3259b91dfabe7def2dab4aaf79b602212fbbd8e + data/curated/calibration/default/exogenous_feed.csv: 3ebcac7797beb398a9ff227f700cab0f1e01fef27d361696d1c2b05c274cb39d + data/curated/calibration/default/exogenous_forage.csv: d806b2e98968a5d0e3b8618d3882152102f11e4ce62a4de233b8560e7e1aeccc + data/curated/calibration/default/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/default/food_demand.csv: a7cc72a127b566e59057cf2cdc9a8595b79a00dfa0503a29fb55b0afa350c6e5 + data/curated/calibration/default/food_waste.yaml: 4ef037a0318401bc676f7ed65affedf80edcfdaf60ce2edcba54308810376b77 + data/curated/calibration/default/grassland_cost.csv: f202991ef38df2163060e5232209490effea748c7aa827494d12d8bacdece850 + data/curated/calibration/default/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/calibration/default/multi_crop_cost.csv: 16b75ffda24cff11340555a603499350379c917fb1266805e6bdc93e51437c80 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] diff --git a/data/curated/calibration/gbd-anchored/fingerprint.yaml b/data/curated/calibration/gbd-anchored/fingerprint.yaml new file mode 100644 index 00000000..283e699d --- /dev/null +++ b/data/curated/calibration/gbd-anchored/fingerprint.yaml @@ -0,0 +1,834 @@ +# Content fingerprint of each calibration step's external inputs, written by +# workflow/scripts/calibration_fingerprint.py via tools/calibrate. Compared by +# `tools/calibrate --check`; do not edit by hand. +# Licensing: see the annotation in REUSE.toml. +steps: + cost: + artefacts: + data/curated/calibration/gbd-anchored/animal_cost.csv: 1f9b1a7759d34181f8e8dfa1c5700a879ac79b1a3a0520047bd2e05baeb711c3 + data/curated/calibration/gbd-anchored/crop_cost.csv: d70bfb99b53f7ac56f7e549162269a0383c8553319d314e1758ff5e2009f81d0 + data/curated/calibration/gbd-anchored/grassland_cost.csv: d6f0794380f991f11a09a49190fa65668f663a60d76c951d0c54cde3c18c10ca + data/curated/calibration/gbd-anchored/multi_crop_cost.csv: 898f6ac1f7393e7fb5084fdbc5dd89971962e69ea2b2efe902805972442bdcc3 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/consumer_values.smk: 4f3fb2650b690a41b45443b322745b698910abae3cb013f70e0eea8e54ba6290 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/calibrate_food_utility_blocks.py: e20676cd1b44c4504df3c9856131fa234088b1fd77c9f242144483f6f58ad330 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_consumer_values.py: eba7d4bd3d10632fc5fbcbc46f65acd5775f2bb74ca3aa3f5d6ff15113c3dd97 + workflow/scripts/extract_cost_calibration.py: f7475beca73108a5f6ef63f1c284625e996abc9dadf9efc981c92e2f259d3f23 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gbd_food_group_intake.py: 22c0d05151b9131fa8e072ac157ad6881e1d929ec0f5ddf7cc7869f2d2b35d3f + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/cost.yaml: 45abcb2e750d90543222119fdd53cbd2e7f0b639e52f8bd4897ee36ea5414801 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/gbd-anchored/deviation_penalty.yaml: 783dc46e38dc0fa21546ffa0e3d6e0b93a16c250f7fb7e8ad650f6d1ef28c351 + data/curated/calibration/gbd-anchored/exogenous_feed.csv: a42d3bdc2ba32d535fa50f2ba496240fa774fc9014f3b565aedf976934304fb1 + data/curated/calibration/gbd-anchored/exogenous_forage.csv: c059074f0f18be9709ada5f6c231869047675f72b1caa7eaef7d5e14c5976875 + data/curated/calibration/gbd-anchored/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/gbd-anchored/food_demand.csv: d59ae58f60259a33fed247f16a341d1162878a37a6167a74e95b3b55d4b18f67 + data/curated/calibration/gbd-anchored/food_waste.yaml: 3e66ca8a6b477f8856b37009c93ebb2955c69c64e29ce8b93024f3645a8d61a3 + data/curated/calibration/gbd-anchored/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + data/manually_downloaded/IHME-GBD_2023-death-rates-2020.csv: 8e0678a115b4f1a49cb5f0ed09eca8f20273ae5c7e066173afe06426740d9f9a + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_1: 7792dd5bf6873bd8657c2c1f99936f6b1111a357a0de3163ca7f01d696d387ef + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_2: e217ce5893f9041c6ff721c976b2905018e3434097282d41d41f71b9628a33be + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + feed: + artefacts: + data/curated/calibration/gbd-anchored/exogenous_feed.csv: a42d3bdc2ba32d535fa50f2ba496240fa774fc9014f3b565aedf976934304fb1 + data/curated/calibration/gbd-anchored/exogenous_forage.csv: c059074f0f18be9709ada5f6c231869047675f72b1caa7eaef7d5e14c5976875 + data/curated/calibration/gbd-anchored/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/gbd-anchored/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_exogenous_feed_calibration.py: e72a80a835bbf1cca799f46e861ceef67c0e03a2fdaebc4ded10d31b55d4a5bd + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_grassland_calibration.py: be8c246c265cb22c19939a4000dff6e16170ab78196be4380ae55ca3dd213681 + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gbd_food_group_intake.py: 22c0d05151b9131fa8e072ac157ad6881e1d929ec0f5ddf7cc7869f2d2b35d3f + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/feed.yaml: dc76da31efdef7eb308b665b728b847c756883b1a3d478721baacfa3ffe64488 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/gbd-anchored/deviation_penalty.yaml: 783dc46e38dc0fa21546ffa0e3d6e0b93a16c250f7fb7e8ad650f6d1ef28c351 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + data/manually_downloaded/IHME-GBD_2023-death-rates-2020.csv: 8e0678a115b4f1a49cb5f0ed09eca8f20273ae5c7e066173afe06426740d9f9a + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_1: 7792dd5bf6873bd8657c2c1f99936f6b1111a357a0de3163ca7f01d696d387ef + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_2: e217ce5893f9041c6ff721c976b2905018e3434097282d41d41f71b9628a33be + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + food_demand: + artefacts: + data/curated/calibration/gbd-anchored/food_demand.csv: d59ae58f60259a33fed247f16a341d1162878a37a6167a74e95b3b55d4b18f67 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_food_demand_calibration.py: b231f34617c676c5df60abe4c418388b84a3d41acfd78313804489be9017172e + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gbd_food_group_intake.py: 22c0d05151b9131fa8e072ac157ad6881e1d929ec0f5ddf7cc7869f2d2b35d3f + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/food_demand.yaml: 75f8d91dc73aece4621d940b183457348b3c513218d06fa00e40af2b6729769a + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/gbd-anchored/deviation_penalty.yaml: 783dc46e38dc0fa21546ffa0e3d6e0b93a16c250f7fb7e8ad650f6d1ef28c351 + data/curated/calibration/gbd-anchored/exogenous_feed.csv: a42d3bdc2ba32d535fa50f2ba496240fa774fc9014f3b565aedf976934304fb1 + data/curated/calibration/gbd-anchored/exogenous_forage.csv: c059074f0f18be9709ada5f6c231869047675f72b1caa7eaef7d5e14c5976875 + data/curated/calibration/gbd-anchored/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/gbd-anchored/food_waste.yaml: 3e66ca8a6b477f8856b37009c93ebb2955c69c64e29ce8b93024f3645a8d61a3 + data/curated/calibration/gbd-anchored/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + data/manually_downloaded/IHME-GBD_2023-death-rates-2020.csv: 8e0678a115b4f1a49cb5f0ed09eca8f20273ae5c7e066173afe06426740d9f9a + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_1: 7792dd5bf6873bd8657c2c1f99936f6b1111a357a0de3163ca7f01d696d387ef + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_2: e217ce5893f9041c6ff721c976b2905018e3434097282d41d41f71b9628a33be + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + food_waste: + artefacts: + data/curated/calibration/gbd-anchored/food_waste.yaml: 3e66ca8a6b477f8856b37009c93ebb2955c69c64e29ce8b93024f3645a8d61a3 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_food_waste_calibration.py: 5973b801374e00d03362fd1b2fb7df684ea28b2c0c069a1c4c51a9b93923da98 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gbd_food_group_intake.py: 22c0d05151b9131fa8e072ac157ad6881e1d929ec0f5ddf7cc7869f2d2b35d3f + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/solve_model.py: 8b13b5a820ba69e4385dcc0b4f576744d9759485a642ca43282c7b65861fe5cb + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/food_waste.yaml: d003b796f7a10db3f2cb4c8269d05e6a5c76aac0b17196e9c75dbf5c3a9755f7 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/gbd-anchored/deviation_penalty.yaml: 783dc46e38dc0fa21546ffa0e3d6e0b93a16c250f7fb7e8ad650f6d1ef28c351 + data/curated/calibration/gbd-anchored/exogenous_feed.csv: a42d3bdc2ba32d535fa50f2ba496240fa774fc9014f3b565aedf976934304fb1 + data/curated/calibration/gbd-anchored/exogenous_forage.csv: c059074f0f18be9709ada5f6c231869047675f72b1caa7eaef7d5e14c5976875 + data/curated/calibration/gbd-anchored/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/gbd-anchored/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + data/manually_downloaded/IHME-GBD_2023-death-rates-2020.csv: 8e0678a115b4f1a49cb5f0ed09eca8f20273ae5c7e066173afe06426740d9f9a + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_1: 7792dd5bf6873bd8657c2c1f99936f6b1111a357a0de3163ca7f01d696d387ef + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_2: e217ce5893f9041c6ff721c976b2905018e3434097282d41d41f71b9628a33be + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] + stability: + artefacts: + data/curated/calibration/gbd-anchored/deviation_penalty.yaml: 783dc46e38dc0fa21546ffa0e3d6e0b93a16c250f7fb7e8ad650f6d1ef28c351 + code: + workflow/rules/animals.smk: fa07f649a53263c151e1799f63b40c66fba42ee7858a97d51ff988c406ba0024 + workflow/rules/crops.smk: 6413ed1571fe2db7bbac9d45db8a27d51a1c2955a86b4629f43cf70da1a048b0 + workflow/rules/deviation_penalty.smk: 4c6b2723520befa5a4bfc54e40ff5e93c27e2234a1762b6f63b311de3ed78209 + workflow/rules/diet.smk: 15db54cf636dca37bea0343c2bb236ead24ffe238dc2a843b391bbd43bfacb12 + workflow/rules/geography.smk: 54b113f5647787bacea8d2a2f45298a24c605a84ced48630abece8b2dc887943 + workflow/rules/luc.smk: e64fb669c0d6c40299d47c995dbb9f04a71f4d99d8edcd1fe9ce3ed700639257 + workflow/rules/model.smk: 0e52481f84031711f0706a8c54a7e1038063e24320e52609a1fd832a977aaffd + workflow/rules/retrieve.smk: ecd9eb633974cd575b7a879348c763f844b3f66cdedc785c7d28977ac541a577 + workflow/rules/water.smk: 9fe3fc69051df02bab7dde53d2057b2b64142c7212741f8a45bc0171447c951d + workflow/scripts/aggregate_class_areas.py: 93e9a52eec4dac86eeff03fa7e574ad4bdd91bb4049f715a321850f327aba92e + workflow/scripts/build_crop_residue_yields.py: 4bd14638cf3cadc817819fb6dd3cc43eb4f74420a44cc9338c053b53df0fbdfc + workflow/scripts/build_crop_yields.py: 32fa249e34b0b93e58eb3d3f36f6e25696766571e047ee7594c313b9dc5fbc5d + workflow/scripts/build_crop_yields_cropgrids.py: ebe6890f7346bcdc1152a63011b3984d76a30be29b6cf1192287c97282702d92 + workflow/scripts/build_cropland_baseline_from_gaez.py: d577b66db9a4d54f14e211e96c0512abe709c18517b625aea0c235a8290bf4a5 + workflow/scripts/build_current_grassland_area.py: 84a9c3646e7dd9a56bec62e879ae317f9e65bc2340ab0f62c1215a19d4f9d2b8 + workflow/scripts/build_fdd_area_shares.py: b6e084b1779636547c41dada16d570ec0f98d5dc34f3d4e948e6e3943e32034a + workflow/scripts/build_feed_to_animal_products.py: 1eb41eaf6149524bd6c324ba39356ee09cbebe62bd97bf2e7e4520e1b14e3ba3 + workflow/scripts/build_fodder_yield_corrections.py: eef62e7237a89f1f8b962893ed031758fd6abcc1b1c71140bc0c16e92e3fc568 + workflow/scripts/build_frt_area_attribution.py: f91f51757808594f87d6a3151fd228b453181586bd342930b9749a4c21973bc8 + workflow/scripts/build_grassland_yields.py: 38ed635e8e162d59f33fa15ba0c649046a047ae37136203de3db2fc72b135a2d + workflow/scripts/build_grazing_only_land.py: 9880aea4ffe4886ba68fdbc283b009ea984cbb0fb3159754c721b02beb3eec99 + workflow/scripts/build_harvested_area.py: b6abc0557ed3c68948380d920ec77102f35e47b4712f4701a40677d15c972a98 + workflow/scripts/build_harvested_area_yield_weighted.py: 2bdd700c00c2028b9e671a4614d05d0469bc7c396e2a04d42d5c0c075fc985b2 + workflow/scripts/build_luc_carbon_coefficients.py: 17b54976b738ae30728878d7fc600d3f7242037d1376f0cd92b469586c502ce0 + workflow/scripts/build_luc_grid.py: d8a8af444d2267b1dab55f6719bf3ade019a6410e15ed3b7888cb76d7c7061d6 + workflow/scripts/build_luicube_grassland_yields.py: 01d2865e3c1878fc4795075680197b161f4cb50259a2fb7f8cdcb1e3deaf2191 + workflow/scripts/build_mirca_crop_calendar.py: f44617c319c76f4e1f3d68f6d2dee14866804e498d478797e2d63612d9515e4e + workflow/scripts/build_model.py: 3294bfeb27cefb28ad3406f3fc40ff05400ddc6746f9944742d16c6a97c2b16d + workflow/scripts/build_multi_cropping.py: 6130469e316fb795e66d87fc3f9af6b8086878abba8dfe31c9b587c87478cc21 + workflow/scripts/build_ooc_olive_area_share.py: 3c5d202eabc9cd997d3dc4989e9e86e672230ce2d139cc7d96a3f5ccf459bbd5 + workflow/scripts/build_reforestation_mask.py: c373bb1564782ff1400d5fd717a87e67501241c5a9e09b644ea0e199a82aefa1 + workflow/scripts/build_region_class_cell_mapping.py: c8a2971f2cd7d3d46107f7c6af1a1d8bc22eacec1cca80a6a58ec04da508ad74 + workflow/scripts/build_region_water_aware.py: 9d6a8e8f1bf23d51d52d802c905c6460539874505546cec68d32f08a00ec2be1 + workflow/scripts/build_region_watergap.py: 93451ae9ac67fac05fe205ca5009d0854f29012893997ed50db919ddb29ed5c5 + workflow/scripts/build_regions.py: 08a1f3c0247bdbe4600f2b1596396a352ff6c459496566e7e24da5b2f83558a7 + workflow/scripts/build_yield_calibration.py: 1225a0d55add24ce44acc86cde5dd3335ed9d0a233ba6025bfc8c0e5afc8375d + workflow/scripts/calculate_manure_emissions.py: c35ee707e5cfda0bc1cd0aa06f31c834f118b914b47dc6478a37222f10589f94 + workflow/scripts/calibrate_deviation_penalty.py: ab82cb7c0d206581c7ed3a85c473a9063e5bb64c1072d26aec247789e7ee63eb + workflow/scripts/categorize_feeds.py: 575b37f430e4fbf54b8477be96f5069ce6522fa1882c2f024b9b9a25a8540140 + workflow/scripts/compose_water_supply.py: c1fc61844079219f2381664b44b6a917f51ecbc07bb08e1318702985deaf9231 + workflow/scripts/compute_gleam3_feed_fractions.py: 83cc4268fe7f1762932ac63fc7f05ecedda9b03bcc1b502a69d85ec6779e6289 + workflow/scripts/compute_gleam3_me_requirements.py: 07c680c7aa5753eb838d3cbbd4078cbb0dff1947467c209acfb7de9268568b9d + workflow/scripts/compute_resource_classes.py: e7b5a4849be730eb1afac3b154463eecec4dfb21718afd1d5f329969366e1181 + workflow/scripts/convert_faostat_to_parquet.py: 5dbf7e73692c2f393b20299346d2573711052b11a730a1cfc7bfe80bcdeba81d + workflow/scripts/derive_global_fertilizer_rates.py: c2f8957100a8e73b1cff58549087f173e520020f614bcd5376c43e2c806bb585 + workflow/scripts/derive_mirca_multicropping.py: 4d9a9146872009abfb9a5fe9e1ff5e2291aa120c575499c16596c1e1744e3cca + workflow/scripts/download_figshare_file.py: 3c5873d6098a25c522fcfd63954edea8c761b551b916eff52491a897b592a8c8 + workflow/scripts/download_luicube_raster.py: 7883a5a73c9c18f6afbbabe62044494657e69b49469ae7c97b4df18f8a584b2c + workflow/scripts/download_mirca_os_bag_member.py: e869f4ec2f87a03b65d7c6f875d6ad393dcce647789ba7fc0f1c2d2fa2e48049 + workflow/scripts/download_soilgrids_ocs.py: bcb361c0ada72cd6264685eb36b2efabc1a03bc25c93918c37da8da7fe049d58 + workflow/scripts/estimate_baseline_diet.py: 87047e7cb0db1f5ab7460eeecfacea52c7ef36802669e0aff5b8c62079e589e9 + workflow/scripts/extract_mirca_os_archive.py: 687fe1d413ea063d585cc526ff53ce7d91c1df90e1d1ec898bfc62d19890647c + workflow/scripts/merge_animal_costs.py: db83828da2fad888f0bae49e3a4d19ebc8315e27d2edcd0c6fde579b736de57c + workflow/scripts/merge_dietary_sources.py: b647708a56e5d7c9359f78c644020e3b67e37f50d699004fc8462ed5700031a4 + workflow/scripts/merge_grassland_yields.py: bd1f04fced7438db6ec75c4c1d3c277880c2256e31ce071d02146de225734be2 + workflow/scripts/prepare_banana_plantain_production.py: 214cd243b0932ee9da96cf24bdd8c7c10e05c94e27c303758cc2770e0d166e3a + workflow/scripts/prepare_biofuel_baseline.py: de7fa63ca68961a1334e74af63b6e23a1360fcf810fa3a815e901e89cc8710ce + workflow/scripts/prepare_fao_edible_portion.py: cb71097d23dbe14d077c2a74fbd28bd13fcf039529979cd1af64db2c184a5c0e + workflow/scripts/prepare_faostat_animal_production.py: d163e7bfb272e9b542f16dcc11ebfffae4476fbe08f9bbfcb64479b2d869ac06 + workflow/scripts/prepare_faostat_crop_costs.py: be66f2aad20af7c88085b3c24e59ce2e26cfcee25b202fd96f3a47666d65ad1b + workflow/scripts/prepare_faostat_crop_production.py: f446a0f22d865d6dfb7aaab643ea245932169769070b7a72ab16c98b09bf7435 + workflow/scripts/prepare_faostat_fbs_items.py: 87446f863e0e26e06b863cabcaafda362fb033f86b522b519922f86b5f80bb05 + workflow/scripts/prepare_faostat_food_group_supply.py: e1702c7c67e7295c70b4cd1fdcf871f3d02c5a90dcb2c0c5b0c6b891e8e81809 + workflow/scripts/prepare_faostat_pasture_area.py: 3f0d6212cf0c54edaf6f47145e75334c532e6e7a2d243a4996d4f96bda5096fe + workflow/scripts/prepare_faostat_yields.py: 178264f3eaa3e386a7ea6813fe607af7183663624cc0388a9df724562a5dd9ab + workflow/scripts/prepare_feed_baseline.py: b67255afd433f1fd9ffe446a25d8224f6a2014a86cb96ac74e2486ec0473bf79 + workflow/scripts/prepare_fertilizer_application_rates.py: e02ebd2020d616fd6a6b5d5d758d858b923ad14cc265807f9ccce60e0bc31bd5 + workflow/scripts/prepare_fiber_baseline.py: c9cdce9d70211b9171777f791f10a9fb63f34c4a2fc72b4f417a4a50468c8394 + workflow/scripts/prepare_food_loss_waste.py: c2b33b5032de4fad69425f87a92109d8e6dd3164769b58cc3816e09347e42834 + workflow/scripts/prepare_food_security_anchors.py: 374e9211799db8946bf589a8b14a4512b4bbb173f8227b92405b940e437ef4c7 + workflow/scripts/prepare_gbd_food_group_intake.py: 22c0d05151b9131fa8e072ac157ad6881e1d929ec0f5ddf7cc7869f2d2b35d3f + workflow/scripts/prepare_gdd_ia_dietary_intake.py: c9b4fd5640e37644e6fb55285f86cd259427bbb60a2a4ef988cdcb82d7d4b41d + workflow/scripts/prepare_gleam_feed_properties.py: 792a23dace16089a8a80f320a497c85a5c0aac54c6f9bac0281cec724d888358 + workflow/scripts/prepare_luc_inputs.py: 910ef31cbf1c5800daffd2a086f73f9afb24f6250d2a475ce5eda4199a3d65c9 + workflow/scripts/prepare_mirca_os_calendar.py: c3f7c0443d4c02cac0c0fe78054c0a5b55c4a46e907ca344e0daf821c6cf21eb + workflow/scripts/prepare_nhanes_dietary_intake.py: 0b25216f9a43ebbb51d0d9d86fde5829c4e656f7f59875bdeb9afb44e969520f + workflow/scripts/prepare_population.py: 0fa0d60890660bd61cf4c3dd41bc17162309f142299b1965b656aa7c8418417d + workflow/scripts/resample_forest_carbon_accumulation.py: aa9e7d246ad15e0698db4479255b0a6f880c4772a058b9cefe6425fbbe999d30 + workflow/scripts/resample_land_cover.py: 3a953b4c2a0a4a226688e282af9a00c778a077bfbf3d8504829a637a6281a1ce + workflow/scripts/resample_luicube_grassland.py: 8efad93db0c694e2b9152acc2373b356614d65c8170cf4effa08f6df9b4cc8fb + workflow/scripts/retrieve_cpi_data.py: ee11749f80d1ab2dd0ade2909b40ef001f7bd24c6a56fa381a251662b51f54b8 + workflow/scripts/retrieve_eurostat_fodder.py: c90bbfbbb2c08b83144c84f2199da9ec01d17a8ecea99d2ead77a1baf6de22f9 + workflow/scripts/retrieve_fadn_animal_costs.py: 7791580c7c04f99a474909e4e53bdaa7af0a23056c2036b36753c43076ac25f7 + workflow/scripts/retrieve_hicp_data.py: 8375097c1fb9f18d096116dd133268e36a332373b56720790a4abb35a2b6290b + workflow/scripts/retrieve_ppp_rates.py: 13ff1ed85f2153d4a5a8b4b9031432c59b23e0a85eb4fc62bfd4806c32aee444 + workflow/scripts/retrieve_usda_animal_costs.py: 5849db38933f9323fb581e5b81a17223e3e5a12b5c8471727c4b9cef4c2211cc + workflow/scripts/simplify_gadm.py: 9b206abc2f561840b5a964e9fc06a6f4ee6b71cb2673277d4e2c27ebf532d1af + workflow/scripts/validate_baseline_diet.py: 6d54d506a2d8382321c849d77698098429019e0f089f969c43ee2848becc05f4 + config_files: + config/calibration/stability.yaml: 35c57a354cadf204a243a3d7bf7f3726ded6c9a81d5738da00f1ef31a8012971 + inputs: + data/bundled/doi_10_5061_dryad_2rbnzs7qh__v20250311/FUBC_1_to_9_data.csv: 3b5dc29b6e2f6844807f2983c1596c28a127f48a67f7deec7e36f6a49c0b17f3 + data/bundled/gleam3/feed_items_categories.xlsx: b2f5f6a8dd86648c6b1a34100dfb6531aacc1c65865d2e8c4eac3a384776de9a + data/bundled/gleam3/intakes.csv: 2e0664a7433dd99ac805f1c40eaaabc71309dc657943477105b47c08e745ef78 + data/bundled/gleam3/manure_management_systems_fraction.csv: c8697e060d4ae355e26d2d7a0328fa0c5076467502ed8c8f44a48f43aa0a2a72 + data/bundled/gleam3/production.csv: eb85e82ba9a61c71c6cd33ab36c00b5d844f2550e1caa45b6b250410adc6f2b5 + data/curated/M49-codes.csv: 10ae52e639e62f07ce992ead08536167d0c8aa9f467870dbfcfbf465ef3aa9be + data/curated/biogas_crop_demand.csv: 8371d2ef0d3170f4ee145b0b0fd7a1ab4e63eec87febb78ca5574866b58cff71 + data/curated/calibration/gbd-anchored/animal_cost.csv: 1f9b1a7759d34181f8e8dfa1c5700a879ac79b1a3a0520047bd2e05baeb711c3 + data/curated/calibration/gbd-anchored/crop_cost.csv: d70bfb99b53f7ac56f7e549162269a0383c8553319d314e1758ff5e2009f81d0 + data/curated/calibration/gbd-anchored/exogenous_feed.csv: a42d3bdc2ba32d535fa50f2ba496240fa774fc9014f3b565aedf976934304fb1 + data/curated/calibration/gbd-anchored/exogenous_forage.csv: c059074f0f18be9709ada5f6c231869047675f72b1caa7eaef7d5e14c5976875 + data/curated/calibration/gbd-anchored/fodder_conversion.csv: f46d89574830cefba376f9fdb86c0ae4462bdaf9889dcc25d8c15b0da1524458 + data/curated/calibration/gbd-anchored/food_demand.csv: d59ae58f60259a33fed247f16a341d1162878a37a6167a74e95b3b55d4b18f67 + data/curated/calibration/gbd-anchored/food_waste.yaml: 3e66ca8a6b477f8856b37009c93ebb2955c69c64e29ce8b93024f3645a8d61a3 + data/curated/calibration/gbd-anchored/grassland_cost.csv: d6f0794380f991f11a09a49190fa65668f663a60d76c951d0c54cde3c18c10ca + data/curated/calibration/gbd-anchored/grassland_yield.csv: 7e2c656be823646dd9325400e3c7612388b2ff336cdaa9fbcd7831553f05eb79 + data/curated/calibration/gbd-anchored/multi_crop_cost.csv: 898f6ac1f7393e7fb5084fdbc5dd89971962e69ea2b2efe902805972442bdcc3 + data/curated/country_mottet_region.csv: 8c41e8d0a8ad7ec8cd89b9c9cdbb72b6870fb8e9b59dd6ba6e49be468c5651a3 + data/curated/country_wirsenius_region.csv: 73ae37e68c61286b0312b04b0d1dbc661322d8be5c5e5e66754fff1c9dcfac6e + data/curated/crop_moisture_content.csv: b9e6ac4455fdbb6c28f211a291d2cde59439b7e2215d987e104544cc9eeebfe7 + data/curated/crop_residue_specs.csv: ca79f5a599010eb1f9bc0fabfc2c3e445ff7f6207c378903c4b686f8daee060f + data/curated/cropgrids_crop_mapping.csv: 897a3185f076aba4d4ba62c311572ac544893539c30c3d33f26d270a4b486bb5 + data/curated/diet_source_basis_overrides.csv: 25c6f42d2d82af4a0cff13d5dd01676eeb900ca4054e7f2377d765a712005e86 + data/curated/fadn_animal_mapping.yaml: 394f0fe05013859432e8c8c65a49b4afc74ae1094cc1efb305de2aec771c1393 + data/curated/faostat_animal_yield_mapping.yaml: 102eeab081d658193a8b7c36eff37335f84d602a7ea8ff41891dd3e9a70bebcb + data/curated/faostat_biofuel_crop_map.csv: 6d1f65e615a7e9a0fc5c7e5164af011074de98b2c706306dc69d9a6767add023 + data/curated/faostat_cost_proxies.yaml: 49cec76e22bfa197459faf97eae149917724b24272f08a9fe2adfd126c009114 + data/curated/faostat_crop_item_map.csv: d002cb67387d50162a43c7ded8820297576d79a680d123fe3ca8d455cceed7f0 + data/curated/faostat_fiber_demand_map.csv: de079d7b870ba0c067203a04966ac25d894d7e31ade6aef9ad14c64f8acea6e4 + data/curated/faostat_food_item_map.csv: ec1f5efa02a30177af468b5186e4e5ec3a826adbc88f7b40d87f37f70968e0e0 + data/curated/faostat_food_qcl_resolution.csv: e981707efb43555bb1acb2a2cd402f09d4578e3133971999b9fe00d5de2c460b + data/curated/feed_ash_content.csv: 80d8eabc84af81e43892d3251e0665176b911e793ea2c2c0d0bc19d9b018cf0c + data/curated/feed_category_overrides.csv: 966cd9a9d6e66fe36f8a1850228b4f2e74d4de4c6fd148a7a2dad54d7408b5b3 + data/curated/food_basis.csv: 29cd97f9ed7dd69a90e6858acb7e85923d79bb8c60e8bb9889573714429a56e6 + data/curated/food_groups.csv: 31b05e38ceca2c9623ac730e615da31f990e5a83ac4c84dd4447106cd75bf69c + data/curated/food_loss_waste_overrides.csv: ce55344b9de3fea44a43a000224bd04f38798d82cb76c860ea1f9e046759bf03 + data/curated/foods.csv: f1b924d701dcce99d6bfca548eeda25847da433e375609582551d1a3b8afdcb9 + data/curated/gaez_crop_code_mapping.csv: 8d8a5475010b8c4a3531c060c8300920dcecf8058d8b142709d6021f91ba73d6 + data/curated/gleam/feed_mapping.csv: f1cc0a45fb9bae5edbe358f97c87087f2b631353980f21f1f690729c5f19366b + data/curated/gleam/roughage_composition.csv: 66785434beabc0fd67c01dc4a1ee78d574da794ce6d52313de4201b60d2f9116 + data/curated/ifa_fubc_crop_mapping.csv: 5775197d4b6e61c576fa9dda994feee9422f28f128ed665072c93a7ac8bed80c + data/curated/ipcc_enteric_methane_yields.csv: a6e3a3948df00ecaf2ffc2d091a4ddb26c72ea92ffc26e8a1a2fd86520b933b7 + data/curated/ipcc_manure_methane_conversion_factors.csv: 4139a5e9a00f15fbc0590efe929bad30bf2ed182accb75d0ee369a4144f077c0 + data/curated/ipcc_manure_methane_producing_capacity.csv: 5f53b798f573a71aeab5d8c6d3547b9bf799e1be827ba56429dfe93a1e053f2f + data/curated/ipcc_manure_n2o_emission_factors.csv: d8c1127b1d5c88e9a9f9b356e8de96821060e8588e79dd460eaef4c32b718b52 + data/curated/luc_zone_parameters.csv: 2d042de0ee836e319a44b87210785a7ad42b4fe44aa72de0d22c43db04309869 + data/curated/mirca_os_calendar_supplement.csv: c0da8ef71a6c98d0f0862c25c8c1addb4424be2d92ac622162bd4408d0da3d8e + data/curated/mirca_os_crop_mapping.csv: 961acc42e00742e5255907bb1301545e2bc5ef4bf541f1fe738e5a3b37e7d7c3 + data/curated/mirca_os_multicropping_combinations.yaml: b0187142f2e328dede10e9fbf052c05f0adda648469070dfc2491abdedb24fe8 + data/curated/nhanes_fped_mapping.csv: 6f2a8976b06d13a095fd6bc58d800f56ab0b42318dffd49b59c5e9ddb48ee031 + data/curated/nutrition.csv: 22b367e8b25b5f07457d76446f0ac5c8f16b7f4f064c10c73c211afd3571ee8f + data/curated/seed_rates.csv: 15d5be2c24154db2904e68695e8db31baff2220fefa85c13a1cf5831525718e1 + data/curated/supplementary_feed_properties.csv: 428d0dd8cd6c0caa58bc64cb159b18eab5a8beb1ba1c875194f7aff591460f8d + data/curated/usda_animal_cost_sources.csv: 7a27f0ad2e7dc08a10e3264e9aefc7ebfaa1ea360e3b198cb368738d995faf6a + data/curated/wirsenius_feed_energy_requirements.csv: f6961ea48f00dcd793d0b61d2939c907fe87b03ab5f28f643073252a8306455c + data/curated/yield_unit_conversions.csv: c1905886711b3b079bfd2761029070b874efd72f16ea5aac1f708e24d42d089f + data/manually_downloaded/IHME-GBD_2023-death-rates-2020.csv: 8e0678a115b4f1a49cb5f0ed09eca8f20273ae5c7e066173afe06426740d9f9a + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_1: 7792dd5bf6873bd8657c2c1f99936f6b1111a357a0de3163ca7f01d696d387ef + data/manually_downloaded/IHME_GBD_2023_RISK_EXPOSURE_DIET_2: e217ce5893f9041c6ff721c976b2905018e3434097282d41d41f71b9628a33be + workflow/scripts/build_model/animals.py: 030c2dd4b459fb856e7dc34c9dd74fe9245a340eca9055b19a6d6bf01a910f29 + workflow/scripts/build_model/biomass.py: 78059ea9d2fb953c5890dfb789b4215373a095a087d3e888cff1fa75d04e034f + workflow/scripts/build_model/crops.py: 4b8638d8902b0a688d0ab55df3e3625d0953f3b4ac63886ddae50b3bf47b4610 + workflow/scripts/build_model/food.py: 9e53b6c847202a2192ea0e014746e62a9a5f88eedffc5a48833fc4186ef65ae9 + workflow/scripts/build_model/grassland.py: c3ee3ae3149137e8ab427f0b5584251b9c49baac821e92f318cca816df171f48 + workflow/scripts/build_model/health.py: 5ddc8cbae98992f67140db787946a0f9fd9ae15ad683592b4f81b4bf6a2df702 + workflow/scripts/build_model/infrastructure.py: b792d568d0f199699f5d53bc6f175138a899e41a71f86b5d72a037de1130785c + workflow/scripts/build_model/land.py: 160b8d97dfaaadcaeef4bc8efa3ebcd55ea8ad0aaf9469cc1387b4b0687f4422 + workflow/scripts/build_model/nutrition.py: e94986ded9c4569cc1f3b264c352a1f7f7f72d0c3b107f2aed2ad5f44e1b875c + workflow/scripts/build_model/primary_resources.py: 133c60f613ad9d758063511607d068a9e7fba04a726cc9fb714e83d9b6ae882c + workflow/scripts/build_model/trade.py: 0fa403447f9f3013fb9efd35f48b7d33044d9a5abca1bc2fe2c05460f077992a + workflow/scripts/build_model/utils.py: 46fee1344183d1d2fa798b0d92ac63f3aba5989c462d0b92946bf8a83fcbee43 + workflow/scripts/constants.py: ab1f55cfb14ae63171047643c634101962abdeab3b410624ad47570871268296 + missing_inputs: [] diff --git a/docs/calibration.rst b/docs/calibration.rst index ac711bc2..3a5bc3f1 100644 --- a/docs/calibration.rst +++ b/docs/calibration.rst @@ -143,6 +143,7 @@ Everything is wrapped by ``tools/calibrate``: tools/calibrate cost tools/calibrate stability tools/calibrate --check # per-step staleness + provenance, no execution + tools/calibrate --record # re-stamp the set as it stands, no execution tools/calibrate --base config/.yaml [all||--check] # calibrate a dedicated set for another config @@ -199,8 +200,8 @@ A config with different structural assumptions has three options: Solve-time keys (GHG price, health valuation, the deviation-penalty block, scenario overrides, ...) never invalidate a set; the check fires -only on structural changes. Code changes are not captured by the stamp: -``tools/calibrate --check`` (Snakemake staleness) covers those. +only on structural changes. Input and code changes are not captured by the +stamp: ``tools/calibrate --check`` covers those. Consuming the calibrated values ------------------------------- @@ -506,8 +507,36 @@ answer run tools/calibrate --check -which performs a Snakemake dry-run against each calibration target and -reports ``[up-to-date]`` / ``[STALE]`` per step. - +which reports ``[up-to-date]`` / ``[STALE]`` per step, listing what moved. Set ``SMK_SKIP_CALIBRATION_HINT=1`` to silence the reminder in scripted contexts. + +A step is stale when re-running it would change its artefacts, which depends +only on inputs from *outside* the artefact set. ``tools/calibrate`` therefore +writes a ``fingerprint.yaml`` next to the artefacts, recording SHA-256 digests +of + +* every external leaf of the step's Snakemake DAG (curated and bundled data, + manually downloaded sources, the ``build_model`` package), +* the rule files and scripts the DAG runs, +* the step config, hashed after a YAML round-trip so comment and formatting + edits do not register, +* the artefacts the step wrote, so one edited or checked out behind the + chain's back is reported rather than silently trusted. + +The DAG is rebuilt on each check, so a dependency that a rule or code change +adds or drops is picked up straight away. Because the fingerprint ignores the +artefact set's own contents, re-running one step never marks its successors +stale, and mtime changes alone (a ``git checkout``, a ``touch``) never do +either. + +Editing any rule file or script in a step's DAG marks it stale, including +changes that cannot affect the result. When you know a code change is inert, +re-stamp the set without solving: + +.. code-block:: bash + + tools/calibrate --record + +This asserts that the artefacts on disk are current, so only use it when they +demonstrably are. diff --git a/tests/test_calibration_fingerprint.py b/tests/test_calibration_fingerprint.py new file mode 100644 index 00000000..10d4018a --- /dev/null +++ b/tests/test_calibration_fingerprint.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: 2026 Koen van Greevenbroek +# +# SPDX-License-Identifier: GPL-3.0-or-later + +"""Unit tests for calibration input fingerprinting.""" + +from workflow.scripts.calibration_fingerprint import ( + compare, + sha256_dir, + sha256_file, + sha256_yaml, +) + + +def test_yaml_hash_ignores_comments_and_formatting(tmp_path): + a = tmp_path / "a.yaml" + b = tmp_path / "b.yaml" + a.write_text("# a comment\nfoo:\n bar: 1\n baz: [1, 2]\n") + b.write_text("foo: {baz: [1, 2], bar: 1}\n") + assert sha256_yaml(a) == sha256_yaml(b) + assert sha256_file(a) != sha256_file(b) + + +def test_yaml_hash_tracks_values(tmp_path): + a = tmp_path / "a.yaml" + b = tmp_path / "b.yaml" + a.write_text("foo:\n bar: 1\n") + b.write_text("foo:\n bar: 2\n") + assert sha256_yaml(a) != sha256_yaml(b) + + +def test_dir_hash_tracks_membership_and_size(tmp_path): + root = tmp_path / "src" + (root / "nested").mkdir(parents=True) + (root / "nested" / "one.csv").write_text("abc") + before = sha256_dir(root) + + assert sha256_dir(root) == before + + (root / "two.csv").write_text("d") + added = sha256_dir(root) + assert added != before + + (root / "two.csv").write_text("de") + assert sha256_dir(root) != added + + +def _fingerprint(**overrides): + base = { + "config_files": {"config/calibration/feed.yaml": "cfg"}, + "code": {"workflow/scripts/build_model.py": "code"}, + "inputs": {"data/curated/nutrition.csv": "in"}, + "artefacts": {"data/curated/calibration/unit/exogenous_feed.csv": "art"}, + "missing_inputs": [], + } + base.update(overrides) + return base + + +def test_identical_fingerprints_are_not_stale(): + assert compare(_fingerprint(), _fingerprint()) == [] + + +def test_changed_input_is_reported(): + current = _fingerprint(inputs={"data/curated/nutrition.csv": "other"}) + (reason,) = compare(_fingerprint(), current) + assert "nutrition.csv" in reason and "input content changed" in reason + + +def test_changed_artefact_is_reported_as_hand_modification(): + current = _fingerprint( + artefacts={"data/curated/calibration/unit/exogenous_feed.csv": "other"} + ) + (reason,) = compare(_fingerprint(), current) + assert "modified since it was generated" in reason + + +def test_added_and_dropped_dependencies_are_reported(): + current = _fingerprint(code={"workflow/scripts/build_luc.py": "code"}) + reasons = compare(_fingerprint(), current) + assert any("build_luc.py" in r and "code added" in r for r in reasons) + assert any("build_model.py" in r and "code no longer used" in r for r in reasons) + + +def test_missing_input_is_reported(): + current = _fingerprint(missing_inputs=["data/manually_downloaded/gbd"]) + (reason,) = compare(_fingerprint(), current) + assert "input missing from disk" in reason diff --git a/tools/calibrate b/tools/calibrate index 150a8636..b46b9be6 100755 --- a/tools/calibrate +++ b/tools/calibrate @@ -28,6 +28,7 @@ # tools/calibrate cost # tools/calibrate stability # tools/calibrate --check # report which calibrations are stale (no execution) +# tools/calibrate --record # fingerprint the set as it stands (no execution) # tools/calibrate --base config/.yaml [all||--check] # # calibrate against a different base config; # # the base must declare its own calibration.source @@ -46,6 +47,7 @@ PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_ROOT" PROVENANCE_SCRIPT=workflow/scripts/write_calibration_provenance.py +FINGERPRINT_SCRIPT=workflow/scripts/calibration_fingerprint.py # Extract a global --base option (anywhere in argv). BASE_CONFIG="" @@ -169,6 +171,18 @@ inject_env() { PASSTHROUGH_ARR=(-e "$DEFAULT_PIXI_ENV" "${PASSTHROUGH_ARR[@]}") } +# True when the caller passed a dry-run flag; nothing on disk may be written +# then, neither fingerprint nor provenance stamp. +is_dry_run() { + local arg + for arg in "${PASSTHROUGH_ARR[@]}"; do + case "$arg" in + -n|--dry-run|--dryrun) return 0 ;; + esac + done + return 1 +} + run_step() { local label="$1" configfile="$2" shift 2 @@ -180,6 +194,39 @@ run_step() { local name_override=(--config "name=calibration-${SOURCE}-${label}") echo "[calibrate] $label -- tools/smk --configfile ${cfgfiles[*]} ${name_override[*]} ${PASSTHROUGH_ARR[*]} -- ${TARGETS_ARR[*]}" tools/smk --configfile "${cfgfiles[@]}" "${name_override[@]}" "${PASSTHROUGH_ARR[@]}" -- "${TARGETS_ARR[@]}" + is_dry_run || record_fingerprint "$label" "$configfile" "${cfgfiles[@]}" +} + +# Record what this step was built against, so --check can compare by content. +record_fingerprint() { + fingerprint_cmd record "$@" +} + +# Build the argv shared by `record` and `check`: the same configs and targets +# the step itself runs with, so the DAG matches exactly. +fingerprint_cmd() { + local mode="$1" label="$2" configfile="$3" + shift 3 + local args=(--step "$label" --cal-dir "$CAL_DIR" + --name "calibration-${SOURCE}-${label}" --hash-config "$configfile") + local f tgt + for f in "$@"; do args+=(--configfile "$f"); done + for tgt in "${TARGETS_ARR[@]}"; do args+=(--target "$tgt"); done + pixi run python "$FINGERPRINT_SCRIPT" "$mode" "${args[@]}" +} + +# Fingerprint the set as it stands on disk, without solving. This asserts the +# artefacts are current, so only run it when you know they are. +record_step() { + local label="$1" configfile="$2" + shift 2 + split_args "$@" + inject_env + local cfgfiles=() + [[ -n "$BASE_CONFIG" ]] && cfgfiles+=("$BASE_CONFIG") + cfgfiles+=("$configfile" "$ANCHOR_OVERLAY") + record_fingerprint "$label" "$configfile" "${cfgfiles[@]}" + printf ' [recorded] %s\n' "$label" } check_step() { @@ -190,23 +237,12 @@ check_step() { local cfgfiles=() [[ -n "$BASE_CONFIG" ]] && cfgfiles+=("$BASE_CONFIG") cfgfiles+=("$configfile" "$ANCHOR_OVERLAY") - local name_override=(--config "name=calibration-${SOURCE}-${label}") - local out - if ! out=$(tools/smk --configfile "${cfgfiles[@]}" "${name_override[@]}" "${PASSTHROUGH_ARR[@]}" --dry-run --quiet -- "${TARGETS_ARR[@]}" 2>&1); then - printf ' [error] %-10s (dry-run failed; see output below)\n' "$label" - printf '%s\n' "$out" | sed 's/^/ /' - return 2 - fi - # Snakemake prints "Nothing to be done" when everything is up-to-date. - if echo "$out" | grep -q "Nothing to be done"; then - printf ' [up-to-date] %-10s\n' "$label" - else - printf ' [STALE] %-10s (run: tools/calibrate %s)\n' "$label" "$label" - fi + fingerprint_cmd check "$label" "$configfile" "${cfgfiles[@]}" } # Stamp the artefact set with the structural config it was fit against. stamp_provenance() { + is_dry_run && return 0 pixi run python "$PROVENANCE_SCRIPT" "${BASE_ARGS[@]}" } @@ -240,6 +276,7 @@ shift || true if [[ "$SOURCE" != "default" ]]; then case "$cmd" in all|feed|food_waste|food_demand|cost|stability) seed_source_set ;; + --record|record) ;; --check|check) for f in "${ARTEFACT_FILES[@]}"; do if [[ ! -f "$CAL_DIR/$f" ]]; then @@ -257,6 +294,14 @@ case "$cmd" in sed -n '7,40p' "$0" exit 0 ;; + --record|record) + echo "[calibrate] Recording fingerprints for the set as it stands on disk ..." + record_step feed config/calibration/feed.yaml "${FEED_TARGETS[@]}" -- "$@" + record_step food_waste config/calibration/food_waste.yaml "${FOOD_WASTE_TARGETS[@]}" -- "$@" + record_step food_demand config/calibration/food_demand.yaml "${FOOD_DEMAND_TARGETS[@]}" -- "$@" + record_step cost config/calibration/cost.yaml "${COST_TARGETS[@]}" -- "$@" + record_step stability config/calibration/stability.yaml "${STABILITY_TARGETS[@]}" -- "$@" + ;; --check|check) echo "[calibrate] Checking staleness (no execution) ..." rc=0 @@ -298,7 +343,7 @@ case "$cmd" in ;; *) echo "[calibrate] Unknown subcommand: $cmd" >&2 - echo "Usage: tools/calibrate [--base ] [all|feed|food_waste|food_demand|cost|stability|--check]" >&2 + echo "Usage: tools/calibrate [--base ] [all|feed|food_waste|food_demand|cost|stability|--check|--record]" >&2 exit 2 ;; esac diff --git a/workflow/rules/common.smk b/workflow/rules/common.smk index bb96e798..9b601298 100644 --- a/workflow/rules/common.smk +++ b/workflow/rules/common.smk @@ -98,7 +98,13 @@ def health_required(): """ if config["health"]["enabled"]: return True - return any(get_effective_config(s)["health"]["enabled"] for s in list_scenarios()) + # Only a scenario that names the key can flip it on, so read the overrides + # directly; merging an effective config per scenario is prohibitively slow + # for generated ensembles of thousands of scenarios. + return any( + overrides.get("health", {}).get("enabled", False) + for overrides in load_scenario_defs().values() + ) def gbd_anchoring_enabled(): @@ -320,3 +326,35 @@ def gaez_path(kind: str, water_supply: str, crop: str) -> str: return ( f"{prefix}_{climate}_{period}_{climate_scenario}_{input_level}_{ws}_{crop}.tif" ) + + +def calibration_artefact_inputs(cfg): + """Return the calibration artefacts a solve reads, gated by their config. + + Shared by ``solve_model`` and ``calibrate_deviation_penalty``: both run the + same solve, so both depend on the same files. Each block is skipped when its + calibration is disabled, which is how the generating step avoids a cycle + onto its own output. + """ + inputs = {} + + cal_cfg = cfg["grazing"]["grassland_forage_calibration"] + if cal_cfg["enabled"]: + inputs["grassland_yield_correction"] = cal_cfg["grassland_yield_correction"] + inputs["fodder_conversion_correction"] = cal_cfg["fodder_conversion_correction"] + inputs["exogenous_forage"] = cal_cfg["exogenous_forage"] + + exo_feed_cal_cfg = cfg["exogenous_feed_calibration"] + if exo_feed_cal_cfg["enabled"]: + inputs["exogenous_feed"] = exo_feed_cal_cfg["exogenous_feed"] + + fd_cal_cfg = cfg["food_demand_calibration"] + if fd_cal_cfg["enabled"]: + inputs["food_demand_calibration"] = fd_cal_cfg["calibration_file"] + + dp_cfg = cfg["deviation_penalty"] + dp_cal_cfg = dp_cfg["calibration"] + if dp_cal_cfg["enabled"] and deviation_penalty_uses_calibrated(dp_cfg): + inputs["deviation_penalty_calibration"] = dp_cal_cfg["calibrated_yaml"] + + return inputs diff --git a/workflow/rules/deviation_penalty.smk b/workflow/rules/deviation_penalty.smk index 449e5f7a..03ef2d85 100644 --- a/workflow/rules/deviation_penalty.smk +++ b/workflow/rules/deviation_penalty.smk @@ -20,7 +20,15 @@ if _dp_cal_cfg["generate"]: input: # Health inputs only when health is enabled (the solve prices health # only then); omitted otherwise so no IHME GBD data is required. - unpack(lambda w: health_input_paths(name) if health_required() else {}), + # The Broyden iteration solves in-process rather than through + # solve_model, so the artefacts those solves read are declared here + # as well. + unpack( + lambda w: { + **(health_input_paths(name) if health_required() else {}), + **calibration_artefact_inputs(config), + } + ), model=f"/{name}/build/model.nc", baseline_diet=f"/{name}/baseline_diet.csv", m49="data/curated/M49-codes.csv", diff --git a/workflow/rules/model.smk b/workflow/rules/model.smk index d4fb14b6..4ef4494d 100644 --- a/workflow/rules/model.smk +++ b/workflow/rules/model.smk @@ -287,38 +287,7 @@ def solve_model_inputs(w): ): inputs["nutrition"] = "data/curated/nutrition.csv" - # Grassland forage calibration: include CSVs when enabled for this scenario. - # When generate=true, the calibration CSVs are produced from the source - # scenario's solve, so non-source scenarios depend on them via the DAG. - # The source scenario has enabled=false and skips this block. - cal_cfg = eff_cfg["grazing"]["grassland_forage_calibration"] - if cal_cfg["enabled"]: - inputs["grassland_yield_correction"] = cal_cfg["grassland_yield_correction"] - inputs["fodder_conversion_correction"] = cal_cfg["fodder_conversion_correction"] - inputs["exogenous_forage"] = cal_cfg["exogenous_forage"] - - # Protein-feed calibration: per-country exogenous protein supply CSV. - # Same gating pattern as the forage calibration. - exo_feed_cal_cfg = eff_cfg["exogenous_feed_calibration"] - if exo_feed_cal_cfg["enabled"]: - inputs["exogenous_feed"] = exo_feed_cal_cfg["exogenous_feed"] - - # Food demand calibration: include the per-food multiplier CSV when - # enabled. The generation config sets enabled=false to break the DAG - # cycle on the source scenario; solve_model then treats the calibration - # as absent (multiplier=1). - fd_cal_cfg = eff_cfg["food_demand_calibration"] - if fd_cal_cfg["enabled"]: - inputs["food_demand_calibration"] = fd_cal_cfg["calibration_file"] - - # Deviation-penalty L1 calibration: include the calibrated YAML when - # any component's l1_cost is set to the "calibrated" sentinel. The - # solve resolves the sentinel via - # solve_model/production_stability.resolve_calibrated_l1_costs. - dp_cfg = eff_cfg["deviation_penalty"] - dp_cal_cfg = dp_cfg["calibration"] - if dp_cal_cfg["enabled"] and deviation_penalty_uses_calibrated(dp_cfg): - inputs["deviation_penalty_calibration"] = dp_cal_cfg["calibrated_yaml"] + inputs.update(calibration_artefact_inputs(eff_cfg)) return inputs diff --git a/workflow/scripts/calibration_fingerprint.py b/workflow/scripts/calibration_fingerprint.py new file mode 100644 index 00000000..030a19a1 --- /dev/null +++ b/workflow/scripts/calibration_fingerprint.py @@ -0,0 +1,286 @@ +# SPDX-FileCopyrightText: 2026 Koen van Greevenbroek +# +# SPDX-License-Identifier: GPL-3.0-or-later + +"""Content fingerprint of a calibration step's external inputs. + +A calibration step is stale when re-running it would change its artefacts, +which depends only on inputs from outside the artefact set: curated and bundled +data, the scripts, and the step config. Those are hashed when the set is +generated and compared when it is checked, so the set's own artefacts and the +chain's intermediates never enter into the answer. + +The input list comes from the live Snakemake DAG, built through the Python API: +every file the DAG consumes that no rule in the DAG produces is an external +leaf. Building it afresh on each check means a dependency that a rule or code +change adds or drops is reflected straight away. + +Config files are hashed after a YAML round-trip, so reformatting and comment +edits do not register. The base config belongs to ``calibration_provenance``, +which compares it structurally. +""" + +import argparse +import contextlib +import hashlib +import io +from pathlib import Path +import sys + +from snakemake.api import SnakemakeApi +from snakemake.settings.types import ( + ConfigSettings, + DAGSettings, + OutputSettings, + ResourceSettings, +) +import yaml + +FINGERPRINT_FILE = "fingerprint.yaml" + +HEADER = """# Content fingerprint of each calibration step's external inputs, written by +# workflow/scripts/calibration_fingerprint.py via tools/calibrate. Compared by +# `tools/calibrate --check`; do not edit by hand. +# Licensing: see the annotation in REUSE.toml. +""" + + +def sha256_file(path: Path) -> str: + """Return the SHA-256 of a file, streamed so large inputs stay cheap.""" + digest = hashlib.sha256() + with path.open("rb") as handle: + for chunk in iter(lambda: handle.read(1 << 20), b""): + digest.update(chunk) + return digest.hexdigest() + + +def sha256_dir(path: Path) -> str: + """Return a digest of a directory input's file manifest. + + Manually downloaded sources arrive as directories of hundreds of megabytes. + Hashing the sorted (relative path, size) listing costs nothing and moves + whenever a file is added, removed or replaced. + """ + entries = sorted( + f"{f.relative_to(path)} {f.stat().st_size}" + for f in path.rglob("*") + if f.is_file() + ) + return hashlib.sha256("\n".join(entries).encode()).hexdigest() + + +def sha256_yaml(path: Path) -> str: + """Return the SHA-256 of a YAML file's parsed content. + + Hashing the loaded document rather than the raw bytes keeps comment and + formatting edits from registering as a change. + """ + data = yaml.safe_load(path.read_text()) + return hashlib.sha256( + yaml.safe_dump(data, sort_keys=True, default_flow_style=False).encode() + ).hexdigest() + + +def dag_files( + configfiles: list[str], name: str, targets: list[str], workdir: Path +) -> tuple[set[str], set[str], set[str]]: + """Return (inputs, outputs, code) over every job in the step's DAG. + + ``code`` is the scripts the DAG's rules run plus the rule files defining + them; Snakemake carries those outside the input lists, so they are gathered + separately here. + + The DAG is prepared without taking the workflow lock, so a check is safe to + run while something else is using the directory. + """ + with SnakemakeApi(OutputSettings(dryrun=True, quiet={"all"})) as api: + workflow = api.workflow( + resource_settings=ResourceSettings(cores=1), + config_settings=ConfigSettings( + configfiles=[Path(c) for c in configfiles], + config={"name": name}, + ), + snakefile=workdir / "workflow" / "Snakefile", + workdir=workdir, + ) + workflow.dag(dag_settings=DAGSettings(targets=frozenset(targets))) + internal = workflow._workflow + internal._prepare_dag( + forceall=False, + ignore_incomplete=True, + lock_warn_only=True, + nolock=True, + ) + internal._build_dag() + + inputs: set[str] = set() + outputs: set[str] = set() + code: set[str] = set() + for job in internal.dag.jobs: + inputs.update(str(f) for f in job.input) + outputs.update(str(f) for f in job.output) + rule_file = getattr(job.rule, "snakefile", None) + if rule_file: + code.add(str(rule_file)) + script = getattr(job.rule, "script", None) + if script: + # Scripts are named relative to the rule file that runs them. + code.add(str((Path(rule_file).parent / script).resolve())) + return inputs, outputs, code + + +def build_fingerprint( + configfiles: list[str], + name: str, + targets: list[str], + hash_configs: list[str], + workdir: Path, +) -> dict: + """Hash a step's external leaves, its config, and the artefacts it wrote.""" + inputs, outputs, code = dag_files(configfiles, name, targets, workdir) + + leaf_hashes = {} + missing = [] + for leaf in sorted(inputs - outputs): + path = Path(leaf) + if path.is_file(): + leaf_hashes[leaf] = sha256_file(path) + elif path.is_dir(): + leaf_hashes[leaf] = sha256_dir(path) + else: + missing.append(leaf) + + def relative(path: Path) -> str: + """Key code by repo-relative path so a fingerprint stays portable.""" + try: + return str(path.relative_to(workdir)) + except ValueError: + return str(path) + + return { + "config_files": {c: sha256_yaml(Path(c)) for c in hash_configs}, + "code": { + relative(Path(c)): sha256_file(Path(c)) + for c in sorted(code) + if Path(c).is_file() + }, + "inputs": leaf_hashes, + # The step's own artefacts, so that one edited or checked out behind the + # chain's back is reported rather than silently trusted. + "artefacts": { + tgt: sha256_file(Path(tgt)) + for tgt in sorted(targets) + if Path(tgt).is_file() + }, + "missing_inputs": missing, + } + + +def load_fingerprints(cal_dir: Path) -> dict: + path = cal_dir / FINGERPRINT_FILE + if not path.is_file(): + return {} + return yaml.safe_load(path.read_text()) or {} + + +def save_fingerprints(cal_dir: Path, data: dict) -> None: + cal_dir.mkdir(parents=True, exist_ok=True) + path = cal_dir / FINGERPRINT_FILE + path.write_text(HEADER + yaml.safe_dump(data, sort_keys=True)) + + +def compare(recorded: dict, current: dict) -> list[str]: + """Return human-readable reasons the step is stale, empty when it is not.""" + reasons = [] + + for kind, key in ( + ("config", "config_files"), + ("code", "code"), + ("input", "inputs"), + ("artefact", "artefacts"), + ): + old, new = recorded.get(key, {}), current.get(key, {}) + for path in sorted(set(old) | set(new)): + if path not in old: + reasons.append(f"{path} ({kind} added)") + elif path not in new: + reasons.append(f"{path} ({kind} no longer used)") + elif old[path] != new[path]: + changed = ( + "modified since it was generated" + if kind == "artefact" + else "content changed" + ) + reasons.append(f"{path} ({kind} {changed})") + + for path in current.get("missing_inputs", []): + reasons.append(f"{path} (input missing from disk)") + + return reasons + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("mode", choices=["record", "check"]) + parser.add_argument("--step", required=True, help="calibration step label") + parser.add_argument("--cal-dir", required=True, help="artefact set directory") + parser.add_argument("--name", required=True, help="workflow name override") + parser.add_argument( + "--configfile", action="append", default=[], help="DAG config (repeatable)" + ) + parser.add_argument( + "--hash-config", + action="append", + default=[], + help="config whose content is part of the fingerprint (repeatable)", + ) + parser.add_argument( + "--target", + action="append", + default=[], + help="artefact this step produces (repeatable)", + ) + args = parser.parse_args() + + workdir = Path.cwd() + cal_dir = Path(args.cal_dir) + + # Snakemake narrates DAG construction; keep that out of the report, but + # hand it back if the build fails, since then it is the error message. + noise = io.StringIO() + try: + with contextlib.redirect_stdout(noise), contextlib.redirect_stderr(noise): + current = build_fingerprint( + args.configfile, args.name, args.target, args.hash_config, workdir + ) + except Exception as exc: + print(f" [error] {args.step:<10} ({type(exc).__name__}: {exc})") + sys.stderr.write(noise.getvalue()) + return 2 + + if args.mode == "record": + data = load_fingerprints(cal_dir) + data.setdefault("steps", {})[args.step] = current + save_fingerprints(cal_dir, data) + return 0 + + recorded = load_fingerprints(cal_dir).get("steps", {}).get(args.step) + if recorded is None: + print(f" [STALE] {args.step:<10} (no fingerprint recorded)") + return 1 + + reasons = compare(recorded, current) + if not reasons: + print(f" [up-to-date] {args.step}") + return 0 + + print(f" [STALE] {args.step:<10} (run: tools/calibrate {args.step})") + for reason in reasons[:10]: + print(f" {reason}") + if len(reasons) > 10: + print(f" ... and {len(reasons) - 10} more") + return 1 + + +if __name__ == "__main__": + sys.exit(main())