You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
"""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)
 |