§
    $�’jp-  ã                   óV   — d dl mZ d dlZd dlmc mc mZ d dl	m
Z d dlmZ d„ Zd„ ZdS )é    )ÚwarnN)Ú_highs_options)ÚOptimizeWarningc
                 óš  — | j         }
|j         }|duot          j        |¦  «        dk    }dddœ}t          j        ¦   «         }|
|_        ||_        |
|j        _        ||j        _        t          j        j	        |j        _
        | |_        ||_        ||_        ||_        ||_        ||j        _        ||j        _        ||j        _        |j         dk    rd„ |D ¦   «         |_        t          j        ¦   «         }t          j        ¦   «         }t-          j        ¦   «         }|	                     ¦   «         D �]3\  }}|�|dv rŒ|                     |¦  «        }d|k    r*t5          dt7          ||i¦  «        › �t8          d¬	¦  «         ŒR|d
v r;t;          |t<          ¦  «        r|rdnd}nt5          d|› d|› d�t8          d¬	¦  «         Œ‘t          j        |¦  «        }tA          |||¦  «        \  }}|t          j        j!        k    r5t;          |t<          ¦  «        s t5          d|› d|› d�t8          d¬	¦  «         �Œ|dk    rt5          |t8          d¬	¦  «         �Œ"tE          |||¦  «         �Œ5| #                    |¦  «        }|t          j$        j%        k    rQ| &                    | '                    ¦   «         | (                    | '                    ¦   «         ¦  «        dœ¦  «         |S | )                    |¦  «        }|t          j$        j%        k    r>t          j*        j+        }| &                    || (                    |¦  «        dœ¦  «         |S | ,                    ¦   «         }|t          j$        j%        k    rQ| &                    | '                    ¦   «         | (                    | '                    ¦   «         ¦  «        dœ¦  «         |S | '                    ¦   «         }| -                    ¦   «         }|t          j*        j.        t          j*        j/        t          j*        j0        t          j*        j1        fvpH|t          j*        j/        t          j*        j0        t          j*        j1        hv o|j2        t          j3        k    }|t          j*        j.        k    }|r|s|s_|r]| &                    |d| (                    |¦  «        › d| 4                    |j5        ¦  «        › �|j6        |j7        |j8        dœ¦  «         |S | 9                    ¦   «         }| :                    ¦   «         } t          j;        d|
f¦  «        }!| j<        }"|j=        }#t}          |
¦  «        D ]S}$|"|$         t          j?        j@        k    r|#|$         |!d|$f<   Œ+|"|$         t          j?        jA        k    r|#|$         |!d|$f<   ŒT| &                    || (                    |¦  «        t          jB        |jC        ¦  «        ||jD        z
  t          jB        |jE        ¦  «        |!|j2        |j6        |j7        |j8        dœ
¦  «         |r(| &                    |jF        |jG        |jH        dœ¦  «         |S )aÔ
  Solve linear programs using HiGHS [1]_.

    Assume problems of the form:

        MIN c.T @ x
        s.t. lhs <= A @ x <= rhs
             lb <= x <= ub

    Parameters
    ----------
    c : 1-D array, (n,)
        Array of objective value coefficients.
    astart : 1-D array
        CSC format index array.
    aindex : 1-D array
        CSC format index array.
    avalue : 1-D array
        Data array of the matrix.
    lhs : 1-D array (or None), (m,)
        Array of left hand side values of the inequality constraints.
        If ``lhs=None``, then an array of ``-inf`` is assumed.
    rhs : 1-D array, (m,)
        Array of right hand side values of the inequality constraints.
    lb : 1-D array (or None), (n,)
        Lower bounds on solution variables x.  If ``lb=None``, then an
        array of all `0` is assumed.
    ub : 1-D array (or None), (n,)
        Upper bounds on solution variables x.  If ``ub=None``, then an
        array of ``inf`` is assumed.
    options : dict
        A dictionary of solver options

    Returns
    -------
    res : dict

        If model_status is one of kOptimal,
        kObjectiveBound, kTimeLimit,
        kIterationLimit:

            - ``status`` : HighsModelStatus
                Model status code.

            - ``message`` : str
                Message corresponding to model status code.

            - ``x`` : list
                Solution variables.

            - ``slack`` : list
                Slack variables.

            - ``lambda`` : list
                Lagrange multipliers associated with the constraints
                Ax = b.

            - ``s`` : list
                Lagrange multipliers associated with the constraints
                x >= 0.

            - ``fun``
                Final objective value.

            - ``simplex_nit`` : int
                Number of iterations accomplished by the simplex
                solver.

            - ``ipm_nit`` : int
                Number of iterations accomplished by the interior-
                point solver.

        If model_status is not one of the above:

            - ``status`` : HighsModelStatus
                Model status code.

            - ``message`` : str
                Message corresponding to model status code.

    Notes
    -----
    If ``options['write_solution_to_file']`` is ``True`` but
    ``options['solution_file']`` is unset or ``''``, then the solution
    will be printed to ``stdout``.

    If any iteration limit is reached, no solution will be
    available.

    ``OptimizeWarning`` will be raised if any option value set by
    the user is found to be incorrect.

    References
    ----------
    .. [1] https://highs.dev/
    .. [2] https://www.maths.ed.ac.uk/hall/HiGHS/HighsOptions.html
    Nr   )ÚxÚfunc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS © )Ú_hÚHighsVarType)Ú.0Úis     úTC:\Projects\DSCons\.venv\Lib\site-packages\scipy\optimize\_highspy\_highs_wrapper.pyú
