Equal#

  • Domain: ai.onnx

  • Since version: 19

Returns the tensor resulted from performing the Equal logical operation elementwise on the input tensors A and B (with Numpy-style broadcasting support).

Inputs

  • A (T): First input operand for the logical operator.

  • B (T): Second input operand for the logical operator.

Outputs

  • C (T1): Result tensor.

Type Constraints

  • T: Constrain input types to all (non-complex) tensors. Allowed types: tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8).

  • T1: Constrain output to boolean tensor. Allowed types: tensor(bool).

Examples#

test_cc_equal

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(2, 2), dtype=float32
    [[1., 2.],
     [3., 4.]]
  y: shape=(2, 2), dtype=float32
    [[1., 5.],
     [3., 0.]]

Outputs:
  z: shape=(2, 2), dtype=bool
    [[ True, False],
     [ True, False]]

test_cc_equal_bcast

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(2, 2), dtype=float32
    [[1., 2.],
     [3., 4.]]
  y: shape=(), dtype=float32
    2.

Outputs:
  z: shape=(2, 2), dtype=bool
    [[False,  True],
     [False, False]]

test_cc_equal_bfloat16

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(2, 3), dtype=bfloat16
    [[1, 4, 3],
     [6, 5, 2]]
  y: shape=(2, 3), dtype=bfloat16
    [[2, 3, 3],
     [5, 6, 1]]

Outputs:
  z: shape=(2, 3), dtype=bool
    [[False, False,  True],
     [False, False, False]]

test_cc_equal_double

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(3,), dtype=float64
    [1., 2., 3.]
  y: shape=(3,), dtype=float64
    [1., 3., 3.]

Outputs:
  z: shape=(3,), dtype=bool
    [ True, False,  True]

test_cc_equal_float16

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(2, 3), dtype=float16
    [[1., 4., 3.],
     [6., 5., 2.]]
  y: shape=(2, 3), dtype=float16
    [[2., 3., 3.],
     [5., 6., 1.]]

Outputs:
  z: shape=(2, 3), dtype=bool
    [[False, False,  True],
     [False, False, False]]

test_cc_equal_int64

Node:
  Equal(x, y) -> (z)
Inputs:
  x: shape=(3,), dtype=int64
    [1, 2, 3]
  y: shape=(3,), dtype=int64
    [1, 3, 3]

Outputs:
  z: shape=(3,), dtype=bool
    [ True, False,  True]

test_equal

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=int32
    [[[ 0,  0,  0,  0, -1],
      [ 0,  0,  0,  0,  0],
      [ 0,  0,  1,  0,  0],
      [ 0,  0, -1,  0,  1]],

     [[ 1,  1, -1, -1,  0],
      [ 0,  0,  0,  1,  1],
      [-1, -1, -1,  0,  0],
      [ 0, -1,  0,  0,  0]],

     [[ 0, -1,  0,  0,  0],
      [-1,  0,  0,  0,  0],
      [ 1,  0,  0, -1,  0],
      [-1,  0,  0,  0,  0]]]
  y: shape=(3, 4, 5), dtype=int32
    [[[-1,  0,  1,  0,  0],
      [ 0,  1,  0,  0,  0],
      [ 0, -1,  0,  0,  0],
      [ 0,  1,  0,  0,  0]],

     [[ 0,  0,  0,  0,  0],
      [ 0,  0, -1,  0,  0],
      [ 0,  0,  0, -1,  0],
      [ 0,  0,  0,  0,  2]],

     [[ 1,  0,  0,  0,  0],
      [ 0,  0,  0,  0,  0],
      [ 0,  0,  0,  0, -1],
      [ 1,  0,  0, -1,  1]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False,  True, False,  True, False],
      [ True, False,  True,  True,  True],
      [ True, False, False,  True,  True],
      [ True, False, False,  True, False]],

     [[False, False, False, False,  True],
      [ True,  True, False, False, False],
      [False, False, False, False,  True],
      [ True, False,  True,  True, False]],

     [[False, False,  True,  True,  True],
      [False,  True,  True,  True,  True],
      [False,  True,  True, False, False],
      [False,  True,  True, False, False]]]

test_equal_bcast

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=int32
    [[[ 0,  0,  0,  1, -1],
      [ 0,  0,  0,  0,  0],
      [ 0,  0, -1,  0,  0],
      [ 0,  0, -1,  0,  0]],

     [[ 0,  0,  0,  0,  0],
      [ 0,  0, -2, -1,  0],
      [ 0,  0,  0,  0,  0],
      [-1,  1,  1,  1,  0]],

     [[ 0,  0, -1,  0,  0],
      [ 0,  0, -1, -1,  0],
      [ 0,  0, -1,  1,  0],
      [-1,  0,  1, -1,  0]]]
  y: shape=(5,), dtype=int32
    [-1,  0,  0,  0,  1]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False,  True,  True, False, False],
      [False,  True,  True,  True, False],
      [False,  True, False,  True, False],
      [False,  True, False,  True, False]],

     [[False,  True,  True,  True, False],
      [False,  True, False, False, False],
      [False,  True,  True,  True, False],
      [ True, False, False, False, False]],

     [[False,  True, False,  True, False],
      [False,  True, False, False, False],
      [False,  True, False, False, False],
      [ True,  True, False, False, False]]]

