Started by an SCM change
Obtained jenkins_tests/clubb_dash/Jenkinsfile from git https://github.com/larson-group/clubb.git
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /home/jenkins/workspace/clubb_dash
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
The recommended git tool is: git
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository https://github.com/larson-group/clubb.git
> git init /home/jenkins/workspace/clubb_dash # timeout=10
Fetching upstream changes from https://github.com/larson-group/clubb.git
> git --version # timeout=10
> git --version # 'git version 2.34.1'
using GIT_ASKPASS to set credentials larsongroupsysadmin github token
> git fetch --tags --force --progress -- https://github.com/larson-group/clubb.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url https://github.com/larson-group/clubb.git # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision a8c952996409f8c94d6a28714171145ed7d2c2ae (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f a8c952996409f8c94d6a28714171145ed7d2c2ae # timeout=10
Commit message: "Fixed bug in cubic equation solve function. Only relevant if pdf is L… (#1387)"
> git rev-list --no-walk 4292a70f53a6b6c4eab864fe27b8fd9af5d86909 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Run Dash pytests)
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ export PATH=/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
+ PATH=/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
+ node --version
v22.23.3
+ bash tests/run_pytests.sh -dash --junitxml=/home/jenkins/workspace/clubb_dash/output/tests/pytests/dash.xml --durations=10
Installing uv 0.11.32 in /home/jenkins/workspace/clubb_dash/.clubb-python-tools/bin
downloading uv 0.11.32 x86_64-unknown-linux-gnu
installing to /home/jenkins/workspace/clubb_dash/.clubb-python-tools/bin
uv
uvx
everything's installed!
Creating CLUBB virtualenv: /home/jenkins/workspace/clubb_dash/.venv-python
Downloading cpython-3.12.13-linux-x86_64-gnu (download) (32.6MiB)
Downloaded cpython-3.12.13-linux-x86_64-gnu (download)
Using CPython 3.12.13
Creating virtual environment at: .venv-python
Activate with: source .venv-python/bin/activate
Installing dash requirements into /home/jenkins/workspace/clubb_dash/.venv-python
Using Python 3.12.13 environment at: .venv-python
Resolved 71 packages in 721ms
Downloading pygments (1.2MiB)
Downloading matplotlib (8.4MiB)
Downloading meson (1.1MiB)
Downloading netcdf4 (9.7MiB)
Downloading numpy (16.0MiB)
Downloading cftime (1.6MiB)
Downloading pydantic-core (2.1MiB)
Downloading pillow (6.6MiB)
Downloading cryptography (4.5MiB)
Downloading scipy (33.7MiB)
Downloading plotly (9.5MiB)
Downloading fonttools (5.1MiB)
Downloading kiwisolver (1.4MiB)
Downloading dash (7.6MiB)
Downloaded meson
Downloaded kiwisolver
Downloaded cftime
Downloaded pydantic-core
Downloaded pygments
Downloaded fonttools
Downloaded cryptography
Downloaded pillow
Downloaded netcdf4
Downloaded matplotlib
Downloaded dash
Downloaded numpy
Downloaded plotly
Downloaded scipy
Prepared 71 packages in 2.11s
Installed 71 packages in 97ms
+ annotated-types==0.8.0
+ anyio==4.15.1
+ attrs==26.1.0
+ blinker==1.9.0
+ certifi==2026.7.22
+ cffi==2.1.1
+ cftime==1.6.6
+ charset-normalizer==3.5.2
+ click==8.5.0
+ contourpy==1.4.0
+ cryptography==50.0.2
+ cycler==0.12.1
+ dash==3.4.0
+ dill==0.4.1
+ diskcache==5.6.3
+ flask==3.1.3
+ fonttools==4.66.1
+ h11==0.16.0
+ httpcore==1.0.9
+ httpx==0.28.1
+ httpx-sse==0.4.3
+ idna==3.20
+ importlib-metadata==9.0.1
+ iniconfig==2.3.1
+ itsdangerous==2.2.0
+ jinja2==3.1.6
+ jsonschema==4.26.0
+ jsonschema-specifications==2025.9.1
+ kiwisolver==1.5.1
+ markupsafe==3.0.4
+ matplotlib==3.10.9
+ mcp==1.30.0
+ meson==1.12.1
+ multiprocess==0.70.19
+ narwhals==2.27.1
+ nest-asyncio==1.6.0
+ netcdf4==1.7.4
+ ninja==1.13.2
+ numpy==2.5.4
+ packaging==26.3
+ pillow==12.3.0
+ plotly==6.9.0
+ pluggy==1.6.0
+ psutil==7.2.2
+ pycparser==3.11
+ pydantic==2.14.1
+ pydantic-core==2.50.1
+ pydantic-settings==2.15.0
+ pygments==2.21.0
+ pyjwt==2.15.1
+ pyparsing==3.3.3
+ pytest==9.1.1
+ python-dateutil==2.9.0.post0
+ python-dotenv==1.2.4
+ python-multipart==0.0.32
+ referencing==0.37.0
+ requests==2.34.2
+ retrying==1.4.2
+ rpds-py==2026.9.1
+ scipy==1.18.1
+ setuptools==84.0.0
+ six==1.17.0
+ sse-starlette==3.5.0
+ starlette==1.8.0
+ tabulate==0.10.0
+ typing-extensions==4.16.0
+ typing-inspection==0.4.4
+ urllib3==2.8.0
+ uvicorn==0.54.0
+ werkzeug==3.1.9
+ zipp==4.1.1
Ready: /home/jenkins/workspace/clubb_dash/.venv-python/bin/python
============================= test session starts ==============================
platform linux -- Python 3.12.13, pytest-9.1.1, pluggy-1.6.0
rootdir: /home/jenkins/workspace/clubb_dash
plugins: dash-3.4.0, anyio-4.15.1
collected 552 items
dash_app/pytests/test_activity.py ......... [ 1%]
dash_app/pytests/test_agent_integration.py .............. [ 4%]
dash_app/pytests/test_agent_plot_actions.py ........ [ 5%]
dash_app/pytests/test_agent_services.py ................................ [ 11%]
................. [ 14%]
dash_app/pytests/test_agent_tab_registry.py ...... [ 15%]
dash_app/pytests/test_agent_tuning.py ............ [ 17%]
dash_app/pytests/test_analysis.py ..... [ 18%]
dash_app/pytests/test_app_startup.py .......... [ 20%]
dash_app/pytests/test_atlas.py . [ 20%]
dash_app/pytests/test_bivariate_heatmap.py .. [ 21%]
dash_app/pytests/test_callbacks_runs.py ............ [ 23%]
dash_app/pytests/test_compile_tab_build_status.py ................. [ 26%]
dash_app/pytests/test_custom_plot.py ........ [ 27%]
dash_app/pytests/test_dashboard_activity_labels.py . [ 27%]
dash_app/pytests/test_dashboard_lifecycle.py ... [ 28%]
dash_app/pytests/test_dashboard_manager.py ...... [ 29%]
dash_app/pytests/test_equations.py ... [ 30%]
dash_app/pytests/test_fill_holes_viewer.py .... [ 30%]
dash_app/pytests/test_jax_device.py ..................... [ 34%]
dash_app/pytests/test_mcp_endpoint.py ... [ 35%]
dash_app/pytests/test_misc_tab.py ... [ 35%]
dash_app/pytests/test_netcdf.py ...... [ 36%]
dash_app/pytests/test_output_directory_picker.py ...... [ 37%]
dash_app/pytests/test_output_discovery.py ....... [ 39%]
dash_app/pytests/test_pane_resize.py ... [ 39%]
dash_app/pytests/test_param_disclosures.py ........ [ 41%]
dash_app/pytests/test_pdf_contour_plot.py ...................... [ 45%]
dash_app/pytests/test_performance_polling.py ....... [ 46%]
dash_app/pytests/test_persistence.py .... [ 47%]
dash_app/pytests/test_plot_case_cache.py .......... [ 48%]
dash_app/pytests/test_plot_extraction.py ............................... [ 54%]
[ 54%]
dash_app/pytests/test_plot_grid_updates.py ..... [ 55%]
dash_app/pytests/test_plot_help.py ... [ 55%]
dash_app/pytests/test_plot_tasks.py .......... [ 57%]
dash_app/pytests/test_plot_transitions.py ............. [ 60%]
dash_app/pytests/test_profile_tab.py .............................. [ 65%]
dash_app/pytests/test_profiles.py ...... [ 66%]
dash_app/pytests/test_pyplotgen_export.py ...... [ 67%]
dash_app/pytests/test_pyplotgen_output_handler.py . [ 67%]
dash_app/pytests/test_reports_tab.py ....... [ 69%]
dash_app/pytests/test_run_broker_simplification.py ..................... [ 73%]
[ 73%]
dash_app/pytests/test_run_callbacks_settings.py .............. [ 75%]
dash_app/pytests/test_run_runtime.py .......... [ 77%]
dash_app/pytests/test_runtime.py .. [ 77%]
dash_app/pytests/test_runtime_logging.py ..... [ 78%]
dash_app/pytests/test_runtime_loss_batches.py . [ 78%]
dash_app/pytests/test_sam_3d_reference.py . [ 78%]
dash_app/pytests/test_scm_override.py ...... [ 80%]
dash_app/pytests/test_selected_build.py ..................... [ 83%]
dash_app/pytests/test_state_persistence.py ............. [ 86%]
dash_app/pytests/test_stats_selection.py ............................... [ 91%]
[ 91%]
dash_app/pytests/test_taylor_window_display.py ..... [ 92%]
dash_app/pytests/test_tunable_config_save.py ............... [ 95%]
dash_app/pytests/test_tune_callbacks_settings.py ............. [ 97%]
dash_app/pytests/test_tutorial_tab.py .. [ 98%]
dash_app/pytests/test_two_gaussian_model.py ...... [ 99%]
dash_app/pytests/test_workspace_selection.py .... [100%]
=============================== warnings summary ===============================
dash_app/pytests/test_atlas.py: 49 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_atlas.py:39: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
w_variable[0, level] = w
dash_app/pytests/test_atlas.py: 49 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_atlas.py:40: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
rt_variable[0, level] = rt
dash_app/pytests/test_atlas.py: 49 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_atlas.py:41: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
rc_variable[0, level] = rc
dash_app/pytests/test_fill_holes_viewer.py::test_analysis_reads_direct_before_after_and_hardcoded_threshold
dash_app/pytests/test_fill_holes_viewer.py::test_profile_field_scale_defaults_to_log_and_can_be_linear
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_fill_holes_viewer.py:43: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
before[:] = np.array([[[2.0e-4], [8.0e-4], [1.0e-4]], [[8.0e-4], [1.2e-3], [1.6e-3]]])
dash_app/pytests/test_fill_holes_viewer.py::test_analysis_reads_direct_before_after_and_hardcoded_threshold
dash_app/pytests/test_fill_holes_viewer.py::test_profile_field_scale_defaults_to_log_and_can_be_linear
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_fill_holes_viewer.py:45: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
after[:] = np.array([[[5.0e-4], [8.0e-4], [2.0e-4]], [[8.0e-4], [1.2e-3], [1.6e-3]]])
dash_app/pytests/test_pdf_contour_plot.py: 470 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_pdf_contour_plot.py:87: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
variable[:] = np.full((time_count, height_count, 1), value)
dash_app/pytests/test_plot_case_cache.py::test_hydration_keeps_saved_view_and_scans_once
/home/jenkins/workspace/clubb_dash/dash_app/plot_tab/case_definitions.py:35: DeprecationWarning: ast.Str is deprecated and will be removed in Python 3.14; use ast.Constant instead
legacy_str = getattr(ast, "Str", None)
dash_app/pytests/test_plot_case_cache.py: 4120 warnings
/home/jenkins/workspace/clubb_dash/dash_app/plot_tab/case_definitions.py:36: DeprecationWarning: ast.Str is deprecated and will be removed in Python 3.14; use ast.Constant instead
if legacy_str is not None and isinstance(node, legacy_str):
dash_app/pytests/test_plot_case_cache.py::test_hydration_keeps_saved_view_and_scans_once
/home/jenkins/workspace/clubb_dash/dash_app/plot_tab/case_definitions.py:39: DeprecationWarning: ast.Num is deprecated and will be removed in Python 3.14; use ast.Constant instead
legacy_num = getattr(ast, "Num", None)
dash_app/pytests/test_plot_case_cache.py: 4120 warnings
/home/jenkins/workspace/clubb_dash/dash_app/plot_tab/case_definitions.py:40: DeprecationWarning: ast.Num is deprecated and will be removed in Python 3.14; use ast.Constant instead
if legacy_num is not None and isinstance(node, legacy_num):
dash_app/pytests/test_plot_extraction.py: 30 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_plot_extraction.py:35: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
field[:] = np.transpose(cube, [('time', 'zt', 'col').index(d) for d in dims])
dash_app/pytests/test_plot_extraction.py: 30 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_plot_extraction.py:39: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
ds.createVariable('lh_nl_w', 'f8', ('col', 'subcolumn', 'zt', 'time'))[:] = subcolumns.transpose(2, 3, 1, 0)
dash_app/pytests/test_plot_extraction.py: 30 warnings
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_plot_extraction.py:40: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
ds.createVariable('lwp', 'f8', ('col', 'time'))[:] = cube[:, 0, :].T
dash_app/pytests/test_plot_extraction.py::test_file_change_invalidates_cached_results[stats0]
dash_app/pytests/test_plot_extraction.py::test_file_change_invalidates_cached_results[stats1]
dash_app/pytests/test_plot_extraction.py::test_file_change_invalidates_cached_results[stats2]
/home/jenkins/workspace/clubb_dash/dash_app/pytests/test_plot_extraction.py:134: DeprecationWarning: Setting the shape on a NumPy array has been deprecated in NumPy 2.5.
As an alternative, you can create a new view using np.reshape (with copy=False if needed).
ds.variables['field'][:] = 42.0
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
- generated xml file: /home/jenkins/workspace/clubb_dash/output/tests/pytests/dash.xml -
============================= slowest 10 durations =============================
1.55s call dash_app/pytests/test_plot_tasks.py::test_browser_updates_selection_immediately_and_ignores_stale_results
1.38s call dash_app/pytests/test_agent_services.py::test_mcp_stdio_discovery_and_structured_error_round_trip
1.11s call dash_app/pytests/test_agent_plot_actions.py::test_profile_png_renderer_writes_a_real_png
1.06s call dash_app/pytests/test_plot_case_cache.py::test_background_worker_snapshot_resolves_in_main_process
0.85s call dash_app/pytests/test_plot_tasks.py::test_real_worker_inspects_missing_directory_and_serializes_no_update
0.72s call dash_app/pytests/test_agent_services.py::test_mcp_exposes_closed_world_typed_tools_and_annotations
0.57s call dash_app/pytests/test_pdf_contour_plot.py::test_pdf_compare_mode_builds_shared_axis_directory_panels
0.51s call dash_app/pytests/test_run_broker_simplification.py::test_default_new_scenario_keeps_four_reservations_and_restarts_finished_case
0.51s call dash_app/pytests/test_netcdf.py::test_shared_netcdf_consumers_import_as_dashboard_packages
0.49s call dash_app/pytests/test_agent_services.py::test_same_case_submissions_get_distinct_durable_batch_roots
===================== 552 passed, 8956 warnings in 31.68s ======================
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] junit
Recording test results
[Checks API] No suitable checks publisher found.
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS