From 39e90610d1c9f60bb9c6c29fc5603bb8e025a662 Mon Sep 17 00:00:00 2001 From: George McCabe <23407799+georgemccabe@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:25:42 -0600 Subject: [PATCH] Revert "Update develop-ref after dtcenter/MET#2988" (#2721) This reverts commit 0ea5acbf3ea7683bcb256ed68519202add27b7b1. --- .coveragerc | 1 - .github/parm/use_case_groups.json | 6 - .github/update_truth_change_log.txt | 1 - docs/Contributors_Guide/add_use_case.rst | 1 - docs/Contributors_Guide/documentation.rst | 67 +--- docs/Users_Guide/glossary.rst | 139 +++++--- docs/Users_Guide/quicksearch.rst | 2 - docs/Users_Guide/wrappers.rst | 336 +++++++++++------- ..._obsGOES_MRMS_BrightnessTemp_Lightning.png | Bin 250838 -> 0 bytes ...S_obsGOES_MRMS_BrightnessTemp_Lightning.py | 179 ---------- internal/scripts/docker/Dockerfile | 2 +- .../sonarqube/sonar-project.properties | 4 +- .../pytests/util/run_util/test_run_util.py | 1 + .../test_string_template_substitution.py | 21 +- .../ascii2nc/test_ascii2nc_wrapper.py | 19 + .../test_ensemble_stat_wrapper.py | 7 + .../gen_ens_prod/test_gen_ens_prod_wrapper.py | 9 + .../wrappers/grid_diag/test_grid_diag.py | 6 + .../wrappers/ioda2nc/test_ioda2nc_wrapper.py | 10 +- .../madis2nc/test_madis2nc_wrapper.py | 2 + .../pytests/wrappers/mtd/test_mtd_wrapper.py | 6 + .../wrappers/pb2nc/test_pb2nc_wrapper.py | 7 + .../test_plot_point_obs_wrapper.py | 6 + .../wrappers/point2grid/test_point2grid.py | 94 +---- .../point_stat/test_point_stat_wrapper.py | 7 + .../stat_analysis/test_stat_analysis.py | 10 +- .../wrappers/tc_diag/test_tc_diag_wrapper.py | 6 + .../wrappers/tc_gen/test_tc_gen_wrapper.py | 6 + .../tc_pairs/test_tc_pairs_wrapper.py | 6 + .../wrappers/tc_stat/test_tc_stat_wrapper.py | 6 + .../wrappers/tcrmw/test_tcrmw_wrapper.py | 6 + internal/tests/use_cases/all_use_cases.txt | 2 +- metplus/parm | 1 - metplus/scripts/run_metplus.py | 1 - metplus/util/config_metplus.py | 5 +- metplus/util/constants.py | 8 - metplus/util/run_util.py | 2 +- metplus/wrappers/command_builder.py | 20 +- metplus/wrappers/point2grid_wrapper.py | 48 +-- metplus/wrappers/series_analysis_wrapper.py | 27 +- parm/met_config/Ascii2NcConfig_wrapped | 1 + parm/met_config/EnsembleStatConfig_wrapped | 1 + parm/met_config/GenEnsProdConfig_wrapped | 1 + parm/met_config/GridDiagConfig_wrapped | 1 + parm/met_config/IODA2NCConfig_wrapped | 1 + parm/met_config/MTDConfig_wrapped | 1 + parm/met_config/Madis2NcConfig_wrapped | 2 + parm/met_config/PB2NCConfig_wrapped | 1 + parm/met_config/PlotPointObsConfig_wrapped | 1 + parm/met_config/Point2GridConfig_wrapped | 54 --- parm/met_config/PointStatConfig_wrapped | 1 + parm/met_config/STATAnalysisConfig_wrapped | 1 + parm/met_config/TCDiagConfig_wrapped | 1 + parm/met_config/TCGenConfig_wrapped | 1 + parm/met_config/TCPairsConfig_wrapped | 1 + parm/met_config/TCRMWConfig_wrapped | 1 + parm/met_config/TCStatConfig_wrapped | 1 + .../met_tool_wrapper/ASCII2NC/ASCII2NC.conf | 2 + .../EnsembleStat/EnsembleStat.conf | 2 + .../GenEnsProd/GenEnsProd.conf | 2 + .../met_tool_wrapper/GridDiag/GridDiag.conf | 2 + .../met_tool_wrapper/IODA2NC/IODA2NC.conf | 2 + .../met_tool_wrapper/MADIS2NC/MADIS2NC.conf | 2 + parm/use_cases/met_tool_wrapper/MTD/MTD.conf | 2 + .../met_tool_wrapper/PB2NC/PB2NC.conf | 2 + .../PlotPointObs/PlotPointObs.conf | 2 + .../Point2Grid/Point2Grid.conf | 14 +- .../met_tool_wrapper/PointStat/PointStat.conf | 2 + .../StatAnalysis/StatAnalysis.conf | 2 + .../met_tool_wrapper/TCDiag/TCDiag.conf | 2 + .../met_tool_wrapper/TCGen/TCGen.conf | 2 + .../TCPairs/TCPairs_extra_tropical.conf | 2 + .../met_tool_wrapper/TCRMW/TCRMW.conf | 2 + .../met_tool_wrapper/TCStat/TCStat.conf | 2 + ...obsGOES_MRMS_BrightnessTemp_Lightning.conf | 132 ------- .../produtil => produtil}/README_produtil.md | 0 {metplus/produtil => produtil}/__init__.py | 0 {metplus/produtil => produtil}/batchsystem.py | 0 {metplus/produtil => produtil}/cluster.py | 0 {metplus/produtil => produtil}/config.py | 23 +- {metplus/produtil => produtil}/datastore.py | 19 +- {metplus/produtil => produtil}/dbnalert.py | 5 +- {metplus/produtil => produtil}/externals | 0 {metplus/produtil => produtil}/fileop.py | 6 +- {metplus/produtil => produtil}/locking.py | 8 +- {metplus/produtil => produtil}/log.py | 4 +- .../mpi_impl/__init__.py | 53 ++- .../mpi_impl/mpi_impl_base.py | 11 +- .../produtil => produtil}/mpi_impl/no_mpi.py | 5 +- .../produtil => produtil}/mpi_impl/srun.py | 32 +- {metplus/produtil => produtil}/mpiprog.py | 13 +- {metplus/produtil => produtil}/numerics.py | 0 {metplus/produtil => produtil}/pipeline.py | 0 {metplus/produtil => produtil}/prog.py | 6 +- {metplus/produtil => produtil}/retry.py | 0 {metplus/produtil => produtil}/run.py | 23 +- {metplus/produtil => produtil}/setup.py | 21 +- {metplus/produtil => produtil}/sigsafety.py | 9 +- pyproject.toml | 47 +-- requirements.txt | 6 +- setup.py | 54 +++ ush/run_metplus.py | 9 +- 102 files changed, 712 insertions(+), 978 deletions(-) delete mode 100644 docs/_static/short_range-MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.png delete mode 100644 docs/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.py delete mode 120000 metplus/parm delete mode 120000 metplus/scripts/run_metplus.py delete mode 100644 parm/met_config/Point2GridConfig_wrapped delete mode 100644 parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf rename {metplus/produtil => produtil}/README_produtil.md (100%) rename {metplus/produtil => produtil}/__init__.py (100%) rename {metplus/produtil => produtil}/batchsystem.py (100%) rename {metplus/produtil => produtil}/cluster.py (100%) rename {metplus/produtil => produtil}/config.py (99%) rename {metplus/produtil => produtil}/datastore.py (98%) rename {metplus/produtil => produtil}/dbnalert.py (98%) rename {metplus/produtil => produtil}/externals (100%) rename {metplus/produtil => produtil}/fileop.py (99%) rename {metplus/produtil => produtil}/locking.py (97%) rename {metplus/produtil => produtil}/log.py (99%) rename {metplus/produtil => produtil}/mpi_impl/__init__.py (89%) rename {metplus/produtil => produtil}/mpi_impl/mpi_impl_base.py (98%) rename {metplus/produtil => produtil}/mpi_impl/no_mpi.py (88%) rename {metplus/produtil => produtil}/mpi_impl/srun.py (90%) rename {metplus/produtil => produtil}/mpiprog.py (99%) rename {metplus/produtil => produtil}/numerics.py (100%) rename {metplus/produtil => produtil}/pipeline.py (100%) rename {metplus/produtil => produtil}/prog.py (99%) rename {metplus/produtil => produtil}/retry.py (100%) rename {metplus/produtil => produtil}/run.py (97%) rename {metplus/produtil => produtil}/setup.py (85%) rename {metplus/produtil => produtil}/sigsafety.py (97%) create mode 100644 setup.py diff --git a/.coveragerc b/.coveragerc index 04ab2270b..4c6218095 100644 --- a/.coveragerc +++ b/.coveragerc @@ -3,4 +3,3 @@ relative_files = True source = metplus omit = metplus/wrappers/cyclone_plotter_wrapper.py - metplus/produtil/** \ No newline at end of file diff --git a/.github/parm/use_case_groups.json b/.github/parm/use_case_groups.json index 8d12b81db..05cc0b619 100644 --- a/.github/parm/use_case_groups.json +++ b/.github/parm/use_case_groups.json @@ -276,12 +276,6 @@ "disabled": true, "run": false }, - { - "category": "short_range", - "index_list": "15", - "disabled": true, - "run":false - }, { "category": "space_weather", "index_list": "0-1", diff --git a/.github/update_truth_change_log.txt b/.github/update_truth_change_log.txt index 1413e26b3..fd6a31913 100644 --- a/.github/update_truth_change_log.txt +++ b/.github/update_truth_change_log.txt @@ -7,4 +7,3 @@ [20240905_16:45:56 develop] dtcenter/MET#2959 - Correct bugs in SEDI and BAGSS contingency table statistics found in the CTS line type [20240910_19:03:38 develop] dtcenter/MET#2967 - Fixes integer overflow bug in the computation of the CTS and NBRCTS ORSS, ORSS_NCL, and ORSS_NCU columns. [20240926_16:50:38 develop] #2701 - #2701 added a new use case (SeriesAnalysis_aggr) that produces new output -[20241014_16:07:34 develop] dtcenter/MET#2988 - dtcenter/MET#2988 -- see issue #2719 for details diff --git a/docs/Contributors_Guide/add_use_case.rst b/docs/Contributors_Guide/add_use_case.rst index 56f8815db..10fe4c9a7 100644 --- a/docs/Contributors_Guide/add_use_case.rst +++ b/docs/Contributors_Guide/add_use_case.rst @@ -169,7 +169,6 @@ Use Cases that Exceed GitHub Actions Disk Space ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - *model_applications/s2s_stratosphere/UserScript_fcstGFS_obsERA_StratospherePolar* - *model_applications/s2s_stratosphere/UserScript_fcstGFS_obsERA_StratosphereQBO* -- *model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning* .. _use_case_documentation: diff --git a/docs/Contributors_Guide/documentation.rst b/docs/Contributors_Guide/documentation.rst index 89373f480..a340774bd 100644 --- a/docs/Contributors_Guide/documentation.rst +++ b/docs/Contributors_Guide/documentation.rst @@ -218,7 +218,7 @@ for more information. **What to bold:** - * Environment Variables (e.g. **MET_INSTALL_DIR, INPUT_BASE, METCALCPY_HOME**, etc.) + * Variables (e.g. **MET_INSTALL_DIR, INPUT_BASE, METCALCPY_HOME**, etc.) * Filenames (**line_defaults.yaml, contour_defaults.yaml, defaults.conf**, etc.) Italics @@ -395,20 +395,6 @@ resulting in the following displayed text: See `Overleaf's Guide - Matrices `_ for more information. -Literal Include ---------------- - -This feature is used often in the Release Guide, but there are other places it could be useful. -Using a literal include ensures only having to update the documentation in one place. -It is important to use a relative path (i.e. "../../") to get to the correct -directory of the file being referenced in the literal include. This will keep the -file linking to the correct version and branch. - -As an example, refer to the METplus User's Guide. See this -`line `_ -in the PointStat Wrapper Use Case documentation, which uses RST's :code:`.. literalinclude::` -and renders the text of the referenced file in this -`section `_. Literal Blocks -------------- @@ -439,54 +425,6 @@ and `literal blocks `_ for more information. -Substitution References ------------------------ - -Substitution references are replacements in the text as defined in the :code:`rst_epilog` -in the **docs/conf.py** file. For example, instead of hard coding the MET version in -the METplus documentation, a variable :code:`met_version` can be set to a value -(e.g. 12.0.0) in the **docs/conf.py** file in the following way: - -.. code-block:: ini - - met_version = 12.0.0 - -Then, this variable is used in the :code:`rst_epilog` to set up the substitution, -along with other variables. For example, in the **docs/conf.py** -file the following is defined: - -.. code-block:: ini - - rst_epilog = f""" - .. |copyright| replace:: {copyright} - .. |author_list| replace:: {author_list} - .. |release_date| replace:: {release_date} - .. |release_year| replace:: {release_year} - .. |release_info| replace:: {release_info} - .. |python_version| replace:: {python_version} - .. |met_version| replace:: {met_version} - """ - -The value 12.0.0 would then be replaced in the documentation wherever -:code:`|met_version|` is used in .rst files. For example: - -.. code-block:: ini - - MET version |met_version| or above - -There are some -`reserved substitution variables `_ -in Sphinx. These variables are -:code:`|release|`, :code:`|version|`, :code:`|today|`, and -:code:`|translation progress|`. Reserved substitution variables do not -need to be added to :code:`rst_epilog`, but other variables do. - -See -`Substitutions `_ -and -`rst_epilog `_ -for more information. - Line Blocks ----------- @@ -1475,7 +1413,8 @@ Read the Docs supports multiple versions for each repository. For the METplus components, the "latest" version will point to the latest official (stable) release. The "develop" or "development" version will point to the most up to date development code. There may also be other previous versions of the -software available in the version selector menu. +software available in the version selector menu, which is accessible by +clicking in the bottom left corner of the documentation pages. Automation rules allow project maintainers to automate actions on new branches and tags on repositories. For the METplus components, documentation is diff --git a/docs/Users_Guide/glossary.rst b/docs/Users_Guide/glossary.rst index 2dcd640c4..6bc690bf7 100644 --- a/docs/Users_Guide/glossary.rst +++ b/docs/Users_Guide/glossary.rst @@ -290,12 +290,7 @@ METplus Configuration Glossary | *Used by:* Point2Grid POINT2GRID_QC_FLAGS - .. warning:: **DEPRECATED:** Please use :term:`POINT2GRID_GOES_QC_FLAGS`. - - | *Used by:* Point2Grid - - POINT2GRID_GOES_QC_FLAGS - Sets the value for the -goes_qc command line argument for Point2Grid. + Specify the qc flags name that is read by Point2Grid. | *Used by:* Point2Grid @@ -11629,46 +11624,6 @@ METplus Configuration Glossary | *Used by:* PointStat - POINT2GRID_VALID_TIME - Specify the value for 'valid_time' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_OBS_WINDOW_BEG - Specify the value for 'obs_window.beg' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_OBS_WINDOW_END - Specify the value for 'obs_window.end' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_MESSAGE_TYPE - Specify the value for 'message_type' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_VAR_NAME_MAP_KEY - Specify the value for the nth 'var_name_map.key' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_VAR_NAME_MAP_VAL - Specify the value for the nth 'var_name_map.val' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_OBS_QUALITY_INC - Specify the value for 'obs_quality_inc' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - - POINT2GRID_OBS_QUALITY_EXC - Specify the value for 'obs_quality_exc' in the MET configuration file for Point2Grid. - - | *Used by:* Point2Grid - MADIS2NC_CUSTOM_LOOP_LIST Sets custom string loop list for a specific wrapper. See :term:`CUSTOM_LOOP_LIST`. @@ -11857,39 +11812,105 @@ METplus Configuration Glossary | *Used by:* MADIS2NC + MADIS2NC_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for MADIS2NC. + + | *Used by:* MADIS2NC + + ASCII2NC_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for ASCII2NC. + + | *Used by:* ASCII2NC + + ENSEMBLE_STAT_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for EnsembleStat. + + | *Used by:* EnsembleStat + + GEN_ENS_PROD_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for GenEnsProd. + + | *Used by:* GenEnsProd + + GRID_DIAG_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for GridDiag. + + | *Used by:* GridDiag + GRID_STAT_TIME_OFFSET_WARNING Specify the value for 'time_offset_warning' in the MET configuration file for GridStat. | *Used by:* GridStat + IODA2NC_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for IODA2NC. + + | *Used by:* IODA2NC + MODE_TIME_OFFSET_WARNING Specify the value for 'time_offset_warning' in the MET configuration file for MODE. | *Used by:* MODE + MTD_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for MTD. + + | *Used by:* MTD + + PB2NC_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for PB2NC. + + | *Used by:* PB2NC + + PLOT_POINT_OBS_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for PlotPointObs. + + | *Used by:* PlotPointObs + + POINT_STAT_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for PointStat. + + | *Used by:* PointStat + + STAT_ANALYSIS_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for StatAnalysis. + + | *Used by:* StatAnalysis + SERIES_ANALYSIS_TIME_OFFSET_WARNING Specify the value for 'time_offset_warning' in the MET configuration file for SeriesAnalysis. | *Used by:* SeriesAnalysis - WAVELET_STAT_TIME_OFFSET_WARNING - Specify the value for 'time_offset_warning' in the MET configuration file for WaveletStat. + TC_DIAG_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for TCDiag. - | *Used by:* WaveletStat + | *Used by:* TCDiag - POINT2GRID_MET_CONFIG_OVERRIDES - Override any variables in the MET configuration file that are not - supported by the wrapper. This should be set to the full variable name - and value that you want to override, including the equal sign and the - ending semi-colon. The value is directly appended to the end of the - wrapped MET config file. + TC_GEN_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for TCGen. - Example: - POINT2GRID_MET_CONFIG_OVERRIDES = desc = "override_desc"; model = "override_model"; + | *Used by:* TCGen - See :ref:`Overriding Unsupported MET config file settings` for more information + TC_PAIRS_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for TCPairs. - | *Used by:* Point2Grid + | *Used by:* TCPairs + + TC_RMW_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for TCRMW. + + | *Used by:* TCRMW + + TC_STAT_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for TCStat. + + | *Used by:* TCStat + + WAVELET_STAT_TIME_OFFSET_WARNING + Specify the value for 'time_offset_warning' in the MET configuration file for WaveletStat. + + | *Used by:* WaveletStat ASCII2NC_VALID_BEG Specify the value for the command line argument '-valid_beg' for ASCII2NC. diff --git a/docs/Users_Guide/quicksearch.rst b/docs/Users_Guide/quicksearch.rst index c51d262d3..30aaca532 100644 --- a/docs/Users_Guide/quicksearch.rst +++ b/docs/Users_Guide/quicksearch.rst @@ -156,7 +156,6 @@ Use Cases by METplus Feature: | `METplotpy <../search.html?q=METplotpyUseCase&check_keywords=yes&area=default>`_ | `MET_PYTHON_EXE Environment Variable <../search.html?q=MET_PYTHON_EXEUseCase&check_keywords=yes&area=default>`_ | `Multiple Conf File Use <../search.html?q=MultiConfUseCase&check_keywords=yes&area=default>`_ - | `MultivariateMODE <../search.html?q=MvMODEUseCase&check_keywords=yes&area=default>`_ | `Observation Time Summary <../search.html?q=ObsTimeSummaryUseCase&check_keywords=yes&area=default>`_ | `Observation Uncertainty <../search.html?q=ObsUncertaintyUseCase&check_keywords=yes&area=default>`_ | `Python Embedding Ingest <../search.html?q=PyEmbedIngestToolUseCase&check_keywords=yes&area=default>`_ @@ -188,7 +187,6 @@ Use Cases by METplus Feature: | **METplotpy**: *METplotpyUseCase* | **MET_PYTHON_EXE Environment Variable**: *MET_PYTHON_EXEUseCase* | **Multiple Conf File Use**: *MultiConfUseCase* - | **MultivariateMODE**: *MvMODEUseCase* | **Observation Time Summary**: *ObsTimeSummaryUseCase* | **Observation Uncertainty**: *ObsUncertaintyUseCase* | **Python Embedding Ingest**: *PyEmbedIngestToolUseCase* diff --git a/docs/Users_Guide/wrappers.rst b/docs/Users_Guide/wrappers.rst index aa2794377..c4da8506a 100644 --- a/docs/Users_Guide/wrappers.rst +++ b/docs/Users_Guide/wrappers.rst @@ -64,6 +64,7 @@ METplus Configuration | :term:`ASCII2NC_INC_VALID_TIMES` | :term:`ASCII2NC_SKIP_INIT_TIMES` | :term:`ASCII2NC_INC_INIT_TIMES` +| :term:`ASCII2NC_TIME_OFFSET_WARNING` | .. _ascii2nc-met-conf: @@ -123,6 +124,18 @@ ${METPLUS_TIME_SUMMARY_DICT} * - :term:`ASCII2NC_TIME_SUMMARY_VALID_THRESH` - time_summary.vld_thresh +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`ASCII2NC_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -378,6 +391,7 @@ METplus Configuration | :term:`ENSEMBLE_STAT_INC_VALID_TIMES` | :term:`ENSEMBLE_STAT_SKIP_INIT_TIMES` | :term:`ENSEMBLE_STAT_INC_INIT_TIMES` +| :term:`ENSEMBLE_STAT_TIME_OFFSET_WARNING` | .. warning:: **DEPRECATED:** @@ -1103,6 +1117,18 @@ ${METPLUS_OUTPUT_PREFIX} * - :term:`ENSEMBLE_STAT_OUTPUT_PREFIX` - output_prefix +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`ENSEMBLE_STAT_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -1326,6 +1352,7 @@ METplus Configuration | :term:`GEN_ENS_PROD_INC_VALID_TIMES` | :term:`GEN_ENS_PROD_SKIP_INIT_TIMES` | :term:`GEN_ENS_PROD_INC_INIT_TIMES` +| :term:`GEN_ENS_PROD_TIME_OFFSET_WARNING` .. _gen-ens-prod-met-conf: @@ -1679,6 +1706,18 @@ ${METPLUS_ENSEMBLE_FLAG_DICT} * - :term:`GEN_ENS_PROD_ENSEMBLE_FLAG_CLIMO_CDP` - ensemble_flag.climo_cdp +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`GEN_ENS_PROD_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -3028,6 +3067,7 @@ METplus Configuration | :term:`GRID_DIAG_INC_VALID_TIMES` | :term:`GRID_DIAG_SKIP_INIT_TIMES` | :term:`GRID_DIAG_INC_INIT_TIMES` +| :term:`GRID_DIAG_TIME_OFFSET_WARNING` | .. _grid-diag-met-conf: @@ -3152,6 +3192,18 @@ ${METPLUS_MASK_DICT} .. note:: Since the default value in the MET config file for 'grid' is grid = [ "FULL" ];, setting GRID_DIAG_MASK_GRID to an empty string will result in a value of grid = []; in the MET config file. +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`GRID_DIAG_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -4143,6 +4195,7 @@ METplus Configuration | :term:`IODA2NC_INC_VALID_TIMES` | :term:`IODA2NC_SKIP_INIT_TIMES` | :term:`IODA2NC_INC_INIT_TIMES` +| :term:`IODA2NC_TIME_OFFSET_WARNING` .. _ioda2nc-met-conf: @@ -4365,6 +4418,18 @@ ${METPLUS_TIME_SUMMARY_DICT} * - :term:`IODA2NC_TIME_SUMMARY_VLD_THRESH` - time_summary.vld_thresh +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`IODA2NC_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -4425,6 +4490,7 @@ METplus Configuration | :term:`MADIS2NC_INC_VALID_TIMES` | :term:`MADIS2NC_SKIP_INIT_TIMES` | :term:`MADIS2NC_INC_INIT_TIMES` +| :term:`MADIS2NC_TIME_OFFSET_WARNING` | .. _madis2nc-met-conf: @@ -4484,6 +4550,18 @@ ${METPLUS_TIME_SUMMARY_DICT} * - :term:`MADIS2NC_TIME_SUMMARY_VLD_THRESH` - time_summary.vld_thresh +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`MADIS2NC_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -5612,6 +5690,7 @@ METplus Configuration | :term:`MTD_INC_VALID_TIMES` | :term:`MTD_SKIP_INIT_TIMES` | :term:`MTD_INC_INIT_TIMES` +| :term:`MTD_TIME_OFFSET_WARNING` | .. warning:: **DEPRECATED:** @@ -5844,6 +5923,18 @@ ${METPLUS_OUTPUT_PREFIX} * - :term:`MTD_OUTPUT_PREFIX` - output_prefix +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`MTD_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -5904,6 +5995,7 @@ METplus Configuration | :term:`PB2NC_INC_VALID_TIMES` | :term:`PB2NC_SKIP_INIT_TIMES` | :term:`PB2NC_INC_INIT_TIMES` +| :term:`PB2NC_TIME_OFFSET_WARNING` .. warning:: **DEPRECATED:** @@ -6108,6 +6200,18 @@ ${METPLUS_TIME_SUMMARY_DICT} * - :term:`PB2NC_TIME_SUMMARY_VALID_THRESH` - time_summary.vld_thresh +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`PB2NC_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -6380,6 +6484,7 @@ Configuration | :term:`PLOT_POINT_OBS_INC_VALID_TIMES` | :term:`PLOT_POINT_OBS_SKIP_INIT_TIMES` | :term:`PLOT_POINT_OBS_INC_INIT_TIMES` +| :term:`PLOT_POINT_OBS_TIME_OFFSET_WARNING` .. _plot-point-obs-met-conf: @@ -6709,6 +6814,18 @@ ${METPLUS_POINT_DATA} * - :term:`PLOT_POINT_OBS_POINT_DATA` - point_data +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`PLOT_POINT_OBS_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -6745,7 +6862,7 @@ METplus Configuration | :term:`POINT2GRID_REGRID_TO_GRID` | :term:`POINT2GRID_INPUT_FIELD` | :term:`POINT2GRID_INPUT_LEVEL` -| :term:`POINT2GRID_GOES_QC_FLAGS` +| :term:`POINT2GRID_QC_FLAGS` | :term:`POINT2GRID_ADP` | :term:`POINT2GRID_REGRID_METHOD` | :term:`POINT2GRID_GAUSSIAN_DX` @@ -6758,134 +6875,8 @@ METplus Configuration | :term:`POINT2GRID_INC_VALID_TIMES` | :term:`POINT2GRID_SKIP_INIT_TIMES` | :term:`POINT2GRID_INC_INIT_TIMES` -| :term:`POINT2GRID_VALID_TIME` -| :term:`POINT2GRID_OBS_WINDOW_BEG` -| :term:`POINT2GRID_OBS_WINDOW_END` -| :term:`POINT2GRID_MESSAGE_TYPE` -| :term:`POINT2GRID_VAR_NAME_MAP_KEY` -| :term:`POINT2GRID_VAR_NAME_MAP_VAL` -| :term:`POINT2GRID_OBS_QUALITY_INC` -| :term:`POINT2GRID_OBS_QUALITY_EXC` -| :term:`POINT2GRID_MET_CONFIG_OVERRIDES` | -.. warning:: **DEPRECATED:** - - | :term:`POINT2GRID_QC_FLAGS` - -.. _point2grid-met-conf: - -MET Configuration ------------------ - -Below is the wrapped MET configuration file used for this wrapper. -Environment variables are used to control entries in this configuration file. -The default value for each environment variable is obtained from -(except where noted below): - -`MET_INSTALL_DIR/share/met/config/Point2GridConfig_default `_ - -Below the file contents are descriptions of each environment variable -referenced in this file and the corresponding METplus configuration item used -to set the value of the environment variable. For detailed examples showing -how METplus sets the values of these environment variables, -see :ref:`How METplus controls MET config file settings`. - -.. dropdown:: Click to view parm/met_config/Point2GridConfig_wrapped - - .. literalinclude:: ../../parm/met_config/Point2GridConfig_wrapped - -Environment variables in wrapped MET config -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -${METPLUS_VALID_TIME} -^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_VALID_TIME` - - valid_time - -${METPLUS_OBS_WINDOW_DICT} -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_OBS_WINDOW_BEG` - - obs_window.beg - * - :term:`POINT2GRID_OBS_WINDOW_END` - - obs_window.end - -${METPLUS_MESSAGE_TYPE} -^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_MESSAGE_TYPE` - - message_type - -${METPLUS_VAR_NAME_MAP_LIST} -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_VAR_NAME_MAP_KEY` - - var_name_map.key - * - :term:`POINT2GRID_VAR_NAME_MAP_VAL` - - var_name_map.val - -${METPLUS_OBS_QUALITY_INC} -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_OBS_QUALITY_INC` - - obs_quality_inc - -${METPLUS_OBS_QUALITY_EXC} -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_OBS_QUALITY_EXC` - - obs_quality_exc - -${METPLUS_MET_CONFIG_OVERRIDES} -""""""""""""""""""""""""""""""" - -.. list-table:: - :widths: 5 5 - :header-rows: 1 - - * - METplus Config(s) - - MET Config File - * - :term:`POINT2GRID_MET_CONFIG_OVERRIDES` - - n/a - .. _point_stat_wrapper: PointStat @@ -7097,6 +7088,7 @@ Configuration | :term:`POINT_STAT_UGRID_MAX_DISTANCE_KM` | :term:`POINT_STAT_UGRID_COORDINATES_FILE` | :term:`POINT_STAT_UGRID_CONFIG_FILE` +| :term:`POINT_STAT_TIME_OFFSET_WARNING` | .. warning:: **DEPRECATED:** @@ -7787,6 +7779,18 @@ ${METPLUS_OUTPUT_PREFIX} * - :term:`POINT_STAT_OUTPUT_PREFIX` - output_prefix +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`POINT_STAT_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -8848,6 +8852,7 @@ The following values are optional in the METplus configuration file: | :term:`STAT_ANALYSIS_INC_VALID_TIMES` | :term:`STAT_ANALYSIS_SKIP_INIT_TIMES` | :term:`STAT_ANALYSIS_INC_INIT_TIMES` +| :term:`STAT_ANALYSIS_TIME_OFFSET_WARNING` .. warning:: **DEPRECATED:** @@ -9310,6 +9315,18 @@ ${METPLUS_HSS_EC_VALUE} * - :term:`STAT_ANALYSIS_HSS_EC_VALUE` - hss_ec_value +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`STAT_ANALYSIS_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -9390,6 +9407,7 @@ METplus Configuration | :term:`TC_DIAG_INC_VALID_TIMES` | :term:`TC_DIAG_SKIP_INIT_TIMES` | :term:`TC_DIAG_INC_INIT_TIMES` +| :term:`TC_DIAG_TIME_OFFSET_WARNING` | .. _tc-diag-met-conf: @@ -9817,6 +9835,18 @@ ${METPLUS_OUTPUT_PREFIX} * - :term:`TC_DIAG_OUTPUT_BASE_FORMAT` - output_base_format +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`TC_DIAG_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -9922,6 +9952,7 @@ METplus Configuration | :term:`TC_GEN_DLAND_FILE` | :term:`TC_GEN_BASIN_FILE` | :term:`TC_GEN_NC_PAIRS_GRID` +| :term:`TC_GEN_TIME_OFFSET_WARNING` .. warning:: **DEPRECATED:** @@ -10488,6 +10519,18 @@ ${METPLUS_NC_PAIRS_GRID} * - :term:`TC_GEN_NC_PAIRS_GRID` - nc_pairs_grid +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`TC_GEN_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -10583,6 +10626,7 @@ METplus Configuration | :term:`TC_PAIRS_INC_VALID_TIMES` | :term:`TC_PAIRS_SKIP_INIT_TIMES` | :term:`TC_PAIRS_INC_INIT_TIMES` +| :term:`TC_PAIRS_TIME_OFFSET_WARNING` | .. warning:: **DEPRECATED:** @@ -10921,6 +10965,18 @@ ${METPLUS_DIAG_CONVERT_MAP_LIST} * - :term:`TC_PAIRS_DIAG_CONVERT_MAP_CONVERT` - diag_convert_map.convert +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`TC_PAIRS_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -10986,6 +11042,7 @@ METplus Configuration | :term:`TC_RMW_INC_VALID_TIMES` | :term:`TC_RMW_SKIP_INIT_TIMES` | :term:`TC_RMW_INC_INIT_TIMES` +| :term:`TC_RMW_TIME_OFFSET_WARNING` | .. _tc-rmw-met-conf: @@ -11247,6 +11304,18 @@ ${METPLUS_RMW_SCALE} * - :term:`TC_RMW_SCALE` - rmw_scale +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`TC_RMW_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" @@ -11331,6 +11400,7 @@ METplus Configuration | :term:`TC_STAT_INC_VALID_TIMES` | :term:`TC_STAT_SKIP_INIT_TIMES` | :term:`TC_STAT_INC_INIT_TIMES` +| :term:`TC_STAT_TIME_OFFSET_WARNING` | .. warning:: **DEPRECATED:** @@ -11954,6 +12024,18 @@ ${METPLUS_JOBS} * - :term:`TC_STAT_JOBS_LIST` - jobs +${METPLUS_TIME_OFFSET_WARNING} +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 5 + :header-rows: 1 + + * - METplus Config(s) + - MET Config File + * - :term:`TC_STAT_TIME_OFFSET_WARNING` + - time_offset_warning + ${METPLUS_MET_CONFIG_OVERRIDES} """"""""""""""""""""""""""""""" diff --git a/docs/_static/short_range-MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.png b/docs/_static/short_range-MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.png deleted file mode 100644 index 34cffb6993d58c2019ce6d164b9641b0576b75b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250838 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
  • T-J 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%0D>G8l#}z>Srer_a8u(BZ131rI``YcdX<1 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 diff --git a/docs/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.py b/docs/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.py deleted file mode 100644 index 77209d9cf..000000000 --- a/docs/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.py +++ /dev/null @@ -1,179 +0,0 @@ -""" -MODEMultivar: Create objects of brightness temps and radar reflectivity -======================================================================= - -model_applications/ -short_range/ -MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf - -""" -############################################################################## -# .. contents:: -# :depth: 1 -# :local: -# :backlinks: none - -############################################################################## -# Scientific Objective -# -------------------- -# -# This use case identifies convective objects, which are defined by -# the intersection of: 1) satellite infrared brightness temperature < 235 K and -# 2) radar reflectivity > 40 dBZ. -# Satellite brightness temperatures are used in conjunction with radar reflectivity -# to capture both the cloud top (satellite) and in-cloud (radar) characteristics. -# Convective objects are also defined as lightning thresholds exceeding the 10th percentile. -# A percentile threshold is used for lightning data as RRFS lightning has units -# which are “non-dimensional” and therefore cannot be directly compared to the -# Geostationary Lightning Mapper. - -############################################################################## -# Version Added -# ------------- -# -# METplus Version 6.0 - -############################################################################## -# Datasets -# -------- -# -# **Forecast:** Rapid Refresh Forecast System (RRFS) 3km resolution, -# channel 13 brightness temperature, -# composite reflectivity, and lightning strike density -# -# **Observation:** Geostationary Operational Environmental Satellites (GOES) 3km resolution, -# channel 13 brightness temperature; -# Multi-radar Multi-sensor (MRMS) 3km resolution, composite reflectivity; -# GOES Global Lightning Mapper (GLM) 3km resolution, flash_extent_density -# -# **Climatology:** None -# -# **Location:** All of the input data required for this use case can be found in a sample data -# tarball. Each use case category will have one or more sample data tarballs. It is only -# necessary to download the tarball with the use case’s dataset and not the entire -# collection of sample data. Click here to access the METplus releases page and download -# sample data for the appropriate release: https://github.com/dtcenter/METplus/releases -# This tarball should be unpacked into the directory that you will set the value of -# INPUT_BASE. See :ref:`running-metplus` for more information. - -############################################################################## -# METplus Components -# ------------------ -# -# The only tool this use case calls is MODE, which will identify super-objects -# by intersection of the multiple variable fields. -# - -############################################################################## -# METplus Workflow -# ---------------- -# -# | **Beginning Time (INIT_BEG):** 2024-01-09 05:00 UTC -# | **End Time (INIT_END):** 2024-01-09 05:00 UTC -# | **Increment between beginning and end times (VALID_INCREMENT):** 1 Hour -# | **Sequence of forecast leads to process (LEAD_SEQ):** 9,10 -# -# This use case runs twice, once for each forecast lead time provided. It -# creates objects valid at 14UTC and 15UTC from 09 January 2024 are compared to -# the 9h and 10h forecasts initialized at 05UTC on 9 January 2024. -# Convective objects are identified with thresholds of -# satellite brightness temperature < 235 K and radar reflectivity > 40 dBZ, -# or lightning > 10th percentile. -# In this use case, MODE super-object intensity statistics are output for both -# radar reflectivity and lightning. Using the MODE_MULTIVAR_INTENSITY_FLAG, -# users can control for which variables super object intensity statistics will be output. -# If all are set to False, then no intensity information will be output -# and only statistics relative to the super-object geometry will be available. - - - -############################################################################## -# METplus Configuration -# --------------------- -# -# METplus first loads all of the configuration files found in parm/metplus_config, -# then it loads any configuration files passed to METplus via the command line, i.e. -# parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf -# -# .. highlight:: bash -# .. literalinclude:: ../../../../parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf - -############################################################################## -# MET Configuration -# --------------------- -# -# METplus sets environment variables based on user settings in the METplus configuration file. -# See :ref:`How METplus controls MET config file settings` for more details. -# -# **YOU SHOULD NOT SET ANY OF THESE ENVIRONMENT VARIABLES YOURSELF! THEY WILL BE OVERWRITTEN BY METPLUS WHEN IT CALLS THE MET TOOLS!** -# -# If there is a setting in the MET configuration file that is currently not supported by METplus you'd like to control, please refer to: -# :ref:`Overriding Unsupported MET config file settings` -# -# .. dropdown:: MODEConfig_wrapped -# -# .. literalinclude:: ../../../../parm/met_config/MODEConfig_wrapped - -############################################################################## -# Python Embedding -# ---------------- -# -# This use case does not use any Python Embedding. - -############################################################################## -# Python Scripting -# ---------------- -# -# This use case does not use any Python Scripting. - -############################################################################## -# Running METplus -# --------------- -# -# Pass the use case configuration file to the run_metplus.py script -# along with any user-specific system configuration files if desired:: -# -# run_metplus.py /path/to/METplus/parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf /path/to/user_system.conf -# -# See :ref:`running-metplus` for more information. - -############################################################################## -# Expected Output -# --------------- -# -# A successful run will output the following both to the screen and to the logfile:: -# -# INFO: METplus has successfully finished running. -# -# Refer to the value set for **OUTPUT_BASE** to find where the output data was generated. -# Output for this use case will be found in -# {OUTPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning/f??, -# where the '??' characters will reflect the two forecast leads (09 and 10). -# Each of these directories will contain the following files with their appropriate -# verification times:: -# -# * mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_cts.txt -# * mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.nc -# * mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.txt -# * mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A.ps -# * mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_cts.txt -# * mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.nc -# * mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.txt -# * mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A.ps - -############################################################################## -# Keywords -# -------- -# -# .. note:: -# -# * MODEToolUseCase -# * ShortRangeAppUseCase -# * NetCDFFileUseCase -# * MvMODEUseCase -# -# Navigate to the :ref:`quick-search` page to discover other similar use cases. -# -# -# sphinx_gallery_thumbnail_path = '_static/short_range-MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.png' -# diff --git a/internal/scripts/docker/Dockerfile b/internal/scripts/docker/Dockerfile index 2df83a89c..e9f9c3ecb 100644 --- a/internal/scripts/docker/Dockerfile +++ b/internal/scripts/docker/Dockerfile @@ -58,5 +58,5 @@ RUN if [ ${OBTAIN_SOURCE_CODE} != "none" ]; then \ sed -i 's|MET_INSTALL_DIR = /path/to|MET_INSTALL_DIR = /usr/local|g' parm/metplus_config/*.conf; \ sed -i 's|OUTPUT_BASE = /path/to|OUTPUT_BASE = /data/output|g' parm/metplus_config/*.conf; \ sed -i 's|INPUT_BASE = /path/to|INPUT_BASE = /data/input/METplus_Data|g' parm/metplus_config/*.conf; \ - pip install .; \ + python3 setup.py install; \ fi diff --git a/internal/scripts/sonarqube/sonar-project.properties b/internal/scripts/sonarqube/sonar-project.properties index ab3a8ae34..1504a3f16 100644 --- a/internal/scripts/sonarqube/sonar-project.properties +++ b/internal/scripts/sonarqube/sonar-project.properties @@ -3,8 +3,8 @@ sonar.projectKey=METplus sonar.projectName=METplus sonar.projectVersion=SONAR_PROJECT_VERSION sonar.branch.name=SONAR_BRANCH_NAME -sonar.sources=docs,internal,manage_externals,metplus,parm,ush -sonar.coverage.exclusions=internal/tests/**,parm/**,metplus/parm/**,internal/scripts/**,manage_externals/**,docs/**,metplus/produtil/**,ush/**,metplus/wrappers/cyclone_plotter_wrapper.py +sonar.sources=docs,internal,manage_externals,metplus,parm,produtil,ush +sonar.coverage.exclusions=internal/tests/**,parm/**,internal/scripts/**,manage_externals/**,docs/**,produtil/**,ush/**,metplus/wrappers/cyclone_plotter_wrapper.py sonar.python.coverage.reportPaths=coverage.xml sonar.sourceEncoding=UTF-8 diff --git a/internal/tests/pytests/util/run_util/test_run_util.py b/internal/tests/pytests/util/run_util/test_run_util.py index 9b95e891e..6815e0b9d 100644 --- a/internal/tests/pytests/util/run_util/test_run_util.py +++ b/internal/tests/pytests/util/run_util/test_run_util.py @@ -4,6 +4,7 @@ import os import re +import produtil import metplus.util.run_util as ru import metplus.util.wrapper_init as wi from metplus.wrappers.ensemble_stat_wrapper import EnsembleStatWrapper diff --git a/internal/tests/pytests/util/string_template_substitution/test_string_template_substitution.py b/internal/tests/pytests/util/string_template_substitution/test_string_template_substitution.py index 79ea282ac..dfffe82f2 100644 --- a/internal/tests/pytests/util/string_template_substitution/test_string_template_substitution.py +++ b/internal/tests/pytests/util/string_template_substitution/test_string_template_substitution.py @@ -354,7 +354,7 @@ def test_filename_does_not_match_template(): template = "{init?fmt=%Y%m%d%H}_dog_A{lead?fmt=%HH}h" filepath = "1987020103_cat_A03h" out = parse_template(template, filepath) - assert out is None + assert out == None @pytest.mark.util @@ -362,7 +362,7 @@ def test_filename_does_not_match_template_end(): template = "{init?fmt=%Y%m%d%H}_dog_A{lead?fmt=%HH}h" filepath = "1987020103_dog_A03d" out = parse_template(template, filepath) - assert out is None + assert out == None @pytest.mark.util @@ -379,7 +379,7 @@ def test_get_tags(): # value is the formatted output string, like 01 # ttype is the unit to check, i.e. 'H', 'M', 'S', 'd', 's' @pytest.mark.parametrize( - 'fmt, key, value, ttype', [ + 'format, key, value, ttype', [ ('H', 1, '01', 'H'), ('1H', 1, '1', 'H'), ('2H', 1, '01', 'H'), @@ -418,15 +418,15 @@ def test_get_tags(): ] ) @pytest.mark.util -def test_format_one_time_item(fmt, key ,value, ttype): - assert format_one_time_item(fmt, key, ttype) == value +def test_format_one_time_item(format, key ,value, ttype): + assert format_one_time_item(format, key, ttype) == value # format is the time format to use, like, %M or %H%M # seconds is the integer number of seconds of the offset to use, i.e. 3601 # value is the formatted output string, like 010001 @pytest.mark.parametrize( - 'fmt, seconds, value', [ + 'format, seconds, value', [ ('%H', 1, '00'), ('%M', 1, '00'), ('%S', 1, '01'), @@ -448,9 +448,9 @@ def test_format_one_time_item(fmt, key ,value, ttype): ] ) @pytest.mark.util -def test_format_hms(fmt, seconds, value): +def test_format_hms(format, seconds, value): # format should be something like %M or %H%M - assert format_hms(fmt, seconds == value) + assert format_hms(format, seconds == value) @pytest.mark.util @@ -539,6 +539,7 @@ def test_populate_match_dict(template, filepath, expected_match_dict, expected_v elif match_dict is None: # if expected is not None, fail if actual is None assert False + return num_keys = len(match_dict.keys()) expected_num_keys = len(expected_match_dict.keys()) @@ -561,6 +562,8 @@ def test_populate_match_dict(template, filepath, expected_match_dict, expected_v print(f"Incorrect valid shift. Actual {valid_shift}, Expected: {expected_valid_shift}") assert False + assert True + except TypeError: assert expected_match_dict is None and expected_valid_shift is None @@ -588,6 +591,8 @@ def test_get_fmt_info(fmt, filepath, identifier, expected_fmt_len, expected_matc print(f"Expected Dictionary: {expected_match_dict}") assert False + assert True + @pytest.mark.parametrize( 'templ, expected_filename', [ diff --git a/internal/tests/pytests/wrappers/ascii2nc/test_ascii2nc_wrapper.py b/internal/tests/pytests/wrappers/ascii2nc/test_ascii2nc_wrapper.py index 0be6a1b36..4209c2e04 100644 --- a/internal/tests/pytests/wrappers/ascii2nc/test_ascii2nc_wrapper.py +++ b/internal/tests/pytests/wrappers/ascii2nc/test_ascii2nc_wrapper.py @@ -183,6 +183,25 @@ def test_ascii2nc_missing_inputs(metplus_config, get_test_data_dir, 'type = ["min", "max", "range", "mean", "stdev", "median", "p80"];' 'vld_freq = 0;vld_thresh = 0.5;}')}), + ({'TIME_OFFSET_WARNING': '3'}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;', + 'METPLUS_TIME_SUMMARY_DICT': + ('time_summary = {flag = FALSE;raw_data = FALSE;beg = "000000";' + 'end = "235959";step = 300;width = 600;' + 'grib_code = [11, 204, 211];obs_var = [];' + 'type = ["min", "max", "range", "mean", "stdev", "median", "p80"];' + 'vld_freq = 0;vld_thresh = 0.0;}') + }), + + ({'TIME_OFFSET_WARNING': '3', 'ASCII2NC_TIME_OFFSET_WARNING': '4'}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;', + 'METPLUS_TIME_SUMMARY_DICT': + ('time_summary = {flag = FALSE;raw_data = FALSE;beg = "000000";' + 'end = "235959";step = 300;width = 600;' + 'grib_code = [11, 204, 211];obs_var = [];' + 'type = ["min", "max", "range", "mean", "stdev", "median", "p80"];' + 'vld_freq = 0;vld_thresh = 0.0;}') + }), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py b/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py index b17171495..b905a7970 100644 --- a/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py +++ b/internal/tests/pytests/wrappers/ensemble_stat/test_ensemble_stat_wrapper.py @@ -637,6 +637,13 @@ def test_ensemble_stat_field_info(metplus_config, config_overrides, 'OBS_ENSEMBLE_STAT_POINT_INPUT_TEMPLATE': obs_point_template}, {}), + ({'ENSEMBLE_STAT_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'ENSEMBLE_STAT_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), + # fcst climo_mean ({'ENSEMBLE_STAT_FCST_CLIMO_MEAN_FILE_NAME': '/some/climo_mean/file.txt', }, {'METPLUS_FCST_CLIMO_MEAN_DICT': 'climo_mean = {file_name = ["/some/climo_mean/file.txt"];}'}), diff --git a/internal/tests/pytests/wrappers/gen_ens_prod/test_gen_ens_prod_wrapper.py b/internal/tests/pytests/wrappers/gen_ens_prod/test_gen_ens_prod_wrapper.py index 8c7cf0986..43f22587b 100644 --- a/internal/tests/pytests/wrappers/gen_ens_prod/test_gen_ens_prod_wrapper.py +++ b/internal/tests/pytests/wrappers/gen_ens_prod/test_gen_ens_prod_wrapper.py @@ -446,6 +446,15 @@ def test_gen_ens_prod_missing_inputs(metplus_config, get_test_data_dir, allow_mi # 68 ({'GEN_ENS_PROD_NORMALIZE': 'CLIMO_STD_ANOM', }, {'METPLUS_NORMALIZE': 'normalize = CLIMO_STD_ANOM;'}), + # 69 + ({'GEN_ENS_PROD_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + # 70 + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + # 71 + ({'TIME_OFFSET_WARNING': 2, 'GEN_ENS_PROD_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), # ens climo_mean (quietly supported) ({'GEN_ENS_PROD_ENS_CLIMO_MEAN_FILE_NAME': '/some/climo_mean/file.txt', }, {'METPLUS_ENS_CLIMO_MEAN_DICT': 'climo_mean = {file_name = ["/some/climo_mean/file.txt"];}'}), diff --git a/internal/tests/pytests/wrappers/grid_diag/test_grid_diag.py b/internal/tests/pytests/wrappers/grid_diag/test_grid_diag.py index d190d37f0..7179109dd 100644 --- a/internal/tests/pytests/wrappers/grid_diag/test_grid_diag.py +++ b/internal/tests/pytests/wrappers/grid_diag/test_grid_diag.py @@ -345,6 +345,12 @@ def test_get_config_file(metplus_config): 'censor_val = [12000, 5000];}' )}), + ({'GRID_DIAG_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'GRID_DIAG_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/ioda2nc/test_ioda2nc_wrapper.py b/internal/tests/pytests/wrappers/ioda2nc/test_ioda2nc_wrapper.py index c6e89fbd2..cc49602b9 100644 --- a/internal/tests/pytests/wrappers/ioda2nc/test_ioda2nc_wrapper.py +++ b/internal/tests/pytests/wrappers/ioda2nc/test_ioda2nc_wrapper.py @@ -230,7 +230,15 @@ def test_ioda2nc_missing_inputs(metplus_config, get_test_data_dir, missing, 'IODA2NC_NMSG': '10', }, {}, ' -iodafile *INPUT_DIR*/other/file.nc -valid_beg 20200309_12 -valid_end 20200310_12 -nmsg 10'), - + # 40 + ({'IODA2NC_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}, ''), + # 41 + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}, ''), + # 42 + ({'TIME_OFFSET_WARNING': 2, 'IODA2NC_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}, ''), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/madis2nc/test_madis2nc_wrapper.py b/internal/tests/pytests/wrappers/madis2nc/test_madis2nc_wrapper.py index 86a7e14a5..59c234696 100644 --- a/internal/tests/pytests/wrappers/madis2nc/test_madis2nc_wrapper.py +++ b/internal/tests/pytests/wrappers/madis2nc/test_madis2nc_wrapper.py @@ -139,6 +139,8 @@ def test_madis2nc_missing_inputs(metplus_config, get_test_data_dir, 'MADIS2NC_MASK_GRID': 'mask_grid', 'MADIS2NC_MASK_POLY': '/some/path/to/mask/poly', 'MADIS2NC_MASK_SID': 'mask_sid,/some/path/to/mask/sid'}, {}), + ({'MADIS2NC_TIME_OFFSET_WARNING': '4', }, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) diff --git a/internal/tests/pytests/wrappers/mtd/test_mtd_wrapper.py b/internal/tests/pytests/wrappers/mtd/test_mtd_wrapper.py index 6506afbff..97c9b6bd6 100644 --- a/internal/tests/pytests/wrappers/mtd/test_mtd_wrapper.py +++ b/internal/tests/pytests/wrappers/mtd/test_mtd_wrapper.py @@ -200,6 +200,12 @@ def test_mtd_missing_inputs(metplus_config, get_test_data_dir, ({'MTD_OUTPUT_PREFIX': 'my_output_prefix'}, {'METPLUS_OUTPUT_PREFIX': 'output_prefix = "my_output_prefix";'}), + ({'MTD_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'MTD_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/pb2nc/test_pb2nc_wrapper.py b/internal/tests/pytests/wrappers/pb2nc/test_pb2nc_wrapper.py index 09f180725..958806cb2 100644 --- a/internal/tests/pytests/wrappers/pb2nc/test_pb2nc_wrapper.py +++ b/internal/tests/pytests/wrappers/pb2nc/test_pb2nc_wrapper.py @@ -252,6 +252,13 @@ def test_find_input_files(metplus_config, offsets, offset_to_find): ({'PB2NC_VALID_BEGIN': valid_beg}, {}), ({'PB2NC_VALID_END': valid_end}, {}), ({'PB2NC_VALID_BEGIN': valid_beg, 'PB2NC_VALID_END': valid_end}, {}), + + ({'PB2NC_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'PB2NC_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), # 1 extra file ({'PB2NC_INPUT_TEMPLATE': ('ndas.t{da_init?fmt=%H}z.prepbufr.tm{offset?fmt=%2H}.{da_init?fmt=%Y%m%d}.nr,' 'another_file.nr')}, {}), diff --git a/internal/tests/pytests/wrappers/plot_point_obs/test_plot_point_obs_wrapper.py b/internal/tests/pytests/wrappers/plot_point_obs/test_plot_point_obs_wrapper.py index e69a32441..337d2d55e 100644 --- a/internal/tests/pytests/wrappers/plot_point_obs/test_plot_point_obs_wrapper.py +++ b/internal/tests/pytests/wrappers/plot_point_obs/test_plot_point_obs_wrapper.py @@ -248,6 +248,12 @@ def test_plot_point_obs_missing_inputs(metplus_config, get_test_data_dir, ({'PLOT_POINT_OBS_POINT_DATA': point_data_input, }, {'METPLUS_POINT_DATA': f'point_data = {point_data_format}'}), + ({'PLOT_POINT_OBS_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'PLOT_POINT_OBS_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper_c diff --git a/internal/tests/pytests/wrappers/point2grid/test_point2grid.py b/internal/tests/pytests/wrappers/point2grid/test_point2grid.py index c9a869ff2..87a980f41 100644 --- a/internal/tests/pytests/wrappers/point2grid/test_point2grid.py +++ b/internal/tests/pytests/wrappers/point2grid/test_point2grid.py @@ -79,56 +79,25 @@ def test_point2grid_missing_inputs(metplus_config, get_test_data_dir, @pytest.mark.parametrize( - 'config_overrides, env_var_values, optional_args', [ - ({}, {}, []), - ({'POINT2GRID_REGRID_METHOD': 'UW_MEAN'}, {}, ['-method UW_MEAN']), + 'config_overrides, optional_args', [ + ({}, {}), + ({'POINT2GRID_REGRID_METHOD': 'UW_MEAN'}, ['-method UW_MEAN']), ({'POINT2GRID_REGRID_METHOD': 'UW_MEAN', - 'POINT2GRID_GAUSSIAN_DX': '2',}, {}, + 'POINT2GRID_GAUSSIAN_DX': '2',}, ['-method UW_MEAN', '-gaussian_dx 2']), - ({'POINT2GRID_GAUSSIAN_RADIUS': '81.231'}, {}, + ({'POINT2GRID_GAUSSIAN_RADIUS': '81.231'}, ['-gaussian_radius 81.231']), - ({'POINT2GRID_PROB_CAT_THRESH': '1'}, {}, ['-prob_cat_thresh 1']), - ({'POINT2GRID_VLD_THRESH': '0.5'}, {}, ['-vld_thresh 0.5']), - ({'POINT2GRID_ADP': '{valid?fmt=%Y%m}.nc'}, {}, ['-adp 201706.nc']), - ({'POINT2GRID_REGRID_TO_GRID': 'G212'}, {}, []), - ({'POINT2GRID_REGRID_TO_GRID': 'lambert 614 428 12.190 -133.459 -95.0 12.19058 6367.47 25.0 N'}, {}, []), - ({'POINT2GRID_INPUT_LEVEL': '(*,*)'}, {}, []), - ({'POINT2GRID_VALID_TIME': '20240509_120800', }, - {'METPLUS_VALID_TIME': 'valid_time = "20240509_120800";'}, []), - - ({'POINT2GRID_OBS_WINDOW_BEG': '-5400', }, - {'METPLUS_OBS_WINDOW_DICT': 'obs_window = {beg = -5400;}'}, []), - - ({'POINT2GRID_OBS_WINDOW_END': '3600', }, - {'METPLUS_OBS_WINDOW_DICT': 'obs_window = {end = 3600;}'}, []), - - ({'POINT2GRID_OBS_WINDOW_BEG': '-3600', 'POINT2GRID_OBS_WINDOW_END': '5400'}, - {'METPLUS_OBS_WINDOW_DICT': 'obs_window = {beg = -3600;end = 5400;}'}, []), - ({'POINT2GRID_MESSAGE_TYPE': 'ADPSFC, ADPUPA'}, - {'METPLUS_MESSAGE_TYPE': 'message_type = ["ADPSFC", "ADPUPA"];'}, []), - - ({'POINT2GRID_VAR_NAME_MAP1_KEY': '3', 'POINT2GRID_VAR_NAME_MAP1_VAL': 'MAGIC'}, - {'METPLUS_VAR_NAME_MAP_LIST': 'var_name_map = [{key = "3";val = "MAGIC";}];'}, []), - - ({'POINT2GRID_VAR_NAME_MAP1_KEY': '13', 'POINT2GRID_VAR_NAME_MAP1_VAL': 'LUCKY', - 'POINT2GRID_VAR_NAME_MAP2_KEY': '3', 'POINT2GRID_VAR_NAME_MAP2_VAL': 'MAGIC' - }, - {'METPLUS_VAR_NAME_MAP_LIST': 'var_name_map = [{key = "13";val = "LUCKY";},{key = "3";val = "MAGIC";}];'}, []), - - ({'POINT2GRID_OBS_QUALITY_INC': '0, 1, 2', }, - {'METPLUS_OBS_QUALITY_INC': 'obs_quality_inc = ["0", "1", "2"];'}, []), - - ({'POINT2GRID_OBS_QUALITY_EXC': '3,4, 5', }, - {'METPLUS_OBS_QUALITY_EXC': 'obs_quality_exc = ["3", "4", "5"];'}, []), - ({'POINT2GRID_GOES_QC_FLAGS': '0,1'}, {}, ['-goes_qc 0,1']), - ({'POINT2GRID_QC_FLAGS': '0,1'}, {}, ['-goes_qc 0,1']), - ({'POINT2GRID_GOES_QC_FLAGS': '0,1', 'POINT2GRID_QC_FLAGS': '2,3'}, {}, ['-goes_qc 0,1']), - + ({'POINT2GRID_PROB_CAT_THRESH': '1'}, ['-prob_cat_thresh 1']), + ({'POINT2GRID_VLD_THRESH': '0.5'}, ['-vld_thresh 0.5']), + ({'POINT2GRID_QC_FLAGS': '0,1'}, ['-qc 0,1']), + ({'POINT2GRID_ADP': '{valid?fmt=%Y%m}.nc'}, ['-adp 201706.nc']), + ({'POINT2GRID_REGRID_TO_GRID': 'G212'}, []), + ({'POINT2GRID_REGRID_TO_GRID': 'lambert 614 428 12.190 -133.459 -95.0 12.19058 6367.47 25.0 N'}, []), + ({'POINT2GRID_INPUT_LEVEL': '(*,*)'}, []), ] ) @pytest.mark.wrapper -def test_point2grid_run(metplus_config, config_overrides, optional_args, - env_var_values): +def test_point2grid_run(metplus_config, config_overrides, optional_args): config = metplus_config set_minimum_config_settings(config) @@ -174,19 +143,13 @@ def test_point2grid_run(metplus_config, config_overrides, optional_args, else: level = '' - config_file = wrapper.c_dict.get('CONFIG_FILE') extra_args = " ".join(optional_args) + " " if optional_args else "" - - missing_env = [item for item in env_var_values - if item not in wrapper.WRAPPER_ENV_VAR_KEYS] - env_var_keys = wrapper.WRAPPER_ENV_VAR_KEYS + missing_env - expected_cmds = [] - for idx in range(0, len(input_files)): + for idx in range(0, 3): expected_cmds.append( f'{app_path} {input_files[idx]} {grids[idx]} {output_files[idx]}' f' -field \'name="{input_name}"; level="{level}";\'' - f' -config {config_file} {extra_args}{verbosity}' + f' {extra_args}{verbosity}' ) all_cmds = wrapper.run_all_times() @@ -195,30 +158,3 @@ def test_point2grid_run(metplus_config, config_overrides, optional_args, for (cmd, env_vars), expected_cmd in zip(all_cmds, expected_cmds): # ensure commands are generated as expected assert cmd == expected_cmd - - # check that environment variables were set properly - # including deprecated env vars (not in wrapper env var keys) - for env_var_key in env_var_keys: - print(f"ENV VAR: {env_var_key}") - match = next((item for item in env_vars if - item.startswith(env_var_key)), None) - assert match is not None - value = match.split('=', 1)[1] - assert env_var_values.get(env_var_key, '') == value - - -@pytest.mark.wrapper -def test_get_config_file(metplus_config): - fake_config_name = '/my/config/file' - - config = metplus_config - default_config_file = os.path.join(config.getdir('PARM_BASE'), - 'met_config', - 'Point2GridConfig_wrapped') - - wrapper = Point2GridWrapper(config) - assert wrapper.c_dict['CONFIG_FILE'] == default_config_file - - config.set('config', 'POINT2GRID_CONFIG_FILE', fake_config_name) - wrapper = Point2GridWrapper(config) - assert wrapper.c_dict['CONFIG_FILE'] == fake_config_name diff --git a/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py b/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py index 3660a1b37..bc59a795a 100755 --- a/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py +++ b/internal/tests/pytests/wrappers/point_stat/test_point_stat_wrapper.py @@ -671,6 +671,13 @@ def test_met_dictionary_in_var_options(metplus_config): ({'OBS_POINT_STAT_INPUT_TEMPLATE': '{valid?fmt=%Y%m%d%H}/obs_file,{valid?fmt=%Y%m%d%H}/obs_file2', }, {}), ({'OBS_POINT_STAT_INPUT_TEMPLATE': '{valid?fmt=%Y%m%d%H}/obs_file,{valid?fmt=%Y%m%d%H}/obs_file2,{valid?fmt=%Y%m%d%H}/obs_file3', }, {}), + ({'POINT_STAT_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'POINT_STAT_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), + # fcst climo_mean ({'POINT_STAT_FCST_CLIMO_MEAN_FILE_NAME': '/some/climo_mean/file.txt', }, {'METPLUS_FCST_CLIMO_MEAN_DICT': 'climo_mean = {file_name = ["/some/climo_mean/file.txt"];}'}), diff --git a/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py b/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py index 9dc06f9f8..6d0f619ec 100644 --- a/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py +++ b/internal/tests/pytests/wrappers/stat_analysis/test_stat_analysis.py @@ -173,7 +173,15 @@ def set_minimum_config_settings(config): 'MODEL1': '{custom}', 'MODEL_LIST': '{custom}'}, {'METPLUS_MODEL': 'model = ["CUSTOM_MODEL"];'}), - + # 17 time_offset_warning app + ({'STAT_ANALYSIS_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + # 18 time_offset_warning generic + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + # 19 time_offset_warning both + ({'TIME_OFFSET_WARNING': 2, 'STAT_ANALYSIS_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper_d diff --git a/internal/tests/pytests/wrappers/tc_diag/test_tc_diag_wrapper.py b/internal/tests/pytests/wrappers/tc_diag/test_tc_diag_wrapper.py index 3f0c5ed75..88b9ef1eb 100644 --- a/internal/tests/pytests/wrappers/tc_diag/test_tc_diag_wrapper.py +++ b/internal/tests/pytests/wrappers/tc_diag/test_tc_diag_wrapper.py @@ -239,6 +239,12 @@ def test_tc_diag_missing_inputs(metplus_config, get_test_data_dir, ({'TC_DIAG_ONE_TIME_PER_FILE_FLAG': 'false', }, {'METPLUS_ONE_TIME_PER_FILE_FLAG': 'one_time_per_file_flag = FALSE;'}), + ({'TC_DIAG_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'TC_DIAG_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/tc_gen/test_tc_gen_wrapper.py b/internal/tests/pytests/wrappers/tc_gen/test_tc_gen_wrapper.py index d1d5b24c2..c9beca4fd 100644 --- a/internal/tests/pytests/wrappers/tc_gen/test_tc_gen_wrapper.py +++ b/internal/tests/pytests/wrappers/tc_gen/test_tc_gen_wrapper.py @@ -339,6 +339,12 @@ def test_tc_gen_missing_inputs(metplus_config, get_test_data_dir, allow_missing, }, {'METPLUS_OPS_HIT_WINDOW_DICT': 'ops_hit_window = {beg = 1;end = 47;}'}), + ({'TC_GEN_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'TC_GEN_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper_a diff --git a/internal/tests/pytests/wrappers/tc_pairs/test_tc_pairs_wrapper.py b/internal/tests/pytests/wrappers/tc_pairs/test_tc_pairs_wrapper.py index 7f9d560ee..70adbd62d 100644 --- a/internal/tests/pytests/wrappers/tc_pairs/test_tc_pairs_wrapper.py +++ b/internal/tests/pytests/wrappers/tc_pairs/test_tc_pairs_wrapper.py @@ -607,6 +607,12 @@ def test_tc_pairs_storm_id_lists(metplus_config, get_test_data_dir, config_overr }, {'DIAG_ARG': '-diag TCDIAG /bmlq2014123118.gfso.0104',}), + ('VALID', {'TC_PAIRS_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ('VALID', {'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ('VALID', {'TIME_OFFSET_WARNING': 2, 'TC_PAIRS_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/tc_stat/test_tc_stat_wrapper.py b/internal/tests/pytests/wrappers/tc_stat/test_tc_stat_wrapper.py index 8f07f3154..0f52648e6 100644 --- a/internal/tests/pytests/wrappers/tc_stat/test_tc_stat_wrapper.py +++ b/internal/tests/pytests/wrappers/tc_stat/test_tc_stat_wrapper.py @@ -242,6 +242,12 @@ def test_tc_stat_handle_jobs(metplus_config, config_overrides, expected_dirs, ({'TC_STAT_OUTPUT_TEMPLATE': 'tc_stat.out.nc', }, {}), + ({'TC_STAT_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'TC_STAT_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/pytests/wrappers/tcrmw/test_tcrmw_wrapper.py b/internal/tests/pytests/wrappers/tcrmw/test_tcrmw_wrapper.py index 6721527a6..7a4d3ea6e 100644 --- a/internal/tests/pytests/wrappers/tcrmw/test_tcrmw_wrapper.py +++ b/internal/tests/pytests/wrappers/tcrmw/test_tcrmw_wrapper.py @@ -122,6 +122,12 @@ def set_minimum_config_settings(config): ({'TC_RMW_RMW_SCALE': '15', }, {'METPLUS_RMW_SCALE': 'rmw_scale = 15.0;'}), + ({'TC_RMW_TIME_OFFSET_WARNING': 3}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 3;'}), + ({'TIME_OFFSET_WARNING': 2}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 2;'}), + ({'TIME_OFFSET_WARNING': 2, 'TC_RMW_TIME_OFFSET_WARNING': 4}, + {'METPLUS_TIME_OFFSET_WARNING': 'time_offset_warning = 4;'}), ] ) @pytest.mark.wrapper diff --git a/internal/tests/use_cases/all_use_cases.txt b/internal/tests/use_cases/all_use_cases.txt index ef58c7ff6..1522963ab 100644 --- a/internal/tests/use_cases/all_use_cases.txt +++ b/internal/tests/use_cases/all_use_cases.txt @@ -184,7 +184,7 @@ Category: short_range 12::UserScript_fcstFV3_fcstOnly_PhysicsTendency_VerticalCrossSection::model_applications/short_range/UserScript_fcstFV3_fcstOnly_PhysicsTendency_VerticalCrossSection.conf:: metplotpy_env 13::MODEMultivar_fcstHRRR_obsMRMS_HRRRanl::model_applications/short_range/MODEMultivar_fcstHRRR_obsMRMS_HRRRanl.conf 14::UserScript_fcstRRFS_fcstOnly_Reformat_Aggregate_Plot::model_applications/short_range/UserScript_fcstRRFS_fcstOnly_Reformat_Aggregate_Plot.conf:: metdataio, metcalcpy, metplotpy,mp_analysis_env -15::MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning::model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf + Category: space_weather 0::GridStat_fcstGloTEC_obsGloTEC_vx7:: model_applications/space_weather/GridStat_fcstGloTEC_obsGloTEC_vx7.conf diff --git a/metplus/parm b/metplus/parm deleted file mode 120000 index 302dacab3..000000000 --- a/metplus/parm +++ /dev/null @@ -1 +0,0 @@ -../parm \ No newline at end of file diff --git a/metplus/scripts/run_metplus.py b/metplus/scripts/run_metplus.py deleted file mode 120000 index 116d56b43..000000000 --- a/metplus/scripts/run_metplus.py +++ /dev/null @@ -1 +0,0 @@ -../../ush/run_metplus.py \ No newline at end of file diff --git a/metplus/util/config_metplus.py b/metplus/util/config_metplus.py index 238b2c10b..c0d25deea 100644 --- a/metplus/util/config_metplus.py +++ b/metplus/util/config_metplus.py @@ -11,6 +11,7 @@ import os import re +import sys import logging from datetime import datetime, timezone import time @@ -19,7 +20,7 @@ from pathlib import Path import uuid -from metplus.produtil.config import ProdConfig +from produtil.config import ProdConfig from .constants import RUNTIME_CONFS, MISSING_DATA_VALUE from .string_template_substitution import do_string_sub @@ -62,7 +63,7 @@ # set parm base to METPLUS_BASE/parm unless METPLUS_PARM_BASE env var is set PARM_BASE = os.environ.get('METPLUS_PARM_BASE', - os.path.join(METPLUS_BASE, 'metplus', PARM_DIR)) + os.path.join(METPLUS_BASE, PARM_DIR)) # name of directory under PARM_DIR that contains defaults METPLUS_CONFIG_DIR = 'metplus_config' diff --git a/metplus/util/constants.py b/metplus/util/constants.py index 3b5c0f7ff..3208aa2a2 100644 --- a/metplus/util/constants.py +++ b/metplus/util/constants.py @@ -93,14 +93,6 @@ 'GenEnsProd', ) -# wrappers that support the time_offset_warning global MET config variable -TIME_OFFSET_WARNING_WRAPPERS = ( - 'GridStat', - 'MODE', - 'SeriesAnalysis', - 'WaveletStat', -) - # configuration variables that are specific to a given run # these are copied from [config] to [runtime] at the # end of the run so they will not be read if the final diff --git a/metplus/util/run_util.py b/metplus/util/run_util.py index 90ace0768..145468c5a 100644 --- a/metplus/util/run_util.py +++ b/metplus/util/run_util.py @@ -6,7 +6,7 @@ from logging import Logger import shlex -from metplus.produtil.run import exe, run +from produtil.run import exe, run from .string_manip import get_logfile_info, log_terminal_includes_info from .system_util import get_user_info, write_list_to_file diff --git a/metplus/wrappers/command_builder.py b/metplus/wrappers/command_builder.py index d47efa261..b9ba20f3e 100755 --- a/metplus/wrappers/command_builder.py +++ b/metplus/wrappers/command_builder.py @@ -15,8 +15,7 @@ from abc import ABCMeta from inspect import getframeinfo, stack -from ..util.constants import PYTHON_EMBEDDING_TYPES, COMPRESSION_EXTENSIONS -from ..util.constants import MULTIPLE_INPUT_WRAPPERS, TIME_OFFSET_WARNING_WRAPPERS +from ..util.constants import PYTHON_EMBEDDING_TYPES, COMPRESSION_EXTENSIONS, MULTIPLE_INPUT_WRAPPERS from ..util import getlist, preprocess_file, loop_over_times_and_call from ..util import do_string_sub, ti_calculate, get_seconds_from_string from ..util import get_time_from_file, shift_time_seconds, seconds_to_met_time @@ -104,16 +103,15 @@ def __init__(self, config, instance=None): # add key to list of env vars to set self.env_var_keys.append(self.MET_OVERRIDES_KEY) - if get_wrapper_name(self.app_name) in TIME_OFFSET_WARNING_WRAPPERS: - # add time_offset_warning env var - self.env_var_keys.append('METPLUS_TIME_OFFSET_WARNING') - time_offset_warning = self.get_wrapper_or_generic_config( - 'TIME_OFFSET_WARNING', var_type='int' + # add time_offset_warning env var + self.env_var_keys.append('METPLUS_TIME_OFFSET_WARNING') + time_offset_warning = self.get_wrapper_or_generic_config( + 'TIME_OFFSET_WARNING', var_type='int' + ) + if time_offset_warning != '': + self.env_var_dict['METPLUS_TIME_OFFSET_WARNING'] = ( + f'time_offset_warning = {time_offset_warning};' ) - if time_offset_warning != '': - self.env_var_dict['METPLUS_TIME_OFFSET_WARNING'] = ( - f'time_offset_warning = {time_offset_warning};' - ) # warn if any environment variables set by the wrapper are not # being utilized in the user's config file diff --git a/metplus/wrappers/point2grid_wrapper.py b/metplus/wrappers/point2grid_wrapper.py index 11ed39ce0..c95a9da3d 100755 --- a/metplus/wrappers/point2grid_wrapper.py +++ b/metplus/wrappers/point2grid_wrapper.py @@ -14,8 +14,6 @@ from ..util import do_string_sub from ..util import remove_quotes -from ..util.met_config import add_met_config_dict_list - from . import ReformatPointWrapper '''!@namespace Point2GridWrapper @@ -28,15 +26,6 @@ class Point2GridWrapper(ReformatPointWrapper): RUNTIME_FREQ_DEFAULT = 'RUN_ONCE_FOR_EACH' RUNTIME_FREQ_SUPPORTED = ['RUN_ONCE_FOR_EACH'] - WRAPPER_ENV_VAR_KEYS = [ - 'METPLUS_VALID_TIME', - 'METPLUS_OBS_WINDOW_DICT', - 'METPLUS_MESSAGE_TYPE', - 'METPLUS_VAR_NAME_MAP_LIST', - 'METPLUS_OBS_QUALITY_INC', - 'METPLUS_OBS_QUALITY_EXC', - ] - def __init__(self, config, instance=None): self.app_name = "point2grid" self.app_path = os.path.join(config.getdir('MET_BIN_DIR', ''), @@ -81,12 +70,8 @@ def create_c_dict(self): 'POINT2GRID_INPUT_LEVEL', '') - # support legacy QC_FLAGS and new GOES_QC_FLAGS to set -goes_qc arg - config_name = self.config.get_mp_config_name(['POINT2GRID_GOES_QC_FLAGS', - 'POINT2GRID_QC_FLAGS']) - if config_name: - c_dict['GOES_QC_FLAGS'] = self.config.getraw('config', config_name) - + c_dict['QC_FLAGS'] = self.config.getraw('config', + 'POINT2GRID_QC_FLAGS') c_dict['ADP'] = self.config.getraw('config', 'POINT2GRID_ADP') c_dict['REGRID_METHOD'] = self.config.getstr('config', @@ -109,28 +94,6 @@ def create_c_dict(self): 'POINT2GRID_VLD_THRESH', '') - # get the MET config file path or use default - c_dict['CONFIG_FILE'] = self.get_config_file('Point2GridConfig_wrapped') - - # read config file variables - self.add_met_config(name='valid_time', data_type='string') - self.add_met_config_window('obs_window') - self.add_met_config(name='message_type', data_type='list') - if not add_met_config_dict_list(config=self.config, - app_name=self.app_name, - output_dict=self.env_var_dict, - dict_name='var_name_map', - dict_items={'key': 'string', - 'val': 'string'}): - self.isOK = False - - self.add_met_config(name='obs_quality_inc', data_type='list', - metplus_configs=['POINT2GRID_OBS_QUALITY_INC', - 'POINT2GRID_OBS_QUALITY_INCLUDE', - 'POINT2GRID_OBS_QUALITY']) - self.add_met_config(name='obs_quality_exc', data_type='list', - metplus_configs=['POINT2GRID_OBS_QUALITY_EXC', - 'POINT2GRID_OBS_QUALITY_EXCLUDE']) return c_dict def find_input_files(self, time_info): @@ -168,11 +131,8 @@ def set_command_line_arguments(self, time_info): #Add either the specified level above or the defauilt blank one self.args.append(f"-field 'name=\"{input_field}\"; level=\"{input_level}\";'") - config_file = do_string_sub(self.c_dict['CONFIG_FILE'], **time_info) - self.args.append(f'-config {config_file}') - - if self.c_dict.get('GOES_QC_FLAGS', '') != '': - self.args.append(f"-goes_qc {self.c_dict['GOES_QC_FLAGS']}") + if self.c_dict['QC_FLAGS'] != '': + self.args.append(f"-qc {self.c_dict['QC_FLAGS']}") if self.c_dict['ADP']: self.args.append(f"-adp {self.c_dict['ADP']}") diff --git a/metplus/wrappers/series_analysis_wrapper.py b/metplus/wrappers/series_analysis_wrapper.py index 1fb1948a6..cea1a44b4 100755 --- a/metplus/wrappers/series_analysis_wrapper.py +++ b/metplus/wrappers/series_analysis_wrapper.py @@ -784,7 +784,9 @@ def build_and_run_series_request(self, time_info, fcst_path, obs_path): add_field_info_to_time_info(time_info, var_info) # get formatted field dictionary to pass into the MET config file - fcst_field, obs_field = self.get_formatted_fields(var_info, time_info) + fcst_field, obs_field = ( + self.get_formatted_fields(var_info, time_info, fcst_path, obs_path) + ) if fcst_field is None: continue @@ -1033,20 +1035,22 @@ def _get_netcdf_min_max(filepath, variable_name): except (FileNotFoundError, KeyError): return None, None - def get_formatted_fields(self, var_info, time_info): + def get_formatted_fields(self, var_info, time_info, fcst_path, obs_path): """! Get forecast and observation field information for var_info and format it so it can be passed into the MET config file @param var_info dictionary containing info to format @param time_info dictionary containing time information + @param fcst_path path to file list file for forecast data + @param obs_path path to file list file for observation data @returns tuple containing strings of the formatted forecast and observation information or (None, None) if something went wrong """ fcst_field_list = ( - self._get_field_list('fcst', var_info, time_info) + self._get_field_list('fcst', var_info, time_info, obs_path) ) obs_field_list = ( - self._get_field_list('obs', var_info, time_info) + self._get_field_list('obs', var_info, time_info, fcst_path) ) if not fcst_field_list or not obs_field_list: @@ -1058,7 +1062,7 @@ def get_formatted_fields(self, var_info, time_info): return fcst_fields, obs_fields - def _get_field_list(self, data_type, var_info, time_info): + def _get_field_list(self, data_type, var_info, time_info, file_list_path): """!Get formatted field information in a list. If no time (init/valid/lead) filename template tags were found in the level value or if the time info contains all init/valid/lead values @@ -1071,8 +1075,10 @@ def _get_field_list(self, data_type, var_info, time_info): @param data_type type of data to process, e.g. fcst or obs @param var_info dictionary containing info to format @param time_info dictionary containing time information + @param file_list_path path to file list file to parse @returns list containing formatted field info to pass to MET config """ + other = 'OBS' if data_type == 'fcst' else 'FCST' # if there are no time tags (init/valid/lead) in the field level # or if init, valid, and lead have values in time_info, # get field info for a single field to pass to the MET config file @@ -1082,10 +1088,15 @@ def _get_field_list(self, data_type, var_info, time_info): field_list = [] - # loop through fcst/obs files to read time info + # handle multiple templates + templates = [] + for template in self.c_dict[f'{other}_INPUT_TEMPLATE'].split(','): + templates.append(os.path.join(self.c_dict[f'{other}_INPUT_DIR'], template.strip())) + + # loop through fcst/obs files to extract time info # for each file apply time info to field info and add to list - for file_dict in self.c_dict['ALL_FILES']: - file_time_info = file_dict['time_info'] + for file_time_info in self._get_times_from_file_list(file_list_path, + templates): field = self._get_field_sub_level(data_type, var_info, file_time_info) if field: field_list.extend(field) diff --git a/parm/met_config/Ascii2NcConfig_wrapped b/parm/met_config/Ascii2NcConfig_wrapped index 423345061..e86116277 100644 --- a/parm/met_config/Ascii2NcConfig_wrapped +++ b/parm/met_config/Ascii2NcConfig_wrapped @@ -38,4 +38,5 @@ message_type_map = [ tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/EnsembleStatConfig_wrapped b/parm/met_config/EnsembleStatConfig_wrapped index 9f508ff4c..fb505cc09 100644 --- a/parm/met_config/EnsembleStatConfig_wrapped +++ b/parm/met_config/EnsembleStatConfig_wrapped @@ -242,4 +242,5 @@ ${METPLUS_OUTPUT_PREFIX} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/GenEnsProdConfig_wrapped b/parm/met_config/GenEnsProdConfig_wrapped index 5659d9330..0a67225e2 100644 --- a/parm/met_config/GenEnsProdConfig_wrapped +++ b/parm/met_config/GenEnsProdConfig_wrapped @@ -118,4 +118,5 @@ ${METPLUS_ENSEMBLE_FLAG_DICT} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/GridDiagConfig_wrapped b/parm/met_config/GridDiagConfig_wrapped index 691338acf..8c5117ddb 100644 --- a/parm/met_config/GridDiagConfig_wrapped +++ b/parm/met_config/GridDiagConfig_wrapped @@ -41,4 +41,5 @@ ${METPLUS_MASK_DICT} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/IODA2NCConfig_wrapped b/parm/met_config/IODA2NCConfig_wrapped index ba1faa169..7f25fb8cf 100644 --- a/parm/met_config/IODA2NCConfig_wrapped +++ b/parm/met_config/IODA2NCConfig_wrapped @@ -114,4 +114,5 @@ tmp_dir = "${MET_TMP_DIR}"; //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/MTDConfig_wrapped b/parm/met_config/MTDConfig_wrapped index d521670ea..f01098234 100644 --- a/parm/met_config/MTDConfig_wrapped +++ b/parm/met_config/MTDConfig_wrapped @@ -257,4 +257,5 @@ tmp_dir = "${MET_TMP_DIR}"; //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/Madis2NcConfig_wrapped b/parm/met_config/Madis2NcConfig_wrapped index 4cafab003..282f6782f 100644 --- a/parm/met_config/Madis2NcConfig_wrapped +++ b/parm/met_config/Madis2NcConfig_wrapped @@ -25,4 +25,6 @@ ${METPLUS_TIME_SUMMARY_DICT} // //version = "V12.0.0"; +${METPLUS_TIME_OFFSET_WARNING} + ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/PB2NCConfig_wrapped b/parm/met_config/PB2NCConfig_wrapped index 8b9057923..6174608bb 100644 --- a/parm/met_config/PB2NCConfig_wrapped +++ b/parm/met_config/PB2NCConfig_wrapped @@ -129,4 +129,5 @@ tmp_dir = "${MET_TMP_DIR}"; //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/PlotPointObsConfig_wrapped b/parm/met_config/PlotPointObsConfig_wrapped index 2194f01fe..8fd113b86 100644 --- a/parm/met_config/PlotPointObsConfig_wrapped +++ b/parm/met_config/PlotPointObsConfig_wrapped @@ -96,4 +96,5 @@ tmp_dir = "${MET_TMP_DIR}"; //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/Point2GridConfig_wrapped b/parm/met_config/Point2GridConfig_wrapped deleted file mode 100644 index 5ebc51a46..000000000 --- a/parm/met_config/Point2GridConfig_wrapped +++ /dev/null @@ -1,54 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Point2Grid configuration file. -// -// For additional information, please see the MET User's Guide. -// -//////////////////////////////////////////////////////////////////////////////// - -// -// NetCDF output variable timing information: -// - valid_time in YYYYMMDD[_HH[MMSS]] format -// -//valid_time = -${METPLUS_VALID_TIME} - -// -// Observation time window -// -//obs_window = { -${METPLUS_OBS_WINDOW_DICT} - -//////////////////////////////////////////////////////////////////////////////// - - -// -// Observation message type -// -//message_type = [ -${METPLUS_MESSAGE_TYPE} - -//////////////////////////////////////////////////////////////////////////////// - -// -// Mapping of input variable names to output variables names. -// -//var_name_map = [ -${METPLUS_VAR_NAME_MAP_LIST} - -//////////////////////////////////////////////////////////////////////////////// - -//obs_quality_inc = [ -${METPLUS_OBS_QUALITY_INC} - -//obs_quality_exc = [ -${METPLUS_OBS_QUALITY_EXC} - -//////////////////////////////////////////////////////////////////////////////// - -tmp_dir = "${MET_TMP_DIR}"; -//version = "V12.0.0"; - -//////////////////////////////////////////////////////////////////////////////// - -${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/PointStatConfig_wrapped b/parm/met_config/PointStatConfig_wrapped index 0d12bd0a7..7b717c6d2 100644 --- a/parm/met_config/PointStatConfig_wrapped +++ b/parm/met_config/PointStatConfig_wrapped @@ -216,4 +216,5 @@ ${METPLUS_OUTPUT_PREFIX} //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/STATAnalysisConfig_wrapped b/parm/met_config/STATAnalysisConfig_wrapped index d38c8def2..e3e32deba 100644 --- a/parm/met_config/STATAnalysisConfig_wrapped +++ b/parm/met_config/STATAnalysisConfig_wrapped @@ -164,4 +164,5 @@ tmp_dir = "${MET_TMP_DIR}"; //version = "V10.0"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/TCDiagConfig_wrapped b/parm/met_config/TCDiagConfig_wrapped index 8dacb81b2..0407e982c 100644 --- a/parm/met_config/TCDiagConfig_wrapped +++ b/parm/met_config/TCDiagConfig_wrapped @@ -180,4 +180,5 @@ tmp_dir = "${MET_TMP_DIR}"; //////////////////////////////////////////////////////////////////////////////// +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/TCGenConfig_wrapped b/parm/met_config/TCGenConfig_wrapped index c18f895f8..7d813aa10 100644 --- a/parm/met_config/TCGenConfig_wrapped +++ b/parm/met_config/TCGenConfig_wrapped @@ -294,4 +294,5 @@ ${METPLUS_NC_PAIRS_GRID} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/TCPairsConfig_wrapped b/parm/met_config/TCPairsConfig_wrapped index 93947c0c1..7b9aa0465 100644 --- a/parm/met_config/TCPairsConfig_wrapped +++ b/parm/met_config/TCPairsConfig_wrapped @@ -168,4 +168,5 @@ ${METPLUS_DIAG_CONVERT_MAP_LIST} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/TCRMWConfig_wrapped b/parm/met_config/TCRMWConfig_wrapped index 9df3ddec8..00a7ea0ad 100644 --- a/parm/met_config/TCRMWConfig_wrapped +++ b/parm/met_config/TCRMWConfig_wrapped @@ -89,4 +89,5 @@ ${METPLUS_RMW_SCALE} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/met_config/TCStatConfig_wrapped b/parm/met_config/TCStatConfig_wrapped index dc4d5ec78..a6bd4afb2 100644 --- a/parm/met_config/TCStatConfig_wrapped +++ b/parm/met_config/TCStatConfig_wrapped @@ -233,4 +233,5 @@ ${METPLUS_JOBS} tmp_dir = "${MET_TMP_DIR}"; +${METPLUS_TIME_OFFSET_WARNING} ${METPLUS_MET_CONFIG_OVERRIDES} diff --git a/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf b/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf index b6a0de754..f1aa33191 100644 --- a/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf +++ b/parm/use_cases/met_tool_wrapper/ASCII2NC/ASCII2NC.conf @@ -79,3 +79,5 @@ ASCII2NC_TIME_SUMMARY_VAR_NAMES = ASCII2NC_TIME_SUMMARY_TYPES = min, max, range, mean, stdev, median, p80 ASCII2NC_TIME_SUMMARY_VALID_FREQ = 0 ASCII2NC_TIME_SUMMARY_VALID_THRESH = 0.0 + +#ASCII2NC_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf index 3ac91314f..3f911cbf7 100644 --- a/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf +++ b/parm/use_cases/met_tool_wrapper/EnsembleStat/EnsembleStat.conf @@ -246,3 +246,5 @@ ENSEMBLE_STAT_NC_ORANK_FLAG_WEIGHT = FALSE #ENSEMBLE_STAT_CONTROL_ID = #ENSEMBLE_STAT_GRID_WEIGHT_FLAG = + +#ENSEMBLE_STAT_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/GenEnsProd/GenEnsProd.conf b/parm/use_cases/met_tool_wrapper/GenEnsProd/GenEnsProd.conf index 55ff51557..2d2394d37 100644 --- a/parm/use_cases/met_tool_wrapper/GenEnsProd/GenEnsProd.conf +++ b/parm/use_cases/met_tool_wrapper/GenEnsProd/GenEnsProd.conf @@ -165,3 +165,5 @@ GEN_ENS_PROD_ENS_THRESH = 0.8 #GEN_ENS_PROD_ENS_MEMBER_IDS = #GEN_ENS_PROD_CONTROL_ID = + +#GEN_ENS_PROD_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/GridDiag/GridDiag.conf b/parm/use_cases/met_tool_wrapper/GridDiag/GridDiag.conf index 4104ee601..23813198f 100644 --- a/parm/use_cases/met_tool_wrapper/GridDiag/GridDiag.conf +++ b/parm/use_cases/met_tool_wrapper/GridDiag/GridDiag.conf @@ -83,3 +83,5 @@ GRID_DIAG_CONFIG_FILE = {PARM_BASE}/met_config/GridDiagConfig_wrapped #GRID_DIAG_REGRID_CENSOR_VAL = GRID_DIAG_MASK_POLY = MET_BASE/poly/SAO.poly + +#GRID_DIAG_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/IODA2NC/IODA2NC.conf b/parm/use_cases/met_tool_wrapper/IODA2NC/IODA2NC.conf index 0948944a5..a03690187 100644 --- a/parm/use_cases/met_tool_wrapper/IODA2NC/IODA2NC.conf +++ b/parm/use_cases/met_tool_wrapper/IODA2NC/IODA2NC.conf @@ -96,3 +96,5 @@ IODA2NC_TIME_SUMMARY_OBS_VAR = "WIND" IODA2NC_TIME_SUMMARY_TYPE = "min", "max", "range", "mean", "stdev", "median", "p80" IODA2NC_TIME_SUMMARY_VLD_FREQ = 0 IODA2NC_TIME_SUMMARY_VLD_THRESH = 0.0 + +#IODA2NC_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/MADIS2NC/MADIS2NC.conf b/parm/use_cases/met_tool_wrapper/MADIS2NC/MADIS2NC.conf index 41b800907..ac4067dd6 100644 --- a/parm/use_cases/met_tool_wrapper/MADIS2NC/MADIS2NC.conf +++ b/parm/use_cases/met_tool_wrapper/MADIS2NC/MADIS2NC.conf @@ -83,4 +83,6 @@ MADIS2NC_TYPE = metar #MADIS2NC_TIME_SUMMARY_VLD_FREQ = #MADIS2NC_TIME_SUMMARY_VLD_THRESH = +#MADIS2NC_TIME_OFFSET_WARNING = + #MADIS2NC_MET_CONFIG_OVERRIDES = \ No newline at end of file diff --git a/parm/use_cases/met_tool_wrapper/MTD/MTD.conf b/parm/use_cases/met_tool_wrapper/MTD/MTD.conf index 6f615537e..30d3c1403 100644 --- a/parm/use_cases/met_tool_wrapper/MTD/MTD.conf +++ b/parm/use_cases/met_tool_wrapper/MTD/MTD.conf @@ -99,3 +99,5 @@ MTD_REGRID_TO_GRID = OBS MTD_MIN_VOLUME = 2000 MTD_OUTPUT_PREFIX = {MODEL}_{CURRENT_FCST_NAME}_vs_{OBTYPE}_{CURRENT_OBS_NAME}_{CURRENT_FCST_LEVEL} + +#MTD_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/PB2NC/PB2NC.conf b/parm/use_cases/met_tool_wrapper/PB2NC/PB2NC.conf index 93651289e..9acd346c1 100644 --- a/parm/use_cases/met_tool_wrapper/PB2NC/PB2NC.conf +++ b/parm/use_cases/met_tool_wrapper/PB2NC/PB2NC.conf @@ -94,3 +94,5 @@ PB2NC_TIME_SUMMARY_VALID_FREQ = 0 PB2NC_TIME_SUMMARY_VALID_THRESH = 0.0 #PB2NC_OBS_BUFR_MAP = + +#PB2NC_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/PlotPointObs/PlotPointObs.conf b/parm/use_cases/met_tool_wrapper/PlotPointObs/PlotPointObs.conf index 304e1c525..6289088f0 100644 --- a/parm/use_cases/met_tool_wrapper/PlotPointObs/PlotPointObs.conf +++ b/parm/use_cases/met_tool_wrapper/PlotPointObs/PlotPointObs.conf @@ -131,3 +131,5 @@ PLOT_POINT_OBS_POINT_DATA = colorbar_flag = FALSE; } } + +#PLOT_POINT_OBS_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/Point2Grid/Point2Grid.conf b/parm/use_cases/met_tool_wrapper/Point2Grid/Point2Grid.conf index 03695fcc6..570ee1cc8 100644 --- a/parm/use_cases/met_tool_wrapper/Point2Grid/Point2Grid.conf +++ b/parm/use_cases/met_tool_wrapper/Point2Grid/Point2Grid.conf @@ -68,24 +68,14 @@ POINT2GRID_REGRID_METHOD = MAX POINT2GRID_INPUT_FIELD =TMP POINT2GRID_INPUT_LEVEL = -#POINT2GRID_GOES_QC_FLAGS = +#POINT2GRID_QC_FLAGS = POINT2GRID_ADP = + POINT2GRID_GAUSSIAN_DX = 81.271 POINT2GRID_GAUSSIAN_RADIUS = 120 POINT2GRID_PROB_CAT_THRESH = POINT2GRID_VLD_THRESH = - -#POINT2GRID_VALID_TIME = -#POINT2GRID_OBS_WINDOW_BEG = -#POINT2GRID_OBS_WINDOW_END = -#POINT2GRID_MESSAGE_TYPE = -#POINT2GRID_VAR_NAME_MAP1_KEY = -#POINT2GRID_VAR_NAME_MAP1_VAL = -#POINT2GRID_OBS_QUALITY_INC = -#POINT2GRID_OBS_QUALITY_EXC = - -#POINT2GRID_MET_CONFIG_OVERRIDES = diff --git a/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf b/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf index 6d793e2bf..3cfaa3b52 100644 --- a/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf +++ b/parm/use_cases/met_tool_wrapper/PointStat/PointStat.conf @@ -264,3 +264,5 @@ POINT_STAT_MESSAGE_TYPE = ADPUPA, ADPSFC #POINT_STAT_UGRID_MAX_DISTANCE_KM = #POINT_STAT_UGRID_COORDINATES_FILE = #POINT_STAT_UGRID_CONFIG_FILE = + +#POINT_STAT_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/StatAnalysis/StatAnalysis.conf b/parm/use_cases/met_tool_wrapper/StatAnalysis/StatAnalysis.conf index 14eb18019..59378482f 100644 --- a/parm/use_cases/met_tool_wrapper/StatAnalysis/StatAnalysis.conf +++ b/parm/use_cases/met_tool_wrapper/StatAnalysis/StatAnalysis.conf @@ -84,3 +84,5 @@ LINE_TYPE_LIST = GROUP_LIST_ITEMS = FCST_INIT_HOUR_LIST LOOP_LIST_ITEMS = FCST_VALID_HOUR_LIST, MODEL_LIST + +#STAT_ANALYSIS_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/TCDiag/TCDiag.conf b/parm/use_cases/met_tool_wrapper/TCDiag/TCDiag.conf index b10919341..078e9c04a 100644 --- a/parm/use_cases/met_tool_wrapper/TCDiag/TCDiag.conf +++ b/parm/use_cases/met_tool_wrapper/TCDiag/TCDiag.conf @@ -117,3 +117,5 @@ TC_DIAG_DOMAIN_INFO1_OVERRIDE_DIAGS = #TC_DIAG_NC_DIAG_FLAG = #TC_DIAG_CIRA_DIAG_FLAG = #TC_DIAG_OUTPUT_BASE_FORMAT = + +#TC_DIAG_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/TCGen/TCGen.conf b/parm/use_cases/met_tool_wrapper/TCGen/TCGen.conf index ace36034e..424c3376b 100644 --- a/parm/use_cases/met_tool_wrapper/TCGen/TCGen.conf +++ b/parm/use_cases/met_tool_wrapper/TCGen/TCGen.conf @@ -177,3 +177,5 @@ TC_GEN_DLAND_FILE = MET_BASE/tc_data/dland_global_tenth_degree.nc TC_GEN_BASIN_FILE = MET_BASE/tc_data/basin_global_tenth_degree.nc TC_GEN_NC_PAIRS_GRID = G003 + +#TC_GEN_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/TCPairs/TCPairs_extra_tropical.conf b/parm/use_cases/met_tool_wrapper/TCPairs/TCPairs_extra_tropical.conf index e5a0bcf1e..231138ef2 100644 --- a/parm/use_cases/met_tool_wrapper/TCPairs/TCPairs_extra_tropical.conf +++ b/parm/use_cases/met_tool_wrapper/TCPairs/TCPairs_extra_tropical.conf @@ -122,3 +122,5 @@ TC_PAIRS_MISSING_VAL = -9999 #TC_PAIRS_DIAG_CONVERT_MAP1_DIAG_SOURCE = #TC_PAIRS_DIAG_CONVERT_MAP1_KEY = #TC_PAIRS_DIAG_CONVERT_MAP1_CONVERT = + +#TC_PAIRS_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/TCRMW/TCRMW.conf b/parm/use_cases/met_tool_wrapper/TCRMW/TCRMW.conf index 60b2e494d..a410e91ff 100644 --- a/parm/use_cases/met_tool_wrapper/TCRMW/TCRMW.conf +++ b/parm/use_cases/met_tool_wrapper/TCRMW/TCRMW.conf @@ -95,3 +95,5 @@ TC_RMW_CYCLONE = 14 #TC_RMW_VALID_INCLUDE_LIST = #TC_RMW_VALID_EXCLUDE_LIST = #TC_RMW_VALID_HOUR_LIST = + +#TC_RMW_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/met_tool_wrapper/TCStat/TCStat.conf b/parm/use_cases/met_tool_wrapper/TCStat/TCStat.conf index ec1705915..7f4be3683 100644 --- a/parm/use_cases/met_tool_wrapper/TCStat/TCStat.conf +++ b/parm/use_cases/met_tool_wrapper/TCStat/TCStat.conf @@ -117,3 +117,5 @@ TC_STAT_MATCH_POINTS = false #TC_STAT_EVENT_EQUAL_LEAD = #TC_STAT_OUT_INIT_MASK = #TC_STAT_OUT_VALID_MASK = + +#TC_STAT_TIME_OFFSET_WARNING = diff --git a/parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf b/parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf deleted file mode 100644 index 7bd4c7fb7..000000000 --- a/parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf +++ /dev/null @@ -1,132 +0,0 @@ -[config] - -# Documentation for this use-case can be found at: -# https://metplus.readthedocs.io/en/latest/generated/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.html - -# Processes to run -PROCESS_LIST = MODE - -# Time Info -LOOP_BY = INIT -INIT_TIME_FMT = %Y%m%d%H -INIT_BEG=2024010905 -INIT_END=2024010905 -INIT_INCREMENT = 1H - -LEAD_SEQ = 9,10 - -MODEL = RRFS -OBTYPE = ANALYSIS - -################################## -# Multivariate MODE Configurations -################################## - -# Run MODE to output super objects -MODE_MULTIVAR_LOGIC = #1 && #2 || #3 -MODE_MULTIVAR_INTENSITY_FLAG = FALSE,TRUE,TRUE - -FCST_MODE_INPUT_DIR = {INPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning -FCST_MODE_INPUT_TEMPLATE= {init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc,{init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc,{init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc - -OBS_MODE_INPUT_DIR = {INPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning -OBS_MODE_INPUT_TEMPLATE = remap_GOES-16.{valid?fmt=%Y%m%d}.{valid?fmt=%H}0000.nc,{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000_remap.nc,remap_GOES-16_lightning_{valid?fmt=%Y%m%d}-{valid?fmt=%H}00_75W.nc - -MODE_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning -MODE_OUTPUT_TEMPLATE = f{lead?fmt=%2H} - -FCST_MODE_FILE_WINDOW_BEGIN = 0 -FCST_MODE_FILE_WINDOW_END = 0 - -OBS_MODE_FILE_WINDOW_BEGIN = 0 -OBS_MODE_FILE_WINDOW_END = 0 - -### -# Field Info -### - - -FCST_VAR1_NAME = bt13_topofatmosphere_G16 -FCST_VAR1_LEVELS = (*,*) -FCST_VAR1_OPTIONS = conv_radius = 5; conv_thresh = <=230; merge_thresh = <=230; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [<=0]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - - -OBS_VAR1_NAME = channel_13_brightness_temperature -OBS_VAR1_LEVELS = L0 -OBS_VAR1_OPTIONS = conv_radius = 0; conv_thresh = <=230; merge_thresh = <=230; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [<=0]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - - -FCST_VAR2_NAME = REFC_entireatmosphere_consideredasinglelayer -FCST_VAR2_LEVELS = (*,*) -FCST_VAR2_OPTIONS = conv_radius = 5; conv_thresh = >=40; merge_thresh = >=40; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [< -30]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - -OBS_VAR2_NAME = MergedReflectivityQCComposite -OBS_VAR2_LEVELS = (*,*) -OBS_VAR2_OPTIONS = conv_radius = 5; conv_thresh = >=40; merge_thresh = >=40; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [< -30]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - - -FCST_VAR3_NAME = LTNG_entireatmosphere -FCST_VAR3_LEVELS = (*,*) -FCST_VAR3_OPTIONS = conv_radius = 3; conv_thresh = >SFP10; merge_thresh = >SFP10; merge_flag = THRESH; file_type = NETCDF_MET; censor_thresh = [<= 0]; censor_val = [-9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - -OBS_VAR3_NAME = flash_extent_density -OBS_VAR3_LEVELS = (*,*) -OBS_VAR3_OPTIONS = conv_radius = 3; conv_thresh = >SOP10; merge_thresh = >SOP10; merge_flag = THRESH; file_type = NETCDF_MET; censor_thresh = [<= 0]; censor_val = [-9999]; vld_thresh = 0.5; inten_perc_value = 100; inten_perc_thresh = NA - - -MODE_MATCH_FLAG = MERGE_BOTH - -MODE_REGRID_TO_GRID = NONE - -LOG_MODE_VERBOSITY = 4 - -MODE_OUTPUT_PREFIX = {MODEL}_or_{OBTYPE} - -MODE_GRID_RES = 3 - -MODE_INTEREST_FUNCTION_CENTROID_DIST = (( 0.0, 1.0 )( 60.0/grid_res, 1.0 )( 450.0/grid_res, 0.0 )) -MODE_INTEREST_FUNCTION_BOUNDARY_DIST = (( 0.0, 1.0 )( 400.0/grid_res, 0.0 )) -MODE_INTEREST_FUNCTION_CONVEX_HULL_DIST = (( 0.0, 1.0 )( 400.0/grid_res, 0.0 )) -MODE_INTEREST_FUNCTION_ANGLE_DIFF = (( 0.0, 1.0 )( 30.0, 1.0 )( 90.0, 0.0 )) -MODE_INTEREST_FUNCTION_ASPECT_DIFF = (( 0.00, 1.0 )( 0.10, 1.0 )( 0.75, 0.0 )) -MODE_INTEREST_FUNCTION_AREA_RATIO = (( 0.0, 0.0 )( 0.8, 1.0 )( 1.0, 1.0 )) -MODE_INTEREST_FUNCTION_INT_AREA_RATIO = (( 0.00, 0.00 )( 0.10, 0.50 )( 0.25, 1.00 )( 1.00, 1.00 )) -MODE_INTEREST_FUNCTION_CURVATURE_RATIO = (( 0.0, 0.0 )( 0.8, 1.0 )( 1.0, 1.0 )) -MODE_INTEREST_FUNCTION_COMPLEXITY_RATIO = (( 0.0, 0.0 )( 0.8, 1.0 )( 1.0, 1.0 )) -MODE_INTEREST_FUNCTION_INTEN_PERC_RATIO = (( 0.0, 0.0 )( 0.8, 1.0 )( 1.0, 1.0 )) - -MODE_TOTAL_INTEREST_THRESH = 0.65 - -MODE_MASK_GRID = "" -MODE_MASK_GRID_FLAG = NONE -MODE_MASK_POLY = "" -MODE_MASK_POLY_FLAG = NONE - -MODE_MASK_MISSING_FLAG = BOTH -MODE_MATCH_FLAG = MERGE_BOTH - -MODE_MAX_CENTROID_DIST = 600.0/grid_res - -MODE_WEIGHT_CENTROID_DIST = 4.0 -MODE_WEIGHT_BOUNDARY_DIST = 3.0 -MODE_WEIGHT_CONVEX_HULL_DIST = 1.0 -MODE_WEIGHT_ANGLE_DIFF = 1.0 -MODE_WEIGHT_ASPECT_DIFF = 0.0 -MODE_WEIGHT_AREA_RATIO = 4.0 -MODE_WEIGHT_INT_AREA_RATIO = 3.0 -MODE_WEIGHT_CURVATURE_RATIO = 0.0 -MODE_WEIGHT_COMPLEXITY_RATIO = 0.0 -MODE_WEIGHT_INTEN_PERC_RATIO = 0.0 -MODE_WEIGHT_INTEN_PERC_VALUE = 50 - -MODE_NC_PAIRS_FLAG_LATLON = TRUE -MODE_NC_PAIRS_FLAG_RAW = TRUE -MODE_NC_PAIRS_FLAG_OBJECT_RAW = TRUE -MODE_NC_PAIRS_FLAG_OBJECT_ID = TRUE -MODE_NC_PAIRS_FLAG_CLUSTER_ID = TRUE -MODE_NC_PAIRS_FLAG_POLYLINES = TRUE - -MODE_QUILT = False - -MODE_PS_PLOT_FLAG = TRUE -MODE_CT_STATS_FLAG = TRUE diff --git a/metplus/produtil/README_produtil.md b/produtil/README_produtil.md similarity index 100% rename from metplus/produtil/README_produtil.md rename to produtil/README_produtil.md diff --git a/metplus/produtil/__init__.py b/produtil/__init__.py similarity index 100% rename from metplus/produtil/__init__.py rename to produtil/__init__.py diff --git a/metplus/produtil/batchsystem.py b/produtil/batchsystem.py similarity index 100% rename from metplus/produtil/batchsystem.py rename to produtil/batchsystem.py diff --git a/metplus/produtil/cluster.py b/produtil/cluster.py similarity index 100% rename from metplus/produtil/cluster.py rename to produtil/cluster.py diff --git a/metplus/produtil/config.py b/produtil/config.py similarity index 99% rename from metplus/produtil/config.py rename to produtil/config.py index ffffa4062..f020838a1 100644 --- a/metplus/produtil/config.py +++ b/produtil/config.py @@ -11,18 +11,19 @@ # decides what symbols are imported by "from produtil.config import *" __all__=['from_file','confwalker','ProdConfig','ENVIRONMENT','ProdTask'] -import collections,re,os,logging,threading +import collections,re,string,os,logging,threading import os.path,sys import datetime -import metplus.produtil.fileop as fileop +import produtil.fileop, produtil.datastore +import produtil.numerics, produtil.log import configparser from configparser import ConfigParser from io import StringIO -from metplus.produtil.datastore import Datastore,Task +from produtil.datastore import Datastore,Task -from metplus.produtil.numerics import to_datetime, to_datetime_rel, fcst_hr_min +from produtil.numerics import to_datetime from string import Formatter from configparser import NoOptionError,NoSectionError @@ -378,7 +379,7 @@ def get_value(self,key,args,kwargs): v=ap6.strftime(ANL_P6_KEYS[key]) elif '__ftime' in kwargs and '__atime' in kwargs and \ key in TIME_DIFF_KEYS: - (ihours,iminutes)=fcst_hr_min( + (ihours,iminutes)=produtil.numerics.fcst_hr_min( kwargs['__ftime'],kwargs['__atime']) if key=='fahr': v=int(ihours) @@ -701,7 +702,7 @@ def from_args(self,args=None,allow_files=True,allow_options=True, elif not os.path.isfile(path): logger.error(path+': conf file is not a regular file.') sys.exit(2) - elif not fileop.isnonempty(path) and verbose: + elif not produtil.fileop.isnonempty(path) and verbose: logger.warning( path+': conf file is empty. Will continue anyway.') if verbose: logger.info('Conf input: '+repr(path)) @@ -822,7 +823,7 @@ def getdatastore(self): with self: if self._datastore is None: dsfile=self.getstr('config','datastore') - self._datastore=Datastore(dsfile, + self._datastore=produtil.datastore.Datastore(dsfile, logger=self.log('datastore')) return self._datastore @@ -1000,7 +1001,7 @@ def makedirs(self,*args): with self: dirs=[self.getstr('dir',arg) for arg in args] for makeme in dirs: - fileop.makedirs(makeme) + produtil.fileop.makedirs(makeme) def keys(self,sec): """!get options in a section @@ -1106,13 +1107,13 @@ def timestrinterp(self,sec,string,ftime=None,atime=None,**kwargs): @param atime the analysis time or None @param kwargs more variables for string expansion""" if atime is not None: - atime=to_datetime(atime) + atime=produtil.numerics.to_datetime(atime) else: atime=self.cycle if ftime is None: ftime=atime else: - ftime=to_datetime_rel(ftime,atime) + ftime=produtil.numerics.to_datetime_rel(ftime,atime) with self: return self._time_formatter.format(string,__section=sec, __key='__string__',__depth=0,__conf=self._conf,ENV=ENVIRONMENT, @@ -1342,7 +1343,7 @@ def getbool(self,sec,opt,default=None,badtypeok=False,morevars=None,taskvars=Non ######################################################################## -class ProdTask(Task): +class ProdTask(produtil.datastore.Task): """!A subclass of produtil.datastore.Task that provides a variety of convenience functions related to unix conf files and logging.""" diff --git a/metplus/produtil/datastore.py b/produtil/datastore.py similarity index 98% rename from metplus/produtil/datastore.py rename to produtil/datastore.py index 42268fe3f..cb2a66595 100644 --- a/metplus/produtil/datastore.py +++ b/produtil/datastore.py @@ -6,10 +6,9 @@ Datum, which is the base class of anything that can be stored in the Datastore.""" -import sqlite3, threading, collections, re, contextlib, datetime, logging, os, time -import metplus.produtil.fileop as fileop -from metplus.produtil.locking import LockFile -from metplus.produtil.log import jlogger +import sqlite3, threading, collections, re, contextlib, time, random,\ + traceback, datetime, logging, os, time +import produtil.fileop, produtil.locking, produtil.sigsafety, produtil.log ##@var __all__ # Symbols exported by "from produtil.datastore import *" @@ -176,7 +175,7 @@ def __init__(self,filename,logger=None,locking=True): lockfile=filename+'.lock' if logger is not None: logger.debug('Lockfile is %s for database %s'%(lockfile,filename)) - self._file_lock=LockFile( + self._file_lock=produtil.locking.LockFile( lockfile,logger=logger,max_tries=300,sleep_time=0.1,first_warn=50) self._transtack=collections.defaultdict(list) with self.transaction(): @@ -885,7 +884,7 @@ def undeliver(self,delete=True,logger=None): @param logger a logging.Logger for log messages""" loc=self.location if loc and delete: - fileop.remove_file(filename=loc,logger=logger,info=True) + produtil.fileop.remove_file(filename=loc,logger=logger,info=True) self.available=False def deliver(self,location=None,frominfo=None,keep=True,logger=None, copier=None): @@ -918,7 +917,7 @@ def deliver(self,location=None,frominfo=None,keep=True,logger=None, raise UnknownLocation( '%s: no location known when delivering product. Specify a ' 'location to deliver().'%(self.did)) - fileop.deliver_file(frominfo,loc,keep=keep,logger=logger, + produtil.fileop.deliver_file(frominfo,loc,keep=keep,logger=logger, copier=copier) if setloc: self.set_loc_avail(loc,True) @@ -967,7 +966,7 @@ def check(self,frominfo=None,minsize=None,minage=None,logger=None): minsize=int(self.get('minsize',0)) if minage is None: minage=int(self.get('minage',20)) - if not fileop.check_file(loc,min_size=minsize, + if not produtil.fileop.check_file(loc,min_size=minsize, min_mtime_age=minage): if self.available: self.available=False @@ -1094,7 +1093,7 @@ def jlogfile(self): intended to receive only major errors, and per-job start and completion information. This is equivalent to simply accessing produtil.log.jlogger.""" - return jlogger + return produtil.log.jlogger def postmsg(self,message,*args,**kwargs): """!same as produtil.log.jlogger.info() @@ -1104,7 +1103,7 @@ def postmsg(self,message,*args,**kwargs): @param message the message @param args positional arguments for string replacement @param kwargs keyword arguments for string replacement.""" - jlogger.info(message,*args,**kwargs) + produtil.log.jlogger.info(message,*args,**kwargs) def setstate(self,val): """!Sets the state of this job. diff --git a/metplus/produtil/dbnalert.py b/produtil/dbnalert.py similarity index 98% rename from metplus/produtil/dbnalert.py rename to produtil/dbnalert.py index 62f9830a2..de8343146 100644 --- a/metplus/produtil/dbnalert.py +++ b/produtil/dbnalert.py @@ -6,9 +6,10 @@ __all__=["DBNAlert"] import logging, os +import produtil.run -from metplus.produtil.prog import Runner -from metplus.produtil.run import batchexe, alias, run +from produtil.prog import Runner +from produtil.run import checkrun, batchexe, alias, run # Globals: diff --git a/metplus/produtil/externals b/produtil/externals similarity index 100% rename from metplus/produtil/externals rename to produtil/externals diff --git a/metplus/produtil/fileop.py b/produtil/fileop.py similarity index 99% rename from metplus/produtil/fileop.py rename to produtil/fileop.py index 6853f25a9..348daa600 100644 --- a/metplus/produtil/fileop.py +++ b/produtil/fileop.py @@ -18,7 +18,7 @@ 'netcdfver','touch'] import os,tempfile,filecmp,stat,shutil,errno,random,time,fcntl,math,logging -import metplus.produtil.cluster as cluster +import produtil.cluster, produtil.pipeline module_logger=logging.getLogger('produtil.fileop') @@ -403,9 +403,9 @@ def deliver_file(infile,outfile,keep=True,verify=False,blocksize=1048576, the temp_file_object is an object that can be used to write to the file. The copier should NOT close the temp_file_object. """ if preserve_group is None: - preserve_group = not cluster.group_quotas() + preserve_group = not produtil.cluster.group_quotas() if copy_acl is None: - copy_acl = cluster.use_acl_for_rstdata() + copy_acl = produtil.cluster.use_acl_for_rstdata() if copier is not None: # Cannot simply do a "move" if we are using an external # function to copy. diff --git a/metplus/produtil/locking.py b/produtil/locking.py similarity index 97% rename from metplus/produtil/locking.py rename to produtil/locking.py index 0cd4a7e61..1cf90fd27 100644 --- a/metplus/produtil/locking.py +++ b/produtil/locking.py @@ -14,9 +14,9 @@ ... the file is now unlocked ... @endcode""" -import fcntl, errno, os.path -import metplus.produtil.retry as retry -import metplus.produtil.fileop as fileop +import fcntl, time, errno, os.path +import produtil.retry as retry +import produtil.fileop ##@var __all__ # Symbols exported by "from produtil.locking import *" @@ -110,7 +110,7 @@ def acquire_impl(self): 'the process was exiting.') thedir=os.path.dirname(self._filename) if thedir: - fileop.makedirs(thedir) + produtil.fileop.makedirs(thedir) if self._fd is None: self._fd=open(self._filename,'wb') try: diff --git a/metplus/produtil/log.py b/produtil/log.py similarity index 99% rename from metplus/produtil/log.py rename to produtil/log.py index 0d6487f38..329cab79f 100644 --- a/metplus/produtil/log.py +++ b/produtil/log.py @@ -12,7 +12,7 @@ 'MasterLogHandler','JLogHandler','set_jlogfile' ] import logging, os, sys, traceback, threading -import metplus.produtil.batchsystem as batchsystem +import produtil.batchsystem ##@var logthread # string for log messages to indicate thread number/name @@ -379,7 +379,7 @@ def configureLogging(jlogfile=None, # Configure log formatting: jobstr=os.environ.get('job',None) if jobstr is None: - jobstr=batchsystem.jobname() + jobstr=produtil.batchsystem.jobname() jobstr=str(jobstr).replace('(','_').replace(')','_').replace('%','_') # Format for jlogfile domain logging to jlogfile: jformat=JLogFormatter( diff --git a/metplus/produtil/mpi_impl/__init__.py b/produtil/mpi_impl/__init__.py similarity index 89% rename from metplus/produtil/mpi_impl/__init__.py rename to produtil/mpi_impl/__init__.py index 10923ff83..b986e7d76 100644 --- a/metplus/produtil/mpi_impl/__init__.py +++ b/produtil/mpi_impl/__init__.py @@ -125,8 +125,7 @@ # __init__.py on how to modify it to achieve these steps. import logging -import metplus.produtil.fileop -import metplus.produtil.prog +import produtil.fileop ##@var __all__ # An empty list that indicates no symbols are exported by "from @@ -221,8 +220,8 @@ def register_implementations(logger=None): # no_implementation=None is used to detect if # register_implementations was called. global no_implementation - from metplus.produtil.mpi_impl.no_mpi import Implementation - no_implementation=Implementation.detect() + import produtil.mpi_impl.no_mpi + no_implementation=produtil.mpi_impl.no_mpi.Implementation.detect() # Now add each implementation. We need to wrap each around a # try...except so that NCEP Central Operations can delete the @@ -231,64 +230,64 @@ def register_implementations(logger=None): try: # If we have srun, and we're in a pack group... - import metplus.produtil.mpi_impl.srun_pack_groups - add_implementation(metplus.produtil.mpi_impl.srun_pack_groups.Implementation) + import produtil.mpi_impl.srun_pack_groups + add_implementation(produtil.mpi_impl.srun_pack_groups.Implementation) except ImportError: pass try: # This must be after the pack group case. # If we have srun and SLURM resources... - import metplus.produtil.mpi_impl.srun - add_implementation(metplus.produtil.mpi_impl.srun.Implementation) + import produtil.mpi_impl.srun + add_implementation(produtil.mpi_impl.srun.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.inside_aprun - add_implementation(metplus.produtil.mpi_impl.inside_aprun.Implementation) + import produtil.mpi_impl.inside_aprun + add_implementation(produtil.mpi_impl.inside_aprun.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.pbs_cray_intel - add_implementation(metplus.produtil.mpi_impl.pbs_cray_intel.Implementation) + import produtil.mpi_impl.pbs_cray_intel + add_implementation(produtil.mpi_impl.pbs_cray_intel.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.lsf_cray_intel - add_implementation(metplus.produtil.mpi_impl.lsf_cray_intel.Implementation) + import produtil.mpi_impl.lsf_cray_intel + add_implementation(produtil.mpi_impl.lsf_cray_intel.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.impi - add_implementation(metplus.produtil.mpi_impl.impi.Implementation) + import produtil.mpi_impl.impi + add_implementation(produtil.mpi_impl.impi.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.mpirun_lsf - add_implementation(metplus.produtil.mpi_impl.mpirun_lsf.Implementation) + import produtil.mpi_impl.mpirun_lsf + add_implementation(produtil.mpi_impl.mpirun_lsf.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.mpiexec_mpt - add_implementation(metplus.produtil.mpi_impl.mpiexec_mpt.Implementation) + import produtil.mpi_impl.mpiexec_mpt + add_implementation(produtil.mpi_impl.mpiexec_mpt.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.mpiexec - add_implementation(metplus.produtil.mpi_impl.mpiexec.Implementation) + import produtil.mpi_impl.mpiexec + add_implementation(produtil.mpi_impl.mpiexec.Implementation) except ImportError: pass try: - import metplus.produtil.mpi_impl.srun_shell - add_implementation(metplus.produtil.mpi_impl.srun_shell.Implementation) + import produtil.mpi_impl.srun_shell + add_implementation(produtil.mpi_impl.srun_shell.Implementation) except ImportError: pass @@ -316,7 +315,7 @@ def get_mpi(mpi_name=NO_NAME,force=False,logger=None,**kwargs): @raise NotImplementedError if the MPI implementation is unknown, or if the implementation is unavailble on this machine, and force=False""" - import metplus.produtil.mpi_impl.no_mpi as no_mpi + if logger is None: logger=logging.getLogger('mpi_impl') @@ -352,8 +351,8 @@ def get_mpi(mpi_name=NO_NAME,force=False,logger=None,**kwargs): result=detect( force=force,logger=logger,**kwargs) except (Exception, - metplus.produtil.fileop.FileOpError, - metplus.produtil.prog.ExitStatusException): + produtil.fileop.FileOpError, + produtil.prog.ExitStatusException): # Ignore exceptions related to an inability to detect the # MPI implementation. We assume the issue has already # been logged, and we move on to the next implementation's diff --git a/metplus/produtil/mpi_impl/mpi_impl_base.py b/produtil/mpi_impl/mpi_impl_base.py similarity index 98% rename from metplus/produtil/mpi_impl/mpi_impl_base.py rename to produtil/mpi_impl/mpi_impl_base.py index 6f1bb4411..572bfc63d 100644 --- a/metplus/produtil/mpi_impl/mpi_impl_base.py +++ b/produtil/mpi_impl/mpi_impl_base.py @@ -12,8 +12,9 @@ import tempfile,stat,os, logging, io, re -from metplus.produtil.pipeline import Pipeline -from metplus.produtil.prog import shbackslash, Runner, ImmutableRunner +import produtil.prog +import produtil.pipeline +from produtil.prog import shbackslash module_logger=logging.getLogger('produtil.mpi_impl') @@ -138,8 +139,8 @@ def find_mpiserial(self,mpiserial_path,force): def runsync(self,logger=None): """!Runs the "sync" command as an exe().""" if logger is None: logger=self.logger - sync=Runner(['/bin/sync']) - Pipeline(sync,capture=True,logger=logger) + sync=produtil.prog.Runner(['/bin/sync']) + produtil.pipeline.Pipeline(sync,capture=True,logger=logger) def openmp(self,arg,threads): """!Does nothing. This implementation does not support OpenMP. @@ -167,7 +168,7 @@ def make_bigexe(self,exe,**kwargs): @returns an empty list @param exe The executable to run on compute nodes. @param kwargs Ignored.""" - return ImmutableRunner([str(exe)],**kwargs) + return produtil.prog.ImmutableRunner([str(exe)],**kwargs) class CMDFGen(object): diff --git a/metplus/produtil/mpi_impl/no_mpi.py b/produtil/mpi_impl/no_mpi.py similarity index 88% rename from metplus/produtil/mpi_impl/no_mpi.py rename to produtil/mpi_impl/no_mpi.py index bb20f9a2b..71dfc1bfd 100644 --- a/metplus/produtil/mpi_impl/no_mpi.py +++ b/produtil/mpi_impl/no_mpi.py @@ -6,8 +6,9 @@ # produtil.run.mpiserial functions, providing the implementation # needed to run when MPI is unavailable. -import logging -from .mpi_impl_base import ImplementationBase +import os, logging +import produtil.prog,produtil.pipeline +from .mpi_impl_base import MPIDisabled,ImplementationBase module_logger=logging.getLogger('lsf_cray_intel') class Implementation(ImplementationBase): diff --git a/metplus/produtil/mpi_impl/srun.py b/produtil/mpi_impl/srun.py similarity index 90% rename from metplus/produtil/mpi_impl/srun.py rename to produtil/mpi_impl/srun.py index d4518ed0f..c3574ab1e 100644 --- a/metplus/produtil/mpi_impl/srun.py +++ b/produtil/mpi_impl/srun.py @@ -6,14 +6,12 @@ # commands. import os, logging, re -from metplus.produtil.fileop import find_exe -from metplus.produtil.prog import Runner, ImmutableRunner -import metplus.produtil.mpiprog as mpiprog -import metplus.produtil.pipeline as pipeline +import produtil.fileop,produtil.prog,produtil.mpiprog,produtil.pipeline from .mpi_impl_base import MPIMixed,CMDFGen,ImplementationBase, \ MPIThreadsMixed,MPILocalOptsMixed,MPITooManyRanks -from metplus.produtil.mpiprog import MIXED_VALUES +from produtil.pipeline import NoMoreProcesses +from produtil.mpiprog import MIXED_VALUES class Implementation(ImplementationBase): """Adds SLURM srun support to produtil.run @@ -39,12 +37,12 @@ def detect(srun_path=None,mpiserial_path=None,logger=None,force=False,silent=Fal if force: srun_path='srun' else: - srun_path=find_exe('srun',raise_missing=True) + srun_path=produtil.fileop.find_exe('srun',raise_missing=True) if scontrol_path is None: if force: scontrol_path='scontrol' else: - scontrol_path=find_exe('scontrol',raise_missing=True) + scontrol_path=produtil.fileop.find_exe('scontrol',raise_missing=True) if 'SLURM_NODELIST' not in os.environ and not force: return None return Implementation(srun_path,scontrol_path,mpiserial_path,logger,silent,force) @@ -60,8 +58,8 @@ def __init__(self,srun_path,scontrol_path,mpiserial_path,logger,silent,force): def runsync(self,logger=None): """!Runs the "sync" command as an exe().""" if logger is None: logger=self.logger - sync=Runner(['/bin/sync']) - pipeline.Pipeline(sync,capture=True,logger=logger) + sync=produtil.prog.Runner(['/bin/sync']) + produtil.pipeline.Pipeline(sync,capture=True,logger=logger) def openmp(self,arg,threads): """!Adds OpenMP support to the provided object @@ -88,7 +86,7 @@ def make_bigexe(self,exe,**kwargs): @returns an empty list @param exe The executable to run on compute nodes. @param kwargs Ignored.""" - return ImmutableRunner([str(exe)],**kwargs) + return produtil.prog.ImmutableRunner([str(exe)],**kwargs) def mpirunner(self,arg,allranks=False,**kwargs): """!Turns a produtil.mpiprog.MPIRanksBase tree into a produtil.prog.Runner @@ -106,10 +104,10 @@ def mpirunner(self,arg,allranks=False,**kwargs): def _get_available_nodes(self): available_nodes=list() nodeset=set() - scontrol=Runner([ + scontrol=produtil.prog.Runner([ self.scontrol_path,'show','hostnames', os.environ['SLURM_NODELIST']]) - p=pipeline.Pipeline( + p=produtil.pipeline.Pipeline( scontrol,capture=True,logger=self.logger) nodelist=p.to_string() for line in nodelist.splitlines(): @@ -123,7 +121,7 @@ def _get_available_nodes(self): def mpirunner_impl(self,arg,allranks=False,rewrite_nodefile=True,label_io=False,**kwargs): """!This is the underlying implementation of mpirunner and should not be called directly.""" - assert(isinstance(arg,mpiprog.MPIRanksBase)) + assert(isinstance(arg,produtil.mpiprog.MPIRanksBase)) (serial,parallel)=arg.check_serial() if serial and parallel: raise MPIMixed('Cannot mix serial and parallel MPI ranks in the ' @@ -145,7 +143,7 @@ def mpirunner_impl(self,arg,allranks=False,rewrite_nodefile=True,label_io=False, srun_args.append('--distribution=block:block') arglist=[ str(a) for a in arg.to_arglist( pre=srun_args,before=[],between=[])] - return Runner(arglist) + return produtil.prog.Runner(arglist) elif allranks: raise MPIAllRanksError( "When using allranks=True, you must provide an mpi program " @@ -153,9 +151,9 @@ def mpirunner_impl(self,arg,allranks=False,rewrite_nodefile=True,label_io=False, "all ranks).") elif serial: srun_args.append('--distribution=block:block') - arg=mpiprog.collapse(arg) + arg=produtil.mpiprog.collapse(arg) lines=[str(a) for a in arg.to_arglist(to_shell=True,expand=True)] - return Runner( + return produtil.prog.Runner( [self.srun_path,'--ntasks','%s'%(arg.nranks()),self.mpiserial_path], prerun=CMDFGen('serialcmdf',lines,silent=self.silent,**kwargs)) else: @@ -206,4 +204,4 @@ def mpirunner_impl(self,arg,allranks=False,rewrite_nodefile=True,label_io=False, silent=self.silent,filename_option='--nodelist', next_prerun=prerun,**kwargs) - return Runner(srun_args,prerun=prerun) + return produtil.prog.Runner(srun_args,prerun=prerun) diff --git a/metplus/produtil/mpiprog.py b/produtil/mpiprog.py similarity index 99% rename from metplus/produtil/mpiprog.py rename to produtil/mpiprog.py index ad7609f44..e7adf6e1f 100644 --- a/metplus/produtil/mpiprog.py +++ b/produtil/mpiprog.py @@ -44,9 +44,12 @@ # Ensure nothing is loaded by "from produtil.mpiprog import *" __all__=[] +import sys + import io import logging -from metplus.produtil.prog import ProgSyntaxError, shbackslash, Runner, ImmutableRunner +import produtil.prog +from produtil.prog import ProgSyntaxError, shbackslash class MPIProgSyntaxError(ProgSyntaxError): """!Base class of syntax errors in MPI program specifications""" @@ -828,7 +831,7 @@ def __init__(self,arg,logger=None): self._localopts=list(arg._localopts) self._turbomode=arg.turbomode self._ranks_per_node=arg.ranks_per_node - elif isinstance(arg,Runner): + elif isinstance(arg,produtil.prog.Runner): if arg.isplainexe(): self._args=[x for x in arg.args()] else: @@ -868,7 +871,7 @@ def delthreads(self): def to_shell(self): """!Return a POSIX sh representation of this MPI rank, if possible.""" - return ' '.join([shbackslash(x) for x in self._args]) + return ' '.join([produtil.prog.shbackslash(x) for x in self._args]) def __getitem__(self,args): """!Adds arguments to this MPI rank's program.""" c=self.copy() @@ -992,8 +995,8 @@ def __init__(self,runner,logger=None): self._ranks_per_node=0 def make_runners_immutable(self): """!Creates a version of self with a produtil.prog.ImmutableRunner child.""" - if not isinstance(self._runner,ImmutableRunner): - return MPISerial(ImmutableRunner(self._runner),self._logger) + if not isinstance(self._runner,produtil.prog.ImmutableRunner): + return MPISerial(produtil.prog.ImmutableRunner(self._runner),self._logger) else: return self def copy(self): diff --git a/metplus/produtil/numerics.py b/produtil/numerics.py similarity index 100% rename from metplus/produtil/numerics.py rename to produtil/numerics.py diff --git a/metplus/produtil/pipeline.py b/produtil/pipeline.py similarity index 100% rename from metplus/produtil/pipeline.py rename to produtil/pipeline.py diff --git a/metplus/produtil/prog.py b/produtil/prog.py similarity index 99% rename from metplus/produtil/prog.py rename to produtil/prog.py index 441cc6bd3..f6f2c6fdf 100644 --- a/metplus/produtil/prog.py +++ b/produtil/prog.py @@ -37,9 +37,11 @@ directly, except for type checking (ie.: to see if your argument is a Runner before passing it to produtil.run.checkrun)..""" -import re, os +import produtil.sigsafety +import io,select,io,re,time,fcntl,os,logging,signal -from metplus.produtil.pipeline import ERR2OUT +import produtil.mpi_impl +from produtil.pipeline import launch, manage, PIPE, ERR2OUT ERR2OUT_FCT_STR = '.err2out()' diff --git a/metplus/produtil/retry.py b/produtil/retry.py similarity index 100% rename from metplus/produtil/retry.py rename to produtil/retry.py diff --git a/metplus/produtil/run.py b/produtil/run.py similarity index 97% rename from metplus/produtil/run.py rename to produtil/run.py index bdd305ea2..a7e469b89 100644 --- a/metplus/produtil/run.py +++ b/produtil/run.py @@ -155,14 +155,15 @@ """ import time, logging -import metplus.produtil.mpi_impl as mpi_impl -import metplus.produtil.prog as prog -import metplus.produtil.mpiprog as mpiprog -import metplus.produtil.pipeline as pipeline +import produtil.mpi_impl +import produtil.sigsafety +import produtil.prog as prog +import produtil.mpiprog as mpiprog +import produtil.pipeline as pipeline # These two were moved to produtil.prog to avoid a cyclic import. # They still need to be available from produtil.run: -from metplus.produtil.prog import InvalidRunArgument,ExitStatusException +from produtil.prog import InvalidRunArgument,ExitStatusException ##@var __all__ # List of symbols exported by "from produtil.run import *" @@ -179,7 +180,7 @@ # The cached return value from detect_mpi() _detected_mpi=None -def make_mpi(mpi_name=mpi_impl.NO_NAME,**kwargs): +def make_mpi(mpi_name=produtil.mpi_impl.NO_NAME,**kwargs): """!Creates an MPI implementation object for the specified MPI implementation. @@ -207,7 +208,7 @@ def make_mpi(mpi_name=mpi_impl.NO_NAME,**kwargs): # situation does not need any initialization of the produtil.run # module: if mpi_name is None: - return mpi_impl.get_mpi(None,**kwargs) + return produtil.mpi_impl.get_mpi(None,**kwargs) # For anything other than "None," we have to ensure the # produtil.run is initialized to something before running @@ -215,7 +216,7 @@ def make_mpi(mpi_name=mpi_impl.NO_NAME,**kwargs): detect_mpi() # Next, return the requested implementation: - return mpi_impl.get_mpi(mpi_name,**kwargs) + return produtil.mpi_impl.get_mpi(mpi_name,**kwargs) def detect_mpi(): """!Called by functions inside produtil.run to automatically @@ -252,10 +253,10 @@ def detect_mpi(): # First, set the implementation to None so that the mpi_impl # subclasses can use produtil.run. This will only allow serial, # non-OpenMP programs: - _detected_mpi=mpi_impl.get_mpi(None) + _detected_mpi=produtil.mpi_impl.get_mpi(None) - # Next, ask mpi_impl to detect the MPI implementation: - detected=mpi_impl.get_mpi() + # Next, ask produtil.mpi_impl to detect the MPI implementation: + detected=produtil.mpi_impl.get_mpi() # If detection succeeds, override the selected MPI implementation: if detected: diff --git a/metplus/produtil/setup.py b/produtil/setup.py similarity index 85% rename from metplus/produtil/setup.py rename to produtil/setup.py index b97bdc884..9a58e6a8b 100644 --- a/metplus/produtil/setup.py +++ b/produtil/setup.py @@ -7,12 +7,9 @@ # Lists symbols exported by "from produtil.setup import *" __all__=['setup'] -import threading -from metplus.produtil.sigsafety import install_handlers -from metplus.produtil.log import configureLogging -from metplus.produtil.dbnalert import init_module -from metplus.produtil.cluster import set_cluster, where -from metplus.produtil.batchsystem import set_default_name +import logging, threading +import produtil.sigsafety, produtil.log, produtil.dbnalert, produtil.cluster +import produtil.batchsystem def setup(ignore_hup=False,dbnalert_logger=None,jobname=None,cluster=None, send_dbn=None,thread_logger=False,thread_stack=2**24,**kwargs): @@ -64,19 +61,19 @@ def setup(ignore_hup=False,dbnalert_logger=None,jobname=None,cluster=None, # Set the default jobname. This is usually used for manually-run # scripts to ensure they have a "jobname" in the logging system: if jobname is not None: - set_default_name(jobname) + produtil.batchsystem.set_default_name(jobname) # Configure logging next so that the install_handlers will be able # to log. - configureLogging(thread_logger=thread_logger,**kwargs) + produtil.log.configureLogging(thread_logger=thread_logger,**kwargs) # Install signal handlers, and let the caller configure SIGHUP settings: - install_handlers(ignore_hup=ignore_hup) + produtil.sigsafety.install_handlers(ignore_hup=ignore_hup) # Set up dbnalert: - init_module(logger=dbnalert_logger,jobname=jobname, + produtil.dbnalert.init_module(logger=dbnalert_logger,jobname=jobname, send_dbn=send_dbn) # Set up cluster: if cluster is not None: - set_cluster(cluster) + produtil.cluster.set_cluster(cluster) else: - where() # guess cluster + produtil.cluster.where() # guess cluster diff --git a/metplus/produtil/sigsafety.py b/produtil/sigsafety.py similarity index 97% rename from metplus/produtil/sigsafety.py rename to produtil/sigsafety.py index 23699d766..301e48803 100644 --- a/metplus/produtil/sigsafety.py +++ b/produtil/sigsafety.py @@ -40,8 +40,7 @@ One can call install_handlers directly, though it is recommended to call produtil.setup.setup instead.""" -from metplus.produtil.locking import disable_locking -from metplus.produtil.pipeline import kill_all +import produtil.locking, produtil.pipeline import signal ##@var defaultsigs @@ -136,7 +135,7 @@ def hup_handler(signum,frame): caught_signal=signum caught_class=HangupSignal - disable_locking() + produtil.locking.disable_locking() raise HangupSignal(signum) def term_handler(signum,frame): @@ -146,8 +145,8 @@ def term_handler(signum,frame): caught_signal=signum caught_class=FatalSignal - disable_locking() # forbid file locks - kill_all() # kill all subprocesses + produtil.locking.disable_locking() # forbid file locks + produtil.pipeline.kill_all() # kill all subprocesses uninstall_handlers() raise FatalSignal(signum) diff --git a/pyproject.toml b/pyproject.toml index 30e5629b7..b5a3c468d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,47 +1,6 @@ [build-system] requires = [ - "setuptools", - "wheel", - "setuptools-git-versioning>=2.0,<3", + "setuptools>=42", + "wheel" ] -build-backend = "setuptools.build_meta" - -[project] -name = "metplus" -dynamic = ["version", "dependencies"] -description = "METplus Wrappers" -authors = [ - {name = "METplus"}, -] -requires-python = ">=3.10.4" -readme = "README.md" -license = {text = "MIT"} -classifiers = [ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", -] - -[project.urls] -Homepage = "https://github.com/dtcenter/METplus" - -[project.scripts] -run_metplus = "metplus.scripts.run_metplus:cli_main" - -[tool.setuptools.packages] -find = {include = ["metplus*"], exclude = ["parm"]} - -[tool.setuptools.package-data] -metplus = [ - "VERSION", "RELEASE_DATE", "PYTHON_VERSION", "PYTHON_VERSION_MIN", "parm/**" -] - -[tool.setuptools.exclude-package-data] -metplus = ["README", "__pycache__", "*~"] - -[tool.setuptools.dynamic] -dependencies = {file = ["requirements.txt"]} - -[tool.setuptools-git-versioning] -enabled = true -version_file = "metplus/VERSION" +build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2c05e903a..169d9d94c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -certifi>=2024.7.4 -python-dateutil>=2.8.2 -six>=1.16.0 +certifi==2024.7.4 +python-dateutil==2.8.2 +six==1.16.0 diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..2114a77ef --- /dev/null +++ b/setup.py @@ -0,0 +1,54 @@ +from setuptools import setup, find_packages +from distutils.util import convert_path +import os + +with open("README.md", "r") as fh: + long_description = fh.read() + +with open("metplus/VERSION", "r") as fh: + version = fh.read().strip() + +with open("metplus/PYTHON_VERSION_MIN", "r") as fh: + python_version_req = fh.read().strip() + +# get list of additional files needed to add to package +data_files = [] +# add version and release date files +data_files.append(('metplus', + ['metplus/VERSION', + 'metplus/RELEASE_DATE', + 'metplus/PYTHON_VERSION', + 'metplus/PYTHON_VERSION_MIN', + ])) + +for root, _, files in os.walk('parm'): + parm_files = [] + for filename in files: + filepath = os.path.join(root, filename) + # skip README, tilda, and pycache files + if ('__pycache__' in filepath or + 'README' in filepath or + filepath.endswith('~')): + continue + parm_files.append(filepath) + if parm_files: + data_files.append((root, parm_files)) + +setup( + name="metplus", + version=version, + author="METplus", + description="METplus Wrappers", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/dtcenter/METplus", + packages=find_packages(), + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + python_requires=f'>={python_version_req}', + data_files=data_files, + zip_safe=False, +) diff --git a/ush/run_metplus.py b/ush/run_metplus.py index 6f329867a..eb374b442 100755 --- a/ush/run_metplus.py +++ b/ush/run_metplus.py @@ -25,7 +25,7 @@ # add metplus directory to path so the wrappers and utilities can be found sys.path.insert(0, abspath(join(dirname(realpath(__file__)), pardir))) -from metplus.produtil.setup import setup as produtil_setup +import produtil.setup from metplus.util import pre_run_setup, run_metplus, post_run_cleanup from metplus import __version__ as metplus_version @@ -110,15 +110,12 @@ def get_config_inputs_from_command_line(): return config_inputs -def cli_main(): +if __name__ == "__main__": try: - produtil_setup(send_dbn=False, jobname='run-METplus') + produtil.setup.setup(send_dbn=False, jobname='run-METplus') if not main(): sys.exit(1) except Exception as exc: print(traceback.format_exc()) print('ERROR: run_metplus failed: %s' % exc) sys.exit(2) - -if __name__ == "__main__": - cli_main()