<workflowRun _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>443852</buildingDurationMillis><executingTimeMillis>442823</executingTimeMillis><executorUtilization>1.0</executorUtilization><queuingDurationMillis>9673</queuingDurationMillis><queuingTimeMillis>9676</queuingTimeMillis><subTaskCount>1</subTaskCount><totalDurationMillis>453525</totalDurationMillis><waitingDurationMillis>9670</waitingDurationMillis><waitingTimeMillis>9670</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>676</buildNumber><marked><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/artifact</artifactsUrl><changesUrl>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/changes</changesUrl><displayUrl>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/pipeline-overview</displayUrl><testsUrl>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/testReport</testsUrl></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'><restartEnabled>false</restartEnabled><restartableStage>Update sys_admin Repo</restartableStage><restartableStage>Run Python Test</restartableStage></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'><node _class='org.jenkinsci.plugins.workflow.graph.FlowStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.graph.FlowEndNode'></node></action><action></action><action></action><action></action><building>false</building><displayName>#676</displayName><duration>443852</duration><estimatedDuration>442141</estimatedDuration><fullDisplayName>clubb_BFB_gfortran_test #676</fullDisplayName><id>676</id><keepLog>false</keepLog><number>676</number><queueId>10125</queueId><result>SUCCESS</result><timestamp>1791361750992</timestamp><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/parameters_tunable.py</affectedPath><affectedPath>clubb_jax/src/Input_fields/namelist.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>tests/run_jax_comparison_mutation_test.py</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><affectedPath>clubb_jax/tests/run_driver_extensions_test.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><commitId>56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab</commitId><timestamp>1791322777000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Support reusable JAX driver initialization and runtime batches (#1380)

This is just getting the jax driver to be more in line with fortran. It was lacking features like being able to start/stop at a certain timestep. Certain driver tests were also missing, which got added and included in the driver jenkins test.


