(l-onnx-doc-And)= # And (l-onnx-op-and-7)= ## And - 7 ### Version - **name**: [And (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#And) - **domain**: `main` - **since_version**: `7` - **function**: `False` - **support_level**: `SupportType.COMMON` - **shape inference**: `True` This version of the operator has been available **since version 7**. ### Summary Returns the tensor resulted from performing the `and` logical operation elementwise on the input tensors `A` and `B` (with Numpy-style broadcasting support). This operator supports **multidirectional (i.e., Numpy-style) broadcasting**; for more details please check [Broadcasting in ONNX](https://github.com/onnx/onnx/blob/main/docs/Broadcasting.md). ### Inputs - **A** (heterogeneous) - **T**: First input operand for the logical operator. - **B** (heterogeneous) - **T**: Second input operand for the logical operator. ### Outputs - **C** (heterogeneous) - **T1**: Result tensor. ### Type Constraints * **T** in ( `tensor(bool)` ): Constrain input to boolean tensor. * **T1** in ( `tensor(bool)` ): Constrain output to boolean tensor. ### Examples #### default ```python import numpy as np import onnx node = onnx.helper.make_node( "And", inputs=["x", "y"], outputs=["and"], ) # 2d x = (np.random.randn(3, 4) > 0).astype(bool) y = (np.random.randn(3, 4) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and2d") # 3d x = (np.random.randn(3, 4, 5) > 0).astype(bool) y = (np.random.randn(3, 4, 5) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and3d") # 4d x = (np.random.randn(3, 4, 5, 6) > 0).astype(bool) y = (np.random.randn(3, 4, 5, 6) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and4d") ``` #### _and_broadcast ```python import numpy as np import onnx node = onnx.helper.make_node( "And", inputs=["x", "y"], outputs=["and"], ) # 3d vs 1d x = (np.random.randn(3, 4, 5) > 0).astype(bool) y = (np.random.randn(5) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and_bcast3v1d") # 3d vs 2d x = (np.random.randn(3, 4, 5) > 0).astype(bool) y = (np.random.randn(4, 5) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and_bcast3v2d") # 4d vs 2d x = (np.random.randn(3, 4, 5, 6) > 0).astype(bool) y = (np.random.randn(5, 6) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and_bcast4v2d") # 4d vs 3d x = (np.random.randn(3, 4, 5, 6) > 0).astype(bool) y = (np.random.randn(4, 5, 6) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and_bcast4v3d") # 4d vs 4d x = (np.random.randn(1, 4, 1, 6) > 0).astype(bool) y = (np.random.randn(3, 1, 5, 6) > 0).astype(bool) z = np.logical_and(x, y) expect(node, inputs=[x, y], outputs=[z], name="test_and_bcast4v4d") ``` ```{toctree} text_diff_And_1_7 ``` (l-onnx-op-and-1)= ## And - 1 ### Version - **name**: [And (GitHub)](https://github.com/onnx/onnx/blob/main/docs/Operators.md#And) - **domain**: `main` - **since_version**: `1` - **function**: `False` - **support_level**: `SupportType.COMMON` - **shape inference**: `True` This version of the operator has been available **since version 1**. ### Summary Returns the tensor resulted from performing the `and` logical operation elementwise on the input tensors `A` and `B`. If broadcasting is enabled, the right-hand-side argument will be broadcasted to match the shape of left-hand-side argument. See the doc of `Add` for a detailed description of the broadcasting rules. ### Attributes * **axis - INT** : If set, defines the broadcast dimensions. * **broadcast - INT** (default is `0`): Enable broadcasting ### Inputs - **A** (heterogeneous) - **T**: Left input tensor for the logical operator. - **B** (heterogeneous) - **T**: Right input tensor for the logical operator. ### Outputs - **C** (heterogeneous) - **T1**: Result tensor. ### Type Constraints * **T** in ( `tensor(bool)` ): Constrain input to boolean tensor. * **T1** in ( `tensor(bool)` ): Constrain output to boolean tensor.