test_equal_int16

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=int16
    [[[ 1,  0,  0,  0, -1],
      [ 0,  0,  0,  0,  0],
      [ 0, -1,  0,  1,  0],
      [ 0,  0,  1,  0,  0]],

     [[ 0, -2,  0,  0,  0],
      [ 1,  0,  0,  0,  0],
      [ 0,  1,  1,  0,  0],
      [ 1,  0,  0,  0,  0]],

     [[-1,  1, -2,  0,  1],
      [-1,  0,  2,  0,  1],
      [ 1,  0,  0,  0,  0],
      [ 0,  0,  0,  0,  0]]]
  y: shape=(3, 4, 5), dtype=int16
    [[[ 0, -1,  1,  0,  0],
      [ 0,  0,  0,  1,  0],
      [-1, -1,  0,  1,  0],
      [ 0,  0,  1, -1,  1]],

     [[ 0, -1,  0,  1,  0],
      [ 0,  0,  1,  0,  1],
      [ 0,  1,  0, -1, -1],
      [ 0,  0,  0,  0,  1]],

     [[ 0,  0, -2,  0,  0],
      [ 0,  0,  0,  1,  1],
      [ 0,  0,  0,  1,  0],
      [-1,  0,  0,  0,  0]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False, False, False,  True, False],
      [ True,  True,  True, False,  True],
      [False,  True,  True,  True,  True],
      [ True,  True,  True, False, False]],

     [[ True, False,  True, False,  True],
      [False,  True, False,  True, False],
      [ True,  True, False, False, False],
      [False,  True,  True,  True, False]],

     [[False, False,  True,  True, False],
      [False,  True, False, False,  True],
      [False,  True,  True, False,  True],
      [False,  True,  True,  True,  True]]]

test_equal_int8

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=int8
    [[[ 0, -1,  1,  0,  1],
      [ 1,  2,  0,  0,  1],
      [ 0,  0,  0, -1,  0],
      [ 0,  0,  0,  0,  0]],

     [[ 0,  0,  0,  0,  0],
      [-1, -1,  0,  0,  0],
      [-1,  0,  1,  0,  0],
      [ 0,  0,  0,  0,  0]],

     [[ 1,  0,  0,  0,  2],
      [-1,  0,  0,  0,  1],
      [ 0,  0,  1,  0,  1],
      [ 0,  0,  0, -1,  2]]]
  y: shape=(3, 4, 5), dtype=int8
    [[[ 0, -1,  0,  0,  0],
      [-1, -2,  0,  0,  0],
      [ 1,  0, -1,  0,  0],
      [ 0, -1,  0,  0,  0]],

     [[ 0, -1,  1, -1,  0],
      [ 0, -2,  0,  0, -1],
      [ 0,  0,  1,  0,  0],
      [ 0,  0,  0,  0,  1]],

     [[ 1,  0, -1,  0,  0],
      [ 0,  0,  0,  0,  0],
      [ 1, -1,  0,  0,  0],
      [-1, -1,  0,  1,  0]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[ True,  True, False,  True, False],
      [False, False,  True,  True, False],
      [False,  True, False, False,  True],
      [ True, False,  True,  True,  True]],

     [[ True, False, False, False,  True],
      [False, False,  True,  True, False],
      [False,  True,  True,  True,  True],
      [ True,  True,  True,  True, False]],

     [[ True,  True, False,  True, False],
      [False,  True,  True,  True, False],
      [False, False, False,  True, False],
      [False, False,  True, False, False]]]

test_equal_string

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(2,), dtype=object
    ['string1', 'string2']
  y: shape=(2,), dtype=object
    ['string1', 'string3']

Outputs:
  equal: shape=(2,), dtype=bool
    [ True, False]

test_equal_string_broadcast

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(2,), dtype=object
    ['string1', 'string2']
  y: shape=(1,), dtype=object
    ['string1']

Outputs:
  equal: shape=(2,), dtype=bool
    [ True, False]

test_equal_uint16

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=uint16
    [[[12,  8,  1,  1,  8],
      [12,  0, 16, 13, 18],
      [16,  9,  0,  1, 11],
      [14, 12,  9,  8,  9]],

     [[ 4,  5,  0,  4, 16],
      [12, 23,  4, 21,  6],
      [12, 20, 20, 18,  1],
      [22, 23, 11, 10, 12]],

     [[ 2,  8, 11,  6,  9],
      [ 5,  7, 18,  4, 18],
      [10, 15, 16,  6,  6],
      [ 8,  4,  0, 21,  6]]]
  y: shape=(3, 4, 5), dtype=uint16
    [[[15, 23, 11, 18, 23],
      [ 6,  3, 21, 19,  9],
      [ 7,  4,  4,  1,  3],
      [14,  4,  1,  5,  8]],

     [[ 2,  9,  3, 13,  8],
      [ 8,  7,  6,  2,  0],
      [11,  3, 22, 11,  1],
      [14, 17,  4, 15, 10]],

     [[ 7, 18,  7, 22, 18],
      [20,  5,  5,  5, 17],
      [15, 13,  7,  6, 19],
      [21,  5,  2, 21, 15]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False,  True, False],
      [ True, False, False, False, False]],

     [[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False,  True],
      [False, False, False, False, False]],

     [[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False,  True, False],
      [False, False, False,  True, False]]]

test_equal_uint32

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=uint32
    [[[17, 23,  7,  0, 22],
      [12, 15, 15, 17,  4],
      [16,  0,  7,  0,  6],
      [22, 12,  6, 19, 21]],

     [[ 8,  6, 19,  9,  2],
      [ 1, 10,  8,  6,  0],
      [14, 19, 16,  3,  3],
      [ 7,  4, 23, 22,  3]],

     [[ 8, 18, 16,  7,  7],
      [15, 19,  9,  0,  4],
      [ 9, 15,  3, 19, 17],
      [ 8, 10,  2,  5,  0]]]
  y: shape=(3, 4, 5), dtype=uint32
    [[[18,  4, 12, 15, 18],
      [ 2,  2, 11, 17,  1],
      [14,  6,  0, 16,  0],
      [ 2,  2,  7,  4,  0]],

     [[ 5, 12, 16, 13, 13],
      [17, 17, 15, 16,  2],
      [19, 18, 22,  0,  1],
      [ 4, 21, 12,  0,  4]],

     [[ 3, 22,  6, 21, 23],
      [23, 14, 21,  2, 21],
      [22, 23, 21, 17,  3],
      [ 8, 12,  4, 10, 23]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False, False, False, False, False],
      [False, False, False,  True, False],
      [False, False, False, False, False],
      [False, False, False, False, False]],

     [[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]],

     [[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False],
      [ True, False, False, False, False]]]

test_equal_uint64

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=uint64
    [[[13, 23, 15,  8,  6],
      [19, 15, 13,  9,  2],
      [15, 13, 22, 17, 17],
      [ 7,  2, 23, 10, 19]],

     [[23, 14,  0,  3, 14],
      [14, 17, 13, 17,  2],
      [14,  0, 13, 16,  7],
      [ 3, 13, 14, 15, 11]],

     [[23, 10, 17,  2,  9],
      [ 1, 10,  1,  2,  1],
      [16, 19, 13, 10, 10],
      [ 5,  3, 17,  6,  3]]]
  y: shape=(3, 4, 5), dtype=uint64
    [[[19, 21, 14, 18, 12],
      [19, 21, 16, 22, 11],
      [ 5, 22, 11, 18, 21],
      [ 6,  9,  2,  4, 12]],

     [[23,  0, 19,  4, 18],
      [14,  4, 11,  1,  7],
      [15, 23, 12, 15, 18],
      [16, 10, 12, 14, 13]],

     [[21, 12, 12,  3, 20],
      [12, 18,  6,  5, 20],
      [20,  1,  2, 17, 22],
      [ 1, 21,  7,  9, 15]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False, False, False, False, False],
      [ True, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]],

     [[ True, False, False, False, False],
      [ True, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]],

     [[False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]]]

test_equal_uint8

Node:
  Equal(x, y) -> (equal)
Inputs:
  x: shape=(3, 4, 5), dtype=uint8
    [[[ 1, 14,  4, 20,  8],
      [13, 23,  2, 19, 22],
      [19,  2, 19,  0, 12],
      [ 8, 18, 14, 17,  7]],

     [[20, 12, 17, 11,  5],
      [12,  1,  5, 19,  5],
      [ 6,  6, 14,  1, 20],
      [14, 23,  4,  1,  6]],

     [[15,  6,  6, 15, 13],
      [ 1,  7, 21, 21, 17],
      [21, 14, 17,  3, 11],
      [23, 16,  4,  7,  8]]]
  y: shape=(3, 4, 5), dtype=uint8
    [[[ 2, 15,  0, 14, 12],
      [17,  6,  2, 12, 20],
      [18,  5, 22, 22, 11],
      [ 4,  4,  0,  6, 11]],

     [[22,  6,  2, 10,  5],
      [19, 11, 23, 14,  5],
      [12, 12, 12, 11, 13],
      [ 7, 23, 22,  4,  4]],

     [[ 4,  2,  6,  9,  8],
      [ 1, 14,  5, 10, 12],
      [13,  5,  0,  6, 13],
      [ 3,  1,  1, 10, 12]]]

Outputs:
  equal: shape=(3, 4, 5), dtype=bool
    [[[False, False, False, False, False],
      [False, False,  True, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]],

     [[False, False, False, False,  True],
      [False, False, False, False,  True],
      [False, False, False, False, False],
      [False,  True, False, False, False]],

     [[False, False,  True, False, False],
      [ True, False, False, False, False],
      [False, False, False, False, False],
      [False, False, False, False, False]]]

Differences with previous version (13)#

SchemaDiff: Equal (domain 'ai.onnx')

  • old version: 13

  • new version: 19

  • breaking: no

Type constraints:

  • changed ‘T’: added types: [‘tensor(string)’]

Version History#