Skip to content

Commit 51028d9

Browse files
authored
Add StableHLO complex exponential to stablehlo-complex-math-expander pass (#2682)
As in the title. This PR is created on top of the branch of #2681. This PR improves the accuracy of JAX complex exp function as follows: ``` Before ------ test_unary[exp-jax-cpu-complex64-default] maximal ULP difference: 4294967296 ULP difference == 0: 1964868 ULP difference == 1: 133291 ULP difference == 2: 1035 ULP difference == 4294967296: 1606 test_unary[exp-jax-cuda-complex64-default] maximal ULP difference: 4294967296 ULP difference == 0: 1787925 ULP difference == 1: 300591 ULP difference == 2: 10657 ULP difference == 3: 79 ULP difference == 4294967296: 1548 After ----- test_unary[exp-jax-cpu-complex64-default] maximal ULP difference: 2 ULP difference == 0: 1966101 ULP difference == 1: 133662 ULP difference == 2: 1037 test_unary[exp-jax-cuda-complex64-default] maximal ULP difference: 3 ULP difference == 0: 1788889 ULP difference == 1: 301112 ULP difference == 2: 10720 ULP difference == 3: 79 ``` The corresponding accuracy patterns are available in pearu/functional_algorithms#44 (comment)
1 parent f67c73d commit 51028d9

File tree

8 files changed

+146
-2
lines changed

8 files changed

+146
-2
lines changed

build_tools/math/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ following requirements:
3131

3232
- Python 3.11 or newer
3333
- mpmath 1.3 or newer
34-
- functional_algorithms 0.14.1 or newer
34+
- functional_algorithms 0.15.0 or newer
3535

3636
that can be installed via pypi:
3737

build_tools/math/generate_ChloDecompositionPatternsMath.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ def main(kind="CHLO"):
100100
("StableHLO_Log1pOp", "complex_log1p", ("z:complex",)),
101101
("StableHLO_SqrtOp", "complex_sqrt", ("z:complex",)),
102102
("StableHLO_LogOp", "complex_log", ("z:complex",)),
103+
("StableHLO_ExpOp", "complex_exp", ("z:complex",)),
103104
]:
104105
if not chloname.startswith(kind):
105106
continue

build_tools/math/generate_tests.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@
6868
dict(name="acosh", mpmath_name="arccosh"),
6969
dict(name="atanh", mpmath_name="arctanh"),
7070
dict(name="square", mpmath_name="square"),
71+
dict(name="exponential",
72+
mpmath_name="exp",
73+
namespace="stablehlo",
74+
passes="--stablehlo-complex-math-expander"),
7175
dict(name="log_plus_one",
7276
mpmath_name="log1p",
7377
namespace="stablehlo",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: stablehlo-opt --stablehlo-complex-math-expander %s | stablehlo-translate --interpret
2+
// This file is generated, see build_tools/math/README.md for more information.
3+
module @exponential_complex128 {
4+
func.func private @samples() -> tensor<169xcomplex<f64>> {
5+
%0 = stablehlo.constant dense<"0x000000000000F0FF000000000000F0FFFFFFFFFFFFFFEFFF000000000000F0FFFEFFFFFFFFFFEFFF000000000000F0FF000000000000F8BF000000000000F0FF000000000000FC9F000000000000F0FF0100000000000080000000000000F0FF0000000000000000000000000000F0FF0100000000000000000000000000F0FF000000000000FC1F000000000000F0FF000000000000F83F000000000000F0FFFEFFFFFFFFFFEF7F000000000000F0FFFFFFFFFFFFFFEF7F000000000000F0FF000000000000F07F000000000000F0FF000000000000F0FFFFFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFEFFFFFFFFFFEFFFFFFFFFFFFFFFEFFF000000000000F8BFFFFFFFFFFFFFEFFF000000000000FC9FFFFFFFFFFFFFEFFF0100000000000080FFFFFFFFFFFFEFFF0000000000000000FFFFFFFFFFFFEFFF0100000000000000FFFFFFFFFFFFEFFF000000000000FC1FFFFFFFFFFFFFEFFF000000000000F83FFFFFFFFFFFFFEFFFFEFFFFFFFFFFEF7FFFFFFFFFFFFFEFFFFFFFFFFFFFFFEF7FFFFFFFFFFFFFEFFF000000000000F07FFFFFFFFFFFFFEFFF000000000000F0FFFEFFFFFFFFFFEFFFFFFFFFFFFFFFEFFFFEFFFFFFFFFFEFFFFEFFFFFFFFFFEFFFFEFFFFFFFFFFEFFF000000000000F8BFFEFFFFFFFFFFEFFF000000000000FC9FFEFFFFFFFFFFEFFF0100000000000080FEFFFFFFFFFFEFFF0000000000000000FEFFFFFFFFFFEFFF0100000000000000FEFFFFFFFFFFEFFF000000000000FC1FFEFFFFFFFFFFEFFF000000000000F83FFEFFFFFFFFFFEFFFFEFFFFFFFFFFEF7FFEFFFFFFFFFFEFFFFFFFFFFFFFFFEF7FFEFFFFFFFFFFEFFF000000000000F07FFEFFFFFFFFFFEFFF000000000000F0FF000000000000F8BFFFFFFFFFFFFFEFFF000000000000F8BFFEFFFFFFFFFFEFFF000000000000F8BF000000000000F8BF000000000000F8BF000000000000FC9F000000000000F8BF0100000000000080000000000000F8BF0000000000000000000000000000F8BF0100000000000000000000000000F8BF000000000000FC1F000000000000F8BF000000000000F83F000000000000F8BFFEFFFFFFFFFFEF7F000000000000F8BFFFFFFFFFFFFFEF7F000000000000F8BF000000000000F07F000000000000F8BF000000000000F0FF000000000000FC9FFFFFFFFFFFFFEFFF000000000000FC9FFEFFFFFFFFFFEFFF000000000000FC9F000000000000F8BF000000000000FC9F000000000000FC9F000000000000FC9F0100000000000080000000000000FC9F0000000000000000000000000000FC9F0100000000000000000000000000FC9F000000000000FC1F000000000000FC9F000000000000F83F000000000000FC9FFEFFFFFFFFFFEF7F000000000000FC9FFFFFFFFFFFFFEF7F000000000000FC9F000000000000F07F000000000000FC9F000000000000F0FF0100000000000080FFFFFFFFFFFFEFFF0100000000000080FEFFFFFFFFFFEFFF0100000000000080000000000000F8BF0100000000000080000000000000FC9F0100000000000080010000000000008001000000000000800000000000000000010000000000008001000000000000000100000000000080000000000000FC1F0100000000000080000000000000F83F0100000000000080FEFFFFFFFFFFEF7F0100000000000080FFFFFFFFFFFFEF7F0100000000000080000000000000F07F0100000000000080000000000000F0FF0000000000000000FFFFFFFFFFFFEFFF0000000000000000FEFFFFFFFFFFEFFF0000000000000000000000000000F8BF0000000000000000000000000000FC9F0000000000000000010000000000008000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000FC1F0000000000000000000000000000F83F0000000000000000FEFFFFFFFFFFEF7F0000000000000000FFFFFFFFFFFFEF7F0000000000000000000000000000F07F0000000000000000000000000000F0FF0100000000000000FFFFFFFFFFFFEFFF0100000000000000FEFFFFFFFFFFEFFF0100000000000000000000000000F8BF0100000000000000000000000000FC9F0100000000000000010000000000008001000000000000000000000000000000010000000000000001000000000000000100000000000000000000000000FC1F0100000000000000000000000000F83F0100000000000000FEFFFFFFFFFFEF7F0100000000000000FFFFFFFFFFFFEF7F0100000000000000000000000000F07F0100000000000000000000000000F0FF000000000000FC1FFFFFFFFFFFFFEFFF000000000000FC1FFEFFFFFFFFFFEFFF000000000000FC1F000000000000F8BF000000000000FC1F000000000000FC9F000000000000FC1F0100000000000080000000000000FC1F0000000000000000000000000000FC1F0100000000000000000000000000FC1F000000000000FC1F000000000000FC1F000000000000F83F000000000000FC1FFEFFFFFFFFFFEF7F000000000000FC1FFFFFFFFFFFFFEF7F000000000000FC1F000000000000F07F000000000000FC1F000000000000F0FF000000000000F83FFFFFFFFFFFFFEFFF000000000000F83FFEFFFFFFFFFFEFFF000000000000F83F000000000000F8BF000000000000F83F000000000000FC9F000000000000F83F0100000000000080000000000000F83F0000000000000000000000000000F83F0100000000000000000000000000F83F000000000000FC1F000000000000F83F000000000000F83F000000000000F83FFEFFFFFFFFFFEF7F000000000000F83FFFFFFFFFFFFFEF7F000000000000F83F000000000000F07F000000000000F83F000000000000F0FFFEFFFFFFFFFFEF7FFFFFFFFFFFFFEFFFFEFFFFFFFFFFEF7FFEFFFFFFFFFFEFFFFEFFFFFFFFFFEF7F000000000000F8BFFEFFFFFFFFFFEF7F000000000000FC9FFEFFFFFFFFFFEF7F0100000000000080FEFFFFFFFFFFEF7F0000000000000000FEFFFFFFFFFFEF7F0100000000000000FEFFFFFFFFFFEF7F000000000000FC1FFEFFFFFFFFFFEF7F000000000000F83FFEFFFFFFFFFFEF7FFEFFFFFFFFFFEF7FFEFFFFFFFFFFEF7FFFFFFFFFFFFFEF7FFEFFFFFFFFFFEF7F000000000000F07FFEFFFFFFFFFFEF7F000000000000F0FFFFFFFFFFFFFFEF7FFFFFFFFFFFFFEFFFFFFFFFFFFFFFEF7FFEFFFFFFFFFFEFFFFFFFFFFFFFFFEF7F000000000000F8BFFFFFFFFFFFFFEF7F000000000000FC9FFFFFFFFFFFFFEF7F0100000000000080FFFFFFFFFFFFEF7F0000000000000000FFFFFFFFFFFFEF7F0100000000000000FFFFFFFFFFFFEF7F000000000000FC1FFFFFFFFFFFFFEF7F000000000000F83FFFFFFFFFFFFFEF7FFEFFFFFFFFFFEF7FFFFFFFFFFFFFEF7FFFFFFFFFFFFFEF7FFFFFFFFFFFFFEF7F000000000000F07FFFFFFFFFFFFFEF7F000000000000F0FF000000000000F07FFFFFFFFFFFFFEFFF000000000000F07FFEFFFFFFFFFFEFFF000000000000F07F000000000000F8BF000000000000F07F000000000000FC9F000000000000F07F0100000000000080000000000000F07F0000000000000000000000000000F07F0100000000000000000000000000F07F000000000000FC1F000000000000F07F000000000000F83F000000000000F07FFEFFFFFFFFFFEF7F000000000000F07FFFFFFFFFFFFFEF7F000000000000F07F000000000000F07F000000000000F07F"> : tensor<169xcomplex<f64>>
6+
return %0 : tensor<169xcomplex<f64>>
7+
}
8+
func.func private @expected() -> tensor<169xcomplex<f64>> {
9+
%0 = stablehlo.constant dense<"0x000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F00000000000000000000000000000000000000000000008000000000000000800000000000000080000000000000008070FB7467708FCCBF216B18E5C52352BF75ABCF2EE6FFEFBF974EB398FC5274BF75ABCF2EE6FFEFBF974EB398FC5274BF75ABCF2EE6FFEFBF974EB398FC5274BF75ABCF2EE6FFEFBF974EB398FC5274BF75ABCF2EE6FFEFBF974EB398FC5274BFBE3CC56F31ED11C0214025CB8AC596BF000000000000F0FF000000000000F0FF000000000000F0FF000000000000F0FF000000000000F0FF000000000000F0FF0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000800C300CC3886BB53F61593FDCFD79CABF8F30C5B4DFFFD73F8AEEC67736AAEDBF8F30C5B4DFFFD73F8AEEC67736AAEDBF8F30C5B4DFFFD73F8AEEC67736AAEDBF8F30C5B4DFFFD73F8AEEC67736AAEDBF8F30C5B4DFFFD73F8AEEC67736AAEDBF48DBADAABBE3FA3F705EA5CF5C9E10C0000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000080FA6C23AD9329903F999D1BAF367DCCBFA7F9C54FD51BB23F8B6D2C9B7AEBEFBFA7F9C54FD51BB23F8B6D2C9B7AEBEFBFA7F9C54FD51BB23F8B6D2C9B7AEBEFBFA7F9C54FD51BB23F8B6D2C9B7AEBEFBFA7F9C54FD51BB23F8B6D2C9B7AEBEFBFE84AB23E174AD43F1150D2E3C0E111C0000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000801D5C4B72878FCC3F9AF0018496FDD89F000000000000F03F000000000000FC9F000000000000F03F000000000000FC9F000000000000F03F000000000000FC9F000000000000F03F000000000000FC9F000000000000F03F000000000000FC9F41C54FE63FED114032990BD32F5F1FA0000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000801D5C4B72878FCC3F0000000000000080000000000000F03F0100000000000080000000000000F03F0100000000000080000000000000F03F0100000000000080000000000000F03F0100000000000080000000000000F03F010000000000008041C54FE63FED11400400000000000080000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D5C4B72878FCC3F0000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F03F0000000000000000000000000000F03F000000000000000041C54FE63FED11400000000000000000000000000000F07F0000000000000000000000000000F07F0000000000000000000000000000F07F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D5C4B72878FCC3F0000000000000000000000000000F03F0100000000000000000000000000F03F0100000000000000000000000000F03F0100000000000000000000000000F03F0100000000000000000000000000F03F010000000000000041C54FE63FED11400400000000000000000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D5C4B72878FCC3F9AF0018496FDD81F000000000000F03F000000000000FC1F000000000000F03F000000000000FC1F000000000000F03F000000000000FC1F000000000000F03F000000000000FC1F000000000000F03F000000000000FC1F41C54FE63FED114032990BD32F5F1F20000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FA6C23AD9329903F999D1BAF367DCC3FA7F9C54FD51BB23F8B6D2C9B7AEBEF3FA7F9C54FD51BB23F8B6D2C9B7AEBEF3FA7F9C54FD51BB23F8B6D2C9B7AEBEF3FA7F9C54FD51BB23F8B6D2C9B7AEBEF3FA7F9C54FD51BB23F8B6D2C9B7AEBEF3FE84AB23E174AD43F1150D2E3C0E11140000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C300CC3886BB53F61593FDCFD79CA3F8F30C5B4DFFFD73F8AEEC67736AAED3F8F30C5B4DFFFD73F8AEEC67736AAED3F8F30C5B4DFFFD73F8AEEC67736AAED3F8F30C5B4DFFFD73F8AEEC67736AAED3F8F30C5B4DFFFD73F8AEEC67736AAED3F48DBADAABBE3FA3F705EA5CF5C9E1040000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F000000000000F07F00000000000000000000000000000000000000000000008000000000000000000000000000000080000000000000000070FB7467708FCCBF216B18E5C523523F75ABCF2EE6FFEFBF974EB398FC52743F75ABCF2EE6FFEFBF974EB398FC52743F75ABCF2EE6FFEFBF974EB398FC52743F75ABCF2EE6FFEFBF974EB398FC52743F75ABCF2EE6FFEFBF974EB398FC52743FBE3CC56F31ED11C0214025CB8AC5963F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F0FF000000000000F07F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F000000000000F87F"> : tensor<169xcomplex<f64>>
10+
return %0 : tensor<169xcomplex<f64>>
11+
}
12+
func.func public @main() {
13+
%0 = call @samples() : () -> tensor<169xcomplex<f64>>
14+
%1 = "stablehlo.exponential"(%0) : (tensor<169xcomplex<f64>>) -> tensor<169xcomplex<f64>>
15+
%2 = call @expected() : () -> tensor<169xcomplex<f64>>
16+
check.expect_close %1, %2, max_ulp_difference = 3 : tensor<169xcomplex<f64>>, tensor<169xcomplex<f64>>
17+
func.return
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: stablehlo-opt --stablehlo-complex-math-expander %s | stablehlo-translate --interpret
2+
// This file is generated, see build_tools/math/README.md for more information.
3+
module @exponential_complex64 {
4+
func.func private @samples() -> tensor<169xcomplex<f32>> {
5+
%0 = stablehlo.constant dense<"0x000080FF000080FFFFFF7FFF000080FFFEFF7FFF000080FF0000C0BF000080FF0000E09F000080FF01000080000080FF00000000000080FF01000000000080FF0000E01F000080FF0000C03F000080FFFEFF7F7F000080FFFFFF7F7F000080FF0000807F000080FF000080FFFFFF7FFFFFFF7FFFFFFF7FFFFEFF7FFFFFFF7FFF0000C0BFFFFF7FFF0000E09FFFFF7FFF01000080FFFF7FFF00000000FFFF7FFF01000000FFFF7FFF0000E01FFFFF7FFF0000C03FFFFF7FFFFEFF7F7FFFFF7FFFFFFF7F7FFFFF7FFF0000807FFFFF7FFF000080FFFEFF7FFFFFFF7FFFFEFF7FFFFEFF7FFFFEFF7FFF0000C0BFFEFF7FFF0000E09FFEFF7FFF01000080FEFF7FFF00000000FEFF7FFF01000000FEFF7FFF0000E01FFEFF7FFF0000C03FFEFF7FFFFEFF7F7FFEFF7FFFFFFF7F7FFEFF7FFF0000807FFEFF7FFF000080FF0000C0BFFFFF7FFF0000C0BFFEFF7FFF0000C0BF0000C0BF0000C0BF0000E09F0000C0BF010000800000C0BF000000000000C0BF010000000000C0BF0000E01F0000C0BF0000C03F0000C0BFFEFF7F7F0000C0BFFFFF7F7F0000C0BF0000807F0000C0BF000080FF0000E09FFFFF7FFF0000E09FFEFF7FFF0000E09F0000C0BF0000E09F0000E09F0000E09F010000800000E09F000000000000E09F010000000000E09F0000E01F0000E09F0000C03F0000E09FFEFF7F7F0000E09FFFFF7F7F0000E09F0000807F0000E09F000080FF01000080FFFF7FFF01000080FEFF7FFF010000800000C0BF010000800000E09F010000800100008001000080000000000100008001000000010000800000E01F010000800000C03F01000080FEFF7F7F01000080FFFF7F7F010000800000807F01000080000080FF00000000FFFF7FFF00000000FEFF7FFF000000000000C0BF000000000000E09F000000000100008000000000000000000000000001000000000000000000E01F000000000000C03F00000000FEFF7F7F00000000FFFF7F7F000000000000807F00000000000080FF01000000FFFF7FFF01000000FEFF7FFF010000000000C0BF010000000000E09F010000000100008001000000000000000100000001000000010000000000E01F010000000000C03F01000000FEFF7F7F01000000FFFF7F7F010000000000807F01000000000080FF0000E01FFFFF7FFF0000E01FFEFF7FFF0000E01F0000C0BF0000E01F0000E09F0000E01F010000800000E01F000000000000E01F010000000000E01F0000E01F0000E01F0000C03F0000E01FFEFF7F7F0000E01FFFFF7F7F0000E01F0000807F0000E01F000080FF0000C03FFFFF7FFF0000C03FFEFF7FFF0000C03F0000C0BF0000C03F0000E09F0000C03F010000800000C03F000000000000C03F010000000000C03F0000E01F0000C03F0000C03F0000C03FFEFF7F7F0000C03FFFFF7F7F0000C03F0000807F0000C03F000080FFFEFF7F7FFFFF7FFFFEFF7F7FFEFF7FFFFEFF7F7F0000C0BFFEFF7F7F0000E09FFEFF7F7F01000080FEFF7F7F00000000FEFF7F7F01000000FEFF7F7F0000E01FFEFF7F7F0000C03FFEFF7F7FFEFF7F7FFEFF7F7FFFFF7F7FFEFF7F7F0000807FFEFF7F7F000080FFFFFF7F7FFFFF7FFFFFFF7F7FFEFF7FFFFFFF7F7F0000C0BFFFFF7F7F0000E09FFFFF7F7F01000080FFFF7F7F00000000FFFF7F7F01000000FFFF7F7F0000E01FFFFF7F7F0000C03FFFFF7F7FFEFF7F7FFFFF7F7FFFFF7F7FFFFF7F7F0000807FFFFF7F7F000080FF0000807FFFFF7FFF0000807FFEFF7FFF0000807F0000C0BF0000807F0000E09F0000807F010000800000807F000000000000807F010000000000807F0000E01F0000807F0000C03F0000807FFEFF7F7F0000807FFFFF7F7F0000807F0000807F0000807F"> : tensor<169xcomplex<f32>>
6+
return %0 : tensor<169xcomplex<f32>>
7+
}
8+
func.func private @expected() -> tensor<169xcomplex<f32>> {
9+
%0 = stablehlo.constant dense<"0x0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000000000000000000000000000000000000000000000001BE7423E727BEE3D965F5A3FB399053F965F5A3FB399053F965F5A3FB399053F965F5A3FB399053F965F5A3FB399053FA0AB744059B015400000807F0000807F0000807F0000807F0000807F0000807F00000000000000000000008000000000000000800000000081242FBEABBB123ED13B44BF2C67243FD13B44BF2C67243FD13B44BF2C67243FD13B44BF2C67243FD13B44BF2C67243F54DD5BC067333840000080FF0000807F000080FF0000807F000080FF0000807F0000000000000000000000000000008000000000000000809D4C813CB5E963BEAADE903DD55B7FBFAADE903DD55B7FBFAADE903DD55B7FBFAADE903DD55B7FBFAADE903DD55B7FBFBA50A23E070E8FC00000807F000080FF0000807F000080FF0000807F000080FF0000000000000000000000000000008000000000000000803C7C643EB4ECC79E0000803F0000E09F0000803F0000E09F0000803F0000E09F0000803F0000E09F0000803F0000E09FFF698F407FF9FAA00000807F000080FF0000807F000080FF0000807F000080FF0000000000000000000000000000008000000000000000803C7C643E000000800000803F010000800000803F010000800000803F010000800000803F010000800000803F01000080FF698F40040000800000807F000080FF0000807F000080FF0000807F000080FF0000000000000000000000000000000000000000000000003C7C643E000000000000803F000000000000803F000000000000803F000000000000803F000000000000803F00000000FF698F40000000000000807F000000000000807F000000000000807F000000000000000000000000000000000000000000000000000000003C7C643E000000000000803F010000000000803F010000000000803F010000000000803F010000000000803F01000000FF698F40040000000000807F0000807F0000807F0000807F0000807F0000807F0000000000000000000000000000000000000000000000003C7C643EB4ECC71E0000803F0000E01F0000803F0000E01F0000803F0000E01F0000803F0000E01F0000803F0000E01FFF698F407FF9FA200000807F0000807F0000807F0000807F0000807F0000807F0000000000000000000000000000000000000000000000009D4C813CB5E9633EAADE903DD55B7F3FAADE903DD55B7F3FAADE903DD55B7F3FAADE903DD55B7F3FAADE903DD55B7F3FBA50A23E070E8F400000807F0000807F0000807F0000807F0000807F0000807F00000000000000000000008000000080000000800000008081242FBEABBB12BED13B44BF2C6724BFD13B44BF2C6724BFD13B44BF2C6724BFD13B44BF2C6724BFD13B44BF2C6724BF54DD5BC0673338C0000080FF000080FF000080FF000080FF000080FF000080FF0000000000000000000000000000008000000000000000801BE7423E727BEEBD965F5A3FB39905BF965F5A3FB39905BF965F5A3FB39905BF965F5A3FB39905BF965F5A3FB39905BFA0AB744059B015C00000807F000080FF0000807F000080FF0000807F000080FF0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F0000C07F"> : tensor<169xcomplex<f32>>
10+
return %0 : tensor<169xcomplex<f32>>
11+
}
12+
func.func public @main() {
13+
%0 = call @samples() : () -> tensor<169xcomplex<f32>>
14+
%1 = "stablehlo.exponential"(%0) : (tensor<169xcomplex<f32>>) -> tensor<169xcomplex<f32>>
15+
%2 = call @expected() : () -> tensor<169xcomplex<f32>>
16+
check.expect_close %1, %2, max_ulp_difference = 3 : tensor<169xcomplex<f32>>, tensor<169xcomplex<f32>>
17+
func.return
18+
}
19+
}

0 commit comments

Comments
 (0)