-
Notifications
You must be signed in to change notification settings - Fork 499
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable stablehlo-complex-math-expander pass. #20853
Conversation
de32a94
to
896c0f4
Compare
@@ -223,6 +226,10 @@ absl::StatusOr<std::string> SerializeUsingVersionedStablehlo( | |||
// Legalize CHLO -> [StableHLO+Shape] -> StableHLO | |||
// Preserve higher-level ops with XLA support. To be replaced by composites. | |||
mlir::PassManager pm(context); | |||
// Expand stablehlo complex math functions such as log_plus_one, etc. | |||
pm.addNestedPass<mlir::func::FuncOp>( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need this one here as well? Not expanding during serialize will keep serialized artifacts smaller. I think all paths should go through the other function so we likely don't need this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, apparently we do need it for CUDA path: removing the pass from SerializeUsingVersionedStablehlo will lead to previous behavior.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The difference of CPU and CUDA paths is as follows:
CPU:
xla::ifrt::PjRtLoadedExecutable::Create
-> xla::TfrtCpuClient::Compile
-> xla::MlirToXlaComputation
CUDA:
xla::ifrt::PjRtLoadedExecutable::Create
-> xla::PjRtCApiClient::Compile
-> xla::Serialize
-> xla::SerializeUsingVersionedStablehlo
that is, MlirToXlaComputation
is never called when on CUDA path.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a todo comment for fixing this? This isn't expected. There should be a single path to XLA HLO and ideally should be the other method
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Imported from GitHub PR #20853 As in the title. Enabling stablehlo-complex-math-expander pass improves the accuracy of complex log_plus_one as follows. The accuracy pattern (obtained by running `functional_algorithms` test `test_accuracy` with JAX backend on CUDA arrays) before enabling the pass (legend: label `=` means ULP differences with respect to reference value is `0`, label `1` - ULP difference is `1`, etc, label `!` - ULP difference is more that `3`, `E` - ULP difference is more that `300`): ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!!!E!!111111111111111111111111111111111111111333!222222211121212122111111211 -1e-3 11=1==111===1=1=1111=11112222!!!!!111111111111111111111111111111111111222222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==1212222=1!!!!111111================1111111111=1112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1===212222=====1!!!!11111========11111111111=====111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1===212122======1==!!!!!1111111111111111==1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1===212122=============!!!!!11111111=============11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1===212222=================!!111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1===212122=================11111=================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1===211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1===212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1===211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1===212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1===212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1===212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1===212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1===211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1===212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1===212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1===211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1===212222================11!1111================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1===212122=============2!!!!11111111=============11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1===211122=========1!!!!1111111111111111=========1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1===212122=====1!!!!111111========111111111======111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==121222111!!!!111111================111111111111112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=11112221!!!!!111111111111111111111111111111111111221222212211111221212211111111= 2e-3 11=1==111===1=1=111111111!!!!!3111111111111111111111111111111111111111333!222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | -------------------------------- | -------------------------------- | -------------------------------- | ------------------------------ | -------------------------------- | | 417 | (-1.4850477e-05-0.0054416545j) | (-4.456342e-08-0.005441682j) | (-4.4564903e-08-0.0054416815j) | (-5.9604645e-08-0.0054416815j) | (-4.4564903e-08-0.005441681j) | | 262 | (-4.604984e-27+9.5909554e-14j) | (-5.6626192e-30+9.5909554e-14j) | (-5.6627178e-30+9.5909554e-14j) | 9.5909554e-14j | (-5.6627178e-30+9.5909554e-14j) | | 205 | (-4.2529954e-19+9.2143404e-10j) | (-7.7920414e-22+9.2143404e-10j) | (-7.791938e-22+9.2143404e-10j) | 9.2143404e-10j | (-7.791938e-22+9.2143404e-10j) | | 196 | (-3.3057245e-07+0.00081537315j) | (1.8443131e-09+0.00081537326j) | (1.8442914e-09+0.00081537326j) | 0.00081537326j | (1.8442914e-09+0.00081537326j) | | 185 | (-2.2565159e-20-2.1264301e-10j) | (4.3367205e-23-2.1264301e-10j) | (4.3366622e-23-2.1264301e-10j) | -2.1264301e-10j | (4.3366622e-23-2.1264301e-10j) | | 117 | (-0.0012349789+0.049288128j) | (-1.9556726e-05+0.049309075j) | (-1.955694e-05+0.04930907j) | (-1.9610121e-05+0.04930907j) | (-1.955694e-05+0.04930907j) | | 110 | (-0.0034784595-0.08273122j) | (-5.018548e-05-0.08283005j) | (-5.018508e-05-0.08283005j) | (-5.018837e-05-0.08283006j) | (-5.018508e-05-0.08283006j) | | 105 | (-9.969826e-30+4.464897e-15j) | (-2.173442e-33+4.464897e-15j) | (-2.1734613e-33+4.464897e-15j) | 4.464897e-15j | (-2.1734613e-33+4.464897e-15j) | | 103 | (-2.1849506e-12-2.0837508e-06j) | (-1.3941756e-14-2.0837508e-06j) | (-1.3941843e-14-2.0837508e-06j) | -2.0837508e-06j | (-1.3941843e-14-2.0837508e-06j) | | ... | ... | ... | ... | ... | ... | | 8 | (-2.3963775e-36-2.2461159e-18j) | (1.261409e-37-2.2461159e-18j) | (1.2614081e-37-2.2461159e-18j) | -2.2461159e-18j | (1.2614081e-37-2.2461159e-18j) | | 8 | (-3.1043605e-12+2.4817625e-06j) | (-2.4787897e-14+2.4817625e-06j) | (-2.4787911e-14+2.4817625e-06j) | 2.4817625e-06j | (-2.4787911e-14+2.4817625e-06j) | | 7 | (-2.0593258e-30-1.9919841e-15j) | (-7.532549e-32-1.9919841e-15j) | (-7.532545e-32-1.9919841e-15j) | -1.9919841e-15j | (-7.532545e-32-1.9919841e-15j) | | 7 | (-1.542265e-12+1.7250827e-06j) | (-5.4309855e-14+1.7250827e-06j) | (-5.430983e-14+1.7250827e-06j) | 1.7250827e-06j | (-5.430983e-14+1.7250827e-06j) | | 6 | (-6.859575e-37-1.138099e-18j) | (-3.8322845e-38-1.138099e-18j) | (-3.8322828e-38-1.138099e-18j) | -1.138099e-18j | (-3.8322828e-38-1.138099e-18j) | | 5 | (0.0002259754-0.08273122j) | (0.0036349818-0.082524665j) | (0.003634983-0.08252467j) | (0.003634991-0.08252467j) | (0.0036349827-0.08252467j) | | 5 | (-5.2773154e-33+1.02234825e-16j) | (-5.1335675e-35+1.02234825e-16j) | (-5.1335646e-35+1.02234825e-16j) | 1.02234825e-16j | (-5.1335646e-35+1.02234825e-16j) | | 4 | (-3.2815045e-08-0.11343931j) | (0.0063931597-0.11295645j) | (0.006393158-0.112956434j) | (0.0063930997-0.11295644j) | (0.0063931583-0.11295645j) | | 4 | (-1.683874e-24-1.7716747e-12j) | (-1.1445849e-25-1.7716747e-12j) | (-1.1445844e-25-1.7716747e-12j) | -1.7716747e-12j | (-1.1445844e-25-1.7716747e-12j) | | 4 | (0.0002259754+0.51158303j) | (0.11641588+0.4727794j) | (0.11641591+0.47277942j) | (0.11641591+0.47277942j) | (0.116415925+0.47277942j) | ``` </details> and after enabling the pass: ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!222221111111111111111111111111111111111111111222222222211121212122111111211 -1e-3 11=1==111===1=1=1111=1111222222111111111111111111111111111111111111111112222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==12122221=====================================11112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1==1212222=======================================111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1==1212122======1====1===============11===1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1==1212122=================1=====================11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1==1212222=================11111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1==1212122==================111==================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1==1211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1==1212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1==1211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1==1212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1==1212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1==1212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1==1212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1==1211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1==1212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1==1212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1==1211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1==1212222==================111==================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1==1212122=======================================11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1==1211122=======================================1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1==1212122=======================================111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==12122211=====================================11112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=1111222122111111111111111111111111111111111111111111222212211111221212211111111= 2e-3 11=1==111===1=1=1111111113222221111111111111111111111111111111111111111122222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | ------------------------ | ----------------------- | ----------------------- | ----------------------- | ----------------------- | | 4 | (-1.1209118-0.11343931j) | (-1.7969997-2.3880699j) | (-1.7970002-2.3880696j) | (-1.7970002-2.3880696j) | (-1.7969997-2.3880699j) | ``` </details> Copybara import of the project: -- 896c0f4 by Pearu Peterson <[email protected]>: Enable stable-complex-math-expander pass. Merging this change closes #20853 FUTURE_COPYBARA_INTEGRATE_REVIEW=#20853 from pearu:pearu/complex-math-expander 896c0f4 PiperOrigin-RevId: 709565571
Imported from GitHub PR #20853 As in the title. Enabling stablehlo-complex-math-expander pass improves the accuracy of complex log_plus_one as follows. The accuracy pattern (obtained by running `functional_algorithms` test `test_accuracy` with JAX backend on CUDA arrays) before enabling the pass (legend: label `=` means ULP differences with respect to reference value is `0`, label `1` - ULP difference is `1`, etc, label `!` - ULP difference is more that `3`, `E` - ULP difference is more that `300`): ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!!!E!!111111111111111111111111111111111111111333!222222211121212122111111211 -1e-3 11=1==111===1=1=1111=11112222!!!!!111111111111111111111111111111111111222222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==1212222=1!!!!111111================1111111111=1112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1===212222=====1!!!!11111========11111111111=====111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1===212122======1==!!!!!1111111111111111==1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1===212122=============!!!!!11111111=============11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1===212222=================!!111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1===212122=================11111=================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1===211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1===212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1===211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1===212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1===212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1===212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1===212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1===211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1===212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1===212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1===211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1===212222================11!1111================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1===212122=============2!!!!11111111=============11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1===211122=========1!!!!1111111111111111=========1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1===212122=====1!!!!111111========111111111======111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==121222111!!!!111111================111111111111112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=11112221!!!!!111111111111111111111111111111111111221222212211111221212211111111= 2e-3 11=1==111===1=1=111111111!!!!!3111111111111111111111111111111111111111333!222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | -------------------------------- | -------------------------------- | -------------------------------- | ------------------------------ | -------------------------------- | | 417 | (-1.4850477e-05-0.0054416545j) | (-4.456342e-08-0.005441682j) | (-4.4564903e-08-0.0054416815j) | (-5.9604645e-08-0.0054416815j) | (-4.4564903e-08-0.005441681j) | | 262 | (-4.604984e-27+9.5909554e-14j) | (-5.6626192e-30+9.5909554e-14j) | (-5.6627178e-30+9.5909554e-14j) | 9.5909554e-14j | (-5.6627178e-30+9.5909554e-14j) | | 205 | (-4.2529954e-19+9.2143404e-10j) | (-7.7920414e-22+9.2143404e-10j) | (-7.791938e-22+9.2143404e-10j) | 9.2143404e-10j | (-7.791938e-22+9.2143404e-10j) | | 196 | (-3.3057245e-07+0.00081537315j) | (1.8443131e-09+0.00081537326j) | (1.8442914e-09+0.00081537326j) | 0.00081537326j | (1.8442914e-09+0.00081537326j) | | 185 | (-2.2565159e-20-2.1264301e-10j) | (4.3367205e-23-2.1264301e-10j) | (4.3366622e-23-2.1264301e-10j) | -2.1264301e-10j | (4.3366622e-23-2.1264301e-10j) | | 117 | (-0.0012349789+0.049288128j) | (-1.9556726e-05+0.049309075j) | (-1.955694e-05+0.04930907j) | (-1.9610121e-05+0.04930907j) | (-1.955694e-05+0.04930907j) | | 110 | (-0.0034784595-0.08273122j) | (-5.018548e-05-0.08283005j) | (-5.018508e-05-0.08283005j) | (-5.018837e-05-0.08283006j) | (-5.018508e-05-0.08283006j) | | 105 | (-9.969826e-30+4.464897e-15j) | (-2.173442e-33+4.464897e-15j) | (-2.1734613e-33+4.464897e-15j) | 4.464897e-15j | (-2.1734613e-33+4.464897e-15j) | | 103 | (-2.1849506e-12-2.0837508e-06j) | (-1.3941756e-14-2.0837508e-06j) | (-1.3941843e-14-2.0837508e-06j) | -2.0837508e-06j | (-1.3941843e-14-2.0837508e-06j) | | ... | ... | ... | ... | ... | ... | | 8 | (-2.3963775e-36-2.2461159e-18j) | (1.261409e-37-2.2461159e-18j) | (1.2614081e-37-2.2461159e-18j) | -2.2461159e-18j | (1.2614081e-37-2.2461159e-18j) | | 8 | (-3.1043605e-12+2.4817625e-06j) | (-2.4787897e-14+2.4817625e-06j) | (-2.4787911e-14+2.4817625e-06j) | 2.4817625e-06j | (-2.4787911e-14+2.4817625e-06j) | | 7 | (-2.0593258e-30-1.9919841e-15j) | (-7.532549e-32-1.9919841e-15j) | (-7.532545e-32-1.9919841e-15j) | -1.9919841e-15j | (-7.532545e-32-1.9919841e-15j) | | 7 | (-1.542265e-12+1.7250827e-06j) | (-5.4309855e-14+1.7250827e-06j) | (-5.430983e-14+1.7250827e-06j) | 1.7250827e-06j | (-5.430983e-14+1.7250827e-06j) | | 6 | (-6.859575e-37-1.138099e-18j) | (-3.8322845e-38-1.138099e-18j) | (-3.8322828e-38-1.138099e-18j) | -1.138099e-18j | (-3.8322828e-38-1.138099e-18j) | | 5 | (0.0002259754-0.08273122j) | (0.0036349818-0.082524665j) | (0.003634983-0.08252467j) | (0.003634991-0.08252467j) | (0.0036349827-0.08252467j) | | 5 | (-5.2773154e-33+1.02234825e-16j) | (-5.1335675e-35+1.02234825e-16j) | (-5.1335646e-35+1.02234825e-16j) | 1.02234825e-16j | (-5.1335646e-35+1.02234825e-16j) | | 4 | (-3.2815045e-08-0.11343931j) | (0.0063931597-0.11295645j) | (0.006393158-0.112956434j) | (0.0063930997-0.11295644j) | (0.0063931583-0.11295645j) | | 4 | (-1.683874e-24-1.7716747e-12j) | (-1.1445849e-25-1.7716747e-12j) | (-1.1445844e-25-1.7716747e-12j) | -1.7716747e-12j | (-1.1445844e-25-1.7716747e-12j) | | 4 | (0.0002259754+0.51158303j) | (0.11641588+0.4727794j) | (0.11641591+0.47277942j) | (0.11641591+0.47277942j) | (0.116415925+0.47277942j) | ``` </details> and after enabling the pass: ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!222221111111111111111111111111111111111111111222222222211121212122111111211 -1e-3 11=1==111===1=1=1111=1111222222111111111111111111111111111111111111111112222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==12122221=====================================11112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1==1212222=======================================111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1==1212122======1====1===============11===1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1==1212122=================1=====================11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1==1212222=================11111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1==1212122==================111==================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1==1211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1==1212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1==1211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1==1212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1==1212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1==1212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1==1212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1==1211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1==1212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1==1212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1==1211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1==1212222==================111==================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1==1212122=======================================11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1==1211122=======================================1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1==1212122=======================================111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==12122211=====================================11112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=1111222122111111111111111111111111111111111111111111222212211111221212211111111= 2e-3 11=1==111===1=1=1111111113222221111111111111111111111111111111111111111122222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | ------------------------ | ----------------------- | ----------------------- | ----------------------- | ----------------------- | | 4 | (-1.1209118-0.11343931j) | (-1.7969997-2.3880699j) | (-1.7970002-2.3880696j) | (-1.7970002-2.3880696j) | (-1.7969997-2.3880699j) | ``` </details> Copybara import of the project: -- 896c0f4 by Pearu Peterson <[email protected]>: Enable stable-complex-math-expander pass. Merging this change closes #20853 FUTURE_COPYBARA_INTEGRATE_REVIEW=#20853 from pearu:pearu/complex-math-expander 896c0f4 PiperOrigin-RevId: 709565571
Imported from GitHub PR openxla/xla#20853 As in the title. Enabling stablehlo-complex-math-expander pass improves the accuracy of complex log_plus_one as follows. The accuracy pattern (obtained by running `functional_algorithms` test `test_accuracy` with JAX backend on CUDA arrays) before enabling the pass (legend: label `=` means ULP differences with respect to reference value is `0`, label `1` - ULP difference is `1`, etc, label `!` - ULP difference is more that `3`, `E` - ULP difference is more that `300`): ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!!!E!!111111111111111111111111111111111111111333!222222211121212122111111211 -1e-3 11=1==111===1=1=1111=11112222!!!!!111111111111111111111111111111111111222222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==1212222=1!!!!111111================1111111111=1112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1===212222=====1!!!!11111========11111111111=====111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1===212122======1==!!!!!1111111111111111==1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1===212122=============!!!!!11111111=============11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1===212222=================!!111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1===212122=================11111=================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1===211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1===212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1===211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1===212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1===212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1===212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1===212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1===211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1===212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1===212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1===211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1===212222================11!1111================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1===212122=============2!!!!11111111=============11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1===211122=========1!!!!1111111111111111=========1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1===212122=====1!!!!111111========111111111======111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==121222111!!!!111111================111111111111112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=11112221!!!!!111111111111111111111111111111111111221222212211111221212211111111= 2e-3 11=1==111===1=1=111111111!!!!!3111111111111111111111111111111111111111333!222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | -------------------------------- | -------------------------------- | -------------------------------- | ------------------------------ | -------------------------------- | | 417 | (-1.4850477e-05-0.0054416545j) | (-4.456342e-08-0.005441682j) | (-4.4564903e-08-0.0054416815j) | (-5.9604645e-08-0.0054416815j) | (-4.4564903e-08-0.005441681j) | | 262 | (-4.604984e-27+9.5909554e-14j) | (-5.6626192e-30+9.5909554e-14j) | (-5.6627178e-30+9.5909554e-14j) | 9.5909554e-14j | (-5.6627178e-30+9.5909554e-14j) | | 205 | (-4.2529954e-19+9.2143404e-10j) | (-7.7920414e-22+9.2143404e-10j) | (-7.791938e-22+9.2143404e-10j) | 9.2143404e-10j | (-7.791938e-22+9.2143404e-10j) | | 196 | (-3.3057245e-07+0.00081537315j) | (1.8443131e-09+0.00081537326j) | (1.8442914e-09+0.00081537326j) | 0.00081537326j | (1.8442914e-09+0.00081537326j) | | 185 | (-2.2565159e-20-2.1264301e-10j) | (4.3367205e-23-2.1264301e-10j) | (4.3366622e-23-2.1264301e-10j) | -2.1264301e-10j | (4.3366622e-23-2.1264301e-10j) | | 117 | (-0.0012349789+0.049288128j) | (-1.9556726e-05+0.049309075j) | (-1.955694e-05+0.04930907j) | (-1.9610121e-05+0.04930907j) | (-1.955694e-05+0.04930907j) | | 110 | (-0.0034784595-0.08273122j) | (-5.018548e-05-0.08283005j) | (-5.018508e-05-0.08283005j) | (-5.018837e-05-0.08283006j) | (-5.018508e-05-0.08283006j) | | 105 | (-9.969826e-30+4.464897e-15j) | (-2.173442e-33+4.464897e-15j) | (-2.1734613e-33+4.464897e-15j) | 4.464897e-15j | (-2.1734613e-33+4.464897e-15j) | | 103 | (-2.1849506e-12-2.0837508e-06j) | (-1.3941756e-14-2.0837508e-06j) | (-1.3941843e-14-2.0837508e-06j) | -2.0837508e-06j | (-1.3941843e-14-2.0837508e-06j) | | ... | ... | ... | ... | ... | ... | | 8 | (-2.3963775e-36-2.2461159e-18j) | (1.261409e-37-2.2461159e-18j) | (1.2614081e-37-2.2461159e-18j) | -2.2461159e-18j | (1.2614081e-37-2.2461159e-18j) | | 8 | (-3.1043605e-12+2.4817625e-06j) | (-2.4787897e-14+2.4817625e-06j) | (-2.4787911e-14+2.4817625e-06j) | 2.4817625e-06j | (-2.4787911e-14+2.4817625e-06j) | | 7 | (-2.0593258e-30-1.9919841e-15j) | (-7.532549e-32-1.9919841e-15j) | (-7.532545e-32-1.9919841e-15j) | -1.9919841e-15j | (-7.532545e-32-1.9919841e-15j) | | 7 | (-1.542265e-12+1.7250827e-06j) | (-5.4309855e-14+1.7250827e-06j) | (-5.430983e-14+1.7250827e-06j) | 1.7250827e-06j | (-5.430983e-14+1.7250827e-06j) | | 6 | (-6.859575e-37-1.138099e-18j) | (-3.8322845e-38-1.138099e-18j) | (-3.8322828e-38-1.138099e-18j) | -1.138099e-18j | (-3.8322828e-38-1.138099e-18j) | | 5 | (0.0002259754-0.08273122j) | (0.0036349818-0.082524665j) | (0.003634983-0.08252467j) | (0.003634991-0.08252467j) | (0.0036349827-0.08252467j) | | 5 | (-5.2773154e-33+1.02234825e-16j) | (-5.1335675e-35+1.02234825e-16j) | (-5.1335646e-35+1.02234825e-16j) | 1.02234825e-16j | (-5.1335646e-35+1.02234825e-16j) | | 4 | (-3.2815045e-08-0.11343931j) | (0.0063931597-0.11295645j) | (0.006393158-0.112956434j) | (0.0063930997-0.11295644j) | (0.0063931583-0.11295645j) | | 4 | (-1.683874e-24-1.7716747e-12j) | (-1.1445849e-25-1.7716747e-12j) | (-1.1445844e-25-1.7716747e-12j) | -1.7716747e-12j | (-1.1445844e-25-1.7716747e-12j) | | 4 | (0.0002259754+0.51158303j) | (0.11641588+0.4727794j) | (0.11641591+0.47277942j) | (0.11641591+0.47277942j) | (0.116415925+0.47277942j) | ``` </details> and after enabling the pass: ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!222221111111111111111111111111111111111111111222222222211121212122111111211 -1e-3 11=1==111===1=1=1111=1111222222111111111111111111111111111111111111111112222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==12122221=====================================11112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1==1212222=======================================111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1==1212122======1====1===============11===1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1==1212122=================1=====================11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1==1212222=================11111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1==1212122==================111==================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1==1211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1==1212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1==1211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1==1212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1==1212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1==1212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1==1212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1==1211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1==1212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1==1212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1==1211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1==1212222==================111==================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1==1212122=======================================11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1==1211122=======================================1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1==1212122=======================================111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==12122211=====================================11112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=1111222122111111111111111111111111111111111111111111222212211111221212211111111= 2e-3 11=1==111===1=1=1111111113222221111111111111111111111111111111111111111122222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | ------------------------ | ----------------------- | ----------------------- | ----------------------- | ----------------------- | | 4 | (-1.1209118-0.11343931j) | (-1.7969997-2.3880699j) | (-1.7970002-2.3880696j) | (-1.7970002-2.3880696j) | (-1.7969997-2.3880699j) | ``` </details> Copybara import of the project: -- 896c0f41247ce076cb8dabb88220cb201df8f22c by Pearu Peterson <[email protected]>: Enable stable-complex-math-expander pass. Merging this change closes #20853 FUTURE_COPYBARA_INTEGRATE_REVIEW=openxla/xla#20853 from pearu:pearu/complex-math-expander 896c0f41247ce076cb8dabb88220cb201df8f22c PiperOrigin-RevId: 709565571
Imported from GitHub PR openxla/xla#20853 As in the title. Enabling stablehlo-complex-math-expander pass improves the accuracy of complex log_plus_one as follows. The accuracy pattern (obtained by running `functional_algorithms` test `test_accuracy` with JAX backend on CUDA arrays) before enabling the pass (legend: label `=` means ULP differences with respect to reference value is `0`, label `1` - ULP difference is `1`, etc, label `!` - ULP difference is more that `3`, `E` - ULP difference is more that `300`): ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!!!E!!111111111111111111111111111111111111111333!222222211121212122111111211 -1e-3 11=1==111===1=1=1111=11112222!!!!!111111111111111111111111111111111111222222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==1212222=1!!!!111111================1111111111=1112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1===212222=====1!!!!11111========11111111111=====111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1===212122======1==!!!!!1111111111111111==1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1===212122=============!!!!!11111111=============11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1===212222=================!!111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1===212122=================11111=================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1===211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1===212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1===211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1===212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1===212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1===212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1===212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1===211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1===212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1===212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1===211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1===212222================11!1111================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1===212122=============2!!!!11111111=============11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1===211122=========1!!!!1111111111111111=========1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1===212122=====1!!!!111111========111111111======111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==121222111!!!!111111================111111111111112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=11112221!!!!!111111111111111111111111111111111111221222212211111221212211111111= 2e-3 11=1==111===1=1=111111111!!!!!3111111111111111111111111111111111111111333!222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | -------------------------------- | -------------------------------- | -------------------------------- | ------------------------------ | -------------------------------- | | 417 | (-1.4850477e-05-0.0054416545j) | (-4.456342e-08-0.005441682j) | (-4.4564903e-08-0.0054416815j) | (-5.9604645e-08-0.0054416815j) | (-4.4564903e-08-0.005441681j) | | 262 | (-4.604984e-27+9.5909554e-14j) | (-5.6626192e-30+9.5909554e-14j) | (-5.6627178e-30+9.5909554e-14j) | 9.5909554e-14j | (-5.6627178e-30+9.5909554e-14j) | | 205 | (-4.2529954e-19+9.2143404e-10j) | (-7.7920414e-22+9.2143404e-10j) | (-7.791938e-22+9.2143404e-10j) | 9.2143404e-10j | (-7.791938e-22+9.2143404e-10j) | | 196 | (-3.3057245e-07+0.00081537315j) | (1.8443131e-09+0.00081537326j) | (1.8442914e-09+0.00081537326j) | 0.00081537326j | (1.8442914e-09+0.00081537326j) | | 185 | (-2.2565159e-20-2.1264301e-10j) | (4.3367205e-23-2.1264301e-10j) | (4.3366622e-23-2.1264301e-10j) | -2.1264301e-10j | (4.3366622e-23-2.1264301e-10j) | | 117 | (-0.0012349789+0.049288128j) | (-1.9556726e-05+0.049309075j) | (-1.955694e-05+0.04930907j) | (-1.9610121e-05+0.04930907j) | (-1.955694e-05+0.04930907j) | | 110 | (-0.0034784595-0.08273122j) | (-5.018548e-05-0.08283005j) | (-5.018508e-05-0.08283005j) | (-5.018837e-05-0.08283006j) | (-5.018508e-05-0.08283006j) | | 105 | (-9.969826e-30+4.464897e-15j) | (-2.173442e-33+4.464897e-15j) | (-2.1734613e-33+4.464897e-15j) | 4.464897e-15j | (-2.1734613e-33+4.464897e-15j) | | 103 | (-2.1849506e-12-2.0837508e-06j) | (-1.3941756e-14-2.0837508e-06j) | (-1.3941843e-14-2.0837508e-06j) | -2.0837508e-06j | (-1.3941843e-14-2.0837508e-06j) | | ... | ... | ... | ... | ... | ... | | 8 | (-2.3963775e-36-2.2461159e-18j) | (1.261409e-37-2.2461159e-18j) | (1.2614081e-37-2.2461159e-18j) | -2.2461159e-18j | (1.2614081e-37-2.2461159e-18j) | | 8 | (-3.1043605e-12+2.4817625e-06j) | (-2.4787897e-14+2.4817625e-06j) | (-2.4787911e-14+2.4817625e-06j) | 2.4817625e-06j | (-2.4787911e-14+2.4817625e-06j) | | 7 | (-2.0593258e-30-1.9919841e-15j) | (-7.532549e-32-1.9919841e-15j) | (-7.532545e-32-1.9919841e-15j) | -1.9919841e-15j | (-7.532545e-32-1.9919841e-15j) | | 7 | (-1.542265e-12+1.7250827e-06j) | (-5.4309855e-14+1.7250827e-06j) | (-5.430983e-14+1.7250827e-06j) | 1.7250827e-06j | (-5.430983e-14+1.7250827e-06j) | | 6 | (-6.859575e-37-1.138099e-18j) | (-3.8322845e-38-1.138099e-18j) | (-3.8322828e-38-1.138099e-18j) | -1.138099e-18j | (-3.8322828e-38-1.138099e-18j) | | 5 | (0.0002259754-0.08273122j) | (0.0036349818-0.082524665j) | (0.003634983-0.08252467j) | (0.003634991-0.08252467j) | (0.0036349827-0.08252467j) | | 5 | (-5.2773154e-33+1.02234825e-16j) | (-5.1335675e-35+1.02234825e-16j) | (-5.1335646e-35+1.02234825e-16j) | 1.02234825e-16j | (-5.1335646e-35+1.02234825e-16j) | | 4 | (-3.2815045e-08-0.11343931j) | (0.0063931597-0.11295645j) | (0.006393158-0.112956434j) | (0.0063930997-0.11295644j) | (0.0063931583-0.11295645j) | | 4 | (-1.683874e-24-1.7716747e-12j) | (-1.1445849e-25-1.7716747e-12j) | (-1.1445844e-25-1.7716747e-12j) | -1.7716747e-12j | (-1.1445844e-25-1.7716747e-12j) | | 4 | (0.0002259754+0.51158303j) | (0.11641588+0.4727794j) | (0.11641591+0.47277942j) | (0.11641591+0.47277942j) | (0.116415925+0.47277942j) | ``` </details> and after enabling the pass: ``` -inf 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112 -4e35 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112221 -4e32 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121 -5e29 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111211 -5e26 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 -6e23 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111122111111111 -6e20 11=1==1111111111111===============================================================1111122122111111111 -7e17 11=1==111111111111111===========================================================111112222222111111111 -8e14 11=1==111=1111111111111111111111111111111111111111111111111111111111111111111111111122222122111111111 -9e11 11=1==111===11111111111111111111111111111111111111111111111111111111111111111111111221122122111111111 -9e8 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111111121112122111121211 -1e6 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111222211121122122111121121 -1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111112221111111121122111111211 -1 11=1==111===1=1=111111111!222221111111111111111111111111111111111111111222222222211121212122111111211 -1e-3 11=1==111===1=1=1111=1111222222111111111111111111111111111111111111111112222211221111111211211111111= -2e-6 11=1==111===1=1=1111=1==12122221=====================================11112122121211111121122111111=11 -2e-9 11=1==111===1=1=1111=1==1212222=======================================111212212121112211212211111111= -2e-12 11=1==111===1=1=1111=1==1212122======1====1===============11===1======111222212121112112212211=111=1= -2e-15 11=1==111===1=1=1111=1==1212122=================1=====================11121221222111211221111111=1=1= -2e-18 11=1==111===1=1=1111=1==1212222=================11111=================11122221222111111111=111=1=1=1= -2e-21 11=1==111===1=1=1111=1==1212122==================111==================111212212121112111=1111==1=1=1= -3e-24 11=1==111===1=1=1111=1==1211122===================1===================11121221212111111111=11==1=1=1= -3e-27 11=1==111===1=1=1111=1==1212222=======================================111222212221111111===11==1=1=1= -3e-30 11=1==111===1=1=1111=1==1211122=======================================111222212121111111===11==1=1=1= -4e-33 11=1==111===1=1=1111=1==1212222=======================================111222211111111=11===11==1=1=1= -4e-36 11=1==111===1=1=1111=1==1212221=======================================11122121==111=1=11===11==1=1=1= 0 11=1==111===1=1=1111=1==1212221=======================================111222211=11==1=11===11==1=1=1= 4e-36 11=1==111===1=1=1111=1==1212122=======================================111212212111111=11===11==1=1=1= 4e-33 11=1==111===1=1=1111=1==1211122=======================================111212212111=11111===11==1=1=1= 3e-30 11=1==111===1=1=1111=1==1212122=======================================111222212221111111===11==1=1=1= 3e-27 11=1==111===1=1=1111=1==1212222===================1===================11122221222111111111=11==1=1=1= 3e-24 11=1==111===1=1=1111=1==1211122==================111==================111222212121111111=1111==1=1=1= 3e-21 11=1==111===1=1=1111=1==1212222==================111==================11121221122111111121=111=1=1=1= 2e-18 11=1==111===1=1=1111=1==1212122=======================================11122221222111121121111111=1=1= 2e-15 11=1==111===1=1=1111=1==1211122=======================================1112122121211112222122111111=1= 2e-12 11=1==111===1=1=1111=1==1212122=======================================111222212121112112112211111111= 2e-9 11=1==111===1=1=1111=1==12122211=====================================11112222122211111212122111111=11 2e-6 11=1==111===1=1=1111=1111222122111111111111111111111111111111111111111111222212211111221212211111111= 2e-3 11=1==111===1=1=1111111113222221111111111111111111111111111111111111111122222211211121121122111111111 2 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111122222111121112122111121121 1e3 11=1==111===1=1=1111111111111111111111111111111111111111111111111111111111111122211122112122111111111 1e6 11=1==111===1=111111111111111111111111111111111111111111111111111111111111111111221112121122111111211 1e9 11=1==111===1111111111111===================================================1111122221112122111111111 1e12 11=1==111=1111111111111=======================================================11111122222122111111211 1e15 11=1==11111111111111111111111111111111111111111111111111111111111111111111111111111111122122111111111 9e17 11=1==1111111111111===============================================================1111122122111111111 8e20 11=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222121121111 8e23 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222111211 7e26 1111111111111===========================================================================1111122221111 6e29 11111111111===============================================================================11111222221 6e32 111111111===================================================================================111112211 5e35 1111111=======================================================================================1111112 -inf -3e29 -2e20 -1e11 -1e2 -8e-8 -6e-1 -4e-2 -3e-3 1e-33 1e-24 2e-15 3e-6 4e3 5e12 8e21 1e31 ``` <details> ``` | ULP-difference | z | jax:log1p(z) | mpmath:log1p(z) | numpy:log1p(z) | fa:log1p(z) | | -------------- | ------------------------ | ----------------------- | ----------------------- | ----------------------- | ----------------------- | | 4 | (-1.1209118-0.11343931j) | (-1.7969997-2.3880699j) | (-1.7970002-2.3880696j) | (-1.7970002-2.3880696j) | (-1.7969997-2.3880699j) | ``` </details> Copybara import of the project: -- 896c0f41247ce076cb8dabb88220cb201df8f22c by Pearu Peterson <[email protected]>: Enable stable-complex-math-expander pass. Merging this change closes #20853 PiperOrigin-RevId: 709846266
As in the title.
Enabling stablehlo-complex-math-expander pass improves the accuracy of complex log_plus_one as follows. The accuracy pattern (obtained by running
functional_algorithms
testtest_accuracy
with JAX backend on CUDA arrays) before enabling the pass (legend: label=
means ULP differences with respect to reference value is0
, label1
- ULP difference is1
, etc, label!
- ULP difference is more that3
,E
- ULP difference is more that300
):and after enabling the pass: