# numpy.can_cast

numpy.can_cast(from_, to, casting='safe')

  Returns True if cast between data types can occur according to the casting rule. If from is a scalar or array scalar, also returns True if the scalar value can be cast without overflow or truncation to an integer.

  Parameters:
    from_dtype, dtype specifier, scalar, or array

      Data type, scalar, or array to cast from.

    to dtype or dtype specifier

      Data type to cast to.

    casting{‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional

      Controls what kind of data casting may occur.

      > - ‘no’ means the data types should not be cast at all.

      > - ‘equiv’ means only byte-order changes are allowed.

      > - ‘safe’ means only casts which can preserve values are allowed.

      > - ‘same_kind’ means only safe casts or casts within a kind, like float64 to float32, are allowed.

      > - ‘unsafe’ means any data conversions may be done.

  Returns:
    out bool

      True if cast can occur according to the casting rule.

  See also

  `dtype`, `result_type`

  Notes

  Changed in version 1.17.0: Casting between a simple data type and a structured one is possible only for “unsafe” casting. Casting to multiple fields is allowed, but casting from multiple fields is not.

  Changed in version 1.9.0: Casting from numeric to string types in ‘safe’ casting mode requires that the string dtype length is long enough to store the maximum integer/float value converted.

  Examples

  Basic examples

      >>> np.can_cast(np.int32, np.int64)
      True
      >>> np.can_cast(np.float64, complex)
      True
      >>> np.can_cast(complex, float)
      False

      >>> np.can_cast('i8', 'f8')
      True
      >>> np.can_cast('i8', 'f4')
      False
      >>> np.can_cast('i4', 'S4')
      False

  Casting scalars

      >>> np.can_cast(100, 'i1')
      True
      >>> np.can_cast(150, 'i1')
      False
      >>> np.can_cast(150, 'u1')
      True

      >>> np.can_cast(3.5e100, np.float32)
      False
      >>> np.can_cast(1000.0, np.float32)
      True

  Array scalar checks the value, array does not

      >>> np.can_cast(np.array(1000.0), np.float32)
      True
      >>> np.can_cast(np.array([1000.0]), np.float32)
      False

  Using the casting rules

      >>> np.can_cast('i8', 'i8', 'no')
      True
      >>> np.can_cast('<i8', '>i8', 'no')
      False

      >>> np.can_cast('<i8', '>i8', 'equiv')
      True
      >>> np.can_cast('<i4', '>i8', 'equiv')
      False

      >>> np.can_cast('<i4', '>i8', 'safe')
      True
      >>> np.can_cast('<i8', '>i4', 'safe')
      False

      >>> np.can_cast('<i8', '>i4', 'same_kind')
      True
      >>> np.can_cast('<i8', '>u4', 'same_kind')
      False

      >>> np.can_cast('<i8', '>u4', 'unsafe')
      True