fvs-python 0.2.4__tar.gz → 0.3.0__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 (367) hide show
  1. fvs_python-0.3.0/PKG-INFO +287 -0
  2. fvs_python-0.3.0/README.md +221 -0
  3. {fvs_python-0.2.4 → fvs_python-0.3.0}/pyproject.toml +19 -14
  4. fvs_python-0.3.0/src/fvs_python.egg-info/PKG-INFO +287 -0
  5. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/fvs_python.egg-info/SOURCES.txt +24 -1
  6. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/__init__.py +9 -8
  7. fvs_python-0.3.0/src/pyfvs/bark_ratio.py +821 -0
  8. fvs_python-0.3.0/src/pyfvs/cfg/cs/cs_bark_ratio_coefficients.json +36 -0
  9. fvs_python-0.3.0/src/pyfvs/cfg/cs/cs_crown_ratio_coefficients.json +112 -0
  10. fvs_python-0.3.0/src/pyfvs/cfg/cs/cs_mortality_coefficients.json +107 -0
  11. fvs_python-0.3.0/src/pyfvs/cfg/ls/ls_bark_ratio_coefficients.json +82 -0
  12. fvs_python-0.3.0/src/pyfvs/cfg/ls/ls_crown_ratio_coefficients.json +64 -0
  13. fvs_python-0.3.0/src/pyfvs/cfg/ls/ls_large_tree_height_growth_coefficients.json +39 -0
  14. fvs_python-0.3.0/src/pyfvs/cfg/ne/ne_bark_ratio_coefficients.json +37 -0
  15. fvs_python-0.3.0/src/pyfvs/cfg/ne/ne_crown_ratio_coefficients.json +123 -0
  16. fvs_python-0.3.0/src/pyfvs/cfg/ne/ne_mortality_coefficients.json +118 -0
  17. fvs_python-0.3.0/src/pyfvs/cfg/pn/pn_bark_ratio_coefficients.json +143 -0
  18. fvs_python-0.3.0/src/pyfvs/cfg/pn/pn_crown_ratio_coefficients.json +75 -0
  19. fvs_python-0.3.0/src/pyfvs/cfg/taper/clark_r8_coefficients.json +345 -0
  20. fvs_python-0.3.0/src/pyfvs/cfg/taper/clark_r9_coefficients.json +364 -0
  21. fvs_python-0.3.0/src/pyfvs/cfg/taper/flewelling_coefficients.json +98 -0
  22. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/competition.py +14 -5
  23. fvs_python-0.3.0/src/pyfvs/crown_ratio.py +914 -0
  24. fvs_python-0.3.0/src/pyfvs/merchandising.py +483 -0
  25. fvs_python-0.3.0/src/pyfvs/mortality.py +866 -0
  26. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/pn_diameter_growth.py +3 -4
  27. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/stand.py +12 -4
  28. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/stand_metrics.py +219 -15
  29. fvs_python-0.3.0/src/pyfvs/taper.py +1234 -0
  30. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/tree.py +43 -32
  31. fvs_python-0.3.0/src/pyfvs/volume_library.py +766 -0
  32. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/wc_diameter_growth.py +21 -10
  33. fvs_python-0.3.0/tests/test_cs_variant.py +417 -0
  34. fvs_python-0.3.0/tests/test_ls_variant.py +592 -0
  35. fvs_python-0.3.0/tests/test_ne_variant.py +433 -0
  36. fvs_python-0.3.0/tests/test_op_variant.py +482 -0
  37. fvs_python-0.3.0/tests/test_pn_variant.py +528 -0
  38. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_stand_metrics.py +4 -4
  39. fvs_python-0.3.0/tests/test_taper.py +914 -0
  40. fvs_python-0.3.0/tests/test_wc_variant.py +448 -0
  41. fvs_python-0.2.4/PKG-INFO +0 -261
  42. fvs_python-0.2.4/README.md +0 -194
  43. fvs_python-0.2.4/src/fvs_python.egg-info/PKG-INFO +0 -261
  44. fvs_python-0.2.4/src/pyfvs/bark_ratio.py +0 -340
  45. fvs_python-0.2.4/src/pyfvs/crown_ratio.py +0 -419
  46. fvs_python-0.2.4/src/pyfvs/mortality.py +0 -432
  47. fvs_python-0.2.4/src/pyfvs/volume_library.py +0 -416
  48. {fvs_python-0.2.4 → fvs_python-0.3.0}/LICENSE +0 -0
  49. {fvs_python-0.2.4 → fvs_python-0.3.0}/setup.cfg +0 -0
  50. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/fvs_python.egg-info/dependency_links.txt +0 -0
  51. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/fvs_python.egg-info/requires.txt +0 -0
  52. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/fvs_python.egg-info/top_level.txt +0 -0
  53. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/ca_diameter_growth.py +0 -0
  54. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/CFG_README.md +0 -0
  55. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/ca_diameter_growth_coefficients.json +0 -0
  56. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/ca_height_diameter_coefficients.json +0 -0
  57. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/ca_species_config.yaml +0 -0
  58. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/df_douglas_fir.yaml +0 -0
  59. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/gs_giant_sequoia.yaml +0 -0
  60. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/jp_jeffrey_pine.yaml +0 -0
  61. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/pp_ponderosa_pine.yaml +0 -0
  62. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/rw_redwood.yaml +0 -0
  63. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ca/species/wf_white_fir.yaml +0 -0
  64. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/cs_diameter_growth_coefficients.json +0 -0
  65. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/cs_height_diameter_coefficients.json +0 -0
  66. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/cs_species_config.yaml +0 -0
  67. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/bc_black_cherry.yaml +0 -0
  68. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/rm_red_maple.yaml +0 -0
  69. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/ro_northern_red_oak.yaml +0 -0
  70. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/sh_shagbark_hickory.yaml +0 -0
  71. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/sm_sugar_maple.yaml +0 -0
  72. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/wn_black_walnut.yaml +0 -0
  73. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/wo_white_oak.yaml +0 -0
  74. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/cs/species/yp_tuliptree.yaml +0 -0
  75. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/dbh_bounding_table_4_7_1_8.json +0 -0
  76. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ecounit_coefficients_table_4_7_1_5.json +0 -0
  77. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ecounit_coefficients_table_4_7_1_6.json +0 -0
  78. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/forest_type_mapping_table_4_7_1_4.json +0 -0
  79. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/fortype_coefficients_table_4_7_1_3.json +0 -0
  80. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/functional_forms.yaml +0 -0
  81. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/growth_model_parameters.yaml +0 -0
  82. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/ls_diameter_growth_coefficients.json +0 -0
  83. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/ls_height_diameter_coefficients.json +0 -0
  84. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/ls_mortality_coefficients.json +0 -0
  85. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/ls_species_config.yaml +0 -0
  86. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ab_american_beech.yaml +0 -0
  87. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ac_american_chestnut.yaml +0 -0
  88. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ae_american_elm.yaml +0 -0
  89. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ah_american_hornbeam.yaml +0 -0
  90. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ap_apple.yaml +0 -0
  91. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ba_black_ash.yaml +0 -0
  92. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bc_black_cherry.yaml +0 -0
  93. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/be_beech.yaml +0 -0
  94. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bf_balsam_fir.yaml +0 -0
  95. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bg_black_gum.yaml +0 -0
  96. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bh_bitternut_hickory.yaml +0 -0
  97. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bk_birch_species.yaml +0 -0
  98. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bl_black_locust.yaml +0 -0
  99. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bm_black_maple.yaml +0 -0
  100. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bn_butternut.yaml +0 -0
  101. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bo_black_oak.yaml +0 -0
  102. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bp_balsam_poplar.yaml +0 -0
  103. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/br_bur_oak.yaml +0 -0
  104. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bs_black_spruce.yaml +0 -0
  105. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bt_bigtooth_aspen.yaml +0 -0
  106. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/bw_black_willow.yaml +0 -0
  107. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/cc_chokecherry.yaml +0 -0
  108. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ck_chinkapin_oak.yaml +0 -0
  109. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/dm_boxelder.yaml +0 -0
  110. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/dw_dogwood.yaml +0 -0
  111. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ec_eastern_cottonwood.yaml +0 -0
  112. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/eh_eastern_hemlock.yaml +0 -0
  113. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ga_green_ash.yaml +0 -0
  114. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/hh_hophornbeam.yaml +0 -0
  115. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/hk_hickory_species.yaml +0 -0
  116. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ht_hackberry.yaml +0 -0
  117. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/jp_jack_pine.yaml +0 -0
  118. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ma_mulberry.yaml +0 -0
  119. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/mm_mountain_maple.yaml +0 -0
  120. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/np_norway_pine.yaml +0 -0
  121. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ns_norway_spruce.yaml +0 -0
  122. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/oh_other_hardwood.yaml +0 -0
  123. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/os_other_softwood.yaml +0 -0
  124. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/pb_paper_birch.yaml +0 -0
  125. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ph_pignut_hickory.yaml +0 -0
  126. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/pl_plum_species.yaml +0 -0
  127. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/pr_pin_cherry.yaml +0 -0
  128. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/qa_quaking_aspen.yaml +0 -0
  129. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/rc_eastern_redcedar.yaml +0 -0
  130. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/re_slippery_elm.yaml +0 -0
  131. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/rl_rock_elm.yaml +0 -0
  132. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/rm_red_maple.yaml +0 -0
  133. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/rn_red_pine.yaml +0 -0
  134. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ro_northern_red_oak.yaml +0 -0
  135. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/rp_red_pine.yaml +0 -0
  136. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sc_scotch_pine.yaml +0 -0
  137. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sh_shagbark_hickory.yaml +0 -0
  138. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sm_sugar_maple.yaml +0 -0
  139. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ss_sassafras.yaml +0 -0
  140. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/st_striped_maple.yaml +0 -0
  141. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sv_silver_maple.yaml +0 -0
  142. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sw_swamp_white_oak.yaml +0 -0
  143. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/sy_sycamore.yaml +0 -0
  144. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ta_tamarack.yaml +0 -0
  145. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wa_white_ash.yaml +0 -0
  146. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wc_white_cedar.yaml +0 -0
  147. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wi_willow.yaml +0 -0
  148. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wn_black_walnut.yaml +0 -0
  149. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wo_white_oak.yaml +0 -0
  150. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/wp_white_pine.yaml +0 -0
  151. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/ws_white_spruce.yaml +0 -0
  152. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ls/species/yb_yellow_birch.yaml +0 -0
  153. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/ne_diameter_growth_coefficients.json +0 -0
  154. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/ne_height_diameter_coefficients.json +0 -0
  155. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/ne_species_config.yaml +0 -0
  156. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/bc_black_cherry.yaml +0 -0
  157. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/bf_balsam_fir.yaml +0 -0
  158. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/rm_red_maple.yaml +0 -0
  159. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/ro_northern_red_oak.yaml +0 -0
  160. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/rs_red_spruce.yaml +0 -0
  161. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/sm_sugar_maple.yaml +0 -0
  162. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/wp_white_pine.yaml +0 -0
  163. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ne/species/yb_yellow_birch.yaml +0 -0
  164. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/oc/oc_diameter_growth_coefficients.json +0 -0
  165. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/oc/oc_height_diameter_coefficients.json +0 -0
  166. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/oc/oc_species_config.yaml +0 -0
  167. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/oc/species/df.yaml +0 -0
  168. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/op_diameter_growth_coefficients.json +0 -0
  169. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/op_height_diameter_coefficients.json +0 -0
  170. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/op_species_config.yaml +0 -0
  171. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/species/df_douglas_fir.yaml +0 -0
  172. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/species/ra_red_alder.yaml +0 -0
  173. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/species/rc_western_red_cedar.yaml +0 -0
  174. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/op/species/wh_western_hemlock.yaml +0 -0
  175. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/plant_values_table_4_7_1_7.json +0 -0
  176. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/pn_diameter_growth_coefficients.json +0 -0
  177. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/pn_height_diameter_coefficients.json +0 -0
  178. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/pn_species_config.yaml +0 -0
  179. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/species/df_douglas_fir.yaml +0 -0
  180. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/species/rc_western_red_cedar.yaml +0 -0
  181. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/pn/species/wh_western_hemlock.yaml +0 -0
  182. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/site_index_transformation.yaml +0 -0
  183. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_bark_ratio_coefficients.json +0 -0
  184. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_crown_competition_factor.json +0 -0
  185. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_crown_ratio_coefficients.json +0 -0
  186. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_crown_width_coefficients.json +0 -0
  187. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_diameter_growth_coefficients.json +0 -0
  188. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_height_diameter_coefficients.json +0 -0
  189. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_large_tree_diameter_growth.json +0 -0
  190. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_large_tree_height_growth.json +0 -0
  191. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_large_tree_height_growth_coefficients.json +0 -0
  192. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_mortality_model.json +0 -0
  193. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_regeneration_model.json +0 -0
  194. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_relative_site_index.json +0 -0
  195. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_small_tree_height_growth.json +0 -0
  196. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_species_codes_table.json +0 -0
  197. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/sn_stand_density_index.json +0 -0
  198. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ab_american_basswood.yaml +0 -0
  199. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ab_american_beech.yaml +0 -0
  200. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ae_american_elm.yaml +0 -0
  201. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ah_american_hornbeam.yaml +0 -0
  202. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ap_american_plum.yaml +0 -0
  203. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ap_apple.yaml +0 -0
  204. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/as_american_sycamore.yaml +0 -0
  205. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ba_black_ash.yaml +0 -0
  206. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bb_american_basswood.yaml +0 -0
  207. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bb_basswood.yaml +0 -0
  208. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bc_black_cherry.yaml +0 -0
  209. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bd_sweet_birch.yaml +0 -0
  210. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/be_american_beech.yaml +0 -0
  211. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bg_black_gum.yaml +0 -0
  212. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bj_blackjack_oak.yaml +0 -0
  213. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bj_blue_jay.yaml +0 -0
  214. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bk_black_oak.yaml +0 -0
  215. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bn_butternut.yaml +0 -0
  216. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bo_blackjack_oak.yaml +0 -0
  217. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bt_bigtooth_aspen.yaml +0 -0
  218. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/bu_buckeye.yaml +0 -0
  219. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/by_bald_cypress.yaml +0 -0
  220. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ca_american_chestnut.yaml +0 -0
  221. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ca_catalpa.yaml +0 -0
  222. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/cb_cherrybark_oak.yaml +0 -0
  223. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/cb_cucumber_tree.yaml +0 -0
  224. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ck_chinkapin_oak.yaml +0 -0
  225. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/co_atlantic_white_cedar.yaml +0 -0
  226. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ct_catalpa.yaml +0 -0
  227. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/cw_chestnut_oak.yaml +0 -0
  228. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/dw_dogwood.yaml +0 -0
  229. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/el_american_hornbeam.yaml +0 -0
  230. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/el_elm.yaml +0 -0
  231. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/fm_flowering_dogwood.yaml +0 -0
  232. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/fr_fraser_fir.yaml +0 -0
  233. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ga_green_ash.yaml +0 -0
  234. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ha_hawthorn.yaml +0 -0
  235. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hb_hornbeam.yaml +0 -0
  236. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hh_dogwood.yaml +0 -0
  237. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hh_hophornbeam.yaml +0 -0
  238. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hi_hickory_species.yaml +0 -0
  239. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hl_holly.yaml +0 -0
  240. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hm_eastern_hemlock.yaml +0 -0
  241. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hy_american_holly.yaml +0 -0
  242. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/hy_holly.yaml +0 -0
  243. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ju_eastern_juniper.yaml +0 -0
  244. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/lb_loblolly_bay.yaml +0 -0
  245. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/lk_laurel_oak.yaml +0 -0
  246. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ll_longleaf_pine.yaml +0 -0
  247. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/lo_live_oak.yaml +0 -0
  248. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/lp_loblolly_pine.yaml +0 -0
  249. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/mb_mountain_birch.yaml +0 -0
  250. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/mb_mulberry.yaml +0 -0
  251. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/mg_magnolia.yaml +0 -0
  252. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ml_bigleaf_magnolia.yaml +0 -0
  253. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ml_maple_leaf.yaml +0 -0
  254. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ms_maple_species.yaml +0 -0
  255. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/mv_magnolia_vine.yaml +0 -0
  256. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/mv_sweetbay.yaml +0 -0
  257. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/oh_other_hardwood.yaml +0 -0
  258. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/os_other_softwood.yaml +0 -0
  259. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ot_other_tree.yaml +0 -0
  260. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ov_overcup_oak.yaml +0 -0
  261. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/pc_pond_cypress.yaml +0 -0
  262. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/pd_pitch_pine.yaml +0 -0
  263. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/pi_pine_species.yaml +0 -0
  264. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/po_post_oak.yaml +0 -0
  265. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/pp_pond_pine.yaml +0 -0
  266. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ps_persimmon.yaml +0 -0
  267. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/pu_pond_pine.yaml +0 -0
  268. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/qs_oak_species.yaml +0 -0
  269. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ra_red_ash.yaml +0 -0
  270. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/rd_redbud.yaml +0 -0
  271. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/rl_red_elm.yaml +0 -0
  272. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/rl_slippery_elm.yaml +0 -0
  273. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/rm_red_maple.yaml +0 -0
  274. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ro_northern_red_oak.yaml +0 -0
  275. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sa_slash_pine.yaml +0 -0
  276. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sb_sweet_birch.yaml +0 -0
  277. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sd_sand_pine.yaml +0 -0
  278. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sk_southern_red_oak.yaml +0 -0
  279. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sk_swamp_oak.yaml +0 -0
  280. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sm_sugar_maple.yaml +0 -0
  281. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sn_sourwood.yaml +0 -0
  282. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/so_scarlet_oak.yaml +0 -0
  283. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/so_southern_oak.yaml +0 -0
  284. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sp_shortleaf_pine.yaml +0 -0
  285. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sr_spruce_pine.yaml +0 -0
  286. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ss_sassafras.yaml +0 -0
  287. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/su_sweetgum.yaml +0 -0
  288. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sv_silver_maple.yaml +0 -0
  289. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sy_american_sycamore.yaml +0 -0
  290. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/sy_sycamore.yaml +0 -0
  291. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/tm_tamarack.yaml +0 -0
  292. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/to_tulip_oak.yaml +0 -0
  293. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/to_turkey_oak.yaml +0 -0
  294. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ts_swamp_tupelo.yaml +0 -0
  295. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/ts_tulip_tree.yaml +0 -0
  296. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/vp_virginia_pine.yaml +0 -0
  297. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wa_white_ash.yaml +0 -0
  298. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/we_white_elm.yaml +0 -0
  299. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/we_winged_elm.yaml +0 -0
  300. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wi_willow.yaml +0 -0
  301. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wk_water_oak.yaml +0 -0
  302. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wn_black_walnut.yaml +0 -0
  303. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wn_walnut.yaml +0 -0
  304. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wo_white_oak.yaml +0 -0
  305. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wp_white_pine.yaml +0 -0
  306. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/wt_water_tupelo.yaml +0 -0
  307. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species/yp_yellow_poplar.yaml +0 -0
  308. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/species_config.yaml +0 -0
  309. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/species/df_douglas_fir.yaml +0 -0
  310. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/species/rc_western_red_cedar.yaml +0 -0
  311. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/species/wh_western_hemlock.yaml +0 -0
  312. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/wc_diameter_growth_coefficients.json +0 -0
  313. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/wc_height_diameter_coefficients.json +0 -0
  314. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/wc/wc_species_config.yaml +0 -0
  315. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ws/species/sp.yaml +0 -0
  316. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ws/ws_diameter_growth_coefficients.json +0 -0
  317. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ws/ws_height_diameter_coefficients.json +0 -0
  318. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cfg/ws/ws_species_config.yaml +0 -0
  319. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/clark_profile.py +0 -0
  320. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/config_loader.py +0 -0
  321. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/crown_competition_factor.py +0 -0
  322. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/crown_width.py +0 -0
  323. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/cs_diameter_growth.py +0 -0
  324. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/data_export.py +0 -0
  325. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/ecological_unit.py +0 -0
  326. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/exceptions.py +0 -0
  327. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/fia_integration.py +0 -0
  328. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/forest_type.py +0 -0
  329. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/growth_parameters.py +0 -0
  330. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/growth_plots.py +0 -0
  331. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/harvest.py +0 -0
  332. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/height_diameter.py +0 -0
  333. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/large_tree_height_growth.py +0 -0
  334. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/logging_config.py +0 -0
  335. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/ls_diameter_growth.py +0 -0
  336. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/main.py +0 -0
  337. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/model_base.py +0 -0
  338. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/ne_diameter_growth.py +0 -0
  339. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/oc_diameter_growth.py +0 -0
  340. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/op_diameter_growth.py +0 -0
  341. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/simulation_engine.py +0 -0
  342. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/sn_diameter_growth.py +0 -0
  343. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/species.py +0 -0
  344. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/stand_output.py +0 -0
  345. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/tree_utils.py +0 -0
  346. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/utils/__init__.py +0 -0
  347. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/utils/age_lookup.py +0 -0
  348. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/utils/string_utils.py +0 -0
  349. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/validation.py +0 -0
  350. {fvs_python-0.2.4 → fvs_python-0.3.0}/src/pyfvs/ws_diameter_growth.py +0 -0
  351. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_competition.py +0 -0
  352. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_configuration.py +0 -0
  353. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_crown_ratio.py +0 -0
  354. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_documentation_examples.py +0 -0
  355. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_fia_integration.py +0 -0
  356. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_harvest.py +0 -0
  357. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_height_diameter.py +0 -0
  358. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_integration.py +0 -0
  359. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_manuscript_validation.py +0 -0
  360. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_model_validation.py +0 -0
  361. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_mortality.py +0 -0
  362. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_performance.py +0 -0
  363. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_stand.py +0 -0
  364. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_stand_output.py +0 -0
  365. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_tree.py +0 -0
  366. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_tree_comprehensive.py +0 -0
  367. {fvs_python-0.2.4 → fvs_python-0.3.0}/tests/test_validation.py +0 -0
@@ -0,0 +1,287 @@
1
+ Metadata-Version: 2.4
2
+ Name: fvs-python
3
+ Version: 0.3.0
4
+ Summary: Python implementation of the USDA Forest Vegetation Simulator (FVS) with 10 regional variants, taper-based volume, and 500+ species configurations
5
+ Author-email: Chris Mihiar <chris.mihiar@gmail.com>
6
+ Maintainer-email: Chris Mihiar <chris.mihiar@gmail.com>
7
+ License: MIT
8
+ Project-URL: Homepage, https://fiatools.org/tools/pyfvs/
9
+ Project-URL: Repository, https://github.com/mihiarc/pyfvs
10
+ Project-URL: Documentation, https://mihiarc.github.io/pyfvs/
11
+ Project-URL: Source Code, https://github.com/mihiarc/pyfvs
12
+ Project-URL: Bug Tracker, https://github.com/mihiarc/pyfvs/issues
13
+ Project-URL: Changelog, https://github.com/mihiarc/pyfvs/releases
14
+ Project-URL: FIA Ecosystem, https://fiatools.org
15
+ Keywords: fvs,forest-vegetation-simulator,growth-simulation,yield-tables,forestry,timber-volume,taper-equations,southern-variant,lake-states,pacific-northwest,northeast,central-states,organon,douglas-fir,loblolly-pine,red-maple,individual-tree-growth,stand-projection,chapman-richards,nvel,fia,forest-inventory,usda,forest-service
16
+ Classifier: Development Status :: 4 - Beta
17
+ Classifier: Intended Audience :: Science/Research
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: Topic :: Scientific/Engineering
20
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
21
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
22
+ Classifier: License :: OSI Approved :: MIT License
23
+ Classifier: Operating System :: OS Independent
24
+ Classifier: Natural Language :: English
25
+ Classifier: Environment :: Console
26
+ Classifier: Programming Language :: Python :: 3
27
+ Classifier: Programming Language :: Python :: 3.12
28
+ Classifier: Programming Language :: Python :: 3.13
29
+ Classifier: Programming Language :: Python :: 3.14
30
+ Requires-Python: >=3.12
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ Requires-Dist: numpy>=1.21.0
34
+ Requires-Dist: pandas>=1.3.0
35
+ Requires-Dist: scipy>=1.7.0
36
+ Requires-Dist: matplotlib>=3.4.0
37
+ Requires-Dist: seaborn>=0.11.0
38
+ Requires-Dist: pyyaml>=6.0.0
39
+ Requires-Dist: pydantic>=2.5.0
40
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
41
+ Requires-Dist: tomli-w>=1.0.0
42
+ Requires-Dist: tabulate>=0.9.0
43
+ Requires-Dist: openpyxl>=3.0.0
44
+ Requires-Dist: rich>=12.0.0
45
+ Provides-Extra: dev
46
+ Requires-Dist: pytest>=6.0.0; extra == "dev"
47
+ Requires-Dist: pytest-cov>=3.0.0; extra == "dev"
48
+ Requires-Dist: black>=22.0.0; extra == "dev"
49
+ Requires-Dist: flake8>=4.0.0; extra == "dev"
50
+ Requires-Dist: mypy>=0.900; extra == "dev"
51
+ Requires-Dist: pre-commit>=2.15.0; extra == "dev"
52
+ Requires-Dist: mkdocs>=1.6.0; extra == "dev"
53
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "dev"
54
+ Requires-Dist: mkdocstrings[python]>=0.24.0; extra == "dev"
55
+ Provides-Extra: test
56
+ Requires-Dist: pytest>=6.0.0; extra == "test"
57
+ Requires-Dist: pytest-cov>=3.0.0; extra == "test"
58
+ Requires-Dist: pytest-xdist>=2.0.0; extra == "test"
59
+ Requires-Dist: polars>=0.20.0; extra == "test"
60
+ Provides-Extra: docs
61
+ Requires-Dist: mkdocs>=1.6.0; extra == "docs"
62
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
63
+ Requires-Dist: mkdocstrings[python]>=0.24.0; extra == "docs"
64
+ Requires-Dist: pymdown-extensions>=10.7; extra == "docs"
65
+ Dynamic: license-file
66
+
67
+ <div align="center">
68
+ <h1>pyFVS</h1>
69
+
70
+ <p><strong>Forest growth and yield simulation in Python</strong></p>
71
+
72
+ <p>
73
+ <a href="https://pypi.org/project/fvs-python/"><img src="https://img.shields.io/pypi/v/fvs-python?color=006D6D&label=PyPI" alt="PyPI"></a>
74
+ <a href="https://mihiarc.github.io/pyfvs/"><img src="https://img.shields.io/badge/docs-GitHub%20Pages-006D6D" alt="Documentation"></a>
75
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-006D6D" alt="License: MIT"></a>
76
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12+-006D6D" alt="Python 3.12+"></a>
77
+ </p>
78
+ </div>
79
+
80
+ ---
81
+
82
+ A Python implementation of the USDA [Forest Vegetation Simulator](https://www.fs.usda.gov/fmsc/fvs/) (FVS) supporting **10 regional variants**, **taper-based volume calculations**, and **500+ species configurations** for simulating individual tree growth and yield across the United States.
83
+
84
+ ## Features
85
+
86
+ - **10 Regional Variants** &mdash; Southern, Lake States, Pacific Northwest, West Cascades, Northeast, Central States, ORGANON, and more
87
+ - **Taper-Based Volume** &mdash; Clark (Eastern) and Flewelling (Western) taper models with NVEL-compatible merchandising
88
+ - **500+ Species Configs** &mdash; Individual species parameters for height-diameter, bark ratio, crown ratio, and growth
89
+ - **Individual Tree Growth** &mdash; Diameter, height, crown ratio, and mortality modeled per tree per cycle
90
+ - **Stand Management** &mdash; Thinning from below/above, selection harvest, clearcut, and custom prescriptions
91
+ - **FIA Integration** &mdash; Initialize stands directly from Forest Inventory and Analysis plot data
92
+ - **Export Formats** &mdash; Yield tables, CSV, Excel, and tree lists
93
+
94
+ ## Supported Variants
95
+
96
+ | Variant | Region | Species | Key Species | Volume Model |
97
+ |---------|--------|---------|-------------|--------------|
98
+ | **SN** | Southern US | 90 | Loblolly Pine, Longleaf Pine, Slash Pine | Clark (R8) |
99
+ | **LS** | Lake States (MI, WI, MN) | 67 | Red Pine, Jack Pine, Sugar Maple | Clark (R9) |
100
+ | **NE** | Northeast (13 states) | 108 | Red Maple, Sugar Maple, Northern Red Oak | Clark (R9) |
101
+ | **CS** | Central States (IL, IN, IA, MO) | 96 | White Oak, Black Walnut, Yellow-Poplar | Clark (R9) |
102
+ | **PN** | Pacific NW Coast (WA, OR) | 39 | Douglas-fir, Western Hemlock, Sitka Spruce | Flewelling |
103
+ | **WC** | West Cascades (OR, WA) | 37 | Douglas-fir, Western Hemlock, Western Red Cedar | Flewelling |
104
+ | **OP** | ORGANON Pacific NW | 18 | Douglas-fir, Red Alder | Flewelling |
105
+ | **CA** | Inland California | &mdash; | White Fir, Ponderosa Pine | &mdash; |
106
+ | **OC** | ORGANON SW Oregon | &mdash; | Douglas-fir, Tanoak | &mdash; |
107
+ | **WS** | Western Sierra Nevada | &mdash; | White Fir, Giant Sequoia | &mdash; |
108
+
109
+ Variants marked with &mdash; use default (SN) infrastructure and are pending full implementation.
110
+
111
+ ## Installation
112
+
113
+ ```bash
114
+ pip install fvs-python
115
+ ```
116
+
117
+ ## Quick Start
118
+
119
+ ```python
120
+ from pyfvs import Stand
121
+
122
+ # Southern loblolly pine plantation
123
+ stand = Stand.initialize_planted(
124
+ trees_per_acre=500,
125
+ site_index=70,
126
+ species="LP",
127
+ ecounit="M231"
128
+ )
129
+ stand.grow(years=50)
130
+ metrics = stand.get_metrics()
131
+ print(f"TPA: {metrics['tpa']:.0f} QMD: {metrics['qmd']:.1f}\" "
132
+ f"BA: {metrics['basal_area']:.0f} ft² Volume: {metrics['volume']:.0f} ft³/ac")
133
+ ```
134
+
135
+ ### Multi-Variant Examples
136
+
137
+ ```python
138
+ from pyfvs import Stand
139
+
140
+ # Pacific Northwest Douglas-fir (PN variant)
141
+ stand = Stand.initialize_planted(400, 120, "DF", variant="PN")
142
+ stand.grow(years=50)
143
+ # ~333 TPA, 14.5" QMD, 383 BA, 15,029 ft³/ac
144
+
145
+ # Lake States Red Pine (LS variant)
146
+ stand = Stand.initialize_planted(500, 65, "RN", variant="LS")
147
+ stand.grow(years=50)
148
+ # ~459 TPA, 10.4" QMD, 270 BA, 7,774 ft³/ac
149
+
150
+ # Northeast Red Maple (NE variant)
151
+ stand = Stand.initialize_planted(500, 60, "RM", variant="NE")
152
+ stand.grow(years=50)
153
+ # ~89 BA, 7.4" QMD
154
+
155
+ # Central States White Oak (CS variant)
156
+ stand = Stand.initialize_planted(500, 65, "WO", variant="CS")
157
+ stand.grow(years=50)
158
+ # ~283 TPA, 8.7" QMD, 117 BA
159
+
160
+ # ORGANON Douglas-fir (OP variant - highest yield)
161
+ stand = Stand.initialize_planted(400, 120, "DF", variant="OP")
162
+ stand.grow(years=50)
163
+ # ~323 TPA, 18.5" QMD, 601 BA, 28,395 ft³/ac
164
+ ```
165
+
166
+ ### Thinning
167
+
168
+ ```python
169
+ stand = Stand.initialize_planted(500, 70, "LP", ecounit="M231")
170
+ stand.grow(years=15)
171
+ stand.thin_from_below(target_tpa=200)
172
+ stand.grow(years=35)
173
+ ```
174
+
175
+ ### Yield Tables
176
+
177
+ ```python
178
+ from pyfvs import Stand
179
+
180
+ stand = Stand.initialize_planted(500, 70, "LP", ecounit="M231")
181
+ table = stand.grow(years=50, yield_table=True)
182
+ print(table)
183
+ ```
184
+
185
+ | Age | TPA | QMD | Height | BA | Volume |
186
+ |-----|-----|-----|--------|-----|--------|
187
+ | 0 | 500 | 0.5 | 1.0 | 0.7 | 0 |
188
+ | 10 | 485 | 4.2 | 28.5 | 47 | 892 |
189
+ | 20 | 420 | 7.8 | 52.1 | 140 | 3,241 |
190
+ | 30 | 310 | 10.4 | 68.3 | 183 | 5,128 |
191
+
192
+ ## Volume System
193
+
194
+ pyFVS uses a taper-based volume system matching NVEL (National Volume Estimator Library):
195
+
196
+ | Model | Region | Method |
197
+ |-------|--------|--------|
198
+ | **Clark** | Eastern (SN, NE, CS, LS) | 3-segment profile with analytic integration |
199
+ | **Flewelling** | Western (PN, WC, OP) | 4-segment variable-shape profile |
200
+ | **Combined-variable** | Fallback | V = a + b * D²H (Amateis & Burkhart 1987) |
201
+
202
+ Merchandising supports Scribner Decimal C, International 1/4", and Doyle board-foot rules with per-log bucking.
203
+
204
+ ## Architecture
205
+
206
+ ```
207
+ Stand.initialize_planted() --> Tree objects --> grow() cycles --> mortality / harvest
208
+ | |
209
+ StandMetrics GrowthModels
210
+ Competition HeightDiameter
211
+ Mortality CrownRatio
212
+ HarvestManager BarkRatio
213
+ OutputGenerator TaperVolume
214
+ ```
215
+
216
+ Each `Tree` uses a size-dependent growth model:
217
+ - **Small trees** (DBH < 1"): Height-driven growth via Chapman-Richards
218
+ - **Transition** (1" - 3"): Weighted blend of small and large tree models
219
+ - **Large trees** (DBH > 3"): Diameter-driven growth via variant-specific DDS equations
220
+
221
+ Variant-specific diameter growth equations:
222
+
223
+ | Variant | Equation | Variables |
224
+ |---------|----------|-----------|
225
+ | SN | ln(DDS) | DBH, CR, RELHT, SI, BA, ecounit |
226
+ | LS, CS | DDS (linear) | DBH, CR, RELDBH, SI, BA, BAL |
227
+ | PN, WC | ln(DDS) | DBH, CR, RELHT, SI, BA, BAL, elevation, slope, aspect |
228
+ | NE | BA growth (iterative) | DBH, SI, BAL, CR |
229
+ | OP | ln(DG) direct | DBH, CR, SI, BA, BAL |
230
+
231
+ ## Configuration
232
+
233
+ Species parameters stored in YAML with variant-specific coefficient files in JSON:
234
+
235
+ ```
236
+ src/pyfvs/cfg/
237
+ species/*.yaml # SN species configs (90 species)
238
+ sn_*.json # SN variant coefficients
239
+ ls/species/*.yaml # LS species configs (67 species)
240
+ ls/ls_*.json # LS variant coefficients
241
+ pn/, wc/, ne/, cs/, op/ # Other variant directories
242
+ taper/ # Taper model coefficients
243
+ clark_r8_coefficients.json
244
+ clark_r9_coefficients.json
245
+ flewelling_coefficients.json
246
+ ```
247
+
248
+ ## Testing
249
+
250
+ ```bash
251
+ # Run all tests (~1000 tests)
252
+ uv run pytest
253
+
254
+ # Run specific variant tests
255
+ uv run pytest tests/test_ls_variant.py
256
+ uv run pytest tests/test_pn_variant.py
257
+ uv run pytest tests/test_taper.py
258
+ ```
259
+
260
+ ## References
261
+
262
+ - [FVS Documentation](https://www.fs.usda.gov/fmsc/fvs/) &mdash; USDA Forest Service
263
+ - [FVS Essential Guide (GTR-WO-102)](https://www.fs.usda.gov/research/treesearch/62574) &mdash; Dixon (2023)
264
+ - Clark, A. et al. (1991). Stem profile equations for southern tree species. USDA-FS Research Paper SE-282.
265
+ - Flewelling, J.W. (1994). Stem form equation development notes. USDA-FS.
266
+ - Amateis, R.L. & Burkhart, H.E. (1987). Tree volume and taper. *Forest Science* 33(2).
267
+
268
+ ## Citation
269
+
270
+ ```bibtex
271
+ @software{pyfvs2025,
272
+ title = {pyFVS: Python Implementation of the Forest Vegetation Simulator},
273
+ author = {Mihiar, Christopher},
274
+ year = {2025},
275
+ url = {https://github.com/mihiarc/pyfvs}
276
+ }
277
+ ```
278
+
279
+ ## License
280
+
281
+ MIT
282
+
283
+ ---
284
+
285
+ <div align="center">
286
+ <sub>Built by <a href="https://github.com/mihiarc">Chris Mihiar</a></sub>
287
+ </div>
@@ -0,0 +1,221 @@
1
+ <div align="center">
2
+ <h1>pyFVS</h1>
3
+
4
+ <p><strong>Forest growth and yield simulation in Python</strong></p>
5
+
6
+ <p>
7
+ <a href="https://pypi.org/project/fvs-python/"><img src="https://img.shields.io/pypi/v/fvs-python?color=006D6D&label=PyPI" alt="PyPI"></a>
8
+ <a href="https://mihiarc.github.io/pyfvs/"><img src="https://img.shields.io/badge/docs-GitHub%20Pages-006D6D" alt="Documentation"></a>
9
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-006D6D" alt="License: MIT"></a>
10
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12+-006D6D" alt="Python 3.12+"></a>
11
+ </p>
12
+ </div>
13
+
14
+ ---
15
+
16
+ A Python implementation of the USDA [Forest Vegetation Simulator](https://www.fs.usda.gov/fmsc/fvs/) (FVS) supporting **10 regional variants**, **taper-based volume calculations**, and **500+ species configurations** for simulating individual tree growth and yield across the United States.
17
+
18
+ ## Features
19
+
20
+ - **10 Regional Variants** &mdash; Southern, Lake States, Pacific Northwest, West Cascades, Northeast, Central States, ORGANON, and more
21
+ - **Taper-Based Volume** &mdash; Clark (Eastern) and Flewelling (Western) taper models with NVEL-compatible merchandising
22
+ - **500+ Species Configs** &mdash; Individual species parameters for height-diameter, bark ratio, crown ratio, and growth
23
+ - **Individual Tree Growth** &mdash; Diameter, height, crown ratio, and mortality modeled per tree per cycle
24
+ - **Stand Management** &mdash; Thinning from below/above, selection harvest, clearcut, and custom prescriptions
25
+ - **FIA Integration** &mdash; Initialize stands directly from Forest Inventory and Analysis plot data
26
+ - **Export Formats** &mdash; Yield tables, CSV, Excel, and tree lists
27
+
28
+ ## Supported Variants
29
+
30
+ | Variant | Region | Species | Key Species | Volume Model |
31
+ |---------|--------|---------|-------------|--------------|
32
+ | **SN** | Southern US | 90 | Loblolly Pine, Longleaf Pine, Slash Pine | Clark (R8) |
33
+ | **LS** | Lake States (MI, WI, MN) | 67 | Red Pine, Jack Pine, Sugar Maple | Clark (R9) |
34
+ | **NE** | Northeast (13 states) | 108 | Red Maple, Sugar Maple, Northern Red Oak | Clark (R9) |
35
+ | **CS** | Central States (IL, IN, IA, MO) | 96 | White Oak, Black Walnut, Yellow-Poplar | Clark (R9) |
36
+ | **PN** | Pacific NW Coast (WA, OR) | 39 | Douglas-fir, Western Hemlock, Sitka Spruce | Flewelling |
37
+ | **WC** | West Cascades (OR, WA) | 37 | Douglas-fir, Western Hemlock, Western Red Cedar | Flewelling |
38
+ | **OP** | ORGANON Pacific NW | 18 | Douglas-fir, Red Alder | Flewelling |
39
+ | **CA** | Inland California | &mdash; | White Fir, Ponderosa Pine | &mdash; |
40
+ | **OC** | ORGANON SW Oregon | &mdash; | Douglas-fir, Tanoak | &mdash; |
41
+ | **WS** | Western Sierra Nevada | &mdash; | White Fir, Giant Sequoia | &mdash; |
42
+
43
+ Variants marked with &mdash; use default (SN) infrastructure and are pending full implementation.
44
+
45
+ ## Installation
46
+
47
+ ```bash
48
+ pip install fvs-python
49
+ ```
50
+
51
+ ## Quick Start
52
+
53
+ ```python
54
+ from pyfvs import Stand
55
+
56
+ # Southern loblolly pine plantation
57
+ stand = Stand.initialize_planted(
58
+ trees_per_acre=500,
59
+ site_index=70,
60
+ species="LP",
61
+ ecounit="M231"
62
+ )
63
+ stand.grow(years=50)
64
+ metrics = stand.get_metrics()
65
+ print(f"TPA: {metrics['tpa']:.0f} QMD: {metrics['qmd']:.1f}\" "
66
+ f"BA: {metrics['basal_area']:.0f} ft² Volume: {metrics['volume']:.0f} ft³/ac")
67
+ ```
68
+
69
+ ### Multi-Variant Examples
70
+
71
+ ```python
72
+ from pyfvs import Stand
73
+
74
+ # Pacific Northwest Douglas-fir (PN variant)
75
+ stand = Stand.initialize_planted(400, 120, "DF", variant="PN")
76
+ stand.grow(years=50)
77
+ # ~333 TPA, 14.5" QMD, 383 BA, 15,029 ft³/ac
78
+
79
+ # Lake States Red Pine (LS variant)
80
+ stand = Stand.initialize_planted(500, 65, "RN", variant="LS")
81
+ stand.grow(years=50)
82
+ # ~459 TPA, 10.4" QMD, 270 BA, 7,774 ft³/ac
83
+
84
+ # Northeast Red Maple (NE variant)
85
+ stand = Stand.initialize_planted(500, 60, "RM", variant="NE")
86
+ stand.grow(years=50)
87
+ # ~89 BA, 7.4" QMD
88
+
89
+ # Central States White Oak (CS variant)
90
+ stand = Stand.initialize_planted(500, 65, "WO", variant="CS")
91
+ stand.grow(years=50)
92
+ # ~283 TPA, 8.7" QMD, 117 BA
93
+
94
+ # ORGANON Douglas-fir (OP variant - highest yield)
95
+ stand = Stand.initialize_planted(400, 120, "DF", variant="OP")
96
+ stand.grow(years=50)
97
+ # ~323 TPA, 18.5" QMD, 601 BA, 28,395 ft³/ac
98
+ ```
99
+
100
+ ### Thinning
101
+
102
+ ```python
103
+ stand = Stand.initialize_planted(500, 70, "LP", ecounit="M231")
104
+ stand.grow(years=15)
105
+ stand.thin_from_below(target_tpa=200)
106
+ stand.grow(years=35)
107
+ ```
108
+
109
+ ### Yield Tables
110
+
111
+ ```python
112
+ from pyfvs import Stand
113
+
114
+ stand = Stand.initialize_planted(500, 70, "LP", ecounit="M231")
115
+ table = stand.grow(years=50, yield_table=True)
116
+ print(table)
117
+ ```
118
+
119
+ | Age | TPA | QMD | Height | BA | Volume |
120
+ |-----|-----|-----|--------|-----|--------|
121
+ | 0 | 500 | 0.5 | 1.0 | 0.7 | 0 |
122
+ | 10 | 485 | 4.2 | 28.5 | 47 | 892 |
123
+ | 20 | 420 | 7.8 | 52.1 | 140 | 3,241 |
124
+ | 30 | 310 | 10.4 | 68.3 | 183 | 5,128 |
125
+
126
+ ## Volume System
127
+
128
+ pyFVS uses a taper-based volume system matching NVEL (National Volume Estimator Library):
129
+
130
+ | Model | Region | Method |
131
+ |-------|--------|--------|
132
+ | **Clark** | Eastern (SN, NE, CS, LS) | 3-segment profile with analytic integration |
133
+ | **Flewelling** | Western (PN, WC, OP) | 4-segment variable-shape profile |
134
+ | **Combined-variable** | Fallback | V = a + b * D²H (Amateis & Burkhart 1987) |
135
+
136
+ Merchandising supports Scribner Decimal C, International 1/4", and Doyle board-foot rules with per-log bucking.
137
+
138
+ ## Architecture
139
+
140
+ ```
141
+ Stand.initialize_planted() --> Tree objects --> grow() cycles --> mortality / harvest
142
+ | |
143
+ StandMetrics GrowthModels
144
+ Competition HeightDiameter
145
+ Mortality CrownRatio
146
+ HarvestManager BarkRatio
147
+ OutputGenerator TaperVolume
148
+ ```
149
+
150
+ Each `Tree` uses a size-dependent growth model:
151
+ - **Small trees** (DBH < 1"): Height-driven growth via Chapman-Richards
152
+ - **Transition** (1" - 3"): Weighted blend of small and large tree models
153
+ - **Large trees** (DBH > 3"): Diameter-driven growth via variant-specific DDS equations
154
+
155
+ Variant-specific diameter growth equations:
156
+
157
+ | Variant | Equation | Variables |
158
+ |---------|----------|-----------|
159
+ | SN | ln(DDS) | DBH, CR, RELHT, SI, BA, ecounit |
160
+ | LS, CS | DDS (linear) | DBH, CR, RELDBH, SI, BA, BAL |
161
+ | PN, WC | ln(DDS) | DBH, CR, RELHT, SI, BA, BAL, elevation, slope, aspect |
162
+ | NE | BA growth (iterative) | DBH, SI, BAL, CR |
163
+ | OP | ln(DG) direct | DBH, CR, SI, BA, BAL |
164
+
165
+ ## Configuration
166
+
167
+ Species parameters stored in YAML with variant-specific coefficient files in JSON:
168
+
169
+ ```
170
+ src/pyfvs/cfg/
171
+ species/*.yaml # SN species configs (90 species)
172
+ sn_*.json # SN variant coefficients
173
+ ls/species/*.yaml # LS species configs (67 species)
174
+ ls/ls_*.json # LS variant coefficients
175
+ pn/, wc/, ne/, cs/, op/ # Other variant directories
176
+ taper/ # Taper model coefficients
177
+ clark_r8_coefficients.json
178
+ clark_r9_coefficients.json
179
+ flewelling_coefficients.json
180
+ ```
181
+
182
+ ## Testing
183
+
184
+ ```bash
185
+ # Run all tests (~1000 tests)
186
+ uv run pytest
187
+
188
+ # Run specific variant tests
189
+ uv run pytest tests/test_ls_variant.py
190
+ uv run pytest tests/test_pn_variant.py
191
+ uv run pytest tests/test_taper.py
192
+ ```
193
+
194
+ ## References
195
+
196
+ - [FVS Documentation](https://www.fs.usda.gov/fmsc/fvs/) &mdash; USDA Forest Service
197
+ - [FVS Essential Guide (GTR-WO-102)](https://www.fs.usda.gov/research/treesearch/62574) &mdash; Dixon (2023)
198
+ - Clark, A. et al. (1991). Stem profile equations for southern tree species. USDA-FS Research Paper SE-282.
199
+ - Flewelling, J.W. (1994). Stem form equation development notes. USDA-FS.
200
+ - Amateis, R.L. & Burkhart, H.E. (1987). Tree volume and taper. *Forest Science* 33(2).
201
+
202
+ ## Citation
203
+
204
+ ```bibtex
205
+ @software{pyfvs2025,
206
+ title = {pyFVS: Python Implementation of the Forest Vegetation Simulator},
207
+ author = {Mihiar, Christopher},
208
+ year = {2025},
209
+ url = {https://github.com/mihiarc/pyfvs}
210
+ }
211
+ ```
212
+
213
+ ## License
214
+
215
+ MIT
216
+
217
+ ---
218
+
219
+ <div align="center">
220
+ <sub>Built by <a href="https://github.com/mihiarc">Chris Mihiar</a></sub>
221
+ </div>
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fvs-python"
7
- version = "0.2.4"
8
- description = "Python implementation of the Forest Vegetation Simulator - Part of the FIA Python Ecosystem"
7
+ version = "0.3.0"
8
+ description = "Python implementation of the USDA Forest Vegetation Simulator (FVS) with 10 regional variants, taper-based volume, and 500+ species configurations"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
11
11
  authors = [
@@ -21,20 +21,26 @@ keywords = [
21
21
  "growth-simulation",
22
22
  "yield-tables",
23
23
  "forestry",
24
- # Species & regions
25
- "southern-pine",
24
+ "timber-volume",
25
+ "taper-equations",
26
+ # Regional variants
27
+ "southern-variant",
28
+ "lake-states",
29
+ "pacific-northwest",
30
+ "northeast",
31
+ "central-states",
32
+ "organon",
33
+ # Species groups
34
+ "douglas-fir",
26
35
  "loblolly-pine",
27
- "longleaf-pine",
28
- "slash-pine",
29
- "shortleaf-pine",
36
+ "red-maple",
30
37
  # Methods
31
- "chapman-richards",
32
38
  "individual-tree-growth",
33
39
  "stand-projection",
34
- "timber-volume",
40
+ "chapman-richards",
41
+ "nvel",
35
42
  # Ecosystem
36
43
  "fia",
37
- "fiatools",
38
44
  "forest-inventory",
39
45
  "usda",
40
46
  "forest-service",
@@ -51,12 +57,11 @@ classifiers = [
51
57
  "Natural Language :: English",
52
58
  "Environment :: Console",
53
59
  "Programming Language :: Python :: 3",
54
- "Programming Language :: Python :: 3.9",
55
- "Programming Language :: Python :: 3.10",
56
- "Programming Language :: Python :: 3.11",
57
60
  "Programming Language :: Python :: 3.12",
61
+ "Programming Language :: Python :: 3.13",
62
+ "Programming Language :: Python :: 3.14",
58
63
  ]
59
- requires-python = ">=3.8"
64
+ requires-python = ">=3.12"
60
65
  dependencies = [
61
66
  "numpy>=1.21.0",
62
67
  "pandas>=1.3.0",