Console Output
+ 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 775ms
Downloading pillow (6.6MiB)
Downloading meson (1.1MiB)
Downloading plotly (9.5MiB)
Downloading numpy (16.0MiB)
Downloading netcdf4 (9.7MiB)
Downloading kiwisolver (1.4MiB)
Downloading matplotlib (8.4MiB)
Downloading cryptography (4.5MiB)
Downloading pygments (1.2MiB)
Downloading dash (7.6MiB)
Downloading cftime (1.6MiB)
Downloading scipy (33.7MiB)
Downloading fonttools (5.1MiB)
Downloading pydantic-core (2.1MiB)
Downloaded kiwisolver
Downloaded cftime
Downloaded pydantic-core
Downloaded meson
Downloaded pygments
Downloaded cryptography
Downloaded fonttools
Downloaded pillow
Downloaded netcdf4
Downloaded matplotlib
Downloaded dash
Downloaded numpy
Downloaded scipy
Downloaded plotly
Prepared 71 packages in 2.18s
Installed 71 packages in 88ms
+ 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.0
+ pydantic-core==2.50.0
+ 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.7.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.54s call dash_app/pytests/test_plot_tasks.py::test_browser_updates_selection_immediately_and_ignores_stale_results
1.36s call dash_app/pytests/test_agent_services.py::test_mcp_stdio_discovery_and_structured_error_round_trip
1.14s call dash_app/pytests/test_agent_plot_actions.py::test_profile_png_renderer_writes_a_real_png
0.95s call dash_app/pytests/test_plot_case_cache.py::test_background_worker_snapshot_resolves_in_main_process
0.78s call dash_app/pytests/test_plot_tasks.py::test_real_worker_inspects_missing_directory_and_serializes_no_update
0.76s call dash_app/pytests/test_agent_services.py::test_mcp_exposes_closed_world_typed_tools_and_annotations
0.50s call dash_app/pytests/test_agent_services.py::test_same_case_submissions_get_distinct_durable_batch_roots
0.50s call dash_app/pytests/test_run_broker_simplification.py::test_default_new_scenario_keeps_four_reservations_and_restarts_finished_case
0.46s call dash_app/pytests/test_netcdf.py::test_shared_netcdf_consumers_import_as_dashboard_packages
0.43s call dash_app/pytests/test_pdf_contour_plot.py::test_pdf_compare_mode_builds_shared_axis_directory_panels
===================== 552 passed, 8956 warnings in 31.26s ======================