Skip to content

Console Output

+ NODE_VERSION=22.23.3
+ case "$(uname -m)" in
++ uname -m
+ NODE_ARCH=x64
+ NODE_ARCHIVE=node-v22.23.3-linux-x64.tar.xz
+ mkdir -p .clubb-node-tools
+ cd .clubb-node-tools
+ curl --fail --silent --show-error --location https://nodejs.org/dist/v22.23.3/node-v22.23.3-linux-x64.tar.xz -o node-v22.23.3-linux-x64.tar.xz
+ curl --fail --silent --show-error --location https://nodejs.org/dist/v22.23.3/SHASUMS256.txt -o SHASUMS256.txt
+ grep -F '  node-v22.23.3-linux-x64.tar.xz' SHASUMS256.txt
+ sha256sum --check
node-v22.23.3-linux-x64.tar.xz: OK
+ tar --extract --xz --file=node-v22.23.3-linux-x64.tar.xz --strip-components=1
+ cd /home/jenkins/workspace/clubb_branch_dash
+ export PATH=/home/jenkins/workspace/clubb_branch_dash/.clubb-node-tools/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+ PATH=/home/jenkins/workspace/clubb_branch_dash/.clubb-node-tools/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
+ node --version
v22.23.3
+ bash tests/run_pytests.sh -dash -include_generated --junitxml=/home/jenkins/workspace/clubb_branch_dash/output/tests/pytests/dash.xml --durations=10
Installing uv 0.11.32 in /home/jenkins/workspace/clubb_branch_dash/.clubb-python-tools/bin
downloading uv 0.11.32 x86_64-unknown-linux-gnu
installing to /home/jenkins/workspace/clubb_branch_dash/.clubb-python-tools/bin
  uv
  uvx
everything's installed!
Creating CLUBB virtualenv: /home/jenkins/workspace/clubb_branch_dash/.venv-python
Using CPython 3.12.3 interpreter at: /usr/bin/python3.12
Creating virtual environment at: .venv-python
Activate with: source .venv-python/bin/activate
Installing dash requirements into /home/jenkins/workspace/clubb_branch_dash/.venv-python
Using Python 3.12.3 environment at: .venv-python
Resolved 71 packages in 719ms
Downloading scipy (33.7MiB)
Downloading pydantic-core (2.0MiB)
Downloading dash (7.6MiB)
Downloading netcdf4 (9.7MiB)
Downloading cryptography (4.5MiB)
Downloading fonttools (5.1MiB)
Downloading matplotlib (8.4MiB)
Downloading cftime (1.6MiB)
Downloading plotly (9.5MiB)
Downloading pygments (1.2MiB)
Downloading meson (1.1MiB)
Downloading kiwisolver (1.4MiB)
Downloading numpy (15.9MiB)
Downloading pillow (6.6MiB)
 Downloaded kiwisolver
 Downloaded cftime
 Downloaded pydantic-core
 Downloaded meson
 Downloaded pygments
 Downloaded cryptography
 Downloaded fonttools
 Downloaded pillow
 Downloaded dash
 Downloaded netcdf4
 Downloaded matplotlib
 Downloaded numpy
 Downloaded plotly
 Downloaded scipy
