L ie dZddlZddlZddlZejeZgdZdZdZ e fdZ e fdZ de d e d e fd Zy) z# Various round-to-integer helpers. N)noRoundotRound maybeRound roundFuncnearestMultipleShortestReprc|SNvalues _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/misc/roundTools.pyrrs LcDttj|dzS)aRound float value to nearest integer towards ``+Infinity``. The OpenType spec (in the section on `"normalization" of OpenType Font Variations `_) defines the required method for converting floating point values to fixed-point. In particular it specifies the following rounding strategy: for fractional values of 0.5 and higher, take the next higher integer; for other fractional values, truncate. This function rounds the floating-point value according to this strategy in preparation for conversion to fixed-point. Args: value (float): The input floating-point value. Returns float: The rounded value. ?)intmathfloorr s r rrs* tzz%#+& ''rc<||}t||z |kr|S|Sr )abs)v toleranceroundroundeds r rr0s&AhG'A+&)37::rc~|dkr td|dk(rtS|dk\r|Stjt||S)Nrz#Rounding tolerance must be positiverrr) ValueErrorr functoolspartialrrs r rr5sC1}>??A~C   Z9E JJrr factorreturnc|syt||z |z}d|z}||z }||z}t|t|k7rttt |Sd}||z}||z}t |t |k(r||k7sJt t |D]}||||k7sn|jd}|ksJd||z z}||zS)a"Round to nearest multiple of factor and return shortest decimal representation. This chooses the float that is closer to a multiple of the given factor while having the shortest decimal representation (the least number of fractional decimal digits). For example, given the following: >>> nearestMultipleShortestRepr(-0.61883544921875, 1.0/(1<<14)) '-0.61884' Useful when you need to serialize or print a fixed-point number (or multiples thereof, such as F2Dot14 fractions of 180 degrees in COLRv1 PaintRotate) in a human-readable form. Args: value (value): The value to be rounded and serialized. factor (float): The value which the result is a close multiple of. Returns: str: A compact string representation of the value. z0.0rz%.8f.z%%.%df)rrstrfloatrlenrangefind)r repslohifmtiperiods r rrBs.  EFN #f ,E ,C B B 2w#b'5u&'' C rB rB r7c"g "(* * 3r7^ a5BqE> WWS\F A:: a&j !C ;r)__doc__rrlogging getLogger__name__log__all__rrrrr$r#rr rr r4sg g! (0$+; ' K,u,e,,r