Skip to content

Commit 859a9f1

Browse files
authored
fix: Proxies for singledispatch functions (#40)
Because the automatically generated documentation for `singledispatch` functions is simply awful
1 parent 696844a commit 859a9f1

File tree

5 files changed

+98
-86
lines changed

5 files changed

+98
-86
lines changed

src/braket/default_simulator/gate_operations.py

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
)
3030

3131

32-
@singledispatch
3332
def from_braket_instruction(instruction) -> GateOperation:
3433
""" Instantiates the concrete `GateOperation` object from the specified braket instruction.
3534
@@ -43,6 +42,11 @@ def from_braket_instruction(instruction) -> GateOperation:
4342
ValueError: If no concrete `GateOperation` class has been registered
4443
for the instruction type.
4544
"""
45+
return _from_braket_instruction(instruction)
46+
47+
48+
@singledispatch
49+
def _from_braket_instruction(instruction):
4650
raise ValueError(f"Instruction {instruction} not recognized")
4751

4852

@@ -61,7 +65,7 @@ def targets(self) -> Tuple[int, ...]:
6165
return self._targets
6266

6367

64-
@from_braket_instruction.register(braket_instruction.I)
68+
@_from_braket_instruction.register(braket_instruction.I)
6569
def _i(instruction) -> Identity:
6670
return Identity([instruction.target])
6771

@@ -81,7 +85,7 @@ def targets(self) -> Tuple[int, ...]:
8185
return self._targets
8286

8387

84-
@from_braket_instruction.register(braket_instruction.H)
88+
@_from_braket_instruction.register(braket_instruction.H)
8589
def _hadamard(instruction) -> Hadamard:
8690
return Hadamard([instruction.target])
8791

@@ -101,7 +105,7 @@ def targets(self) -> Tuple[int, ...]:
101105
return self._targets
102106

103107

104-
@from_braket_instruction.register(braket_instruction.X)
108+
@_from_braket_instruction.register(braket_instruction.X)
105109
def _pauli_x(instruction) -> PauliX:
106110
return PauliX([instruction.target])
107111

@@ -121,7 +125,7 @@ def targets(self) -> Tuple[int, ...]:
121125
return self._targets
122126

123127

124-
@from_braket_instruction.register(braket_instruction.Y)
128+
@_from_braket_instruction.register(braket_instruction.Y)
125129
def _pauli_y(instruction) -> PauliY:
126130
return PauliY([instruction.target])
127131

@@ -141,7 +145,7 @@ def targets(self) -> Tuple[int, ...]:
141145
return self._targets
142146

143147

144-
@from_braket_instruction.register(braket_instruction.Z)
148+
@_from_braket_instruction.register(braket_instruction.Z)
145149
def _pauli_z(instruction) -> PauliZ:
146150
return PauliZ([instruction.target])
147151

@@ -161,7 +165,7 @@ def targets(self) -> Tuple[int, ...]:
161165
return self._targets
162166

163167

164-
@from_braket_instruction.register(braket_instruction.CNot)
168+
@_from_braket_instruction.register(braket_instruction.CNot)
165169
def _cx(instruction) -> CX:
166170
return CX([instruction.control, instruction.target])
167171

@@ -181,7 +185,7 @@ def targets(self) -> Tuple[int, ...]:
181185
return self._targets
182186

183187

184-
@from_braket_instruction.register(braket_instruction.CY)
188+
@_from_braket_instruction.register(braket_instruction.CY)
185189
def _cy(instruction) -> CY:
186190
return CY([instruction.control, instruction.target])
187191

@@ -201,7 +205,7 @@ def targets(self) -> Tuple[int, ...]:
201205
return self._targets
202206

203207

204-
@from_braket_instruction.register(braket_instruction.CZ)
208+
@_from_braket_instruction.register(braket_instruction.CZ)
205209
def _cz(instruction) -> CZ:
206210
return CZ([instruction.control, instruction.target])
207211

@@ -221,7 +225,7 @@ def targets(self) -> Tuple[int, ...]:
221225
return self._targets
222226

223227

224-
@from_braket_instruction.register(braket_instruction.S)
228+
@_from_braket_instruction.register(braket_instruction.S)
225229
def _s(instruction) -> S:
226230
return S([instruction.target])
227231

@@ -241,7 +245,7 @@ def targets(self) -> Tuple[int, ...]:
241245
return self._targets
242246

243247

244-
@from_braket_instruction.register(braket_instruction.Si)
248+
@_from_braket_instruction.register(braket_instruction.Si)
245249
def _si(instruction) -> Si:
246250
return Si([instruction.target])
247251

@@ -261,7 +265,7 @@ def targets(self) -> Tuple[int, ...]:
261265
return self._targets
262266

263267

264-
@from_braket_instruction.register(braket_instruction.T)
268+
@_from_braket_instruction.register(braket_instruction.T)
265269
def _t(instruction) -> T:
266270
return T([instruction.target])
267271

