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.
- colm_openbench-3.0.0.dist-info/METADATA +713 -0
- colm_openbench-3.0.0.dist-info/RECORD +605 -0
- colm_openbench-3.0.0.dist-info/WHEEL +4 -0
- colm_openbench-3.0.0.dist-info/entry_points.txt +2 -0
- colm_openbench-3.0.0.dist-info/licenses/LICENSE +21 -0
- openbench/CONVENTIONS.md +43 -0
- openbench/__init__.py +7 -0
- openbench/__main__.py +5 -0
- openbench/cli/__init__.py +1 -0
- openbench/cli/_display.py +85 -0
- openbench/cli/_names.py +53 -0
- openbench/cli/_optimize.py +85 -0
- openbench/cli/_options.py +61 -0
- openbench/cli/_parsing.py +198 -0
- openbench/cli/_profile_rescue.py +806 -0
- openbench/cli/_ref_commands.py +165 -0
- openbench/cli/_reference_errors.py +20 -0
- openbench/cli/_register.py +371 -0
- openbench/cli/_scan.py +292 -0
- openbench/cli/_scan_support.py +115 -0
- openbench/cli/_simulation_validation.py +37 -0
- openbench/cli/_wizard.py +79 -0
- openbench/cli/cache.py +66 -0
- openbench/cli/check.py +795 -0
- openbench/cli/data.py +376 -0
- openbench/cli/gui.py +25 -0
- openbench/cli/init_cmd.py +1688 -0
- openbench/cli/main.py +75 -0
- openbench/cli/migrate.py +35 -0
- openbench/cli/model.py +1147 -0
- openbench/cli/registry_cmd.py +133 -0
- openbench/cli/run.py +445 -0
- openbench/cli/sim.py +744 -0
- openbench/cli/smoke.py +349 -0
- openbench/config/__init__.py +30 -0
- openbench/config/adapter.py +1231 -0
- openbench/config/loader.py +1180 -0
- openbench/config/migration.py +532 -0
- openbench/config/provenance.py +5 -0
- openbench/config/resolver.py +412 -0
- openbench/config/runtime_info.py +919 -0
- openbench/config/schema.py +181 -0
- openbench/config/user_settings.py +80 -0
- openbench/core/__init__.py +46 -0
- openbench/core/_comparison_basic.py +198 -0
- openbench/core/_comparison_common.py +100 -0
- openbench/core/_comparison_diagrams.py +12 -0
- openbench/core/_comparison_diff.py +11 -0
- openbench/core/_comparison_diff_grid.py +172 -0
- openbench/core/_comparison_diff_plot.py +82 -0
- openbench/core/_comparison_diff_station.py +264 -0
- openbench/core/_comparison_distributions.py +472 -0
- openbench/core/_comparison_heatmap.py +80 -0
- openbench/core/_comparison_helpers.py +241 -0
- openbench/core/_comparison_parallel.py +246 -0
- openbench/core/_comparison_portrait.py +11 -0
- openbench/core/_comparison_portrait_calculations.py +127 -0
- openbench/core/_comparison_portrait_seasonal.py +461 -0
- openbench/core/_comparison_relative.py +297 -0
- openbench/core/_comparison_smpi.py +305 -0
- openbench/core/_comparison_tail.py +411 -0
- openbench/core/_comparison_target.py +279 -0
- openbench/core/_comparison_taylor.py +397 -0
- openbench/core/_visualization_bridge.py +23 -0
- openbench/core/appendix_methods.py +318 -0
- openbench/core/climatezone_groupby.py +528 -0
- openbench/core/comparison.py +142 -0
- openbench/core/evaluation.py +916 -0
- openbench/core/landcover_groupby.py +870 -0
- openbench/core/metrics.py +1526 -0
- openbench/core/registry.py +194 -0
- openbench/core/scores.py +254 -0
- openbench/core/statistics/Mod_Statistics.py +726 -0
- openbench/core/statistics/__init__.py +79 -0
- openbench/core/statistics/base.py +18 -0
- openbench/core/statistics/stat_Basic.py +63 -0
- openbench/core/statistics/stat_False_Discovery_Rate.py +120 -0
- openbench/core/statistics/stat_anova.py +277 -0
- openbench/core/statistics/stat_autocorrelation.py +47 -0
- openbench/core/statistics/stat_correlation.py +40 -0
- openbench/core/statistics/stat_covariance.py +19 -0
- openbench/core/statistics/stat_diff.py +14 -0
- openbench/core/statistics/stat_functional_response.py +96 -0
- openbench/core/statistics/stat_hellinger_distance.py +92 -0
- openbench/core/statistics/stat_mann_kendall_trend_test.py +179 -0
- openbench/core/statistics/stat_partial_least_squares_regression.py +219 -0
- openbench/core/statistics/stat_resample.py +26 -0
- openbench/core/statistics/stat_rolling.py +24 -0
- openbench/core/statistics/stat_standard_deviation.py +16 -0
- openbench/core/statistics/stat_three_cornered_hat.py +217 -0
- openbench/core/statistics/stat_variance.py +14 -0
- openbench/core/statistics/stat_z_score.py +42 -0
- openbench/data/__init__.py +1 -0
- openbench/data/_processing_base.py +12 -0
- openbench/data/_processing_config.py +495 -0
- openbench/data/_processing_grid.py +20 -0
- openbench/data/_processing_grid_core.py +300 -0
- openbench/data/_processing_grid_regrid.py +220 -0
- openbench/data/_processing_selection.py +554 -0
- openbench/data/_processing_station.py +12 -0
- openbench/data/_processing_station_core.py +407 -0
- openbench/data/_processing_station_extract.py +157 -0
- openbench/data/_processing_time.py +13 -0
- openbench/data/_processing_time_adjustments.py +146 -0
- openbench/data/_processing_time_core.py +259 -0
- openbench/data/_processing_time_integrity.py +227 -0
- openbench/data/_processing_transforms.py +271 -0
- openbench/data/_processing_utils.py +148 -0
- openbench/data/_processing_yearly.py +252 -0
- openbench/data/_system_resources.py +265 -0
- openbench/data/cache.py +849 -0
- openbench/data/climatology.py +514 -0
- openbench/data/compute.py +258 -0
- openbench/data/coordinates.py +218 -0
- openbench/data/custom/CH4_FluxnetANN_filter.py +108 -0
- openbench/data/custom/GEBA_filter.py +118 -0
- openbench/data/custom/HydroWeb_filter.py +169 -0
- openbench/data/custom/LAI_Yuan2011_filter.py +93 -0
- openbench/data/custom/ResOpsUS_filter.py +97 -0
- openbench/data/custom/__init__.py +88 -0
- openbench/data/fignml/ANOVA.yaml +32 -0
- openbench/data/fignml/Basic.yaml +37 -0
- openbench/data/fignml/CZ_groupby_source.yaml +32 -0
- openbench/data/fignml/Correlation.yaml +33 -0
- openbench/data/fignml/Diff_Plot.yaml +37 -0
- openbench/data/fignml/False_Discovery_Rate.yaml +2 -0
- openbench/data/fignml/Functional_Response.yaml +34 -0
- openbench/data/fignml/HeatMap_source.yaml +31 -0
- openbench/data/fignml/Hellinger_Distance.yaml +33 -0
- openbench/data/fignml/IGBP_groupby_source.yaml +33 -0
- openbench/data/fignml/Kernel_Density_Estimate.yaml +30 -0
- openbench/data/fignml/Mann_Kendall_Trend_Test.yaml +38 -0
- openbench/data/fignml/PFT_groupby_source.yaml +33 -0
- openbench/data/fignml/Parallel_Coordinates.yaml +29 -0
- openbench/data/fignml/Partial_Least_Squares_Regression.yaml +33 -0
- openbench/data/fignml/Portrait_Plot_seasonal.yaml +39 -0
- openbench/data/fignml/RadarMap.yaml +21 -0
- openbench/data/fignml/Relative_Score.yaml +38 -0
- openbench/data/fignml/Ridgeline_Plot.yaml +20 -0
- openbench/data/fignml/Single_Model_Performance_Index.yaml +25 -0
- openbench/data/fignml/Standard_Deviation.yaml +33 -0
- openbench/data/fignml/Target_Diagram.yaml +26 -0
- openbench/data/fignml/Taylor_Diagram.yaml +41 -0
- openbench/data/fignml/Three_Cornered_Hat.yaml +32 -0
- openbench/data/fignml/Whisker_Plot.yaml +54 -0
- openbench/data/fignml/Z_Score.yaml +32 -0
- openbench/data/fignml/__init__.py +9 -0
- openbench/data/fignml/figlib.yaml +39 -0
- openbench/data/fignml/make_geo_plot_index.yaml +35 -0
- openbench/data/fignml/make_stn_plot_index.yaml +33 -0
- openbench/data/fignml/plot_stn.yaml +29 -0
- openbench/data/processing.py +64 -0
- openbench/data/registry/__init__.py +16 -0
- openbench/data/registry/_filename_dates.py +123 -0
- openbench/data/registry/converter.py +152 -0
- openbench/data/registry/manager.py +1155 -0
- openbench/data/registry/model_catalog.yaml +3562 -0
- openbench/data/registry/overlay_audit.py +314 -0
- openbench/data/registry/reference_catalog.yaml +3602 -0
- openbench/data/registry/reference_profiles.yaml +1574 -0
- openbench/data/registry/scanner.py +3465 -0
- openbench/data/registry/schema.py +190 -0
- openbench/data/registry/station_lists/CH4_FluxnetANN.csv +2 -0
- openbench/data/registry/station_lists/GEBA.csv +2 -0
- openbench/data/registry/station_lists/GLEAM_Hybird.csv +91 -0
- openbench/data/registry/station_lists/LAI_Yuan2011.csv +3 -0
- openbench/data/registry/station_lists/ResOpsUS.csv +679 -0
- openbench/data/registry/station_lists/Xu_et_al2025.csv +367 -0
- openbench/data/regrid/__about__.py +1 -0
- openbench/data/regrid/__init__.py +5 -0
- openbench/data/regrid/methods/__init__.py +3 -0
- openbench/data/regrid/methods/_shared.py +105 -0
- openbench/data/regrid/methods/conservative.py +650 -0
- openbench/data/regrid/methods/flox_reduce.py +179 -0
- openbench/data/regrid/methods/interp.py +52 -0
- openbench/data/regrid/regrid.py +314 -0
- openbench/data/regrid/regrid_wgs84.py +132 -0
- openbench/data/regrid/utils.py +454 -0
- openbench/data/regrid/xesmf_cache.py +151 -0
- openbench/data/sim_scanner.py +1738 -0
- openbench/data/station_matcher.py +452 -0
- openbench/data/station_missing.py +56 -0
- openbench/data/station_scanner.py +591 -0
- openbench/data/time_utils.py +384 -0
- openbench/data/unit.py +319 -0
- openbench/dataset/Climate_zone.nc +0 -0
- openbench/dataset/IGBP.nc +0 -0
- openbench/dataset/PFT.nc +0 -0
- openbench/dataset/smoke/initial_test.tar.gz +0 -0
- openbench/dataset/smoke/openbench-smoke.yaml +87 -0
- openbench/gui/__init__.py +22 -0
- openbench/gui/app.py +68 -0
- openbench/gui/config_manager.py +1802 -0
- openbench/gui/controller.py +467 -0
- openbench/gui/data_validator.py +947 -0
- openbench/gui/dialogs/__init__.py +4 -0
- openbench/gui/dialogs/data_discovery.py +221 -0
- openbench/gui/dialogs/scan_confirm.py +170 -0
- openbench/gui/localization.py +552 -0
- openbench/gui/main_window.py +1406 -0
- openbench/gui/pages/__init__.py +32 -0
- openbench/gui/pages/_scan_worker.py +572 -0
- openbench/gui/pages/base_page.py +129 -0
- openbench/gui/pages/page_comparisons.py +58 -0
- openbench/gui/pages/page_evaluation.py +143 -0
- openbench/gui/pages/page_general.py +998 -0
- openbench/gui/pages/page_metrics.py +57 -0
- openbench/gui/pages/page_preview.py +1061 -0
- openbench/gui/pages/page_ref_data.py +1204 -0
- openbench/gui/pages/page_registry.py +1305 -0
- openbench/gui/pages/page_run_monitor.py +811 -0
- openbench/gui/pages/page_runtime.py +1237 -0
- openbench/gui/pages/page_scores.py +57 -0
- openbench/gui/pages/page_sim_data.py +1627 -0
- openbench/gui/pages/page_statistics.py +52 -0
- openbench/gui/path_utils.py +873 -0
- openbench/gui/progress_parser.py +224 -0
- openbench/gui/remote_python.py +147 -0
- openbench/gui/remote_registry.py +332 -0
- openbench/gui/remote_runner.py +791 -0
- openbench/gui/runner.py +601 -0
- openbench/gui/styles/checkmark.png +0 -0
- openbench/gui/styles/checkmark.svg +3 -0
- openbench/gui/styles/openbench-logo.png +0 -0
- openbench/gui/styles/theme.qss +273 -0
- openbench/gui/validation.py +257 -0
- openbench/gui/widgets/__init__.py +28 -0
- openbench/gui/widgets/_ssh_worker.py +226 -0
- openbench/gui/widgets/_task_worker.py +71 -0
- openbench/gui/widgets/checkbox_group.py +173 -0
- openbench/gui/widgets/model_definition_editor.py +376 -0
- openbench/gui/widgets/nc_importer.py +362 -0
- openbench/gui/widgets/no_scroll_widgets.py +31 -0
- openbench/gui/widgets/path_completer.py +123 -0
- openbench/gui/widgets/path_selector.py +258 -0
- openbench/gui/widgets/progress_dashboard.py +363 -0
- openbench/gui/widgets/remote_config.py +2696 -0
- openbench/gui/widgets/sync_status.py +183 -0
- openbench/gui/widgets/validation_dialog.py +284 -0
- openbench/gui/widgets/variable_editor.py +323 -0
- openbench/gui/widgets/yaml_preview.py +127 -0
- openbench/remote/__init__.py +15 -0
- openbench/remote/connections.py +158 -0
- openbench/remote/credentials.py +297 -0
- openbench/remote/ssh.py +1206 -0
- openbench/remote/storage.py +222 -0
- openbench/remote/sync.py +725 -0
- openbench/runner/__init__.py +1 -0
- openbench/runner/cache.py +202 -0
- openbench/runner/cache_state.py +71 -0
- openbench/runner/config_preflight.py +61 -0
- openbench/runner/context.py +65 -0
- openbench/runner/dask_runtime.py +307 -0
- openbench/runner/evaluation_dispatch.py +154 -0
- openbench/runner/hashing.py +589 -0
- openbench/runner/local.py +453 -0
- openbench/runner/masking.py +211 -0
- openbench/runner/orchestration.py +498 -0
- openbench/runner/pair_ref.py +143 -0
- openbench/runner/postprocessing.py +419 -0
- openbench/runner/preflight.py +470 -0
- openbench/runner/preflight_facade.py +113 -0
- openbench/runner/preprocessing.py +442 -0
- openbench/runner/progress_events.py +51 -0
- openbench/runner/task_execution.py +196 -0
- openbench/runner/task_planning.py +114 -0
- openbench/util/__init__.py +1 -0
- openbench/util/converttype.py +45 -0
- openbench/util/dataset_loader.py +732 -0
- openbench/util/exceptions.py +387 -0
- openbench/util/filenames.py +173 -0
- openbench/util/interfaces.py +245 -0
- openbench/util/logging_system.py +567 -0
- openbench/util/names.py +197 -0
- openbench/util/netcdf.py +249 -0
- openbench/util/output.py +605 -0
- openbench/util/parallel.py +768 -0
- openbench/util/report.py +2339 -0
- openbench/util/static_datasets.py +63 -0
- openbench/visualization/Fig_ANOVA.py +201 -0
- openbench/visualization/Fig_Basic_Plot.py +884 -0
- openbench/visualization/Fig_Correlation.py +131 -0
- openbench/visualization/Fig_Diff_Plot.py +547 -0
- openbench/visualization/Fig_Functional_Response.py +162 -0
- openbench/visualization/Fig_Hellinger_Distance.py +177 -0
- openbench/visualization/Fig_LC_based_heat_map.py +567 -0
- openbench/visualization/Fig_Mann_Kendall_Trend_Test.py +206 -0
- openbench/visualization/Fig_Partial_Least_Squares_Regression.py +226 -0
- openbench/visualization/Fig_Relative_Score.py +397 -0
- openbench/visualization/Fig_Ridgeline_Plot.py +199 -0
- openbench/visualization/Fig_Single_Model_Performance_Index.py +363 -0
- openbench/visualization/Fig_Standard_Deviation.py +174 -0
- openbench/visualization/Fig_Three_Cornered_Hat.py +229 -0
- openbench/visualization/Fig_Whisker_Plot.py +235 -0
- openbench/visualization/Fig_geo_plot_index.py +152 -0
- openbench/visualization/Fig_heatmap.py +196 -0
- openbench/visualization/Fig_kernel_density_estimate.py +206 -0
- openbench/visualization/Fig_parallel_coordinates.py +899 -0
- openbench/visualization/Fig_portrait_plot_seasonal.py +1363 -0
- openbench/visualization/Fig_radarmap.py +161 -0
- openbench/visualization/Fig_stn_plot_index.py +193 -0
- openbench/visualization/Fig_target_diagram.py +1826 -0
- openbench/visualization/Fig_taylor_diagram.py +2475 -0
- openbench/visualization/Fig_toolbox.py +335 -0
- openbench/visualization/Mod_Only_Drawing.py +15 -0
- openbench/visualization/__init__.py +88 -0
- openbench/visualization/_combinations.py +78 -0
- openbench/visualization/_diagram_sampling.py +91 -0
- openbench/visualization/_diagram_utils.py +234 -0
- openbench/visualization/_downsample.py +122 -0
- openbench/visualization/_figure_io.py +39 -0
- openbench/visualization/_filenames.py +5 -0
- openbench/visualization/_rc_isolation.py +72 -0
- openbench/visualization/_sampling.py +71 -0
- openbench/visualization/_validation.py +38 -0
- openbench/visualization/cmaps/LICENSE +675 -0
- openbench/visualization/cmaps/__init__.py +5 -0
- openbench/visualization/cmaps/_version.py +2 -0
- openbench/visualization/cmaps/cmaps.py +6281 -0
- openbench/visualization/cmaps/cmaps.template +86 -0
- openbench/visualization/cmaps/colormap.py +58 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/3gauss.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/3saw.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BkBlAqGrYeOrReViWh200.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrWh2YeOrReVi22.rgb +24 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrYeOrRe.rgb +102 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlAqGrYeOrReVi200.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlGrYeOrReVi200.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlRe.rgb +98 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlWhRe.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueDarkOrange18.rgb +25 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueDarkRed18.rgb +25 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueGreen14.rgb +21 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueRed.rgb +253 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueRedGray.rgb +254 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueWhiteOrangeRed.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BlueYellowRed.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/BrownBlue12.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_coldhot.rgb +13 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_drywet.rgb +13 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_set3.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/CBR_wet.rgb +13 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/Cat12.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/Copyright +6 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GHRSST_anomaly.rgb +44 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_cool.rgb +12 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_copper.rgb +52 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_drywet.rgb +62 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_gebco.rgb +72 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_globe.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_gray.rgb +12 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_haxby.rgb +34 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_hot.rgb +102 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_jet.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_nighttime.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_no_green.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_ocean.rgb +82 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_paired.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_panoply.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_polar.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_red2green.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_relief.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_relief_oceanonly.rgb +162 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_seis.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_split.rgb +42 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_topo.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_wysiwyg.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GMT_wysiwygcont.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GSFC_landsat_udf_density.rgb +13 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GrayWhiteGray.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GreenMagenta16.rgb +23 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/GreenYellow.rgb +253 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Accent.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Blues.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BrBG.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BuGn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_BuPu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Dark2.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_GnBu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Greens.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Greys.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_OrRd.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Oranges.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PRGn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Paired.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Pastel1.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Pastel2.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PiYG.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuBu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuBuGn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuOr.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_PuRd.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Purples.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdBu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdGy.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdPu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdYlBu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_RdYlGn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Reds.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set1.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set2.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Set3.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_Spectral.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_StepSeq.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlGn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlGnBu.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlOrBr.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_YlOrRd.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_afmhot.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_autumn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_bone.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_brg.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_bwr.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_cool.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_coolwarm.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_copper.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_cubehelix.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_flag.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_earth.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_gray.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_heat.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_ncar.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_rainbow.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_stern.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gist_yarg.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gnuplot.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_gnuplot2.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_hot.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_hsv.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_jet.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_ocean.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_pink.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_prism.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_rainbow.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_s3pcpn.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_s3pcpn_l.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_seismic.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_spring.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_sstanom.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_summer.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_terrain.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_viridis.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/MPL_winter.rgb +130 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_banded.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_blu_red.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_blue_red.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_bright.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_gebco.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_jaisnd.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_jet.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_manga.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_rainbow2.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NCV_roullet.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_a.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_b.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_div_vegetation_c.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NEO_modis_ndvi.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NMCRef.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NMCVel.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/NOC_ndvi.rgb +255 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/OceanLakeLandSnow.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Gallet13.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Lindaa06.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_Lindaa07.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_bhw3_22.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_es_landscape_79.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_feb_sunrise.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_foggy_sunrise.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/SVG_fs2006.rgb +222 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/StepSeq25.rgb +32 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/UKM_hadcrut.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/ViBlGrWhYeOrRe.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhBlGrYeRe.rgb +102 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhBlReWh.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhViBlGrYeOrRe.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhViBlGrYeOrReWh.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteBlue.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteBlueGreenYellowRed.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteGreen.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/WhiteYellowOrangeRed.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/amwg.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/amwg256.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/amwg_blueyellowred.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cb_9step.rgb +80 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cb_rainbow.rgb +243 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cb_rainbow_inv.rgb +243 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/circular_0.rgb +20 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/circular_1.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/circular_2.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cividis.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_algae.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_amp.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_balance.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_curl.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_deep.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_delta.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_dense.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_gray.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_haline.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_ice.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_matter.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_oxy.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_phase.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_solar.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_speed.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_tempo.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_thermal.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmocean_turbid.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_b2r.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_flux.rgb +24 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cmp_haxby.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cosam.rgb +12 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cosam12.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/cyclic.rgb +8 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/default.rgb +36 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/detail.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/draw_cmap.ncl +23 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/drought_severity.rgb +9 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/example.rgb +115 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/extrema.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/grads_default.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/grads_rainbow.rgb +17 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/gscyclic.rgb +8 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/gsdtol.rgb +33 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/gsltod.rgb +33 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/gui_default.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/helix.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/helix1.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/hlu_default.rgb +36 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/hotcold_18lev.rgb +25 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/hotcolr_19lev.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/hotres.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/lithology.rgb +215 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_hot.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_hsv.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_jet.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/matlab_lines.rgb +66 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/mch_default.rgb +21 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/ncl_default.rgb +257 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/ncview_default.rgb +256 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/nice_gfdl.rgb +227 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/nrl_sirkes.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/nrl_sirkes_nowhite.rgb +20 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/perc2_9lev.rgb +16 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/percent_11lev.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/posneg_1.rgb +21 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/posneg_2.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_1.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_2.rgb +14 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/prcp_3.rgb +25 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip2_15lev.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip2_17lev.rgb +24 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip3_16lev.rgb +23 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip4_11lev.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip4_diff_19lev.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip_11lev.rgb +18 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip_diff_12lev.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/precip_diff_1lev.rgb +8 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/psgcap.rgb +240 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/radar.rgb +17 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/radar_1.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+gray.rgb +240 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+white+gray.rgb +241 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow+white.rgb +240 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/rainbow.rgb +191 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/rh_19lev.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/seaice_1.rgb +15 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/seaice_2.rgb +16 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/so4_21.rgb +24 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/so4_23.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/spread_15lev.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/srip_reanalysis.rgb +21 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/sunshine_9lev.rgb +16 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/sunshine_diff_12lev.rgb +19 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/t2m_29lev.rgb +36 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbrAvg1.rgb +102 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbrStd1.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbrVar1.rgb +103 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_240-300.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_stdev_0-30.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/tbr_var_0-500.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/temp1.rgb +63 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/temp_19lev.rgb +26 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/temp_diff_18lev.rgb +25 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/temp_diff_1lev.rgb +8 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/testcmap.rgb +203 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/thelix.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/topo_15lev.rgb +22 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/uniform.rgb +175 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/vegetation_ClarkU.rgb +258 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/vegetation_modis.rgb +23 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/wgne15.rgb +17 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/wh-bl-gr-ye-re.rgb +202 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/wind_17lev.rgb +24 -0
- openbench/visualization/cmaps/colormaps/ncar_ncl/wxpEnIR.rgb +102 -0
- openbench/visualization/cmaps/colormaps/self_defined/Carbone42.rgb +44 -0
- openbench/visualization/cmaps/colormaps/self_defined/NMCRef.rgb +18 -0
- openbench/visualization/cmaps/colormaps/self_defined/NMCVel2.rgb +17 -0
- openbench/visualization/cmaps/colormaps/self_defined/NWSRef.rgb +17 -0
- openbench/visualization/cmaps/colormaps/self_defined/NWSSPW.rgb +9 -0
- openbench/visualization/cmaps/colormaps/self_defined/NWSVel.rgb +17 -0
- openbench/visualization/cmaps/colormaps/self_defined/TopoGray.rgb +9 -0
- openbench/visualization/cmaps/colormaps/self_defined/TwoClass.rgb +4 -0
- openbench/visualization/cmaps/colormaps/self_defined/mask.rgb +4 -0
- 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
|
+
[](https://pypi.org/project/colm-openbench/)
|
|
72
|
+
[](https://pypi.org/project/colm-openbench/)
|
|
73
|
+
[](LICENSE)
|
|
74
|
+
[-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.
|