+
    LV-jöB  ã                   óŽ   € R t ^ RIt^ RIt^RIHtHt ^ RIHt ^RI	H
t
 ^RIHtHtHtHtHt ^ RIHtHtHt R tR tR	 tRR
 ltR# )a^  HiGHS Linear Optimization Methods

Interface to HiGHS linear optimization software.
https://highs.dev/

.. versionadded:: 1.5.0

References
----------
.. [1] Q. Huangfu and J.A.J. Hall. "Parallelizing the dual revised simplex
           method." Mathematical Programming Computation, 10 (1), 119-142,
           2018. DOI: 10.1007/s12532-017-0130-5

N)ÚOptimizeWarningÚOptimizeResult)Úwarn)Ú_highs_wrapper)Ú	kHighsInfÚHighsDebugLevelÚObjSenseÚHighsModelStatusÚsimplex_constants)Ú	csc_arrayÚvstackÚissparsec                ór  € / RRb\         P                  Rb\         P                  Rb\         P                  Rb\         P                  Rb\         P
                  Rb\         P                  Rb\         P                  Rb\         P                  Rb\         P                  Rb\         P                  Rb\         P                  R	b\         P                  R
b\         P                  Rb\         P                  Rb\         P                  RbpRpVP!                  W4      w  rEV e   \#        V 4      MRpV RV RV R2pWE3# )zCConverts HiGHS status number/message to SciPy status number/messageNz(HiGHS Status z: Ú))é   z%HiGHS did not provide a status code. )r   Ú )é   r   )é    z&Optimization terminated successfully. )é   zTime limit reached. )r   zIteration limit reached. )r   zThe problem is infeasible. )é   zThe problem is unbounded. )r   z(The problem is unbounded or infeasible. )r   z*The HiGHS status code was not recognized. )r	   ÚkNotsetÚ
kLoadErrorÚkModelErrorÚkPresolveErrorÚkSolveErrorÚkPostsolveErrorÚkModelEmptyÚkObjectiveBoundÚkObjectiveTargetÚkOptimalÚ
kTimeLimitÚkIterationLimitÚkInfeasibleÚ
kUnboundedÚkUnboundedOrInfeasibleÚgetÚint)Úhighs_statusÚhighs_messageÚscipy_statuses_messagesÚunrecognizedÚscipy_statusÚscipy_messageÚhstats   &&     Ún/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/scipy/optimize/_linprog_highs.pyÚ_highs_to_scipy_status_messager/   "   sŽ  € ðFØÐ:ðFä× Ñ  'ðFô 	×#Ñ# WðFô 	×$Ñ$ gð	Fô
 	×'Ñ'¨ðFô 	×$Ñ$ gðFô 	×(Ñ(¨'ðFô 	×$Ñ$ gðFô 	×(Ñ(¨'ðFô 	×)Ñ)¨7ðFô 	×!Ñ!Ð#PðFô 	×#Ñ#Ð%@ðFô 	×(Ñ(Ð*JðFô 	×$Ñ$Ð&HðFô 	×#Ñ#Ð%FðFô  	×/Ñ/ð 2Eð!FÐð$ E€Là×#Ñ# LÓ?ñ  €Là!-Ò!9ŒC�Ô¸t€EØ%�Ø% e W¨B¨}¨o¸Qð@€MàÐ&Ð&ó    c                 óü   € \         P                  ! V 4      p\         P                  ! R R7      ;_uu_ 4        \         P                  ! W,          4      \        ,          W&   RRR4       V #   + '       g   i     T # ; i)Úignore©ÚinvalidN)ÚnpÚisinfÚerrstateÚsignr   )ÚxÚinfss   & r.   Ú_replace_infr;   @   sM   € ä�8Š8�A‹;€DÜ	�Š˜X×	&Ö	&Ü—'’'˜!�'Ó"¤9Õ,ˆ‰÷ 
