colm-openbench 3.0.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. colm_openbench-3.0.0b1.dist-info/METADATA +672 -0
  2. colm_openbench-3.0.0b1.dist-info/RECORD +595 -0
  3. colm_openbench-3.0.0b1.dist-info/WHEEL +4 -0
  4. colm_openbench-3.0.0b1.dist-info/entry_points.txt +2 -0
  5. colm_openbench-3.0.0b1.dist-info/licenses/LICENSE +21 -0
  6. openbench/CONVENTIONS.md +43 -0
  7. openbench/__init__.py +7 -0
  8. openbench/__main__.py +5 -0
  9. openbench/cli/__init__.py +1 -0
  10. openbench/cli/_display.py +85 -0
  11. openbench/cli/_names.py +53 -0
  12. openbench/cli/_optimize.py +85 -0
  13. openbench/cli/_options.py +61 -0
  14. openbench/cli/_parsing.py +166 -0
  15. openbench/cli/_profile_rescue.py +677 -0
  16. openbench/cli/_ref_commands.py +165 -0
  17. openbench/cli/_reference_errors.py +20 -0
  18. openbench/cli/_register.py +307 -0
  19. openbench/cli/_scan.py +275 -0
  20. openbench/cli/_scan_support.py +115 -0
  21. openbench/cli/_simulation_validation.py +37 -0
  22. openbench/cli/cache.py +66 -0
  23. openbench/cli/check.py +736 -0
  24. openbench/cli/data.py +362 -0
  25. openbench/cli/gui.py +25 -0
  26. openbench/cli/init_cmd.py +1489 -0
  27. openbench/cli/main.py +64 -0
  28. openbench/cli/migrate.py +35 -0
  29. openbench/cli/model.py +1067 -0
  30. openbench/cli/run.py +343 -0
  31. openbench/cli/sim.py +687 -0
  32. openbench/cli/smoke.py +347 -0
  33. openbench/config/__init__.py +30 -0
  34. openbench/config/adapter.py +1125 -0
  35. openbench/config/legacy_processors.py +913 -0
  36. openbench/config/loader.py +923 -0
  37. openbench/config/migration.py +556 -0
  38. openbench/config/provenance.py +5 -0
  39. openbench/config/resolver.py +402 -0
  40. openbench/config/schema.py +177 -0
  41. openbench/config/user_settings.py +69 -0
  42. openbench/core/__init__.py +47 -0
  43. openbench/core/_comparison_basic.py +199 -0
  44. openbench/core/_comparison_common.py +103 -0
  45. openbench/core/_comparison_diagrams.py +12 -0
  46. openbench/core/_comparison_diff.py +11 -0
  47. openbench/core/_comparison_diff_grid.py +184 -0
  48. openbench/core/_comparison_diff_plot.py +82 -0
  49. openbench/core/_comparison_diff_station.py +276 -0
  50. openbench/core/_comparison_distributions.py +492 -0
  51. openbench/core/_comparison_heatmap.py +84 -0
  52. openbench/core/_comparison_helpers.py +241 -0
  53. openbench/core/_comparison_parallel.py +247 -0
  54. openbench/core/_comparison_portrait.py +11 -0
  55. openbench/core/_comparison_portrait_calculations.py +127 -0
  56. openbench/core/_comparison_portrait_seasonal.py +460 -0
  57. openbench/core/_comparison_relative.py +306 -0
  58. openbench/core/_comparison_smpi.py +252 -0
  59. openbench/core/_comparison_tail.py +437 -0
  60. openbench/core/_comparison_target.py +277 -0
  61. openbench/core/_comparison_taylor.py +423 -0
  62. openbench/core/_visualization_bridge.py +23 -0
  63. openbench/core/climatezone_groupby.py +470 -0
  64. openbench/core/comparison.py +149 -0
  65. openbench/core/evaluation.py +867 -0
  66. openbench/core/landcover_groupby.py +762 -0
  67. openbench/core/metrics.py +1060 -0
  68. openbench/core/registry.py +104 -0
  69. openbench/core/scores.py +250 -0
  70. openbench/core/statistics/Mod_Statistics.py +712 -0
  71. openbench/core/statistics/__init__.py +79 -0
  72. openbench/core/statistics/base.py +18 -0
  73. openbench/core/statistics/stat_Basic.py +63 -0
  74. openbench/core/statistics/stat_False_Discovery_Rate.py +122 -0
  75. openbench/core/statistics/stat_anova.py +299 -0
  76. openbench/core/statistics/stat_autocorrelation.py +47 -0
  77. openbench/core/statistics/stat_correlation.py +40 -0
  78. openbench/core/statistics/stat_covariance.py +19 -0
  79. openbench/core/statistics/stat_diff.py +14 -0
  80. openbench/core/statistics/stat_functional_response.py +105 -0
  81. openbench/core/statistics/stat_hellinger_distance.py +97 -0
  82. openbench/core/statistics/stat_mann_kendall_trend_test.py +130 -0
  83. openbench/core/statistics/stat_partial_least_squares_regression.py +206 -0
  84. openbench/core/statistics/stat_resample.py +26 -0
  85. openbench/core/statistics/stat_rolling.py +24 -0
  86. openbench/core/statistics/stat_standard_deviation.py +16 -0
  87. openbench/core/statistics/stat_three_cornered_hat.py +218 -0
  88. openbench/core/statistics/stat_variance.py +14 -0
  89. openbench/core/statistics/stat_z_score.py +50 -0
  90. openbench/data/__init__.py +1 -0
  91. openbench/data/_processing_base.py +12 -0
  92. openbench/data/_processing_config.py +424 -0
  93. openbench/data/_processing_grid.py +20 -0
  94. openbench/data/_processing_grid_core.py +299 -0
  95. openbench/data/_processing_grid_regrid.py +218 -0
  96. openbench/data/_processing_selection.py +369 -0
  97. openbench/data/_processing_station.py +12 -0
  98. openbench/data/_processing_station_core.py +394 -0
  99. openbench/data/_processing_station_extract.py +149 -0
  100. openbench/data/_processing_time.py +13 -0
  101. openbench/data/_processing_time_adjustments.py +148 -0
  102. openbench/data/_processing_time_core.py +184 -0
  103. openbench/data/_processing_time_integrity.py +236 -0
  104. openbench/data/_processing_transforms.py +255 -0
  105. openbench/data/_processing_utils.py +150 -0
  106. openbench/data/_processing_yearly.py +215 -0
  107. openbench/data/_system_resources.py +217 -0
  108. openbench/data/cache.py +857 -0
  109. openbench/data/climatology.py +489 -0
  110. openbench/data/compute.py +222 -0
  111. openbench/data/coordinates.py +222 -0
  112. openbench/data/custom/CH4_FluxnetANN_filter.py +113 -0
  113. openbench/data/custom/GEBA_filter.py +124 -0
  114. openbench/data/custom/HydroWeb_filter.py +169 -0
  115. openbench/data/custom/LAI_Yuan2011_filter.py +93 -0
  116. openbench/data/custom/ResOpsUS_filter.py +99 -0
  117. openbench/data/custom/__init__.py +86 -0
  118. openbench/data/fignml/ANOVA.yaml +32 -0
  119. openbench/data/fignml/Basic.yaml +37 -0
  120. openbench/data/fignml/CZ_groupby_source.yaml +32 -0
  121. openbench/data/fignml/Correlation.yaml +33 -0
  122. openbench/data/fignml/Diff_Plot.yaml +37 -0
  123. openbench/data/fignml/False_Discovery_Rate.yaml +2 -0
  124. openbench/data/fignml/Functional_Response.yaml +34 -0
  125. openbench/data/fignml/HeatMap_source.yaml +31 -0
  126. openbench/data/fignml/Hellinger_Distance.yaml +33 -0
  127. openbench/data/fignml/IGBP_groupby_source.yaml +33 -0
  128. openbench/data/fignml/Kernel_Density_Estimate.yaml +30 -0
  129. openbench/data/fignml/Mann_Kendall_Trend_Test.yaml +38 -0
  130. openbench/data/fignml/PFT_groupby_source.yaml +33 -0
  131. openbench/data/fignml/Parallel_Coordinates.yaml +29 -0
  132. openbench/data/fignml/Partial_Least_Squares_Regression.yaml +33 -0
  133. openbench/data/fignml/Portrait_Plot_seasonal.yaml +39 -0
  134. openbench/data/fignml/RadarMap.yaml +21 -0
  135. openbench/data/fignml/Relative_Score.yaml +38 -0
  136. openbench/data/fignml/Ridgeline_Plot.yaml +20 -0
  137. openbench/data/fignml/Single_Model_Performance_Index.yaml +25 -0
  138. openbench/data/fignml/Standard_Deviation.yaml +33 -0
  139. openbench/data/fignml/Target_Diagram.yaml +26 -0
  140. openbench/data/fignml/Taylor_Diagram.yaml +41 -0
  141. openbench/data/fignml/Three_Cornered_Hat.yaml +32 -0
  142. openbench/data/fignml/Whisker_Plot.yaml +54 -0
  143. openbench/data/fignml/Z_Score.yaml +32 -0
  144. openbench/data/fignml/__init__.py +9 -0
  145. openbench/data/fignml/figlib.yaml +39 -0
  146. openbench/data/fignml/make_geo_plot_index.yaml +35 -0
  147. openbench/data/fignml/make_stn_plot_index.yaml +33 -0
  148. openbench/data/fignml/plot_stn.yaml +29 -0
  149. openbench/data/processing.py +76 -0
  150. openbench/data/registry/__init__.py +16 -0
  151. openbench/data/registry/_filename_dates.py +123 -0
  152. openbench/data/registry/converter.py +152 -0
  153. openbench/data/registry/manager.py +1010 -0
  154. openbench/data/registry/model_catalog.yaml +2701 -0
  155. openbench/data/registry/reference_catalog.yaml +3076 -0
  156. openbench/data/registry/reference_profiles.yaml +1288 -0
  157. openbench/data/registry/scanner.py +3245 -0
  158. openbench/data/registry/schema.py +190 -0
  159. openbench/data/registry/station_lists/CH4_FluxnetANN.csv +2 -0
  160. openbench/data/registry/station_lists/GEBA.csv +2 -0
  161. openbench/data/registry/station_lists/GLEAM_Hybird.csv +91 -0
  162. openbench/data/registry/station_lists/LAI_Yuan2011.csv +3 -0
  163. openbench/data/registry/station_lists/ResOpsUS.csv +679 -0
  164. openbench/data/registry/station_lists/Xu_et_al2025.csv +367 -0
  165. openbench/data/regrid/__about__.py +1 -0
  166. openbench/data/regrid/__init__.py +5 -0
  167. openbench/data/regrid/methods/__init__.py +3 -0
  168. openbench/data/regrid/methods/_shared.py +105 -0
  169. openbench/data/regrid/methods/conservative.py +596 -0
  170. openbench/data/regrid/methods/flox_reduce.py +179 -0
  171. openbench/data/regrid/methods/interp.py +52 -0
  172. openbench/data/regrid/regrid.py +314 -0
  173. openbench/data/regrid/regrid_wgs84.py +122 -0
  174. openbench/data/regrid/utils.py +418 -0
  175. openbench/data/sim_scanner.py +1667 -0
  176. openbench/data/station_matcher.py +462 -0
  177. openbench/data/station_scanner.py +580 -0
  178. openbench/data/time_utils.py +375 -0
  179. openbench/data/unit.py +252 -0
  180. openbench/dataset/Climate_zone.nc +0 -0
  181. openbench/dataset/IGBP.nc +0 -0
  182. openbench/dataset/PFT.nc +0 -0
  183. openbench/dataset/smoke/initial_test.tar.gz +0 -0
  184. openbench/dataset/smoke/openbench-smoke.yaml +87 -0
  185. openbench/gui/__init__.py +15 -0
  186. openbench/gui/app.py +67 -0
  187. openbench/gui/config_manager.py +1472 -0
  188. openbench/gui/controller.py +454 -0
  189. openbench/gui/data_validator.py +676 -0
  190. openbench/gui/dialogs/__init__.py +4 -0
  191. openbench/gui/dialogs/data_discovery.py +219 -0
  192. openbench/gui/dialogs/scan_confirm.py +162 -0
  193. openbench/gui/main_window.py +1178 -0
  194. openbench/gui/pages/__init__.py +32 -0
  195. openbench/gui/pages/_scan_worker.py +24 -0
  196. openbench/gui/pages/base_page.py +128 -0
  197. openbench/gui/pages/page_comparisons.py +58 -0
  198. openbench/gui/pages/page_evaluation.py +147 -0
  199. openbench/gui/pages/page_general.py +998 -0
  200. openbench/gui/pages/page_metrics.py +58 -0
  201. openbench/gui/pages/page_preview.py +831 -0
  202. openbench/gui/pages/page_ref_data.py +958 -0
  203. openbench/gui/pages/page_registry.py +1074 -0
  204. openbench/gui/pages/page_run_monitor.py +583 -0
  205. openbench/gui/pages/page_runtime.py +957 -0
  206. openbench/gui/pages/page_scores.py +58 -0
  207. openbench/gui/pages/page_sim_data.py +678 -0
  208. openbench/gui/pages/page_statistics.py +52 -0
  209. openbench/gui/path_utils.py +645 -0
  210. openbench/gui/progress_parser.py +140 -0
  211. openbench/gui/remote_runner.py +573 -0
  212. openbench/gui/runner.py +538 -0
  213. openbench/gui/styles/checkmark.png +0 -0
  214. openbench/gui/styles/checkmark.svg +3 -0
  215. openbench/gui/styles/theme.qss +274 -0
  216. openbench/gui/validation.py +258 -0
  217. openbench/gui/widgets/__init__.py +30 -0
  218. openbench/gui/widgets/_ssh_worker.py +83 -0
  219. openbench/gui/widgets/_task_worker.py +25 -0
  220. openbench/gui/widgets/checkbox_group.py +166 -0
  221. openbench/gui/widgets/data_source_editor.py +1204 -0
  222. openbench/gui/widgets/model_definition_editor.py +382 -0
  223. openbench/gui/widgets/nc_importer.py +297 -0
  224. openbench/gui/widgets/no_scroll_widgets.py +31 -0
  225. openbench/gui/widgets/path_completer.py +126 -0
  226. openbench/gui/widgets/path_selector.py +262 -0
  227. openbench/gui/widgets/progress_dashboard.py +239 -0
  228. openbench/gui/widgets/remote_config.py +2012 -0
  229. openbench/gui/widgets/sync_status.py +188 -0
  230. openbench/gui/widgets/validation_dialog.py +275 -0
  231. openbench/gui/widgets/variable_editor.py +323 -0
  232. openbench/gui/widgets/yaml_preview.py +129 -0
  233. openbench/remote/__init__.py +15 -0
  234. openbench/remote/connections.py +160 -0
  235. openbench/remote/credentials.py +270 -0
  236. openbench/remote/ssh.py +1000 -0
  237. openbench/remote/storage.py +222 -0
  238. openbench/remote/sync.py +473 -0
  239. openbench/runner/__init__.py +1 -0
  240. openbench/runner/cache.py +200 -0
  241. openbench/runner/cache_state.py +68 -0
  242. openbench/runner/config_preflight.py +61 -0
  243. openbench/runner/context.py +65 -0
  244. openbench/runner/dask_runtime.py +302 -0
  245. openbench/runner/evaluation_dispatch.py +114 -0
  246. openbench/runner/hashing.py +385 -0
  247. openbench/runner/local.py +434 -0
  248. openbench/runner/masking.py +133 -0
  249. openbench/runner/orchestration.py +402 -0
  250. openbench/runner/pair_ref.py +126 -0
  251. openbench/runner/postprocessing.py +416 -0
  252. openbench/runner/preflight.py +384 -0
  253. openbench/runner/preflight_facade.py +113 -0
  254. openbench/runner/preprocessing.py +369 -0
  255. openbench/runner/task_execution.py +196 -0
  256. openbench/runner/task_planning.py +109 -0
  257. openbench/util/__init__.py +1 -0
  258. openbench/util/converttype.py +45 -0
  259. openbench/util/dataset_loader.py +733 -0
  260. openbench/util/exceptions.py +390 -0
  261. openbench/util/filenames.py +173 -0
  262. openbench/util/interfaces.py +246 -0
  263. openbench/util/logging_system.py +582 -0
  264. openbench/util/names.py +150 -0
  265. openbench/util/netcdf.py +190 -0
  266. openbench/util/output.py +621 -0
  267. openbench/util/parallel.py +750 -0
  268. openbench/util/report.py +2069 -0
  269. openbench/util/static_datasets.py +63 -0
  270. openbench/visualization/Fig_ANOVA.py +206 -0
  271. openbench/visualization/Fig_Basic_Plot.py +898 -0
  272. openbench/visualization/Fig_Correlation.py +131 -0
  273. openbench/visualization/Fig_Diff_Plot.py +553 -0
  274. openbench/visualization/Fig_Functional_Response.py +162 -0
  275. openbench/visualization/Fig_Hellinger_Distance.py +177 -0
  276. openbench/visualization/Fig_LC_based_heat_map.py +1048 -0
  277. openbench/visualization/Fig_Mann_Kendall_Trend_Test.py +206 -0
  278. openbench/visualization/Fig_Partial_Least_Squares_Regression.py +231 -0
  279. openbench/visualization/Fig_Relative_Score.py +399 -0
  280. openbench/visualization/Fig_Ridgeline_Plot.py +213 -0
  281. openbench/visualization/Fig_Single_Model_Performance_Index.py +379 -0
  282. openbench/visualization/Fig_Standard_Deviation.py +174 -0
  283. openbench/visualization/Fig_Three_Cornered_Hat.py +234 -0
  284. openbench/visualization/Fig_Whisker_Plot.py +237 -0
  285. openbench/visualization/Fig_geo_plot_index.py +152 -0
  286. openbench/visualization/Fig_heatmap.py +205 -0
  287. openbench/visualization/Fig_kernel_density_estimate.py +211 -0
  288. openbench/visualization/Fig_parallel_coordinates.py +989 -0
  289. openbench/visualization/Fig_portrait_plot_seasonal.py +1461 -0
  290. openbench/visualization/Fig_radarmap.py +161 -0
  291. openbench/visualization/Fig_stn_plot_index.py +195 -0
  292. openbench/visualization/Fig_target_diagram.py +2064 -0
  293. openbench/visualization/Fig_taylor_diagram.py +2731 -0
  294. openbench/visualization/Fig_toolbox.py +329 -0
  295. openbench/visualization/Mod_Only_Drawing.py +15 -0
  296. openbench/visualization/__init__.py +88 -0
  297. openbench/visualization/_combinations.py +78 -0
  298. openbench/visualization/_diagram_sampling.py +91 -0
  299. openbench/visualization/_diagram_utils.py +58 -0
  300. openbench/visualization/_downsample.py +122 -0
  301. openbench/visualization/_figure_io.py +39 -0
  302. openbench/visualization/_filenames.py +5 -0
  303. openbench/visualization/_rc_isolation.py +72 -0
  304. openbench/visualization/_sampling.py +71 -0
  305. openbench/visualization/_validation.py +38 -0
  306. openbench/visualization/cmaps/LICENSE +675 -0
  307. openbench/visualization/cmaps/__init__.py +5 -0
  308. openbench/visualization/cmaps/_version.py +2 -0
  309. openbench/visualization/cmaps/cmaps.py +6281 -0
  310. openbench/visualization/cmaps/cmaps.template +86 -0
  311. openbench/visualization/cmaps/colormap.py +61 -0
  312. openbench/visualization/cmaps/colormaps/ncar_ncl/3gauss.rgb +256 -0
  313. openbench/visualization/cmaps/colormaps/ncar_ncl/3saw.rgb +256 -0
  314. openbench/visualization/cmaps/colormaps/ncar_ncl/BkBlAqGrYeOrReViWh200.rgb +202 -0
  315. openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrWh2YeOrReVi22.rgb +24 -0
  316. openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrYeOrRe.rgb +102 -0
  317. openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrYeOrReVi200.rgb +202 -0
  318. openbench/visualization/cmaps/colormaps/ncar_ncl/BlGrYeOrReVi200.rgb +202 -0
  319. openbench/visualization/cmaps/colormaps/ncar_ncl/BlRe.rgb +98 -0
  320. openbench/visualization/cmaps/colormaps/ncar_ncl/BlWhRe.rgb +103 -0
  321. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueDarkOrange18.rgb +25 -0
  322. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueDarkRed18.rgb +25 -0
  323. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueGreen14.rgb +21 -0
  324. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueRed.rgb +253 -0
  325. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueRedGray.rgb +254 -0
  326. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueWhiteOrangeRed.rgb +256 -0
  327. openbench/visualization/cmaps/colormaps/ncar_ncl/BlueYellowRed.rgb +256 -0
  328. openbench/visualization/cmaps/colormaps/ncar_ncl/BrownBlue12.rgb +19 -0
  329. openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_coldhot.rgb +13 -0
  330. openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_drywet.rgb +13 -0
  331. openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_set3.rgb +14 -0
  332. openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_wet.rgb +13 -0
  333. openbench/visualization/cmaps/colormaps/ncar_ncl/Cat12.rgb +19 -0
  334. openbench/visualization/cmaps/colormaps/ncar_ncl/Copyright +6 -0
  335. openbench/visualization/cmaps/colormaps/ncar_ncl/GHRSST_anomaly.rgb +44 -0
  336. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_cool.rgb +12 -0
  337. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_copper.rgb +52 -0
  338. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_drywet.rgb +62 -0
  339. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_gebco.rgb +72 -0
  340. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_globe.rgb +258 -0
  341. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_gray.rgb +12 -0
  342. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_haxby.rgb +34 -0
  343. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_hot.rgb +102 -0
  344. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_jet.rgb +258 -0
  345. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_nighttime.rgb +22 -0
  346. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_no_green.rgb +18 -0
  347. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_ocean.rgb +82 -0
  348. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_paired.rgb +14 -0
  349. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_panoply.rgb +18 -0
  350. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_polar.rgb +22 -0
  351. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_red2green.rgb +22 -0
  352. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_relief.rgb +258 -0
  353. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_relief_oceanonly.rgb +162 -0
  354. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_seis.rgb +258 -0
  355. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_split.rgb +42 -0
  356. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_topo.rgb +258 -0
  357. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_wysiwyg.rgb +22 -0
  358. openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_wysiwygcont.rgb +202 -0
  359. openbench/visualization/cmaps/colormaps/ncar_ncl/GSFC_landsat_udf_density.rgb +13 -0
  360. openbench/visualization/cmaps/colormaps/ncar_ncl/GrayWhiteGray.rgb +256 -0
  361. openbench/visualization/cmaps/colormaps/ncar_ncl/GreenMagenta16.rgb +23 -0
  362. openbench/visualization/cmaps/colormaps/ncar_ncl/GreenYellow.rgb +253 -0
  363. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Accent.rgb +130 -0
  364. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Blues.rgb +130 -0
  365. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BrBG.rgb +130 -0
  366. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BuGn.rgb +130 -0
  367. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BuPu.rgb +130 -0
  368. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Dark2.rgb +130 -0
  369. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_GnBu.rgb +130 -0
  370. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Greens.rgb +130 -0
  371. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Greys.rgb +130 -0
  372. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_OrRd.rgb +130 -0
  373. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Oranges.rgb +130 -0
  374. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PRGn.rgb +130 -0
  375. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Paired.rgb +130 -0
  376. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Pastel1.rgb +130 -0
  377. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Pastel2.rgb +130 -0
  378. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PiYG.rgb +130 -0
  379. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuBu.rgb +130 -0
  380. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuBuGn.rgb +130 -0
  381. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuOr.rgb +130 -0
  382. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuRd.rgb +130 -0
  383. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Purples.rgb +130 -0
  384. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdBu.rgb +130 -0
  385. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdGy.rgb +130 -0
  386. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdPu.rgb +130 -0
  387. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdYlBu.rgb +130 -0
  388. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdYlGn.rgb +130 -0
  389. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Reds.rgb +130 -0
  390. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set1.rgb +130 -0
  391. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set2.rgb +130 -0
  392. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set3.rgb +130 -0
  393. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Spectral.rgb +130 -0
  394. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_StepSeq.rgb +130 -0
  395. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlGn.rgb +130 -0
  396. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlGnBu.rgb +130 -0
  397. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlOrBr.rgb +130 -0
  398. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlOrRd.rgb +130 -0
  399. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_afmhot.rgb +130 -0
  400. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_autumn.rgb +130 -0
  401. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_bone.rgb +130 -0
  402. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_brg.rgb +130 -0
  403. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_bwr.rgb +130 -0
  404. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_cool.rgb +130 -0
  405. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_coolwarm.rgb +130 -0
  406. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_copper.rgb +130 -0
  407. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_cubehelix.rgb +130 -0
  408. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_flag.rgb +130 -0
  409. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_earth.rgb +130 -0
  410. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_gray.rgb +130 -0
  411. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_heat.rgb +130 -0
  412. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_ncar.rgb +130 -0
  413. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_rainbow.rgb +130 -0
  414. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_stern.rgb +130 -0
  415. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_yarg.rgb +130 -0
  416. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gnuplot.rgb +130 -0
  417. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gnuplot2.rgb +130 -0
  418. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_hot.rgb +130 -0
  419. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_hsv.rgb +130 -0
  420. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_jet.rgb +130 -0
  421. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_ocean.rgb +130 -0
  422. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_pink.rgb +130 -0
  423. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_prism.rgb +130 -0
  424. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_rainbow.rgb +130 -0
  425. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_s3pcpn.rgb +130 -0
  426. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_s3pcpn_l.rgb +130 -0
  427. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_seismic.rgb +130 -0
  428. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_spring.rgb +130 -0
  429. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_sstanom.rgb +130 -0
  430. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_summer.rgb +130 -0
  431. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_terrain.rgb +130 -0
  432. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_viridis.rgb +258 -0
  433. openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_winter.rgb +130 -0
  434. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_banded.rgb +258 -0
  435. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_blu_red.rgb +258 -0
  436. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_blue_red.rgb +258 -0
  437. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_bright.rgb +258 -0
  438. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_gebco.rgb +26 -0
  439. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_jaisnd.rgb +258 -0
  440. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_jet.rgb +258 -0
  441. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_manga.rgb +258 -0
  442. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_rainbow2.rgb +258 -0
  443. openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_roullet.rgb +258 -0
  444. openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_a.rgb +258 -0
  445. openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_b.rgb +258 -0
  446. openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_c.rgb +258 -0
  447. openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_modis_ndvi.rgb +258 -0
  448. openbench/visualization/cmaps/colormaps/ncar_ncl/NMCRef.rgb +18 -0
  449. openbench/visualization/cmaps/colormaps/ncar_ncl/NMCVel.rgb +19 -0
  450. openbench/visualization/cmaps/colormaps/ncar_ncl/NOC_ndvi.rgb +255 -0
  451. openbench/visualization/cmaps/colormaps/ncar_ncl/OceanLakeLandSnow.rgb +256 -0
  452. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Gallet13.rgb +222 -0
  453. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Lindaa06.rgb +222 -0
  454. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Lindaa07.rgb +222 -0
  455. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_bhw3_22.rgb +222 -0
  456. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_es_landscape_79.rgb +222 -0
  457. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_feb_sunrise.rgb +222 -0
  458. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_foggy_sunrise.rgb +222 -0
  459. openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_fs2006.rgb +222 -0
  460. openbench/visualization/cmaps/colormaps/ncar_ncl/StepSeq25.rgb +32 -0
  461. openbench/visualization/cmaps/colormaps/ncar_ncl/UKM_hadcrut.rgb +14 -0
  462. openbench/visualization/cmaps/colormaps/ncar_ncl/ViBlGrWhYeOrRe.rgb +103 -0
  463. openbench/visualization/cmaps/colormaps/ncar_ncl/WhBlGrYeRe.rgb +102 -0
  464. openbench/visualization/cmaps/colormaps/ncar_ncl/WhBlReWh.rgb +103 -0
  465. openbench/visualization/cmaps/colormaps/ncar_ncl/WhViBlGrYeOrRe.rgb +103 -0
  466. openbench/visualization/cmaps/colormaps/ncar_ncl/WhViBlGrYeOrReWh.rgb +103 -0
  467. openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteBlue.rgb +256 -0
  468. openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteBlueGreenYellowRed.rgb +256 -0
  469. openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteGreen.rgb +256 -0
  470. openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteYellowOrangeRed.rgb +256 -0
  471. openbench/visualization/cmaps/colormaps/ncar_ncl/amwg.rgb +18 -0
  472. openbench/visualization/cmaps/colormaps/ncar_ncl/amwg256.rgb +256 -0
  473. openbench/visualization/cmaps/colormaps/ncar_ncl/amwg_blueyellowred.rgb +18 -0
  474. openbench/visualization/cmaps/colormaps/ncar_ncl/cb_9step.rgb +80 -0
  475. openbench/visualization/cmaps/colormaps/ncar_ncl/cb_rainbow.rgb +243 -0
  476. openbench/visualization/cmaps/colormaps/ncar_ncl/cb_rainbow_inv.rgb +243 -0
  477. openbench/visualization/cmaps/colormaps/ncar_ncl/circular_0.rgb +20 -0
  478. openbench/visualization/cmaps/colormaps/ncar_ncl/circular_1.rgb +14 -0
  479. openbench/visualization/cmaps/colormaps/ncar_ncl/circular_2.rgb +26 -0
  480. openbench/visualization/cmaps/colormaps/ncar_ncl/cividis.rgb +258 -0
  481. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_algae.rgb +258 -0
  482. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_amp.rgb +258 -0
  483. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_balance.rgb +258 -0
  484. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_curl.rgb +258 -0
  485. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_deep.rgb +258 -0
  486. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_delta.rgb +258 -0
  487. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_dense.rgb +258 -0
  488. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_gray.rgb +258 -0
  489. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_haline.rgb +258 -0
  490. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_ice.rgb +258 -0
  491. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_matter.rgb +258 -0
  492. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_oxy.rgb +258 -0
  493. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_phase.rgb +258 -0
  494. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_solar.rgb +258 -0
  495. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_speed.rgb +258 -0
  496. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_tempo.rgb +258 -0
  497. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_thermal.rgb +258 -0
  498. openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_turbid.rgb +258 -0
  499. openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_b2r.rgb +66 -0
  500. openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_flux.rgb +24 -0
  501. openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_haxby.rgb +66 -0
  502. openbench/visualization/cmaps/colormaps/ncar_ncl/cosam.rgb +12 -0
  503. openbench/visualization/cmaps/colormaps/ncar_ncl/cosam12.rgb +14 -0
  504. openbench/visualization/cmaps/colormaps/ncar_ncl/cyclic.rgb +8 -0
  505. openbench/visualization/cmaps/colormaps/ncar_ncl/default.rgb +36 -0
  506. openbench/visualization/cmaps/colormaps/ncar_ncl/detail.rgb +256 -0
  507. openbench/visualization/cmaps/colormaps/ncar_ncl/draw_cmap.ncl +23 -0
  508. openbench/visualization/cmaps/colormaps/ncar_ncl/drought_severity.rgb +9 -0
  509. openbench/visualization/cmaps/colormaps/ncar_ncl/example.rgb +115 -0
  510. openbench/visualization/cmaps/colormaps/ncar_ncl/extrema.rgb +256 -0
  511. openbench/visualization/cmaps/colormaps/ncar_ncl/grads_default.rgb +18 -0
  512. openbench/visualization/cmaps/colormaps/ncar_ncl/grads_rainbow.rgb +17 -0
  513. openbench/visualization/cmaps/colormaps/ncar_ncl/gscyclic.rgb +8 -0
  514. openbench/visualization/cmaps/colormaps/ncar_ncl/gsdtol.rgb +33 -0
  515. openbench/visualization/cmaps/colormaps/ncar_ncl/gsltod.rgb +33 -0
  516. openbench/visualization/cmaps/colormaps/ncar_ncl/gui_default.rgb +26 -0
  517. openbench/visualization/cmaps/colormaps/ncar_ncl/helix.rgb +256 -0
  518. openbench/visualization/cmaps/colormaps/ncar_ncl/helix1.rgb +256 -0
  519. openbench/visualization/cmaps/colormaps/ncar_ncl/hlu_default.rgb +36 -0
  520. openbench/visualization/cmaps/colormaps/ncar_ncl/hotcold_18lev.rgb +25 -0
  521. openbench/visualization/cmaps/colormaps/ncar_ncl/hotcolr_19lev.rgb +26 -0
  522. openbench/visualization/cmaps/colormaps/ncar_ncl/hotres.rgb +256 -0
  523. openbench/visualization/cmaps/colormaps/ncar_ncl/lithology.rgb +215 -0
  524. openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_hot.rgb +66 -0
  525. openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_hsv.rgb +66 -0
  526. openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_jet.rgb +66 -0
  527. openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_lines.rgb +66 -0
  528. openbench/visualization/cmaps/colormaps/ncar_ncl/mch_default.rgb +21 -0
  529. openbench/visualization/cmaps/colormaps/ncar_ncl/ncl_default.rgb +257 -0
  530. openbench/visualization/cmaps/colormaps/ncar_ncl/ncview_default.rgb +256 -0
  531. openbench/visualization/cmaps/colormaps/ncar_ncl/nice_gfdl.rgb +227 -0
  532. openbench/visualization/cmaps/colormaps/ncar_ncl/nrl_sirkes.rgb +22 -0
  533. openbench/visualization/cmaps/colormaps/ncar_ncl/nrl_sirkes_nowhite.rgb +20 -0
  534. openbench/visualization/cmaps/colormaps/ncar_ncl/perc2_9lev.rgb +16 -0
  535. openbench/visualization/cmaps/colormaps/ncar_ncl/percent_11lev.rgb +18 -0
  536. openbench/visualization/cmaps/colormaps/ncar_ncl/posneg_1.rgb +21 -0
  537. openbench/visualization/cmaps/colormaps/ncar_ncl/posneg_2.rgb +22 -0
  538. openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_1.rgb +19 -0
  539. openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_2.rgb +14 -0
  540. openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_3.rgb +25 -0
  541. openbench/visualization/cmaps/colormaps/ncar_ncl/precip2_15lev.rgb +22 -0
  542. openbench/visualization/cmaps/colormaps/ncar_ncl/precip2_17lev.rgb +24 -0
  543. openbench/visualization/cmaps/colormaps/ncar_ncl/precip3_16lev.rgb +23 -0
  544. openbench/visualization/cmaps/colormaps/ncar_ncl/precip4_11lev.rgb +18 -0
  545. openbench/visualization/cmaps/colormaps/ncar_ncl/precip4_diff_19lev.rgb +26 -0
  546. openbench/visualization/cmaps/colormaps/ncar_ncl/precip_11lev.rgb +18 -0
  547. openbench/visualization/cmaps/colormaps/ncar_ncl/precip_diff_12lev.rgb +19 -0
  548. openbench/visualization/cmaps/colormaps/ncar_ncl/precip_diff_1lev.rgb +8 -0
  549. openbench/visualization/cmaps/colormaps/ncar_ncl/psgcap.rgb +240 -0
  550. openbench/visualization/cmaps/colormaps/ncar_ncl/radar.rgb +17 -0
  551. openbench/visualization/cmaps/colormaps/ncar_ncl/radar_1.rgb +26 -0
  552. openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+gray.rgb +240 -0
  553. openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+white+gray.rgb +241 -0
  554. openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+white.rgb +240 -0
  555. openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow.rgb +191 -0
  556. openbench/visualization/cmaps/colormaps/ncar_ncl/rh_19lev.rgb +26 -0
  557. openbench/visualization/cmaps/colormaps/ncar_ncl/seaice_1.rgb +15 -0
  558. openbench/visualization/cmaps/colormaps/ncar_ncl/seaice_2.rgb +16 -0
  559. openbench/visualization/cmaps/colormaps/ncar_ncl/so4_21.rgb +24 -0
  560. openbench/visualization/cmaps/colormaps/ncar_ncl/so4_23.rgb +26 -0
  561. openbench/visualization/cmaps/colormaps/ncar_ncl/spread_15lev.rgb +22 -0
  562. openbench/visualization/cmaps/colormaps/ncar_ncl/srip_reanalysis.rgb +21 -0
  563. openbench/visualization/cmaps/colormaps/ncar_ncl/sunshine_9lev.rgb +16 -0
  564. openbench/visualization/cmaps/colormaps/ncar_ncl/sunshine_diff_12lev.rgb +19 -0
  565. openbench/visualization/cmaps/colormaps/ncar_ncl/t2m_29lev.rgb +36 -0
  566. openbench/visualization/cmaps/colormaps/ncar_ncl/tbrAvg1.rgb +102 -0
  567. openbench/visualization/cmaps/colormaps/ncar_ncl/tbrStd1.rgb +103 -0
  568. openbench/visualization/cmaps/colormaps/ncar_ncl/tbrVar1.rgb +103 -0
  569. openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_240-300.rgb +202 -0
  570. openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_stdev_0-30.rgb +202 -0
  571. openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_var_0-500.rgb +202 -0
  572. openbench/visualization/cmaps/colormaps/ncar_ncl/temp1.rgb +63 -0
  573. openbench/visualization/cmaps/colormaps/ncar_ncl/temp_19lev.rgb +26 -0
  574. openbench/visualization/cmaps/colormaps/ncar_ncl/temp_diff_18lev.rgb +25 -0
  575. openbench/visualization/cmaps/colormaps/ncar_ncl/temp_diff_1lev.rgb +8 -0
  576. openbench/visualization/cmaps/colormaps/ncar_ncl/testcmap.rgb +203 -0
  577. openbench/visualization/cmaps/colormaps/ncar_ncl/thelix.rgb +258 -0
  578. openbench/visualization/cmaps/colormaps/ncar_ncl/topo_15lev.rgb +22 -0
  579. openbench/visualization/cmaps/colormaps/ncar_ncl/uniform.rgb +175 -0
  580. openbench/visualization/cmaps/colormaps/ncar_ncl/vegetation_ClarkU.rgb +258 -0
  581. openbench/visualization/cmaps/colormaps/ncar_ncl/vegetation_modis.rgb +23 -0
  582. openbench/visualization/cmaps/colormaps/ncar_ncl/wgne15.rgb +17 -0
  583. openbench/visualization/cmaps/colormaps/ncar_ncl/wh-bl-gr-ye-re.rgb +202 -0
  584. openbench/visualization/cmaps/colormaps/ncar_ncl/wind_17lev.rgb +24 -0
  585. openbench/visualization/cmaps/colormaps/ncar_ncl/wxpEnIR.rgb +102 -0
  586. openbench/visualization/cmaps/colormaps/self_defined/Carbone42.rgb +44 -0
  587. openbench/visualization/cmaps/colormaps/self_defined/NMCRef.rgb +18 -0
  588. openbench/visualization/cmaps/colormaps/self_defined/NMCVel2.rgb +17 -0
  589. openbench/visualization/cmaps/colormaps/self_defined/NWSRef.rgb +17 -0
  590. openbench/visualization/cmaps/colormaps/self_defined/NWSSPW.rgb +9 -0
  591. openbench/visualization/cmaps/colormaps/self_defined/NWSVel.rgb +17 -0
  592. openbench/visualization/cmaps/colormaps/self_defined/TopoGray.rgb +9 -0
  593. openbench/visualization/cmaps/colormaps/self_defined/TwoClass.rgb +4 -0
  594. openbench/visualization/cmaps/colormaps/self_defined/mask.rgb +4 -0
  595. openbench/visualization/only_drawing.py +1978 -0
