pyholos 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyholos might be problematic. Click here for more details.

Files changed (55) hide show
  1. pyholos/__init__.py +0 -0
  2. pyholos/common.py +141 -0
  3. pyholos/common2.py +157 -0
  4. pyholos/components/__init__.py +0 -0
  5. pyholos/components/animals/__init__.py +0 -0
  6. pyholos/components/animals/beef.py +766 -0
  7. pyholos/components/animals/common.py +2301 -0
  8. pyholos/components/animals/dairy.py +341 -0
  9. pyholos/components/animals/sheep.py +412 -0
  10. pyholos/components/common.py +170 -0
  11. pyholos/components/land_management/__init__.py +0 -0
  12. pyholos/components/land_management/carbon/__init__.py +0 -0
  13. pyholos/components/land_management/carbon/climate.py +863 -0
  14. pyholos/components/land_management/carbon/management.py +21 -0
  15. pyholos/components/land_management/carbon/relative_biomass_information.py +410 -0
  16. pyholos/components/land_management/carbon/tillage.py +88 -0
  17. pyholos/components/land_management/common.py +220 -0
  18. pyholos/components/land_management/crop.py +1233 -0
  19. pyholos/components/land_management/field_system.py +458 -0
  20. pyholos/components/land_management/utils.py +66 -0
  21. pyholos/config.py +49 -0
  22. pyholos/core_constants.py +20 -0
  23. pyholos/defaults.py +116 -0
  24. pyholos/farm/__init__.py +0 -0
  25. pyholos/farm/enums.py +54 -0
  26. pyholos/farm/farm.py +101 -0
  27. pyholos/farm/farm_inputs.py +633 -0
  28. pyholos/farm/farm_settings.py +542 -0
  29. pyholos/launching.py +86 -0
  30. pyholos/postprocessing/__init__.py +0 -0
  31. pyholos/postprocessing/plots.py +164 -0
  32. pyholos/postprocessing/postprocessing.py +38 -0
  33. pyholos/resources/holos/Table_16_Livestock_Coefficients_BeefAndDairy_Cattle_Provider.csv +21 -0
  34. pyholos/resources/holos/Table_21_Average_Milk_Production_For_Dairy_Cows_By_Province.csv +23 -0
  35. pyholos/resources/holos/Table_22_Livestock_Coefficients_For_Sheep.csv +28 -0
  36. pyholos/resources/holos/Table_29_Percentage_Total_Manure_Produced_In_Systems.csv +56 -0
  37. pyholos/resources/holos/Table_30_Default_Bedding_Material_Composition_Provider.csv +28 -0
  38. pyholos/resources/holos/Table_50_Fuel_Energy_Requirement_Estimates_By_Region.csv +81 -0
  39. pyholos/resources/holos/Table_51_Herbicide_Energy_Requirement_Estimates_By_Region.csv +81 -0
  40. pyholos/resources/holos/Table_61_Fractions_of_dairy_cattle_N_volatilized.csv +25 -0
  41. pyholos/resources/holos/Table_62_Fractions_of_swine_N_volatilized.csv +25 -0
  42. pyholos/resources/holos/Table_6_Manure_Types_And_Default_Composition.csv +126 -0
  43. pyholos/resources/holos/Table_7_Relative_Biomass_Information.csv +112 -0
  44. pyholos/resources/holos/Table_9_Default_Values_For_Nitrogen_Lignin_In_Crops.csv +72 -0
  45. pyholos/resources/holos/Table_Tillage_Factor.csv +13 -0
  46. pyholos/resources/holos/feeds.csv +223 -0
  47. pyholos/resources/holos/main_tables.py +493 -0
  48. pyholos/resources/holos/small_area_yields.csv +167159 -0
  49. pyholos/resources/soil_landscapes_of_canada_v3r2.zip +0 -0
  50. pyholos/soil.py +439 -0
  51. pyholos/utils.py +83 -0
  52. pyholos-0.0.1.dist-info/METADATA +16 -0
  53. pyholos-0.0.1.dist-info/RECORD +55 -0
  54. pyholos-0.0.1.dist-info/WHEEL +4 -0
  55. pyholos-0.0.1.dist-info/licenses/LICENSE +677 -0