@@ -281,7 +285,7 @@ def targets(self) -> Tuple[int, ...]:
281285
return self._targets
282286

283287

284-
@from_braket_instruction.register(braket_instruction.Ti)
288+
@_from_braket_instruction.register(braket_instruction.Ti)
285289
def _ti(instruction) -> Ti:
286290
return Ti([instruction.target])
287291

@@ -301,7 +305,7 @@ def targets(self) -> Tuple[int, ...]:
301305
return self._targets
302306

303307

304-
@from_braket_instruction.register(braket_instruction.V)
308+
@_from_braket_instruction.register(braket_instruction.V)
305309
def _v(instruction) -> V:
306310
return V([instruction.target])
307311

@@ -321,7 +325,7 @@ def targets(self) -> Tuple[int, ...]:
321325
return self._targets
322326

323327

324-
@from_braket_instruction.register(braket_instruction.Vi)
328+
@_from_braket_instruction.register(braket_instruction.Vi)
325329
def _vi(instruction) -> Vi:
326330
return Vi([instruction.target])
327331

@@ -342,7 +346,7 @@ def targets(self) -> Tuple[int, ...]:
342346
return self._targets
343347

344348

345-
@from_braket_instruction.register(braket_instruction.PhaseShift)
349+
@_from_braket_instruction.register(braket_instruction.PhaseShift)
346350
def _phase_shift(instruction) -> PhaseShift:
347351
return PhaseShift([instruction.target], instruction.angle)
348352

@@ -363,7 +367,7 @@ def targets(self) -> Tuple[int, ...]:
363367
return self._targets
364368

365369

366-
@from_braket_instruction.register(braket_instruction.CPhaseShift)
370+
@_from_braket_instruction.register(braket_instruction.CPhaseShift)
367371
def _c_phase_shift(instruction) -> CPhaseShift:
368372
return CPhaseShift([instruction.control, instruction.target], instruction.angle)
369373

@@ -384,7 +388,7 @@ def targets(self) -> Tuple[int, ...]:
384388
return self._targets
385389

386390

387-
@from_braket_instruction.register(braket_instruction.CPhaseShift00)
391+
@_from_braket_instruction.register(braket_instruction.CPhaseShift00)
388392
def _c_phase_shift_00(instruction) -> CPhaseShift00:
389393
return CPhaseShift00([instruction.control, instruction.target], instruction.angle)
390394

@@ -405,7 +409,7 @@ def targets(self) -> Tuple[int, ...]:
405409
return self._targets
406410

407411

408-
@from_braket_instruction.register(braket_instruction.CPhaseShift01)
412+
@_from_braket_instruction.register(braket_instruction.CPhaseShift01)
409413
def _c_phase_shift_01(instruction) -> CPhaseShift01:
410414
return CPhaseShift01([instruction.control, instruction.target], instruction.angle)
411415

@@ -426,7 +430,7 @@ def targets(self) -> Tuple[int, ...]:
426430
return self._targets
427431

428432

429-
@from_braket_instruction.register(braket_instruction.CPhaseShift10)
433+
@_from_braket_instruction.register(braket_instruction.CPhaseShift10)
430434
def _c_phase_shift_10(instruction) -> CPhaseShift10:
431435
return CPhaseShift10([instruction.control, instruction.target], instruction.angle)
432436

@@ -449,7 +453,7 @@ def targets(self) -> Tuple[int, ...]:
449453
return self._targets
450454

451455

452-
@from_braket_instruction.register(braket_instruction.Rx)
456+
@_from_braket_instruction.register(braket_instruction.Rx)
453457
def _rot_x(instruction) -> RotX:
454458
return RotX([instruction.target], instruction.angle)
455459

@@ -472,7 +476,7 @@ def targets(self) -> Tuple[int, ...]:
472476
return self._targets
473477

474478

475-
@from_braket_instruction.register(braket_instruction.Ry)
479+
@_from_braket_instruction.register(braket_instruction.Ry)
476480
def _rot_y(instruction) -> RotY:
477481
return RotY([instruction.target], instruction.angle)
478482

@@ -495,7 +499,7 @@ def targets(self) -> Tuple[int, ...]:
495499
return self._targets
496500

497501

498-
@from_braket_instruction.register(braket_instruction.Rz)
502+
@_from_braket_instruction.register(braket_instruction.Rz)
499503
def _rot_z(instruction) -> RotZ:
500504
return RotZ([instruction.target], instruction.angle)
501505

@@ -515,7 +519,7 @@ def targets(self) -> Tuple[int, ...]:
515519
return self._targets
516520

517521

518-
@from_braket_instruction.register(braket_instruction.Swap)
522+
@_from_braket_instruction.register(braket_instruction.Swap)
519523
def _swap(instruction) -> Swap:
520524
return Swap(instruction.targets)
521525

