test_conversion.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. """Note that these tests only run locally, because they require the downloaded data"""
  2. import primap2 as pm2
  3. import pytest
  4. from faostat_data_primap.helper.paths import (
  5. downloaded_data_path,
  6. extracted_data_path,
  7. )
  8. from faostat_data_primap.read import process, read_data
  9. # For development work on process function only
  10. def test_processed_output_remains_the_same():
  11. # get processed data
  12. release_name = "v2024-11-14"
  13. # release_name = "v2023-12-13"
  14. filename_processed_ds = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
  15. filepath = extracted_data_path / release_name / (filename_processed_ds + ".nc")
  16. ds_processed = pm2.open_dataset(filepath)
  17. # get raw data
  18. filename_raw_ds = (
  19. extracted_data_path
  20. / f"{release_name}/FAOSTAT_Agrifood_system_emissions_{release_name}_raw.nc"
  21. )
  22. ds_raw = pm2.open_dataset(filename_raw_ds)
  23. # process raw data
  24. ds_processed_new = process(ds=ds_raw)
  25. # compare
  26. assert ds_processed.broadcast_equals(ds_processed_new)
  27. @pytest.mark.parametrize(
  28. "domains_and_releases_to_read",
  29. [
  30. pytest.param(
  31. [
  32. ("farm_gate_agriculture_energy", "2023-12-13"),
  33. ("farm_gate_emissions_crops", "2023-11-09"),
  34. ("farm_gate_livestock", "2023-11-09"),
  35. ("land_use_drained_organic_soils", "2023-11-09"),
  36. ("land_use_fires", "2023-11-09"),
  37. ("land_use_forests", "2023-11-09"),
  38. ("pre_post_agricultural_production", "2023-11-09"),
  39. ],
  40. id="2023 release",
  41. ),
  42. pytest.param(
  43. [
  44. ("farm_gate_agriculture_energy", "2024-11-14"),
  45. ("farm_gate_emissions_crops", "2024-11-14"),
  46. ("farm_gate_livestock", "2024-11-14"),
  47. ("land_use_drained_organic_soils", "2024-11-14"),
  48. ("land_use_fires", "2024-11-14"),
  49. ("land_use_forests", "2024-11-14"),
  50. ("pre_post_agricultural_production", "2024-11-14"),
  51. ],
  52. id="2024 release",
  53. ),
  54. ],
  55. )
  56. def test_read(tmp_path, domains_and_releases_to_read):
  57. read_data(
  58. domains_and_releases_to_read=domains_and_releases_to_read,
  59. read_path=downloaded_data_path,
  60. # save_path=tmp_path,
  61. save_path=extracted_data_path,
  62. )
  63. # TODO delete everything below here when data set is final
  64. # def test_conversion_from_FAO_to_IPCC2006_PRIMAP():
  65. # release_name = "v2024-11-14"
  66. # # release_name = "v2023-12-13"
  67. #
  68. # # get raw data
  69. # filename_raw_ds = (
  70. # extracted_data_path
  71. # / f"{release_name}/FAOSTAT_Agrifood_system_emissions_{release_name}_raw.nc"
  72. # )
  73. # ds_raw = pm2.open_dataset(filename_raw_ds)
  74. #
  75. # # process raw data
  76. # result_proc = process(ds=ds_raw)
  77. #
  78. # result_proc_if = result_proc.pr.to_interchange_format()
  79. #
  80. # # save processed data
  81. # output_filename = f"FAOSTAT_Agrifood_system_emissions_{release_name}"
  82. # output_folder = extracted_data_path / release_name
  83. #
  84. # if not output_folder.exists():
  85. # output_folder.mkdir()
  86. #
  87. # filepath = output_folder / (output_filename + ".csv")
  88. # print(f"Writing processed primap2 file to {filepath}")
  89. # pm2.pm2io.write_interchange_format(
  90. # filepath,
  91. # result_proc_if,
  92. # )
  93. #
  94. # compression = dict(zlib=True, complevel=9)
  95. # encoding = {var: compression for var in result_proc.data_vars}
  96. # filepath = output_folder / (output_filename + ".nc")
  97. # print(f"Writing netcdf file to {filepath}")
  98. # result_proc.pr.to_netcdf(filepath, encoding=encoding)
  99. #
  100. # def test_read_2023():
  101. # domains_and_releases_to_read = [
  102. # # ("farm_gate_agriculture_energy", "2023-12-13"),
  103. # # ("farm_gate_emissions_crops", "2023-11-09"),
  104. # # ("farm_gate_livestock", "2023-11-09"),
  105. # # ("land_use_drained_organic_soils", "2023-11-09"),
  106. # # ("land_use_fires", "2023-11-09"),
  107. # # ("land_use_forests", "2023-11-09"),
  108. # # ("pre_post_agricultural_production", "2023-11-09"),
  109. # ("farm_gate_agriculture_energy", "2024-11-14"),
  110. # ("farm_gate_emissions_crops", "2024-11-14"),
  111. # ("farm_gate_livestock", "2024-11-14"),
  112. # ("land_use_drained_organic_soils", "2024-11-14"),
  113. # ("land_use_fires", "2024-11-14"),
  114. # ("land_use_forests", "2024-11-14"),
  115. # ("pre_post_agricultural_production", "2024-11-14"),
  116. # ]
  117. #
  118. # read_data(
  119. # domains_and_releases_to_read=domains_and_releases_to_read,
  120. # read_path=downloaded_data_path,
  121. # save_path=extracted_data_path,
  122. # )