Browse Source

[DATALAD] Recorded changes

Daniel Busch 2 months ago
parent
commit
820fb93770

+ 0 - 0
conversion_FAO_IPPCC2006_PRIMAP_CH4_2024.csv → conversion_FAO_IPPCC2006_PRIMAP_CH4.csv


+ 0 - 1
conversion_FAO_IPPCC2006_PRIMAP_CH4_2023.csv

@@ -1 +0,0 @@
-.git/annex/objects/3m/PQ/MD5E-s439--3a3c3c747faacd58172b97058b513a28.csv/MD5E-s439--3a3c3c747faacd58172b97058b513a28.csv

+ 0 - 0
conversion_FAO_IPPCC2006_PRIMAP_CO2_2023.csv → conversion_FAO_IPPCC2006_PRIMAP_CO2.csv


+ 0 - 1
conversion_FAO_IPPCC2006_PRIMAP_CO2_2024.csv

@@ -1 +0,0 @@
-.git/annex/objects/5g/kM/MD5E-s522--e1bd0f6d079272418da3e654e2fad31e.csv/MD5E-s522--e1bd0f6d079272418da3e654e2fad31e.csv

+ 0 - 0
conversion_FAO_IPPCC2006_PRIMAP_N2O_2024.csv → conversion_FAO_IPPCC2006_PRIMAP_N2O.csv


+ 0 - 1
conversion_FAO_IPPCC2006_PRIMAP_N2O_2023.csv

@@ -1 +0,0 @@
-.git/annex/objects/1w/6J/MD5E-s667--c1223392c238ed9d3e38a0fe1cb62565.csv/MD5E-s667--c1223392c238ed9d3e38a0fe1cb62565.csv

+ 4 - 4
src/faostat_data_primap/read.py

