# Copyright (c) ONNX Project Contributors # SPDX-License-Identifier: Apache-2.0 from __future__ import annotations import numpy as np import onnx from onnx.reference.op_run import OpRun class BitCast(OpRun): def _run(self, x, to: int): # type: ignore[override] if to == onnx.TensorProto.STRING: raise ValueError("BitCast to STRING is not supported") if x.dtype == np.str_: raise ValueError("BitCast from STRING is not supported") target_dtype = onnx.helper.tensor_dtype_to_np_dtype(to) if x.dtype.itemsize != np.dtype(target_dtype).itemsize: raise ValueError( f"BitCast requires input and output types to have the same " f"bit-width, but got {x.dtype} ({x.dtype.itemsize * 8} bits) " f"and {target_dtype} ({np.dtype(target_dtype).itemsize * 8} bits)" ) result = x.view(target_dtype) return (result,)