Skip to content

Add ifail enum#4275

Open
chris-ashe wants to merge 2 commits into
mainfrom
add_ifail_enum
Open

Add ifail enum#4275
chris-ashe wants to merge 2 commits into
mainfrom
add_ifail_enum

Conversation

@chris-ashe
Copy link
Copy Markdown
Collaborator

Description

Checklist

I confirm that I have completed the following checks:

  • My changes follow the PROCESS style guide
  • I have justified any large differences in the regression tests caused by this pull request in the comments.
  • I have added new tests where appropriate for the changes I have made.
  • If I have had to change any existing unit or integration tests, I have justified this change in the pull request comments.
  • If I have made documentation changes, I have checked they render correctly.
  • I have added documentation for my change, if appropriate.

@chris-ashe chris-ashe added Convergence Solver or convergence-related problems Refactor labels May 27, 2026
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 53.65854% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 49.45%. Comparing base (4819990) to head (6764908).

Files with missing lines Patch % Lines
process/core/scan.py 9.09% 10 Missing ⚠️
process/core/io/vary_run/tools.py 25.00% 3 Missing ⚠️
process/core/solver/solver_handler.py 25.00% 3 Missing ⚠️
process/core/io/vary_run/config.py 33.33% 2 Missing ⚠️
process/core/final.py 50.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4275      +/-   ##
==========================================
+ Coverage   49.41%   49.45%   +0.03%     
==========================================
  Files         151      151              
  Lines       29282    29304      +22     
==========================================
+ Hits        14471    14493      +22     
  Misses      14811    14811              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@chris-ashe chris-ashe marked this pull request as ready for review June 2, 2026 13:45
@chris-ashe chris-ashe requested a review from a team as a code owner June 2, 2026 13:45
Copilot AI review requested due to automatic review settings June 2, 2026 13:45
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces a typed IntEnum for solver ifail exit conditions (SolverOutputCondition) and updates several runtime and test call sites to use the enum instead of hard-coded numeric values, improving readability and consistency around solver status handling.

Changes:

  • Added SolverOutputCondition enum to centralize solver output (ifail) codes.
  • Replaced ifail == 1 / ifail != 1 checks with SolverOutputCondition.CONVERGED in core, tracking, and vary-run utilities.
  • Updated regression/integration tests to assert against the enum values.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tracking/tracking_data.py Uses SolverOutputCondition.CONVERGED for strict convergence checks when reading MFILEs.
tests/regression/test_process_input_files.py Updates regression assertion to use SolverOutputCondition.CONVERGED.
tests/integration/test_vmcon.py Replaces numeric ifail expectations with enum values.
process/data_structure/numerics.py Adds the new SolverOutputCondition IntEnum definition.
process/core/solver/solver_handler.py Uses enum values in VMCON retry logic and imports the enum.
process/core/scan.py Uses enum values in optimisation/solver status reporting and VMCON error handling.
process/core/io/vary_run/tools.py Uses enum values when determining feasibility/convergence from MFILE contents.
process/core/io/vary_run/config.py Uses enum values to report convergence status and generate README status messages.
process/core/final.py Uses enum value for final feasible/unfeasible output header selection.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 73 to 74
# First solution attempt failed (ifail != 1): supply ifail value
# to next attempt
Comment on lines +6 to +9
class SolverOutputCondition(IntEnum):
"""Enum for the possible conditions that can be returned by the solvers.
This is for the `ifail` condition
"""
Comment on lines +13 to +32
IMPROPER_INPUT = 0
"""Solver failed due to improper input (e.g. invalid parameters, or failure to
satisfy solver preconditions)"""
CONVERGED = 1
"""Solver converged successfully"""

MAX_ITERATIONS = 2
"""Solver failed to converge within the maximum number of iterations"""

MAX_LINE_SEARCHES = 3
"""Line search required 10 function calls without finding a better solution"""

UPHILL_SEARCH = 4
"""Uphill search direction was calculated"""

NO_SOLUTION = 5
"""No feasible solution or bad approximation of Hessian"""

SINGLE_MATRIX_OR_BOUNDS = 6
"""Singular matrix in quadratic subproblem or restriction by artificial bounds"""
@clmould clmould self-assigned this Jun 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Convergence Solver or convergence-related problems Refactor

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants