up follow livre
This commit is contained in:
parent
b4b4398bb0
commit
3a7a3849ae
12242 changed files with 2564461 additions and 6914 deletions
96
venv/lib/python3.13/site-packages/fontTools/misc/py23.py
Normal file
96
venv/lib/python3.13/site-packages/fontTools/misc/py23.py
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
"""Python 2/3 compat layer leftovers."""
|
||||
|
||||
import decimal as _decimal
|
||||
import math as _math
|
||||
import warnings
|
||||
from contextlib import redirect_stderr, redirect_stdout
|
||||
from io import BytesIO
|
||||
from io import StringIO as UnicodeIO
|
||||
from types import SimpleNamespace
|
||||
|
||||
from .textTools import Tag, bytechr, byteord, bytesjoin, strjoin, tobytes, tostr
|
||||
|
||||
warnings.warn(
|
||||
"The py23 module has been deprecated and will be removed in a future release. "
|
||||
"Please update your code.",
|
||||
DeprecationWarning,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"basestring",
|
||||
"bytechr",
|
||||
"byteord",
|
||||
"BytesIO",
|
||||
"bytesjoin",
|
||||
"open",
|
||||
"Py23Error",
|
||||
"range",
|
||||
"RecursionError",
|
||||
"round",
|
||||
"SimpleNamespace",
|
||||
"StringIO",
|
||||
"strjoin",
|
||||
"Tag",
|
||||
"tobytes",
|
||||
"tostr",
|
||||
"tounicode",
|
||||
"unichr",
|
||||
"unicode",
|
||||
"UnicodeIO",
|
||||
"xrange",
|
||||
"zip",
|
||||
]
|
||||
|
||||
|
||||
class Py23Error(NotImplementedError):
|
||||
pass
|
||||
|
||||
|
||||
RecursionError = RecursionError
|
||||
StringIO = UnicodeIO
|
||||
|
||||
basestring = str
|
||||
isclose = _math.isclose
|
||||
isfinite = _math.isfinite
|
||||
open = open
|
||||
range = range
|
||||
round = round3 = round
|
||||
unichr = chr
|
||||
unicode = str
|
||||
zip = zip
|
||||
|
||||
tounicode = tostr
|
||||
|
||||
|
||||
def xrange(*args, **kwargs):
|
||||
raise Py23Error("'xrange' is not defined. Use 'range' instead.")
|
||||
|
||||
|
||||
def round2(number, ndigits=None):
|
||||
"""
|
||||
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
|
||||
"""
|
||||
if ndigits is None:
|
||||
ndigits = 0
|
||||
|
||||
if ndigits < 0:
|
||||
exponent = 10 ** (-ndigits)
|
||||
quotient, remainder = divmod(number, exponent)
|
||||
if remainder >= exponent // 2 and number >= 0:
|
||||
quotient += 1
|
||||
return float(quotient * exponent)
|
||||
else:
|
||||
exponent = _decimal.Decimal("10") ** (-ndigits)
|
||||
|
||||
d = _decimal.Decimal.from_float(number).quantize(
|
||||
exponent, rounding=_decimal.ROUND_HALF_UP
|
||||
)
|
||||
|
||||
return float(d)
|
||||
Loading…
Add table
Add a link
Reference in a new issue