| """ |
| Exceptions and Warnings (:mod:`numpy.exceptions`) |
| ================================================= |
| |
| General exceptions used by NumPy. Note that some exceptions may be module |
| specific, such as linear algebra errors. |
| |
| .. versionadded:: NumPy 1.25 |
| |
| The exceptions module is new in NumPy 1.25. Older exceptions remain |
| available through the main NumPy namespace for compatibility. |
| |
| .. currentmodule:: numpy.exceptions |
| |
| Warnings |
| -------- |
| .. autosummary:: |
| :toctree: generated/ |
| |
| ComplexWarning Given when converting complex to real. |
| VisibleDeprecationWarning Same as a DeprecationWarning, but more visible. |
| |
| Exceptions |
| ---------- |
| .. autosummary:: |
| :toctree: generated/ |
| |
| AxisError Given when an axis was invalid. |
| DTypePromotionError Given when no common dtype could be found. |
| TooHardError Error specific to `numpy.shares_memory`. |
| |
| """ |
| |
| |
| __all__ = [ |
| "ComplexWarning", "VisibleDeprecationWarning", "ModuleDeprecationWarning", |
| "TooHardError", "AxisError", "DTypePromotionError"] |
| |
| |
| # Disallow reloading this module so as to preserve the identities of the |
| # classes defined here. |
| if '_is_loaded' in globals(): |
| raise RuntimeError('Reloading numpy._globals is not allowed') |
| _is_loaded = True |
| |
| |
| class ComplexWarning(RuntimeWarning): |
| """ |
| The warning raised when casting a complex dtype to a real dtype. |
| |
| As implemented, casting a complex number to a real discards its imaginary |
| part, but this behavior may not be what the user actually wants. |
| |
| """ |
| pass |
| |
| |
| class ModuleDeprecationWarning(DeprecationWarning): |
| """Module deprecation warning. |
| |
| .. warning:: |
| |
| This warning should not be used, since nose testing is not relevant |
| anymore. |
| |
| The nose tester turns ordinary Deprecation warnings into test failures. |
| That makes it hard to deprecate whole modules, because they get |
| imported by default. So this is a special Deprecation warning that the |
| nose tester will let pass without making tests fail. |
| |
| """ |
| |
| |
| class VisibleDeprecationWarning(UserWarning): |
| """Visible deprecation warning. |
| |
| By default, python will not show deprecation warnings, so this class |
| can be used when a very visible warning is helpful, for example because |
| the usage is most likely a user bug. |
| |
| """ |
| |
| |
| # Exception used in shares_memory() |
| class TooHardError(RuntimeError): |
| """max_work was exceeded. |
| |
| This is raised whenever the maximum number of candidate solutions |
| to consider specified by the ``max_work`` parameter is exceeded. |
| Assigning a finite number to max_work may have caused the operation |
| to fail. |
| |
| """ |
| |
| pass |
| |
| |
| class AxisError(ValueError, IndexError): |
| """Axis supplied was invalid. |
| |
| This is raised whenever an ``axis`` parameter is specified that is larger |
| than the number of array dimensions. |
| For compatibility with code written against older numpy versions, which |
| raised a mixture of `ValueError` and `IndexError` for this situation, this |
| exception subclasses both to ensure that ``except ValueError`` and |
| ``except IndexError`` statements continue to catch `AxisError`. |
| |
| .. versionadded:: 1.13 |
| |
| Parameters |
| ---------- |
| axis : int or str |
| The out of bounds axis or a custom exception message. |
| If an axis is provided, then `ndim` should be specified as well. |
| ndim : int, optional |
| The number of array dimensions. |
| msg_prefix : str, optional |
| A prefix for the exception message. |
| |
| Attributes |
| ---------- |
| axis : int, optional |
| The out of bounds axis or ``None`` if a custom exception |
| message was provided. This should be the axis as passed by |
| the user, before any normalization to resolve negative indices. |
| |
| .. versionadded:: 1.22 |
| ndim : int, optional |
| The number of array dimensions or ``None`` if a custom exception |
| message was provided. |
| |
| .. versionadded:: 1.22 |
| |
| |
| Examples |
| -------- |
| >>> array_1d = np.arange(10) |
| >>> np.cumsum(array_1d, axis=1) |
| Traceback (most recent call last): |
| ... |
| numpy.exceptions.AxisError: axis 1 is out of bounds for array of dimension 1 |
| |
| Negative axes are preserved: |
| |
| >>> np.cumsum(array_1d, axis=-2) |
| Traceback (most recent call last): |
| ... |
| numpy.exceptions.AxisError: axis -2 is out of bounds for array of dimension 1 |
| |
| The class constructor generally takes the axis and arrays' |
| dimensionality as arguments: |
| |
| >>> print(np.AxisError(2, 1, msg_prefix='error')) |
| error: axis 2 is out of bounds for array of dimension 1 |
| |
| Alternatively, a custom exception message can be passed: |
| |
| >>> print(np.AxisError('Custom error message')) |
| Custom error message |
| |
| """ |
| |
| __slots__ = ("axis", "ndim", "_msg") |
| |
| def __init__(self, axis, ndim=None, msg_prefix=None): |
| if ndim is msg_prefix is None: |
| # single-argument form: directly set the error message |
| self._msg = axis |
| self.axis = None |
| self.ndim = None |
| else: |
| self._msg = msg_prefix |
| self.axis = axis |
| self.ndim = ndim |
| |
| def __str__(self): |
| axis = self.axis |
| ndim = self.ndim |
| |
| if axis is ndim is None: |
| return self._msg |
| else: |
| msg = f"axis {axis} is out of bounds for array of dimension {ndim}" |
| if self._msg is not None: |
| msg = f"{self._msg}: {msg}" |
| return msg |
| |
| |
| class DTypePromotionError(TypeError): |
| """Multiple DTypes could not be converted to a common one. |
| |
| This exception derives from ``TypeError`` and is raised whenever dtypes |
| cannot be converted to a single common one. This can be because they |
| are of a different category/class or incompatible instances of the same |
| one (see Examples). |
| |
| Notes |
| ----- |
| Many functions will use promotion to find the correct result and |
| implementation. For these functions the error will typically be chained |
| with a more specific error indicating that no implementation was found |
| for the input dtypes. |
| |
| Typically promotion should be considered "invalid" between the dtypes of |
| two arrays when `arr1 == arr2` can safely return all ``False`` because the |
| dtypes are fundamentally different. |
| |
| Examples |
| -------- |
| Datetimes and complex numbers are incompatible classes and cannot be |
| promoted: |
| |
| >>> np.result_type(np.dtype("M8[s]"), np.complex128) |
| DTypePromotionError: The DType <class 'numpy.dtype[datetime64]'> could not |
| be promoted by <class 'numpy.dtype[complex128]'>. This means that no common |
| DType exists for the given inputs. For example they cannot be stored in a |
| single array unless the dtype is `object`. The full list of DTypes is: |
| (<class 'numpy.dtype[datetime64]'>, <class 'numpy.dtype[complex128]'>) |
| |
| For example for structured dtypes, the structure can mismatch and the |
| same ``DTypePromotionError`` is given when two structured dtypes with |
| a mismatch in their number of fields is given: |
| |
| >>> dtype1 = np.dtype([("field1", np.float64), ("field2", np.int64)]) |
| >>> dtype2 = np.dtype([("field1", np.float64)]) |
| >>> np.promote_types(dtype1, dtype2) |
| DTypePromotionError: field names `('field1', 'field2')` and `('field1',)` |
| mismatch. |
| |
| """ |
| pass |