rafmudaf-floris 3.3.post1.dev316__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 (303) hide show
  1. rafmudaf_floris-3.3.post1.dev316/.codecov.yml +20 -0
  2. rafmudaf_floris-3.3.post1.dev316/.github/ISSUE_TEMPLATE/bug_report.md +78 -0
  3. rafmudaf_floris-3.3.post1.dev316/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. rafmudaf_floris-3.3.post1.dev316/.github/ISSUE_TEMPLATE/feature_request.md +57 -0
  5. rafmudaf_floris-3.3.post1.dev316/.github/PULL_REQUEST_TEMPLATE.md +74 -0
  6. rafmudaf_floris-3.3.post1.dev316/.github/dependabot.yml +12 -0
  7. rafmudaf_floris-3.3.post1.dev316/.github/workflows/check-working-examples.yaml +67 -0
  8. rafmudaf_floris-3.3.post1.dev316/.github/workflows/continuous-integration-workflow.yaml +62 -0
  9. rafmudaf_floris-3.3.post1.dev316/.github/workflows/cpp-backend-tests.yml +58 -0
  10. rafmudaf_floris-3.3.post1.dev316/.github/workflows/deploy-pages.yaml +100 -0
  11. rafmudaf_floris-3.3.post1.dev316/.github/workflows/python-publish.yml +37 -0
  12. rafmudaf_floris-3.3.post1.dev316/.github/workflows/quality-metrics-workflow.yaml +28 -0
  13. rafmudaf_floris-3.3.post1.dev316/.gitignore +48 -0
  14. rafmudaf_floris-3.3.post1.dev316/.pre-commit-config.yaml +26 -0
  15. rafmudaf_floris-3.3.post1.dev316/CONTRIBUTING.md +80 -0
  16. rafmudaf_floris-3.3.post1.dev316/LICENSE.txt +26 -0
  17. rafmudaf_floris-3.3.post1.dev316/PKG-INFO +256 -0
  18. rafmudaf_floris-3.3.post1.dev316/README.md +182 -0
  19. rafmudaf_floris-3.3.post1.dev316/benchmarks/bench.py +163 -0
  20. rafmudaf_floris-3.3.post1.dev316/docs/.nojekyll +0 -0
  21. rafmudaf_floris-3.3.post1.dev316/docs/_config.yml +75 -0
  22. rafmudaf_floris-3.3.post1.dev316/docs/_toc.yml +42 -0
  23. rafmudaf_floris-3.3.post1.dev316/docs/advanced_concepts.ipynb +264 -0
  24. rafmudaf_floris-3.3.post1.dev316/docs/api_docs.md +29 -0
  25. rafmudaf_floris-3.3.post1.dev316/docs/architecture.md +137 -0
  26. rafmudaf_floris-3.3.post1.dev316/docs/bibliography.md +6 -0
  27. rafmudaf_floris-3.3.post1.dev316/docs/cc.yaml +91 -0
  28. rafmudaf_floris-3.3.post1.dev316/docs/code_quality.ipynb +310 -0
  29. rafmudaf_floris-3.3.post1.dev316/docs/dev_guide.md +411 -0
  30. rafmudaf_floris-3.3.post1.dev316/docs/docs_image.png +0 -0
  31. rafmudaf_floris-3.3.post1.dev316/docs/empirical_gauss_model.md +189 -0
  32. rafmudaf_floris-3.3.post1.dev316/docs/floating_wind_turbine.md +16 -0
  33. rafmudaf_floris-3.3.post1.dev316/docs/floris_models.ipynb +390 -0
  34. rafmudaf_floris-3.3.post1.dev316/docs/gch.yaml +243 -0
  35. rafmudaf_floris-3.3.post1.dev316/docs/heterogeneous_map.ipynb +407 -0
  36. rafmudaf_floris-3.3.post1.dev316/docs/index.md +71 -0
  37. rafmudaf_floris-3.3.post1.dev316/docs/input_reference_main.md +11 -0
  38. rafmudaf_floris-3.3.post1.dev316/docs/input_reference_turbine.md +9 -0
  39. rafmudaf_floris-3.3.post1.dev316/docs/installation.md +132 -0
  40. rafmudaf_floris-3.3.post1.dev316/docs/intro_concepts.ipynb +998 -0
  41. rafmudaf_floris-3.3.post1.dev316/docs/jensen.yaml +91 -0
  42. rafmudaf_floris-3.3.post1.dev316/docs/layout_optimization.md +105 -0
  43. rafmudaf_floris-3.3.post1.dev316/docs/multidimensional_wind_turbine.ipynb +175 -0
  44. rafmudaf_floris-3.3.post1.dev316/docs/nrel_5MW.yaml +299 -0
  45. rafmudaf_floris-3.3.post1.dev316/docs/operation_models_user.ipynb +748 -0
  46. rafmudaf_floris-3.3.post1.dev316/docs/plot_complex_docs.png +0 -0
  47. rafmudaf_floris-3.3.post1.dev316/docs/powerthrust_helix.png +0 -0
  48. rafmudaf_floris-3.3.post1.dev316/docs/references.bib +404 -0
  49. rafmudaf_floris-3.3.post1.dev316/docs/turbine_library.md +68 -0
  50. rafmudaf_floris-3.3.post1.dev316/docs/turbine_models.ipynb +170 -0
  51. rafmudaf_floris-3.3.post1.dev316/docs/v3_to_v4.md +197 -0
  52. rafmudaf_floris-3.3.post1.dev316/docs/wake_models.ipynb +393 -0
  53. rafmudaf_floris-3.3.post1.dev316/docs/wind_data_user.ipynb +1118 -0
  54. rafmudaf_floris-3.3.post1.dev316/examples/001_opening_floris_computing_power.py +64 -0
  55. rafmudaf_floris-3.3.post1.dev316/examples/002_visualizations.py +96 -0
  56. rafmudaf_floris-3.3.post1.dev316/examples/003_wind_data_objects.py +256 -0
  57. rafmudaf_floris-3.3.post1.dev316/examples/004_set.py +105 -0
  58. rafmudaf_floris-3.3.post1.dev316/examples/005_getting_power.py +144 -0
  59. rafmudaf_floris-3.3.post1.dev316/examples/006_get_farm_aep.py +102 -0
  60. rafmudaf_floris-3.3.post1.dev316/examples/007_sweeping_variables.py +217 -0
  61. rafmudaf_floris-3.3.post1.dev316/examples/008_uncertain_models.py +160 -0
  62. rafmudaf_floris-3.3.post1.dev316/examples/009_parallel_models.py +95 -0
  63. rafmudaf_floris-3.3.post1.dev316/examples/010_compare_farm_power_with_neighbor.py +76 -0
  64. rafmudaf_floris-3.3.post1.dev316/examples/_convert_examples_to_notebooks.py +127 -0
  65. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/001_opt_yaw_single_ws.py +91 -0
  66. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/002_opt_yaw_single_ws_uncertain.py +112 -0
  67. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/003_opt_yaw_multiple_ws.py +122 -0
  68. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/004_optimize_yaw_aep.py +168 -0
  69. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/005_optimize_yaw_aep_parallel.py +130 -0
  70. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/006_compare_yaw_optimizers.py +204 -0
  71. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/007_optimize_yaw_with_neighbor_farms.py +323 -0
  72. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_optimization/008_optimize_yaw_with_disabled_turbines.py +48 -0
  73. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_types/001_derating_control.py +95 -0
  74. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_types/002_disable_turbines.py +79 -0
  75. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_types/003_setting_yaw_and_disabling.py +83 -0
  76. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_types/004_helix_active_wake_mixing.py +140 -0
  77. rafmudaf_floris-3.3.post1.dev316/examples/examples_control_types/005_peak_shaving.py +124 -0
  78. rafmudaf_floris-3.3.post1.dev316/examples/examples_emgauss/001_empirical_gauss_velocity_deficit_parameters.py +198 -0
  79. rafmudaf_floris-3.3.post1.dev316/examples/examples_emgauss/002_empirical_gauss_deflection_parameters.py +228 -0
  80. rafmudaf_floris-3.3.post1.dev316/examples/examples_floating/001_floating_turbine_models.py +144 -0
  81. rafmudaf_floris-3.3.post1.dev316/examples/examples_floating/002_floating_vs_fixedbottom_farm.py +133 -0
  82. rafmudaf_floris-3.3.post1.dev316/examples/examples_floating/003_tilt_driven_vertical_wake_deflection.py +91 -0
  83. rafmudaf_floris-3.3.post1.dev316/examples/examples_get_flow/001_extract_wind_speed_at_turbines.py +39 -0
  84. rafmudaf_floris-3.3.post1.dev316/examples/examples_get_flow/002_extract_wind_speed_at_points.py +78 -0
  85. rafmudaf_floris-3.3.post1.dev316/examples/examples_get_flow/003_extract_turbulence_intensity_at_points.py +80 -0
  86. rafmudaf_floris-3.3.post1.dev316/examples/examples_get_flow/004_plot_velocity_deficit_profiles.py +195 -0
  87. rafmudaf_floris-3.3.post1.dev316/examples/examples_heterogeneous/001_heterogeneous_inflow_single.py +84 -0
  88. rafmudaf_floris-3.3.post1.dev316/examples/examples_heterogeneous/002_heterogeneous_using_wind_data.py +146 -0
  89. rafmudaf_floris-3.3.post1.dev316/examples/examples_heterogeneous/003_heterogeneous_speedup_by_wd_and_ws.py +113 -0
  90. rafmudaf_floris-3.3.post1.dev316/examples/examples_heterogeneous/004_heterogeneous_2d_and_3d.py +142 -0
  91. rafmudaf_floris-3.3.post1.dev316/examples/examples_layout_optimization/001_optimize_layout.py +138 -0
  92. rafmudaf_floris-3.3.post1.dev316/examples/examples_layout_optimization/002_optimize_layout_with_heterogeneity.py +156 -0
  93. rafmudaf_floris-3.3.post1.dev316/examples/examples_layout_optimization/003_genetic_random_search.py +82 -0
  94. rafmudaf_floris-3.3.post1.dev316/examples/examples_layout_optimization/004_generate_gridded_layout.py +37 -0
  95. rafmudaf_floris-3.3.post1.dev316/examples/examples_layout_optimization/005_layout_optimization_complex_boundary.py +83 -0
  96. rafmudaf_floris-3.3.post1.dev316/examples/examples_load_optimization/001_lti_and_voc.py +131 -0
  97. rafmudaf_floris-3.3.post1.dev316/examples/examples_load_optimization/002_row_opt_example.py +209 -0
  98. rafmudaf_floris-3.3.post1.dev316/examples/examples_multidim/001_multi_dimensional_cp_ct.py +107 -0
  99. rafmudaf_floris-3.3.post1.dev316/examples/examples_multidim/002_multi_dimensional_cp_ct_2Hs.py +73 -0
  100. rafmudaf_floris-3.3.post1.dev316/examples/examples_multidim/003_multi_dimensional_cp_ct_TI.py +83 -0
  101. rafmudaf_floris-3.3.post1.dev316/examples/examples_operation_models/001_compare_yaw_loss.py +77 -0
  102. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbine/001_reference_turbines.py +125 -0
  103. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbine/002_multiple_turbine_types.py +34 -0
  104. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbine/003_specify_turbine_power_curve.py +82 -0
  105. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbopark/001_compare_turbopark_implementations.py +196 -0
  106. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbopark/comparison_data/Rowpark_Orsted.csv +11 -0
  107. rafmudaf_floris-3.3.post1.dev316/examples/examples_turbopark/comparison_data/WindDirection_Sweep_Orsted.csv +702 -0
  108. rafmudaf_floris-3.3.post1.dev316/examples/examples_uncertain/001_uncertain_model_params.py +176 -0
  109. rafmudaf_floris-3.3.post1.dev316/examples/examples_uncertain/002_approx_floris_model.py +73 -0
  110. rafmudaf_floris-3.3.post1.dev316/examples/examples_uncertain/003_uncertain_model_with_parallelization.py +86 -0
  111. rafmudaf_floris-3.3.post1.dev316/examples/examples_visualizations/001_layout_visualizations.py +90 -0
  112. rafmudaf_floris-3.3.post1.dev316/examples/examples_visualizations/002_visualize_y_cut_plane.py +33 -0
  113. rafmudaf_floris-3.3.post1.dev316/examples/examples_visualizations/003_visualize_cross_plane.py +37 -0
  114. rafmudaf_floris-3.3.post1.dev316/examples/examples_visualizations/004_visualize_rotor_values.py +33 -0
  115. rafmudaf_floris-3.3.post1.dev316/examples/examples_visualizations/005_visualize_flow_by_sweeping_turbines.py +43 -0
  116. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_data/001_wind_data_comparisons.py +110 -0
  117. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_data/002_generate_ti.py +74 -0
  118. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_data/003_generate_value.py +81 -0
  119. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_resource_grid/000_generate_example_wrg.py +227 -0
  120. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_resource_grid/001_wind_rose_wrg.py +77 -0
  121. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_resource_grid/002_set_floris_with_wrg.py +106 -0
  122. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_resource_grid/003_wrg_compar_layout_optimization.py +217 -0
  123. rafmudaf_floris-3.3.post1.dev316/examples/examples_wind_resource_grid/wrg_example.wrg +7 -0
  124. rafmudaf_floris-3.3.post1.dev316/examples/inputs/cc.yaml +91 -0
  125. rafmudaf_floris-3.3.post1.dev316/examples/inputs/emgauss.yaml +107 -0
  126. rafmudaf_floris-3.3.post1.dev316/examples/inputs/emgauss_helix.yaml +109 -0
  127. rafmudaf_floris-3.3.post1.dev316/examples/inputs/gch.yaml +243 -0
  128. rafmudaf_floris-3.3.post1.dev316/examples/inputs/gch_heterogeneous_inflow.yaml +104 -0
  129. rafmudaf_floris-3.3.post1.dev316/examples/inputs/gch_multi_dim_cp_ct.yaml +114 -0
  130. rafmudaf_floris-3.3.post1.dev316/examples/inputs/gch_multi_dim_cp_ct_TI.yaml +114 -0
  131. rafmudaf_floris-3.3.post1.dev316/examples/inputs/gch_multiple_turbine_types.yaml +90 -0
  132. rafmudaf_floris-3.3.post1.dev316/examples/inputs/jensen.yaml +91 -0
  133. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turbine_files/iea_15MW_multi_dim_TI.csv +109 -0
  134. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turbine_files/iea_15MW_multi_dim_TI.yaml +13 -0
  135. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turbopark.yaml +94 -0
  136. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turbopark_cubature.yaml +59 -0
  137. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turboparkgauss.yaml +63 -0
  138. rafmudaf_floris-3.3.post1.dev316/examples/inputs/turboparkgauss_cubature.yaml +59 -0
  139. rafmudaf_floris-3.3.post1.dev316/examples/inputs/wind_rose.csv +1873 -0
  140. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/emgauss_fixed.yaml +107 -0
  141. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/emgauss_floating.yaml +107 -0
  142. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/emgauss_floating_fixedtilt15.yaml +103 -0
  143. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/emgauss_floating_fixedtilt5.yaml +103 -0
  144. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/gch_fixed.yaml +87 -0
  145. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/gch_floating.yaml +88 -0
  146. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/gch_floating_defined_floating.yaml +87 -0
  147. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/turbine_files/nrel_5MW_fixed.yaml +188 -0
  148. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/turbine_files/nrel_5MW_floating.yaml +188 -0
  149. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/turbine_files/nrel_5MW_floating_defined_floating.yaml +188 -0
  150. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/turbine_files/nrel_5MW_floating_fixedtilt15.yaml +188 -0
  151. rafmudaf_floris-3.3.post1.dev316/examples/inputs_floating/turbine_files/nrel_5MW_floating_fixedtilt5.yaml +188 -0
  152. rafmudaf_floris-3.3.post1.dev316/floris/__init__.py +24 -0
  153. rafmudaf_floris-3.3.post1.dev316/floris/convert_floris_input_v3_to_v4.py +93 -0
  154. rafmudaf_floris-3.3.post1.dev316/floris/convert_turbine_v3_to_v4.py +86 -0
  155. rafmudaf_floris-3.3.post1.dev316/floris/core/__init__.py +61 -0
  156. rafmudaf_floris-3.3.post1.dev316/floris/core/base.py +65 -0
  157. rafmudaf_floris-3.3.post1.dev316/floris/core/core.py +413 -0
  158. rafmudaf_floris-3.3.post1.dev316/floris/core/cpp_core.py +712 -0
  159. rafmudaf_floris-3.3.post1.dev316/floris/core/farm.py +526 -0
  160. rafmudaf_floris-3.3.post1.dev316/floris/core/flow_field.py +406 -0
  161. rafmudaf_floris-3.3.post1.dev316/floris/core/grid.py +668 -0
  162. rafmudaf_floris-3.3.post1.dev316/floris/core/rotor_velocity.py +238 -0
  163. rafmudaf_floris-3.3.post1.dev316/floris/core/solver.py +1581 -0
  164. rafmudaf_floris-3.3.post1.dev316/floris/core/turbine/__init__.py +11 -0
  165. rafmudaf_floris-3.3.post1.dev316/floris/core/turbine/controller_dependent_operation_model.py +986 -0
  166. rafmudaf_floris-3.3.post1.dev316/floris/core/turbine/operation_models.py +740 -0
  167. rafmudaf_floris-3.3.post1.dev316/floris/core/turbine/turbine.py +787 -0
  168. rafmudaf_floris-3.3.post1.dev316/floris/core/turbine/unified_momentum_model.py +523 -0
  169. rafmudaf_floris-3.3.post1.dev316/floris/core/wake.py +164 -0
  170. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_combination/__init__.py +4 -0
  171. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_combination/fls.py +32 -0
  172. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_combination/max.py +38 -0
  173. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_combination/sosfs.py +33 -0
  174. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_deflection/__init__.py +5 -0
  175. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_deflection/empirical_gauss.py +141 -0
  176. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_deflection/gauss.py +510 -0
  177. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_deflection/jimenez.py +130 -0
  178. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_deflection/none.py +54 -0
  179. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_turbulence/__init__.py +4 -0
  180. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_turbulence/crespo_hernandez.py +103 -0
  181. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_turbulence/none.py +32 -0
  182. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_turbulence/wake_induced_mixing.py +76 -0
  183. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/__init__.py +8 -0
  184. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/cumulative_gauss_curl.py +232 -0
  185. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/empirical_gauss.py +308 -0
  186. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/gauss.py +237 -0
  187. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/jensen.py +127 -0
  188. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/none.py +50 -0
  189. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/turbopark.py +181 -0
  190. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/turbopark_lookup_table.mat +0 -0
  191. rafmudaf_floris-3.3.post1.dev316/floris/core/wake_velocity/turboparkgauss.py +130 -0
  192. rafmudaf_floris-3.3.post1.dev316/floris/cut_plane.py +485 -0
  193. rafmudaf_floris-3.3.post1.dev316/floris/default_inputs.yaml +106 -0
  194. rafmudaf_floris-3.3.post1.dev316/floris/floris_model.py +1929 -0
  195. rafmudaf_floris-3.3.post1.dev316/floris/flow_visualization.py +773 -0
  196. rafmudaf_floris-3.3.post1.dev316/floris/heterogeneous_map.py +534 -0
  197. rafmudaf_floris-3.3.post1.dev316/floris/layout_visualization.py +591 -0
  198. rafmudaf_floris-3.3.post1.dev316/floris/logging_manager.py +144 -0
  199. rafmudaf_floris-3.3.post1.dev316/floris/optimization/__init__.py +5 -0
  200. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/__init__.py +0 -0
  201. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_base.py +289 -0
  202. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_boundary_grid.py +648 -0
  203. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_gridded.py +210 -0
  204. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_pyoptsparse.py +231 -0
  205. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_pyoptsparse_spread.py +212 -0
  206. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_random_search.py +745 -0
  207. rafmudaf_floris-3.3.post1.dev316/floris/optimization/layout_optimization/layout_optimization_scipy.py +263 -0
  208. rafmudaf_floris-3.3.post1.dev316/floris/optimization/load_optimization/__init__.py +0 -0
  209. rafmudaf_floris-3.3.post1.dev316/floris/optimization/load_optimization/load_optimization.py +542 -0
  210. rafmudaf_floris-3.3.post1.dev316/floris/optimization/other/__init__.py +1 -0
  211. rafmudaf_floris-3.3.post1.dev316/floris/optimization/other/boundary_grid.py +448 -0
  212. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/__init__.py +0 -0
  213. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/yaw_optimization_base.py +631 -0
  214. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/yaw_optimization_tools.py +130 -0
  215. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/yaw_optimizer_geometric.py +243 -0
  216. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/yaw_optimizer_scipy.py +148 -0
  217. rafmudaf_floris-3.3.post1.dev316/floris/optimization/yaw_optimization/yaw_optimizer_sr.py +333 -0
  218. rafmudaf_floris-3.3.post1.dev316/floris/par_floris_model.py +520 -0
  219. rafmudaf_floris-3.3.post1.dev316/floris/parallel_floris_model.py +690 -0
  220. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/__init__.py +5 -0
  221. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/demo_cp_ct_surfaces/iea_10MW_demo_cp_ct_surface.npz +0 -0
  222. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/demo_cp_ct_surfaces/iea_15MW_demo_cp_ct_surface.npz +0 -0
  223. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/demo_cp_ct_surfaces/nrel_5MW_demo_cp_ct_surface.npz +0 -0
  224. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_10MW.yaml +103 -0
  225. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_15MW.yaml +195 -0
  226. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_15MW_floating_multi_dim_cp_ct.yaml +67 -0
  227. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_15MW_multi_dim_TI_u.csv +109 -0
  228. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_15MW_multi_dim_Tp_Hs.csv +217 -0
  229. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_15MW_multi_dim_cp_ct.yaml +13 -0
  230. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/iea_22MW.yaml +122 -0
  231. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/nrel_5MW.yaml +299 -0
  232. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/turbine_previewer.py +846 -0
  233. rafmudaf_floris-3.3.post1.dev316/floris/turbine_library/turbine_utilities.py +197 -0
  234. rafmudaf_floris-3.3.post1.dev316/floris/type_dec.py +278 -0
  235. rafmudaf_floris-3.3.post1.dev316/floris/uncertain_floris_model.py +1309 -0
  236. rafmudaf_floris-3.3.post1.dev316/floris/utilities.py +459 -0
  237. rafmudaf_floris-3.3.post1.dev316/floris/wind_data.py +3508 -0
  238. rafmudaf_floris-3.3.post1.dev316/profiling/conftest.py +739 -0
  239. rafmudaf_floris-3.3.post1.dev316/profiling/linux_perf.py +56 -0
  240. rafmudaf_floris-3.3.post1.dev316/profiling/profiling.py +54 -0
  241. rafmudaf_floris-3.3.post1.dev316/profiling/quality_metrics.py +135 -0
  242. rafmudaf_floris-3.3.post1.dev316/profiling/serial_vectorize.py +130 -0
  243. rafmudaf_floris-3.3.post1.dev316/profiling/timing.py +208 -0
  244. rafmudaf_floris-3.3.post1.dev316/pyproject.toml +247 -0
  245. rafmudaf_floris-3.3.post1.dev316/rafmudaf_floris.egg-info/PKG-INFO +256 -0
  246. rafmudaf_floris-3.3.post1.dev316/rafmudaf_floris.egg-info/SOURCES.txt +301 -0
  247. rafmudaf_floris-3.3.post1.dev316/rafmudaf_floris.egg-info/dependency_links.txt +1 -0
  248. rafmudaf_floris-3.3.post1.dev316/rafmudaf_floris.egg-info/requires.txt +26 -0
  249. rafmudaf_floris-3.3.post1.dev316/rafmudaf_floris.egg-info/top_level.txt +1 -0
  250. rafmudaf_floris-3.3.post1.dev316/setup.cfg +4 -0
  251. rafmudaf_floris-3.3.post1.dev316/tests/__init__.py +0 -0
  252. rafmudaf_floris-3.3.post1.dev316/tests/base_unit_test.py +39 -0
  253. rafmudaf_floris-3.3.post1.dev316/tests/conftest.py +739 -0
  254. rafmudaf_floris-3.3.post1.dev316/tests/controller_dependent_operation_model_unit_test.py +554 -0
  255. rafmudaf_floris-3.3.post1.dev316/tests/convert_v3_to_v4_test.py +52 -0
  256. rafmudaf_floris-3.3.post1.dev316/tests/core_unit_test.py +47 -0
  257. rafmudaf_floris-3.3.post1.dev316/tests/data/__init__.py +0 -0
  258. rafmudaf_floris-3.3.post1.dev316/tests/data/iea_15MW_multi_dim_TI.csv +109 -0
  259. rafmudaf_floris-3.3.post1.dev316/tests/data/input_full.yaml +90 -0
  260. rafmudaf_floris-3.3.post1.dev316/tests/data/nrel_5MW.yaml +299 -0
  261. rafmudaf_floris-3.3.post1.dev316/tests/data/nrel_5MW_custom.yaml +174 -0
  262. rafmudaf_floris-3.3.post1.dev316/tests/data/wind_rose.csv +4 -0
  263. rafmudaf_floris-3.3.post1.dev316/tests/data/wind_ti_rose.csv +4 -0
  264. rafmudaf_floris-3.3.post1.dev316/tests/data/wrg_test.wrg +7 -0
  265. rafmudaf_floris-3.3.post1.dev316/tests/farm_unit_test.py +223 -0
  266. rafmudaf_floris-3.3.post1.dev316/tests/floris_model_integration_test.py +1018 -0
  267. rafmudaf_floris-3.3.post1.dev316/tests/flow_field_unit_test.py +120 -0
  268. rafmudaf_floris-3.3.post1.dev316/tests/geometric_yaw_unit_test.py +155 -0
  269. rafmudaf_floris-3.3.post1.dev316/tests/heterogeneous_map_integration_test.py +585 -0
  270. rafmudaf_floris-3.3.post1.dev316/tests/layout_optimization_integration_test.py +289 -0
  271. rafmudaf_floris-3.3.post1.dev316/tests/layout_visualization_test.py +47 -0
  272. rafmudaf_floris-3.3.post1.dev316/tests/load_optimization_test.py +150 -0
  273. rafmudaf_floris-3.3.post1.dev316/tests/par_floris_model_unit_test.py +526 -0
  274. rafmudaf_floris-3.3.post1.dev316/tests/parallel_floris_model_integration_test.py +121 -0
  275. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/cumulative_curl_regression_test.py +753 -0
  276. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/empirical_gauss_regression_test.py +976 -0
  277. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/gauss_regression_test.py +1074 -0
  278. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/jensen_jimenez_regression_test.py +505 -0
  279. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/none_regression_test.py +418 -0
  280. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/random_search_layout_opt_regression_test.py +142 -0
  281. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/scipy_layout_opt_regression.py +137 -0
  282. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/turbopark_regression_test.py +450 -0
  283. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/turboparkgauss_regression_test.py +494 -0
  284. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/turbulence_models_regression_test.py +30 -0
  285. rafmudaf_floris-3.3.post1.dev316/tests/reg_tests/yaw_optimization_regression_test.py +187 -0
  286. rafmudaf_floris-3.3.post1.dev316/tests/rotor_velocity_unit_test.py +280 -0
  287. rafmudaf_floris-3.3.post1.dev316/tests/serial_refine_unit_test.py +107 -0
  288. rafmudaf_floris-3.3.post1.dev316/tests/turbine_grid_unit_test.py +87 -0
  289. rafmudaf_floris-3.3.post1.dev316/tests/turbine_multi_dim_unit_test.py +469 -0
  290. rafmudaf_floris-3.3.post1.dev316/tests/turbine_operation_models_unit_test.py +700 -0
  291. rafmudaf_floris-3.3.post1.dev316/tests/turbine_unit_test.py +456 -0
  292. rafmudaf_floris-3.3.post1.dev316/tests/turbine_utilities_unit_test.py +123 -0
  293. rafmudaf_floris-3.3.post1.dev316/tests/turboparkgauss_unit_test.py +80 -0
  294. rafmudaf_floris-3.3.post1.dev316/tests/type_dec_unit_test.py +206 -0
  295. rafmudaf_floris-3.3.post1.dev316/tests/uncertain_floris_model_integration_test.py +705 -0
  296. rafmudaf_floris-3.3.post1.dev316/tests/unified_momentum_operation_model_unit_test.py +58 -0
  297. rafmudaf_floris-3.3.post1.dev316/tests/utilities_unit_test.py +278 -0
  298. rafmudaf_floris-3.3.post1.dev316/tests/v3_to_v4_convert_test/gch.yaml +237 -0
  299. rafmudaf_floris-3.3.post1.dev316/tests/v3_to_v4_convert_test/nrel_5MW_v3.yaml +212 -0
  300. rafmudaf_floris-3.3.post1.dev316/tests/wake_unit_tests.py +14 -0
  301. rafmudaf_floris-3.3.post1.dev316/tests/wind_data_integration_test.py +1305 -0
  302. rafmudaf_floris-3.3.post1.dev316/tests/wind_rose_wrg_test.py +221 -0
  303. rafmudaf_floris-3.3.post1.dev316/tests/yaw_optimization_integration_test.py +66 -0