* Support reusable JAX driver state and runtime batches

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading
</comment><date>2026-10-06 16:39:37 -0500</date><id>56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab</id><msg>Support reusable JAX driver initialization and runtime batches (#1380)</msg><path><editType>edit</editType><file>LLM_prompts/jenkins_workflow.md</file></path><path><editType>edit</editType><file>tests/run_jax_comparison_mutation_test.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/parameters_tunable.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_driver_extensions_test.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Input_fields/namelist.py</file></path><path><editType>edit</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</affectedPath><affectedPath>clubb_jax/src/Input_fields/input_fields.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py</affectedPath><affectedPath>jenkins_tests/clubb_restart/Jenkinsfile</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>clubb_jax/RESTART_PORT_NOTES.md</affectedPath><commitId>7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824</commitId><timestamp>1791325897000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Port JAX restart initialization and test normal and SILHS continuation (#1381)

This makes jax restarts work. Also adding jax restart test stages in the existing jenkins restart test.

* Port JAX restart initialization and exercise native and SILHS restarts

* Describe restart validation and dependencies for the focused PR

* Describe JAX restart scenarios and their native source equivalents

* Keep JAX restart validation in the shared harness and exercise distinct columns
</comment><date>2026-10-06 17:31:37 -0500</date><id>7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824</id><msg>Port JAX restart initialization and test normal and SILHS continuation (#1381)</msg><path><editType>edit</editType><file>jenkins_tests/clubb_restart/Jenkinsfile</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/RESTART_PORT_NOTES.md</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>add</editType><file>clubb_jax/src/Input_fields/input_fields.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_python_api/tests/clubb_loss_driver_test.py</affectedPath><affectedPath>clubb_python_api/README.md</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>tuner/clubb_loss_driver.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py</affectedPath><affectedPath>clubb_jax/tests/test_loss_driver.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone_loss.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py</affectedPath><affectedPath>clubb_python_api/clubb_python/clubb_standalone_loss.py</affectedPath><affectedPath>clubb_python_api/CMakeLists.txt</affectedPath><affectedPath>tuner/clubb_loss_driver_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</affectedPath><affectedPath>utilities/loss_metrics.py</affectedPath><affectedPath>clubb_jax/TUNER_PORT.md</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_loss_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py</affectedPath><affectedPath>tuner/README.md</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>tuner/case_defaults.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</commitId><timestamp>1791344832000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Port standalone JAX loss evaluation and consistency checks (#1382)

This adds the capability for the jax to run and compute loss vs les data the same as fortran does. Fortran uses the "loss driver" which does this, and has some additional testing code and a clubb_standalone_loss program that supports that, so this was basically just porting more of the high level fortran code to jax and hooking it up with some of the high level python scripts the tuner uses.


* Support reusable JAX driver state and runtime batches

* Add standalone JAX loss evaluation and consistency coverage

* Keep standalone loss CLI coverage separate from tuning

* Remove trailing whitespace from extracted loss CLI tests

* Run JAX loss help checks in the JAX pytest suite

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Document loss test scenarios, native counterparts and JAX extensions

* Keep the native loss executable path intact in the test description

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Reject unsupported loss restarts before opening model resources

* Clean up merged loss launcher state and document early restart rejection

* Move loss frontends and tests out of the tuner package

Call the existing Fortran Python API directly from its installed standalone loss frontend, and keep the JAX standalone frontend with its source port. Share unchanged table formatting, relocate lifecycle and CLI coverage, and update runners and documentation.
</comment><date>2026-10-06 22:47:12 -0500</date><id>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</id><msg>Port standalone JAX loss evaluation and consistency checks (#1382)</msg><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py</file></path><path><editType>edit</editType><file>utilities/loss_metrics.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_loss_driver.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_python_api/README.md</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>edit</editType><file>clubb_python_api/CMakeLists.txt</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_standalone_loss.py</file></path><path><editType>add</editType><file>clubb_jax/TUNER_PORT.md</file></path><path><editType>edit</editType><file>tuner/case_defaults.py</file></path><path><editType>delete</editType><file>tuner/clubb_loss_driver_test.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py</file></path><path><editType>delete</editType><file>tuner/clubb_loss_driver.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_loss_driver.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py</file></path><path><editType>add</editType><file>clubb_python_api/clubb_python/clubb_standalone_loss.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path><path><editType>add</editType><file>clubb_python_api/tests/clubb_loss_driver_test.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>tuner/README.md</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName><id>noreply</id></culprit><inProgress>false</inProgress><nextBuild><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>460485</buildingDurationMillis><executingTimeMillis>458570</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>1</subTaskCount><waitingDurationMillis>9464</waitingDurationMillis><waitingTimeMillis>9464</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>677</buildNumber><marked><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#677</displayName><duration>460485</duration><estimatedDuration>442141</estimatedDuration><fullDisplayName>clubb_BFB_gfortran_test #677</fullDisplayName><id>677</id><keepLog>false</keepLog><number>677</number><queueId>10232</queueId><result>SUCCESS</result><timestamp>1791448150711</timestamp><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/677/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tuner/loss_backend.py</affectedPath><affectedPath>tuner/job_runtime.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_tuner_top_overrides.py</affectedPath><affectedPath>jenkins_tests/clubb_tuner/Jenkinsfile</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_tune_replay_completion.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>dash_app/pytests/test_jax_device.py</affectedPath><affectedPath>dash_app/shared/activity.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_jax_launch_errors.py</affectedPath><affectedPath>tuner/request.py</affectedPath><affectedPath>dash_app/compile_tab/callbacks.py</affectedPath><affectedPath>dash_app/shared/actions.py</affectedPath><affectedPath>dash_app/shared/jax_device.py</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>dash_app/profile_tab/runtime.py</affectedPath><affectedPath>dash_app/tune_tab/runtime.py</affectedPath><affectedPath>tuner/tune_clubb.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_runtime_device_settings.py</affectedPath><affectedPath>tuner/tuning_worker.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>dash_app/run_tab/runtime.py</affectedPath><affectedPath>tuner/status.py</affectedPath><affectedPath>clubb_jax/backends/cuda.py</affectedPath><affectedPath>dash_app/services/models.py</affectedPath><affectedPath>dash_app/pytests/test_agent_services.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_jax_tuning_runtime.py</affectedPath><affectedPath>dash_app/tune_tab/callbacks_runs.py</affectedPath><affectedPath>tuner/tuning_scheduler.py</affectedPath><affectedPath>dash_app/DEVELOPMENT.md</affectedPath><affectedPath>dash_app/pytests/test_run_broker_simplification.py</affectedPath><affectedPath>dash_app/compile_tab/build_selector.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_jax_backend.py</affectedPath><affectedPath>tuner/README.md</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><commitId>9a1b8b23408d3a5abe78ebae7dd1390755fa4fec</commitId><timestamp>1791407526000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Use JAX in tuner (#1383)

This makes the JAX work through the new tuner, same sort of way the fortran does. Probably needs a little more testing but seems to be working properly now.

* Support reusable JAX driver state and runtime batches

* Add standalone JAX loss evaluation and consistency coverage

* Keep standalone loss CLI coverage separate from tuning

* Integrate JAX with managed tuner jobs and add bounded Jenkins coverage

* Remove trailing whitespace from extracted loss CLI tests

* Run JAX loss help checks in the JAX pytest suite

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Document loss test scenarios, native counterparts and JAX extensions

* Keep the native loss executable path intact in the test description

* Explain managed tuning test ownership and native backend contracts

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Refresh JAX tuner integration for merged loss frontends

Use the relocated standalone loss entry point and retain CLI checks only in their shared owner. Give each Jenkins tuning run a separate job directory so repeated builds can succeed.

* Record invalid direct tuner requests as terminal errors

Let the existing request and launcher error handlers report malformed JSON and non-string JAX options instead of crashing during bootstrap before writing job results.

* Preserve winning parameter columns in tuner reruns

Retain request physics overrides while excluding initialized values for tuned parameters. Window and full-case reruns now use the winning candidate values, including multiple columns and grouped override names.

* Use the selected JAX runtime throughout Dash tuning

Persist backend and per-job device settings through native and typed broker requests, saved revisions, continuation and result reruns. Reuse the launcher, shared device controls and rerun override resolver; supervise browser replay processes in the broker.

* Allow run IDs in broker replay completion metadata

Avoid a selector argument collision that killed the replay watcher before recording terminal state. Preserve run IDs and cancellation metadata while reporting completed jobs accurately.

* Keep JAX device setup inside the launcher and backends

Expose a standard-library selection interface and forward per-job device and preallocation settings through the SCM and tuner launch paths. Use the same backend configuration for discovery, provenance, and execution; remove GPU environment handling from Dash and the tuner.

Validate with Dash/shared suites, focused launcher checks, a CPU tuning and replay workflow, and synthetic two-GPU discovery.

* Forward device settings through the existing JAX selection option

Extend the launcher-owned -options grammar with device=UUID and prealloc_gpu_mem=true|false, while retaining xla_prealloc compatibility. Remove the transient device-specific options from SCM and tuner scripts so they forward one opaque -jax value.

Validate saved settings, discovery and replays through the same public interface; verify CPU tuning metrics remain identical.
</comment><date>2026-10-07 16:12:06 -0500</date><id>9a1b8b23408d3a5abe78ebae7dd1390755fa4fec</id><msg>Use JAX in tuner (#1383)</msg><path><editType>edit</editType><file>jenkins_tests/clubb_tuner/Jenkinsfile</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_jax_backend.py</file></path><path><editType>edit</editType><file>tuner/tuning_scheduler.py</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_runtime_device_settings.py</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_jax_launch_errors.py</file></path><path><editType>edit</editType><file>dash_app/compile_tab/callbacks.py</file></path><path><editType>edit</editType><file>dash_app/profile_tab/runtime.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_jax_device.py</file></path><path><editType>edit</editType><file>tuner/status.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_jax_tuning_runtime.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_run_broker_simplification.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_tune_replay_completion.py</file></path><path><editType>edit</editType><file>tuner/README.md</file></path><path><editType>edit</editType><file>tuner/tuning_worker.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>dash_app/compile_tab/build_selector.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>tuner/request.py</file></path><path><editType>edit</editType><file>dash_app/tune_tab/runtime.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>clubb_jax/backends/cuda.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>dash_app/DEVELOPMENT.md</file></path><path><editType>edit</editType><file>dash_app/services/models.py</file></path><path><editType>edit</editType><file>tuner/tune_clubb.py</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>dash_app/shared/activity.py</file></path><path><editType>delete</editType><file>dash_app/shared/jax_device.py</file></path><path><editType>add</editType><file>tuner/loss_backend.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_tuner_top_overrides.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_agent_services.py</file></path><path><editType>edit</editType><file>dash_app/tune_tab/callbacks_runs.py</file></path><path><editType>edit</editType><file>tuner/job_runtime.py</file></path><path><editType>edit</editType><file>dash_app/shared/actions.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/runtime.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>run_scripts/run_tuner.py</affectedPath><affectedPath>dash_app/run_tab/tab.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>dash_app/persistence.py</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>dash_app/run_tab/callbacks_selection.py</affectedPath><affectedPath>utilities/case_json_to_namelist.py</affectedPath><affectedPath>dash_app/run_tab/layout.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_case_editor.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>input/case_setups/case_definitions.json</affectedPath><affectedPath>dash_app/assets/34_case_editor.js</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_case_json_to_namelist.py</affectedPath><affectedPath>dash_app/shared/actions.py</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>dash_app/run_tab/discovery.py</affectedPath><affectedPath>dash_app/assets/11_tab_run_theme.css</affectedPath><affectedPath>dash_app/assets/12_case_editor.css</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>dash_app/profile_tab/runtime.py</affectedPath><affectedPath>tuner/case_defaults.py</affectedPath><affectedPath>input/case_setups/README</affectedPath><affectedPath>dash_app/run_tab/cases.py</affectedPath><commitId>5f8b57f69c01c59fc3c4457178ae85d57894c1d9</commitId><timestamp>1791415324000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JSON case definitions and Dash case editor (#1389)

This is mainly a dash update right now, but it adds json versions of our model files. Basically just 2 new files for that - each json stores default values then one entry for each case with overrides it is not default yet and the current system of defining cases is unchanged.


* Add JSON case definitions and Dash case editor

* Simplify named case lookup and remove queued snapshots

* Remove model validation from JSON case conversion
</comment><date>2026-10-07 18:22:04 -0500</date><id>5f8b57f69c01c59fc3c4457178ae85d57894c1d9</id><msg>Add JSON case definitions and Dash case editor (#1389)</msg><path><editType>edit</editType><file>dash_app/profile_tab/runtime.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_case_editor.py</file></path><path><editType>edit</editType><file>dash_app/assets/11_tab_run_theme.css</file></path><path><editType>edit</editType><file>dash_app/run_tab/tab.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>add</editType><file>dash_app/run_tab/cases.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_case_json_to_namelist.py</file></path><path><editType>add</editType><file>dash_app/assets/12_case_editor.css</file></path><path><editType>edit</editType><file>dash_app/persistence.py</file></path><path><editType>add</editType><file>input/case_setups/case_definitions.json</file></path><path><editType>edit</editType><file>dash_app/run_tab/discovery.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/callbacks_selection.py</file></path><path><editType>add</editType><file>utilities/case_json_to_namelist.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>add</editType><file>dash_app/assets/34_case_editor.js</file></path><path><editType>edit</editType><file>input/case_setups/README</file></path><path><editType>edit</editType><file>run_scripts/run_tuner.py</file></path><path><editType>edit</editType><file>dash_app/shared/actions.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>tuner/case_defaults.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/layout.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/README.md</affectedPath><affectedPath>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_stats_output_consistency.py</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><commitId>166ec211468128c37d8bb4b917ffac337bf80247</commitId><timestamp>1791416548000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Run JAX statistics consistency with an explicit rounding tolerance (#1385)

This adds a jax jenkins stage for the statistics consistency test. This is the test that runs clubb with different batches sizes and averaging methods, e.g
- start by: run once with 60s output intervals all the way through
- test: running with 300s output intervals should give the same stats as manually averaging 5 steps of 60s output
- test: outputing only a "window" of stats data (like from timesteps 100-200 instead of whole run), should produce a window idendical to the 60s full output run
- test: running 16 columns at once should produce the same as running 16 columns in batches of 4 at a time

In fortran these comparisons should be BFB (other than the manually averaging one, which is only close), but in jax, changing things like the batch size can cause optimizations to happen differently, which breaks BFBness and seems to cause differences larger than expected by fortran. For example, the threshold for the manual averaging test in fortran is 1e-12, but for the jax we need 1e-9 even for the batch test. I added a tolerance, `jax_tolerance`, that I left named after jax for now since that is the only current reason that flag exists. 

This difficulty with jax wasn't unexpected - we also have to compile the fortran with `-O0` to get this test working, also to disable optimizations. There just seems to be less control over how jax does that, so I went with a "relax the tolerance for this specific instance" approach.

* Support reusable JAX driver state and runtime batches

* Expose JAX in the strict statistics consistency workflow

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Reference native driver and statistics owners in the JAX test workflow

* Keep full Fortran statistics source paths in the test description

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Keep statistics windows within the capped native case duration

* Allow explicit JAX statistics tolerance for JIT rounding differences
</comment><date>2026-10-07 18:42:28 -0500</date><id>166ec211468128c37d8bb4b917ffac337bf80247</id><msg>Run JAX statistics consistency with an explicit rounding tolerance (#1385)</msg><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/run_timestep_tests.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>jenkins_tests/clubb_timestep/Jenkinsfile</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compilation_cache.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_timestep_sweep.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><commitId>341cac040a0d352fd5a4da6a5938a86d7d06e332</commitId><timestamp>1791417082000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Run timestep sweep tests with JAX (#1384)

Adding a jax run to the timestep test (now renamed timestep sweep because it's more descriptive).

This was really slow on JAX at first - one trick was to add a compilation cache, so that different runs that only use different timesteps didn't need to be recompiled. From my undestanding this is super easy with jax, basically just set `JAX_COMPILATION_CACHE_DIR` to a directory the process can save compiled parts is all it takes, then the compiled parts can live there even after the processes dies, and future ones can reuse it.

* Run existing timestep sweeps with the JAX runner

* Explain the shared native and JAX timestep sweep behavior

* Keep timestep checks aligned with current launcher and CLI conventions

Select CPU explicitly in the bounded JAX stage and resolve optional output roots through the shared owner. Support standard single-dash help, reject ambiguous option abbreviations, and cover opaque runtime forwarding while preserving native defaults and exploratory status.

Validate with 373 shared checks and four eight-step BOMEX/ATEX runs per backend at 60 and 600 seconds.

* Rename the timestep sweep and run shared JAX cases at native defaults

Select the 18 cases shared by the native sweep and JAX/Fortran comparison list. Remove Jenkins timestep and iteration overrides, update stage names and documentation, and preserve the sweep's stability-reporting behavior.

Validate the selection and rename with 374 shared checks before live branch testing.

* Reuse JAX compilations and parallelize case timestep sweeps

Keep a backend-specific persistent cache outside the checkout and preserve explicit cache overrides. Run four isolated case sweeps, prioritize measured expensive cases, and print each completed report as a block while preserving timestep order and first-failure semantics.

Validate cache reuse across fresh processes and cache clearing, scheduling/overlap/interruption contracts, 379 shared checks, and full 90-run cold-cache JAX/native matrices.
</comment><date>2026-10-07 18:51:22 -0500</date><id>341cac040a0d352fd5a4da6a5938a86d7d06e332</id><msg>Run timestep sweep tests with JAX (#1384)</msg><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compilation_cache.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_timestep_sweep.py</file></path><path><editType>delete</editType><file>tests/run_timestep_tests.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>add</editType><file>tests/run_timestep_sweep.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_timestep/Jenkinsfile</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>jenkins_tests/clubb_plots/Jenkinsfile</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><commitId>e92c2f24486a32610935ff4eede3512c67e313ea</commitId><timestamp>1791427833000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Add JAX comparison plots
</comment><date>2026-10-07 21:50:33 -0500</date><id>e92c2f24486a32610935ff4eede3512c67e313ea</id><msg>Add JAX comparison plots</msg><path><editType>edit</editType><file>LLM_prompts/jenkins_workflow.md</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_plots/Jenkinsfile</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><previousBuild><number>676</number><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/</url></previousBuild></nextBuild><previousBuild><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>675</buildNumber><marked><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#675</displayName><duration>422086</duration><estimatedDuration>442141</estimatedDuration><fullDisplayName>clubb_BFB_gfortran_test #675</fullDisplayName><id>675</id><keepLog>false</keepLog><number>675</number><queueId>9909</queueId><result>SUCCESS</result><timestamp>1791275347521</timestamp><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/675/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>utilities/convert_acc_to_omp.bash</affectedPath><commitId>e83e7d62179dd6c710b77216aea55df37600f820</commitId><timestamp>1791236009000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Fix OpenMP GPU host_data conversion
</comment><date>2026-10-05 16:33:29 -0500</date><id>e83e7d62179dd6c710b77216aea55df37600f820</id><msg>Fix OpenMP GPU host_data conversion</msg><path><editType>edit</editType><file>utilities/convert_acc_to_omp.bash</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/backends/cpu.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_backends.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_compile_compiler_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rocm_runtime.py</affectedPath><affectedPath>BUILD.md</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/backends/metal.py</affectedPath><affectedPath>clubb_jax/backends/__init__.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_portable_cholesky.py</affectedPath><affectedPath>clubb_jax/backends/rocm.py</affectedPath><affectedPath>clubb_jax/backends/cuda.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/matrix_operations.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/requirements-rocm.txt</affectedPath><affectedPath>clubb_jax/backends/common.py</affectedPath><affectedPath>compile.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</affectedPath><affectedPath>clubb_jax/runtime_info.py</affectedPath><commitId>da614f85c180af844a77e80ddd4b61a94ce716b9</commitId><timestamp>1791238822000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>AMD/ROCM Support for Jax (#1376)

This does 2 things:

adds support for running on ROCM systems, this is the AMD GPU equivalent of cuda
organize specific-device backend setup files, e.g GPU on nvidia needs cuda jax libraries, Apple needs metal, AMD needs rocm
The only complication was the jax cholesky not working on AMD GPUs. Seems like a bug that's out of our control, so I left en environment flag to switch between the jax linalg call and a custom "portable" one. The portable one still passes the jax_vs_fortran comparison tests.


Commits
---
* Support native AMD ROCm JAX on CachyOS

* Keep ROCm crash fixes and remove Morrison rounding workarounds

* Separate JAX launcher and inspection backend policies
</comment><date>2026-10-05 17:20:22 -0500</date><id>da614f85c180af844a77e80ddd4b61a94ce716b9</id><msg>AMD/ROCM Support for Jax (#1376)</msg><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/backends/cpu.py</file></path><path><editType>edit</editType><file>compile.py</file></path><path><editType>edit</editType><file>BUILD.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_backends.py</file></path><path><editType>add</editType><file>clubb_jax/backends/__init__.py</file></path><path><editType>add</editType><file>clubb_jax/requirements-rocm.txt</file></path><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>add</editType><file>clubb_jax/backends/rocm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_compile_compiler_selection.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_portable_cholesky.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/matrix_operations.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rocm_runtime.py</file></path><path><editType>edit</editType><file>clubb_jax/runtime_info.py</file></path><path><editType>add</editType><file>clubb_jax/backends/metal.py</file></path><path><editType>add</editType><file>clubb_jax/backends/common.py</file></path><path><editType>add</editType><file>clubb_jax/backends/cuda.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</affectedPath><affectedPath>clubb_jax/tests/run_morrison_interface_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</affectedPath><affectedPath>clubb_jax/tests/run_pdf_monte_carlo_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</affectedPath><affectedPath>jenkins_tests/clubb_jax/Jenkinsfile</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</affectedPath><affectedPath>tests/run_pytests.sh</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</affectedPath><affectedPath>clubb_jax/tests/run_standalone_no_bindings_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</affectedPath><commitId>350a98e42b5a193c8471cc67c288bce95e7f7ac0</commitId><timestamp>1791244216000</timestamp><author><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Prune inherited JAX pytests and remove binding dependencies (#1379)

This just prunes lots of outdated and unneccesary pytests. These are all LLM generated and I just never went through them before. Probably still needs cleanup.
</comment><date>2026-10-05 18:50:16 -0500</date><id>350a98e42b5a193c8471cc67c288bce95e7f7ac0</id><msg>Prune inherited JAX pytests and remove binding dependencies (#1379)</msg><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_morrison_interface_test.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</file></path><path><editType>edit</editType><file>tests/run_pytests.sh</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_standalone_no_bindings_test.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_jax/Jenkinsfile</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</file></path><path><editType>edit</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_pdf_monte_carlo_test.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><culprit><absoluteUrl>http://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><inProgress>false</inProgress><nextBuild><number>676</number><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/676/</url></nextBuild><previousBuild><number>674</number><url>http://carson.math.uwm.edu/jenkins/job/clubb_BFB_gfortran_test/674/</url></previousBuild></previousBuild></workflowRun>