Prepared 71 packages in 1.80s
Installed 71 packages in 51ms
 + 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.0
 + 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.26.0
 + nest-asyncio==1.6.0
 + netcdf4==1.7.4
 + ninja==1.13.2
 + numpy==2.5.3
 + packaging==26.3
 + pillow==12.3.0
 + plotly==6.9.0
 + pluggy==1.6.0
 + psutil==7.2.2
 + pycparser==3.0
 + pydantic==2.13.5
 + pydantic-core==2.46.5
 + 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_branch_dash/.venv-python/bin/python
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0
rootdir: /home/jenkins/workspace/clubb_branch_dash
configfile: pytest.ini
plugins: dash-3.4.0, anyio-4.15.1
collected 526 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%]
................                                                         [ 15%]
dash_app/pytests/test_agent_tab_registry.py ......                       [ 16%]
dash_app/pytests/test_agent_tuning.py ............                       [ 18%]
dash_app/pytests/test_analysis.py .....                                  [ 19%]
dash_app/pytests/test_app_startup.py ..........                          [ 21%]
dash_app/pytests/test_atlas.py .                                         [ 21%]
dash_app/pytests/test_bivariate_heatmap.py ..                            [ 21%]
dash_app/pytests/test_callbacks_runs.py ............                     [ 24%]
dash_app/pytests/test_compile_tab_build_status.py .................      [ 27%]
dash_app/pytests/test_custom_plot.py ........                            [ 28%]
dash_app/pytests/test_dashboard_activity_labels.py .                     [ 29%]
dash_app/pytests/test_dashboard_lifecycle.py ...                         [ 29%]
dash_app/pytests/test_dashboard_manager.py ......                        [ 30%]
dash_app/pytests/test_equations.py ...                                   [ 31%]
dash_app/pytests/test_fill_holes_viewer.py ....                          [ 32%]
dash_app/pytests/test_jax_device.py ............................         [ 37%]
dash_app/pytests/test_mcp_endpoint.py ...                                [ 38%]
dash_app/pytests/test_misc_tab.py ...                                    [ 38%]
dash_app/pytests/test_netcdf.py ......                                   [ 39%]
dash_app/pytests/test_output_directory_picker.py ......                  [ 40%]
dash_app/pytests/test_output_discovery.py .......                        [ 42%]
dash_app/pytests/test_pane_resize.py ...                                 [ 42%]
dash_app/pytests/test_param_disclosures.py ........                      [ 44%]
dash_app/pytests/test_pdf_contour_plot.py ......................         [ 48%]
dash_app/pytests/test_performance_polling.py .......                     [ 49%]
dash_app/pytests/test_persistence.py ...                                 [ 50%]
dash_app/pytests/test_plot_case_cache.py ..........                      [ 52%]
dash_app/pytests/test_plot_extraction.py ............................... [ 58%]
                                                                         [ 58%]
dash_app/pytests/test_plot_grid_updates.py .....                         [ 59%]
dash_app/pytests/test_plot_help.py ...                                   [ 59%]
dash_app/pytests/test_plot_tasks.py ..........                           [ 61%]
dash_app/pytests/test_plot_transitions.py .............                  [ 64%]
dash_app/pytests/test_profile_tab.py ..............................      [ 69%]
dash_app/pytests/test_profiles.py ......                                 [ 70%]
dash_app/pytests/test_pyplotgen_export.py ......                         [ 72%]
dash_app/pytests/test_pyplotgen_output_handler.py .                      [ 72%]
dash_app/pytests/test_reports_tab.py .......                             [ 73%]
dash_app/pytests/test_run_broker_simplification.py ..................... [ 77%]
                                                                         [ 77%]
dash_app/pytests/test_run_callbacks_settings.py ..............           [ 80%]
dash_app/pytests/test_run_runtime.py ..........                          [ 82%]
dash_app/pytests/test_runtime.py ..                                      [ 82%]
dash_app/pytests/test_runtime_logging.py .....                           [ 83%]
dash_app/pytests/test_runtime_loss_batches.py .                          [ 83%]
dash_app/pytests/test_sam_3d_reference.py .                              [ 83%]
dash_app/pytests/test_scm_override.py ......                             [ 84%]
dash_app/pytests/test_selected_build.py .....................            [ 88%]
dash_app/pytests/test_state_persistence.py .............                 [ 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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_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_branch_dash/output/tests/pytests/dash.xml -
============================= slowest 10 durations =============================
2.92s call     dash_app/pytests/test_agent_plot_actions.py::test_profile_png_renderer_writes_a_real_png
1.53s call     dash_app/pytests/test_plot_tasks.py::test_browser_updates_selection_immediately_and_ignores_stale_results
0.86s call     dash_app/pytests/test_plot_case_cache.py::test_background_worker_snapshot_resolves_in_main_process
0.71s call     dash_app/pytests/test_plot_tasks.py::test_real_worker_inspects_missing_directory_and_serializes_no_update
0.70s call     dash_app/pytests/test_agent_services.py::test_mcp_exposes_closed_world_typed_tools_and_annotations
0.55s call     dash_app/pytests/test_netcdf.py::test_shared_netcdf_consumers_import_as_dashboard_packages
0.45s call     dash_app/pytests/test_fill_holes_viewer.py::test_profile_field_scale_defaults_to_log_and_can_be_linear
0.41s call     dash_app/pytests/test_pdf_contour_plot.py::test_pdf_compare_mode_builds_shared_axis_directory_panels
0.33s call     dash_app/pytests/test_run_broker_simplification.py::test_default_new_scenario_keeps_four_reservations_and_restarts_finished_case
0.32s call     dash_app/pytests/test_pdf_contour_plot.py::test_three_gaussian_plot_detects_component_and_uses_absolute_weights
===================== 526 passed, 8956 warnings in 22.69s ======================