Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revamp logger module for additional features and bug fixes #924

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

tomvothecoder
Copy link
Collaborator

@tomvothecoder tomvothecoder commented Jan 22, 2025

Description

  1. Log File Handling:

  2. Diagnostic Run Information:

    • Add a feature to print diagnostic run details at the top of the log file.
      • Include readable formatting displaying timestamp, git branch, commit or version info, and log file path.
  3. Logger Fixes and Improvements:

    • Make root logger the central source of logger handlers (console and log file) and remove handlers from child loggers.
      • Prevent repeated messages due to duplicate StreamHandlers on child loggers.
    • Fix an issue where the logger was not saving complete console output to the log file (Closes [Bug]: prov log doesn't include complete traceback #909).
      • Root cause: Logger outputs being overwritten.
    • Ensure consistent outputs between the console and log files
      • Set log file mode to w for both outputs.

Test file used

conda env create -f conda-env/dev.yml -n e3sm_diags_dev_848
conda activate e3sm_diags_dev_848

make install
python auxiliary_tools/cdat_regression_testing/909-prov-log/run_script.py 

Results: Log now prints all output, log + console outputs align, and no repeated messages. Works with serial and multiprocessing, and multiple simulations in a for-loop.

Example log file output (https://web.lcrc.anl.gov/public/e3sm/cdat-migration-fy24/909-prov-log/prov/e3sm_diags_run.log)

2025-01-27 14:53:26,245 [INFO]: run.py(_log_diagnostic_run_info:152) >> 
================================================================================
E3SM Diagnostics Run
--------------------
Timestamp: 2025-01-27 14:53:26
Version Info: branch bug/848-log with commit a96b1de892aa8a013288c3de9a11471db647c25b
Log Filepath: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/e3sm_diags_run.log
================================================================================

2025-01-27 14:53:31,866 [INFO]: e3sm_diags_driver.py(_save_env_yml:58) >> Saved environment yml file to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/environment.yml
2025-01-27 14:53:31,867 [INFO]: e3sm_diags_driver.py(_save_parameter_files:69) >> Saved command used to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/cmd_used.txt
2025-01-27 14:53:31,872 [INFO]: e3sm_diags_driver.py(_save_parameter_files:99) >> Saved cfg file to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/run.cfg
2025-01-27 14:53:31,874 [INFO]: e3sm_diags_driver.py(_save_python_script:133) >> Saved Python script to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/ipykernel_launcher.py
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: TREFHT
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:36,876 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:39,266 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:39,271 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:39,276 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TREFHT',)
2025-01-27 14:53:39,278 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:39,446 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:39,457 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:39,475 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('TREFHT_LAND',)
2025-01-27 14:53:39,476 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:39,476 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:39,490 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:39,494 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:39,495 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:39,502 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:39,519 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:39,705 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:39,722 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:40,751 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_test.nc
2025-01-27 14:53:40,757 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_ref.nc
2025-01-27 14:53:40,762 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_diff.nc
2025-01-27 14:53:40,763 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S.json
2025-01-27 14:53:40,792 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_test.nc
2025-01-27 14:53:40,800 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_ref.nc
2025-01-27 14:53:40,807 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_diff.nc
2025-01-27 14:53:40,809 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N.json
2025-01-27 14:53:41,168 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_test.nc
2025-01-27 14:53:41,174 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_ref.nc
2025-01-27 14:53:41,179 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_diff.nc
2025-01-27 14:53:41,181 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N.json
2025-01-27 14:53:41,442 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_test.nc
2025-01-27 14:53:41,448 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_ref.nc
2025-01-27 14:53:41,454 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_diff.nc
2025-01-27 14:53:41,455 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S.json
2025-01-27 14:53:41,862 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_test.nc
2025-01-27 14:53:41,869 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_ref.nc
2025-01-27 14:53:41,874 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_diff.nc
2025-01-27 14:53:41,876 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N.json
2025-01-27 14:53:42,718 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N.png
2025-01-27 14:53:42,720 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:42,824 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S.png
2025-01-27 14:53:42,826 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:43,980 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N.png
2025-01-27 14:53:43,981 [INFO]: polar_driver.py(run_diag:36) >> Variable: TREFHT
2025-01-27 14:53:44,397 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:45,420 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S.png
2025-01-27 14:53:45,422 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:45,443 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:45,625 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:45,647 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:45,664 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:45,894 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:45,911 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:46,434 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TREFHT',)
2025-01-27 14:53:46,583 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:46,600 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('TREFHT_LAND',)
2025-01-27 14:53:46,614 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:46,720 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_test.nc
2025-01-27 14:53:46,726 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_ref.nc
2025-01-27 14:53:46,732 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_diff.nc
2025-01-27 14:53:46,733 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N.png
2025-01-27 14:53:46,734 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S.json
2025-01-27 14:53:46,735 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:47,483 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_test.nc
2025-01-27 14:53:47,492 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_ref.nc
2025-01-27 14:53:47,498 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_diff.nc
2025-01-27 14:53:47,500 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N.json
2025-01-27 14:53:47,724 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_test.nc
2025-01-27 14:53:47,730 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_ref.nc
2025-01-27 14:53:47,735 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_diff.nc
2025-01-27 14:53:47,736 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N.json
2025-01-27 14:53:47,843 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:48,047 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:48,064 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:49,074 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S.png
2025-01-27 14:53:49,076 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:49,437 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:49,667 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:49,684 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:49,727 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_test.nc
2025-01-27 14:53:49,733 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_ref.nc
2025-01-27 14:53:49,739 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_diff.nc
2025-01-27 14:53:49,740 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S.json
2025-01-27 14:53:50,666 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N.png
2025-01-27 14:53:50,667 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:50,775 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_test.nc
2025-01-27 14:53:50,782 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_ref.nc
2025-01-27 14:53:50,787 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_diff.nc
2025-01-27 14:53:50,789 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N.json
2025-01-27 14:53:51,096 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:51,590 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:51,722 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N.png
2025-01-27 14:53:51,724 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:51,742 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'JJA' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:51,786 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:52,035 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N.png
2025-01-27 14:53:52,037 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:52,569 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S.png
2025-01-27 14:53:53,121 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:53,271 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:53,298 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:53:53,315 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:53,955 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_test.nc
2025-01-27 14:53:53,967 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_ref.nc
2025-01-27 14:53:53,973 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_diff.nc
2025-01-27 14:53:53,974 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N.json
2025-01-27 14:53:54,316 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,453 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,463 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'JJA' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:54,468 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:54,543 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,622 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:54,639 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:54,776 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:54,791 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:55,408 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_test.nc
2025-01-27 14:53:55,414 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_ref.nc
2025-01-27 14:53:55,415 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N.png
2025-01-27 14:53:55,417 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:55,420 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_diff.nc
2025-01-27 14:53:55,421 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S.json
2025-01-27 14:53:55,855 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_test.nc
2025-01-27 14:53:55,861 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_ref.nc
2025-01-27 14:53:55,867 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_diff.nc
2025-01-27 14:53:55,868 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N.json
2025-01-27 14:53:55,983 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:56,977 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N.png
2025-01-27 14:53:56,978 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:57,221 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:57,367 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'ANN' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:57,370 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:57,621 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S.png
2025-01-27 14:53:57,623 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:58,018 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:58,165 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:58,191 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:53:58,209 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:58,839 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_test.nc
2025-01-27 14:53:58,850 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_ref.nc
2025-01-27 14:53:58,856 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_diff.nc
2025-01-27 14:53:58,858 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N.json
2025-01-27 14:53:59,404 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:59,575 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:59,591 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:59,925 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:00,073 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'ANN' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:54:00,095 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:00,269 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:00,285 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:00,305 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N.png
2025-01-27 14:54:00,307 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:54:00,359 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_test.nc
2025-01-27 14:54:00,365 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_ref.nc
2025-01-27 14:54:00,373 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_diff.nc
2025-01-27 14:54:00,374 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S.json
2025-01-27 14:54:00,823 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:01,208 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_test.nc
2025-01-27 14:54:01,214 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_ref.nc
2025-01-27 14:54:01,220 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_diff.nc
2025-01-27 14:54:01,221 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N.json
2025-01-27 14:54:01,931 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S.png
2025-01-27 14:54:01,933 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:02,494 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N.png
2025-01-27 14:54:02,496 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:03,024 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:54:03,171 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:03,200 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:54:03,217 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:03,807 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_test.nc
2025-01-27 14:54:03,820 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_ref.nc
2025-01-27 14:54:03,826 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_diff.nc
2025-01-27 14:54:03,827 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S.json
2025-01-27 14:54:04,353 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:04,590 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:04,606 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:05,072 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:05,242 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:05,258 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:05,531 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_test.nc
2025-01-27 14:54:05,537 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_ref.nc
2025-01-27 14:54:05,543 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_diff.nc
2025-01-27 14:54:05,545 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N.json
2025-01-27 14:54:06,012 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S.png
2025-01-27 14:54:06,013 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:54:06,023 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_test.nc
2025-01-27 14:54:06,029 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_ref.nc
2025-01-27 14:54:06,034 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_diff.nc
2025-01-27 14:54:06,036 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S.json
2025-01-27 14:54:06,420 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:06,785 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N.png
2025-01-27 14:54:06,787 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:07,453 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S.png
2025-01-27 14:54:07,455 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:08,467 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:54:08,614 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:08,641 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:54:08,659 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:09,247 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_test.nc
2025-01-27 14:54:09,259 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_ref.nc
2025-01-27 14:54:09,265 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_diff.nc
2025-01-27 14:54:09,266 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S.json
2025-01-27 14:54:09,327 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:09,495 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:09,511 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:10,016 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:10,184 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:10,201 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:10,273 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_test.nc
2025-01-27 14:54:10,281 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_ref.nc
2025-01-27 14:54:10,286 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_diff.nc
2025-01-27 14:54:10,288 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S.json
2025-01-27 14:54:10,568 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S.png
2025-01-27 14:54:11,130 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_test.nc
2025-01-27 14:54:11,136 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_ref.nc
2025-01-27 14:54:11,142 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_diff.nc
2025-01-27 14:54:11,144 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N.json
2025-01-27 14:54:11,708 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S.png
2025-01-27 14:54:12,313 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N.png
2025-01-27 14:54:12,361 [INFO]: main.py(create_viewer:132) >> polar /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/viewer
2025-01-27 14:54:12,503 [INFO]: main.py(create_viewer:135) >> ('Polar contour maps', 'polar/index.html')
2025-01-27 14:54:12,507 [INFO]: e3sm_diags_driver.py(main:396) >> Viewer HTML generated at /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/viewer/index.html

Example console output (matches log file)

2025-01-27 14:53:26,245 [INFO]: run.py(_log_diagnostic_run_info:152) >> 
================================================================================
E3SM Diagnostics Run
--------------------
Timestamp: 2025-01-27 14:53:26
Version Info: branch bug/848-log with commit a96b1de892aa8a013288c3de9a11471db647c25b
Log Filepath: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/e3sm_diags_run.log
================================================================================

2025-01-27 14:53:31,866 [INFO]: e3sm_diags_driver.py(_save_env_yml:58) >> Saved environment yml file to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/environment.yml
2025-01-27 14:53:31,867 [INFO]: e3sm_diags_driver.py(_save_parameter_files:69) >> Saved command used to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/cmd_used.txt
2025-01-27 14:53:31,872 [INFO]: e3sm_diags_driver.py(_save_parameter_files:99) >> Saved cfg file to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/run.cfg
2025-01-27 14:53:31,874 [INFO]: e3sm_diags_driver.py(_save_python_script:133) >> Saved Python script to: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/ipykernel_launcher.py
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:36,192 [INFO]: polar_driver.py(run_diag:36) >> Variable: TREFHT
2025-01-27 14:53:36,876 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:39,266 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:39,271 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:39,276 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TREFHT',)
2025-01-27 14:53:39,278 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:39,446 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:39,457 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:39,475 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('TREFHT_LAND',)
2025-01-27 14:53:39,476 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:39,476 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:39,490 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:39,494 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:39,495 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:39,502 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:39,519 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:39,705 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:39,722 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:40,751 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_test.nc
2025-01-27 14:53:40,757 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_ref.nc
2025-01-27 14:53:40,762 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S_diff.nc
2025-01-27 14:53:40,763 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S.json
2025-01-27 14:53:40,792 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_test.nc
2025-01-27 14:53:40,800 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_ref.nc
2025-01-27 14:53:40,807 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N_diff.nc
2025-01-27 14:53:40,809 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N.json
2025-01-27 14:53:41,168 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_test.nc
2025-01-27 14:53:41,174 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_ref.nc
2025-01-27 14:53:41,179 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N_diff.nc
2025-01-27 14:53:41,181 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N.json
2025-01-27 14:53:41,442 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_test.nc
2025-01-27 14:53:41,448 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_ref.nc
2025-01-27 14:53:41,454 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S_diff.nc
2025-01-27 14:53:41,455 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S.json
2025-01-27 14:53:41,862 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_test.nc
2025-01-27 14:53:41,869 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_ref.nc
2025-01-27 14:53:41,874 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N_diff.nc
2025-01-27 14:53:41,876 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N.json
2025-01-27 14:53:42,718 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_N.png
2025-01-27 14:53:42,720 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:42,824 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_S.png
2025-01-27 14:53:42,826 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:43,980 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-JJA-polar_N.png
2025-01-27 14:53:43,981 [INFO]: polar_driver.py(run_diag:36) >> Variable: TREFHT
2025-01-27 14:53:44,397 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:45,420 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_S.png
2025-01-27 14:53:45,422 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:45,443 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:45,625 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:45,647 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:45,664 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:45,894 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:45,911 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:46,434 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TREFHT',)
2025-01-27 14:53:46,583 [WARNING]: dataset.py(_preprocess:458) >> "No time coordinates were found in this dataset to decode. If time coordinates were expected to exist, make sure they are detectable by setting the CF 'axis' or 'standard_name' attribute (e.g., ds['time'].attrs['axis'] = 'T' or ds['time'].attrs['standard_name'] = 'time'). Afterwards, try decoding again with `xcdat.decode_time`."
2025-01-27 14:53:46,600 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('TREFHT_LAND',)
2025-01-27 14:53:46,614 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:46,720 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_test.nc
2025-01-27 14:53:46,726 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_ref.nc
2025-01-27 14:53:46,732 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S_diff.nc
2025-01-27 14:53:46,734 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S.json
2025-01-27 14:53:46,733 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-JJA-polar_N.png
2025-01-27 14:53:46,735 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:47,483 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_test.nc
2025-01-27 14:53:47,492 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_ref.nc
2025-01-27 14:53:47,498 [INFO]: io.py(_write_to_netcdf:151) >> 'TREFHT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N_diff.nc
2025-01-27 14:53:47,500 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N.json
2025-01-27 14:53:47,724 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_test.nc
2025-01-27 14:53:47,730 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_ref.nc
2025-01-27 14:53:47,735 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N_diff.nc
2025-01-27 14:53:47,736 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N.json
2025-01-27 14:53:47,843 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:48,047 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sat_gauge_precip',)
2025-01-27 14:53:48,064 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:49,074 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-ANN-polar_S.png
2025-01-27 14:53:49,076 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:49,437 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:49,667 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:49,684 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:49,727 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_test.nc
2025-01-27 14:53:49,733 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_ref.nc
2025-01-27 14:53:49,739 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S_diff.nc
2025-01-27 14:53:49,740 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S.json
2025-01-27 14:53:50,666 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/CRU_IPCC/CRU-TREFHT-ANN-polar_N.png
2025-01-27 14:53:50,667 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:50,775 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_test.nc
2025-01-27 14:53:50,782 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_ref.nc
2025-01-27 14:53:50,787 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N_diff.nc
2025-01-27 14:53:50,789 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N.json
2025-01-27 14:53:51,096 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:51,590 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:51,722 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_N.png
2025-01-27 14:53:51,724 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:51,742 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'JJA' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:51,786 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:52,035 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_N.png
2025-01-27 14:53:52,037 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:52,569 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v3.2/GPCP_v3.2-PRECT-ANN-polar_S.png
2025-01-27 14:53:53,121 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:53,271 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:53,298 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:53:53,315 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:53,955 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_test.nc
2025-01-27 14:53:53,967 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_ref.nc
2025-01-27 14:53:53,973 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N_diff.nc
2025-01-27 14:53:53,974 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N.json
2025-01-27 14:53:54,316 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,453 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,463 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'JJA' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:54,468 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:54,543 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:54,622 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:54,639 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:54,776 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:54,791 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:55,408 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_test.nc
2025-01-27 14:53:55,414 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_ref.nc
2025-01-27 14:53:55,415 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_N.png
2025-01-27 14:53:55,417 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:53:55,420 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S_diff.nc
2025-01-27 14:53:55,421 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S.json
2025-01-27 14:53:55,855 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_test.nc
2025-01-27 14:53:55,861 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_ref.nc
2025-01-27 14:53:55,867 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N_diff.nc
2025-01-27 14:53:55,868 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N.json
2025-01-27 14:53:55,983 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:56,977 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_N.png
2025-01-27 14:53:56,978 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:57,221 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:57,367 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'ANN' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:53:57,370 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:57,621 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-JJA-polar_S.png
2025-01-27 14:53:57,623 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:53:58,018 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:53:58,165 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:53:58,191 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:53:58,209 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:53:58,839 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_test.nc
2025-01-27 14:53:58,850 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_ref.nc
2025-01-27 14:53:58,856 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N_diff.nc
2025-01-27 14:53:58,858 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N.json
2025-01-27 14:53:59,404 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:53:59,575 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:53:59,591 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:53:59,925 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:00,073 [ERROR]: core_parameter.py(_run_diag:343) >> Error in e3sm_diags.driver.polar_driver
Traceback (most recent call last):
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/parameter/core_parameter.py", line 340, in _run_diag
    single_result = module.run_diag(self)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/polar_driver.py", line 46, in run_diag
    ds_ref = ref_ds.get_climo_dataset(var_key, season)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 401, in get_climo_dataset
    ds = self._get_climo_dataset(season)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 424, in _get_climo_dataset
    filepath = self._get_climo_filepath(season)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/gpfs/fs1/home/ac.tvo/E3SM-Project/e3sm_diags/e3sm_diags/driver/utils/dataset_xr.py", line 571, in _get_climo_filepath
    raise IOError(
OSError: No file found for 'HadISST' and 'ANN' in /lcrc/group/e3sm/diagnostics/observations/Atm/climatology
2025-01-27 14:54:00,095 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:00,269 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:00,285 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:00,305 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_N.png
2025-01-27 14:54:00,307 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:54:00,359 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_test.nc
2025-01-27 14:54:00,365 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_ref.nc
2025-01-27 14:54:00,373 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S_diff.nc
2025-01-27 14:54:00,374 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S.json
2025-01-27 14:54:00,823 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:01,208 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_test.nc
2025-01-27 14:54:01,214 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_ref.nc
2025-01-27 14:54:01,220 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N_diff.nc
2025-01-27 14:54:01,221 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N.json
2025-01-27 14:54:01,931 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-ANN-polar_S.png
2025-01-27 14:54:01,933 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:02,494 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_N.png
2025-01-27 14:54:02,496 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:03,024 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:54:03,171 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:03,200 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:54:03,217 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:03,807 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_test.nc
2025-01-27 14:54:03,820 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_ref.nc
2025-01-27 14:54:03,826 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S_diff.nc
2025-01-27 14:54:03,827 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S.json
2025-01-27 14:54:04,353 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:04,590 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:04,606 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:05,072 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:05,242 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:05,258 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:05,531 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_test.nc
2025-01-27 14:54:05,537 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_ref.nc
2025-01-27 14:54:05,543 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N_diff.nc
2025-01-27 14:54:05,545 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N.json
2025-01-27 14:54:06,012 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-JJA-polar_S.png
2025-01-27 14:54:06,013 [INFO]: polar_driver.py(run_diag:36) >> Variable: PRECT
2025-01-27 14:54:06,023 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_test.nc
2025-01-27 14:54:06,029 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_ref.nc
2025-01-27 14:54:06,034 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S_diff.nc
2025-01-27 14:54:06,036 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S.json
2025-01-27 14:54:06,420 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:06,785 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_N.png
2025-01-27 14:54:06,787 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:07,453 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PD_HadISST/HadISST_PD-SST-ANN-polar_S.png
2025-01-27 14:54:07,455 [INFO]: polar_driver.py(run_diag:36) >> Variable: SST
2025-01-27 14:54:08,467 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('PRECC', 'PRECL')
2025-01-27 14:54:08,614 [WARNING]: warnings.py(_showwarnmsg:112) >> /home/ac.tvo/miniforge3/envs/e3sm_diags_dev_848/lib/python3.12/site-packages/xarray/conventions.py:193: SerializationWarning: variable 'PRECT' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
  var = coder.decode(var, name=name)

2025-01-27 14:54:08,641 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('PRECT',)
2025-01-27 14:54:08,659 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:09,247 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_test.nc
2025-01-27 14:54:09,259 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_ref.nc
2025-01-27 14:54:09,265 [INFO]: io.py(_write_to_netcdf:151) >> 'PRECT' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S_diff.nc
2025-01-27 14:54:09,266 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S.json
2025-01-27 14:54:09,327 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:09,495 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:09,511 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_S
2025-01-27 14:54:10,016 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the test climatology variable using the source variables: ('TS', 'OCNFRAC')
2025-01-27 14:54:10,184 [INFO]: dataset_xr.py(_get_dataset_with_derived_climo_var:713) >> Deriving the ref climatology variable using the source variables: ('sst',)
2025-01-27 14:54:10,201 [INFO]: regrid.py(subset_and_align_datasets:70) >> Selected region: polar_N
2025-01-27 14:54:10,273 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_test.nc
2025-01-27 14:54:10,281 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_ref.nc
2025-01-27 14:54:10,286 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S_diff.nc
2025-01-27 14:54:10,288 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S.json
2025-01-27 14:54:10,568 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/GPCP_v2.3/GPCP_v2.3-PRECT-ANN-polar_S.png
2025-01-27 14:54:11,130 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' test variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_test.nc
2025-01-27 14:54:11,136 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' ref variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_ref.nc
2025-01-27 14:54:11,142 [INFO]: io.py(_write_to_netcdf:151) >> 'SST' diff variable output saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N_diff.nc
2025-01-27 14:54:11,144 [INFO]: io.py(_save_data_metrics_and_plots:77) >> Metrics saved in /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N.json
2025-01-27 14:54:11,708 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_CL_HadISST/HadISST_CL-SST-JJA-polar_S.png
2025-01-27 14:54:12,313 [INFO]: utils.py(_save_plot:91) >> Plot saved in: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/polar/SST_PI_HadISST/HadISST_PI-SST-JJA-polar_N.png
2025-01-27 14:54:12,361 [INFO]: main.py(create_viewer:132) >> polar /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/viewer
2025-01-27 14:54:12,503 [INFO]: main.py(create_viewer:135) >> ('Polar contour maps', 'polar/index.html')
2025-01-27 14:54:12,507 [INFO]: e3sm_diags_driver.py(main:396) >> Viewer HTML generated at /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/viewer/index.html

  • Testing
    • Works with serial
    • Works with multiprocessing
    • Works with multiple simulations in a for-loop

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings
  • Any dependent changes have been merged and published in downstream modules

If applicable:

  • New and existing unit tests pass with my changes (locally and CI/CD build)
  • I have added tests that prove my fix is effective or that my feature works
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have noted that this is a breaking change for a major release (fix or feature that would cause existing functionality to not work as expected)

Additional Info

https://docs.python.org/3/library/logging.html#logging.basicConfig

Note

This function should be called from the main thread before other threads are started. In versions of Python prior to 2.7.1 and 3.2, if this function is called from multiple threads, it is possible (in rare circumstances) that a handler will be added to the root logger more than once, leading to unexpected results such as messages being duplicated in the log.

@tomvothecoder tomvothecoder self-assigned this Jan 22, 2025
@tomvothecoder tomvothecoder added the bug Bug fix (will increment patch version) label Jan 22, 2025
@chengzhuzhang
Copy link
Contributor

@tomvothecoder Another thing that bothers me a little, is that the e3sm_diags_run.log file was created in the directory where the run script is located, I'm wondering if it makes more sense to have it initiate under /prov, right away?

@tomvothecoder tomvothecoder marked this pull request as draft January 22, 2025 23:24
@tomvothecoder tomvothecoder changed the title Create one logger object per instantiated Run() object Create one logger object per instantiated Run() object and fix logger not including full traceback Jan 23, 2025
@tomvothecoder
Copy link
Collaborator Author

@tomvothecoder Another thing that bothers me a little, is that the e3sm_diags_run.log file was created in the directory where the run script is located, I'm wondering if it makes more sense to have it initiate under /prov, right away?

I agree, it makes sense to store the log immediately in the /prov rather than wait for a diagnostic run to end. There is also a semi-frustrating annoying behavior where when diagnostic run ends early (either manually or when crashing), the log won't be moved to /prov.

To achieve this, we need to find a way to pass the /prov dir to the logger object prior to any logging.

- Saves log file directly to `prov` dir
- Fix issue where complete log output not being printed to logfile
- Add feature to print diagnostic run information at the top of the logger output
@tomvothecoder tomvothecoder changed the title Create one logger object per instantiated Run() object and fix logger not including full traceback Revamp logger module for additional features and bug fixes Jan 23, 2025
- Update `custom_logger()` to not add StreamHandler and instead inherit from the root logger
- Fix `Run.run_diags()` to properly setup the provenance directory before creating the log file to avoid FileNotFoundError
Copy link
Collaborator Author

@tomvothecoder tomvothecoder left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @chengzhuzhang, this PR is ready for review.

The PR description includes the summary of changes. Hoping this makes logging much more robust and predictable.

Comment on lines +9 to +37
LOG_FORMAT = (
"%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s"
)
LOG_FILEMODE = "w"
LOG_LEVEL = logging.INFO


# Setup the root logger with a default log file.
# `force` is set to `True` to automatically remove root handlers whenever
# `basicConfig` called. This is required for cases where multiple e3sm_diags
# runs are executed. Otherwise, the logger objects attempt to share the same
# root file reference (which gets deleted between runs), resulting in
# `FileNotFoundError: [Errno 2] No such file or directory: 'e3sm_diags_run.log'`.
# More info here: https://stackoverflow.com/a/49202811
logging.basicConfig(
format=LOG_FORMAT,
filename=LOG_FILENAME,
filemode=LOG_FILEMODE,
level=LOG_LEVEL,
force=True,
)
logging.captureWarnings(True)

# Add a console handler to display warnings in the console. This is useful
# for when other package loggers raise warnings (e.g, NumPy, Xarray).
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(logging.Formatter(LOG_FORMAT))
logging.getLogger().addHandler(console_handler)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of configuring the root logger handler every time custom_logger() is called, we configure it once here.
We also add a single console handler that handles all console outputs, rather than adding it to every child logger in custom_logger() (which might cause duplicate messages I think).

Comment on lines +94 to +119
def _update_root_logger_filepath_to_prov_dir(log_path: str):
"""Updates the log file path to the provenance directory.

This method changes the log file path to a subdirectory named 'prov'
within the given results directory. It updates the filename of the
existing file handler to the new path.

Parameters
----------
log_path : str
The path to the log file, which is stored in the `results_dir`
sub-directory called "prov".

Notes
-----
- The method assumes that a logging file handler is already configured.
- The log file is closed and reopened at the new location.
- The log file mode is determined by the constant `LOG_FILEMODE`.
- The log file name is determined by the constant `LOG_FILENAME`.
"""
for handler in logging.root.handlers:
if isinstance(handler, logging.FileHandler):
handler.baseFilename = log_path
handler.stream.close()
handler.stream = open(log_path, LOG_FILEMODE) # type: ignore
break
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function updates the path of the root logger to the {results_dir}/prov.

Comment on lines +92 to +98
# Make the provenance directory to store the log file.
prov_dir = os.path.join(params[0].results_dir, "prov")
pathlib.Path(prov_dir).mkdir(parents=True, exist_ok=True)

log_dir = os.path.join(prov_dir, LOG_FILENAME)
_update_root_logger_filepath_to_prov_dir(log_dir)
self._log_diagnostic_run_info(log_dir)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The core change in run_diags(). First, create the prov dir, then update the path of the root logger to the log_dir, then print out the diagnostic info.

Comment on lines +113 to +166
def _log_diagnostic_run_info(self, log_path: str):
"""Logs information about the diagnostic run.

This method is useful for tracking the provenance of the diagnostic run
and understanding the context of the diagnostic results.

It logs the following information:
- Timestamp of the run
- Version information (Git branch and commit hash or module version)

Parameters
----------
log_path : str
The path to the log file, which is stored in the `results_dir`
sub-directory called "prov".

Notes
-----
The version information is retrieved from the current Git branch and
commit hash. If the Git information is not available, it falls back
to the version defined in the `e3sm_diags` module.
"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

try:
branch_name = (
subprocess.check_output(
["git", "rev-parse", "--abbrev-ref", "HEAD"],
cwd=os.path.dirname(__file__),
)
.strip()
.decode("utf-8")
)
commit_hash = (
subprocess.check_output(
["git", "rev-parse", "HEAD"], cwd=os.path.dirname(__file__)
)
.strip()
.decode("utf-8")
)
version_info = f"branch {branch_name} with commit {commit_hash}"
except subprocess.CalledProcessError:
version_info = f"version {e3sm_diags.__version__}"

logger.info(
f"\n{'=' * 80}\n"
f"E3SM Diagnostics Run\n"
f"{'-' * 20}\n"
f"Timestamp: {timestamp}\n"
f"Version Info: {version_info}\n"
f"Log Filepath: {log_path}\n"
f"{'=' * 80}\n"
)

Copy link
Collaborator Author

@tomvothecoder tomvothecoder Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example output with git branch printed at the top of the traceback.

2025-01-27 14:53:26,245 [INFO]: run.py(_log_diagnostic_run_info:152) >> 
================================================================================
E3SM Diagnostics Run
--------------------
Timestamp: 2025-01-27 14:53:26
Version Info: branch bug/848-log with commit a96b1de892aa8a013288c3de9a11471db647c25b
Log Filepath: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/e3sm_diags_run.log
================================================================================

Comment on lines +30 to +48
# Get the current machine's configuration info.
MACHINE_INFO = MachineInfo()
MACHINE = MACHINE_INFO.machine

if MACHINE not in [
"anvil",
"chrysalis",
"compy",
"pm-cpu",
"cori-haswell",
"cori-knl",
]:
raise ValueError(f"e3sm_diags is not supported on this machine ({MACHINE}).")

# The location where results will be stored based on your branch changes.
BASE_RESULTS_DIR = "/global/cfs/cdirs/e3sm/www/cdat-migration-fy24/"
if MACHINE in ["chrysalis", "anvil"]:
BASE_RESULTS_DIR = "/lcrc/group/e3sm/public_html/cdat-migration-fy24/"
elif MACHINE in ["cori-haswell", "cori-knl", "pm-cpu"]:
BASE_RESULTS_DIR = "/global/cfs/cdirs/e3sm/www/cdat-migration-fy24/"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the base_run_script to support LCRC too because perlmutter is down right now.

Comment on lines +113 to +166
def _log_diagnostic_run_info(self, log_path: str):
"""Logs information about the diagnostic run.

This method is useful for tracking the provenance of the diagnostic run
and understanding the context of the diagnostic results.

It logs the following information:
- Timestamp of the run
- Version information (Git branch and commit hash or module version)

Parameters
----------
log_path : str
The path to the log file, which is stored in the `results_dir`
sub-directory called "prov".

Notes
-----
The version information is retrieved from the current Git branch and
commit hash. If the Git information is not available, it falls back
to the version defined in the `e3sm_diags` module.
"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

try:
branch_name = (
subprocess.check_output(
["git", "rev-parse", "--abbrev-ref", "HEAD"],
cwd=os.path.dirname(__file__),
)
.strip()
.decode("utf-8")
)
commit_hash = (
subprocess.check_output(
["git", "rev-parse", "HEAD"], cwd=os.path.dirname(__file__)
)
.strip()
.decode("utf-8")
)
version_info = f"branch {branch_name} with commit {commit_hash}"
except subprocess.CalledProcessError:
version_info = f"version {e3sm_diags.__version__}"

logger.info(
f"\n{'=' * 80}\n"
f"E3SM Diagnostics Run\n"
f"{'-' * 20}\n"
f"Timestamp: {timestamp}\n"
f"Version Info: {version_info}\n"
f"Log Filepath: {log_path}\n"
f"{'=' * 80}\n"
)

Copy link
Collaborator Author

@tomvothecoder tomvothecoder Jan 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example output with git branch printed at the top of the traceback.

2025-01-27 14:53:26,245 [INFO]: run.py(_log_diagnostic_run_info:152) >> 
================================================================================
E3SM Diagnostics Run
--------------------
Timestamp: 2025-01-27 14:53:26
Version Info: branch bug/848-log with commit a96b1de892aa8a013288c3de9a11471db647c25b
Log Filepath: /lcrc/group/e3sm/public_html/cdat-migration-fy24/909-prov-log/prov/e3sm_diags_run.log
================================================================================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Bug fix (will increment patch version) enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: prov log doesn't include complete traceback [Bug]: e3sm_diags_run.log was not properly generated
2 participants