@@ -0,0 +1,672 @@
1
+ Metadata-Version: 2.4
2
+ Name: colm-openbench
3
+ Version: 3.0.0b1
4
+ Summary: Open Source Land Surface Model Benchmarking System
5
+ Project-URL: Homepage, https://github.com/CoLM-SYSU/OpenBench
6
+ Project-URL: Documentation, https://openbench.readthedocs.io
7
+ Project-URL: Repository, https://github.com/CoLM-SYSU/OpenBench
8
+ Project-URL: Issues, https://github.com/CoLM-SYSU/OpenBench/issues
9
+ Author: Zhongwang Wei, CoLM-SYSU
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: benchmarking,climate,earth science,evaluation,land surface model
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: cartopy>=0.20.0
23
+ Requires-Dist: click>=8.0
24
+ Requires-Dist: dask>=2022.1.0
25
+ Requires-Dist: flox>=0.5.0
26
+ Requires-Dist: jinja2>=3.0.0
27
+ Requires-Dist: joblib>=1.1.0
28
+ Requires-Dist: matplotlib>=3.4.0
29
+ Requires-Dist: netcdf4>=1.5.7
30
+ Requires-Dist: numpy>=1.21.0
31
+ Requires-Dist: packaging>=21.0
32
+ Requires-Dist: pandas>=1.3.0
33
+ Requires-Dist: pyyaml>=6.0
34
+ Requires-Dist: scipy>=1.7.0
35
+ Requires-Dist: tqdm>=4.0
36
+ Requires-Dist: xarray>=0.19.0
37
+ Provides-Extra: all
38
+ Requires-Dist: cryptography>=41.0.0; extra == 'all'
39
+ Requires-Dist: f90nml>=1.4.4; extra == 'all'
40
+ Requires-Dist: paramiko>=3.0.0; extra == 'all'
41
+ Requires-Dist: pyside6>=6.5.0; extra == 'all'
42
+ Requires-Dist: xhtml2pdf>=0.2.5; extra == 'all'
43
+ Provides-Extra: dev
44
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
45
+ Requires-Dist: pytest>=7.0; extra == 'dev'
46
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
47
+ Provides-Extra: gui
48
+ Requires-Dist: pyside6>=6.5.0; extra == 'gui'
49
+ Provides-Extra: migration
50
+ Requires-Dist: f90nml>=1.4.4; extra == 'migration'
51
+ Provides-Extra: remote
52
+ Requires-Dist: cryptography>=41.0.0; extra == 'remote'
53
+ Requires-Dist: paramiko>=3.0.0; extra == 'remote'
54
+ Provides-Extra: report
55
+ Requires-Dist: xhtml2pdf>=0.2.5; extra == 'report'
56
+ Description-Content-Type: text/markdown
57
+
58
+ # OpenBench
59
+
60
+ > Open Source Land Surface Model Benchmarking System
61
+
62
+ [![PyPI version](https://img.shields.io/pypi/v/colm-openbench.svg)](https://pypi.org/project/colm-openbench/)
63
+ [![Python versions](https://img.shields.io/pypi/pyversions/colm-openbench.svg)](https://pypi.org/project/colm-openbench/)
64
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
65
+ [![Docs](https://img.shields.io/badge/docs-readthedocs-blue.svg)](https://openbench.readthedocs.io)
66
+
67
+ OpenBench is a fully automated, cross-platform framework for benchmarking land
68
+ surface models (LSMs) against curated reference datasets. From a single YAML
69
+ config it preprocesses model output and references onto a common grid/time
70
+ window, computes a consistent metric and score suite, renders publication-ready
71
+ comparison figures, and assembles an HTML/PDF report — for any number of
72
+ variables, models, and references at once.
73
+
74
+ ```bash
75
+ pip install colm-openbench
76
+ openbench smoke-test # verify the installed package with bundled sample data
77
+ openbench init # generate openbench.yaml interactively
78
+ openbench check openbench.yaml # validate config + data availability
79
+ openbench run openbench.yaml # evaluate, plot, report
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Table of Contents
85
+
86
+ - [Why OpenBench](#why-openbench)
87
+ - [Key Features](#key-features)
88
+ - [Installation](#installation)
89
+ - [Quick Start](#quick-start)
90
+ - [How It Works](#how-it-works)
91
+ - [Configuration](#configuration)
92
+ - [CLI Reference](#cli-reference)
93
+ - [Metrics & Scores](#metrics--scores)
94
+ - [Comparison & Visualization](#comparison--visualization)
95
+ - [Classification Group-By (IGBP / PFT / Köppen)](#classification-group-by-igbp--pft--köppen)
96
+ - [Reference Data Management](#reference-data-management)
97
+ - [Model Profiles](#model-profiles)
98
+ - [Output Structure](#output-structure)
99
+ - [Performance Tuning](#performance-tuning)
100
+ - [Migrating from Earlier Versions](#migrating-from-earlier-versions)
101
+ - [Requirements](#requirements)
102
+ - [Links](#links)
103
+ - [License](#license)
104
+
105
+ ---
106
+
107
+ ## Why OpenBench
108
+
109
+ Evaluating an LSM normally means hand-wiring regridding, time alignment, masking,
110
+ metric code, and plotting for every model/reference pair — and redoing it when a
111
+ file changes. OpenBench turns that into one declarative config:
112
+
113
+ - **One config, many comparisons.** Variables × models × references are evaluated
114
+ as a full cartesian product, each pair kept in its own output so nothing
115
+ clobbers anything else.
116
+ - **Consistent science.** The same regridding, masking, weighting, and metric
117
+ definitions apply to every pair, so cross-model comparisons are fair by
118
+ construction (cumulative unified masking enforces identical spatial coverage
119
+ across models).
120
+ - **Grid *and* station** references are both first-class.
121
+ - **Incremental & resumable.** Results are cached by a content fingerprint of the
122
+ config, code, and input files; an interrupted run safely resumes without
123
+ recomputing finished work or producing partial summaries.
124
+ - **Reproducible.** Resolved configs, content fingerprints, and resumable caches
125
+ make runs auditable and repeatable.
126
+
127
+ ## Key Features
128
+
129
+ - **Unified configuration** — a single `openbench.yaml` replaces the 4–6 file
130
+ setup of earlier versions, with `_defaults` merging and `!include` splitting.
131
+ - **Reference data registry** — **101** built-in reference datasets (grid and
132
+ station) you can list, inspect, scan, and register.
133
+ - **Model profiles** — **22** built-in profiles (CoLM2024, CLM5, NoahMP5,
134
+ JULES7, VIC5, ERA5-Land, GLDAS2, MATSIRO, CaMa-Flood, WRF, …) supplying
135
+ variable name mappings and unit conversions automatically.
136
+ - **Rich science suite** — 25+ point-wise metrics, 8 normalized skill scores, and
137
+ 17 statistical analysis modules.
138
+ - **Comparison & visualization** — Taylor, Target, Portrait, heat-map, parallel
139
+ coordinates, KDE, ridgeline, and more — generated automatically.
140
+ - **Classification group-by** — per-class aggregation by IGBP land cover, PFT, or
141
+ Köppen climate zone; the masks ship with the package, so it works out of the box.
142
+ - **CLI-first** — `run`, `check`, `init`, `ref`, `sim`, `model`, `migrate`,
143
+ `cache`, `smoke-test`, `gui`.
144
+ - **GUI wizard** — interactive configuration and run management (optional `[gui]`).
145
+ - **Remote execution** — SSH-based job submission to HPC clusters (optional
146
+ `[remote]`).
147
+ - **Migration tool** — convert existing JSON / Fortran NML configs to YAML.
148
+
149
+ ## Installation
150
+
151
+ Recommended clean environment:
152
+
153
+ ```bash
154
+ python -m venv .venv
155
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
156
+ python -m pip install --upgrade pip
157
+ ```
158
+
159
+ Install from PyPI:
160
+
161
+ ```bash
162
+ # Core install (CLI-only, HPC-friendly)
163
+ pip install colm-openbench
164
+
165
+ # With GUI
166
+ pip install "colm-openbench[gui]"
167
+
168
+ # With remote SSH execution
169
+ pip install "colm-openbench[remote]"
170
+
171
+ # With PDF report generation
172
+ pip install "colm-openbench[report]"
173
+
174
+ # With legacy Fortran NML migration support
175
+ pip install "colm-openbench[migration]"
176
+
177
+ # Everything (gui + remote + report + migration)
178
+ pip install "colm-openbench[all]"
179
+ ```
180
+
181
+ Using `uv`:
182
+
183
+ ```bash
184
+ uv pip install "colm-openbench[all]"
185
+ ```
186
+
187
+ ### conda / conda-forge
188
+
189
+ OpenBench ships a conda-forge recipe (`conda/meta.yaml`, `noarch`: sourced from
190
+ PyPI, with Cartopy/NetCDF/PROJ resolved by conda). Once published to
191
+ conda-forge, a single command installs everything (no local compilation):
192
+
193
+ ```bash
194
+ conda install -c conda-forge colm-openbench
195
+ mamba install -c conda-forge colm-openbench # or the faster mamba
196
+ ```
197
+
198
+ > **Note:** the current release is a Beta pre-release (`3.0.0b1`) and is **not on
199
+ > conda-forge yet**. Until it is, use one of the two paths below.
200
+
201
+ If your platform does not have wheels for geospatial dependencies such as
202
+ Cartopy, install the scientific stack from conda-forge first, then install
203
+ OpenBench with pip:
204
+
205
+ ```bash
206
+ mamba create -n openbench -c conda-forge python=3.12 cartopy netcdf4
207
+ mamba activate openbench
208
+ pip install colm-openbench
209
+ ```
210
+
211
+ Or build a local conda package straight from the bundled recipe:
212
+
213
+ ```bash
214
+ conda install -n base conda-build
215
+ conda build conda/
216
+ conda install -c local colm-openbench
217
+ ```
218
+
219
+ Install from a GitHub checkout for development or local testing:
220
+
221
+ ```bash
222
+ git clone https://github.com/CoLM-SYSU/OpenBench.git
223
+ cd OpenBench
224
+ python -m pip install -e ".[dev]"
225
+ ```
226
+
227
+ > The IGBP / PFT / Köppen classification masks needed for group-by analysis are
228
+ > bundled in the package (compressed, ~1.1 MB total) — no extra download.
229
+
230
+ Verify an installation before preparing your own data:
231
+
232
+ ```bash
233
+ openbench smoke-test
234
+ ```
235
+
236
+ This unpacks a bundled `Initial_test` fixture and runs `openbench check` against
237
+ the original grid and station cases: three variables, two simulation cases, and
238
+ their paired reference sources. Use `openbench smoke-test --run` for a full
239
+ evaluation smoke run; the full run may let Cartopy download Natural Earth map
240
+ assets on a clean machine.
241
+
242
+ ## Quick Start
243
+
244
+ ```bash
245
+ # 1. Generate a config interactively (picks variables, references, models)
246
+ openbench init
247
+
248
+ # 2. Validate the config and check reference data availability
249
+ openbench check openbench.yaml
250
+
251
+ # 3. Run the evaluation (metrics + scores + comparison figures + report)
252
+ openbench run openbench.yaml
253
+
254
+ # Re-run after editing the config — only what changed is recomputed
255
+ openbench run openbench.yaml
256
+
257
+ # Force a full re-run, ignoring the incremental cache
258
+ openbench run openbench.yaml --force
259
+ ```
260
+
261
+ Results land in `output/<project_name>/`; start with `reports/report.html`.
262
+
263
+ ## How It Works
264
+
265
+ ```
266
+ config.yaml
267
+ │
268
+ ▼
269
+ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ ┌────────────┐
270
+ │ Preprocess │ → │ Evaluate │ → │ Compare │ → │ Report │
271
+ │ regrid / │ │ metrics & │ │ cross-model │ │ HTML/PDF │
272
+ │ time-align /│ │ scores per │ │ figures & │ │ │
273
+ │ unified mask│ │ (var,sim,ref)│ │ statistics │ │ │
274
+ └─────────────┘ └──────────────┘ └───────────────┘ └────────────┘
275
+ every stage is incrementally cached and resumable
276
+ ```
277
+
278
+ 1. **Preprocess** — each model and reference is regridded to a common resolution,
279
+ clipped to the shared time window, and (optionally) masked so all models share
280
+ identical valid coverage.
281
+ 2. **Evaluate** — for every `(variable, simulation, reference)` triple, OpenBench
282
+ computes the configured metrics and scores (grid → per-cell NetCDF, station →
283
+ per-station CSV).
284
+ 3. **Compare** — when `comparison.enabled`, results across all pairs feed shared
285
+ figures (Taylor, portrait, heat-map, …) and optional statistics.
286
+ 4. **Report** — everything is assembled into an HTML report (PDF with the
287
+ `[report]` extra).
288
+
289
+ ## Configuration
290
+
291
+ A minimal config:
292
+
293
+ ```yaml
294
+ # openbench.yaml
295
+ project:
296
+ name: my_run
297
+ output_dir: ./output
298
+ years: [2010, 2014]
299
+ lat_range: [-90, 90]
300
+ lon_range: [-180, 180]
301
+
302
+ evaluation:
303
+ variables:
304
+ - Evapotranspiration
305
+ - Latent_Heat
306
+
307
+ reference:
308
+ Evapotranspiration: ET_Xu_etal_2025_LowRes
309
+ Latent_Heat: FLUXCOM
310
+
311
+ simulation:
312
+ CoLM2024_test:
313
+ model: CoLM2024 # matches a built-in profile → auto var mapping
314
+ root_dir: /data/simulations/colm2024
315
+ ```
316
+
317
+ A fuller config showing per-simulation overrides, metric/score subsets, and
318
+ comparison/statistics toggles:
319
+
320
+ ```yaml
321
+ project:
322
+ name: multi-model
323
+ output_dir: ./output
324
+ years: [2000, 2020]
325
+ grid_res: 0.5
326
+ num_cores: 16
327
+ time_alignment: per_pair # intersection | per_pair | strict
328
+ unified_mask: true # identical valid coverage across models
329
+ weight: area # area (cos-lat) | mass | none
330
+
331
+ evaluation:
332
+ variables: [Evapotranspiration, Gross_Primary_Productivity, Latent_Heat]
333
+
334
+ reference:
335
+ Evapotranspiration: ET_Xu_etal_2025_LowRes
336
+ Gross_Primary_Productivity: FLUXCOM-X-BASE_LowRes
337
+ Latent_Heat: FLUXCOM
338
+
339
+ simulation:
340
+ CoLM2024:
341
+ model: CoLM2024
342
+ root_dir: /data/CoLM2024
343
+ variables:
344
+ Gross_Primary_Productivity:
345
+ varname: GPP # override the profile's file/variable name
346
+ CLM5:
347
+ model: CLM5
348
+ root_dir: /data/CLM5
349
+ variables:
350
+ Gross_Primary_Productivity:
351
+ varname: FPSN
352
+
353
+ metrics: [bias, RMSE, correlation, KGE]
354
+ scores: [nBiasScore, nRMSEScore, Overall_Score]
355
+
356
+ comparison:
357
+ enabled: true
358
+
359
+ statistics:
360
+ enabled: true
361
+ items: [Z_Score, ANOVA]
362
+ ```
363
+
364
+ ### Key `project` options
365
+
366
+ | Option | Values / default | Meaning |
367
+ |---|---|---|
368
+ | `years` | `[start, end]` | Evaluation time window |
369
+ | `lat_range` / `lon_range` | `[min, max]` | Spatial domain |
370
+ | `grid_res` | float (degrees) | Common grid the data is regridded to |
371
+ | `num_cores` | int / `null` | Parallel workers (`null`/`0` → all CPUs) |
372
+ | `time_alignment` | `intersection` (default) / `per_pair` / `strict` | How model & reference time windows are matched |
373
+ | `regrid_backend` | `openbench_conservative` (default) / `cdo_remapcon` / `xesmf_conservative` / `basic_interpolation` | Regridding engine |
374
+ | `unified_mask` | `true` (default) | Cumulative NaN mask across sims for cross-model fairness |
375
+ | `weight` | `area` (default when omitted) / `mass` / `none` | Spatial aggregation weighting |
376
+ | `IGBP_groupby` / `PFT_groupby` / `climate_zone_groupby` | `false` | Per-class aggregation (see below) |
377
+ | `generate_report` | `true` | Emit HTML/PDF report |
378
+
379
+ ### Advanced config helpers
380
+
381
+ - `_defaults` block — merge shared settings into every `simulation` entry.
382
+ - `!include path/to/partial.yaml` — split large configs across files.
383
+ - Environment variables override YAML at runtime (handy for quick experiments) —
384
+ see [Performance Tuning](#performance-tuning).
385
+
386
+ ## CLI Reference
387
+
388
+ Run `openbench <command> --help` for full options on any command.
389
+
390
+ ### Top-level commands
391
+
392
+ | Command | Description |
393
+ |---|---|
394
+ | `openbench run CONFIG` | Run evaluation, comparison, and report from a YAML config |
395
+ | `openbench check CONFIG` | Validate config and check reference/data availability |
396
+ | `openbench smoke-test` | Validate the installed package with bundled `Initial_test` sample data |
397
+ | `openbench init` | Interactively generate an `openbench.yaml` |
398
+ | `openbench ref ...` | Manage the reference dataset registry (see below) |
399
+ | `openbench model ...` | Manage model profiles (see below) |
400
+ | `openbench sim scan DIR` | Scan directories for simulation cases → config fragments |
401
+ | `openbench cache ...` | Inspect/clear runtime caches (see below) |
402
+ | `openbench migrate OLD` | Convert a JSON or Fortran NML config to YAML |
403
+ | `openbench gui` | Launch the GUI wizard (requires `[gui]` extra) |
404
+ | `openbench version` / `--version` | Print version |
405
+
406
+ Useful `run` flags: `--force` (ignore cache), `--comparison-only` (re-run only
407
+ comparisons on existing outputs), `--dry-run`, `--cores N`,
408
+ `--variable VAR` (repeatable), `--output-dir DIR`, `--dump-config`.
409
+
410
+ ### `openbench ref` — reference registry
411
+
412
+ | Subcommand | Description |
413
+ |---|---|
414
+ | `ref list` | List all available reference datasets |
415
+ | `ref show NAME` | Show details of a dataset |
416
+ | `ref scan DIR` | Scan a directory and auto-register datasets you already have |
417
+ | `ref register NAME` | Register or update a reference dataset |
418
+ | `ref register-profile` | Register a reference profile (variable mappings) |
419
+ | `ref path NAME` | Print the local path for a dataset |
420
+ | `ref optimize` | Convert a dataset to Zarr for faster reads |
421
+ | `ref generate-station-list` | Auto-generate a station-list CSV from NetCDF files |
422
+ | `ref delete NAME` | Delete a user reference entry/overlay |
423
+ | `ref convert-old` | Convert an old-format reference YAML to v3 |
424
+
425
+ ### `openbench model` — model profiles
426
+
427
+ | Subcommand | Description |
428
+ |---|---|
429
+ | `model list` | List all available model profiles |
430
+ | `model show NAME` | Show variable mappings for a profile |
431
+ | `model status` | Show model registry status |
432
+ | `model register` / `rename` / `delete` | Manage user profiles |
433
+ | `model export` / `import` | Move a profile in/out as standalone YAML |
434
+ | `model alias` | List or create user model aliases |
435
+ | `model remove-var` | Remove a variable from a profile |
436
+ | `model validate` | Check a profile for completeness issues |
437
+ | `model path NAME` | Show whether a profile is bundled or user-defined |
438
+
439
+ ### `openbench cache` — runtime caches
440
+
441
+ | Subcommand | Description |
442
+ |---|---|
443
+ | `cache status` | Show cache status (e.g. `--regrid` for the regrid-weight cache) |
444
+ | `cache clear` | Clear selected cache files |
445
+
446
+ ## Metrics & Scores
447
+
448
+ OpenBench computes **25+ point-wise metrics** per `(variable, simulation,
449
+ reference)` pair. By default all applicable metrics are produced; restrict with
450
+ the top-level `metrics:` list.
451
+
452
+ | Metric | Range | Meaning |
453
+ |---|---|---|
454
+ | `bias`, `percent_bias` | (−∞, ∞) | Mean (relative) difference; 0 = unbiased |
455
+ | `RMSE` | [0, ∞) | Root-mean-square error |
456
+ | `ubRMSE` / `CRMSD` | [0, ∞) | Bias-removed (centered) RMSE |
457
+ | `mean_absolute_error` | [0, ∞) | Mean absolute difference |
458
+ | `correlation` | [−1, 1] | Pearson correlation |
459
+ | `correlation_R2` | [0, 1] | Explained-variance fraction |
460
+ | `NSE` | (−∞, 1] | Nash–Sutcliffe efficiency |
461
+ | `KGE`, `KGESS` | (−∞, 1] | Kling–Gupta efficiency / skill score |
462
+ | `index_agreement` | [0, 1] | Willmott index of agreement |
463
+ | `rv` | [0, ∞) | Variance ratio σ_sim / σ_obs |
464
+ | `kappa_coeff` | [−1, 1] | Categorical agreement |
465
+
466
+ **8 normalized skill scores** rescale metrics onto a comparable 0–1 axis
467
+ (1 = best): `nBiasScore`, `nRMSEScore`, `nPhaseScore`, `nIavScore`,
468
+ `nSpatialScore`, `nSeasonalityScore`, `index_agreement`, and the combined
469
+ `Overall_Score` that drives portrait plots and rankings.
470
+
471
+ Beyond metrics/scores, the `statistics` block exposes **17 analysis modules**
472
+ (correlation, ANOVA, Mann–Kendall trend, three-cornered hat, Hellinger distance,
473
+ partial least squares, false discovery rate, …).
474
+
475
+ ## Comparison & Visualization
476
+
477
+ When `comparison.enabled: true`, OpenBench renders cross-model figures
478
+ automatically (PNG, with the underlying data saved alongside):
479
+
480
+ - **Taylor diagram** & **Target diagram** — correlation/variance/CRMSD at a glance
481
+ - **Portrait plot** (seasonal) — model × variable score grid
482
+ - **Heat map** & **land-cover-based heat map**
483
+ - **Parallel coordinates**, **kernel density estimate**, **ridgeline**,
484
+ **whisker** plots
485
+ - **Difference plots**, **relative score**, **radar map**
486
+ - **Single Model Performance Index (SMPI)**, **Mann–Kendall trend**,
487
+ **three-cornered hat**, **functional response**, **PLSR**
488
+
489
+ ## Classification Group-By (IGBP / PFT / Köppen)
490
+
491
+ OpenBench can aggregate scores per land-cover or climate class. Enable any of:
492
+
493
+ ```yaml
494
+ project:
495
+ IGBP_groupby: true # MODIS/IGBP land cover (17 classes)
496
+ PFT_groupby: true # Plant Functional Type (16 classes)
497
+ climate_zone_groupby: true # Köppen climate zone (30 classes)
498
+ ```
499
+
500
+ The classification masks (`IGBP.nc`, `PFT.nc`, `Climate_zone.nc`) are **bundled
501
+ with the package** (compressed integer masks, ~1.1 MB total), so group-by works
502
+ out of the box with no extra download. To use your own / higher-resolution masks,
503
+ override the bundled versions via either:
504
+
505
+ ```bash
506
+ export OPENBENCH_DATASET_DIR=/path/to/your/dataset # highest priority
507
+ # or place files in ./dataset/<name>.nc relative to where you run openbench
508
+ ```
509
+
510
+ Per-class results appear under
511
+ `output/<run>/comparisons/{IGBP,PFT,Climate_zone}_groupby/`.
512
+
513
+ ## Reference Data Management
514
+
515
+ ```bash
516
+ # Browse all 101 reference datasets
517
+ openbench ref list
518
+
519
+ # Inspect a single dataset (a base name resolves to its resolution family)
520
+ openbench ref show GLEAM_v4.2a
521
+
522
+ # Scan a directory and auto-register reference datasets you already have
523
+ openbench ref scan /Volumes/work/Reference
524
+ ```
525
+
526
+ Example `openbench ref list` output:
527
+
528
+ ```
529
+ Name Category Type Res Years Variables
530
+ ────────────────────────────────────────────────────────────────────────────────────
531
+ AH4GUC_LowRes Urban grid 0.5° 2010-2010 1
532
+ CERES_EBAF_Ed4.2_LowRes Energy grid 0.5° ... 7
533
+ CLARA_3_LowRes Energy grid 0.5° 1979-2024 8
534
+ CN05.1_MidRes Meteorology grid 0.25° 1961-2021 2
535
+ Caravan_Daily Water stn stn 1950-2023 1
536
+ ... ... ... ... ... ...
537
+ Total: 101 datasets
538
+ ```
539
+
540
+ Many datasets come in multiple resolutions (`_LowRes`, `_MidRes`); a base name
541
+ like `GLEAM_v4.2a` resolves to its family, or you can pin a specific one such as
542
+ `ET_Xu_etal_2025_LowRes`.
543
+
544
+ ## Model Profiles
545
+
546
+ ```bash
547
+ openbench model list # list built-in profiles
548
+ openbench model show CoLM2024 # variable mappings for a profile
549
+ ```
550
+
551
+ Example `openbench model list` output:
552
+
553
+ ```
554
+ Name Type Res Variables Complete
555
+ ────────────────────────────────────────────────────────────
556
+ CoLM2024 grid 0.5° 52 ✓
557
+ CLM5 grid 1.25° 69 ⚠ 16
558
+ ERA5-Land grid 0.1° 12 ✓
559
+ GLDAS grid 0.25° 11 ✓
560
+ NoahMP5 grid ... 70 ⚠ 34
561
+ ...
562
+ Total: 22 model profiles
563
+ ```
564
+
565
+ When `simulation.<name>.model` matches a known profile, variable file-name
566
+ patterns and unit conversions are applied automatically. Fields in the
567
+ simulation entry override the profile.
568
+
569
+ ## Output Structure
570
+
571
+ ```
572
+ output/<project_name>/
573
+ ├── config.yaml # the fully-resolved config actually used
574
+ ├── run.log # complete run log
575
+ ├── data/ # preprocessed (regridded, clipped) sim/ref NetCDF
576
+ ├── metrics/ # per-(var,sim,ref) metrics — grid: NetCDF, station: CSV
577
+ ├── scores/ # per-(var,sim,ref) normalized scores
578
+ ├── figures/ # per-pair visualizations (PNG)
579
+ ├── comparisons/ # cross-model figures + group-by results (if enabled)
580
+ ├── statistics/ # statistical analyses (if enabled)
581
+ ├── reports/
582
+ │ ├── report.html
583
+ │ └── report.pdf # only with the [report] extra
584
+ └── .openbench_cache.json # incremental cache index
585
+ ```
586
+
587
+ Grid evaluations write one NetCDF per metric
588
+ (`<var>_ref_<R>_sim_<S>_<metric>.nc`, dims `(lat, lon)` or `(time, lat, lon)`);
589
+ station evaluations write an aggregated CSV
590
+ (`<var>_stn_<R>_<S>_evaluations.csv`, one row per station). Read either directly
591
+ with `xarray` / `pandas` for downstream analysis.
592
+
593
+ ## Performance Tuning
594
+
595
+ For high-resolution grids or many simulation files, tune IO and Dask in
596
+ `openbench.yaml`:
597
+
598
+ ```yaml
599
+ project:
600
+ num_cores: 16
601
+
602
+ io:
603
+ # true enables zlib for numeric NetCDF outputs; level 1 is the fast default.
604
+ netcdf_compression: true
605
+ netcdf_compression_level: 1
606
+
607
+ # auto/null: use the resource planner; 0: disable; N: force N files per batch.
608
+ mfdataset_batch_size: auto
609
+ mfdataset_auto_batch_min_files: 200
610
+ mfdataset_auto_batch_min_size_mb: 1024
611
+ mfdataset_auto_batch_max_size: 100
612
+ mfdataset_auto_batch_memory_fraction: 0.25
613
+
614
+ dask:
615
+ enabled: true
616
+ n_workers: 4
617
+ threads_per_worker: 1
618
+ processes: true
619
+ memory_limit: auto
620
+ ```
621
+
622
+ Environment variables override YAML and take precedence, which is useful for
623
+ temporary benchmarking:
624
+
625
+ ```bash
626
+ OPENBENCH_NETCDF_COMPRESSION=1 OPENBENCH_NETCDF_COMP_LEVEL=1 \
627
+ OPENBENCH_MFDATASET_BATCH_SIZE=50 \
628
+ OPENBENCH_DASK=1 OPENBENCH_DASK_N_WORKERS=4 \
629
+ openbench run openbench.yaml --force
630
+ ```
631
+
632
+ For repeatable measurements, run the same config from a clean output directory
633
+ and keep the resolved config, run log, and environment metadata with the output:
634
+
635
+ ```bash
636
+ openbench run openbench.yaml --force --dump-config
637
+ ```
638
+
639
+ ## Migrating from Earlier Versions
640
+
641
+ ```bash
642
+ # Convert an existing JSON config
643
+ openbench migrate old_config.json -o openbench.yaml
644
+
645
+ # Convert a Fortran NML config (requires the [migration] extra)
646
+ openbench migrate main.nml -o openbench.yaml
647
+ ```
648
+
649
+ The v3.0 migration path is designed to preserve the intended evaluation setup
650
+ while making defaults and generated YAML explicit. For publication comparisons,
651
+ archive the resolved `config.yaml` and rerun a small overlap case before mixing
652
+ old and new result sets.
653
+
654
+ ## Requirements
655
+
656
+ - Python 3.10 or newer
657
+ - Core dependencies: xarray, numpy, scipy, pandas, netCDF4, matplotlib,
658
+ cartopy, dask, joblib, flox, PyYAML, Jinja2, click, tqdm, packaging
659
+ - Optional extras: `gui` (PySide6), `remote` (paramiko), `report` (xhtml2pdf),
660
+ `migration` (f90nml)
661
+ - See [`pyproject.toml`](pyproject.toml) for the full pinned dependency list
662
+
663
+ ## Links
664
+
665
+ - Source: <https://github.com/CoLM-SYSU/OpenBench>
666
+ - Documentation: <https://openbench.readthedocs.io>
667
+ - User's Guide (PDF): [English](docs/manual/OpenBench_UsersGuide_EN.pdf) · [中文](docs/manual/OpenBench_UsersGuide.pdf)
668
+ - Issues: <https://github.com/CoLM-SYSU/OpenBench/issues>
669
+
670
+ ## License
671
+
672
+ MIT License. See [LICENSE](LICENSE) for details.