|
23 | 23 |
|
24 | 24 | import cmath
|
25 | 25 | import math
|
26 |
| -from typing import AbstractSet, Any, Dict, Iterator, Optional, Tuple |
| 26 | +from typing import AbstractSet, Any, Dict, Iterator, Optional, Tuple, Union |
27 | 27 |
|
28 | 28 | import numpy as np
|
29 | 29 | import sympy
|
@@ -52,6 +52,12 @@ def _half_pi_mod_pi(param: 'cirq.TParamVal') -> bool:
|
52 | 52 | return param in (-np.pi / 2, np.pi / 2, -sympy.pi / 2, sympy.pi / 2)
|
53 | 53 |
|
54 | 54 |
|
| 55 | +def _plainvalue(value: Union[int, float, complex, np.number]) -> Union[int, float, complex]: |
| 56 | + """Returns a plain Python number if the given value is a NumPy number. |
| 57 | + Used to avoid a change in repr behavior introduced in NumPy 2.""" |
| 58 | + return value.item() if isinstance(value, np.number) else value |
| 59 | + |
| 60 | + |
55 | 61 | @value.value_equality(approximate=True)
|
56 | 62 | class FSimGate(gate_features.InterchangeableQubitsGate, raw_types.Gate):
|
57 | 63 | r"""Fermionic simulation gate.
|
@@ -196,10 +202,9 @@ def _decompose_(self, qubits) -> Iterator['cirq.OP_TREE']:
|
196 | 202 | yield cirq.CZ(a, b) ** (-self.phi / np.pi)
|
197 | 203 |
|
198 | 204 | def _circuit_diagram_info_(self, args: 'cirq.CircuitDiagramInfoArgs') -> Tuple[str, ...]:
|
199 |
| - with np.printoptions(legacy='1.25'): |
200 |
| - t = args.format_radians(self.theta) |
201 |
| - p = args.format_radians(self.phi) |
202 |
| - return f'FSim({t}, {p})', f'FSim({t}, {p})' |
| 205 | + t = args.format_radians(_plainvalue(self.theta)) |
| 206 | + p = args.format_radians(_plainvalue(self.phi)) |
| 207 | + return f'FSim({t}, {p})', f'FSim({t}, {p})' |
203 | 208 |
|
204 | 209 | def __pow__(self, power) -> 'FSimGate':
|
205 | 210 | return FSimGate(cirq.mul(self.theta, power), cirq.mul(self.phi, power))
|
@@ -477,16 +482,15 @@ def to_exponent(angle_rads: 'cirq.TParamVal') -> 'cirq.TParamVal':
|
477 | 482 | yield cirq.Z(q1) ** to_exponent(after[1])
|
478 | 483 |
|
479 | 484 | def _circuit_diagram_info_(self, args: 'cirq.CircuitDiagramInfoArgs') -> Tuple[str, ...]:
|
480 |
| - with np.printoptions(legacy='1.25'): |
481 |
| - theta = args.format_radians(self.theta) |
482 |
| - zeta = args.format_radians(self.zeta) |
483 |
| - chi = args.format_radians(self.chi) |
484 |
| - gamma = args.format_radians(self.gamma) |
485 |
| - phi = args.format_radians(self.phi) |
486 |
| - return ( |
487 |
| - f'PhFSim({theta}, {zeta}, {chi}, {gamma}, {phi})', |
488 |
| - f'PhFSim({theta}, {zeta}, {chi}, {gamma}, {phi})', |
489 |
| - ) |
| 485 | + theta = args.format_radians(_plainvalue(self.theta)) |
| 486 | + zeta = args.format_radians(_plainvalue(self.zeta)) |
| 487 | + chi = args.format_radians(_plainvalue(self.chi)) |
| 488 | + gamma = args.format_radians(_plainvalue(self.gamma)) |
| 489 | + phi = args.format_radians(_plainvalue(self.phi)) |
| 490 | + return ( |
| 491 | + f'PhFSim({theta}, {zeta}, {chi}, {gamma}, {phi})', |
| 492 | + f'PhFSim({theta}, {zeta}, {chi}, {gamma}, {phi})', |
| 493 | + ) |
490 | 494 |
|
491 | 495 | def __repr__(self) -> str:
|
492 | 496 | theta = proper_repr(self.theta)
|
|
0 commit comments