404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.149.240.196: ~ $
"""
Various richly-typed exceptions, that also help us deal with string formatting
in python where it's easier.

By putting the formatting in `__str__`, we also avoid paying the cost for
users who silence the exceptions.
"""
from .._utils import set_module

def _unpack_tuple(tup):
    if len(tup) == 1:
        return tup[0]
    else:
        return tup


def _display_as_base(cls):
    """
    A decorator that makes an exception class look like its base.

    We use this to hide subclasses that are implementation details - the user
    should catch the base type, which is what the traceback will show them.

    Classes decorated with this decorator are subject to removal without a
    deprecation warning.
    """
    assert issubclass(cls, Exception)
    cls.__name__ = cls.__base__.__name__
    return cls


class UFuncTypeError(TypeError):
    """ Base class for all ufunc exceptions """
    def __init__(self, ufunc):
        self.ufunc = ufunc


@_display_as_base
class _UFuncNoLoopError(UFuncTypeError):
    """ Thrown when a ufunc loop cannot be found """
    def __init__(self, ufunc, dtypes):
        super().__init__(ufunc)
        self.dtypes = tuple(dtypes)

    def __str__(self):
        return (
            "ufunc {!r} did not contain a loop with signature matching types "
            "{!r} -> {!r}"
        ).format(
            self.ufunc.__name__,
            _unpack_tuple(self.dtypes[:self.ufunc.nin]),
            _unpack_tuple(self.dtypes[self.ufunc.nin:])
        )


@_display_as_base
class _UFuncBinaryResolutionError(_UFuncNoLoopError):
    """ Thrown when a binary resolution fails """
    def __init__(self, ufunc, dtypes):
        super().__init__(ufunc, dtypes)
        assert len(self.dtypes) == 2

    def __str__(self):
        return (
            "ufunc {!r} cannot use operands with types {!r} and {!r}"
        ).format(
            self.ufunc.__name__, *self.dtypes
        )


@_display_as_base
class _UFuncCastingError(UFuncTypeError):
    def __init__(self, ufunc, casting, from_, to):
        super().__init__(ufunc)
        self.casting = casting
        self.from_ = from_
        self.to = to


@_display_as_base
class _UFuncInputCastingError(_UFuncCastingError):
    """ Thrown when a ufunc input cannot be casted """
    def __init__(self, ufunc, casting, from_, to, i):
        super().__init__(ufunc, casting, from_, to)
        self.in_i = i

    def __str__(self):
        # only show the number if more than one input exists
        i_str = "{} ".format(self.in_i) if self.ufunc.nin != 1 else ""
        return (
            "Cannot cast ufunc {!r} input {}from {!r} to {!r} with casting "
            "rule {!r}"
        ).format(
            self.ufunc.__name__, i_str, self.from_, self.to, self.casting
        )


@_display_as_base
class _UFuncOutputCastingError(_UFuncCastingError):
    """ Thrown when a ufunc output cannot be casted """
    def __init__(self, ufunc, casting, from_, to, i):
        super().__init__(ufunc, casting, from_, to)
        self.out_i = i

    def __str__(self):
        # only show the number if more than one output exists
        i_str = "{} ".format(self.out_i) if self.ufunc.nout != 1 else ""
        return (
            "Cannot cast ufunc {!r} output {}from {!r} to {!r} with casting "
            "rule {!r}"
        ).format(
            self.ufunc.__name__, i_str, self.from_, self.to, self.casting
        )


@_display_as_base
class _ArrayMemoryError(MemoryError):
    """ Thrown when an array cannot be allocated"""
    def __init__(self, shape, dtype):
        self.shape = shape
        self.dtype = dtype

    @property
    def _total_size(self):
        num_bytes = self.dtype.itemsize
        for dim in self.shape:
            num_bytes *= dim
        return num_bytes

    @staticmethod
    def _size_to_string(num_bytes):
        """ Convert a number of bytes into a binary size string """

        # https://en.wikipedia.org/wiki/Binary_prefix
        LOG2_STEP = 10
        STEP = 1024
        units = ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB']

        unit_i = max(num_bytes.bit_length() - 1, 1) // LOG2_STEP
        unit_val = 1 << (unit_i * LOG2_STEP)
        n_units = num_bytes / unit_val
        del unit_val

        # ensure we pick a unit that is correct after rounding
        if round(n_units) == STEP:
            unit_i += 1
            n_units /= STEP

        # deal with sizes so large that we don't have units for them
        if unit_i >= len(units):
            new_unit_i = len(units) - 1
            n_units *= 1 << ((unit_i - new_unit_i) * LOG2_STEP)
            unit_i = new_unit_i

        unit_name = units[unit_i]
        # format with a sensible number of digits
        if unit_i == 0:
            # no decimal point on bytes
            return '{:.0f} {}'.format(n_units, unit_name)
        elif round(n_units) < 1000:
            # 3 significant figures, if none are dropped to the left of the .
            return '{:#.3g} {}'.format(n_units, unit_name)
        else:
            # just give all the digits otherwise
            return '{:#.0f} {}'.format(n_units, unit_name)

    def __str__(self):
        size_str = self._size_to_string(self._total_size)
        return (
            "Unable to allocate {} for an array with shape {} and data type {}"
            .format(size_str, self.shape, self.dtype)
        )

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
include Folder 0755
lib Folder 0755
tests Folder 0755
__init__.py File 5.64 KB 0644
__init__.pyi File 126 B 0644
_add_newdocs.py File 204.07 KB 0644
_add_newdocs_scalars.py File 11.82 KB 0644
_asarray.py File 3.79 KB 0644
_asarray.pyi File 1.06 KB 0644
_dtype.py File 10.36 KB 0644
_dtype_ctypes.py File 3.59 KB 0644
_exceptions.py File 5.25 KB 0644
_internal.py File 27.68 KB 0644
_internal.pyi File 1.01 KB 0644
_machar.py File 11.29 KB 0644
_methods.py File 8.41 KB 0644
_multiarray_tests.cpython-311-x86_64-linux-gnu.so File 171.4 KB 0755
_multiarray_umath.cpython-311-x86_64-linux-gnu.so File 6.64 MB 0755
_operand_flag_tests.cpython-311-x86_64-linux-gnu.so File 16.55 KB 0755
_rational_tests.cpython-311-x86_64-linux-gnu.so File 58.29 KB 0755
_simd.cpython-311-x86_64-linux-gnu.so File 2.47 MB 0755
_string_helpers.py File 2.79 KB 0644
_struct_ufunc_tests.cpython-311-x86_64-linux-gnu.so File 16.65 KB 0755
_type_aliases.py File 7.36 KB 0644
_type_aliases.pyi File 404 B 0644
_ufunc_config.py File 13.62 KB 0644
_ufunc_config.pyi File 1.04 KB 0644
_umath_tests.cpython-311-x86_64-linux-gnu.so File 41.01 KB 0755
arrayprint.py File 62.12 KB 0644
arrayprint.pyi File 4.32 KB 0644
cversions.py File 347 B 0644
defchararray.py File 71.89 KB 0644
defchararray.pyi File 9 KB 0644
einsumfunc.py File 50.65 KB 0644
einsumfunc.pyi File 4.75 KB 0644
fromnumeric.py File 125.8 KB 0644
fromnumeric.pyi File 22.96 KB 0644
function_base.py File 19.37 KB 0644
function_base.pyi File 4.61 KB 0644
generate_numpy_api.py File 7.47 KB 0644
getlimits.py File 25.26 KB 0644
getlimits.pyi File 82 B 0644
memmap.py File 11.5 KB 0644
memmap.pyi File 55 B 0644
multiarray.py File 54.78 KB 0644
multiarray.pyi File 24.19 KB 0644
numeric.py File 75.21 KB 0644
numeric.pyi File 13.9 KB 0644
numerictypes.py File 17.67 KB 0644
numerictypes.pyi File 3.19 KB 0644
overrides.py File 6.93 KB 0644
records.py File 36.65 KB 0644
records.pyi File 5.56 KB 0644
setup.py File 47.05 KB 0644
setup_common.py File 16.68 KB 0644
shape_base.py File 29.05 KB 0644
shape_base.pyi File 2.71 KB 0644
umath.py File 1.99 KB 0644
umath_tests.py File 389 B 0644