Repository navigation
OptimizationMOI: make implicit imports explicit - #1401
ChrisRackauckas-Claude wants to merge 1 commit into
Conversation
Follow the OptimizationNLopt pattern (SciML#1398): import each used name from its owner module and drop the no_implicit_imports broken marker. Keep reinit! so OptimizationMOI.reinit! continues to resolve for callers and tests. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Cursor Agent <noreply@cursor.com> Agent-Harness: Cursor Agent CLI 2026.10.01-14929f9 Agent-Model: auto Agent-Session: local session, transcript at /home/crackauc/sandbox/goals/qa-hygiene/jobs/moi-imports/log.txt on amdci2
Independent review (Devin CLI 3000.11.3, model fusion-claude-opus-5-5-high-sidekick-swe-2-medium): CHANGES, risk medium. Full reviewVERDICT: CHANGES PR: #1401 — "OptimizationMOI: make implicit imports explicit" (head 1a26377). It doesn't link an issue or a tracking issue. Blocking findings
Non-blocking findings
What I ranAll runs used Julia 1.12.7 with
What I did not verify
🤖 Posted by an AI agent — harness: Devin CLI 3000.11.3 (review), Claude Code 2.1.285 (posting) · model: fusion-claude-opus-5-5-high-sidekick-swe-2-medium |
OptimizationMOI now imports MathOptInterface, OptimizationBase, SciMLBase, SciMLStructures, SparseArrays, SymbolicIndexingInterface, Symbolics, and LinearAlgebra by name (
using X: a, b), including the symbols the implementation uses from each owner. The unusedusing Reexportwas dropped. The QA suite no longer marksno_implicit_importsas broken.reinit!is kept as an explicit SciMLBase import (with a stale-ignore entry) soOptimizationMOI.reinit!continues to resolve for callers and tests;MOI,MOIOptimizationCache, andMOIOptimizationNLPCacheremain available.Verification
Commands ran from
lib/OptimizationMOI, withulimit -n 65536and the Julia depot /TMPDIRisolated under this job directory.Baseline QA (before changes):
Output tail:
Quality Assurance | 20 1 21 2m32.3s;Testing OptimizationMOI tests passed.QA after change (same commands): output tail:
Quality Assurance | 21 21 2m34.6s;Testing OptimizationMOI tests passed. The previously brokenno_implicit_importscheck now runs and passes.Core:
Output tail:
Core | 40 2 42 4m49.5s;Testing OptimizationMOI tests passed(the two broken cases are pre-existing@test_brokenreinit cases).Runic:
julia --project=@runic -e 'using Runic; exit(Runic.main(ARGS))' -- --inplace lib/OptimizationMOI/src/OptimizationMOI.jl lib/OptimizationMOI/test/qa/qa.jl— exit 0.typos:
typos lib/OptimizationMOI/src/OptimizationMOI.jl lib/OptimizationMOI/test/qa/qa.jl— exit 0.Scanned
lib/,test/, anddocs/for qualifiedOptimizationMOI.xuses. Kept:MOI(const alias),MOIOptimizationCache,MOIOptimizationNLPCache, andreinit!.Not verified: CI, the full Optimization.jl monorepo suite, and downstream packages.
Follow-ups (not in this PR)
Left untouched on purpose (same as the existing QA ignore lists):
@syncvia-owners access:Threads.@syncis reported as accessingBase.@syncviaBase.Threads; still ignored underall_qualified_accesses_via_owners/all_qualified_accesses_are_public. Fix later by importing@syncfromBase(or equivalent) without changing call sites in this sweep.publicdeclarations belong in MathOptInterface / OptimizationBase / SciMLBase / SciMLStructures / SymbolicUtils, not here):ALMOST_DUAL_INFEASIBLE,ALMOST_INFEASIBLE,ALMOST_LOCALLY_SOLVED,ALMOST_OPTIMAL,AbstractNLPEvaluator,AbstractOptimizationCache,AbstractOptimizer,BarrierIterations,CachingOptimizer,Code,DEFAULT_VERBOSE,DUAL_INFEASIBLE,EqualTo,GetAttributeNotAllowed,GreaterThan,INFEASIBLE,INFEASIBLE_OR_UNBOUNDED,INTERRUPTED,INVALID_MODEL,INVALID_OPTION,ITERATION_LIMIT,Integer,LOCALLY_INFEASIBLE,LOCALLY_SOLVED,LessThan,MAX_SENSE,MEMORY_LIMIT,MIN_SENSE,NLPBlock,NLPBlockData,NLPBoundsPair,NODE_LIMIT,NORM_LIMIT,NUMERICAL_ERROR,OBJECTIVE_LIMIT,OPTIMAL,OPTIMIZE_NOT_CALLED,OTHER_ERROR,OTHER_LIMIT,ObjectiveFunction,ObjectiveSense,ObjectiveValue,OptimizationState,OptimizationStats,OptimizerWithAttributes,RawOptimizerAttribute,ReInitCache,ResultCount,SLOW_PROGRESS,SOLUTION_LIMIT,ScalarAffineFunction,ScalarAffineTerm,ScalarQuadraticFunction,ScalarQuadraticTerm,Silent,SolveTimeSec,TIME_LIMIT,TerminationStatus,TerminationStatusCode,TimeLimitSec,Tunable,UniversalFallback,Utilities,VariableIndex,VariablePrimal,VariablePrimalStart,ZeroOne,__init,__solve,_check_and_convert_maxiters,_check_and_convert_maxtime,_process_verbose_param,add_constraint,add_variables,allowscallback,canonicalize,constraint_expr,empty!,eval_constraint,eval_constraint_jacobian,eval_constraint_jacobian_product,eval_constraint_jacobian_transpose_product,eval_hessian_lagrangian,eval_objective,eval_objective_gradient,features_available,get,get_observed,get_p,get_paramsyms,get_syms,hessian_lagrangian_structure,initialize,instantiate,instantiate_function,is_empty,jacobian_structure,objective_expr,optimize!,requiresconshess,requiresconsjac,requiresgradient,requireshessian,set,supports,supports_incremental_interface,supports_opt_cache_interface,supports_sense.Please ignore this draft until reviewed by @ChrisRackauckas.
Risk assessment
OptimizationMOI.MOI, cache types,OptimizationMOI.reinit!) still resolve. Names that were only incidentally reachable through old blanketusing(e.g. other SciMLBase exports) no longer are; nothing inlib/,test/, ordocs/uses them, but downstream code spelling them that way would break.Cursor Agent CLI 2026.10.01-14929f9 (model: auto); transcript: /home/crackauc/sandbox/goals/qa-hygiene/jobs/moi-imports/log.txt
Made with Cursor