BitShift#
BitShift - 11#
Version
name: BitShift (GitHub)
domain: main
since_version: 11
function:
support_level: SupportType.COMMON
shape inference: True
This version of the operator has been available since version 11.
Summary
Attributes
direction - STRING (required) : Direction of moving bits. It can be either “RIGHT” (for right shift) or “LEFT” (for left shift).
Inputs
X (heterogeneous) - T:
Y (heterogeneous) - T:
Outputs
Z (heterogeneous) - T:
Type Constraints
T in ( tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to integer tensors.
Examples
_right_unit8
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="RIGHT"
)
x = np.array([16, 4, 1]).astype(np.uint8)
y = np.array([1, 2, 3]).astype(np.uint8)
z = x >> y # expected output [8, 1, 0]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_right_uint8")
_right_unit16
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="RIGHT"
)
x = np.array([16, 4, 1]).astype(np.uint16)
y = np.array([1, 2, 3]).astype(np.uint16)
z = x >> y # expected output [8, 1, 0]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_right_uint16")
_right_unit32
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="RIGHT"
)
x = np.array([16, 4, 1]).astype(np.uint32)
y = np.array([1, 2, 3]).astype(np.uint32)
z = x >> y # expected output [8, 1, 0]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_right_uint32")
_right_unit64
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="RIGHT"
)
x = np.array([16, 4, 1]).astype(np.uint64)
y = np.array([1, 2, 3]).astype(np.uint64)
z = x >> y # expected output [8, 1, 0]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_right_uint64")
_left_unit8
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="LEFT"
)
x = np.array([16, 4, 1]).astype(np.uint8)
y = np.array([1, 2, 3]).astype(np.uint8)
z = x << y # expected output [32, 16, 8]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_left_uint8")
_left_unit16
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="LEFT"
)
x = np.array([16, 4, 1]).astype(np.uint16)
y = np.array([1, 2, 3]).astype(np.uint16)
z = x << y # expected output [32, 16, 8]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_left_uint16")
_left_unit32
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="LEFT"
)
x = np.array([16, 4, 1]).astype(np.uint32)
y = np.array([1, 2, 3]).astype(np.uint32)
z = x << y # expected output [32, 16, 8]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_left_uint32")
_left_unit64
import numpy as np
import onnx
node = onnx.helper.make_node(
"BitShift", inputs=["x", "y"], outputs=["z"], direction="LEFT"
)
x = np.array([16, 4, 1]).astype(np.uint64)
y = np.array([1, 2, 3]).astype(np.uint64)
z = x << y # expected output [32, 16, 8]
expect(node, inputs=[x, y], outputs=[z], name="test_bitshift_left_uint64")