'à€H÷ 
'Ö	&à€Hús   ¶*A*Á*A;	c                 ód  €  W P                  4       ,          #   \         d    Y ,          u # \         dy    \        P                  ! \
        4      pTP                  T,          P                  p\        R T RT  R\        TP                  4       4       RT R2	\        ^R7       Y$,          u # i ; i)zOption z is z, but only values in z are allowed. Using default: Ú.©Ú
stacklevel)ÚlowerÚAttributeErrorÚKeyErrorÚinspectÚ	signatureÚ_linprog_highsÚ
parametersÚdefaultr   ÚsetÚkeysr   )ÚoptionÚ
option_strÚchoicesÚsigÚdefault_strs   &&&  r.   Ú_convert_to_highs_enumrO   H   s¢   € ð$Ø—|‘|“~Õ&Ð&øÜô Ø�ÒÜô $Ü×Ò¤Ó/ˆØ—n‘n ZÕ0×8Ñ8ˆÜˆw�z�l $ v hÐ.CÜ�G—L‘L“NÓ#Ð$Ð$AØˆ}˜Aðô ¨õ	,ð Õ#Ò#ð$ús   ‚ ˜B/­B/¶A6B/Â.B/c                óº
  € V'       d   RV R2p\        V\        ^R7       \        V	RR\        P                  P
                  R\        P                  P                  R\        P                  P                  R\        P                  P                  R	R	/R
