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