Spaces:
Sleeping
Sleeping
| """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) | |