
    <`                     :   d Z ddlZddlZddlZddlmZmZ ddl	m
Z
 ddl	mZ ddlmZ  ej        de           g dZ G d	 d
e          ZeZeZeZej        Zej        ZeZeZexZZeZeZe Z d Z!d Z"ddZ#ddZ$ddZ%e%Z& G d de          Z'ddZ(d Z)ddZ*dS )z"Python 2/3 compat layer leftovers.    N)redirect_stderrredirect_stdout)BytesIO)StringIO)SimpleNamespacezeThe py23 module has been deprecated and will be removed in a future release. Please update your code.)
basestringbytechrbyteordr   	bytesjoinopen	Py23ErrorrangeRecursionErrorroundr   r   strjoinTagtobytestostr	tounicodeunichrunicode	UnicodeIOxrangezipc                       e Zd ZdS )r   N)__name__
__module____qualname__     3lib/python3.11/site-packages/fontTools/misc/py23.pyr   r   +   s        Dr    r   c                 "    t          | g          S N)bytes)ns    r!   r	   r	   =   s    !::r    c                 N    t          | t                    r| nt          |           S r#   )
isinstanceintord)cs    r!   r
   r
   A   s!    1c"".11A.r     c                 F    t          |                              |           S r#   )r   joiniterablejoiners     r!   r   r   E   s    ==h'''r    asciistrictc                 v    t          | t                    r|                     ||          S t          |           S r#   )r'   strencoder$   sencodingerrorss      r!   r   r   I   s3    !S xx&)))Qxxr    c                 \    t          | t                    s|                     ||          S | S r#   )r'   r   decoder6   s      r!   r   r   P   s-    a!! xx&)))r    c                   B    e Zd Zed             Zd Zd Zd Zd Zd Z	dS )r   c                 Z    t          | t                    r|                     d          } | S Nzlatin-1)r'   r$   r;   )blobs    r!   	transcodezTag.transcode[   s*    dE"" 	*;;y))Dr    c                 ^    t                               | |                     |                    S r#   )r4   __new__r@   )selfcontents     r!   rB   zTag.__new__a   s"    {{4!8!8999r    c                 .    |                      |           S r#   )__eq__rC   others     r!   __ne__z
Tag.__ne__d   s    ;;u%%%%r    c                 ^    t                               | |                     |                    S r#   )r4   rF   r@   rG   s     r!   rF   z
Tag.__eq__g   s"    zz$u 5 5666r    c                 6    t                               |           S r#   )r4   __hash__rC   s    r!   rL   zTag.__hash__j   s    ||D!!!r    c                 ,    |                      d          S r>   )r5   rM   s    r!   r   zTag.tobytesm   s    {{9%%%r    N)
r   r   r   staticmethodr@   rB   rI   rF   rL   r   r   r    r!   r   r   Z   sx          \
: : :& & &7 7 7" " "& & & & &r    r   r    c                 Z    t          |                              d | D                       S )Nc              3   4   K   | ]}t          |          V  d S r#   )r   ).0items     r!   	<genexpr>zbytesjoin.<locals>.<genexpr>r   s(      CC$CCCCCCr    )r   r-   r.   s     r!   r   r   q   s+    6??CC(CCCCCCr    c                       t          d          )Nz-'xrange' is not defined. Use 'range' instead.)r   )argskwargss     r!   r   r   u   s    
C
D
DDr    c                 ^   |d}|dk     r?d| z  }t          | |          \  }}||dz  k    r| dk    r|dz  }t          ||z            S t          j        d          | z  }t          j                            |                               |t          j                  }t          |          S )a  
    Implementation of Python 2 built-in round() function.
    Rounds a number to a given precision in decimal digits (default
    0 digits). The result is a floating point number. Values are rounded
    to the closest multiple of 10 to the power minus ndigits; if two
    multiples are equally close, rounding is done away from 0.
    ndigits may be negative.
    See Python 2 documentation:
    https://docs.python.org/2/library/functions.html?highlight=round#round
    Nr   
         10)rounding)divmodfloat_decimalDecimal
from_floatquantizeROUND_HALF_UP)numberndigitsexponentquotient	remainderds         r!   round2rk   y   s     {{7(#$VX66)A%%&A++MHX()))#D))wh7''//88x5 9 
 
 Qxxr    )r+   )r1   r2   )r    r#   )+__doc__decimalr`   math_mathwarnings
contextlibr   r   ior   r   r   typesr   warnDeprecationWarning__all__NotImplementedErrorr   r   r4   r   iscloseisfiniter   r   r   round3chrr   r   r   r	   r
   r   r   r   r   r   r   r   rk   r   r    r!   <module>r|      s   ( (          7 7 7 7 7 7 7 7       $ $ $ $ $ $ ! ! ! ! ! !     4	 	 	 	 	# 	 	 	  

-> 	
	  / / /( ( ( (       	& & & & &# & & &.D D D DE E E     r    