<listcomp>z"_highs_wrapper.<locals>.<listcomp>„   s"   € ÐCÐCÐC°!�2œ?¨1Ñ-Ô-ÐCÐCÐCó    )ÚsenseéÿÿÿÿzUnrecognized options detected: é   )Ú
stacklevel)ÚpresolveÚparallelÚonÚoffz	Option f"z" is "z4", but only True or False is allowed. Using default.)ÚstatusÚmessagezmodel_status is z; primal_status is )r   r   Úsimplex_nitÚipm_nitÚcrossover_nité   )
r   r   r   ÚslackÚlambdaÚ	marg_bndsr   r   r   r   )Úmip_node_countÚmip_dual_boundÚmip_gap)IÚsizeÚnpÚsumr   ÚHighsLpÚnum_col_Únum_row_Ú	a_matrix_ÚMatrixFormatÚkColwiseÚformat_Ú	col_cost_Ú
col_lower_Ú
col_upper_Ú
row_lower_Ú
row_upper_Ústart_Úindex_Úvalue_Úintegrality_Ú_HighsÚHighsOptionsÚhoptÚHighsOptionsManagerÚitemsÚget_option_typer   Údictr   Ú
isinstanceÚboolÚHighsOptionTypeÚcheck_optionÚkBoolÚsetattrÚpassOptionsÚHighsStatusÚkErrorÚupdateÚgetModelStatusÚmodelStatusToStringÚ	passModelÚHighsModelStatusÚkModelErrorÚrunÚgetInfoÚkOptimalÚ
kTimeLimitÚkIterationLimitÚkSolutionLimitÚobjective_function_valueÚ	kHighsInfÚsolutionStatusToStringÚprimal_solution_statusÚsimplex_iteration_countÚipm_iteration_countÚcrossover_iteration_countÚgetSolutionÚgetBasisÚzerosÚ
col_statusÚcol_dualÚrangeÚHighsBasisStatusÚkLowerÚkUpperÚarrayÚ	col_valueÚ	row_valueÚrow_dualr#   r$   r%   )%ÚcÚindptrÚindicesÚdataÚlhsÚrhsÚlbÚubÚintegralityÚoptionsÚnumcolÚnumrowÚisMipÚresÚlpÚhighsÚhighs_optionsÚhoptmanagerÚkeyÚvalÚopt_typer   ÚmsgÚ
opt_statusÚinit_statusÚerr_model_statusÚ
run_statusÚmodel_statusÚinfoÚmipFailConditionÚlpFailConditionÚsolutionÚbasisr"   Úbasis_col_statusÚsolution_col_dualÚiis%                                        r   Ú_highs_wrapperrŒ   	   sÜ  € ðB ŒV€FØŒX€FØ˜tÐ#Ð?­¬¨{Ñ(;Ô(;¸aÒ(?€Eð Øðð €Cõ 
Œ‰Œ€BØ€B„KØ€B„KØ"€B„LÔØ"€B„LÔÝœ?Ô3€B„LÔØ€B„LØ€B„MØ€B„MØ€B„MØ€B„MØ €B„LÔØ!€B„LÔØ€B„LÔØÔ˜!ÒÐØCÐC°{ÐCÑCÔCˆŒõ ŒI‰KŒK€EÝ”OÑ%Ô%€MÝÔ*Ñ,Ô,€KØ—M’M‘O”Oð +1ñ +1‰ˆˆSàˆ;˜# Ð+Ð+Øð ×.Ò.¨sÑ3Ô3ˆØ�Š>ˆ>ÝØDµ$¸¸S°zÑ2BÔ2BÐDÐDÝØðñ ô ð ð
 àÐ.Ð.Ð.å˜c¥4Ñ(Ô(ð 	Ø"%Ð0˜$˜$¨5�C�Cåð3 Cð 3ð 3¨sð 3ð 3ð 3å'Ø#$ð	ñ ô ð ð ÝÔ)¨(Ñ3Ô3ˆHÝ& u¨c°3Ñ7Ô7‰KˆF�CØ�2Ô-Ô3Ò3Ð3Ý! #¥tÑ,Ô,ð Ýð3 Cð 3ð 3¨sð 3ð 3ð 3å'Ø#$ð	ñ ô ð ñ ð ˜Š{ˆ{Ý�S�/°aÐ8Ñ8Ô8Ð8Ñ8å˜ s¨CÑ0Ô0Ð0Ñ0à×"Ò" =Ñ1Ô1€JØ•R”^Ô*Ò*Ð*Ø�
Š
à×.Ò.Ñ0Ô0Ø ×4Ò4°U×5IÒ5IÑ5KÔ5KÑLÔLðð ñ	
ô 	
ð 	
ð ˆ
à—/’/ "Ñ%Ô%€KØ•b”nÔ+Ò+Ð+åÔ.Ô:ÐØ�
Š
à*Ø ×4Ò4Ð5EÑFÔFðð ñ	
ô 	
ð 	
ð ˆ
ð —’‘”€JØ•R”^Ô*Ò*Ð*Ø�
Š
à×.Ò.Ñ0Ô0Ø ×4Ò4°U×5IÒ5IÑ5KÔ5KÑLÔLðð ñ	
ô 	
ð 	
ð ˆ
ð ×'Ò'Ñ)Ô)€Lð �=Š=‰?Œ?€Dð $Ý
ÔÔ$Ý
ÔÔ&Ý
ÔÔ+Ý
ÔÔ*ð	,ð ð ð 	åÔÔ*ÝÔÔ/ÝÔÔ.ð
ð	
ð 	<ð Ô*­b¬lÒ:ð ð #¥bÔ&9Ô&BÒB€OØð Ð"ð ¨Eð °oð Ø�
Š
à&ðOØ×,Ò,¨\Ñ:Ô:ðOð Oð ×/Ò/°Ô0KÑLÔLðOð Oð  $Ô;ØÔ3Ø!%Ô!?ð	ð 	ñ	
ô 	
ð 	
ð ˆ
ð × Ò Ñ"Ô"€HØ�NŠNÑÔ€Eõ ”˜!˜V˜Ñ%Ô%€IØÔ'ÐØ Ô)ÐÝ�F‰mŒmð 5ð 5ˆØ˜BÔ¥2Ô#6Ô#=Ò=Ð=Ø0°Ô4ˆI�a˜�eÑÐØ˜bÔ!¥RÔ%8Ô%?Ò?Ð?Ø0°Ô4ˆI�a˜�eÑøà‡J‚Jà"Ø×0Ò0°Ñ>Ô>å”˜(Ô,Ñ-Ô-ð ˜8Ô-Ñ-å”h˜xÔ0Ñ1Ô1Ø"ØÔ0ØÔ7ØÔ/Ø!Ô;ð	
ð 	
ñô ð ð& ð 
Ø�
Š
à"&Ô"5Ø"&Ô"5Øœ<ðð ñ	
ô 	
ð 	
ð €Jr   c                 ó–  — |                       |¦  «        \  }}t          j        ¦   «         }|t          j        j        k    rdS t          j        j        t          t          j        j	        t          t          j        j        t          t          j        j        t          i}|                     |d ¦  «        }|t          u r|                     ||¦  «        sdS |t          u r|                     ||¦  «        sdS |t          u r|                     ||¦  «        sdS |€dS |                      |¦  «        \  }}|t          j        j        k    rdS dS )N)r   zInvalid option name.)r   zInvalid option value.)é   zUnknown option type.)é   z Failed to validate option value.)r   zCheck option succeeded.)ÚgetOptionTyper;   r<   r   rG   ÚkOkrB   rD   rA   ÚkIntÚintÚkDoubleÚfloatÚkStringÚstrÚgetÚcheck_string_optionÚcheck_double_optionÚcheck_int_optionÚgetOptionValue)	Ú
highs_instÚoptionÚvaluer   Úoption_typerz   Úvalid_typesÚexpected_typeÚcurrent_values	            r   rC   rC   2  sC  € Ø$×2Ò2°6Ñ:Ô:Ñ€FˆKÝÔ*Ñ,Ô,€Kà•”Ô#Ò#Ð#Ø)Ð)õ 	ÔÔ ¥$Ý
ÔÔ¥Ý
ÔÔ"¥EÝ
ÔÔ"¥Cð	€Kð  —O’O K°Ñ6Ô6€Mà�ÐÐØ×.Ò.¨v°uÑ=Ô=ð 	/Ø.Ð.Ø�ÐÐØ×.Ò.¨v°uÑ=Ô=ð 	/Ø.Ð.Ø�ÐÐØ×+Ò+¨F°EÑ:Ô:ð 	/Ø.Ð.àÐØ(Ð(à&×5Ò5°fÑ=Ô=Ñ€FˆMØ•”Ô#Ò#Ð#Ø4Ð4Ø'Ð'r   )Úwarningsr   Únumpyr'   Úscipy.optimize._highspy._coreÚoptimizeÚ_highspyÚ_corer   Úscipy.optimize._highspyr   r;   Úscipy.optimizer   rŒ   rC   r
   r   r   ú<module>r¬      s—   ðØ Ð Ð Ð Ð Ð à Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø :Ð :Ð :Ð :Ð :Ð :Ø *Ð *Ð *Ð *Ð *Ð *ðfð fð fðR	 (ð  (ð  (ð  (ð  (r   