7      pV w  ppppppppVP                  P                  4       w  pp\        P                  ! RR7      ;_uu_ 4        \        P                  ! V4      ) \        P                  ,          pR	R	R	4       TpTpTp\        P                  ! XV34      p\        P                  ! VV34      p\!        V4      '       g   \!        V4      '       d   \#        VV34      pM\        P"                  ! VV34      p\%        V4      p/ RVbR\&        P(                  bRVbRVbR\*        P,                  bRVbRVbRVbRVbRVbRVbRVbR\        P.                  P0                  bRVbRVbRV
bp V P3                  V4       \5        V4      p\5        V4      p\5        V4      p\5        V4      pVe   \        P6                  ! V4      ^ 8X  d   \        P8                  ! ^ 4      pM\        P:                  ! V4      p\=        VVP>                  VP@                  VPB                  VVVVVPE                  \        PF                  4      V 4
      p!RV!9   dO   V!R,          p"\        P:                  ! V"\I        V4      R	 4      p#\        P:                  ! V"R	\I        V4       4      p"MR	R	p#p"RV!9   d—   V!R,          p$\        P:                  ! V$R	\I        V4       4      p%\        P:                  ! V$\I        V4      R	 4      p&\        P:                  ! V!R,          R3,          4      p'\        P:                  ! V!R,          R4,          4      p(MR	R	p&p%R	R	p(p'V!PK                  RR	4      p)V!PK                  R R	4      p*\M        V)V*4      w  p+pV!R!,          p,R!T,RT"R"T#R#\O        R$V"R%V%/4      R&\O        R$V#R%V&/4      R'\O        R$V,f   R	MV,V,
          R%V(/4      R(\O        R$V,f   R	MVV,,
          R%V'/4      R)V!PK                  R)4      RT+R*V!R,          \P        PR                  8H  R TR+V!PK                  R,^ 4      ;'       g    V!PK                  R-^ 4      R.V!PK                  R.4      /p-\        PT                  ! V,4      '       dL   VeH   V-P3                  R/V!PK                  R/^ 4      R0V!PK                  R0R14      R2V!PK                  R2R14      /4       V-#   + '       g   i     ELE; i)5a‰  
Solve the following linear programming problem using one of the HiGHS
solvers:

User-facing documentation is in _linprog_doc.py.

Parameters
----------
lp :  _LPProblem
    A ``scipy.optimize._linprog_util._LPProblem`` ``namedtuple``.
solver : "ipm" or "simplex" or None
    Which HiGHS solver to use.  If ``None``, "simplex" will be used.

Options
-------
maxiter : int
    The maximum number of iterations to perform in either phase. For
    ``solver='ipm'``, this does not include the number of crossover
    iterations.  Default is the largest possible value for an ``int``
    on the platform.
disp : bool
    Set to ``True`` if indicators of optimization status are to be printed
    to the console each iteration; default ``False``.
time_limit : float
    The maximum time in seconds allotted to solve the problem; default is
    the largest possible value for a ``double`` on the platform.
presolve : bool
    Presolve attempts to identify trivial infeasibilities,
    identify trivial unboundedness, and simplify the problem before
    sending it to the main solver. It is generally recommended
    to keep the default setting ``True``; set to ``False`` if presolve is
    to be disabled.
dual_feasibility_tolerance : double
    Dual feasibility tolerance.  Default is 1e-07.
    The minimum of this and ``primal_feasibility_tolerance``
    is used for the feasibility tolerance when ``solver='ipm'``.
primal_feasibility_tolerance : double
    Primal feasibility tolerance.  Default is 1e-07.
    The minimum of this and ``dual_feasibility_tolerance``
    is used for the feasibility tolerance when ``solver='ipm'``.
ipm_optimality_tolerance : double
    Optimality tolerance for ``solver='ipm'``.  Default is 1e-08.
    Minimum possible value is 1e-12 and must be smaller than the largest
    possible value for a ``double`` on the platform.
simplex_dual_edge_weight_strategy : str (default: None)
    Strategy for simplex dual edge weights. The default, ``None``,
    automatically selects one of the following.

    ``'dantzig'`` uses Dantzig's original strategy of choosing the most
    negative reduced cost.

    ``'devex'`` uses the strategy described in [15]_.

    ``steepest`` uses the exact steepest edge strategy as described in
    [16]_.

    ``'steepest-devex'`` begins with the exact steepest edge strategy
    until the computation is too costly or inexact and then switches to
    the devex method.

    Currently, using ``None`` always selects ``'steepest-devex'``, but this
    may change as new options become available.

mip_max_nodes : int
    The maximum number of nodes allotted to solve the problem; default is
    the largest possible value for a ``HighsInt`` on the platform.
    Ignored if not using the MIP solver.
unknown_options : dict
    Optional arguments not used by this particular solver. If
    ``unknown_options`` is non-empty, a warning is issued listing all
    unused options.

Returns
-------
sol : dict
    A dictionary consisting of the fields:

        x : 1D array
            The values of the decision variables that minimizes the
            objective function while satisfying the constraints.
        fun : float
            The optimal value of the objective function ``c @ x``.
        slack : 1D array
            The (nominally positive) values of the slack,
            ``b_ub - A_ub @ x``.
        con : 1D array
            The (nominally zero) residuals of the equality constraints,
            ``b_eq - A_eq @ x``.
        success : bool
            ``True`` when the algorithm succeeds in finding an optimal
            solution.
        status : int
            An integer representing the exit status of the algorithm.

            ``0`` : Optimization terminated successfully.

            ``1`` : Iteration or time limit reached.

            ``2`` : Problem appears to be infeasible.

            ``3`` : Problem appears to be unbounded.

            ``4`` : The HiGHS solver ran into a problem.

        message : str
            A string descriptor of the exit status of the algorithm.
        nit : int
            The total number of iterations performed.
            For ``solver='simplex'``, this includes iterations in all
            phases. For ``solver='ipm'``, this does not include
            crossover iterations.
        crossover_nit : int
            The number of primal/dual pushes performed during the
            crossover routine for ``solver='ipm'``.  This is ``0``
            for ``solver='simplex'``.
        ineqlin : OptimizeResult
            Solution and sensitivity information corresponding to the
            inequality constraints, `b_ub`. A dictionary consisting of the
            fields:

            residual : np.ndnarray
                The (nominally positive) values of the slack variables,
                ``b_ub - A_ub @ x``.  This quantity is also commonly
                referred to as "slack".

            marginals : np.ndarray
                The sensitivity (partial derivative) of the objective
                function with respect to the right-hand side of the
                inequality constraints, `b_ub`.

        eqlin : OptimizeResult
            Solution and sensitivity information corresponding to the
            equality constraints, `b_eq`.  A dictionary consisting of the
            fields:

            residual : np.ndarray
                The (nominally zero) residuals of the equality constraints,
                ``b_eq - A_eq @ x``.

            marginals : np.ndarray
                The sensitivity (partial derivative) of the objective
                function with respect to the right-hand side of the
                equality constraints, `b_eq`.

        lower, upper : OptimizeResult
            Solution and sensitivity information corresponding to the
            lower and upper bounds on decision variables, `bounds`.

            residual : np.ndarray
                The (nominally positive) values of the quantity
                ``x - lb`` (lower) or ``ub - x`` (upper).

            marginals : np.ndarray
                The sensitivity (partial derivative) of the objective
                function with respect to the lower and upper
                `bounds`.

        mip_node_count : int
            The number of subproblems or "nodes" solved by the MILP
            solver. Only present when `integrality` is not `None`.

        mip_dual_bound : float
            The MILP solver's final estimate of the lower bound on the
            optimal solution. Only present when `integrality` is not
            `None`.

        mip_gap : float
            The difference between the final objective function value
            and the final dual bound, scaled by the final objective
            function value. Only present when `integrality` is not
            `None`.

Notes
-----
The result fields `ineqlin`, `eqlin`, `lower`, and `upper` all contain
`marginals`, or partial derivatives of the objective function with respect
to the right-hand side of each constraint. These partial derivatives are
also referred to as "Lagrange multipliers", "dual values", and
"shadow prices". The sign convention of `marginals` is opposite that
of Lagrange multipliers produced by many nonlinear solvers.

References
----------
.. [15] Harris, Paula MJ. "Pivot selection methods of the Devex LP code."
        Mathematical programming 5.1 (1973): 1-28.
.. [16] Goldfarb, Donald, and John Ker Reid. "A practicable steepest-edge
        simplex algorithm." Mathematical Programming 12.1 (1977): 361-371.
zUnrecognized options detected: z). These will be passed to HiGHS verbatim.r>   Ú!simplex_dual_edge_weight_strategyÚdantzigÚdevexzsteepest-devexÚsteepestN)rL   r2   r3   ÚpresolveÚsenseÚsolverÚ
time_limitÚhighs_debug_levelÚdual_feasibility_toleranceÚipm_optimality_toleranceÚlog_to_consoleÚmip_max_nodesÚoutput_flagÚprimal_feasibility_toleranceÚsimplex_strategyÚipm_iteration_limitÚsimplex_iteration_limitÚmip_rel_gapÚslackÚlambdaÚ	marg_bndsÚstatusÚmessager9   ÚconÚineqlinÚresidualÚ	marginalsÚeqlinr@   ÚupperÚfunÚsuccessÚnitÚsimplex_nitÚipm_nitÚcrossover_nitÚmip_node_countÚmip_dual_boundg        Úmip_gap)r   ºNNN)r   rx   )+r   r   rO   Ús_cÚSimplexEdgeWeightStrategyÚ!kSimplexEdgeWeightStrategyDantzigÚkSimplexEdgeWeightStrategyDevexÚ kSimplexEdgeWeightStrategyChooseÚ&kSimplexEdgeWeightStrategySteepestEdgeÚTÚcopyr5   r7   Ú	ones_likeÚinfÚconcatenater   r   r   r   Ú	kMinimizer   ÚkHighsDebugLevelNoneÚSimplexStrategyÚkSimplexStrategyDualÚupdater;   ÚsumÚemptyÚarrayr   ÚindptrÚindicesÚdataÚastypeÚuint8Úlenr%   r/   r   r	   r   Úany).ÚlprW   rX   rU   ÚdispÚmaxiterrZ   r_   r[   rQ   rc   r]   Úunknown_optionsrh   Ú&simplex_dual_edge_weight_strategy_enumÚcÚA_ubÚb_ubÚA_eqÚb_eqÚboundsÚx0ÚintegralityÚlbÚubÚlhs_ubÚrhs_ubÚlhs_eqÚrhs_eqÚlhsÚrhsÚAÚoptionsÚresrd   ri   ÚlamdaÚmarg_ineqlinÚ
marg_eqlinÚ
marg_upperÚ
marg_lowerr'   r(   rg   r9   Úsols.   &&&&&&&&&&&&,                                 r.   rE   rE   Y   sL  € ÷J Ø4°_Ð4Eð F=ð =ˆäˆW”o°!Õ4ô .DØ)Ø+ØÜ×.Ñ.×PÑPØÜ×.Ñ.×NÑNØ!Ü×.Ñ.×OÑOØÜ×.Ñ.×UÑUØ�tðô.Ð*ð :<Ñ6€A€tˆT�4˜˜v r¨;à�X‰X�]‰]‹_�F€Bˆä	�Š˜X×	&Ö	&Ü—,’,˜tÓ$Ð$¤R§V¡VÕ+ˆ÷ 
'à€FØ€FØ€FÜ
�.Š.˜& &Ð)Ó
*€CÜ
�.Š.˜& &Ð)Ó
*€Cä�‡~‚~œ $ŸšÜ�D˜$�<Ó ‰ä�IŠI�t˜T�lÓ#ˆÜ�!‹€AðØ�Hðà”×#Ñ#ðð 	�&ðð 	�jð	ð
 	œ_×AÑAðð 	%Ð&@ðð 	#Ð$<ðð 	˜$ðð 	˜ðð 	�tðð 	'Ð(Dðð 	,Ø2ðð 	œC×/Ñ/×DÑDðð 	˜wðð  	" 7ð!ð" 	�{ð#€Gð& ‡N�N�?Ô#ô �sÓ
