
    kha7                     *   d Z ddlZddlmZ dZdZdZdZd	Z	d
Z
dZdZdZ edd      Zej                   j#                         D  ci c]  \  } }|| 
 c}} ZdddZ edd      Z edddd      ZddZd Zd Z	 ddefdZd Zd Zd dZyc c}} w )!z

@author: Franco Peschiera

    N   )	constantsROWSCOLUMNSRHSBOUNDSBOUNDS_NAMEBOUNDS_NO_NAMERHS_NAMERHS_NO_NAMENlowBoundupBoundLOUPInteger
Continuous)r   r   )piconstant)r   r   varValuedjc                    d}t        d|dd      }i }i }t        dg       }g }g }	g }
g }d}t        |       5 }|D ],  }t        j                  d|      }|D cg c]  }|j	                          }}t        t        d|            }|d   dk(  r n|d   d	k(  r`|d   d
k(  rt        |      dkD  r	|d   |d<   nd|d<   |d   t        t        fv r|d   }|d   t        k(  r>t        |      dk  r0t        |      dkD  r|
j                  |d          t        }t        }|d   t        k(  r@t        |      dk  r2t        |      dkD  r|j                  |d          t        }*t         }2|t        k(  r9|d   }|d   }|t"        k(  r||d<   Ut        dt$        |   |g dt&        ||<   t|t        k(  r|d   }t        |      dkD  r|d   dk(  r|d   dk(  rd}n
|d   dk(  rd}||vrt        dt(        |   |dt*        ||<   d}|t        |      dz
  k  s||   |d   k(  r/|d   j                  t        |t-        ||dz                         n4|||      d   j                  t        |t-        ||dz                         |dz   }|t        |      dz
  k  rk|t        k(  r$|d   |
d   k7  rt/        d      t1        ||       |t        k(  r+t1        ||       |d   |
vs|
j                  |d          |t        k(  r$|d   |d   k7  rt/        d      t3        ||       |t         k(  st3        ||       |d   |vs|j                  |d          / ddd       t        |j5                               }|r|D ]  }d|d<   	 d|d<   t        |j5                               }t        ||||||	      S c c}w # 1 sw Y   dxY w)u  
    adapted from Julian Märte (https://github.com/pchtsp/pysmps)
    returns a dictionary with the contents of the model.
    This dictionary can be used to generate an LpProblem

    :param path: path of mps file
    :param sense: 1 for minimize, -1 for maximize
    :param dropConsNames: if True, do not store the names of constraints
    :return: a dictionary with all the problem data
     r   )namesensestatus
sol_status)r   coefficientsFz |	NENDATA*NAMEr   r      )r   r   r   z'MARKER'z'INTORG'Tz'INTEND')catr   r   )r   valuez@Other RHS name was given even though name was set after RHS tag.zFOther BOUNDS name was given even though name was set after BOUNDS tag.)
parameters	objective	variablesconstraintssos1sos2 )dictopenresplitstriplistfilterlenCORE_FILE_ROW_MODECORE_FILE_COL_MODECORE_FILE_RHS_MODEappendCORE_FILE_RHS_MODE_NAME_GIVENCORE_FILE_RHS_MODE_NO_NAMECORE_FILE_BOUNDS_MODE CORE_FILE_BOUNDS_MODE_NAME_GIVENCORE_FILE_BOUNDS_MODE_NO_NAMEROW_MODE_OBJ	ROW_EQUIVROW_DEFAULT	COL_EQUIVCOL_DEFAULTfloat	ExceptionreadMPSSetRhsreadMPSSetBoundsvalues)pathr   dropConsNamesmoder'   variable_infor*   r(   r+   r,   	rhs_names	bnd_namesintegral_markerreaderlinexrow_typerow_namevar_namejcs                        q/var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pulp/mps_lp.pyreadMPSrY      s\    D2U1CJMK"2.IDDIIO	d Z.v Y	.D88FD)D'+,!AGGI,D,tT*+DAw("Aw#~Aw& t9q=)-aJv&)+Jv& Aw-/ABBAwa..3t9>t9q=$$T!W-8D5Da11c$i1nt9q=$$T!W-;D8D ++77|+(0If%,0 -'1%%'- &	-K) ++7t9q=T!W
%:Aw*,*.aJ.*/=0.2 /%o6X/IT/M(+ #d)a-'Aw)F"33!.188 heDQK6HI
 $DG,^<CC heDQK6HI AA #d)a-' 667im+#Z  dK033dK07)+$$T!W-997im+#`  !}566 }57)+$$T!W-sY	.Z.v {))+,K 	AAfI	 	&--/0M } -Z. Z.s?   !OO	0F-OBO$AO1AO?OO	OOc                     | d   }| d   fdfd}|dk(  r
 |d d        y |dk(  r
 |dd       y |dk(  ry |d	k(  r
 d
d        y t        | d         }|dv r
 ||       y |dk(  r	 |||       y )Nr   r#   c                 $    |   t         |    <   y )N)BOUNDS_EQUIV)
bound_typer%   rU   variable_dicts     rX   set_one_boundz'readMPSSetBounds.<locals>.set_one_bound   s    <AhZ 89    c                 *     d|         d|       y )Nr   r   r-   )	value_lowvalue_upr_   s     rX   set_both_boundsz)readMPSSetBounds.<locals>.set_both_bounds   s    dI&dH%r`   FRBVr   PLMIr      r   FX)rD   )rQ   r^   boundrd   r%   r_   rU   s    `   @@rX   rG   rG      s    GEAwHB& }d#	$1	$	$dD!$q'NEeU#  
$u%
r`   c                     t        | d          || d      d<   t        |       dk(  rt        | d          || d      d<   y )Nr#   r   r         ri   )rD   r5   )rQ   constraintsDicts     rX   rF   rF      sJ    ,1$q'N?ODGZ(
4yA~05d1gQ ,
r`   with_objsensec                 f   | j                         \  }}|dk(  r| j                  }| j                  }|| j                  k7  r|j                  }	| }|	|_        |r&| j	                         \  }
}|_        | j
                  }nN| j                         }|D ci c]  }|j                  |j                   }}| j                  D ci c]  }|| }
}| j                  }|rd}|j                  }|sd}| j                  j                         D cg c]1  \  }}dt        j                  |j                     z   dz   |
|   z   dz   3 }}}|D ci c]  }||j                     i  }}| j                  j                         D ]7  \  }}|
|   }|j                         D ]  \  }}||||j                        |<    9 g }|D ]3  }||j                     }|j                  t        ||   |||||             5 | j                  j                         D cg c]+  \  }}d|
|   |j                  dk7  r|j                   ndfz  - }}}g }|D ]+  }|j                  t        ||j                     ||             - t        |d      5 }|r8|j!                  d	       |j!                  dt        j"                  |    d       n&|j!                  d
t        j$                  |    d       |j!                  d| d       |j!                  d       |j!                  d| d       |j!                  dj'                  |             |j!                  d       |j!                  dj'                  |             |j!                  d       |j!                  dj'                  |             |j!                  d       |j!                  dj'                  |             |j!                  d       d d d        | j)                  ||       |dk(  r|S |||
|j                  fS c c}w c c}w c c}}w c c}w c c}}w # 1 sw Y   MxY w)Nr   MODELOBJ z  
z    RHS       %-8s  % .12e
wz	OBJSENSE
z*SENSE:zNAME          zROWS
z N  r   zCOLUMNS
zRHS
zBOUNDS
zENDATA
)fixObjectiver   r(   r   normalisedNames
_variablesr)   r*   itemsconstLpConstraintTypeToMpsextendwriteMPSColumnLinesr   writeMPSBoundLinesr/   writeLpSensesMPSLpSensesjoinrestoreObjective)	LpProblemfilenamempsSenserenamemiprp   wasNonedummyVarcobjnconstrNamesvarNamesvsvrW   
model_nameobjNamek	row_linescoefsr%   columns_linesr   	rhs_linesbound_linesfs                             rX   writeMPSr      s    "..0GX1}??D9??"IIu	+4+D+D+F(Xty!!  ",./qAFFAFFN//%.%:%:;q!t;;J
iiG
 ))//1Aq 	e))!''22T9KNJTQI  ,..aXaffr!.E.%%++- /1N	 	/HAu).E(166"#A&	// M 