@@ -543,7 +547,7 @@ def targets(self) -> Tuple[int, ...]:
543547
return self._targets
544548

545549

546-
@from_braket_instruction.register(braket_instruction.ISwap)
550+
@_from_braket_instruction.register(braket_instruction.ISwap)
547551
def _iswap(instruction) -> ISwap:
548552
return ISwap(instruction.targets)
549553

@@ -572,7 +576,7 @@ def targets(self) -> Tuple[int, ...]:
572576
return self._targets
573577

574578

575-
@from_braket_instruction.register(braket_instruction.PSwap)
579+
@_from_braket_instruction.register(braket_instruction.PSwap)
576580
def _pswap(instruction) -> PSwap:
577581
return PSwap(instruction.targets, instruction.angle)
578582

@@ -606,7 +610,7 @@ def targets(self) -> Tuple[int, ...]:
606610
return self._targets
607611

608612

609-
@from_braket_instruction.register(braket_instruction.XY)
613+
@_from_braket_instruction.register(braket_instruction.XY)
610614
def _xy(instruction) -> XY:
611615
return XY(instruction.targets, instruction.angle)
612616

@@ -639,7 +643,7 @@ def targets(self) -> Tuple[int, ...]:
639643
return self._targets
640644

641645

642-
@from_braket_instruction.register(braket_instruction.XX)
646+
@_from_braket_instruction.register(braket_instruction.XX)
643647
def _xx(instruction) -> XX:
644648
return XX(instruction.targets, instruction.angle)
645649

@@ -672,7 +676,7 @@ def targets(self) -> Tuple[int, ...]:
672676
return self._targets
673677

674678

675-
@from_braket_instruction.register(braket_instruction.YY)
679+
@_from_braket_instruction.register(braket_instruction.YY)
676680
def _yy(instruction) -> YY:
677681
return YY(instruction.targets, instruction.angle)
678682

@@ -705,7 +709,7 @@ def targets(self) -> Tuple[int, ...]:
705709
return self._targets
706710

707711

708-
@from_braket_instruction.register(braket_instruction.ZZ)
712+
@_from_braket_instruction.register(braket_instruction.ZZ)
709713
def _zz(instruction) -> ZZ:
710714
return ZZ(instruction.targets, instruction.angle)
711715

@@ -737,7 +741,7 @@ def targets(self) -> Tuple[int, ...]:
737741
return self._targets
738742

739743

740-
@from_braket_instruction.register(braket_instruction.CCNot)
744+
@_from_braket_instruction.register(braket_instruction.CCNot)
741745
def _ccnot(instruction) -> CCNot:
742746
return CCNot([*instruction.controls, instruction.target])
743747

@@ -769,7 +773,7 @@ def targets(self) -> Tuple[int, ...]:
769773
return self._targets
770774

771775

772-
@from_braket_instruction.register(braket_instruction.CSwap)
776+
@_from_braket_instruction.register(braket_instruction.CSwap)
773777
def _cswap(instruction) -> CSwap:
774778
return CSwap([instruction.control, *instruction.targets])
775779

@@ -793,6 +797,6 @@ def targets(self) -> Tuple[int, ...]:
793797
return self._targets
794798

795799

796-
@from_braket_instruction.register(braket_instruction.Unitary)
800+
@_from_braket_instruction.register(braket_instruction.Unitary)
797801
def _unitary(instruction) -> Unitary:
798802
return Unitary(instruction.targets, ir_matrix_to_ndarray(instruction.matrix))

src/braket/default_simulator/operation_helpers.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# language governing permissions and limitations under the License.
1313

1414
from functools import lru_cache, singledispatch
15-
from typing import List, Tuple
15+
from typing import List, Optional, Tuple
1616

1717
import numpy as np
1818

@@ -92,8 +92,7 @@ def check_hermitian(matrix: np.ndarray):
9292
raise ValueError(f"{matrix} is not Hermitian")
9393

9494

95-
@singledispatch
96-
def get_matrix(operation):
95+
def get_matrix(operation) -> Optional[np.ndarray]:
9796
""" Gets the matrix of the given operation.
9897
9998
For a `GateOperation`, this is the gate's unitary matrix, and for an `Observable`,
@@ -105,14 +104,19 @@ def get_matrix(operation):
105104
Returns:
106105
np.ndarray: The matrix of the operation
107106
"""
107+
return _get_matrix(operation)
108+
109+
110+
@singledispatch
111+
def _get_matrix(operation):
108112
raise ValueError(f"Unrecognized operation: {operation}")
109113

110114

111-
@get_matrix.register
115+
@_get_matrix.register
112116
def _(gate: GateOperation):
113117
return gate.matrix
114118

115119

116-
@get_matrix.register
120+
@_get_matrix.register
117121
def _(observable: Observable):
118122
return observable.diagonalizing_matrix

0 commit comments

Comments
 (0)