€CÜ
�sÓ
€CÜ	�bÓ	€BÜ	�bÓ	€BàÒœbŸfšf [Ó1°QÔ6Ü—h’h˜q“k‰ä—h’h˜{Ó+ˆä
˜˜AŸH™H a§i¡i°·±¸¸cØ˜R ×!3Ñ!3´B·H±HÓ!=¸wóH€Cð �#„~Ø�G•ˆÜ�hŠh�uœS ›Y˜ZÐ(Ó)ˆÜ—’˜˜z¤ D£	Ð*Ó+‰à˜4ˆsˆð �3„Ø�H•ˆÜ—x’x  j¤s¨4£yÐ 1Ó2ˆÜ—X’X˜e¤C¨£I JÐ/Ó0ˆ
Ü—X’X˜c +Õ.¨tÕ4Ó5ˆ
Ü—X’X˜c +Õ.¨tÕ4Ó5‰
à#'¨�jˆØ!% t�Jˆ
ð
 —7‘7˜8 TÓ*€LØ—G‘G˜I tÓ,€MÜ4°\Ø5BóD�O€FˆGð 	ˆC�€AØ�Ø�EØ�#Ø”nØ˜5Ø˜Lð&ó ð ”NØ˜3Ø˜Jð$ó ð ”NØ 1¢9™4°!°bµ&Ø˜Jð$ó ð ”NØ 1¢9™4°"°qµ&Ø˜Jð$ó ð �#—'‘'˜%“.Ø�VØ�c˜(•mÔ'7×'@Ñ'@Ñ@Ø�gØ�#—'‘'˜-¨Ó+×DÐD¨s¯w©w°yÀ!Ó/DØ˜CŸG™G OÓ4ð1€Cô6 
‡v‚vˆa‡y‚y�[Ò,Ø�
‰
Ø˜cŸg™gÐ&6¸Ó:Ø˜cŸg™gÐ&6¸Ó<Ø�s—w‘w˜y¨#Ó.ð
ô 	ð €J÷c 
'×	&Ð	&ús   Ã -U	Õ	U	)
NTFNNNNNNN)Ú__doc__rC   Únumpyr5   Ú	_optimizer   r   Úwarningsr   Ú_highspy._highs_wrapperr   Ú_highspy._corer   r   r   r	   r
   ry   Úscipy.sparser   r   r   r/   r;   rO   rE   © r0   r.   Ú<module>r¹      sB   ðñó Û ß 6Ý Ý 3÷õ ÷ 5Ñ 4ò'ò<ò$ö"Mr0   