dQT4I	

 ))//1 Aq 	'q>!**/AJJ;q
A	BI  K I-hqvv.>3GHI 
h	 GGL!GGa))(34B78GGgennX67r:;	.B/0		$wir"#		"#		&'			"#	
	$%	
!" w1{	8[$))33 0; / s+   P 
P	6PP
0P!;E P''P0c                    g }|r.|j                   t        j                  k(  r|j                  d       | j	                         D cg c]  \  }}d|||fz   }	}}|j                  |	       ||v r|j                  d||||   fz         |r.|j                   t        j                  k(  r|j                  d       |S c c}}w )Nz0    MARK      'MARKER'                 'INTORG'
z    %-8s  %-8s  % .12e
z0    MARK      'MARKER'                 'INTEND'
)r$   r{   	LpIntegerr9   rz   r}   )
cvvariabler   r   r   r   r   r   r   _tmps
             rX   r~   r~     s    M
x||u.PQBD((*M$!Q&$15MDM 4&$h)HH	
 x||u.PQ Ns   B<c                    |j                   +|j                   |j                  k(  rd| |j                   fz  gS |j                   dk(  r4|j                  dk(  r%|r#|j                  t        j                  k(  rd| z  gS g }|j                   [|j                   dk7  s+|r|j                  t        j                  k(  rb|j                  V|j                  d| |j                   fz         n5|j                  |j                  d| z         n|j                  d| z         |j                   |j                  d| |j                  fz         |S )	Nz FX BND       %-8s  % .12e
r   r   z BV BND       %-8s
z LO BND       %-8s  % .12e
z MI BND       %-8s
z FR BND       %-8s
z UP BND       %-8s  % .12e
)r   r   r$   r{   r   r9   )r   r   r   r   s       rX   r   r   .  s=   $):):h>N>N)N.$8I8I1JJKKQ!LLEOO+&-..K$ !HLLEOO38H8H8P.$8I8I1JJ '5<=5<=#9T8CSCS<TTUr`   c           	      4	   t        |d      }|j                  d| j                  z   dz          | j                  dk(  r|j                  d       n|j                  d       | j	                         \  }}| j
                  j                  }|sd}|j                  | j
                  j                  |d	             |j                  d
       t        | j                  j                               }	|	j                          d}
