Test that we can use complex numbers inside kernel functions.
()
| 508 | |
| 509 | |
| 510 | def test_np_complex64_use(): |
| 511 | """Test that we can use complex numbers inside kernel functions.""" |
| 512 | |
| 513 | # Use a complex inside np in a kernel (sin) |
| 514 | @cudaq.kernel |
| 515 | def complex_np_use_real() -> np.float32: |
| 516 | v = np.sin(np.complex64((np.pi / 2. + 1) + 1j)) |
| 517 | return v.real |
| 518 | |
| 519 | t = np.sin(np.complex64((np.pi / 2. + 1) + 1j)).real |
| 520 | assert is_close(t, complex_np_use_real()) |
| 521 | |
| 522 | @cudaq.kernel |
| 523 | def complex_np_use_imag() -> np.float32: |
| 524 | v = np.sin(np.complex64((np.pi / 2. + 1) + 1j)) |
| 525 | return v.imag |
| 526 | |
| 527 | t = np.sin(np.complex64((np.pi / 2. + 1) + 1j)).imag |
| 528 | assert is_close(t, complex_np_use_imag()) |
| 529 | |
| 530 | # Use a complex inside np in a kernel (cos) |
| 531 | @cudaq.kernel |
| 532 | def complex_np_use_real() -> np.float32: |
| 533 | v = np.cos(np.complex64((np.pi / 2. + 1) + 1j)) |
| 534 | return v.real |
| 535 | |
| 536 | t = np.cos(np.complex64((np.pi / 2. + 1) + 1j)).real |
| 537 | assert is_close(t, complex_np_use_real()) |
| 538 | |
| 539 | @cudaq.kernel |
| 540 | def complex_np_use_imag() -> np.float32: |
| 541 | v = np.cos(np.complex64((np.pi / 2. + 1) + 1j)) |
| 542 | return v.imag |
| 543 | |
| 544 | t = np.cos(np.complex64((np.pi / 2. + 1) + 1j)).imag |
| 545 | assert is_close(t, complex_np_use_imag()) |
| 546 | |
| 547 | # Use a complex inside np in a kernel (sqrt) |
| 548 | @cudaq.kernel |
| 549 | def complex_np_use_real() -> np.float32: |
| 550 | v = np.sqrt(np.complex64((np.pi / 2. + 1) + 1j)) |
| 551 | return v.real |
| 552 | |
| 553 | t = np.sqrt(np.complex64((np.pi / 2. + 1) + 1j)).real |
| 554 | assert is_close(t, complex_np_use_real()) |
| 555 | |
| 556 | @cudaq.kernel |
| 557 | def complex_np_use_imag() -> np.float32: |
| 558 | v = np.sqrt(np.complex64((np.pi / 2. + 1) + 1j)) |
| 559 | return v.imag |
| 560 | |
| 561 | t = np.sqrt(np.complex64((np.pi / 2. + 1) + 1j)).imag |
| 562 | assert is_close(t, complex_np_use_imag()) |
| 563 | |
| 564 | # Use a complex inside np in a kernel (exp) |
| 565 | @cudaq.kernel |
| 566 | def complex_np_use_real() -> np.float32: |
| 567 | v = np.exp(np.complex64((np.pi / 2. + 1) + 1j)) |
nothing calls this directly
no test coverage detected