@@ -0,0 +1,20 @@
1
+ # Codecov configuration file
2
+
3
+ comment: false
4
+
5
+ coverage:
6
+ range: 0..100 # sets the range for the color bar in the dashboard
7
+ round: down
8
+ precision: 2
9
+ status:
10
+ project:
11
+ default:
12
+ # allow coverage to drop by this amount and still post success
13
+ threshold: 10
14
+ patch:
15
+ default:
16
+ threshold: 10
17
+
18
+ ignore:
19
+ - "setup.py"
20
+ - "tests/"
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a bug to help us improve
4
+ title: 'Bug report'
5
+ labels: "Type: Bug"
6
+ ---
7
+
8
+ <!--
9
+ IMPORTANT NOTES
10
+
11
+ Thank you for taking the time to report a bug. If you aren't certain whether an issue
12
+ is a bug, please first open a Discussion. Before submitting, please reread your
13
+ description to ensure that other readers can reasonably understand the issue
14
+ you're facing and the impact on your workflow or results.
15
+
16
+ This form is written in GitHub's Markdown format. For a reference on this type
17
+ of syntax, see GitHub's documentation:
18
+ https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
19
+
20
+ This template contains guidance for your submission within the < ! - -, - - > blocks.
21
+ These are comments in HTML syntax and will not appear in the submission.
22
+ Be sure to use the "Preview" feature on GitHub to ensure your submission is formatted as intended.
23
+
24
+ When including code snippets, please paste the text itself and wrap the code block with
25
+ ticks (see the other character on the tilde ~ key in a US keyboard) to format it as code.
26
+ For example, Python code should be wrapped in ticks like this:
27
+ ```python
28
+ def a_func():
29
+ return 1
30
+
31
+ a = 1
32
+ b = a_func()
33
+ print(a + b)
34
+ ```
35
+ This is preferred over screen shots since it is searchable and others can copy/paste
36
+ the text to run it.
37
+ -->
38
+
39
+ # Add meaningful title here
40
+ <!--
41
+ A clear and concise description of the bug including what happened
42
+ and what you expected to happen.
43
+ -->
44
+
45
+ ## How to reproduce
46
+ <!--
47
+ Describe how another person with no context can recreate this issue.
48
+ It is typically very helpful to reduce the problem as much as possible
49
+ and share a minimum working example. See the note above on including
50
+ code as text rather than screenshots.
51
+ -->
52
+
53
+ ## Relevant output
54
+ <!--
55
+ Include any output, plots, or other means of communication here to add context to the problem.
56
+ -->
57
+
58
+ ## Floris version
59
+ <!--
60
+ Share your floris version and how you installed it. You can print the floris version from
61
+ a Python REPL or script with these commands:
62
+ ```python
63
+ import floris
64
+ print(floris.__version__)
65
+ ```
66
+ -->
67
+
68
+ ## System Information
69
+ <!-- Add your information here. -->
70
+ - OS: <e.g. Ubuntu 20.04 or macOS 10.12>
71
+ - Python version: <Result of `python --version`>
72
+ - Library versions
73
+ - Results of `pip freeze`, for example
74
+ - matplotlib
75
+ - numpy
76
+ - numexpr
77
+ - scipy
78
+ - pandas
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Usage question
4
+ url: https://github.com/NatLabRockies/floris/discussions
5
+ about: Have any questions about using FLORIS? Post in Discussions to engage with the NLR team and FLORIS community.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: 'Feature request'
5
+ labels: 'Type: Enhancement'
6
+ ---
7
+
8
+ <!--
9
+ IMPORTANT NOTES
10
+
11
+ Thank you for taking the time to suggest a feature. Before submitting,
12
+ please reread your description to ensure that other readers can reasonably
13
+ understand the motivation and proposed solution.
14
+
15
+ This form is written in GitHub's Markdown format. For a reference on this type
16
+ of syntax, see GitHub's documentation:
17
+ https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
18
+
19
+ This template contains guidance for your submission within the < ! - -, - - > blocks.
20
+ These are comments in HTML syntax and will not appear in the submission.
21
+ Be sure to use the "Preview" feature on GitHub to ensure your submission is formatted as intended.
22
+
23
+ When including code snippets, please paste the text itself and wrap the code block with
24
+ ticks (see the other character on the tilde ~ key in a US keyboard) to format it as code.
25
+ For example, Python code should be wrapped in ticks like this:
26
+ ```python
27
+ def a_func():
28
+ return 1
29
+
30
+ a = 1
31
+ b = a_func()
32
+ print(a + b)
33
+ ```
34
+ This is preferred over screen shots since it is searchable and others can copy/paste
35
+ the text to run it.
36
+ -->
37
+
38
+ # Add meaningful title here
39
+ <!--
40
+ High level description of the feature request including motivation and background.
41
+ -->
42
+
43
+ ## Proposed solution
44
+ <!--
45
+ Here's an opportunity to prototype a feature. Please include pseudocode, images, or
46
+ any other visual aids to communicate the idea.
47
+ -->
48
+
49
+ ## Alternatives considered
50
+ <!--
51
+ Describe workarounds or alternatives even if hacky or incomplete.
52
+ -->
53
+
54
+ ## Additional context
55
+ <!--
56
+ Optional. Provide anything else that helps to communicate the idea here.
57
+ -->
@@ -0,0 +1,74 @@
1
+
2
+ <!--
3
+ IMPORTANT NOTES
4
+
5
+ Is this pull request ready to be merged?
6
+ - Do the existing tests pass and new tests added for new code?
7
+ - Is all development in a state where you are proud to share it with others and
8
+ willing to ask other people to take the time to review it?
9
+ - Is it documented in such a way that a review can reasonably understand what you've
10
+ done and why you've done it? Can other users understand how to use your changes?
11
+ If not but opening the pull request will facilitate development, make it a "draft" pull request
12
+
13
+ This form is written in GitHub's Markdown format. For a reference on this type
14
+ of syntax, see GitHub's documentation:
15
+ https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax
16
+
17
+ This template contains guidance for your submission within the < ! - -, - - > blocks.
18
+ These are comments in HTML syntax and will not appear in the submission.
19
+ Be sure to use the "Preview" feature on GitHub to ensure your submission is formatted as intended.
20
+
21
+ When including code snippets, please paste the text itself and wrap the code block with
22
+ ticks (see the other character on the tilde ~ key in a US keyboard) to format it as code.
23
+ For example, Python code should be wrapped in ticks like this:
24
+ ```python
25
+ def a_func():
26
+ return 1
27
+
28
+ a = 1
29
+ b = a_func()
30
+ print(a + b)
31
+ ```
32
+ This is preferred over screen shots since it is searchable and others can copy/paste
33
+ the text to run it.
34
+ -->
35
+
36
+
37
+ # Add meaningful title here
38
+ <!--
39
+ Be sure to title your pull request so that readers can scan through the list of PR's and understand
40
+ what this one involves. It should be a few well selected words to get the point across. If you have
41
+ a hard time choosing a brief title, consider splitting the pull request into multiple pull requests.
42
+ Keep in mind that the title will be automatically included in the release notes.
43
+ -->
44
+ Describe your feature here.
45
+
46
+ ## Related issue
47
+ <!--
48
+ If one exists, link to a related GitHub Issue.
49
+ -->
50
+
51
+ ## Impacted areas of the software
52
+ <!--
53
+ List any modules or other areas which should be impacted by this pull request. This helps to determine the verification tests.
54
+ -->
55
+
56
+ ## Additional supporting information
57
+ <!--
58
+ Add any other context about the problem here.
59
+ -->
60
+
61
+ ## Test results, if applicable
62
+ <!--
63
+ Add the results from unit tests and regression tests here along with justification for any failing test cases.
64
+ -->
65
+
66
+ <!--
67
+ __ For NLR use __
68
+ Release checklist:
69
+ - Update the version in
70
+ - [ ] README.md (appears twice in README.md)
71
+ - [ ] pyproject.toml
72
+ - [ ] Verify docs builds correctly
73
+ - [ ] Create a tag in the NREL/FLORIS repository
74
+ -->
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/" # Location of package manifests
5
+ target-branch: "develop"
6
+ schedule:
7
+ interval: "monthly"
8
+ labels:
9
+ - "package"
10
+ ignore:
11
+ - dependency-name: "*"
12
+ update-types: ["version-update:semver-minor", "version-update:semver-patch"]
@@ -0,0 +1,67 @@
1
+ name: Check Examples APIs
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+
7
+ examples-check:
8
+ runs-on: ${{ matrix.os }}
9
+ strategy:
10
+ matrix:
11
+ python-version: ["3.10", "3.14"]
12
+ os: [ubuntu-latest]
13
+ fail-fast: False
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+ - name: Set up Python ${{ matrix.python-version }}
18
+ uses: actions/setup-python@v4
19
+ with:
20
+ python-version: ${{ matrix.python-version }}
21
+ - name: Install project
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install .
25
+ pip install nbconvert # For converting Jupyter notebook to python script in the next step
26
+
27
+ - name: Run examples (ubuntu, macos)
28
+ # Run all examples and test that they finish successfully. Do not evaluate the results.
29
+ # Copy the examples to a new directory outside of the repo to ensure that there is no
30
+ # reliance on the repo directory structure.
31
+ run: |
32
+ mkdir -p temp1/temp2/temp3
33
+ cp -rL examples temp1/temp2/temp3/.
34
+ cd temp1/temp2/temp3/examples/
35
+
36
+ error_found=0 # 0 is false
37
+ error_results="Error in example:"
38
+
39
+ # Now run the examples in root and subdirectories
40
+ echo "Running examples"
41
+ for d in . $(find . -type d -name "*examples*"); do
42
+ cd $d
43
+ echo "========================= Example directory- $d"
44
+ for i in *.py; do
45
+ echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Running example- $i"
46
+
47
+ # If "convert_examples" is in i, skip this script
48
+ if [[ $i == *"convert_examples"* ]]; then
49
+ continue
50
+ fi
51
+
52
+ if ! python $i; then
53
+ error_results="${error_results}"$'\n'" - ${i}"
54
+ error_found=1
55
+ fi
56
+ done
57
+ if [ "$d" != "." ]; then
58
+ cd ..
59
+ fi
60
+
61
+ done
62
+
63
+ if [[ $error_found ]]; then
64
+ echo "${error_results}"
65
+ fi
66
+
67
+ exit $error_found
@@ -0,0 +1,62 @@
1
+ name: Automated tests & code coverage
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+
7
+ code-qa-validation:
8
+ runs-on: ${{ matrix.os }}
9
+ strategy:
10
+ matrix:
11
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
12
+ os: [ubuntu-latest, macos-latest, windows-latest]
13
+ fail-fast: False
14
+ env:
15
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
16
+
17
+ steps:
18
+ - uses: actions/checkout@v3
19
+ - name: Set up Python ${{ matrix.python-version }}
20
+ uses: actions/setup-python@v4
21
+ with:
22
+ python-version: ${{ matrix.python-version }}
23
+ - name: Install project
24
+ run: |
25
+ python -m pip install --upgrade pip
26
+ pip install ".[develop]"
27
+ - uses: pre-commit/action@v3.0.0
28
+ - name: Run tests (ubuntu, macos)
29
+ if: matrix.os != 'windows-latest' && (success() || failure()) # Run this step even if the linting step fails
30
+ run: |
31
+ mkdir -p temp1/temp2/temp3
32
+ cp -rL tests temp1/temp2/temp3/.
33
+ cd temp1/temp2/temp3/
34
+
35
+ # -rA displays the captured output for all tests after they're run
36
+ # See the docs: https://doc.pytest.org/en/latest/reference/reference.html#command-line-flags
37
+ pytest -rA tests/ --ignore tests/timing.py --ignore tests/profiling.py --ignore tests/reg_tests/gauss_regression_test.py
38
+ - name: Run tests (windows)
39
+ if: matrix.os == 'windows-latest' && (success() || failure()) # Run this step even if the linting step fails
40
+ run: |
41
+ mkdir -p temp1/temp2/temp3
42
+ cp -r tests temp1/temp2/temp3/.
43
+ cd temp1/temp2/temp3/
44
+
45
+ # -rA displays the captured output for all tests after they're run
46
+ # See the docs: https://doc.pytest.org/en/latest/reference/reference.html#command-line-flags
47
+ pytest -rA tests/ --ignore tests/timing.py --ignore tests/profiling.py --ignore tests/reg_tests/gauss_regression_test.py
48
+ - name: Generate coverage report
49
+ # Run these tests on unit tests only so that we avoid inflating our code
50
+ # coverage through the regression tests
51
+ if: matrix.os == 'ubuntu-latest'
52
+ run: |
53
+ pip install pytest
54
+ pip install pytest-cov
55
+ pytest --cov=./ --cov-report=xml tests/ --ignore tests/reg_tests --ignore tests/timing.py --ignore tests/profiling.py
56
+ - name: Upload coverage to Codecov
57
+ if: ${{ matrix.os == 'ubuntu-latest' && env.CODECOV_TOKEN }} # Don't attempt to upload if the codecov token is not configured
58
+ uses: codecov/codecov-action@v3
59
+ with:
60
+ token: ${{ env.CODECOV_TOKEN }}
61
+ files: ./coverage.xml
62
+ fail_ci_if_error: true
@@ -0,0 +1,58 @@
1
+ name: C++ backend tests (floraf)
2
+
3
+ on:
4
+ push:
5
+ # branches: [floraf]
6
+ branches: ["cpp-v4.6.4"]
7
+ # pull_request:
8
+ # branches: [floraf]
9
+
10
+ jobs:
11
+ cpp-backend-tests:
12
+ name: ${{ matrix.os }} / Python ${{ matrix.python-version }}
13
+ runs-on: ${{ matrix.os }}
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ os: [ubuntu-latest, macos-14]
18
+ python-version: ["3.12"]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+
28
+ - name: Install floris with test dependencies
29
+ # Install floris before torch so that scikit-build-core's cmake step
30
+ # does not attempt to build the (now-removed) floris/cpp extension.
31
+ run: pip install ".[develop]"
32
+
33
+ - name: Install libtorch (CPU)
34
+ # Install the CPU-only torch wheel explicitly so that the floraf wheel
35
+ # does not pull in the heavier CUDA variant from PyPI.
36
+ run: pip install torch --index-url https://download.pytorch.org/whl/cpu
37
+
38
+ - name: Download floraf wheel from private releases
39
+ env:
40
+ GH_TOKEN: ${{ secrets.FLORAF_WHEEL_TOKEN }}
41
+ run: |
42
+ mkdir -p floraf-wheels
43
+ # Download all cp312 wheels; pip will select the platform-compatible one.
44
+ gh release download \
45
+ --repo rafmudaf/floraf \
46
+ --pattern "*cp312*.whl" \
47
+ --dir floraf-wheels/
48
+ ls floraf-wheels/
49
+
50
+ - name: Install floraf wheel
51
+ # --find-links lets pip select the wheel that matches the current platform.
52
+ run: pip install --find-links floraf-wheels/ floraf
53
+
54
+ - name: Run C++ backend integration tests
55
+ env:
56
+ FLORAF_LICENSE_KEY: ${{ secrets.FLORAF_LICENSE_KEY }}
57
+ run: |
58
+ pytest tests/reg_tests/gauss_regression_test.py -v
@@ -0,0 +1,100 @@
1
+ name: deploy-pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - develop
7
+
8
+
9
+ workflow_dispatch: # Allows manual triggering of the workflow
10
+
11
+ # This job installs dependencies, builds the book, and pushes it to `gh-pages`
12
+ jobs:
13
+ deploy-book:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+
18
+ # Install dependencies
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v4
21
+ with:
22
+ python-version: "3"
23
+
24
+ - name: Install dependencies
25
+ run: |
26
+ pip install -e ".[docs, develop]"
27
+
28
+ # Make a copy of the examples folder within the docs folder
29
+ - name: Copy examples to docs
30
+ working-directory: ${{runner.workspace}}/floris/
31
+ run: |
32
+ rsync -av examples/ docs/examples
33
+ ls docs/examples
34
+
35
+ # Run the script examples/_convert_examples_to_notebooks.py
36
+ - name: Convert examples to notebooks
37
+ working-directory: ${{runner.workspace}}/floris/docs/examples/
38
+ run: |
39
+ pwd
40
+ ls
41
+ python _convert_examples_to_notebooks.py
42
+
43
+ # Build the book
44
+ - name: Build the book
45
+ working-directory: ${{runner.workspace}}/floris/docs/
46
+ run: |
47
+ jupyter-book build .
48
+
49
+ # Push the book's HTML to github-pages
50
+ - name: GitHub Pages action
51
+ uses: peaceiris/actions-gh-pages@v4.0.0
52
+ with:
53
+ github_token: ${{ secrets.GITHUB_TOKEN }}
54
+ publish_dir: ./docs/_build/html
55
+
56
+ # Stash changes before benchmark action
57
+ - name: Stash changes
58
+ working-directory: ${{runner.workspace}}/floris/
59
+ run: |
60
+ git stash
61
+
62
+ - name: Run benchmark
63
+ working-directory: ${{runner.workspace}}/floris/
64
+ run: |
65
+ ls -lah
66
+ cd benchmarks
67
+ pytest bench.py --benchmark-json output.json
68
+
69
+ # Store benchmark result and create the benchmark pages
70
+ # Update the index.html and data.js files in the
71
+ # dev/bench folder of the benches branch
72
+ # dev/bench is the default folder for pytest-benchmark
73
+ - name: Store benchmark result
74
+ uses: benchmark-action/github-action-benchmark@v1
75
+ with:
76
+ name: Python Benchmark with pytest-benchmark
77
+ tool: 'pytest'
78
+ output-file-path: benchmarks/output.json
79
+ github-token: ${{ secrets.GITHUB_TOKEN }}
80
+ auto-push: true
81
+ gh-pages-branch: benches
82
+
83
+ # Add bench mark files to the gh-pages branch
84
+ - name: Add benchmark files to gh-pages
85
+ working-directory: ${{runner.workspace}}/floris/
86
+ run: |
87
+ ls -lah
88
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
89
+ git config --global user.name "github-actions[bot]"
90
+ git fetch origin benches
91
+ git checkout benches
92
+ rsync -av dev/bench /tmp/bench
93
+ git fetch origin gh-pages
94
+ git checkout gh-pages
95
+ mkdir -p dev
96
+ rsync -av /tmp/bench/ dev/
97
+ ls -lah dev/bench
98
+ git add dev
99
+ git commit -m "Add bench folder to gh-pages"
100
+ git push origin gh-pages
@@ -0,0 +1,37 @@
1
+ # This workflows will upload a Python Package using Twine when a release is created
2
+ # Published via GitHub Actions as a PyPI Trusted Publisher.
3
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
4
+ # and: https://docs.pypi.org/trusted-publishers/
5
+
6
+ name: Upload Python Package
7
+
8
+ on:
9
+ push:
10
+ branches: [cpp-v4.6.4]
11
+
12
+ jobs:
13
+ deploy:
14
+ environment: release-pypi
15
+ if: github.repository_owner == 'rafmudaf'
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ id-token: write
19
+ steps:
20
+ - uses: actions/checkout@v6
21
+ with:
22
+ fetch-depth: 0
23
+ fetch-tags: true
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: '3.x'
28
+ - name: Install dependencies and build package
29
+ run: |
30
+ python -m pip install --upgrade pip
31
+ pip install build twine
32
+ python -m build
33
+ twine check --strict dist/*
34
+ - name: Publish package to PyPI
35
+ uses: pypa/gh-action-pypi-publish@release/v1
36
+ with:
37
+ verbose: True
@@ -0,0 +1,28 @@
1
+ name: Code Quality Check
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+
7
+ code-qa-validation:
8
+ runs-on: ${{ matrix.os }}
9
+ strategy:
10
+ matrix:
11
+ python-version: ["3.13"]
12
+ os: [ubuntu-latest]
13
+ fail-fast: False
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+ - name: Set up Python ${{ matrix.python-version }}
18
+ uses: actions/setup-python@v4
19
+ with:
20
+ python-version: ${{ matrix.python-version }}
21
+ - name: Install project
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install ".[develop]"
25
+ - name: Run the code quality script
26
+ run: |
27
+ cd profiling
28
+ python quality_metrics.py
@@ -0,0 +1,48 @@
1
+
2
+ # python compiled files
3
+ __pycache__/
4
+ .cache
5
+ *.ipynb
6
+ *.ipynb_checkpoints
7
+ *.pyc
8
+ *.egg-info
9
+ dist
10
+ build
11
+ .pytest_cache
12
+ .ruff_cache
13
+
14
+ # pip meta data
15
+ pip-wheel-metadata
16
+
17
+ # macOS files
18
+ .DS_Store
19
+
20
+ # IDE settings and files
21
+ .idea
22
+ .vscode
23
+
24
+ # Documentation notebooks
25
+ !docs/*.ipynb
26
+
27
+ # The examples folder within docs
28
+ docs/examples
29
+
30
+ # Documentation output
31
+ _site/
32
+ .jekyll-cache/
33
+ _build
34
+ _autosummary/
35
+
36
+ # Output from examples
37
+ examples/cp_ct_cq_lut.p
38
+ examples/hist.hist
39
+ examples/SLSQP.out
40
+
41
+ # Log files
42
+ *.log
43
+
44
+ # Temp files in convert test
45
+ tests/v3_to_v4_convert_test/convert_turbine_v3_to_v4.py
46
+ tests/v3_to_v4_convert_test/convert_floris_input_v3_to_v4.py
47
+ tests/v3_to_v4_convert_test/gch_v4.yaml
48
+ tests/v3_to_v4_convert_test/nrel_5MW_v3_v4.yaml
@@ -0,0 +1,26 @@
1
+
2
+ repos:
3
+
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v4.4.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-executables-have-shebangs
10
+ - id: check-yaml
11
+ args: [--unsafe]
12
+ - id: check-merge-conflict
13
+ - id: check-symlinks
14
+ - id: mixed-line-ending
15
+
16
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
17
+ rev: v0.9.6
18
+ hooks:
19
+ - id: ruff
20
+
21
+ - repo: https://github.com/timothycrosley/isort
22
+ rev: 5.12.0
23
+ hooks:
24
+ - id: isort
25
+ name: isort
26
+ stages: [commit]