|	D ]  }| j                  |   }t        |j                               s<| j                         }||z  }|
s%|j                  |dk(  j                  d             d}
|j                  |j                  |              | j                  |       | j                         }| j                          |rM|D cg c]A  }|j!                         r|j"                  t$        j&                  k(  s|j)                         s|C }}n |D cg c]  }|j!                         r| }}|r;|j                  d       |D ]%  }|j                  d|j+                          d       ' |r|D cg c]3  }|j"                  t$        j,                  k(  s!|j)                         r2|5 }}|r6|j                  d       |D ]   }|j                  |j                   d       " |D cg c]  }|j)                         s| }}|r6|j                  d       |D ]   }|j                  |j                   d       " |r| j.                  s| j0                  r|j                  d       | j.                  rk| j.                  j3                         D ]N  }|j                  d       |j5                         D ](  \  }}|j                  d|j                   d|dd       * P | j0                  rk| j0                  j3                         D ]N  }|j                  d       |j5                         D ](  \  }}|j                  d|j                   d|dd       * P |j                  d       |j7                          | j9                  ||       |S c c}w c c}w c c}w c c}w )Nrv   z\* z *\
r   z	Minimize
z	Maximize
rs   F)include_constantzSubject To
g        _dummyTzBounds
rt   ru   z	Generals
z	Binaries
zSOS
zS1:: 
z: z.12gzS2:: 
zEnd
)r/   r   r   r   rw   r(   asCplexLpAffineExpressionr3   r*   keyssortget_dummyVarasCplexLpConstraintcheckLengthVarsr)   checkDuplicateVars
isPositiver$   r{   LpContinuousisBinaryasCplexLpVariabler   r+   r,   rH   rz   closer   )r   r   writeSOSr   
max_lengthr   r   objectiveDummyVarr   ksdummyWrittenr   
constraintr   r   r   vgsosvals                      rX   writeLPr   M  s   XsAGGFY^^#h./!		!*!7!7!9G!!&&GGG55gPU5V GGN	i##((*	+BGGIL 
3**1-
JOO%& --/H("JS==hGH#	
..q12
3 j)				B  "  
LLNquu0B0B'BAJJL 
 
 2A1<<>a22		
 	3AGGa++-.b12	3 MAquu7

aMMGGL! '166("&' ,Aqzz|a,,GGL! '166("&' Y^^y~~	>> ~~,,. 8	"!iik 8FAsGGaxr#d26788 >> ~~,,. 8	"!iik 8FAsGGaxr#d26788 GGGGGIw(9:IQ
 3 N -s1   ARR$R-"RR!R#R9R)F)r   r   r   F)r   r   d   )__doc__r0   r   r   r{   r6   r7   r8   r<   r=   r>   r:   r;   r?   r.   r\   r|   rz   r@   rB   rA   rC   rY   rG   rF   boolr   r~   r   r   )r   r   s   00rX   <module>r      s    
       #0   0  * * zi0#99??ABdaQTB	l+	dQ'AtdtD@F@ MRP4EIP4f$>Ni	 Cs   B