@@ -288,7 +288,7 @@ def read_data(  # noqa: PLR0915 PLR0912
     result_proc_if = result_proc.pr.to_interchange_format()
 
     output_filename = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
-    output_folder = extracted_data_path / release_name
+    # output_folder = extracted_data_path / release_name
 
     if not output_folder.exists():
         output_folder.mkdir()
@@ -308,7 +308,7 @@ def read_data(  # noqa: PLR0915 PLR0912
 
 
 # TODO we don't need the year, the conversion should remain the same
-def process(ds: xarray.Dataset, year: str = "2024"):
+def process(ds: xarray.Dataset):
     """
     Process dataset.
 
@@ -343,14 +343,14 @@ def process(ds: xarray.Dataset, year: str = "2024"):
     ds_checked = ds.pr.add_aggregates_coordinates(agg_info=agg_info_fao)  # noqa: F841
 
     # We need a conversion CSV file for each entity
-    # That's a temporary workaround until convert function can filter for data variables (entities)
+    # That's a temporary workaround until the filter function in climate categories works
     # TODO the "year" variable is not a great approach to handle configurations
     conv = {}
     gases = ["CO2", "CH4", "N2O"]
 
     for var in gases:
         conv[var] = cc.Conversion.from_csv(
-            f"../../conversion_FAO_IPPCC2006_PRIMAP_{var}_{year}.csv",
+            f"../../conversion_FAO_IPPCC2006_PRIMAP_{var}.csv",
             cats=cats,
         )
 

+ 83 - 669
tests/unit/test_conversion.py

@@ -1,4 +1,5 @@
 import primap2 as pm2
+import pytest
 
 from src.faostat_data_primap.helper.paths import (
     downloaded_data_path,
@@ -7,10 +8,11 @@ from src.faostat_data_primap.helper.paths import (
 from src.faostat_data_primap.read import process, read_data
 
 
+# For development work on process function only
 def test_processed_output_remains_the_same():
     # get processed data
-    # release_name = "v2024-11-14"
-    release_name = "v2023-12-13"
+    release_name = "v2024-11-14"
+    # release_name = "v2023-12-13"
     filename_processed_ds = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
     filepath = extracted_data_path / release_name / (filename_processed_ds + ".nc")
     ds_processed = pm2.open_dataset(filepath)
@@ -23,23 +25,42 @@ def test_processed_output_remains_the_same():
     ds_raw = pm2.open_dataset(filename_raw_ds)
 
     # process raw data
-    ds_processed_new = process(ds=ds_raw, year="2023")
+    ds_processed_new = process(ds=ds_raw)
 
     # compare
     assert ds_processed.broadcast_equals(ds_processed_new)
 
 
-def test_read(tmp_path):
-    domains_and_releases_to_read = [
-        ("farm_gate_agriculture_energy", "2024-11-14"),
-        ("farm_gate_emissions_crops", "2024-11-14"),
-        ("farm_gate_livestock", "2024-11-14"),
-        ("land_use_drained_organic_soils", "2024-11-14"),
-        ("land_use_fires", "2023-11-09"),
-        ("land_use_forests", "2024-11-14"),
-        ("pre_post_agricultural_production", "2024-11-14"),
-    ]
-
+@pytest.mark.parametrize(
+    "domains_and_releases_to_read",
+    [
+        pytest.param(
+            [
+                ("farm_gate_agriculture_energy", "2023-12-13"),
+                ("farm_gate_emissions_crops", "2023-11-09"),
+                ("farm_gate_livestock", "2023-11-09"),
+                ("land_use_drained_organic_soils", "2023-11-09"),
+                ("land_use_fires", "2023-11-09"),
+                ("land_use_forests", "2023-11-09"),
+                ("pre_post_agricultural_production", "2023-11-09"),
+            ],
+            id="2023 release",
+        ),
+        pytest.param(
+            [
+                ("farm_gate_agriculture_energy", "2024-11-14"),
+                ("farm_gate_emissions_crops", "2024-11-14"),
+                ("farm_gate_livestock", "2024-11-14"),
+                ("land_use_drained_organic_soils", "2024-11-14"),
+                ("land_use_fires", "2024-11-14"),
+                ("land_use_forests", "2024-11-14"),
+                ("pre_post_agricultural_production", "2024-11-14"),
+            ],
+            id="2024 release",
+        ),
+    ],
+)
+def test_read(tmp_path, domains_and_releases_to_read):
     read_data(
         domains_and_releases_to_read=domains_and_releases_to_read,
         read_path=downloaded_data_path,
@@ -47,670 +68,63 @@ def test_read(tmp_path):
     )
 
 
-def test_conversion_from_FAO_to_IPCC2006_PRIMAP():
-    release_name = "v2024-11-14"
-    # release_name = "v2023-12-13"
-
-    # get raw data
-    filename_raw_ds = (
-        extracted_data_path
-        / f"{release_name}/FAOSTAT_Agrifood_system_emissions_{release_name}_raw.nc"
-    )
-    ds_raw = pm2.open_dataset(filename_raw_ds)
-
-    # process raw data
-    result_proc = process(ds=ds_raw, year="2024")
-
-    result_proc_if = result_proc.pr.to_interchange_format()
-
-    # save processed data
-    output_filename = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
-    output_folder = extracted_data_path / release_name
-
-    if not output_folder.exists():
-        output_folder.mkdir()
-
-    filepath = output_folder / (output_filename + ".csv")
-    print(f"Writing processed primap2 file to {filepath}")
-    pm2.pm2io.write_interchange_format(
-        filepath,
-        result_proc_if,
-    )
-
-    compression = dict(zlib=True, complevel=9)
-    encoding = {var: compression for var in result_proc.data_vars}
-    filepath = output_folder / (output_filename + ".nc")
-    print(f"Writing netcdf file to {filepath}")
-    result_proc.pr.to_netcdf(filepath, encoding=encoding)
-
-
-# def test_read(tmp_path):
-#     domains_and_releases_to_read = [
-#         # ("farm_gate_agriculture_energy", "2024-11-14"),
-#         # ("farm_gate_emissions_crops", "2024-11-14"),
-#         # ("farm_gate_livestock", "2024-11-14"),
-#         # ("land_use_drained_organic_soils", "2024-11-14"),
-#         ("land_use_fires", "2023-11-09"),
-#         # ("land_use_forests", "2024-11-14"),
-#         # ("pre_post_agricultural_production", "2024-11-14"),
-#     ]
+# TODO delete everything below here when data set is final
+# def test_conversion_from_FAO_to_IPCC2006_PRIMAP():
+#     release_name = "v2024-11-14"
+#     # release_name = "v2023-12-13"
 #
-#     read_data(
-#         domains_and_releases_to_read=domains_and_releases_to_read,
-#         read_path=downloaded_data_path,
-#         save_path=tmp_path,
+#     # get raw data
+#     filename_raw_ds = (
+#         extracted_data_path
+#         / f"{release_name}/FAOSTAT_Agrifood_system_emissions_{release_name}_raw.nc"
 #     )
-
-
-def test_read_2023():
-    domains_and_releases_to_read = [
-        # ("farm_gate_agriculture_energy", "2023-12-13"),
-        # ("farm_gate_emissions_crops", "2023-11-09"),
-        # ("farm_gate_livestock", "2023-11-09"),
-        # ("land_use_drained_organic_soils", "2023-11-09"),
-        # ("land_use_fires", "2023-11-09"),
-        # ("land_use_forests", "2023-11-09"),
-        # ("pre_post_agricultural_production", "2023-11-09"),
-        ("farm_gate_agriculture_energy", "2024-11-14"),
-        ("farm_gate_emissions_crops", "2024-11-14"),
-        ("farm_gate_livestock", "2024-11-14"),
-        ("land_use_drained_organic_soils", "2024-11-14"),
-        ("land_use_fires", "2024-11-14"),
-        ("land_use_forests", "2024-11-14"),
-        ("pre_post_agricultural_production", "2024-11-14"),
-    ]
-
-    read_data(
-        domains_and_releases_to_read=domains_and_releases_to_read,
-        read_path=downloaded_data_path,
-        save_path=extracted_data_path,
-    )
-
-
+#     ds_raw = pm2.open_dataset(filename_raw_ds)
 #
-# def test_yaml_to_python():
-#     cat = cc.from_yaml("FAO.yaml")
-#     cat.to_python("FAO.py")
+#     # process raw data
+#     result_proc = process(ds=ds_raw)
 #
+#     result_proc_if = result_proc.pr.to_interchange_format()
 #
-# def test_python_to_yaml():
-#     from FAO import spec
+#     # save processed data
+#     output_filename = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
+#     output_folder = extracted_data_path / release_name
 #
-#     cat = cc.from_spec(spec)
-#     assert cat
-
+#     if not output_folder.exists():
+#         output_folder.mkdir()
 #
-# def test_fao_categorisation():
-#     spec = {
-#         "name": "FAOSTAT",
-#         "title": (
-#             "Food and Agriculture Organization of the United Nations (FAO) "
-#             "FAOSTAT data set categorisation"
-#         ),
-#         "comment": "Needed to add FAOSTAT data to PRIMAP-hist",
-#         "references": "",
-#         "institution": "FAO",
-#         "hierarchical": True,
-#         "last_update": "2024-12-10",
-#         "version": "2024",
-#         "total_sum": True,
-#         "canonical_top_level_category": "0",
-#     }
-#
-#     categories = {}
-#
-#     # 0. main categories
-#     categories["0"] = {
-#         "title": "Total",
-#         "comment": "All emissions and removals",
-#         "children": [["1", "2", "3", "4", "5", "6", "7"]],
-#     }
-#     children_1 = ["1.A", "1.B"]
-#     children_2 = ["2.A", "2.B", "2.C", "2.D", "2.E"]
-#     children_3 = [f"3.{i}" for i in "ABCDEFGHIJKLMNOPQR"]
-#
-#     main_categories = (
-#         # category code, name and comment, gases, children
-#         ("1", "Crops", ["CH4", "N2O"], children_1),
-#         (
-#             "2",
-#             "Energy use in agriculture",
-#             ["CH4", "N2O", "CO2"],
-#             children_2,
-#         ),
-#         ("3", "Livestock", ["CH4", "N2O"], children_3),
-#         # ("4", "Forest", ["CO2"], children_4),
-#         # (
-#         #     "5",
-#         #     "Drained organic soils",
-#         #     ["N2O", "CO2"],
-#         #     children_5,
-#         # ),
-#         # ("6", "Fires", ["CH4", "N2O", "CO2"], children_6),
-#         # (
-#         #     "7",
-#         #     "Pre and post agricultural production",
-#         #     ["CH4", "N2O", "CO2"],
-#         #     children_7,
-#         # ),
+#     filepath = output_folder / (output_filename + ".csv")
+#     print(f"Writing processed primap2 file to {filepath}")
+#     pm2.pm2io.write_interchange_format(
+#         filepath,
+#         result_proc_if,
 #     )
-#     for code, name, gases, children in main_categories:
-#         categories[code] = {
-#             "title": name,
-#             "comment": name,
-#             # "alternative_codes": code.replace(".", ""),
-#             "children": [children],
-#             "info": {"gases": gases},
-#         }
-#
-#     # 1. crops
-#     # all crops category
-#     code_all_crops = "1.A"
-#     codes_crops = [f"1.A.{i}" for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
-#     categories[code_all_crops] = {
-#         "title": "All crops",
-#         "comment": "All crops",
-#         # "alternative_codes": code_all_crops.replace(".", ""),
-#         "children": [codes_crops],
-#         "info": {"gases": ["CH4", "N2O"]},
-#     }
-#
-#     crops = [
-#         "Wheat",
-#         "Rice",
-#         "Potatoes",
-#         "Millet",
-#         "Barley",
-#         "Maize (corn)",
-#         "Sugar cane",
-#         "Beans, dry",
-#         "Oats",
-#         "Rye",
-#         "Sorghum",
-#         "Soya beans",
-#     ]
-#
-#     crop_burnings = [
-#         True,
-#         True,
-#         False,
-#         False,
-#         False,
-#         True,
-#         True,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#     ]
-#     rice_cultivations = [
-#         False,
-#         True,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#         False,
-#     ]
-#
-#     for crop, code, crop_burning, rice_cultivation in zip(
-#         crops, codes_crops, crop_burnings, rice_cultivations
-#     ):
-#         # all crops have at least N2O emissions
-#         gases_main = "N2O"
-#
-#         if crop_burning or rice_cultivation:
-#             gases_main = ["CH4", "N2O"]
-#
-#         # all crops have at least crop residues as child
-#         children_main = [f"{code}.a"]
 #
-#         if crop_burning:
-#             children_main.append(f"{code}.b")
+#     compression = dict(zlib=True, complevel=9)
+#     encoding = {var: compression for var in result_proc.data_vars}
+#     filepath = output_folder / (output_filename + ".nc")
+#     print(f"Writing netcdf file to {filepath}")
+#     result_proc.pr.to_netcdf(filepath, encoding=encoding)
 #
-#         if rice_cultivation:
-#             children_main.append(f"{code}.c")
-#
-#         categories[f"{code}"] = {
-#             "title": f"{crop}",
-#             "comment": f"{crop}",
-#             # "alternative_codes": [f"{code}".replace(".", "")],
-#             "info": {"gases": gases_main},
-#             "children": [children_main],
-#         }
-#
-#         # crop residues (every crop has it)
-#         categories[f"{code}.a.i"] = {
-#             "title": f"{crop} crop residues direct emissions",
-#             "comment": f"{crop} crop residues direct emissions",
-#             # "alternative_codes": [f"{code}.a".replace(".", "")],
-#             "info": {"gases": ["N2O"]},
-#         }
-#
-#         categories[f"{code}.a.ii"] = {
-#             "title": f"{crop} crop residues indirect emissions",
-#             "comment": f"{crop} crop residues indirect emissions",
-#             # "alternative_codes": [f"{code}.a.i".replace(".", "")],
-#             "info": {"gases": ["N2O"]},
-#         }
-#
-#         categories[f"{code}.a"] = {
-#             "title": f"{crop} crop residues",
-#             "comment": f"{crop} crop residues",
-#             # "alternative_codes": [f"{code}.a".replace(".", "")],
-#             "info": {"gases": ["N2O"]},
-#             "children": [[f"{code}.a.ii", f"{code}.a.i"]],
-#         }
-#
-#         if crop_burning:
-#             categories[f"{code}.b"] = {
-#                 "title": f"{crop} burning crop residues",
-#                 "comment": f"{crop} burning crop residues",
-#                 # "alternative_codes": [f"{code}.b".replace(".", "")],
-#                 "info": {"gases": ["CH4", "N2O"]},
-#             }
-#         if rice_cultivation:
-#             categories[f"{code}.c"] = {
-#                 "title": "Rice cultivation",
-#                 "comment": "Rice cultivation",
-#                 # "alternative_codes": [f"{code}.c".replace(".", "")],
-#                 "info": {"gases": ["CH4"]},
-#             }
-#
-#     # synthetic fertilisers
-#     codes_synthetic_fertilisers = ["1.B", "1.B.1", "1.B.2", "1.B.2.a", "1.B.2.b"]
-#     names = [
-#         "Synthetic fertilisers",
-#         "Direct emissions",
-#         "Indirect emissions",
-#         "Indirect emissions that volatilise",
-#         "Indirect emissions that leach",
-#     ]
-#     children_cats = [["1.B.1", "1.B.2"], None, ["1.B.2.a", "1.B.2.b"], None, None]
-#
-#     for code, name, child_cat in zip(codes_synthetic_fertilisers, names, children_cats):
-#         categories[code] = {
-#             "title": name,
-#             "comment": name,
-#             # "alternative_codes": [code.replace(".", "")],
-#             "info": {"gases": ["N2O"]},
-#         }
-#         if child_cat:
-#             categories[code]["children"] = [child_cat]
-#
-#     # 2. energy use
-#     names = [
-#         "Natural gas",
-#         "Electricity",
-#         "Coal",
-#         "Heat",
-#         "Petroleum",
-#     ]
-#     codes = children_2
-#     for name, code in zip(names, codes):
-#         categories[code] = {
-#             "title": name,
-#             "comment": name,
-#             # "alternative_codes": code.replace(".", ""),
-#             "info": {"gases": ["CH4", "N2O", "CO2"]},
-#         }
-#
-#     # 3 livestock
-#     animals = [
-#         "Asses",
-#         "Camels",
-#         "Cattle, dairy",
-#         "Cattle, non-dairy",
-#         "Chickens, broilers",
-#         "Chickens, layers",
-#         "Goats",
-#         "Horses",
-#         "Mules and hinnies",
-#         "Sheep",
-#         "Llamas",
-#         "Chickens",
-#         "Poultry Birds",
-#         "Buffalo",
-#         "Ducks",
-#         "Swine, breeding",
-#         "Swine, market",
-#         "Turkeys",
-#     ]
-#
-#     codes_animals = [f"3.{i}" for i in "ABCDEFGHIJKLMNOPQR"]
-#
-#     enteric_fermentation = [
-#         "Asses",
-#         "Camels",
-#         "Cattle, dairy",
-#         "Cattle, non-dairy",
-#         "Goats",
-#         "Horses",
-#         "Sheep",
-#         "Mules and hinnies",
-#         "Buffalo",
-#         "Swine, breeding",
-#         "Swine, market",
-#         "Llamas",
-#     ]
-#
-#     for animal, code in zip(animals, codes_animals):
-#         if animal in enteric_fermentation:
-#             gases = ["CH4"]
-#             animal_children = [f"{code}.{i}" for i in "1234"]
-#             categories[f"{code}.4"] = {
-#                 "title": f"{animal} enteric fermentation",
-#                 "comment": f"{animal} enteric fermentation",
-#                 # "alternative_codes" : code.replace(".", ""),
-#                 "info": {"gases": gases},
-#             }
-#         else:
-#             gases = ["N2O"]
-#             animal_children = [f"{code}.{i}" for i in "123"]
-#
-#         categories[code] = {
-#             "title": animal,
-#             "comment": animal,
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": gases},
-#             "children": [animal_children],
-#         }
-#
-#         # manure management branch
-#         manure_management_children = [f"{code}.1.{i}" for i in "abc"]
-#         categories[f"{code}.1"] = {
-#             "title": f"{animal} manure management",
-#             "comment": f"{animal} manure management",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": gases},
-#             "children": [manure_management_children],
-#         }
-#
-#         categories[f"{code}.1.a"] = {
-#             "title": f"{animal} decomposition of organic matter",
-#             "comment": f"{animal} decomposition of organic matter",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "CH4"},
-#         }
-#
-#         categories[f"{code}.1.b"] = {
-#             "title": f"{animal} manure management (Direct emissions N2O)",
-#             "comment": f"{animal} manure management (Direct emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         categories[f"{code}.1.c"] = {
-#             "title": f"{animal} manure management (Indirect emissions N2O)",
-#             "comment": f"{animal} manure management (Indirect emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         # manure left on pasture branch
-#         manure_left_on_pasture_children = [f"{code}.2.{i}" for i in "ab"]
-#         categories[f"{code}.2"] = {
-#             "title": f"{animal} manure left on pasture",
-#             "comment": f"{animal} manure left on pasture",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#             "children": [manure_left_on_pasture_children],
-#         }
-#
-#         categories[f"{code}.2.a"] = {
-#             "title": f"{animal} manure left on pasture (direct emissions N2O)",
-#             "comment": f"{animal} manure left on pasture (direct emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         categories[f"{code}.2.b"] = {
-#             "title": f"{animal} manure left on pasture (indirect emissions N2O)",
-#             "comment": f"{animal} manure left on pasture (indirect emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#             "children": [[f"{code}.2.b.i", f"{code}.2.b.ii"]],
-#         }
-#
-#         categories[f"{code}.2.b.i"] = {
-#             "title": (
-#                 f"{animal} manure left on pasture "
-#                 f"(indirect emissions, N2O that leaches)"
-#             ),
-#             "comment": (
-#                 f"{animal} manure left on pasture (indirect "
-#                 f"emissions, N2O that leaches)"
-#             ),
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         categories[f"{code}.2.b.ii"] = {
-#             "title": (
-#                 f"{animal} manure left on pasture "
-#                 f"(indirect emissions, N2O that volatilises)"
-#             ),
-#             "comment": (
-#                 f"{animal} manure left on pasture (indirect "
-#                 f"emissions, N2O that volatilises)"
-#             ),
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         # manure applied branch
-#
-#         manure_applied_children = [f"{code}.3.{i}" for i in "ab"]
-#         categories[f"{code}.3"] = {
-#             "title": f"{animal} manure applied",
-#             "comment": f"{animal} manure applied",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#             "children": [manure_applied_children],
-#         }
-#
-#         categories[f"{code}.3.a"] = {
-#             "title": f"{animal} manure applied (direct emissions N2O)",
-#             "comment": f"{animal} manure applied (direct emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         categories[f"{code}.3.b"] = {
-#             "title": f"{animal} manure applied (indirect emissions N2O)",
-#             "comment": f"{animal} manure applied (indirect emissions N2O)",
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#             "children": [[f"{code}.3.b.i", f"{code}.3.b.ii"]],
-#         }
-#
-#         categories[f"{code}.3.b.i"] = {
-#             "title": (
-#                 f"{animal} manure applied " f"(indirect emissions, N2O that leaches)"
-#             ),
-#             "comment": (
-#                 f"{animal} manure applied (indirect " f"emissions, N2O that leaches)"
-#             ),
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#         categories[f"{code}.3.b.ii"] = {
-#             "title": (
-#                 f"{animal} manure applied "
-#                 f"(indirect emissions, N2O that volatilises)"
-#             ),
-#             "comment": (
-#                 f"{animal} manure applied (indirect "
-#                 f"emissions, N2O that volatilises)"
-#             ),
-#             # "alternative_codes" : code.replace(".", ""),
-#             "info": {"gases": "N2O"},
-#         }
-#
-#     # forests
-#     categories["4"] = {
-#         "title": "Carbon stock change in forests",
-#         "comment": "Carbon stock change in forests",
-#         "info": {"gases": "CO2"},
-#         "children": [["4.A", "4.B"]],
-#     }
-#
-#     categories["4.A"] = {
-#         "title": "Forest land",
-#         "comment": "Forest land",
-#         "info": {"gases": "CO2"},
-#     }
-#
-#     categories["4.B"] = {
-#         "title": "Net Forest conversion",
-#         "comment": "Net Forest conversion",
-#         "info": {"gases": "CO2"},
-#     }
-#
-#     # drained organic soils
-#     categories["5"] = {
-#         "title": "Drained organic soils",
-#         "comment": "Drained organic soils",
-#         "info": {"gases": "CO2"},
-#         "children": [["5.A", "5.B"]],
-#     }
-#
-#     categories["5.A"] = {
-#         "title": "Drained grassland",
-#         "comment": "Drained grassland",
-#         "info": {"gases": ["CO2", "N2O"]},
-#     }
-#
-#     categories["5.B"] = {
-#         "title": "Drained cropland",
-#         "comment": "Drained cropland",
-#         "info": {"gases": ["CO2", "N2O"]},
-#     }
-#
-#     # 6 Fires
-#     # Forest fires
-#     forest_fires_children = ["Humid tropical forests", "Other forests"]
-#     forest_fires_children_codes = ["6.A.1", "6.A.2"]
-#     for cat_name, code in zip(forest_fires_children, forest_fires_children_codes):
-#         categories[code] = {
-#             "title": cat_name,
-#             "comment": cat_name,
-#             "info": {"gases": ["CO2", "N2O", "CH4"]},
-#         }
-#     categories["6.A"] = {
-#         "title": "Forest fires",
-#         "comment": "Forest fires",
-#         "info": {"gases": ["CO2", "N2O", "CH4"]},
-#         "children": [forest_fires_children_codes],
-#     }
-#
-#     # Savanna fires
-#     savanna_fires_children = [
-#         "Closed shrubland",
-#         "Grassland",
-#         "Open shrubland",
-#         "Savanna",
-#         "Woody savanna",
-#     ]
-#     savanna_fires_children_codes = ["6.B.1", "6.B.2", "6.B.3", "6.B.4", "6.B.5"]
-#     for cat_name, code in zip(savanna_fires_children, savanna_fires_children_codes):
-#         categories[code] = {
-#             "title": cat_name,
-#             "comment": cat_name,
-#             "info": {"gases": ["CO2", "N2O", "CH4"]},
-#         }
-#     categories["6.B"] = {
-#         "title": "Savanna fires",
-#         "comment": "Savanna fires",
-#         "info": {"gases": ["CO2", "N2O", "CH4"]},
-#         "children": [savanna_fires_children_codes],
-#     }
-#
-#     # fires in organic soils
-#     categories["6.C"] = {
-#         "title": "Fires in organic soils",
-#         "comment": "Fires in organic soils",
-#         "info": {"gases": ["CO2", "N2O", "CH4"]},
-#     }
-#
-#     # 6 fires
-#     categories["6"] = {
-#         "title": "Fires",
-#         "comment": "Fires",
-#         "info": {"gases": ["CO2", "N2O", "CH4"]},
-#         "children": [["6.A", "6.B", "6.C"]],
-#     }
-#
-#     # 7 pre and post production
-#     pre_post_production_categories = [
-#         "Fertilizers Manufacturing",
-#         "Food Transport",
-#         "Food Retail",
-#         "Food Household Consumption",
-#         "Solid Food Waste",
-#         "Domestic Wastewater",
-#         "Industrial Wastewater",
-#         "Incineration",
-#         "Pre- and Post- Production",
-#         "Energy Use (Pre- and Post-Production)",
-#         "Agrifood Systems Waste Disposal",
-#         "Cold Chain F-Gas",
-#         "Pesticides Manufacturing",
-#         "Food Processing",
-#         "Food Packaging",
-#     ]
-#     pre_post_production_categories_codes = ["7." + i for i in "ABCDEFGHIJKLMNO"]
-#     pre_post_production_categories_gases = [
-#         ["CO2", "N2O", "KYOTOGHG (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)", "FGASES (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)", "FGASES (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)", "FGASES (AR5GWP100)"],
-#         ["KYOTOGHG (AR5GWP100)", "CH4"],
-#         ["KYOTOGHG (AR5GWP100)", "CH4", "N2O"],
-#         ["KYOTOGHG (AR5GWP100)", "CH4", "N2O"],
-#         ["CO2", "KYOTOGHG (AR5GWP100)"],  # incineration
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)", "FGASES (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)"],
-#         ["FGASES (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)", "FGASES (AR5GWP100)"],
-#         ["CO2", "CH4", "N2O", "KYOTOGHG (AR5GWP100)"],
+# def test_read_2023():
+#     domains_and_releases_to_read = [
+#         # ("farm_gate_agriculture_energy", "2023-12-13"),
+#         # ("farm_gate_emissions_crops", "2023-11-09"),
+#         # ("farm_gate_livestock", "2023-11-09"),
+#         # ("land_use_drained_organic_soils", "2023-11-09"),
+#         # ("land_use_fires", "2023-11-09"),
+#         # ("land_use_forests", "2023-11-09"),
+#         # ("pre_post_agricultural_production", "2023-11-09"),
+#         ("farm_gate_agriculture_energy", "2024-11-14"),
+#         ("farm_gate_emissions_crops", "2024-11-14"),
+#         ("farm_gate_livestock", "2024-11-14"),
+#         ("land_use_drained_organic_soils", "2024-11-14"),
+#         ("land_use_fires", "2024-11-14"),
+#         ("land_use_forests", "2024-11-14"),
+#         ("pre_post_agricultural_production", "2024-11-14"),
 #     ]
-#     for cat_name, code, gases in zip(
-#         pre_post_production_categories,
-#         pre_post_production_categories_codes,
-#         pre_post_production_categories_gases,
-#     ):
-#         categories[code] = {
-#             "title": cat_name,
-#             "comment": cat_name,
-#             "info": {"gases": gases},
-#         }
-#     categories["7"] = {
-#         "title": "Pre and post agricultural production",
-#         "comment": "Pre and post agricultural production",
-#         "info": {
-#             "gases": [
-#                 "CO2",
-#                 "CH4",
-#                 "N2O",
-#                 "KYOTOGHG (AR5GWP100)",
-#                 "FGASES (AR5GWP100)",
-#             ],
-#         },
-#         "children": [pre_post_production_categories_codes],
-#     }
 #
-#     spec["categories"] = categories
-#     fao_cats = cc.HierarchicalCategorization.from_spec(spec.copy())
-#     # run print(fao_cats.show_as_tree())
-#     fao_cats.to_python("FAO.py")
-#     fao_cats.to_yaml("FAO.yaml")
+#     read_data(
+#         domains_and_releases_to_read=domains_and_releases_to_read,
+#         read_path=downloaded_data_path,
+#         save_path=extracted_data_path,
+#     )