@@ -0,0 +1,1233 @@
1
+ from enum import auto
2
+
3
+ from pyholos.utils import (AutoNameEnum, concat_lists,
4
+ keep_alphabetical_characters)
5
+
6
+
7
+ class CropType(AutoNameEnum):
8
+ """
9
+ Holos Source Code:
10
+ - CropType members: https://github.com/holos-aafc/Holos/blob/c5b1a960639be5c4fa6a25e167c49c36403c291d/H.Core/Enumerations/CropType.cs#L5
11
+ - CropType extension methods: https://github.com/holos-aafc/Holos/blob/c5b1a960639be5c4fa6a25e167c49c36403c291d/H.Core/Enumerations/CropTypeExtensions.cs#L15
12
+
13
+ """
14
+ AlfalfaMedicagoSativaL = auto()
15
+ AlfalfaSeed = auto()
16
+ AnnualRyeGrassLoliumMultiflorum = auto()
17
+ AustrianWinterPea = auto()
18
+ Barley = auto()
19
+ BarleyHordeumVulgare = auto()
20
+ BarleySilage = auto()
21
+ BarleySilageUnderSeed = auto()
22
+ BeansDryField = auto()
23
+ BerriesAndGrapes = auto()
24
+ BerseemCloverTrifoliumAlexandriumL = auto()
25
+ BrokenGrassland = auto()
26
+ BromeHay = auto()
27
+ Buckwheat = auto()
28
+ CanarySeed = auto()
29
+ Canola = auto()
30
+ Caraway = auto()
31
+ Carrot = auto()
32
+ Chickpeas = auto()
33
+ ColouredWhiteFabaBeans = auto()
34
+ Corn = auto()
35
+ CornSilage = auto()
36
+ CowpeaVignaUnguiculata = auto()
37
+ CPSWheat = auto()
38
+ CrimsonCloverTrifoliumIncarnatum = auto()
39
+ Dill = auto()
40
+ DryBean = auto()
41
+ DryPeas = auto()
42
+ Durum = auto()
43
+ FabaBeanBroadBeanViciaFaba = auto()
44
+ FabaBeans = auto()
45
+ Fallow = auto()
46
+ FallRye = auto()
47
+ FieldPeas = auto()
48
+ Flax = auto()
49
+ FlaxLinumUsitatissimum = auto()
50
+ FlaxSeed = auto()
51
+ FodderCorn = auto()
52
+ Forage = auto()
53
+ ForageForSeed = auto()
54
+ ForageRadishRaphanusSativusL = auto()
55
+ FreshCornSweet = auto()
56
+ FreshPeas = auto()
57
+ GrainCorn = auto()
58
+ GrainSorghum = auto()
59
+ GrassHay = auto()
60
+ GrasslandSeeded = auto()
61
+ GrassSeed = auto()
62
+ GreenFeed = auto()
63
+ HairyVetch = auto()
64
+ HairyVetchAndRye = auto()
65
+ HairyVetchViciaVillosaRoth = auto()
66
+ HardRedSpringWheat = auto()
67
+ HayAndForageSeed = auto()
68
+ Hyola = auto()
69
+ Lentils = auto()
70
+ Linola = auto()
71
+ MaltBarley = auto()
72
+ MarketGarden = auto()
73
+ MilkVetch = auto()
74
+ Millet = auto()
75
+ Mint = auto()
76
+ MixedGrains = auto()
77
+ Monarda = auto()
78
+ Mustard = auto()
79
+ MustardSeed = auto()
80
+ MustardSinapusAlbaLSubspMaireiHLindbMaire = auto()
81
+ NativePasture = auto()
82
+ NotSelected = auto()
83
+ OatAvenaSativa = auto()
84
+ Oats = auto()
85
+ OatSilage = auto()
86
+ Oilseeds = auto()
87
+ Onion = auto()
88
+ OtherFieldCrops = auto()
89
+ Peas = auto()
90
+ PerennialForages = auto()
91
+ PhaceliaPhaceliaTanacetifoliaCVPhaci = auto()
92
+ PigeonBean = auto()
93
+ Potatoes = auto()
94
+ PulseCrops = auto()
95
+ RangelandNative = auto()
96
+ RapeseedBrassicaNapusL = auto()
97
+ RedCloverTrifoliumPratenseL = auto()
98
+ Rye = auto()
99
+ RyeGrassLoliumPerenneL = auto()
100
+ RyeSecaleCerealeWinterRyeCerealRye = auto()
101
+ Safflower = auto()
102
+ SeededGrassland = auto()
103
+ SeedPotato = auto()
104
+ SesameSesamumIndicum = auto()
105
+ ShepherdsPurse = auto()
106
+ SilageCorn = auto()
107
+ SmallFruit = auto()
108
+ SmallGrainCereals = auto()
109
+ SoftWheat = auto()
110
+ Sorghum = auto()
111
+ SorghumSorghumBicolour = auto()
112
+ SorghumSudanGrass = auto()
113
+ Soybeans = auto()
114
+ SpringRye = auto()
115
+ SpringWheat = auto()
116
+ SugarBeets = auto()
117
+ SummerFallow = auto()
118
+ Sunflower = auto()
119
+ SunflowerSeed = auto()
120
+ SweetCloverMelilotusOfficinalis = auto()
121
+ TameGrass = auto()
122
+ TameLegume = auto()
123
+ TameMixed = auto()
124
+ TamePasture = auto()
125
+ TimothyHay = auto()
126
+ Tobacco = auto()
127
+ TreeFruitAndNuts = auto()
128
+ Triticale = auto()
129
+ TriticaleSilage = auto()
130
+ TurfSod = auto()
131
+ UndersownBarley = auto()
132
+ Vegetables = auto()
133
+ Wheat = auto()
134
+ WheatBolinder = auto()
135
+ WheatGan = auto()
136
+ WheatSilage = auto()
137
+ WinterTurnipRapeBrassicaRapaSppOleiferaLCVLargo = auto()
138
+ WinterWeeds = auto()
139
+ WinterWheat = auto()
140
+ WinterWheatTriticumAestivum = auto()
141
+ NONE = auto()
142
+
143
+ # region Economic Crops
144
+ AlfalfaHay = auto()
145
+ ArgentineHTCanola = auto()
146
+ BeansPinto = auto()
147
+ BeansWhite = auto()
148
+ BlackBean = auto()
149
+ BrownMustard = auto()
150
+ Camelina = auto()
151
+ CarawayFirstSeason = auto()
152
+ CarawaySecondSeason = auto()
153
+ CerealSilage = auto()
154
+ ColouredBeans = auto()
155
+ Coriander = auto()
156
+ DesiChickpeas = auto()
157
+ EdibleGreenPeas = auto()
158
+ EdibleYellowPeas = auto()
159
+ FeedBarley = auto()
160
+ Fenugreek = auto()
161
+ HardRedWinterWheat = auto()
162
+ HardRedWinterWheatNoTill = auto()
163
+ HybridFallRye = auto()
164
+ KabuliChickpea = auto()
165
+ LargeGreenLentils = auto()
166
+ LargeKabuliChickpea = auto()
167
+ MillingOats = auto()
168
+ NorthernOntarioBarley = auto()
169
+ NorthernOntarioOats = auto()
170
+ OrientalMustard = auto()
171
+ PolishCanola = auto()
172
+ Quinoa = auto()
173
+ RedLentils = auto()
174
+ SmallKabuliChickpea = auto()
175
+ SoftWinterWheat = auto()
176
+ SoftWinterWheatNoTill = auto()
177
+ SouthernOntarioBarley = auto()
178
+ SouthernOntarioOats = auto()
179
+ SoybeanNoTill = auto()
180
+ SoybeansRoundUpReady = auto()
181
+ SpringCanolaHt = auto()
182
+ SunflowerConfection = auto()
183
+ SunflowerOil = auto()
184
+ SunflowerOilseedEMSS = auto()
185
+ SwitchgrassDirect = auto()
186
+ SwitchgrassDirectNoTill = auto()
187
+ SwitchgrassUnderseeded = auto()
188
+ SwitchgrassUnderseededNoTill = auto()
189
+ UserDefined = auto()
190
+ WheatHardRedSpring = auto()
191
+ WheatNorthernHardRed = auto()
192
+ WheatOtherSpring = auto()
193
+ WheatPrairieSpring = auto()
194
+ WhiteBlackBeans = auto()
195
+ WinterCanolaHybrid = auto()
196
+ YellowMustard = auto()
197
+ # endregion
198
+
199
+ # Note from the original holos code:
200
+ # The new crops below are from the "Default values for nitrogen and lignin contents in crops for steady state methods.
201
+ # region Nitrogen and lignin contents table
202
+ Beans = auto()
203
+ Cereals = auto()
204
+ DryFieldPeas = auto()
205
+ GenericGrains = auto()
206
+ Grains = auto()
207
+ GrassCloverMixtures = auto()
208
+ NFixingForages = auto()
209
+ NonLegumeHay = auto()
210
+ NonNFixingForages = auto()
211
+ OtherDryFieldBeans = auto()
212
+ Peanuts = auto()
213
+ PerennialGrasses = auto()
214
+ Pulses = auto()
215
+ Rice = auto()
216
+ Tubers = auto()
217
+ WheatRye = auto()
218
+ WhiteBeans = auto()
219
+ # endregion
220
+
221
+ GrassSilage = auto()
222
+
223
+ # extensions
224
+ """https://github.com/holos-aafc/Holos/blob/c5b1a960639be5c4fa6a25e167c49c36403c291d/H.Core/Enumerations/CropTypeExtensions.cs#L15"""
225
+
226
+ def is_perennial(self):
227
+ return self in [
228
+ self.__class__.Forage,
229
+ self.__class__.TameGrass,
230
+ self.__class__.TameLegume,
231
+ self.__class__.TameMixed,
232
+ self.__class__.PerennialForages,
233
+ self.__class__.ForageForSeed,
234
+ self.__class__.SeededGrassland,
235
+ self.__class__.RangelandNative
236
+ ]
237
+
238
+ def is_pasture(self):
239
+ return self.is_perennial() or self.is_grassland()
240
+
241
+ def is_cover_crop(self):
242
+ return self in [
243
+ self.__class__.RedCloverTrifoliumPratenseL,
244
+ self.__class__.BerseemCloverTrifoliumAlexandriumL,
245
+ self.__class__.SweetCloverMelilotusOfficinalis,
246
+ self.__class__.CrimsonCloverTrifoliumIncarnatum,
247
+ self.__class__.HairyVetchViciaVillosaRoth,
248
+ self.__class__.AlfalfaMedicagoSativaL,
249
+ self.__class__.FabaBeanBroadBeanViciaFaba,
250
+ self.__class__.CowpeaVignaUnguiculata,
251
+ self.__class__.AustrianWinterPea,
252
+ self.__class__.RapeseedBrassicaNapusL,
253
+ self.__class__.WinterTurnipRapeBrassicaRapaSppOleiferaLCVLargo,
254
+ self.__class__.PhaceliaPhaceliaTanacetifoliaCVPhaci,
255
+ self.__class__.ForageRadishRaphanusSativusL,
256
+ self.__class__.MustardSinapusAlbaLSubspMaireiHLindbMaire,
257
+ self.__class__.BarleyHordeumVulgare,
258
+ self.__class__.OatAvenaSativa,
259
+ self.__class__.RyeSecaleCerealeWinterRyeCerealRye,
260
+ self.__class__.SesameSesamumIndicum,
261
+ self.__class__.FlaxLinumUsitatissimum,
262
+ self.__class__.RyeGrassLoliumPerenneL,
263
+ self.__class__.AnnualRyeGrassLoliumMultiflorum,
264
+ self.__class__.SorghumSorghumBicolour,
265
+ self.__class__.PigeonBean,
266
+ self.__class__.ShepherdsPurse,
267
+ self.__class__.WinterWheatTriticumAestivum
268
+ ]
269
+
270
+ def is_leguminous_cover_crop(self):
271
+ return self in [
272
+ self.__class__.RedCloverTrifoliumPratenseL,
273
+ self.__class__.BerseemCloverTrifoliumAlexandriumL,
274
+ self.__class__.SweetCloverMelilotusOfficinalis,
275
+ self.__class__.CrimsonCloverTrifoliumIncarnatum,
276
+ self.__class__.HairyVetch,
277
+ self.__class__.AlfalfaMedicagoSativaL,
278
+ self.__class__.FabaBeanBroadBeanViciaFaba,
279
+ self.__class__.CowpeaVignaUnguiculata,
280
+ self.__class__.AustrianWinterPea,
281
+ self.__class__.PigeonBean
282
+ ]
283
+
284
+ def is_non_leguminous_cover_crop(self):
285
+ return self in [
286
+ self.__class__.WinterWeeds,
287
+ self.__class__.RapeseedBrassicaNapusL,
288
+ self.__class__.WinterTurnipRapeBrassicaRapaSppOleiferaLCVLargo,
289
+ self.__class__.PhaceliaPhaceliaTanacetifoliaCVPhaci,
290
+ self.__class__.ForageRadishRaphanusSativusL,
291
+ self.__class__.MustardSinapusAlbaLSubspMaireiHLindbMaire,
292
+ self.__class__.BarleyHordeumVulgare,
293
+ self.__class__.OatAvenaSativa,
294
+ self.__class__.RyeSecaleCerealeWinterRyeCerealRye,
295
+ self.__class__.SesameSesamumIndicum,
296
+ self.__class__.FlaxLinumUsitatissimum,
297
+ self.__class__.RyeGrassLoliumPerenneL,
298
+ self.__class__.AnnualRyeGrassLoliumMultiflorum,
299
+ self.__class__.SorghumSorghumBicolour,
300
+ self.__class__.WinterWheatTriticumAestivum,
301
+ self.__class__.FallRye
302
+ ]
303
+
304
+ @staticmethod
305
+ def is_rangeland():
306
+ return False
307
+
308
+ def is_grassland(self):
309
+ return self in [
310
+ self.__class__.BrokenGrassland,
311
+ self.__class__.GrasslandSeeded,
312
+ self.__class__.RangelandNative
313
+ ]
314
+
315
+ def is_native_grassland(self):
316
+ return self == self.__class__.RangelandNative
317
+
318
+ def is_fallow(self):
319
+ return self in [
320
+ self.__class__.Fallow,
321
+ self.__class__.SummerFallow
322
+ ]
323
+
324
+ def is_annual(self):
325
+ if self.is_silage_crop() or self.is_root_crop():
326
+ return True
327
+ else:
328
+ return self in [
329
+ self.__class__.SmallGrainCereals,
330
+ self.__class__.Wheat,
331
+ self.__class__.WheatSilage,
332
+ self.__class__.Barley,
333
+ self.__class__.BarleySilage,
334
+ self.__class__.UndersownBarley,
335
+ self.__class__.Oats,
336
+ self.__class__.OatSilage,
337
+ self.__class__.Camelina,
338
+ self.__class__.Triticale,
339
+ self.__class__.TriticaleSilage,
340
+ self.__class__.Sorghum,
341
+ self.__class__.CanarySeed,
342
+ self.__class__.Buckwheat,
343
+ self.__class__.FallRye,
344
+ self.__class__.MixedGrains,
345
+ self.__class__.Oilseeds,
346
+ self.__class__.Canola,
347
+ self.__class__.Mustard,
348
+ self.__class__.Flax,
349
+ self.__class__.PulseCrops,
350
+ self.__class__.Soybeans,
351
+ self.__class__.BeansDryField,
352
+ self.__class__.Chickpeas,
353
+ self.__class__.DryPeas,
354
+ self.__class__.FieldPeas,
355
+ self.__class__.Lentils,
356
+ self.__class__.GrainCorn,
357
+ self.__class__.SilageCorn,
358
+ self.__class__.Safflower,
359
+ self.__class__.SunflowerSeed,
360
+ self.__class__.Tobacco,
361
+ self.__class__.Vegetables,
362
+ self.__class__.BerriesAndGrapes,
363
+ self.__class__.OtherFieldCrops
364
+ ]
365
+
366
+ def is_silage_crop(self):
367
+ return self in [
368
+ self.__class__.SilageCorn,
369
+ self.__class__.GrassSilage,
370
+ self.__class__.BarleySilage,
371
+ self.__class__.OatSilage,
372
+ self.__class__.TriticaleSilage,
373
+ self.__class__.WheatSilage
374
+ ]
375
+
376
+ def is_silage_crop_without_defaults(self):
377
+ return self in [
378
+ self.__class__.BarleySilage,
379
+ self.__class__.OatSilage,
380
+ self.__class__.SilageCorn,
381
+ self.__class__.TriticaleSilage,
382
+ self.__class__.GrassSilage,
383
+ self.__class__.WheatSilage
384
+ ]
385
+
386
+ def get_grain_crop_equivalent_of_silage_crop(self):
387
+ match self:
388
+ case CropType.BarleySilage:
389
+ return CropType.Barley
390
+ case CropType.OatSilage:
391
+ return CropType.Oats
392
+ case CropType.GrassSilage:
393
+ return CropType.TameLegume
394
+ case CropType.TriticaleSilage:
395
+ return CropType.Triticale
396
+ case CropType.WheatSilage:
397
+ return CropType.Wheat
398
+ case CropType.CornSilage | CropType.SilageCorn:
399
+ return CropType.GrainCorn
400
+ case CropType.CerealSilage:
401
+ return CropType.Cereals
402
+ case _:
403
+ return None
404
+
405
+ def is_root_crop(self):
406
+ return self in [
407
+ self.__class__.Potatoes,
408
+ self.__class__.SugarBeets,
409
+ ]
410
+
411
+ def is_small_grains(self):
412
+ return self in [
413
+ self.__class__.SmallGrainCereals,
414
+ self.__class__.Wheat,
415
+ self.__class__.WinterWheat,
416
+ self.__class__.WheatSilage,
417
+ self.__class__.Barley,
418
+ self.__class__.GrainCorn,
419
+ self.__class__.BarleySilage,
420
+ self.__class__.UndersownBarley,
421
+ self.__class__.Oats,
422
+ self.__class__.OatSilage,
423
+ self.__class__.Triticale,
424
+ self.__class__.TriticaleSilage,
425
+ self.__class__.Sorghum,
426
+ self.__class__.CanarySeed,
427
+ self.__class__.Buckwheat,
428
+ self.__class__.FallRye,
429
+ self.__class__.MixedGrains
430
+ ]
431
+
432
+ def is_oil_seed(self):
433
+ return self in [
434
+ self.__class__.Oilseeds,
435
+ self.__class__.Canola,
436
+ self.__class__.Camelina,
437
+ self.__class__.Mustard,
438
+ self.__class__.Soybeans,
439
+ self.__class__.Flax
440
+ ]
441
+
442
+ def is_other_field_crop(self):
443
+ return self in [
444
+ self.__class__.Safflower,
445
+ self.__class__.SunflowerSeed,
446
+ self.__class__.Tobacco,
447
+ self.__class__.Vegetables,
448
+ self.__class__.BerriesAndGrapes,
449
+ self.__class__.OtherFieldCrops
450
+ ]
451
+
452
+ def is_pulse_crop(self):
453
+ return self in [
454
+ self.__class__.PulseCrops,
455
+ self.__class__.BeansDryField,
456
+ self.__class__.Chickpeas,
457
+ self.__class__.DryPeas,
458
+ self.__class__.FieldPeas,
459
+ self.__class__.Lentils
460
+ ]
461
+
462
+ def is_economic_type(self):
463
+ return self in get_economic_crop_types()
464
+
465
+ def is_national_inventory_report(self):
466
+ return self in [
467
+ self.__class__.Barley,
468
+ self.__class__.Buckwheat,
469
+ self.__class__.Canola,
470
+ self.__class__.SmallGrainCereals,
471
+ self.__class__.Chickpeas,
472
+ self.__class__.GrainCorn,
473
+ self.__class__.SilageCorn,
474
+ self.__class__.BeansDryField,
475
+ self.__class__.FieldPeas,
476
+ self.__class__.FabaBeans,
477
+ self.__class__.FlaxSeed,
478
+ self.__class__.Grains,
479
+ self.__class__.Lentils,
480
+ self.__class__.MustardSeed,
481
+ self.__class__.MixedGrains,
482
+ self.__class__.Oats,
483
+ self.__class__.OtherDryFieldBeans,
484
+ self.__class__.Oilseeds,
485
+ self.__class__.Peas,
486
+ self.__class__.Potatoes,
487
+ self.__class__.Pulses,
488
+ self.__class__.Rye,
489
+ self.__class__.FallRye,
490
+ self.__class__.SpringRye,
491
+ self.__class__.Safflower,
492
+ self.__class__.Soybeans,
493
+ self.__class__.SugarBeets,
494
+ self.__class__.SunflowerSeed,
495
+ self.__class__.Triticale,
496
+ self.__class__.WhiteBeans,
497
+ self.__class__.Wheat,
498
+ self.__class__.WheatRye,
499
+ self.__class__.SpringWheat,
500
+ self.__class__.WinterWheat,
501
+ self.__class__.Durum,
502
+ self.__class__.CanarySeed,
503
+ self.__class__.Tobacco,
504
+ ]
505
+
506
+
507
+ def get_valid_cover_crop_types() -> list[None | CropType]:
508
+ return [None] + sorted(
509
+ [
510
+ CropType.RedCloverTrifoliumPratenseL,
511
+ CropType.BerseemCloverTrifoliumAlexandriumL,
512
+ CropType.SweetCloverMelilotusOfficinalis,
513
+ CropType.CrimsonCloverTrifoliumIncarnatum,
514
+ CropType.HairyVetchViciaVillosaRoth,
515
+ CropType.AlfalfaMedicagoSativaL,
516
+ CropType.FabaBeanBroadBeanViciaFaba,
517
+ CropType.CowpeaVignaUnguiculata,
518
+ CropType.AustrianWinterPea,
519
+ CropType.RapeseedBrassicaNapusL,
520
+ CropType.WinterTurnipRapeBrassicaRapaSppOleiferaLCVLargo,
521
+ CropType.PhaceliaPhaceliaTanacetifoliaCVPhaci,
522
+ CropType.ForageRadishRaphanusSativusL,
523
+ CropType.MustardSinapusAlbaLSubspMaireiHLindbMaire,
524
+ CropType.BarleyHordeumVulgare,
525
+ CropType.OatAvenaSativa,
526
+ CropType.RyeSecaleCerealeWinterRyeCerealRye,
527
+ CropType.SesameSesamumIndicum,
528
+ CropType.FlaxLinumUsitatissimum,
529
+ CropType.RyeGrassLoliumPerenneL,
530
+ CropType.AnnualRyeGrassLoliumMultiflorum,
531
+ CropType.SorghumSorghumBicolour,
532
+ CropType.PigeonBean,
533
+ CropType.ShepherdsPurse,
534
+ CropType.WinterWheatTriticumAestivum
535
+ ]
536
+ )
537
+
538
+
539
+ def get_economic_crop_types() -> list[CropType]:
540
+ return sorted(concat_lists(
541
+ get_alberta_economic_crop_types(),
542
+ get_saskatchewan_economic_crop_types(),
543
+ get_manitoba_economic_crop_types(),
544
+ get_ontario_economic_crop_types()))
545
+
546
+
547
+ def get_valid_crop_types() -> list[CropType]:
548
+ return sorted(
549
+ [
550
+ CropType.Barley,
551
+ CropType.BarleySilage,
552
+ CropType.BeansDryField,
553
+ CropType.BerriesAndGrapes,
554
+ CropType.Buckwheat,
555
+ CropType.CanarySeed,
556
+ CropType.Canola,
557
+ CropType.Chickpeas,
558
+ CropType.Camelina,
559
+ CropType.DryPeas,
560
+ CropType.FallRye,
561
+ CropType.Flax,
562
+ CropType.ForageForSeed,
563
+ CropType.GrainCorn,
564
+ CropType.GrassSilage,
565
+ CropType.TameGrass,
566
+ CropType.TameLegume,
567
+ CropType.TameMixed,
568
+ CropType.Lentils,
569
+ CropType.MixedGrains,
570
+ CropType.Mustard,
571
+ CropType.OatSilage,
572
+ CropType.Oats,
573
+ CropType.Oilseeds,
574
+ CropType.RangelandNative,
575
+ CropType.OtherFieldCrops,
576
+ CropType.SeededGrassland,
577
+ CropType.Potatoes,
578
+ CropType.PulseCrops,
579
+ CropType.Safflower,
580
+ CropType.SilageCorn,
581
+ CropType.SmallGrainCereals,
582
+ CropType.Sorghum,
583
+ CropType.Soybeans,
584
+ CropType.SugarBeets,
585
+ CropType.SummerFallow,
586
+ CropType.SunflowerSeed,
587
+ CropType.Tobacco,
588
+ CropType.Triticale,
589
+ CropType.TriticaleSilage,
590
+ CropType.UndersownBarley,
591
+ CropType.Vegetables,
592
+ CropType.Wheat,
593
+ CropType.WheatSilage
594
+ ]
595
+ )
596
+
597
+
598
+ def get_valid_perennial_types() -> list[CropType]:
599
+ return sorted(
600
+ [
601
+ CropType.ForageForSeed,
602
+ CropType.TameGrass,
603
+ CropType.TameLegume,
604
+ CropType.TameMixed,
605
+ CropType.RangelandNative,
606
+ CropType.SeededGrassland,
607
+
608
+ ]
609
+ )
610
+
611
+
612
+ def get_alberta_economic_crop_types() -> list[CropType]:
613
+ return sorted([
614
+ CropType.AlfalfaHay,
615
+ CropType.ArgentineHTCanola,
616
+ CropType.CPSWheat,
617
+ CropType.CerealSilage,
618
+ CropType.DryBean,
619
+ CropType.Durum,
620
+ CropType.FeedBarley,
621
+ CropType.FieldPeas,
622
+ CropType.Flax,
623
+ CropType.TameMixed,
624
+ CropType.KabuliChickpea,
625
+ CropType.MaltBarley,
626
+ CropType.MillingOats,
627
+ CropType.PolishCanola,
628
+ CropType.RedLentils,
629
+ CropType.SoftWheat,
630
+ CropType.SpringWheat,
631
+ CropType.SummerFallow,
632
+ CropType.YellowMustard
633
+ ])
634
+
635
+
636
+ def get_saskatchewan_economic_crop_types() -> list[CropType]:
637
+ return [
638
+ CropType.BlackBean,
639
+ CropType.BrownMustard,
640
+ CropType.Camelina,
641
+ CropType.CanarySeed,
642
+ CropType.Canola,
643
+ CropType.CarawayFirstSeason,
644
+ CropType.CarawaySecondSeason,
645
+ CropType.Coriander,
646
+ CropType.Corn,
647
+ CropType.DesiChickpeas,
648
+ CropType.Durum,
649
+ CropType.EdibleGreenPeas,
650
+ CropType.EdibleYellowPeas,
651
+ CropType.FabaBeans,
652
+ CropType.FeedBarley,
653
+ CropType.Fenugreek,
654
+ CropType.Flax,
655
+ CropType.HybridFallRye,
656
+ CropType.LargeGreenLentils,
657
+ CropType.LargeKabuliChickpea,
658
+ CropType.MaltBarley,
659
+ CropType.Oats,
660
+ CropType.OrientalMustard,
661
+ CropType.Quinoa,
662
+ CropType.RedLentils,
663
+ CropType.SmallKabuliChickpea,
664
+ CropType.Soybeans,
665
+ CropType.SpringWheat,
666
+ CropType.SunflowerOilseedEMSS,
667
+ CropType.WinterWheat,
668
+ CropType.YellowMustard
669
+ ]
670
+
671
+
672
+ def get_manitoba_economic_crop_types() -> list[CropType]:
673
+ return [
674
+ CropType.Barley,
675
+ CropType.BeansPinto,
676
+ CropType.BeansWhite,
677
+ CropType.Canola,
678
+ CropType.Corn,
679
+ CropType.FlaxSeed,
680
+ CropType.HardRedSpringWheat,
681
+ CropType.HybridFallRye,
682
+ CropType.Oats,
683
+ CropType.Peas,
684
+ CropType.Soybeans,
685
+ CropType.SunflowerConfection,
686
+ CropType.SunflowerOil,
687
+ CropType.WheatNorthernHardRed,
688
+ CropType.WheatOtherSpring,
689
+ CropType.WheatPrairieSpring,
690
+ CropType.WinterWheat
691
+ ]
692
+
693
+
694
+ def get_ontario_economic_crop_types() -> list[CropType]:
695
+ return [
696
+ CropType.AlfalfaHay,
697
+ CropType.ColouredBeans,
698
+ CropType.CornSilage,
699
+ CropType.GrainCorn,
700
+ CropType.HardRedSpringWheat,
701
+ CropType.HardRedWinterWheat,
702
+ CropType.HardRedWinterWheatNoTill,
703
+ CropType.NorthernOntarioBarley,
704
+ CropType.NorthernOntarioOats,
705
+ CropType.SoftWinterWheat,
706
+ CropType.SoftWinterWheatNoTill,
707
+ CropType.SouthernOntarioBarley,
708
+ CropType.SouthernOntarioOats,
709
+ CropType.SoybeanNoTill,
710
+ CropType.Soybeans,
711
+ CropType.SoybeansRoundUpReady,
712
+ CropType.SpringCanolaHt,
713
+ CropType.SwitchgrassDirect,
714
+ CropType.SwitchgrassDirectNoTill,
715
+ CropType.SwitchgrassUnderseeded,
716
+ CropType.SwitchgrassUnderseededNoTill,
717
+ CropType.WhiteBlackBeans,
718
+ CropType.WinterCanolaHybrid
719
+ ]
720
+
721
+
722
+ def get_grassland_types() -> list[CropType]:
723
+ return sorted(
724
+ [
725
+ CropType.BrokenGrassland,
726
+ CropType.GrasslandSeeded
727
+ ]
728
+ )
729
+
730
+
731
+ def convert_crop_type_name(name: str) -> CropType:
732
+ """Returns a CropType member based on its name or abbreviation.
733
+
734
+ Args:
735
+ name: name or abbreviation of the crop
736
+
737
+ Returns:
738
+ CropType member
739
+
740
+ Holos source code:
741
+ https://github.com/RamiALBASHA/Holos/blob/71638efd97c84c6ded45e342ce664477df6f803f/H.Core/Converters/CropTypeStringConverter.cs#L10
742
+ """
743
+ match keep_alphabetical_characters(name=name):
744
+ case "alfalfaseed":
745
+ return CropType.AlfalfaSeed
746
+ case "barley":
747
+ return CropType.Barley
748
+ case "barleysilage":
749
+ return CropType.BarleySilage
750
+ case "barleysilageunderseed":
751
+ return CropType.BarleySilageUnderSeed
752
+ case "bromehay":
753
+ return CropType.BromeHay
754
+ case "grasssilage":
755
+ return CropType.GrassSilage
756
+ case "beans":
757
+ return CropType.Beans
758
+ case "beansdryfield" | "dryfieldbeans" | "dfbns":
759
+ return CropType.BeansDryField
760
+ case "otherdryfieldbeans":
761
+ return CropType.OtherDryFieldBeans
762
+ case "berriesgrapes":
763
+ return CropType.BerriesAndGrapes
764
+ case "buckwheat" | "bucwht":
765
+ return CropType.Buckwheat
766
+ case "canaryseed" | "canaryseeds" | "canary":
767
+ return CropType.CanarySeed
768
+ case "canola":
769
+ return CropType.Canola
770
+ case "caraway":
771
+ return CropType.Caraway
772
+ case "carrot":
773
+ return CropType.Carrot
774
+ case "chickpeas" | "chickpea":
775
+ return CropType.Chickpeas
776
+ case "colouredwhitefababeans":
777
+ return CropType.ColouredWhiteFabaBeans
778
+ case "cpswheat":
779
+ return CropType.CPSWheat
780
+ case "drybean":
781
+ return CropType.DryBean
782
+ case "drypeas" | "drypea" | "peasdry":
783
+ return CropType.DryPeas
784
+ case "dryfieldpeas" | "dfpeas":
785
+ return CropType.DryFieldPeas
786
+ case "dill":
787
+ return CropType.Dill
788
+ case "durum" | "wheatdurum" | "durumwheat" | "whtdur":
789
+ return CropType.Durum
790
+ case "fababean":
791
+ return CropType.FabaBeans
792
+ case "fallow":
793
+ return CropType.Fallow
794
+ case "fallrye" | "ryefallremaining" | "ryefal":
795
+ return CropType.FallRye
796
+ case "fieldpea":
797
+ return CropType.FieldPeas
798
+ case "Flaxseed":
799
+ return CropType.Flax
800
+ case "flaxseed" | "flaxsd":
801
+ return CropType.FlaxSeed
802
+ case "freshcornsweet":
803
+ return CropType.FreshCornSweet
804
+ case "freshpeas":
805
+ return CropType.FreshPeas
806
+ case "forage":
807
+ return CropType.Forage
808
+ case "foddercorn":
809
+ return CropType.FodderCorn
810
+ case "forageforseed":
811
+ return CropType.ForageForSeed
812
+ case "graincorn" | "cornforgrain" | "corngr":
813
+ return CropType.GrainCorn
814
+ case "grains":
815
+ return CropType.Grains
816
+ case "genericgrains":
817
+ return CropType.GenericGrains
818
+ case "corn" | "maize":
819
+ return CropType.Corn
820
+ case "grainsorghum":
821
+ return CropType.GrainSorghum
822
+ case "grassseed":
823
+ return CropType.GrassSeed
824
+ case "rangelandlandnative":
825
+ return CropType.RangelandNative
826
+ case "greenfeed":
827
+ return CropType.GreenFeed
828
+ case "hardredspringwheat":
829
+ return CropType.HardRedSpringWheat
830
+ case "tamegrass":
831
+ return CropType.TameGrass
832
+ case "grasshay":
833
+ return CropType.GrassHay
834
+ case "tamelegume":
835
+ return CropType.TameLegume
836
+ case "nonlegumehay":
837
+ return CropType.NonLegumeHay
838
+ case "tamemixed" | "mixedhay":
839
+ return CropType.TameMixed
840
+ case "hayandforageseed":
841
+ return CropType.HayAndForageSeed
842
+ case "hairyvetch":
843
+ return CropType.HairyVetch
844
+ case "hairyvetchrye":
845
+ return CropType.HairyVetchAndRye
846
+ case "hyola":
847
+ return CropType.Hyola
848
+ case "lentils" | "lentil":
849
+ return CropType.Lentils
850
+ case "linola":
851
+ return CropType.Linola
852
+ case "maltbarley":
853
+ return CropType.MaltBarley
854
+ case "marketgarden":
855
+ return CropType.MarketGarden
856
+ case "milkvetch":
857
+ return CropType.MilkVetch
858
+ case "millet":
859
+ return CropType.Millet
860
+ case "mint":
861
+ return CropType.Mint
862
+ case "mixedgrains" | "mixedgrain" | "mxdgrn":
863
+ return CropType.MixedGrains
864
+ case "mustard":
865
+ return CropType.Mustard
866
+ case "mustardseed" | "mustsd":
867
+ return CropType.MustardSeed
868
+ case "monarda":
869
+ return CropType.Monarda
870
+ case "nativepasture":
871
+ return CropType.NativePasture
872
+ case "oats":
873
+ return CropType.Oats
874
+ case "oatsilage":
875
+ return CropType.OatSilage
876
+ case "oilseeds":
877
+ return CropType.Oilseeds
878
+ case "onion":
879
+ return CropType.Onion
880
+ case "otherfieldcrops":
881
+ return CropType.OtherFieldCrops
882
+ case "peas":
883
+ return CropType.Peas
884
+ case "pulses":
885
+ return CropType.Pulses
886
+ case "pulsecrops":
887
+ return CropType.PulseCrops
888
+ case "seededgrassland":
889
+ return CropType.SeededGrassland
890
+ case "peanuts":
891
+ return CropType.Peanuts
892
+ case "perennialforages":
893
+ return CropType.PerennialForages
894
+ case "perennialgrasses":
895
+ return CropType.PerennialGrasses
896
+ case "potatoes" | "potato" | "potats" | "potatos":
897
+ return CropType.Potatoes
898
+ case "rice":
899
+ return CropType.Rice
900
+ case "rye" | "ryeall":
901
+ return CropType.Rye
902
+ case "safflower" | "safflwr":
903
+ return CropType.Safflower
904
+ case "seedpotato":
905
+ return CropType.SeedPotato
906
+ case "silagecorn" | "cornsilage" | "cornslg":
907
+ return CropType.SilageCorn
908
+ case "smallfruit":
909
+ return CropType.SmallFruit
910
+ case "softwheat":
911
+ return CropType.SoftWheat
912
+ case "soybeans" | "soybean" | "soybns":
913
+ return CropType.Soybeans
914
+ case "sorghum":
915
+ return CropType.Sorghum
916
+ case "sorghumsudangrass":
917
+ return CropType.SorghumSudanGrass
918
+ case "smallgraincereals":
919
+ return CropType.SmallGrainCereals
920
+ case "springwheat" | "wheatspring" | "whtspg":
921
+ return CropType.SpringWheat
922
+ case "springrye" | "ryespring" | "ryespg":
923
+ return CropType.SpringRye
924
+ case "sugarbeets" | "sugarb":
925
+ return CropType.SugarBeets
926
+ case "summerfallow":
927
+ return CropType.SummerFallow
928
+ case "sunflower" | "sunfls":
929
+ return CropType.Sunflower
930
+ case "sunflowerseed" | "sunflowerseeds":
931
+ return CropType.SunflowerSeed
932
+ case "tamepasture":
933
+ return CropType.TamePasture
934
+ case "timothyhay" | "ohayfd":
935
+ return CropType.TimothyHay
936
+ case "tobacco":
937
+ return CropType.Tobacco
938
+ case "totaltreefruitsnuts":
939
+ return CropType.TreeFruitAndNuts
940
+ case "triticale" | "tritcl":
941
+ return CropType.Triticale
942
+ case "tubers":
943
+ return CropType.Tubers
944
+ case "turfsod":
945
+ return CropType.TurfSod
946
+ case "undersownbarley":
947
+ return CropType.UndersownBarley
948
+ case "vegetables":
949
+ return CropType.Vegetables
950
+ case "wheatbolinder":
951
+ return CropType.WheatBolinder
952
+ case "wheatgan":
953
+ return CropType.WheatGan
954
+ case "wheat" | "wheatall" | "whtall":
955
+ return CropType.Wheat
956
+ case "wheatrye":
957
+ return CropType.WheatRye
958
+ case "winterwheat" | "wheatwinter" | "wheatwinterremaining" | "whtwint":
959
+ return CropType.WinterWheat
960
+ case "winterweeds":
961
+ return CropType.WinterWeeds
962
+ case "fieldpeas":
963
+ return CropType.FieldPeas
964
+ case "berriesandgrapes":
965
+ return CropType.BerriesAndGrapes
966
+ case "flax":
967
+ return CropType.Flax
968
+ case "triticalesilage":
969
+ return CropType.TriticaleSilage
970
+ case "wheatsilage":
971
+ return CropType.WheatSilage
972
+ case "grassclovermixtures":
973
+ return CropType.GrassCloverMixtures
974
+ case "redclovertrifoliumpratensel":
975
+ return CropType.RedCloverTrifoliumPratenseL
976
+ case "berseemclovertrifoliumalexandriuml":
977
+ return CropType.BerseemCloverTrifoliumAlexandriumL
978
+ case "sweetclovermelilotusofficinalis":
979
+ return CropType.SweetCloverMelilotusOfficinalis
980
+ case "crimsonclovertrifoliumincarnatum":
981
+ return CropType.CrimsonCloverTrifoliumIncarnatum
982
+ case "hairyvetchviciavillosaroth":
983
+ return CropType.HairyVetchViciaVillosaRoth
984
+ case "alfalfamedicagosatival":
985
+ return CropType.AlfalfaMedicagoSativaL
986
+ case "fababeanbroadbeanviciafaba":
987
+ return CropType.FabaBeanBroadBeanViciaFaba
988
+ case "cowpeavignaunguiculata":
989
+ return CropType.CowpeaVignaUnguiculata
990
+ case "austrianwinterpea":
991
+ return CropType.AustrianWinterPea
992
+ case "rapeseedbrassicanapusl":
993
+ return CropType.RapeseedBrassicaNapusL
994
+ case "winterturniprapebrassicarapasppoleiferalcvlargo":
995
+ return CropType.WinterTurnipRapeBrassicaRapaSppOleiferaLCVLargo
996
+ case "phaceliaphaceliatanacetifoliacvphaci":
997
+ return CropType.PhaceliaPhaceliaTanacetifoliaCVPhaci
998
+ case "forageradishraphanussativusl":
999
+ return CropType.ForageRadishRaphanusSativusL
1000
+ case "mustardsinapusalbalsubspmaireihlindbmaire":
1001
+ return CropType.MustardSinapusAlbaLSubspMaireiHLindbMaire
1002
+ case "barleyhordeumvulgare":
1003
+ return CropType.BarleyHordeumVulgare
1004
+ case "oatavenasativa":
1005
+ return CropType.OatAvenaSativa
1006
+ case "ryesecalecerealewinterryecerealrye":
1007
+ return CropType.RyeSecaleCerealeWinterRyeCerealRye
1008
+ case "sesamesesamumindicum":
1009
+ return CropType.SesameSesamumIndicum
1010
+ case "flaxlinumusitatissimum":
1011
+ return CropType.FlaxLinumUsitatissimum
1012
+ case "ryegrassloliumperennel":
1013
+ return CropType.RyeGrassLoliumPerenneL
1014
+ case "annualryegrassloliummultiflorum":
1015
+ return CropType.AnnualRyeGrassLoliumMultiflorum
1016
+ case "sorghumsorghumbicolour":
1017
+ return CropType.SorghumSorghumBicolour
1018
+ case "pigeonbean":
1019
+ return CropType.PigeonBean
1020
+ case "shepherdspurse":
1021
+ return CropType.ShepherdsPurse
1022
+ case "winterwheattriticumaestivum":
1023
+ return CropType.WinterWheatTriticumAestivum
1024
+ case "feedbarley":
1025
+ return CropType.FeedBarley
1026
+ case "redlentil":
1027
+ return CropType.RedLentils
1028
+ case "millingoats":
1029
+ return CropType.MillingOats
1030
+ case "polishcanola":
1031
+ return CropType.PolishCanola
1032
+ case "argentinehtcanola":
1033
+ return CropType.ArgentineHTCanola
1034
+ case "kabulichickpea":
1035
+ return CropType.KabuliChickpea
1036
+ case "yellowmustard":
1037
+ return CropType.YellowMustard
1038
+ case "cerealsilage":
1039
+ return CropType.CerealSilage
1040
+ case "cereals":
1041
+ return CropType.Cereals
1042
+ case "alfalfahay" | "alfalfa":
1043
+ return CropType.AlfalfaHay
1044
+ case "ediblegreenpeas":
1045
+ return CropType.EdibleGreenPeas
1046
+ case "edibleyellowpeas":
1047
+ return CropType.EdibleYellowPeas
1048
+ case "blackbean":
1049
+ return CropType.BlackBean
1050
+ case "hybridfallrye":
1051
+ return CropType.HybridFallRye
1052
+ case "brownmustard":
1053
+ return CropType.BrownMustard
1054
+ case "orientalmustard":
1055
+ return CropType.OrientalMustard
1056
+ case "sunfloweroilseedemss":
1057
+ return CropType.SunflowerOilseedEMSS
1058
+ case "desichickpea":
1059
+ return CropType.DesiChickpeas
1060
+ case "camelina":
1061
+ return CropType.Camelina
1062
+ case "carawayfirstseason":
1063
+ return CropType.CarawayFirstSeason
1064
+ case "carawaysecondseason":
1065
+ return CropType.CarawaySecondSeason
1066
+ case "coriander":
1067
+ return CropType.Coriander
1068
+ case "fenugreek":
1069
+ return CropType.Fenugreek
1070
+ case "quinoa":
1071
+ return CropType.Quinoa
1072
+ case "wheathardredspring":
1073
+ return CropType.WheatHardRedSpring
1074
+ case "wheatprairiespring":
1075
+ return CropType.WheatPrairieSpring
1076
+ case "wheatotherspring":
1077
+ return CropType.WheatOtherSpring
1078
+ case "beanspinto":
1079
+ return CropType.BeansPinto
1080
+ case "sunflowerconfection":
1081
+ return CropType.SunflowerConfection
1082
+ case "largegreenlentils":
1083
+ return CropType.LargeGreenLentils
1084
+ case "wheatnorthernhardred":
1085
+ return CropType.WheatNorthernHardRed
1086
+ case "sunfloweroil":
1087
+ return CropType.SunflowerOil
1088
+ case "beanswhite":
1089
+ return CropType.BeansWhite
1090
+ case "kabulichickpealarge":
1091
+ return CropType.LargeKabuliChickpea
1092
+ case "kabulichickpeasmall":
1093
+ return CropType.SmallKabuliChickpea
1094
+ case "colouredbeans":
1095
+ return CropType.ColouredBeans
1096
+ case "hardredwinterwheat":
1097
+ return CropType.HardRedWinterWheat
1098
+ case "northernontariobarley":
1099
+ return CropType.NorthernOntarioBarley
1100
+ case "southernontariobarley":
1101
+ return CropType.SouthernOntarioBarley
1102
+ case "northernontariooats":
1103
+ return CropType.NorthernOntarioOats
1104
+ case "rangelandnative":
1105
+ return CropType.RangelandNative
1106
+ case "southernontariooats":
1107
+ return CropType.SouthernOntarioOats
1108
+ case "springcanolaht":
1109
+ return CropType.SpringCanolaHt
1110
+ case "soybeansnotill":
1111
+ return CropType.SoybeanNoTill
1112
+ case "soybeansroundupready":
1113
+ return CropType.SoybeansRoundUpReady
1114
+ case "switchgrassdirect":
1115
+ return CropType.SwitchgrassDirect
1116
+ case "switchgrassdirectnotill":
1117
+ return CropType.SwitchgrassDirectNoTill
1118
+ case "switchgrassunderseeded":
1119
+ return CropType.SwitchgrassUnderseeded
1120
+ case "switchgrassunderseedednotill":
1121
+ return CropType.SwitchgrassUnderseededNoTill
1122
+ case "softwinterwheat":
1123
+ return CropType.SoftWinterWheat
1124
+ case "softwinterwheatnotill":
1125
+ return CropType.SoftWinterWheatNoTill
1126
+ case "whiteblackbeans":
1127
+ return CropType.WhiteBlackBeans
1128
+ case "whitebeans":
1129
+ return CropType.WhiteBeans
1130
+ case "wintercanolahybrid":
1131
+ return CropType.WinterCanolaHybrid
1132
+ case "hardredwinterwheatnotillage":
1133
+ return CropType.HardRedWinterWheatNoTill
1134
+ case "nfixingforages":
1135
+ return CropType.NFixingForages
1136
+ case "nonnfixingforages":
1137
+ return CropType.NonNFixingForages
1138
+ case _:
1139
+ # Trace.TraceError($"{nameof(CropTypeStringConverter)}: Crop type '{name}' not mapped, returning default value.")
1140
+ return CropType.NotSelected
1141
+
1142
+
1143
+ class CropTypeInGui(AutoNameEnum):
1144
+ """This class includes all CropType members that are allowed in the GUI of Holos.
1145
+
1146
+ Holos Source Code:
1147
+ None. This class was manually written.
1148
+
1149
+ """
1150
+ # region Oilseed
1151
+ Camelina = CropType.Camelina
1152
+ Canola = CropType.Canola
1153
+ Flax = CropType.Flax
1154
+ Mustard = CropType.Mustard
1155
+ Oilseeds = CropType.Oilseeds
1156
+ Soybeans = CropType.Soybeans
1157
+ # endregion
1158
+
1159
+ # region Other field crops
1160
+ BerriesAndGrapes = CropType.BerriesAndGrapes
1161
+ OtherFieldCrops = CropType.OtherFieldCrops
1162
+ Safflower = CropType.Safflower
1163
+ SunflowerSeed = CropType.SunflowerSeed
1164
+ Tobacco = CropType.Tobacco
1165
+ Vegetables = CropType.Vegetables
1166
+ # endregion
1167
+
1168
+ # region Pulse crops
1169
+ BeansDryField = CropType.BeansDryField
1170
+ Chickpeas = CropType.Chickpeas
1171
+ DryFieldPeas = CropType.DryFieldPeas
1172
+ Lentils = CropType.Lentils
1173
+ PulseCrops = CropType.PulseCrops
1174
+ # endregion
1175
+
1176
+ # region Root crops
1177
+ Potatoes = CropType.Potatoes
1178
+ SugarBeets = CropType.SugarBeets
1179
+ # endregion
1180
+
1181
+ # region Silage
1182
+ BarleySilage = CropType.BarleySilage
1183
+ GrassSilage = CropType.GrassSilage
1184
+ OatSilage = CropType.OatSilage
1185
+ SilageCorn = CropType.SilageCorn
1186
+ TriticaleSilage = CropType.TriticaleSilage
1187
+ WheatSilage = CropType.WheatSilage
1188
+ # endregion
1189
+
1190
+ # region Small grain cereals
1191
+ Barley = CropType.Barley
1192
+ Buckwheat = CropType.Buckwheat
1193
+ CanarySeed = CropType.CanarySeed
1194
+ FallRye = CropType.FallRye
1195
+ GrainCorn = CropType.GrainCorn
1196
+ MixedGrains = CropType.MixedGrains
1197
+ Oats = CropType.Oats
1198
+ SmallGrainCereals = CropType.SmallGrainCereals
1199
+ Sorghum = CropType.Sorghum
1200
+ Triticale = CropType.Triticale
1201
+ UndersownBarley = CropType.UndersownBarley
1202
+ Wheat = CropType.Wheat
1203
+ # endregion
1204
+
1205
+ # region Fallow
1206
+ Fallow = CropType.Fallow
1207
+ # endregion
1208
+
1209
+ # region Perennial
1210
+ ForageForSeed = CropType.ForageForSeed
1211
+ RangelandNative = CropType.RangelandNative
1212
+ SeededGrassland = CropType.SeededGrassland
1213
+ TameGrass = CropType.TameGrass
1214
+ TameLegume = CropType.TameLegume
1215
+ TameMixed = CropType.TameMixed
1216
+ # endregion
1217
+
1218
+
1219
+ def get_nitrogen_fixation(
1220
+ crop_type: CropType
1221
+ ) -> float:
1222
+ """Returns the nitrogen fixation fraction by the crop
1223
+
1224
+ Args:
1225
+ crop_type: CropType class member
1226
+
1227
+ Returns:
1228
+ (-) nitrogen fixation fraction (between 0 and 1)
1229
+
1230
+ Holos source code:
1231
+ https://github.com/holos-aafc/Holos/blob/b183dab99d211158d1fed9da5370ce599ac7c914/H.Core/Providers/Nitrogen/NitogenFixationProvider.cs#L60
1232
+ """
1233
+ return 0.7 if crop_type.is_pulse_crop() else 0