R`i` ddlZddlmZddlmZddlmZmZmZm Z ejdk\rddlm Z nddl m Z Gdde Z d ed e e d eefd Zd ed eedeedeed eef dZ dd ed eedeeed eefdZedk(rHddlmZeGddZededddedddedddgZeeeyy)N)Fraction)ceil)castListOptionalSequence))ProtocolcBeZdZUdZdZeeed<dZeed<dZ eed<y)Edgez1Any object that defines an edge (such as Layout).Nsizeratio minimum_size) __name__ __module__ __qualname____doc__rrint__annotations__rr/builddir/build/BUILDROOT/alt-python312-pip-23.3.1-3.el8.x86_64/opt/alt/python312/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.pyr r s&;D(3-E3NL#rr totaledgesreturnc|Dcgc]}|jxsd}}t}d|vrtt||Dcgc]\}\}}|||f}}}}|t d|Dz }|dkr1t||Dcgc]\}}||j xsdn|c}}S||t d|D} |D]2\}}| |j z|j ks#|j ||<n8|d} |D])\}}t| |j z| zd\}} |||<+nd|vrttt|Scc}wcc}}}wcc}}w)aDivide total space to satisfy size, ratio, and minimum_size, constraints. The returned list of integers should add up to total in most cases, unless it is impossible to satisfy all the constraints. For instance, if there are two edges with a minimum size of 20 each and `total` is 30 then the returned list will be greater than total. In practice, this would mean that a Layout object would clip the rows that would overflow the screen height. Args: total (int): Total number of characters. edges (List[Edge]): Edges within total space. Returns: List[int]: Number of characters for each edge. Nc3(K|] }|xsd yw)rNr).0rs r z ratio_resolve..2s.;sKNDDJJO!ONs) rr enumeratezipsumrrdivmodrrr) rrr$sizes _Fractionindexrflexible_edges remainingportion remainders r ratio_resolver0s".3 3UTdii4UE 3I %-(1UE1B'C 'C#|d|DM'C  C#&eU"3"3JD$.2\$##(qtC"3   sKNKK  *KE4#t'8'88#00e  *"! I- t"(4::)= )I1"Mi#e  . E %-H S 5 !!S 4 sEE EratiosmaximumsvaluescFt||Dcgc] \}}|r|nd }}}t|}|s|ddS|}g}|j} t|||D]F\}} } |r6|dkDr1t| t ||z|z } | | | z || z}||z}?| | H|Scc}}w)adDivide an integer total in to parts based on ratios. Args: total (int): The total to divide. ratios (List[int]): A list of integer ratios. maximums (List[int]): List of maximums values for each slot. values (List[int]): List of values Returns: List[int]: A list of integers guaranteed to sum to total. rN)r&r'appendminround) rr1r2r3r_max total_ratiototal_remainingresultr5maximumvalue distributeds r ratio_reducer?Qs7:&(6K L6K{udte"6KF Lf+K ayOF ]]F!$VXv!>w [1_guU_-D{-R'STK 5;& ' { *O 5 K 5M"? MMsBminimumscb|r"t||Dcgc] \}}|r|nd }}}t|}|dkDsJd|}g}|j}|dgt|z} n|} t|| D]:\}} |dkDrt | t ||z|z } n|} || ||z}|| z}<|Scc}}w)a<Distribute an integer total in to parts based on ratios. Args: total (int): The total to divide. ratios (List[int]): A list of integer ratios. minimums (List[int]): List of minimum values for each slot. Returns: List[int]: A list of integers guaranteed to sum to total. rzSum of ratios must be > 0)r&r'r5lenmaxr) rr1r@r_minr9r:distributed_totalr5 _minimumsminimumr>s rratio_distributerHqs:=fh:OP:O;5$4%Q&:OPf+K ?777?O#%  % %FC#f+%  fi0w ?gtEO,Ck,Q'RSK)K{u ;&1 'QsB+__main__) dataclassc>eZdZUdZeeed<dZeed<dZeed<y)ENrrrr) rrrrrrrrrrrrrLrLs%#hsm"s crrLnr)N)sys fractionsrmathrtypingrrrr version_infor pip._vendor.typing_extensionsr rr0r?rHr dataclassesrJrLresolvedprintr'rrrrWs5 11v68:":"Xd^:"S :"z S -1#Y@DS  #YBDH! !S !-5d3i-@! #Y!H z% S1T1a=!D!Q-4A"OPH #h-r