geocif 0.1.62__tar.gz → 0.1.64__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {geocif-0.1.62/geocif.egg-info → geocif-0.1.64}/PKG-INFO +1 -1
  2. {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/definitions.py +8 -8
  3. {geocif-0.1.62 → geocif-0.1.64}/geocif/geocif.py +20 -3
  4. {geocif-0.1.62 → geocif-0.1.64}/geocif/geocif_runner.py +35 -34
  5. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_angola.py +3 -3
  6. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/stats.py +5 -0
  7. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/trainers.py +4 -0
  8. {geocif-0.1.62 → geocif-0.1.64/geocif.egg-info}/PKG-INFO +1 -1
  9. {geocif-0.1.62 → geocif-0.1.64}/setup.py +1 -1
  10. {geocif-0.1.62 → geocif-0.1.64}/LICENSE +0 -0
  11. {geocif-0.1.62 → geocif-0.1.64}/MANIFEST.in +0 -0
  12. {geocif-0.1.62 → geocif-0.1.64}/README.md +0 -0
  13. {geocif-0.1.62 → geocif-0.1.64}/geocif/__init__.py +0 -0
  14. {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/__init__.py +0 -0
  15. {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/geoagmet.py +0 -0
  16. {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/plot.py +0 -0
  17. {geocif-0.1.62 → geocif-0.1.64}/geocif/agmet/utils.py +0 -0
  18. {geocif-0.1.62 → geocif-0.1.64}/geocif/analysis.py +0 -0
  19. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/__init__.py +0 -0
  20. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/constants.py +0 -0
  21. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/features.py +0 -0
  22. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/geo.py +0 -0
  23. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/geocif.py +0 -0
  24. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/metadata.py +0 -0
  25. {geocif-0.1.62 → geocif-0.1.64}/geocif/backup/models.py +0 -0
  26. {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/__init__.py +0 -0
  27. {geocif-0.1.62 → geocif-0.1.64}/geocif/cei/indices.py +0 -0
  28. {geocif-0.1.62 → geocif-0.1.64}/geocif/experiments.py +0 -0
  29. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner.py +0 -0
  30. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_madagascar.py +0 -0
  31. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_malawi.py +0 -0
  32. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_mozambique.py +0 -0
  33. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_south_africa.py +0 -0
  34. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_zambia.py +0 -0
  35. {geocif-0.1.62 → geocif-0.1.64}/geocif/indices_runner_zimbabwe.py +0 -0
  36. {geocif-0.1.62 → geocif-0.1.64}/geocif/logger.py +0 -0
  37. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/__init__.py +0 -0
  38. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/correlations.py +0 -0
  39. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/embedding.py +0 -0
  40. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/feature_engineering.py +0 -0
  41. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/feature_selection.py +0 -0
  42. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/outliers.py +0 -0
  43. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/outlook.py +0 -0
  44. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/output.py +0 -0
  45. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/spatial_autocorrelation.py +0 -0
  46. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/stages.py +0 -0
  47. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/trend.py +0 -0
  48. {geocif-0.1.62 → geocif-0.1.64}/geocif/ml/xai.py +0 -0
  49. {geocif-0.1.62 → geocif-0.1.64}/geocif/mm.py +0 -0
  50. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/__init__.py +0 -0
  51. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/aa.py +0 -0
  52. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/area.py +0 -0
  53. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/automl.py +0 -0
  54. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/download_esi.py +0 -0
  55. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/enso.py +0 -0
  56. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/eval.py +0 -0
  57. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/gamtest.py +0 -0
  58. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/gee_access.py +0 -0
  59. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/misc.py +0 -0
  60. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/play_xagg.py +0 -0
  61. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/reg.py +0 -0
  62. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/sustain.py +0 -0
  63. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/test_catboost.py +0 -0
  64. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp.py +0 -0
  65. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp2.py +0 -0
  66. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp3.py +0 -0
  67. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp4.py +0 -0
  68. {geocif-0.1.62 → geocif-0.1.64}/geocif/playground/tmp5.py +0 -0
  69. {geocif-0.1.62 → geocif-0.1.64}/geocif/risk/__init__.py +0 -0
  70. {geocif-0.1.62 → geocif-0.1.64}/geocif/risk/impact_assessment.py +0 -0
  71. {geocif-0.1.62 → geocif-0.1.64}/geocif/utils.py +0 -0
  72. {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/__init__.py +0 -0
  73. {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/plot.py +0 -0
  74. {geocif-0.1.62 → geocif-0.1.64}/geocif/viz/tmp.py +0 -0
  75. {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/SOURCES.txt +0 -0
  76. {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/dependency_links.txt +0 -0
  77. {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/not-zip-safe +0 -0
  78. {geocif-0.1.62 → geocif-0.1.64}/geocif.egg-info/top_level.txt +0 -0
  79. {geocif-0.1.62 → geocif-0.1.64}/requirements.txt +0 -0
  80. {geocif-0.1.62 → geocif-0.1.64}/setup.cfg +0 -0
  81. {geocif-0.1.62 → geocif-0.1.64}/tests/test_geocif.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geocif
3
- Version: 0.1.62
3
+ Version: 0.1.64
4
4
  Summary: Models to visualize and forecast crop conditions and yields
5
5
  Home-page: https://ritviksahajpal.github.io/yield_forecasting/
6
6
  Author: Ritvik Sahajpal
@@ -1,11 +1,11 @@
1
1
  PHENOLOGICAL_STAGES = [1, 2, 3]
2
2
  dict_indices = {
3
3
  "GD4": ["Cold", "Growing degree days (sum of Tmean > 4 C)"],
4
- "CFD": ["Cold", "Maximum number of consecutive frost days (Tmin < 0 C)"],
5
- "FD": ["Cold", "Number of Frost Days (Tmin < 0C)"],
4
+ #"CFD": ["Cold", "Maximum number of consecutive frost days (Tmin < 0 C)"],
5
+ #"FD": ["Cold", "Number of Frost Days (Tmin < 0C)"],
6
6
  "HD17": ["Cold", "Heating degree days (sum of Tmean < 17 C)"],
7
- "ID": ["Cold", "Number of sharp Ice Days (Tmax < 0C)"],
8
- "CSDI": ["Cold", "Cold-spell duration index"],
7
+ #"ID": ["Cold", "Number of sharp Ice Days (Tmax < 0C)"],
8
+ #"CSDI": ["Cold", "Cold-spell duration index"],
9
9
  "TG10p": ["Cold", "Percentage of days when Tmean < 10th percentile"],
10
10
  "TN10p": ["Cold", "Percentage of days when Tmin < 10th percentile"],
11
11
  "TXn": ["Cold", "Minimum daily maximum temperature"],
@@ -70,10 +70,10 @@ dict_indices = {
70
70
  "Compound",
71
71
  "Days with TG > 75th percentile of daily mean temperature and RR >75th percentile of daily precipitation sum",
72
72
  ],
73
- "SD": ["Snow", "Mean of daily snow depth"],
74
- "SD1": ["Snow", "Number of days with snow depth >= 1 cm"],
75
- "SD5cm": ["Snow", "Number of days with snow depth >= 5 cm"],
76
- "SD50cm": ["Snow", "Number of days with snow depth >= 50 cm"],
73
+ # "SD": ["Snow", "Mean of daily snow depth"],
74
+ # "SD1": ["Snow", "Number of days with snow depth >= 1 cm"],
75
+ # "SD5cm": ["Snow", "Number of days with snow depth >= 5 cm"],
76
+ # "SD50cm": ["Snow", "Number of days with snow depth >= 50 cm"],
77
77
  }
78
78
 
79
79
  dict_ndvi = {
@@ -308,9 +308,12 @@ class Geocif:
308
308
  cat_features=self.cat_features,
309
309
  verbose=False,
310
310
  )
311
- elif self.model_name == "ngboost":
312
- self.model.fit(X_train, y_train)
313
- elif self.model_name in ["oblique"]:
311
+ elif self.model_name in ["ngboost", "oblique", "tabpfn"]:
312
+ X_train = X_train.drop(
313
+ columns=[
314
+ item for item in self.cat_features if item != "Harvest Year"
315
+ ]
316
+ )
314
317
  self.model.fit(X_train, y_train)
315
318
  elif self.model_name == "ydf":
316
319
  # Combine X_train and y_train
@@ -517,6 +520,14 @@ class Geocif:
517
520
  elif self.model_name == "ydf":
518
521
  y_pred = self.model.evaluate(X_test)
519
522
  best_hyperparameters = {}
523
+ elif self.model_name == "tabpfn":
524
+ X_test = X_test.drop(
525
+ columns=[
526
+ item for item in self.cat_features if item != "Harvest Year"
527
+ ]
528
+ )
529
+ y_pred = self.model.predict(X_test)
530
+ best_hyperparameters = {}
520
531
  else:
521
532
  y_pred = self.model.predict(X_test)
522
533
  best_hyperparameters = self.model.get_params().copy()
@@ -1280,6 +1291,9 @@ class Geocif:
1280
1291
  self.cluster_strategy = "single"
1281
1292
  self.select_cei_by = "Index"
1282
1293
  self.use_cumulative_features = True
1294
+ elif self.model_name in ["tabpfn"]:
1295
+ self.do_xai = False
1296
+ self.estimate_ci = False
1283
1297
  elif self.model_name in ["oblique", "ydf"]:
1284
1298
  self.do_xai = False
1285
1299
  self.estimate_ci = False
@@ -1360,6 +1374,9 @@ class Geocif:
1360
1374
  if self.country == "nepal":
1361
1375
  self.dg["ADM0_NAME"] = "nepal"
1362
1376
  self.dg["Country Region"] = self.dg["ADM0_NAME"] + " " + self.dg["PR_NAME"]
1377
+ elif self.country == "wolayita":
1378
+ self.dg["ADM0_NAME"] = "ethiopia"
1379
+ self.dg["Country Region"] = self.dg["ADM0_NAME"] + " " + self.dg["W_NAME"]
1363
1380
  elif self.admin_zone == "admin_1":
1364
1381
  self.dg["Country Region"] = (
1365
1382
  self.dg["ADM0_NAME"] + " " + self.dg["ADM1_NAME"]
@@ -26,40 +26,41 @@ def loop_execute(inputs):
26
26
  Returns:
27
27
 
28
28
  """
29
- from pycallgraph2 import Config, PyCallGraph, GlobbingFilter
30
- from pycallgraph2.output import GraphvizOutput
31
-
32
- graphviz = GraphvizOutput()
33
- graphviz.output_file = "geocif_visualization.png"
34
- plt.rcParams["figure.dpi"] = 600
35
- config = Config(max_depth=5)
36
- config.trace_filter = GlobbingFilter(
37
- exclude=[
38
- "pycallgraph.*",
39
- ]
40
- )
41
-
42
- with PyCallGraph(output=graphviz, config=config):
43
- project_name, country, crop, season, model, logger, parser, index = inputs
44
-
45
- logger.info("=====================================================")
46
- logger.info(f"\tStarting GEOCIF: {country} {crop} {season} {model}")
47
- logger.info("=====================================================")
48
-
49
- obj = geocif.Geocif(logger=logger,
50
- parser=parser,
51
- project_name=project_name)
52
- obj.read_data(country, crop, season)
53
-
54
- # Store config file in database, only execute this for
55
- # the first iteration of the loop
56
- if index == 0:
57
- output.config_to_db(obj.db_path, obj.parser, obj.today)
58
-
59
- # Setup metadata and run ML code
60
- obj.setup(season, model)
61
- if obj.simulation_stages:
62
- obj.execute()
29
+ # from pycallgraph2 import Config, PyCallGraph, GlobbingFilter
30
+ # from pycallgraph2.output import GraphvizOutput
31
+ #
32
+ # graphviz = GraphvizOutput()
33
+ # graphviz.output_file = "geocif_visualization.png"
34
+ # plt.rcParams["figure.dpi"] = 600
35
+ # config = Config(max_depth=5)
36
+ # config.trace_filter = GlobbingFilter(
37
+ # exclude=[
38
+ # "pycallgraph.*",
39
+ # "torch*",
40
+ # ]
41
+ # )
42
+ #
43
+ # with PyCallGraph(output=graphviz, config=config):
44
+ project_name, country, crop, season, model, logger, parser, index = inputs
45
+
46
+ logger.info("=====================================================")
47
+ logger.info(f"\tStarting GEOCIF: {country} {crop} {season} {model}")
48
+ logger.info("=====================================================")
49
+
50
+ obj = geocif.Geocif(logger=logger,
51
+ parser=parser,
52
+ project_name=project_name)
53
+ obj.read_data(country, crop, season)
54
+
55
+ # Store config file in database, only execute this for
56
+ # the first iteration of the loop
57
+ if index == 0:
58
+ output.config_to_db(obj.db_path, obj.parser, obj.today)
59
+
60
+ # Setup metadata and run ML code
61
+ obj.setup(season, model)
62
+ if obj.simulation_stages:
63
+ obj.execute()
63
64
 
64
65
 
65
66
  def gather_inputs(parser):
@@ -12,7 +12,7 @@ warnings.filterwarnings("ignore")
12
12
  from .cei import indices
13
13
  from geoprepare import base
14
14
 
15
- country = "wolayita"
15
+ country = "ethiopia"
16
16
 
17
17
  def remove_duplicates(lst):
18
18
  """
@@ -171,10 +171,10 @@ class cei_runner(base.BaseGeo):
171
171
  # Only keep those entries in combinations where the third elemt is
172
172
  # mozambique, south_africa, angola or dem_people's_rep_of_korea
173
173
  # This is done to test the code for these countries
174
- combinations = [i for i in combinations if f"{country}_maize_s1" in i[3]]
174
+ combinations = [i for i in combinations if f"{country}_wheat_s1" in i[3]]
175
175
 
176
176
  if True:
177
- num_cpu = int(cpu_count() * 0.5)
177
+ num_cpu = int(cpu_count() * 0.9)
178
178
  with Pool(num_cpu) as p:
179
179
  for i, _ in enumerate(p.imap_unordered(indices.process, combinations)):
180
180
  pass
@@ -209,6 +209,11 @@ def add_statistics(
209
209
  df_fewsnet.loc[:, "product"] = (
210
210
  df_fewsnet["season_name"] + " " + df_fewsnet["product"]
211
211
  )
212
+
213
+ # Hack replace Wheat in product column in df_fewsnet with Winter Wheat
214
+ if "product" in df_fewsnet.columns:
215
+ df_fewsnet.loc[:, "product"] = df_fewsnet["product"].replace("Wheat", "Winter Wheat")
216
+
212
217
  # Check if country and crop exist in the fewsnet database
213
218
  mask = (df_fewsnet["country"] == country) & (df_fewsnet["product"] == crop)
214
219
 
@@ -300,6 +300,10 @@ def auto_train(
300
300
  n_estimators=1500, max_depth=20, max_features=n_features**2,
301
301
  feature_combinations=n_features, n_jobs=-1, random_state=42
302
302
  )
303
+ elif model_name == "tabpfn":
304
+ from tabpfn_extensions.post_hoc_ensembles.sklearn_interface import AutoTabPFNRegressor
305
+
306
+ model = AutoTabPFNRegressor()
303
307
  elif model_name == "ngboost":
304
308
  if model_type == "REGRESSION":
305
309
  from ngboost import NGBRegressor
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geocif
3
- Version: 0.1.62
3
+ Version: 0.1.64
4
4
  Summary: Models to visualize and forecast crop conditions and yields
5
5
  Home-page: https://ritviksahajpal.github.io/yield_forecasting/
6
6
  Author: Ritvik Sahajpal
@@ -50,6 +50,6 @@ setup(
50
50
  test_suite="tests",
51
51
  tests_require=test_requirements,
52
52
  url="https://ritviksahajpal.github.io/yield_forecasting/",
53
- version="0.1.62",
53
+ version="0.1.64",
54
54
  zip_safe=False,
55
55
  )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes