From 00fc8ba1eb54b56a47af1a41ea6b6325185c00f6 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:25:04 +0000 Subject: [PATCH 01/25] Use only apply_gate --- qermit/noise_model/qermit_pauli.py | 52 +++++++++++++++--------------- tests/noise_model_test.py | 34 +++++++++---------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 95b827bf..a05fdd9d 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -265,33 +265,33 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): """ if op_type == OpType.H: - self.H(qubit=qubits[0]) + self._H(qubit=qubits[0]) elif op_type == OpType.S: - self.S(qubit=qubits[0]) + self._S(qubit=qubits[0]) elif op_type == OpType.CX: - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) elif op_type == OpType.Z: - self.S(qubit=qubits[0]) - self.S(qubit=qubits[0]) + self._S(qubit=qubits[0]) + self._S(qubit=qubits[0]) elif op_type == OpType.Sdg: - self.S(qubit=qubits[0]) - self.S(qubit=qubits[0]) - self.S(qubit=qubits[0]) + self._S(qubit=qubits[0]) + self._S(qubit=qubits[0]) + self._S(qubit=qubits[0]) elif op_type == OpType.X: - self.H(qubit=qubits[0]) + self._H(qubit=qubits[0]) self.apply_gate(op_type=OpType.Z, qubits=qubits) - self.H(qubit=qubits[0]) + self._H(qubit=qubits[0]) elif op_type == OpType.Y: self.apply_gate(op_type=OpType.Z, qubits=qubits) self.apply_gate(op_type=OpType.X, qubits=qubits) elif op_type == OpType.CZ: - self.H(qubit=qubits[1]) - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self.H(qubit=qubits[1]) + self._H(qubit=qubits[1]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._H(qubit=qubits[1]) elif op_type == OpType.SWAP: - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self.CX(control_qubit=qubits[1], target_qubit=qubits[0]) - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._CX(control_qubit=qubits[1], target_qubit=qubits[0]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) elif op_type == OpType.PhasedX: params = kwargs.get("params", None) if all( @@ -309,7 +309,7 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): angle = round(angle, 1) for _ in range(int((angle % 2) // 0.5)): - self.S(qubit=qubits[0]) + self._S(qubit=qubits[0]) else: raise Exception(f"{angle} is not a clifford angle.") elif op_type == OpType.Rx: @@ -317,16 +317,16 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): angle = params[0] if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): angle = round(angle, 1) - self.H(qubit=qubits[0]) + self._H(qubit=qubits[0]) for _ in range(int((angle % 2) // 0.5)): - self.S(qubit=qubits[0]) - self.H(qubit=qubits[0]) + self._S(qubit=qubits[0]) + self._H(qubit=qubits[0]) else: raise Exception(f"{angle} is not a clifford angle.") elif op_type == OpType.ZZMax: - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self.S(qubit=qubits[1]) - self.CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) + self._S(qubit=qubits[1]) + self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) elif op_type == OpType.ZZPhase: params = kwargs.get("params", None) angle = params[0] @@ -344,7 +344,7 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): + "Please use only Clifford gates." ) - def S(self, qubit: Qubit): + def _S(self, qubit: Qubit): """Act S operation on the pauli. In particular this transforms the pauli (i)^{phase}X^{X_liist}Z^{Z_list} to (i)^{phase}SX^{X_liist}Z^{Z_list}S^{dagger}. @@ -357,7 +357,7 @@ def S(self, qubit: Qubit): self.phase += self.X_list[qubit] self.phase %= 4 - def H(self, qubit: Qubit): + def _H(self, qubit: Qubit): """Act H operation. In particular this transforms the Pauli (i)^{phase}X^{X_liist}Z^{Z_list} to H(i)^{phase}X^{X_liist}Z^{Z_list}H^{dagger}. @@ -372,7 +372,7 @@ def H(self, qubit: Qubit): self.X_list[qubit] = self.Z_list[qubit] self.Z_list[qubit] = temp_X - def CX(self, control_qubit: Qubit, target_qubit: Qubit): + def _CX(self, control_qubit: Qubit, target_qubit: Qubit): """Act CX operation. In particular this transforms the Pauli (i)^{phase}X^{X_liist}Z^{Z_list} to CX(i)^{phase}X^{X_liist}Z^{Z_list}CX^{dagger}. diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index b719f252..60fb942d 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -617,13 +617,13 @@ def test_H() -> None: qubit_list = [Qubit(0)] pauli = QermitPauli(Z_list=[1], X_list=[0], qubit_list=qubit_list) - pauli.H(qubit=qubit_list[0]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( qubits=qubit_list, paulis=[Pauli.X] ) assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.H(qubit=qubit_list[0]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( qubits=qubit_list, paulis=[Pauli.Z] ) @@ -697,8 +697,8 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.H(qubit_list[0]) - pauli.S(qubit_list[0]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.Y, Pauli.Z, Pauli.Z] @@ -706,7 +706,7 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.CX(qubit_list[0], qubit_list[1]) + pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[0], qubit_list[1]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.Y, Pauli.Z] @@ -714,7 +714,7 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.S(qubit_list[1]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[1]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.X, Pauli.Z] @@ -722,8 +722,8 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == -1 - pauli.S(qubit_list[0]) - pauli.CX(qubit_list[0], qubit_list[2]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) + pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[0], qubit_list[2]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.X, Pauli.Y] @@ -740,47 +740,47 @@ def test_clifford_incremental() -> None: qubit_list=qubit_list, ) - pauli.H(qubit_list[0]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.CX(qubit_list[1], qubit_list[2]) + pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.H(qubit_list[1]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[1]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.S(qubit_list[1]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[1]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.phase == 1 - pauli.CX(qubit_list[1], qubit_list[2]) + pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 1 - pauli.S(qubit_list[2]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 2 - pauli.CX(qubit_list[1], qubit_list[0]) + pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 2 - pauli.S(qubit_list[0]) + pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 3 - pauli.H(qubit_list[0]) + pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 1 From b3c29a11d3c82285fb464e730f04c10d9107549b Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:35:31 +0000 Subject: [PATCH 02/25] Remove commute_coeff --- qermit/noise_model/noise_model.py | 18 ++++++++++----- qermit/noise_model/qermit_pauli.py | 30 +------------------------ tests/noise_model_test.py | 36 ------------------------------ 3 files changed, 14 insertions(+), 70 deletions(-) diff --git a/qermit/noise_model/noise_model.py b/qermit/noise_model/noise_model.py index 5c465706..fd182e5f 100644 --- a/qermit/noise_model/noise_model.py +++ b/qermit/noise_model/noise_model.py @@ -115,10 +115,14 @@ def to_ptm(self) -> Tuple[NDArray, Dict[Tuple[Pauli, ...], int]]: pauli_iterable=error, qubit_list=[Qubit(i) for i in range(self.n_qubits)], ) - - ptm[index][index] += error_rate * QermitPauli.commute_coeff( - pauli_one=pauli, pauli_two=error_pauli + commute_coeff = ( + 1 + if pauli.qubit_pauli_tensor.commutes_with( + error_pauli.qubit_pauli_tensor + ) + else -1 ) + ptm[index][index] += error_rate * commute_coeff # Some checks that the form of the PTM is correct. identity = tuple(Pauli.I for _ in range(self.n_qubits)) @@ -190,8 +194,12 @@ def from_ptm( pauli_iterable=pauli_two_tuple, qubit_list=[Qubit(i) for i in range(len(pauli_two_tuple))], ) - commutation_matrix[index_one][index_two] = QermitPauli.commute_coeff( - pauli_one=pauli_one, pauli_two=pauli_two + commutation_matrix[index_one][index_two] = ( + 1 + if pauli_one.qubit_pauli_tensor.commutes_with( + pauli_two.qubit_pauli_tensor + ) + else -1 ) error_rate_list = np.matmul(ptm.diagonal(), np.linalg.inv(commutation_matrix)) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index a05fdd9d..98f9ec45 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -48,34 +48,6 @@ def __init__( self.phase = phase self.qubit_list = qubit_list - @staticmethod - def commute_coeff(pauli_one: QermitPauli, pauli_two: QermitPauli) -> int: - """Calculate the coefficient which result from commuting pauli_one - past pauli_two. That is to say P_2 P_1 = c P_1 P_2 where c is the - coefficient returned by this function. - - :param pauli_one: First Pauli - :param pauli_two: Second Pauli - :raises Exception: Raised if the Paulis do not act - on matching qubits. - :return: Coefficient resulting from commuting the two Paulis. - """ - if not pauli_one.qubit_list == pauli_two.qubit_list: - raise Exception( - "The given Paulis must act on the same qubits. " - + f"In this case the qubits acted on by pauli_one {pauli_one.qubit_list} " - + f"differ from those of pauli_two {pauli_two.qubit_list}." - ) - power = sum( - pauli_one.X_list[qubit] * pauli_two.Z_list[qubit] - for qubit in pauli_one.qubit_list - ) - power += sum( - pauli_one.Z_list[qubit] * pauli_two.X_list[qubit] - for qubit in pauli_one.qubit_list - ) - return (-1) ** power - def is_measureable(self, qubit_list: List[Qubit]) -> bool: """Checks if this Pauli would be measurable on the given qubits in the computational bases. That is to say if at least one Pauli on the given @@ -208,7 +180,7 @@ def __hash__(self): return hash(key) def __str__(self) -> str: - return str(self.qubit_pauli_tensor) + return str(self.qubit_pauli_tensor.string) + str(self.qubit_pauli_tensor.coeff) def __eq__(self, other: object) -> bool: """Checks for equality by checking all qubits match, and that all diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index 60fb942d..26a5a6d4 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -112,42 +112,6 @@ def test_qermit_pauli_from_iterable() -> None: pauli.qubit_pauli_tensor.coeff == 1 + 0j -def test_qermit_pauli_commute_coeff() -> None: - # This tests a few commutation coefficients - # which have been verified by hand. - verified_list = [ - # Single qubit Paulis - ((([0], [1]), ([1], [0])), -1), - ((([1], [1]), ([1], [1])), 1), - ((([1], [0]), ([0], [1])), -1), - ((([0], [0]), ([0], [1])), 1), - ((([1], [0]), ([0], [0])), 1), - ((([1], [1]), ([0], [1])), -1), - # Two qubit Paulis - ((([0, 1], [1, 0]), ([1, 0], [0, 1])), 1), - ((([0, 1], [1, 0]), ([0, 0], [1, 1])), -1), - ((([0, 0], [0, 0]), ([0, 0], [1, 1])), 1), - ] - - for verified in verified_list: - n_qubits = len(verified[0][0][0]) - - pauli_one = QermitPauli( - Z_list=verified[0][0][0], - X_list=verified[0][0][1], - qubit_list=[Qubit(i) for i in range(n_qubits)], - ) - pauli_two = QermitPauli( - Z_list=verified[0][1][0], - X_list=verified[0][1][1], - qubit_list=[Qubit(i) for i in range(n_qubits)], - ) - assert ( - QermitPauli.commute_coeff(pauli_one=pauli_one, pauli_two=pauli_two) - == verified[1] - ) - - def test_noise_model_logical_error_propagation() -> None: pytket_ciruit = Circuit(2).H(0).CX(0, 1).measure_all() From 1086f7c5052cede3a1bcea72c83e288b4d5ab236 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:45:49 +0000 Subject: [PATCH 03/25] Use qubit pauli tensor in is_measureable --- qermit/noise_model/qermit_pauli.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 98f9ec45..81cdb4ab 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -59,9 +59,12 @@ def is_measureable(self, qubit_list: List[Qubit]) -> bool: :return: True if at least one Pauli on the given qubits anticommutes with Z. False otherwise. """ - if not all(qubit in self.qubit_list for qubit in qubit_list): - raise Exception(f"{qubit_list} is not a subset of {self.qubit_list}.") - return any(self.X_list[qubit] == 1 for qubit in qubit_list) + return any( + not self.qubit_pauli_tensor.commutes_with( + QubitPauliTensor(qubit=qubit, pauli=Pauli.Z) + ) + for qubit in qubit_list + ) def reduce_qubits(self, qubit_list: List[Qubit]) -> QermitPauli: """Reduces Pauli onto given list of qubits. A new reduced From d30f8f2d298c8eed56a4ce049d5b76115887c1d1 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:09:08 +0000 Subject: [PATCH 04/25] Add from qubit_pauli_tensor --- qermit/coherent_pauli_checks/pauli_sampler.py | 6 +- qermit/noise_model/qermit_pauli.py | 9 ++- tests/noise_model_test.py | 57 ++++++++++++++----- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/qermit/coherent_pauli_checks/pauli_sampler.py b/qermit/coherent_pauli_checks/pauli_sampler.py index fb9acea2..0d707eaa 100644 --- a/qermit/coherent_pauli_checks/pauli_sampler.py +++ b/qermit/coherent_pauli_checks/pauli_sampler.py @@ -8,7 +8,7 @@ from pytket import Circuit from pytket._tket.unit_id import UnitID from pytket.circuit import Bit, CircBox, Command, OpType, Qubit -from pytket.pauli import Pauli, QubitPauliString +from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor from qermit.noise_model.noise_model import NoiseModel from qermit.noise_model.qermit_pauli import QermitPauli @@ -347,6 +347,8 @@ def sample( # ) return [ - QermitPauli.from_qubit_pauli_string(smallest_commute_prob_pauli) + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor(string=smallest_commute_prob_pauli, coeff=1) + ) for smallest_commute_prob_pauli in smallest_commute_prob_pauli_list ] diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 81cdb4ab..5ce3d3d2 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -73,7 +73,6 @@ def reduce_qubits(self, qubit_list: List[Qubit]) -> QermitPauli: :param qubit_list: Qubits onto which pauli should be reduced. :return: Reduced Pauli. """ - return QermitPauli( Z_list=[Z for qubit, Z in self.Z_list.items() if qubit not in qubit_list], X_list=[X for qubit, X in self.X_list.items() if qubit not in qubit_list], @@ -136,18 +135,22 @@ def dagger(self) -> QermitPauli: ) @classmethod - def from_qubit_pauli_string(cls, qps: QubitPauliString) -> QermitPauli: + def from_qubit_pauli_tensor(cls, qpt: QubitPauliTensor) -> QermitPauli: """Create a Pauli from a qubit pauli string. :param qps: Qubit pauli string to be converted to a Pauli. :return: Pauli created from qubit pauli string. """ + coeff_to_phase = {1 + 0j: 0, 0 + 1j: 1, -1 + 0j: 2, 0 - 1j: 3} + Z_list = [] X_list = [] - phase = 0 + phase = coeff_to_phase[qpt.coeff] qubit_list = [] + qps = qpt.string + for pauli in qps.to_list(): qubit = Qubit(name=pauli[0][0], index=pauli[0][1]) qubit_list.append(qubit) diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index 26a5a6d4..23191302 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -8,7 +8,7 @@ import pytest from pytket import Circuit, OpType from pytket.circuit import Qubit -from pytket.pauli import Pauli, QubitPauliString +from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor from qermit.noise_model import ( ErrorDistribution, @@ -135,8 +135,10 @@ def test_noise_model_logical_error_propagation() -> None: logical_distribution = noise_model.counter_propagate( pytket_ciruit, n_counts=10000, direction=Direction.forward ) - ideal_error = QermitPauli.from_qubit_pauli_string( - QubitPauliString(map={Qubit(0): Pauli.X, Qubit(1): Pauli.I}) + ideal_error = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={Qubit(0): Pauli.X, Qubit(1): Pauli.I}), coeff=1 + ) ) assert list(logical_distribution.keys()) == [ideal_error] assert abs(logical_distribution[ideal_error] - 1000) <= 1 @@ -239,8 +241,12 @@ def test_error_distribution_post_select() -> None: ) pauli_error_counter = Counter( { - QermitPauli.from_qubit_pauli_string(qps_remove): 50, - QermitPauli.from_qubit_pauli_string(qps_keep): 50, + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor(string=qps_remove, coeff=1) + ): 50, + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor(string=qps_keep, coeff=1) + ): 50, } ) error_distribution = LogicalErrorDistribution( @@ -487,8 +493,13 @@ def test_effective_error_distribution() -> None: assert ( abs( effective_error_dist.pauli_error_counter[ - QermitPauli.from_qubit_pauli_string( - QubitPauliString(qubits=qubits, paulis=[Pauli.X, Pauli.I, Pauli.X]) + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + qubits=qubits, paulis=[Pauli.X, Pauli.I, Pauli.X] + ), + coeff=1, + ) ) ] - 2100 @@ -499,8 +510,13 @@ def test_effective_error_distribution() -> None: assert ( abs( effective_error_dist.pauli_error_counter[ - QermitPauli.from_qubit_pauli_string( - QubitPauliString(qubits=qubits, paulis=[Pauli.Y, Pauli.Y, Pauli.Z]) + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + qubits=qubits, paulis=[Pauli.Y, Pauli.Y, Pauli.Z] + ), + coeff=1, + ) ) ] - 900 @@ -511,8 +527,13 @@ def test_effective_error_distribution() -> None: assert ( abs( effective_error_dist.pauli_error_counter[ - QermitPauli.from_qubit_pauli_string( - QubitPauliString(qubits=qubits, paulis=[Pauli.I, Pauli.I, Pauli.Z]) + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + qubits=qubits, paulis=[Pauli.I, Pauli.I, Pauli.Z] + ), + coeff=1, + ) ) ] - 2100 @@ -520,8 +541,11 @@ def test_effective_error_distribution() -> None: < 100 ) - pauli_error = QermitPauli.from_qubit_pauli_string( - QubitPauliString(qubits=qubits, paulis=[Pauli.Z, Pauli.Y, Pauli.X]) + pauli_error = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(qubits=qubits, paulis=[Pauli.Z, Pauli.Y, Pauli.X]), + coeff=1, + ) ) pauli_error.phase = 2 assert abs(effective_error_dist.pauli_error_counter[pauli_error] - 4900) < 100 @@ -757,7 +781,12 @@ def test_to_from_qps() -> None: qubits=qubits, paulis=paulis, ) - stab = QermitPauli.from_qubit_pauli_string(qubit_pauli_string) + stab = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=qubit_pauli_string, + coeff=1, + ) + ) assert stab.qubit_pauli_tensor.string == qubit_pauli_string assert stab.qubit_pauli_tensor.coeff == 1 + 0j From 897d6cffdd8db876fac108afe8d0022e0cd06877 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:31:02 +0000 Subject: [PATCH 05/25] Use qubit pauli tensors within reduce_qubits --- qermit/noise_model/qermit_pauli.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 5ce3d3d2..0ab811eb 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -67,17 +67,23 @@ def is_measureable(self, qubit_list: List[Qubit]) -> bool: ) def reduce_qubits(self, qubit_list: List[Qubit]) -> QermitPauli: - """Reduces Pauli onto given list of qubits. A new reduced - Pauli is created. + """Reduces Pauli by removing terms acting on qubits + in the given list. A new reduced Pauli is created. - :param qubit_list: Qubits onto which pauli should be reduced. + :param qubit_list: Qubits in Pauli which should be removed. :return: Reduced Pauli. """ - return QermitPauli( - Z_list=[Z for qubit, Z in self.Z_list.items() if qubit not in qubit_list], - X_list=[X for qubit, X in self.X_list.items() if qubit not in qubit_list], - qubit_list=[qubit for qubit in self.qubit_list if qubit not in qubit_list], - phase=self.phase, + return self.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + qubit: pauli + for qubit, pauli in self.qubit_pauli_tensor.string.map.items() + if qubit not in qubit_list + } + ), + coeff=self.qubit_pauli_tensor.coeff, + ) ) @property From 26827e478b5817b127e9d65abc3908d7ef9b3898 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:32:42 +0000 Subject: [PATCH 06/25] Use qubit pauli tensor in equality check --- qermit/noise_model/qermit_pauli.py | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 0ab811eb..8046c396 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -205,22 +205,7 @@ def __eq__(self, other: object) -> bool: if not isinstance(other, QermitPauli): return False - if sorted(list(self.X_list.keys())) != sorted(list(other.X_list.keys())): - return False - if not all( - self.X_list[quibt] == other.X_list[quibt] for quibt in self.X_list.keys() - ): - return False - if sorted(list(self.Z_list.keys())) != sorted(list(other.Z_list.keys())): - return False - if not all( - self.Z_list[quibt] == other.Z_list[quibt] for quibt in self.X_list.keys() - ): - return False - if self.phase != other.phase: - return False - - return True + return self.qubit_pauli_tensor == other.qubit_pauli_tensor def apply_circuit(self, circuit: Circuit): """Apply a circuit to a pauli. This is to say commute tha Pauli From 8822eae535a8604489a52b171267cc3fe87c71ba Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:39:12 +0000 Subject: [PATCH 07/25] Remove is_identity --- qermit/noise_model/noise_model.py | 3 ++- qermit/noise_model/qermit_pauli.py | 10 ---------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/qermit/noise_model/noise_model.py b/qermit/noise_model/noise_model.py index fd182e5f..f543d9f1 100644 --- a/qermit/noise_model/noise_model.py +++ b/qermit/noise_model/noise_model.py @@ -615,7 +615,8 @@ def counter_propagate( for _ in range(n_counts): pauli_error = self.random_propagate(cliff_circ, **kwargs) - if not pauli_error.is_identity: + # Check if the error is the identity. + if pauli_error.qubit_pauli_tensor.string != QubitPauliString(): error_counter.update([pauli_error]) return error_counter diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 8046c396..cee7e493 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -86,16 +86,6 @@ def reduce_qubits(self, qubit_list: List[Qubit]) -> QermitPauli: ) ) - @property - def is_identity(self) -> bool: - """True is the pauli represents the all I string. - - :return: True is the pauli represents the all I string. - """ - return all(Z == 0 for Z in self.Z_list.values()) and all( - X == 0 for X in self.X_list.values() - ) - @classmethod def random_pauli( cls, From 5855016045ef4d0999e0092f22951384900315c3 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:54:49 +0000 Subject: [PATCH 08/25] Use qubit pauli tensor in dagger --- qermit/noise_model/qermit_pauli.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index cee7e493..53b10f72 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -111,23 +111,11 @@ def dagger(self) -> QermitPauli: :return: Conjugate transpose of the Pauli. """ - # the phase is the conjugate of the original - phase = self.phase - phase += 2 * (self.phase % 2) - - Z_list = list(self.Z_list.values()) - X_list = list(self.X_list.values()) - # The phase is altered here as the order Z and X is reversed by - # the inversion. - for Z, X in zip(Z_list, X_list): - phase += 2 * Z * X - phase %= 4 - - return QermitPauli( - Z_list=Z_list, - X_list=X_list, - qubit_list=self.qubit_list, - phase=phase, + return QermitPauli.from_qubit_pauli_tensor( + qpt=QubitPauliTensor( + string=self.qubit_pauli_tensor.string, + coeff=self.qubit_pauli_tensor.coeff.conjugate(), + ) ) @classmethod From e2ce262af1dc8dd2f9caf0de6e0c7966ff8dc069 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:58:13 +0000 Subject: [PATCH 09/25] Remove random pauli --- qermit/noise_model/qermit_pauli.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 53b10f72..9a4b8d3f 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -86,25 +86,6 @@ def reduce_qubits(self, qubit_list: List[Qubit]) -> QermitPauli: ) ) - @classmethod - def random_pauli( - cls, - qubit_list: List[Qubit], - rng: Generator = np.random.default_rng(), - ) -> QermitPauli: - """Generates a uniformly random Pauli. - - :param qubit_list: Qubits on which the Pauli acts. - :param rng: Randomness generator, defaults to np.random.default_rng() - :return: Random pauli. - """ - - return cls( - Z_list=list(rng.integers(2, size=len(qubit_list))), - X_list=list(rng.integers(2, size=len(qubit_list))), - qubit_list=qubit_list, - ) - def dagger(self) -> QermitPauli: """Generates the inverse of the Pauli. From fe435cd50abbe3ec8014cc73d07deb45bb2a148b Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:02:05 +0000 Subject: [PATCH 10/25] Use qubit pauli tensor in __hash__ --- qermit/noise_model/qermit_pauli.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 9a4b8d3f..6a9c1bd0 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -142,13 +142,7 @@ def from_qubit_pauli_tensor(cls, qpt: QubitPauliTensor) -> QermitPauli: ) def __hash__(self): - key = ( - *list(self.Z_list.values()), - *list(self.X_list.values()), - *self.qubit_list, - self.phase, - ) - return hash(key) + return self.qubit_pauli_tensor.__hash__() def __str__(self) -> str: return str(self.qubit_pauli_tensor.string) + str(self.qubit_pauli_tensor.coeff) From 2ff6a3b26a21dfe6160a8e474e74330d169c85bf Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:08:41 +0000 Subject: [PATCH 11/25] Remove pre_multiply --- qermit/noise_model/qermit_pauli.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 6a9c1bd0..aff358e7 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -144,7 +144,7 @@ def from_qubit_pauli_tensor(cls, qpt: QubitPauliTensor) -> QermitPauli: def __hash__(self): return self.qubit_pauli_tensor.__hash__() - def __str__(self) -> str: + def __str__(self) -> str: # pragma: no cover return str(self.qubit_pauli_tensor.string) + str(self.qubit_pauli_tensor.coeff) def __eq__(self, other: object) -> bool: @@ -308,20 +308,6 @@ def _CX(self, control_qubit: Qubit, target_qubit: Qubit): self.X_list[target_qubit] += self.X_list[control_qubit] self.X_list[target_qubit] %= 2 - def pre_multiply(self, pauli: QermitPauli): - """Pre-multiply by a Pauli. - - :param pauli: Pauli to pre multiply by. - """ - - for qubit in self.qubit_list: - if pauli.X_list[qubit]: - self.pre_apply_X(qubit) - if pauli.Z_list[qubit]: - self.pre_apply_Z(qubit) - self.phase += pauli.phase - self.phase %= 4 - def pre_apply_pauli(self, pauli: Union[Pauli, OpType], qubit: Qubit): """Pre apply by a pauli on a particular qubit. From 76593433efda111256943871fb896932266b5999 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:30:48 +0000 Subject: [PATCH 12/25] Use qubit pauli tensor in from_pauli_list --- qermit/noise_model/noise_model.py | 16 ++++++++-------- qermit/noise_model/qermit_pauli.py | 17 ++++++++++------- tests/noise_model_test.py | 4 ++-- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/qermit/noise_model/noise_model.py b/qermit/noise_model/noise_model.py index f543d9f1..39f716d5 100644 --- a/qermit/noise_model/noise_model.py +++ b/qermit/noise_model/noise_model.py @@ -99,8 +99,8 @@ def to_ptm(self) -> Tuple[NDArray, Dict[Tuple[Pauli, ...], int]]: # PTM entry as a sum pf error weights multiplied by +/-1 # Depending on commutation relations. for pauli_tuple, index in pauli_index.items(): - pauli = QermitPauli.from_pauli_iterable( - pauli_iterable=pauli_tuple, + pauli = QermitPauli.from_pauli_list( + pauli_list=list(pauli_tuple), qubit_list=[Qubit(i) for i in range(self.n_qubits)], ) @@ -111,8 +111,8 @@ def to_ptm(self) -> Tuple[NDArray, Dict[Tuple[Pauli, ...], int]]: ptm[index][index] += self.identity_error_rate for error, error_rate in self.distribution.items(): - error_pauli = QermitPauli.from_pauli_iterable( - pauli_iterable=error, + error_pauli = QermitPauli.from_pauli_list( + pauli_list=list(error), qubit_list=[Qubit(i) for i in range(self.n_qubits)], ) commute_coeff = ( @@ -185,13 +185,13 @@ def from_ptm( # is the matrix of commutation values. commutation_matrix = np.zeros(ptm.shape) for pauli_one_tuple, index_one in pauli_index.items(): - pauli_one = QermitPauli.from_pauli_iterable( - pauli_iterable=pauli_one_tuple, + pauli_one = QermitPauli.from_pauli_list( + pauli_list=list(pauli_one_tuple), qubit_list=[Qubit(i) for i in range(len(pauli_one_tuple))], ) for pauli_two_tuple, index_two in pauli_index.items(): - pauli_two = QermitPauli.from_pauli_iterable( - pauli_iterable=pauli_two_tuple, + pauli_two = QermitPauli.from_pauli_list( + pauli_list=list(pauli_two_tuple), qubit_list=[Qubit(i) for i in range(len(pauli_two_tuple))], ) commutation_matrix[index_one][index_two] = ( diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index aff358e7..4fc0f0b8 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -472,8 +472,8 @@ def qubit_pauli_tensor(self) -> QubitPauliTensor: ) @classmethod - def from_pauli_iterable( - cls, pauli_iterable: Iterable[Pauli], qubit_list: List[Qubit] + def from_pauli_list( + cls, pauli_list: List[Pauli], qubit_list: List[Qubit] ) -> QermitPauli: """Create a QermitPauli from a Pauli iterable. @@ -481,9 +481,12 @@ def from_pauli_iterable( :param qubit_list: The qubits on which the resulting pauli will act. :return: The pauli corresponding to the given iterable. """ - return cls( - Z_list=[int(pauli in (Pauli.Z, Pauli.Y)) for pauli in pauli_iterable], - X_list=[int(pauli in (Pauli.X, Pauli.Y)) for pauli in pauli_iterable], - qubit_list=qubit_list, - phase=sum(int(pauli == Pauli.Y) for pauli in pauli_iterable) % 4, + return cls.from_qubit_pauli_tensor( + qpt=QubitPauliTensor( + string=QubitPauliString( + qubits=qubit_list, + paulis=pauli_list, + ), + coeff=1, + ), ) diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index 23191302..e2f6fa2f 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -104,8 +104,8 @@ def test_qermit_pauli_from_iterable() -> None: qubits=[Qubit(i) for i in range(5)], paulis=[Pauli.X, Pauli.Y, Pauli.Z, Pauli.Y, Pauli.Z], ) - pauli = QermitPauli.from_pauli_iterable( - pauli_iterable=qubit_pauli_string.map.values(), + pauli = QermitPauli.from_pauli_list( + pauli_list=list(qubit_pauli_string.map.values()), qubit_list=list(qubit_pauli_string.map.keys()), ) pauli.qubit_pauli_tensor.string == qubit_pauli_string From 4c924a2188986807508555ce0e2b2e4de0e39b7e Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 18:50:26 +0000 Subject: [PATCH 13/25] Use qubit pauli tensor in get_control_circuit --- qermit/noise_model/qermit_pauli.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 4fc0f0b8..312fe66d 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -24,6 +24,8 @@ class QermitPauli: 3: 0 - 1j, } + coeff_to_phase = {1 + 0j: 0, 0 + 1j: 1, -1 + 0j: 2, 0 - 1j: 3} + def __init__( self, Z_list: List[int], @@ -107,11 +109,11 @@ def from_qubit_pauli_tensor(cls, qpt: QubitPauliTensor) -> QermitPauli: :return: Pauli created from qubit pauli string. """ - coeff_to_phase = {1 + 0j: 0, 0 + 1j: 1, -1 + 0j: 2, 0 - 1j: 3} + # coeff_to_phase = {1 + 0j: 0, 0 + 1j: 1, -1 + 0j: 2, 0 - 1j: 3} Z_list = [] X_list = [] - phase = coeff_to_phase[qpt.coeff] + phase = cls.coeff_to_phase[qpt.coeff] qubit_list = [] qps = qpt.string @@ -403,21 +405,28 @@ def get_control_circuit(self, control_qubit: Qubit) -> Circuit: # TODO: in the case that this is secretly a controlled Y a controlled # Y should be applied. Otherwise there is additional noise added in # the case of a CY. - for qubit in self.qubit_list: + phase = self.coeff_to_phase[self.qubit_pauli_tensor.coeff] + for qubit, pauli in self.qubit_pauli_tensor.string.map.items(): circ.add_qubit(id=qubit) - if self.Z_list[qubit] == 1: + + if pauli == Pauli.Z or pauli == Pauli.Y: circ.CZ( control_qubit=control_qubit, target_qubit=qubit, opgroup="pauli check", ) - if self.X_list[qubit] == 1: + + if pauli == Pauli.X or pauli == Pauli.Y: circ.CX( control_qubit=control_qubit, target_qubit=qubit, opgroup="pauli check", ) + if pauli == Pauli.Y: + phase += 2 + phase %= 4 + for _ in range(self.phase): circ.S( control_qubit, From 312eb2b9a22dd278701b935fe40aba30910460ac Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:11:50 +0000 Subject: [PATCH 14/25] Use qubit pauli tensor in circuit --- qermit/noise_model/qermit_pauli.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 312fe66d..fb748d19 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -443,12 +443,22 @@ def circuit(self) -> Circuit: """ circ = Circuit() - for qubit in self.qubit_list: + + phase = self.coeff_to_phase[self.qubit_pauli_tensor.coeff] + + for qubit, pauli in self.qubit_pauli_tensor.string.map.items(): circ.add_qubit(id=qubit) - if self.Z_list[qubit] == 1: + + if pauli == Pauli.Z or pauli == Pauli.Y: circ.Z(qubit) - if self.X_list[qubit] == 1: + + if pauli == Pauli.X or pauli == Pauli.Y: circ.X(qubit) + + if pauli == Pauli.Y: + phase += 2 + phase %= 4 + circ.add_phase(a=self.phase / 2) return circ From f44846e1b8f8827141765ca5f0189d81392a0af2 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:26:53 +0000 Subject: [PATCH 15/25] Use Op rather than OpType in apply_gate --- qermit/coherent_pauli_checks/pauli_sampler.py | 5 +- qermit/noise_model/noise_model.py | 6 +- qermit/noise_model/qermit_pauli.py | 76 ++++++++++--------- tests/noise_model_test.py | 52 ++++++------- 4 files changed, 70 insertions(+), 69 deletions(-) diff --git a/qermit/coherent_pauli_checks/pauli_sampler.py b/qermit/coherent_pauli_checks/pauli_sampler.py index 0d707eaa..dd07653a 100644 --- a/qermit/coherent_pauli_checks/pauli_sampler.py +++ b/qermit/coherent_pauli_checks/pauli_sampler.py @@ -124,9 +124,8 @@ def add_pauli_checks_to_circbox( # is not Clifford. It could be worth raising a clearer # error. end_stabiliser.apply_gate( - clifford_command.op.type, - clifford_command.qubits, - params=clifford_command.op.params, + op=clifford_command.op, + qubits=clifford_command.qubits, ) pauli_check_circuit.add_barrier(command.args + [control_qubit]) diff --git a/qermit/noise_model/noise_model.py b/qermit/noise_model/noise_model.py index 39f716d5..137e6b1f 100644 --- a/qermit/noise_model/noise_model.py +++ b/qermit/noise_model/noise_model.py @@ -665,9 +665,8 @@ def random_propagate( if direction == Direction.forward: # Apply gate to total error. pauli_error.apply_gate( - op_type=command.op.type, + op=command.op, qubits=cast(List[Qubit], command.args), - params=command.op.params, ) # Add noise operation if appropriate. if command.op.type in self.noisy_gates: @@ -694,9 +693,8 @@ def random_propagate( # which has the same effect on the pauli as pushing through the # dagger. pauli_error.apply_gate( - op_type=command.op.dagger.type, + op=command.op.dagger, qubits=cast(List[Qubit], command.args), - params=command.op.dagger.params, ) return pauli_error diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index fb748d19..94c852d9 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -6,7 +6,7 @@ import numpy as np from numpy.random import Generator -from pytket.circuit import Circuit, OpType, Qubit +from pytket.circuit import Circuit, Op, OpType, Qubit from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor @@ -172,13 +172,19 @@ def apply_circuit(self, circuit: Circuit): for command in circuit.get_commands(): if command.op.type == OpType.Barrier: continue + + if command.qubits != command.args: + raise Exception( + "Circuit must be purely quantum." + f"The given circuit acts on bits {command.bits}" + ) + self.apply_gate( - op_type=command.op.type, + op=command.op, qubits=command.qubits, - params=command.op.params, ) - def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): + def apply_gate(self, op: Op, qubits: List[Qubit]): """Apply operation of given type to given qubit in the pauli. At present the recognised operation types are H, S, CX, Z, Sdg, X, Y, CZ, SWAP, and Barrier. @@ -188,57 +194,56 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): :raises Exception: Raised if operator is not recognised. """ - if op_type == OpType.H: + if op.type == OpType.H: self._H(qubit=qubits[0]) - elif op_type == OpType.S: + elif op.type == OpType.S: self._S(qubit=qubits[0]) - elif op_type == OpType.CX: + elif op.type == OpType.CX: self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op_type == OpType.Z: + elif op.type == OpType.Z: self._S(qubit=qubits[0]) self._S(qubit=qubits[0]) - elif op_type == OpType.Sdg: + elif op.type == OpType.Sdg: self._S(qubit=qubits[0]) self._S(qubit=qubits[0]) self._S(qubit=qubits[0]) - elif op_type == OpType.X: + elif op.type == OpType.X: self._H(qubit=qubits[0]) - self.apply_gate(op_type=OpType.Z, qubits=qubits) + self.apply_gate(op=Op.create(OpType.Z), qubits=qubits) self._H(qubit=qubits[0]) - elif op_type == OpType.Y: - self.apply_gate(op_type=OpType.Z, qubits=qubits) - self.apply_gate(op_type=OpType.X, qubits=qubits) - elif op_type == OpType.CZ: + elif op.type == OpType.Y: + self.apply_gate(op=Op.create(OpType.Z), qubits=qubits) + self.apply_gate(op=Op.create(OpType.X), qubits=qubits) + elif op.type == OpType.CZ: self._H(qubit=qubits[1]) self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) self._H(qubit=qubits[1]) - elif op_type == OpType.SWAP: + elif op.type == OpType.SWAP: self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) self._CX(control_qubit=qubits[1], target_qubit=qubits[0]) self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op_type == OpType.PhasedX: - params = kwargs.get("params", None) + elif op.type == OpType.PhasedX: if all( math.isclose(param % 0.5, 0) or math.isclose(param % 0.5, 0.5) - for param in params + for param in op.params ): - self.apply_gate(OpType.Rz, qubits=qubits, params=[-params[1]]) - self.apply_gate(OpType.Rx, qubits=qubits, params=[params[0]]) - self.apply_gate(OpType.Rz, qubits=qubits, params=[params[1]]) + self.apply_gate(op=Op.create(OpType.Rz, [-op.params[1]]), qubits=qubits) + self.apply_gate(op=Op.create(OpType.Rx, [op.params[0]]), qubits=qubits) + self.apply_gate(op=Op.create(OpType.Rz, [op.params[1]]), qubits=qubits) else: - raise Exception(f"{params} are not clifford angles for " + "PhasedX.") - elif op_type == OpType.Rz: - params = kwargs.get("params", None) - angle = params[0] + raise Exception( + f"{op.params} are not clifford angles for " + "PhasedX." + ) + elif op.type == OpType.Rz: + angle = op.params[0] if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): angle = round(angle, 1) for _ in range(int((angle % 2) // 0.5)): self._S(qubit=qubits[0]) else: raise Exception(f"{angle} is not a clifford angle.") - elif op_type == OpType.Rx: - params = kwargs.get("params", None) - angle = params[0] + elif op.type == OpType.Rx: + angle = op.params[0] if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): angle = round(angle, 1) self._H(qubit=qubits[0]) @@ -247,24 +252,23 @@ def apply_gate(self, op_type: OpType, qubits: List[Qubit], **kwargs): self._H(qubit=qubits[0]) else: raise Exception(f"{angle} is not a clifford angle.") - elif op_type == OpType.ZZMax: + elif op.type == OpType.ZZMax: self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) self._S(qubit=qubits[1]) self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op_type == OpType.ZZPhase: - params = kwargs.get("params", None) - angle = params[0] + elif op.type == OpType.ZZPhase: + angle = op.params[0] if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): angle = round(angle, 1) for _ in range(int((angle % 2) // 0.5)): - self.apply_gate(op_type=OpType.ZZMax, qubits=qubits) + self.apply_gate(op=Op.create(OpType.ZZMax), qubits=qubits) else: raise Exception(f"{angle} is not a clifford angle.") - elif op_type == OpType.Barrier: + elif op.type == OpType.Barrier: pass else: raise Exception( - f"{op_type} is an unrecognised gate type. " + f"{op.type} is an unrecognised gate type. " + "Please use only Clifford gates." ) diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index e2f6fa2f..45c04a2a 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -7,7 +7,7 @@ import numpy as np import pytest from pytket import Circuit, OpType -from pytket.circuit import Qubit +from pytket.circuit import Op, Qubit from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor from qermit.noise_model import ( @@ -395,9 +395,9 @@ def test_error_backpropagation() -> None: ) stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[1]) - stabilise.apply_gate(op_type=OpType.CZ, qubits=qubit_list) + stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=qubit_list) stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[0]) - stabilise.apply_gate(op_type=OpType.CZ, qubits=[qubit_list[1], qubit_list[0]]) + stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=[qubit_list[1], qubit_list[0]]) assert stabilise.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1} assert stabilise.X_list == {qubit_list[0]: 1, qubit_list[1]: 1} @@ -410,10 +410,10 @@ def test_error_backpropagation() -> None: ) stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[1]) - stabilise.apply_gate(op_type=OpType.CZ, qubits=qubit_list) - stabilise.apply_gate(op_type=OpType.X, qubits=[qubit_list[1]]) + stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=qubit_list) + stabilise.apply_gate(op=Op.create(OpType.X), qubits=[qubit_list[1]]) stabilise.pre_apply_pauli(pauli=Pauli.Y, qubit=qubit_list[0]) - stabilise.apply_gate(op_type=OpType.CZ, qubits=[qubit_list[1], qubit_list[0]]) + stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=[qubit_list[1], qubit_list[0]]) assert stabilise.Z_list == {qubit_list[0]: 1, qubit_list[1]: 1} assert stabilise.X_list == {qubit_list[0]: 1, qubit_list[1]: 1} @@ -605,13 +605,13 @@ def test_H() -> None: qubit_list = [Qubit(0)] pauli = QermitPauli(Z_list=[1], X_list=[0], qubit_list=qubit_list) - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( qubits=qubit_list, paulis=[Pauli.X] ) assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( qubits=qubit_list, paulis=[Pauli.Z] ) @@ -647,7 +647,7 @@ def test_apply_gate() -> None: qubit_list=qubit_list, ) - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.Z, Pauli.Z] @@ -655,7 +655,7 @@ def test_apply_gate() -> None: assert pauli.qubit_pauli_tensor.coeff == 1 pauli.apply_gate( - op_type=OpType.CX, + op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[2]], ) @@ -665,7 +665,7 @@ def test_apply_gate() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[1]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[1]]) assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 @@ -685,8 +685,8 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[0]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.Y, Pauli.Z, Pauli.Z] @@ -694,7 +694,7 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[0], qubit_list[1]]) + pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[0], qubit_list[1]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.Y, Pauli.Z] @@ -702,7 +702,7 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == 1 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[1]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[1]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.X, Pauli.Z] @@ -710,8 +710,8 @@ def test_qubit_pauli_string() -> None: assert pauli.qubit_pauli_tensor.string == qubit_pauli_string assert pauli.qubit_pauli_tensor.coeff == -1 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) - pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[0], qubit_list[2]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[0], qubit_list[2]]) qubit_pauli_string = QubitPauliString( qubits=qubit_list, paulis=[Pauli.X, Pauli.X, Pauli.Y] @@ -728,47 +728,47 @@ def test_clifford_incremental() -> None: qubit_list=qubit_list, ) - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[2]]) + pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[1]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[1]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 0 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[1]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[1]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.phase == 1 - pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[2]]) + pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} assert pauli.phase == 1 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[2]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[2]]) assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 2 - pauli.apply_gate(op_type=OpType.CX, qubits=[qubit_list[1], qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 2 - pauli.apply_gate(op_type=OpType.S, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 3 - pauli.apply_gate(op_type=OpType.H, qubits=[qubit_list[0]]) + pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} assert pauli.phase == 1 From ef4f65b5282350089d03e04a957b677518be6e97 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:12:04 +0000 Subject: [PATCH 16/25] Correct wrong phase --- qermit/coherent_pauli_checks/pauli_sampler.py | 1 - qermit/noise_model/qermit_pauli.py | 12 ++++++------ tests/noise_model_test.py | 11 +++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/qermit/coherent_pauli_checks/pauli_sampler.py b/qermit/coherent_pauli_checks/pauli_sampler.py index dd07653a..6da63035 100644 --- a/qermit/coherent_pauli_checks/pauli_sampler.py +++ b/qermit/coherent_pauli_checks/pauli_sampler.py @@ -238,7 +238,6 @@ def sample( :return: Random Pauli of length equal to the size of the circuit. """ # TODO: Make sure sampling is done without replacement - stabiliser_list: List[QermitPauli] = [] while len(stabiliser_list) < self.n_checks: Z_list = [self.rng.integers(2) for _ in circ.qubits] diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 94c852d9..40e353c8 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -7,7 +7,8 @@ import numpy as np from numpy.random import Generator from pytket.circuit import Circuit, Op, OpType, Qubit -from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor +from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor, pauli_string_mult +from pytket.tableau import UnitaryTableau class QermitPauli: @@ -93,7 +94,6 @@ def dagger(self) -> QermitPauli: :return: Conjugate transpose of the Pauli. """ - return QermitPauli.from_qubit_pauli_tensor( qpt=QubitPauliTensor( string=self.qubit_pauli_tensor.string, @@ -428,10 +428,10 @@ def get_control_circuit(self, control_qubit: Qubit) -> Circuit: ) if pauli == Pauli.Y: - phase += 2 + phase += 1 phase %= 4 - for _ in range(self.phase): + for _ in range(phase): circ.S( control_qubit, opgroup="phase correction", @@ -460,10 +460,10 @@ def circuit(self) -> Circuit: circ.X(qubit) if pauli == Pauli.Y: - phase += 2 + phase += 1 phase %= 4 - circ.add_phase(a=self.phase / 2) + circ.add_phase(a=phase / 2) return circ diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index 45c04a2a..8fd3c8d0 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -558,7 +558,7 @@ def test_qermit_pauli_circuit() -> None: L = QermitPauli(Z_list=[1, 1, 1], X_list=[0, 0, 0], qubit_list=circ.qubits) L_circ = L.circuit - R = deepcopy(L) + R = QermitPauli(Z_list=[1, 1, 1], X_list=[0, 0, 0], qubit_list=circ.qubits) R.apply_circuit(circ) R_circ = R.circuit @@ -580,9 +580,12 @@ def test_initialisation() -> None: X_list=[0, 0, 0], qubit_list=qubit_list, ) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} - assert pauli.phase == 0 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={Qubit(0): Pauli.I, Qubit(1): Pauli.I, Qubit(2): Pauli.Z} + ), + coeff=1, + ) def test_identity_clifford() -> None: From a4ca938e2b9acb15ef367ee36b7d692ed36c316f Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:49:27 +0000 Subject: [PATCH 17/25] Use UnitaryTableau --- qermit/noise_model/qermit_pauli.py | 336 ++++++++--------------------- tests/noise_model_test.py | 155 +++++++++---- 2 files changed, 212 insertions(+), 279 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index 40e353c8..ae194e6d 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -29,27 +29,38 @@ class QermitPauli: def __init__( self, - Z_list: List[int], - X_list: List[int], - qubit_list: List[Qubit], + Z_list: list[int], + X_list: list[int], + qubit_list: list[Qubit], phase: int = 0, ): - """Initialisation is by a list of qubits, and lists of 0, 1 - values indicating that a Z or X operator acts there. + coeff = self.phase_dict[phase] - :param Z_list: 0 indicates no Z, 1 indicates Z. - :param X_list: 0 indicates no X, 1 indicates X. - :param qubit_list: List of qubits on which the Pauli acts. - :param phase: Phase as a power of i - """ + self.qubit_list = qubit_list - assert all([Z in {0, 1} for Z in Z_list]) - assert len(Z_list) == len(qubit_list) + self.unitary_tableau = UnitaryTableau(nqb=len(qubit_list)) - self.Z_list = {qubit: Z for qubit, Z in zip(qubit_list, Z_list)} - self.X_list = {qubit: X for qubit, X in zip(qubit_list, X_list)} - self.phase = phase - self.qubit_list = qubit_list + self.qubit_index = {qubit: Qubit(i) for i, qubit in enumerate(qubit_list)} + self.index_qubit = {Qubit(i): qubit for i, qubit in enumerate(qubit_list)} + + paulis = [] + + for Z, X in zip(Z_list, X_list): + if X and Z: + paulis.append(Pauli.Y) + coeff *= -1j + elif X: + paulis.append(Pauli.X) + elif Z: + paulis.append(Pauli.Z) + else: + paulis.append(Pauli.I) + + self.input_pauli_tensor = QubitPauliTensor( + qubits=[qubit_index for qubit_index in self.qubit_index.values()], + paulis=paulis, + coeff=coeff, + ) def is_measureable(self, qubit_list: List[Qubit]) -> bool: """Checks if this Pauli would be measurable on the given qubits in the @@ -109,8 +120,6 @@ def from_qubit_pauli_tensor(cls, qpt: QubitPauliTensor) -> QermitPauli: :return: Pauli created from qubit pauli string. """ - # coeff_to_phase = {1 + 0j: 0, 0 + 1j: 1, -1 + 0j: 2, 0 - 1j: 3} - Z_list = [] X_list = [] phase = cls.coeff_to_phase[qpt.coeff] @@ -184,226 +193,83 @@ def apply_circuit(self, circuit: Circuit): qubits=command.qubits, ) - def apply_gate(self, op: Op, qubits: List[Qubit]): - """Apply operation of given type to given qubit in the pauli. At - present the recognised operation types are H, S, CX, Z, Sdg, - X, Y, CZ, SWAP, and Barrier. + def apply_gate(self, op: Op, qubits: list[Qubit]): + if not op.is_clifford(): + raise Exception(f"{op} is not a Clifford operation.") - :param op_type: Type of operator to be applied. - :param qubits: Qubits to which operator is applied. - :raises Exception: Raised if operator is not recognised. - """ - - if op.type == OpType.H: - self._H(qubit=qubits[0]) - elif op.type == OpType.S: - self._S(qubit=qubits[0]) - elif op.type == OpType.CX: - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op.type == OpType.Z: - self._S(qubit=qubits[0]) - self._S(qubit=qubits[0]) - elif op.type == OpType.Sdg: - self._S(qubit=qubits[0]) - self._S(qubit=qubits[0]) - self._S(qubit=qubits[0]) - elif op.type == OpType.X: - self._H(qubit=qubits[0]) - self.apply_gate(op=Op.create(OpType.Z), qubits=qubits) - self._H(qubit=qubits[0]) - elif op.type == OpType.Y: - self.apply_gate(op=Op.create(OpType.Z), qubits=qubits) - self.apply_gate(op=Op.create(OpType.X), qubits=qubits) - elif op.type == OpType.CZ: - self._H(qubit=qubits[1]) - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self._H(qubit=qubits[1]) - elif op.type == OpType.SWAP: - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self._CX(control_qubit=qubits[1], target_qubit=qubits[0]) - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op.type == OpType.PhasedX: - if all( - math.isclose(param % 0.5, 0) or math.isclose(param % 0.5, 0.5) - for param in op.params - ): - self.apply_gate(op=Op.create(OpType.Rz, [-op.params[1]]), qubits=qubits) - self.apply_gate(op=Op.create(OpType.Rx, [op.params[0]]), qubits=qubits) - self.apply_gate(op=Op.create(OpType.Rz, [op.params[1]]), qubits=qubits) - else: - raise Exception( - f"{op.params} are not clifford angles for " + "PhasedX." - ) - elif op.type == OpType.Rz: - angle = op.params[0] - if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): - angle = round(angle, 1) - for _ in range(int((angle % 2) // 0.5)): - self._S(qubit=qubits[0]) - else: - raise Exception(f"{angle} is not a clifford angle.") - elif op.type == OpType.Rx: - angle = op.params[0] - if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): - angle = round(angle, 1) - self._H(qubit=qubits[0]) - for _ in range(int((angle % 2) // 0.5)): - self._S(qubit=qubits[0]) - self._H(qubit=qubits[0]) - else: - raise Exception(f"{angle} is not a clifford angle.") - elif op.type == OpType.ZZMax: - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - self._S(qubit=qubits[1]) - self._CX(control_qubit=qubits[0], target_qubit=qubits[1]) - elif op.type == OpType.ZZPhase: - angle = op.params[0] - if math.isclose(angle % 0.5, 0) or math.isclose(angle % 0.5, 0.5): - angle = round(angle, 1) - for _ in range(int((angle % 2) // 0.5)): - self.apply_gate(op=Op.create(OpType.ZZMax), qubits=qubits) - else: - raise Exception(f"{angle} is not a clifford angle.") - elif op.type == OpType.Barrier: - pass - else: - raise Exception( - f"{op.type} is an unrecognised gate type. " - + "Please use only Clifford gates." + if op.is_clifford_type(): + self.unitary_tableau.apply_gate_at_end( + type=op.type, + qbs=[self.qubit_index[qubit] for qubit in qubits], ) - def _S(self, qubit: Qubit): - """Act S operation on the pauli. In particular this transforms - the pauli (i)^{phase}X^{X_liist}Z^{Z_list} to - (i)^{phase}SX^{X_liist}Z^{Z_list}S^{dagger}. - - :param qubit: Qubit in Pauli onto which S is acted. - """ - - self.Z_list[qubit] += self.X_list[qubit] - self.Z_list[qubit] %= 2 - self.phase += self.X_list[qubit] - self.phase %= 4 - - def _H(self, qubit: Qubit): - """Act H operation. In particular this transforms - the Pauli (i)^{phase}X^{X_liist}Z^{Z_list} to - H(i)^{phase}X^{X_liist}Z^{Z_list}H^{dagger}. - - :param qubit: Qubit in Pauli on which H is acted. - """ - - self.phase += 2 * self.X_list[qubit] * self.Z_list[qubit] - self.phase %= 4 - - temp_X = self.X_list[qubit] - self.X_list[qubit] = self.Z_list[qubit] - self.Z_list[qubit] = temp_X - - def _CX(self, control_qubit: Qubit, target_qubit: Qubit): - """Act CX operation. In particular this transforms - the Pauli (i)^{phase}X^{X_liist}Z^{Z_list} to - CX(i)^{phase}X^{X_liist}Z^{Z_list}CX^{dagger}. - - :param control_qubit: Control qubit of CX gate. - :param target_qubit: Target qubit of CX gate. - """ - - self.Z_list[control_qubit] += self.Z_list[target_qubit] - self.Z_list[control_qubit] %= 2 - self.X_list[target_qubit] += self.X_list[control_qubit] - self.X_list[target_qubit] %= 2 - - def pre_apply_pauli(self, pauli: Union[Pauli, OpType], qubit: Qubit): - """Pre apply by a pauli on a particular qubit. - - :param pauli: Pauli to pre-apply. - :param qubit: Qubit to apply Pauli to. - :raises Exception: Raised if pauli is not a pauli operation. - """ - - if pauli in [Pauli.X, OpType.X]: - self.pre_apply_X(qubit) - elif pauli in [Pauli.Z, OpType.Z]: - self.pre_apply_Z(qubit) - elif pauli in [Pauli.Y, OpType.Y]: - self.pre_apply_X(qubit) - self.pre_apply_Z(qubit) - self.phase += 1 - self.phase %= 4 - elif pauli == Pauli.I: - pass - else: - raise Exception(f"{pauli} is not a Pauli.") - - def pre_apply_X(self, qubit: Qubit): - """Pre-apply X Pauli ito qubit. - - :param qubit: Qubit to which X is pre-applied. - """ - - self.X_list[qubit] += 1 - self.X_list[qubit] %= 2 - self.phase += 2 * self.Z_list[qubit] - self.phase %= 4 - - def pre_apply_Z(self, qubit: Qubit): - """Pre-apply Z Pauli ito qubit. + elif op.type == OpType.Rz: + for _ in range(int((op.params[0] % 2) // 0.5)): + self.apply_gate(op=Op.create(OpType.S), qubits=qubits) - :param qubit: Qubit to which Z is pre-applied. - """ + elif op.type == OpType.Rx: + self.apply_gate(op=Op.create(OpType.H), qubits=qubits) + for _ in range(int((op.params[0] % 2) // 0.5)): + self.apply_gate(op=Op.create(OpType.S), qubits=qubits) + self.apply_gate(op=Op.create(OpType.H), qubits=qubits) - self.Z_list[qubit] += 1 - self.Z_list[qubit] %= 2 + elif op.type == OpType.PhasedX: + self.apply_gate(op=Op.create(OpType.Rz, [-op.params[1]]), qubits=qubits) + self.apply_gate(op=Op.create(OpType.Rx, [op.params[0]]), qubits=qubits) + self.apply_gate(op=Op.create(OpType.Rz, [op.params[1]]), qubits=qubits) - def post_apply_pauli(self, pauli: Union[Pauli, OpType], qubit: Qubit): - """Post apply a Pauli operation. + elif op.type == OpType.ZZMax: + self.apply_gate(op=Op.create(OpType.CX), qubits=qubits) + self.apply_gate(op=Op.create(OpType.S), qubits=[qubits[1]]) + self.apply_gate(op=Op.create(OpType.CX), qubits=qubits) - :param pauli: Pauli to post-apply. - :param qubit: Qubit to post-apply pauli to. - :raises Exception: Raised if pauli is not a Pauli operation. - """ + elif op.type == OpType.ZZPhase: + for _ in range(int((op.params[0] % 2) // 0.5)): + self.apply_gate(op=Op.create(OpType.ZZMax), qubits=qubits) - if pauli in [Pauli.X, OpType.X]: - self.post_apply_X(qubit) - elif pauli in [Pauli.Z, OpType.Z]: - self.post_apply_Z(qubit) - elif pauli in [Pauli.Y, OpType.Y]: - self.post_apply_Z(qubit) - self.post_apply_X(qubit) - self.phase += 1 - self.phase %= 4 - elif pauli == Pauli.I: - pass else: - raise Exception(f"{pauli} is not a Pauli.") + raise NotImplementedError( + f"{op} if clifford but is not supported. " + "Please request the developers support this operation." + ) - def post_apply_X(self, qubit: Qubit): - """Post-apply X Pauli ito qubit. + def pre_apply_pauli(self, pauli, qubit): + mult_string, mult_coeff = pauli_string_mult( + qubitpaulistring1=self.qubit_pauli_tensor.string, + qubitpaulistring2=QubitPauliString(qubit=qubit, pauli=pauli), + ) + mult_string_map = { + self.qubit_index[qubit]: pauli for qubit, pauli in mult_string.map.items() + } + mult_string = QubitPauliString(map=mult_string_map) - :param qubit: Qubit to which X is post-applied. - """ + self.input_pauli_tensor = QubitPauliTensor( + string=mult_string, coeff=self.qubit_pauli_tensor.coeff * mult_coeff + ) - self.X_list[qubit] += 1 - self.X_list[qubit] %= 2 + self.unitary_tableau = UnitaryTableau(nqb=len(self.qubit_list)) - def post_apply_Z(self, qubit: Qubit): - """Post-apply Z Pauli ito qubit. + def post_apply_pauli(self, pauli, qubit): + mult_string, mult_coeff = pauli_string_mult( + qubitpaulistring1=QubitPauliString(qubit=qubit, pauli=pauli), + qubitpaulistring2=self.qubit_pauli_tensor.string, + ) + mult_string_map = { + self.qubit_index[qubit]: pauli for qubit, pauli in mult_string.map.items() + } + mult_string = QubitPauliString(map=mult_string_map) - :param qubit: Qubit to which Z is post-applied. - """ + self.input_pauli_tensor = QubitPauliTensor( + string=mult_string, coeff=self.qubit_pauli_tensor.coeff * mult_coeff + ) - self.Z_list[qubit] += 1 - self.Z_list[qubit] %= 2 - self.phase += 2 * self.X_list[qubit] - self.phase %= 4 + self.unitary_tableau = UnitaryTableau(nqb=len(self.qubit_list)) def get_control_circuit(self, control_qubit: Qubit) -> Circuit: """Controlled circuit which acts Pauli. :return: Controlled circuit acting Paulii. """ - circ = Circuit() circ.add_qubit(control_qubit) # TODO: in the case that this is secretly a controlled Y a controlled @@ -445,7 +311,6 @@ def circuit(self) -> Circuit: :return: Circuit acting Pauli. """ - circ = Circuit() phase = self.coeff_to_phase[self.qubit_pauli_tensor.coeff] @@ -468,30 +333,19 @@ def circuit(self) -> Circuit: return circ @property - def qubit_pauli_tensor(self) -> QubitPauliTensor: - """Return QubitPauliTensor describing Pauli. - - :return: QubitPauliTensor describing Pauli. - """ - - operator_phase = self.phase - paulis = [] - for X, Z in zip(self.X_list.values(), self.Z_list.values()): - if X == 0 and Z == 0: - paulis.append(Pauli.I) - elif X == 1 and Z == 0: - paulis.append(Pauli.X) - elif X == 0 and Z == 1: - paulis.append(Pauli.Z) - elif X == 1 and Z == 1: - paulis.append(Pauli.Y) - operator_phase += 3 - operator_phase %= 4 - + def qubit_pauli_tensor(self): + mislabled_qpt = self.unitary_tableau.get_row_product( + paulis=self.input_pauli_tensor + ) + correct_map = { + qubit: mislabled_qpt.string.map.get(index, Pauli.I) + for index, qubit in self.index_qubit.items() + } return QubitPauliTensor( - qubits=self.qubit_list, - paulis=paulis, - coeff=self.phase_dict[operator_phase], + string=QubitPauliString( + map=correct_map, + ), + coeff=mislabled_qpt.coeff, ) @classmethod diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index 8fd3c8d0..b2b2e850 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -399,9 +399,15 @@ def test_error_backpropagation() -> None: stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[0]) stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=[qubit_list[1], qubit_list[0]]) - assert stabilise.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1} - assert stabilise.X_list == {qubit_list[0]: 1, qubit_list[1]: 1} - assert stabilise.phase == 0 + assert stabilise.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + qubit_list[0]: Pauli.X, + qubit_list[1]: Pauli.Y, + } + ), + coeff=-1j, + ) stabilise = QermitPauli( Z_list=[0] * len(qubit_list), @@ -415,9 +421,15 @@ def test_error_backpropagation() -> None: stabilise.pre_apply_pauli(pauli=Pauli.Y, qubit=qubit_list[0]) stabilise.apply_gate(op=Op.create(OpType.CZ), qubits=[qubit_list[1], qubit_list[0]]) - assert stabilise.Z_list == {qubit_list[0]: 1, qubit_list[1]: 1} - assert stabilise.X_list == {qubit_list[0]: 1, qubit_list[1]: 1} - assert stabilise.phase == 1 + assert stabilise.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + qubit_list[0]: Pauli.Y, + qubit_list[1]: Pauli.Y, + } + ), + coeff=-1j, + ) def test_back_propagate_random_error() -> None: @@ -435,13 +447,17 @@ def test_back_propagate_random_error() -> None: ) noise_model = NoiseModel({OpType.CZ: error_distribution}) - # error_sampler = ErrorSampler(noise_model=noise_model) - pauli_error = noise_model.random_propagate(cliff_circ) - assert pauli_error.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1} - assert pauli_error.X_list == {qubit_list[0]: 0, qubit_list[1]: 0} - assert pauli_error.phase == 2 + assert pauli_error.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.Z, + } + ), + coeff=-1, + ) # TODO: check this test by hand. It also takes a long time to run, which @@ -732,49 +748,112 @@ def test_clifford_incremental() -> None: ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} - assert pauli.phase == 0 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.I, + Qubit(2): Pauli.Z, + } + ), + coeff=1, + ) pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[2]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.phase == 0 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.Z, + Qubit(2): Pauli.Z, + } + ), + coeff=1, + ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[1]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} - assert pauli.phase == 0 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.X, + Qubit(2): Pauli.Z, + } + ), + coeff=1, + ) pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[1]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 0} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.phase == 1 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.Y, + Qubit(2): Pauli.Z, + } + ), + coeff=1, + ) pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[2]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 1} - assert pauli.phase == 1 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.X, + Qubit(2): Pauli.Y, + } + ), + coeff=1, + ) pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[2]]) - assert pauli.X_list == {qubit_list[0]: 0, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.phase == 2 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.X, + Qubit(2): Pauli.X, + } + ), + coeff=-1, + ) pauli.apply_gate(op=Op.create(OpType.CX), qubits=[qubit_list[1], qubit_list[0]]) - assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.Z_list == {qubit_list[0]: 0, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.phase == 2 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.X, + Qubit(1): Pauli.X, + Qubit(2): Pauli.X, + } + ), + coeff=-1, + ) pauli.apply_gate(op=Op.create(OpType.S), qubits=[qubit_list[0]]) - assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.phase == 3 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.Y, + Qubit(1): Pauli.X, + Qubit(2): Pauli.X, + } + ), + coeff=-1, + ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) - assert pauli.X_list == {qubit_list[0]: 1, qubit_list[1]: 1, qubit_list[2]: 1} - assert pauli.Z_list == {qubit_list[0]: 1, qubit_list[1]: 0, qubit_list[2]: 0} - assert pauli.phase == 1 + assert pauli.qubit_pauli_tensor == QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.Y, + Qubit(1): Pauli.X, + Qubit(2): Pauli.X, + } + ), + coeff=1, + ) def test_to_from_qps() -> None: From 7657e2db490567ac3dfef2a616b6ed0e408a4242 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:05:24 +0000 Subject: [PATCH 18/25] Remove unnecessary imports --- qermit/noise_model/qermit_pauli.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/qermit/noise_model/qermit_pauli.py b/qermit/noise_model/qermit_pauli.py index ae194e6d..c9d8584f 100644 --- a/qermit/noise_model/qermit_pauli.py +++ b/qermit/noise_model/qermit_pauli.py @@ -1,11 +1,7 @@ from __future__ import annotations -import math -from collections.abc import Iterable -from typing import Dict, List, Tuple, Union +from typing import Dict, List -import numpy as np -from numpy.random import Generator from pytket.circuit import Circuit, Op, OpType, Qubit from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor, pauli_string_mult from pytket.tableau import UnitaryTableau From 9af038b06efeb51bbcbf19032d37b2132cc7c464 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:32:41 +0000 Subject: [PATCH 19/25] Repair high compute test --- tests/noise_model_test.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index b2b2e850..a75d2ecf 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -1,7 +1,6 @@ import json import multiprocessing as mp from collections import Counter -from copy import deepcopy from itertools import product import numpy as np @@ -560,10 +559,9 @@ def test_effective_error_distribution() -> None: pauli_error = QermitPauli.from_qubit_pauli_tensor( QubitPauliTensor( string=QubitPauliString(qubits=qubits, paulis=[Pauli.Z, Pauli.Y, Pauli.X]), - coeff=1, + coeff=1j, ) ) - pauli_error.phase = 2 assert abs(effective_error_dist.pauli_error_counter[pauli_error] - 4900) < 100 From c92f4290bb413314bc4dde3d74700d58bd23120f Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:02:09 +0000 Subject: [PATCH 20/25] Add qulacs dependency --- poetry.lock | 1164 +++++++++++++++++++++++------------------------- pyproject.toml | 1 + 2 files changed, 548 insertions(+), 617 deletions(-) diff --git a/poetry.lock b/poetry.lock index 96931e56..e24c7440 100644 --- a/poetry.lock +++ b/poetry.lock @@ -35,21 +35,18 @@ files = [ [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = true -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "attrs" @@ -443,73 +440,73 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.8" +version = "7.6.9" description = "Code coverage measurement for Python" optional = true python-versions = ">=3.9" files = [ - {file = "coverage-7.6.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50"}, - {file = "coverage-7.6.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6"}, - {file = "coverage-7.6.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638"}, - {file = "coverage-7.6.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed"}, - {file = "coverage-7.6.8-cp310-cp310-win32.whl", hash = "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e"}, - {file = "coverage-7.6.8-cp310-cp310-win_amd64.whl", hash = "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4"}, - {file = "coverage-7.6.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1"}, - {file = "coverage-7.6.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a"}, - {file = "coverage-7.6.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0"}, - {file = "coverage-7.6.8-cp311-cp311-win32.whl", hash = "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801"}, - {file = "coverage-7.6.8-cp311-cp311-win_amd64.whl", hash = "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee"}, - {file = "coverage-7.6.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb"}, - {file = "coverage-7.6.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c"}, - {file = "coverage-7.6.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443"}, - {file = "coverage-7.6.8-cp312-cp312-win32.whl", hash = "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad"}, - {file = "coverage-7.6.8-cp312-cp312-win_amd64.whl", hash = "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb"}, - {file = "coverage-7.6.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002"}, - {file = "coverage-7.6.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e"}, - {file = "coverage-7.6.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b"}, - {file = "coverage-7.6.8-cp313-cp313-win32.whl", hash = "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146"}, - {file = "coverage-7.6.8-cp313-cp313-win_amd64.whl", hash = "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d"}, - {file = "coverage-7.6.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf"}, - {file = "coverage-7.6.8-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83"}, - {file = "coverage-7.6.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b"}, - {file = "coverage-7.6.8-cp313-cp313t-win32.whl", hash = "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71"}, - {file = "coverage-7.6.8-cp313-cp313t-win_amd64.whl", hash = "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e"}, - {file = "coverage-7.6.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779"}, - {file = "coverage-7.6.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc"}, - {file = "coverage-7.6.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea"}, - {file = "coverage-7.6.8-cp39-cp39-win32.whl", hash = "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e"}, - {file = "coverage-7.6.8-cp39-cp39-win_amd64.whl", hash = "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076"}, - {file = "coverage-7.6.8-pp39.pp310-none-any.whl", hash = "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce"}, - {file = "coverage-7.6.8.tar.gz", hash = "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc"}, + {file = "coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb"}, + {file = "coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073"}, + {file = "coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198"}, + {file = "coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3"}, + {file = "coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0"}, + {file = "coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f"}, + {file = "coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692"}, + {file = "coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb"}, + {file = "coverage-7.6.9-cp313-cp313-win32.whl", hash = "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba"}, + {file = "coverage-7.6.9-cp313-cp313-win_amd64.whl", hash = "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9"}, + {file = "coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b"}, + {file = "coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678"}, + {file = "coverage-7.6.9-cp39-cp39-win32.whl", hash = "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6"}, + {file = "coverage-7.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4"}, + {file = "coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b"}, + {file = "coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d"}, ] [package.dependencies] @@ -584,81 +581,6 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] -[[package]] -name = "cython" -version = "3.0.11" -description = "The Cython compiler for writing C extensions in the Python language." -optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -files = [ - {file = "Cython-3.0.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:44292aae17524abb4b70a25111fe7dec1a0ad718711d47e3786a211d5408fdaa"}, - {file = "Cython-3.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75d45fbc20651c1b72e4111149fed3b33d270b0a4fb78328c54d965f28d55e1"}, - {file = "Cython-3.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89a82937ce4037f092e9848a7bbcc65bc8e9fc9aef2bb74f5c15e7d21a73080"}, - {file = "Cython-3.0.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea2e7e2d3bc0d8630dafe6c4a5a89485598ff8a61885b74f8ed882597efd5"}, - {file = "Cython-3.0.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cee29846471ce60226b18e931d8c1c66a158db94853e3e79bc2da9bd22345008"}, - {file = "Cython-3.0.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eeb6860b0f4bfa402de8929833fe5370fa34069c7ebacb2d543cb017f21fb891"}, - {file = "Cython-3.0.11-cp310-cp310-win32.whl", hash = "sha256:3699391125ab344d8d25438074d1097d9ba0fb674d0320599316cfe7cf5f002a"}, - {file = "Cython-3.0.11-cp310-cp310-win_amd64.whl", hash = "sha256:d02f4ebe15aac7cdacce1a628e556c1983f26d140fd2e0ac5e0a090e605a2d38"}, - {file = "Cython-3.0.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75ba1c70b6deeaffbac123856b8d35f253da13552207aa969078611c197377e4"}, - {file = "Cython-3.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af91497dc098718e634d6ec8f91b182aea6bb3690f333fc9a7777bc70abe8810"}, - {file = "Cython-3.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3999fb52d3328a6a5e8c63122b0a8bd110dfcdb98dda585a3def1426b991cba7"}, - {file = "Cython-3.0.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d566a4e09b8979be8ab9f843bac0dd216c81f5e5f45661a9b25cd162ed80508c"}, - {file = "Cython-3.0.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:46aec30f217bdf096175a1a639203d44ac73a36fe7fa3dd06bd012e8f39eca0f"}, - {file = "Cython-3.0.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd1fe25af330f4e003421636746a546474e4ccd8f239f55d2898d80983d20ed"}, - {file = "Cython-3.0.11-cp311-cp311-win32.whl", hash = "sha256:221de0b48bf387f209003508e602ce839a80463522fc6f583ad3c8d5c890d2c1"}, - {file = "Cython-3.0.11-cp311-cp311-win_amd64.whl", hash = "sha256:3ff8ac1f0ecd4f505db4ab051e58e4531f5d098b6ac03b91c3b902e8d10c67b3"}, - {file = "Cython-3.0.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:11996c40c32abf843ba652a6d53cb15944c88d91f91fc4e6f0028f5df8a8f8a1"}, - {file = "Cython-3.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63f2c892e9f9c1698ecfee78205541623eb31cd3a1b682668be7ac12de94aa8e"}, - {file = "Cython-3.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b14c24f1dc4c4c9d997cca8d1b7fb01187a218aab932328247dcf5694a10102"}, - {file = "Cython-3.0.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8eed5c015685106db15dd103fd040948ddca9197b1dd02222711815ea782a27"}, - {file = "Cython-3.0.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780f89c95b8aec1e403005b3bf2f0a2afa060b3eba168c86830f079339adad89"}, - {file = "Cython-3.0.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a690f2ff460682ea985e8d38ec541be97e0977fa0544aadc21efc116ff8d7579"}, - {file = "Cython-3.0.11-cp312-cp312-win32.whl", hash = "sha256:2252b5aa57621848e310fe7fa6f7dce5f73aa452884a183d201a8bcebfa05a00"}, - {file = "Cython-3.0.11-cp312-cp312-win_amd64.whl", hash = "sha256:da394654c6da15c1d37f0b7ec5afd325c69a15ceafee2afba14b67a5df8a82c8"}, - {file = "Cython-3.0.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4341d6a64d47112884e0bcf31e6c075268220ee4cd02223047182d4dda94d637"}, - {file = "Cython-3.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:351955559b37e6c98b48aecb178894c311be9d731b297782f2b78d111f0c9015"}, - {file = "Cython-3.0.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c02361af9bfa10ff1ccf967fc75159e56b1c8093caf565739ed77a559c1f29f"}, - {file = "Cython-3.0.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6823aef13669a32caf18bbb036de56065c485d9f558551a9b55061acf9c4c27f"}, - {file = "Cython-3.0.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6fb68cef33684f8cc97987bee6ae919eee7e18ee6a3ad7ed9516b8386ef95ae6"}, - {file = "Cython-3.0.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:790263b74432cb997740d73665f4d8d00b9cd1cecbdd981d93591ddf993d4f12"}, - {file = "Cython-3.0.11-cp313-cp313-win32.whl", hash = "sha256:e6dd395d1a704e34a9fac00b25f0036dce6654c6b898be6f872ac2bb4f2eda48"}, - {file = "Cython-3.0.11-cp313-cp313-win_amd64.whl", hash = "sha256:52186101d51497519e99b60d955fd5cb3bf747c67f00d742e70ab913f1e42d31"}, - {file = "Cython-3.0.11-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c69d5cad51388522b98a99b4be1b77316de85b0c0523fa865e0ea58bbb622e0a"}, - {file = "Cython-3.0.11-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8acdc87e9009110adbceb7569765eb0980129055cc954c62f99fe9f094c9505e"}, - {file = "Cython-3.0.11-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd47865f4c0a224da73acf83d113f93488d17624e2457dce1753acdfb1cc40c"}, - {file = "Cython-3.0.11-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:301bde949b4f312a1c70e214b0c3bc51a3f955d466010d2f68eb042df36447b0"}, - {file = "Cython-3.0.11-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:f3953d2f504176f929862e5579cfc421860c33e9707f585d70d24e1096accdf7"}, - {file = "Cython-3.0.11-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:3f2b062f6df67e8a56c75e500ca330cf62c85ac26dd7fd006f07ef0f83aebfa3"}, - {file = "Cython-3.0.11-cp36-cp36m-win32.whl", hash = "sha256:c3d68751668c66c7a140b6023dba5d5d507f72063407bb609d3a5b0f3b8dfbe4"}, - {file = "Cython-3.0.11-cp36-cp36m-win_amd64.whl", hash = "sha256:bcd29945fafd12484cf37b1d84f12f0e7a33ba3eac5836531c6bd5283a6b3a0c"}, - {file = "Cython-3.0.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4e9a8d92978b15a0c7ca7f98447c6c578dc8923a0941d9d172d0b077cb69c576"}, - {file = "Cython-3.0.11-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:421017466e9260aca86823974e26e158e6358622f27c0f4da9c682f3b6d2e624"}, - {file = "Cython-3.0.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80a7232938d523c1a12f6b1794ab5efb1ae77ad3fde79de4bb558d8ab261619"}, - {file = "Cython-3.0.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfa550d9ae39e827a6e7198076df763571cb53397084974a6948af558355e028"}, - {file = "Cython-3.0.11-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:aedceb6090a60854b31bf9571dc55f642a3fa5b91f11b62bcef167c52cac93d8"}, - {file = "Cython-3.0.11-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:473d35681d9f93ce380e6a7c8feb2d65fc6333bd7117fbc62989e404e241dbb0"}, - {file = "Cython-3.0.11-cp37-cp37m-win32.whl", hash = "sha256:3379c6521e25aa6cd7703bb7d635eaca75c0f9c7f1b0fdd6dd15a03bfac5f68d"}, - {file = "Cython-3.0.11-cp37-cp37m-win_amd64.whl", hash = "sha256:14701edb3107a5d9305a82d9d646c4f28bfecbba74b26cc1ee2f4be08f602057"}, - {file = "Cython-3.0.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598699165cfa7c6d69513ee1bffc9e1fdd63b00b624409174c388538aa217975"}, - {file = "Cython-3.0.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0583076c4152b417a3a8a5d81ec02f58c09b67d3f22d5857e64c8734ceada8c"}, - {file = "Cython-3.0.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52205347e916dd65d2400b977df4c697390c3aae0e96275a438cc4ae85dadc08"}, - {file = "Cython-3.0.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:989899a85f0d9a57cebb508bd1f194cb52f0e3f7e22ac259f33d148d6422375c"}, - {file = "Cython-3.0.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53b6072a89049a991d07f42060f65398448365c59c9cb515c5925b9bdc9d71f8"}, - {file = "Cython-3.0.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f988f7f8164a6079c705c39e2d75dbe9967e3dacafe041420d9af7b9ee424162"}, - {file = "Cython-3.0.11-cp38-cp38-win32.whl", hash = "sha256:a1f4cbc70f6b7f0c939522118820e708e0d490edca42d852fa8004ec16780be2"}, - {file = "Cython-3.0.11-cp38-cp38-win_amd64.whl", hash = "sha256:187685e25e037320cae513b8cc4bf9dbc4465c037051aede509cbbf207524de2"}, - {file = "Cython-3.0.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0fc6fdd6fa493be7bdda22355689d5446ac944cd71286f6f44a14b0d67ee3ff5"}, - {file = "Cython-3.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b1d1f6f94cc5d42a4591f6d60d616786b9cd15576b112bc92a23131fcf38020"}, - {file = "Cython-3.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4ab2b92a3e6ed552adbe9350fd2ef3aa0cc7853cf91569f9dbed0c0699bbeab"}, - {file = "Cython-3.0.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:104d6f2f2c827ccc5e9e42c80ef6773a6aa94752fe6bc5b24a4eab4306fb7f07"}, - {file = "Cython-3.0.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:13062ce556a1e98d2821f7a0253b50569fdc98c36efd6653a65b21e3f8bbbf5f"}, - {file = "Cython-3.0.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:525d09b3405534763fa73bd78c8e51ac8264036ce4c16d37dfd1555a7da6d3a7"}, - {file = "Cython-3.0.11-cp39-cp39-win32.whl", hash = "sha256:b8c7e514075696ca0f60c337f9e416e61d7ccbc1aa879a56c39181ed90ec3059"}, - {file = "Cython-3.0.11-cp39-cp39-win_amd64.whl", hash = "sha256:8948802e1f5677a673ea5d22a1e7e273ca5f83e7a452786ca286eebf97cee67c"}, - {file = "Cython-3.0.11-py2.py3-none-any.whl", hash = "sha256:0e25f6425ad4a700d7f77cd468da9161e63658837d1bc34861a9861a4ef6346d"}, - {file = "cython-3.0.11.tar.gz", hash = "sha256:7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff"}, -] - [[package]] name = "debugpy" version = "1.8.9" @@ -772,13 +694,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.21.0" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = true python-versions = "*" files = [ - {file = "fastjsonschema-2.21.0-py3-none-any.whl", hash = "sha256:5b23b8e7c9c6adc0ecb91c03a0768cb48cd154d9159378a69c8318532e0b5cbf"}, - {file = "fastjsonschema-2.21.0.tar.gz", hash = "sha256:a02026bbbedc83729da3bfff215564b71902757f33f60089f1abae193daa4771"}, + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] [package.extras] @@ -786,61 +708,61 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "fonttools" -version = "4.55.0" +version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61"}, - {file = "fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69"}, - {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f"}, - {file = "fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60"}, - {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6"}, - {file = "fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81"}, - {file = "fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880"}, - {file = "fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b"}, - {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51"}, - {file = "fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189"}, - {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967"}, - {file = "fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6"}, - {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3"}, - {file = "fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c"}, - {file = "fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05"}, - {file = "fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6"}, - {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7"}, - {file = "fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246"}, - {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a"}, - {file = "fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40"}, - {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d"}, - {file = "fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c"}, - {file = "fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6"}, - {file = "fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c"}, - {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9"}, - {file = "fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c"}, - {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c"}, - {file = "fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd"}, - {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4"}, - {file = "fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18"}, - {file = "fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b"}, - {file = "fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998"}, - {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:00f7cf55ad58a57ba421b6a40945b85ac7cc73094fb4949c41171d3619a3a47e"}, - {file = "fonttools-4.55.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f27526042efd6f67bfb0cc2f1610fa20364396f8b1fc5edb9f45bb815fb090b2"}, - {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e67974326af6a8879dc2a4ec63ab2910a1c1a9680ccd63e4a690950fceddbe"}, - {file = "fonttools-4.55.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61dc0a13451143c5e987dec5254d9d428f3c2789a549a7cf4f815b63b310c1cc"}, - {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e526b325a903868c62155a6a7e24df53f6ce4c5c3160214d8fe1be2c41b478"}, - {file = "fonttools-4.55.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b7ef9068a1297714e6fefe5932c33b058aa1d45a2b8be32a4c6dee602ae22b5c"}, - {file = "fonttools-4.55.0-cp38-cp38-win32.whl", hash = "sha256:55718e8071be35dff098976bc249fc243b58efa263768c611be17fe55975d40a"}, - {file = "fonttools-4.55.0-cp38-cp38-win_amd64.whl", hash = "sha256:553bd4f8cc327f310c20158e345e8174c8eed49937fb047a8bda51daf2c353c8"}, - {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6"}, - {file = "fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d"}, - {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838"}, - {file = "fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438"}, - {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6"}, - {file = "fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf"}, - {file = "fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03"}, - {file = "fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2"}, - {file = "fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f"}, - {file = "fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, + {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, + {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, + {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, + {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, + {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, + {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, + {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, + {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, + {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, + {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, + {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, + {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, + {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, + {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] [package.extras] @@ -1606,51 +1528,52 @@ files = [ [[package]] name = "matplotlib" -version = "3.9.2" +version = "3.9.3" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, - {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, - {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, - {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, - {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, - {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, - {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, - {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, - {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, - {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, - {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, - {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, - {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, - {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, - {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, - {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, - {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, - {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, - {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, - {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, - {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, - {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, - {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, - {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, - {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, - {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, + {file = "matplotlib-3.9.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:41b016e3be4e740b66c79a031a0a6e145728dbc248142e751e8dab4f3188ca1d"}, + {file = "matplotlib-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e0143975fc2a6d7136c97e19c637321288371e8f09cff2564ecd73e865ea0b9"}, + {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f459c8ee2c086455744723628264e43c884be0c7d7b45d84b8cd981310b4815"}, + {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:687df7ceff57b8f070d02b4db66f75566370e7ae182a0782b6d3d21b0d6917dc"}, + {file = "matplotlib-3.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:edd14cf733fdc4f6e6fe3f705af97676a7e52859bf0044aa2c84e55be739241c"}, + {file = "matplotlib-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c40c244221a1adbb1256692b1133c6fb89418df27bf759a31a333e7912a4010"}, + {file = "matplotlib-3.9.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cf2a60daf6cecff6828bc608df00dbc794380e7234d2411c0ec612811f01969d"}, + {file = "matplotlib-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:213d6dc25ce686516208d8a3e91120c6a4fdae4a3e06b8505ced5b716b50cc04"}, + {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52f48eb75fcc119a4fdb68ba83eb5f71656999420375df7c94cc68e0e14686e"}, + {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c93796b44fa111049b88a24105e947f03c01966b5c0cc782e2ee3887b790a3"}, + {file = "matplotlib-3.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cd1077b9a09b16d8c3c7075a8add5ffbfe6a69156a57e290c800ed4d435bef1d"}, + {file = "matplotlib-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:c96eeeb8c68b662c7747f91a385688d4b449687d29b691eff7068a4602fe6dc4"}, + {file = "matplotlib-3.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a361bd5583bf0bcc08841df3c10269617ee2a36b99ac39d455a767da908bbbc"}, + {file = "matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e14485bb1b83eeb3d55b6878f9560240981e7bbc7a8d4e1e8c38b9bd6ec8d2de"}, + {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8d279f78844aad213c4935c18f8292a9432d51af2d88bca99072c903948045"}, + {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6c12514329ac0d03128cf1dcceb335f4fbf7c11da98bca68dca8dcb983153a9"}, + {file = "matplotlib-3.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6e9de2b390d253a508dd497e9b5579f3a851f208763ed67fdca5dc0c3ea6849c"}, + {file = "matplotlib-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d796272408f8567ff7eaa00eb2856b3a00524490e47ad505b0b4ca6bb8a7411f"}, + {file = "matplotlib-3.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:203d18df84f5288973b2d56de63d4678cc748250026ca9e1ad8f8a0fd8a75d83"}, + {file = "matplotlib-3.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b651b0d3642991259109dc0351fc33ad44c624801367bb8307be9bfc35e427ad"}, + {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66d7b171fecf96940ce069923a08ba3df33ef542de82c2ff4fe8caa8346fa95a"}, + {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be0ba61f6ff2e6b68e4270fb63b6813c9e7dec3d15fc3a93f47480444fd72f0"}, + {file = "matplotlib-3.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d6b2e8856dec3a6db1ae51aec85c82223e834b228c1d3228aede87eee2b34f9"}, + {file = "matplotlib-3.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:90a85a004fefed9e583597478420bf904bb1a065b0b0ee5b9d8d31b04b0f3f70"}, + {file = "matplotlib-3.9.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3119b2f16de7f7b9212ba76d8fe6a0e9f90b27a1e04683cd89833a991682f639"}, + {file = "matplotlib-3.9.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:87ad73763d93add1b6c1f9fcd33af662fd62ed70e620c52fcb79f3ac427cf3a6"}, + {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:026bdf3137ab6022c866efa4813b6bbeddc2ed4c9e7e02f0e323a7bca380dfa0"}, + {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760a5e89ebbb172989e8273024a1024b0f084510b9105261b3b00c15e9c9f006"}, + {file = "matplotlib-3.9.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a42b9dc42de2cfe357efa27d9c50c7833fc5ab9b2eb7252ccd5d5f836a84e1e4"}, + {file = "matplotlib-3.9.3-cp313-cp313t-win_amd64.whl", hash = "sha256:e0fcb7da73fbf67b5f4bdaa57d85bb585a4e913d4a10f3e15b32baea56a67f0a"}, + {file = "matplotlib-3.9.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:031b7f5b8e595cc07def77ec5b58464e9bb67dc5760be5d6f26d9da24892481d"}, + {file = "matplotlib-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fa6e193c14d6944e0685cdb527cb6b38b0e4a518043e7212f214113af7391da"}, + {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6eefae6effa0c35bbbc18c25ee6e0b1da44d2359c3cd526eb0c9e703cf055d"}, + {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d3e5c7a99bd28afb957e1ae661323b0800d75b419f24d041ed1cc5d844a764"}, + {file = "matplotlib-3.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:816a966d5d376bf24c92af8f379e78e67278833e4c7cbc9fa41872eec629a060"}, + {file = "matplotlib-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fb0b37c896172899a4a93d9442ffdc6f870165f59e05ce2e07c6fded1c15749"}, + {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f2a4ea08e6876206d511365b0bc234edc813d90b930be72c3011bbd7898796f"}, + {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b081dac96ab19c54fd8558fac17c9d2c9cb5cc4656e7ed3261ddc927ba3e2c5"}, + {file = "matplotlib-3.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a0a63cb8404d1d1f94968ef35738900038137dab8af836b6c21bb6f03d75465"}, + {file = "matplotlib-3.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:896774766fd6be4571a43bc2fcbcb1dcca0807e53cab4a5bf88c4aa861a08e12"}, + {file = "matplotlib-3.9.3.tar.gz", hash = "sha256:cd5dbbc8e25cad5f706845c4d100e2c8b34691b412b93717ce38d8ae803bcfa5"}, ] [package.dependencies] @@ -1665,7 +1588,7 @@ pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "matplotlib-inline" @@ -1969,21 +1892,22 @@ files = [ [[package]] name = "networkx" -version = "2.8.8" +version = "3.4.2" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "networkx-2.8.8-py3-none-any.whl", hash = "sha256:e435dfa75b1d7195c7b8378c3859f0445cd88c6b0375c181ed66823a9ceb7524"}, - {file = "networkx-2.8.8.tar.gz", hash = "sha256:230d388117af870fce5647a3c52401fcf753e94720e6ea6b4197a5355648885e"}, + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, ] [package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.19)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=0.982)", "pre-commit (>=2.20)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.2)", "pydata-sphinx-theme (>=0.11)", "sphinx (>=5.2)", "sphinx-gallery (>=0.11)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.9)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numpy" @@ -2030,6 +1954,70 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "numpy" +version = "2.2.0" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, +] + [[package]] name = "packaging" version = "24.2" @@ -2078,6 +2066,36 @@ files = [ {file = "pbr-6.1.0.tar.gz", hash = "sha256:788183e382e3d1d7707db08978239965e8b9e4e5ed42669bf4758186734d5f24"}, ] +[[package]] +name = "pecos-rslib" +version = "0.6.0.dev7" +description = "Rust libary extensions for Python PECOS." +optional = true +python-versions = ">=3.8" +files = [ + {file = "pecos_rslib-0.6.0.dev7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:968f9da7a4a117461fc886ed70e23cf3f49fdc3182d5db702c857d2791520a80"}, + {file = "pecos_rslib-0.6.0.dev7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8e2e12cf7764027e834c6bcedb1d205744ad9d6871e640274536b66c68789f2"}, + {file = "pecos_rslib-0.6.0.dev7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36d2e09b594a814b8b63b1a269dce993c72a22aee459e63cceba4e5fe7fa32dc"}, + {file = "pecos_rslib-0.6.0.dev7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f6b808702f652b5894c3fa9e9a29ea89fd70a25843ae2cd3cd605349cd339a"}, + {file = "pecos_rslib-0.6.0.dev7-cp310-cp310-win_amd64.whl", hash = "sha256:03ebae0f2af0e8aa215b450e71eb4c255543f653048e99e6a3559af59858cffc"}, + {file = "pecos_rslib-0.6.0.dev7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:07d148797a836992f97e342eb54299cc51a9c3a0cd05eacc04041b4ca6470fe4"}, + {file = "pecos_rslib-0.6.0.dev7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d016b62c34988bf3a282f6cb28b2bf8d04993dd73cdf642f05064a73e101f6dc"}, + {file = "pecos_rslib-0.6.0.dev7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77281ddced777bfa77a449e0dd051d8f4ea615099cfd03a113455bcbc3ca5d4f"}, + {file = "pecos_rslib-0.6.0.dev7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de240b75f2abbb104c16dc990957115fc6fb810b4f56a923d5cfdea5888e5dd1"}, + {file = "pecos_rslib-0.6.0.dev7-cp311-cp311-win_amd64.whl", hash = "sha256:581ddbc1b390af5e1426353e26fe7dc198f7f2980963c7a0e4a9e04e0cfaaeac"}, + {file = "pecos_rslib-0.6.0.dev7-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb975049d20d0e2667041e8e42bcd69ebe6dcdbb0784c98c72f3ea8ead1b874f"}, + {file = "pecos_rslib-0.6.0.dev7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ea0399c75cbbc4f2b7f98e232854bc79df972163cf2b70ff8fa2a42af09c7249"}, + {file = "pecos_rslib-0.6.0.dev7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d1bbf5ca85ecdcf94fd9064e94c98be6cbeed04e13b4f99bbb7b283470fc6"}, + {file = "pecos_rslib-0.6.0.dev7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c06069af633e1e516aa6404dcc9df04d9899ba078a07fee7af2ec308c9a5d53"}, + {file = "pecos_rslib-0.6.0.dev7-cp312-cp312-win_amd64.whl", hash = "sha256:9b8f9168014d69a578d61745fd4a19ff9530fe4ae1bc4ff834f5916319bc2ed5"}, + {file = "pecos_rslib-0.6.0.dev7-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d1005618731b0df3d459b24aab953ec90c75d8e8e128de5fabb79737a085ea73"}, + {file = "pecos_rslib-0.6.0.dev7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7226926b7caeff3e3e599c6338195f5f56c38966e143761f5d85abb0719ec243"}, + {file = "pecos_rslib-0.6.0.dev7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ef54d7f32dea234f760e91d662b8a3c16419498137925b763c3c1223417d0aa"}, + {file = "pecos_rslib-0.6.0.dev7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d0e0e279ad5f214b82b3e320c8478285a82722dc8f217bcd652914e21703871"}, + {file = "pecos_rslib-0.6.0.dev7-cp313-cp313-win_amd64.whl", hash = "sha256:85feec389c283ffb815c7174ef73c69fa6d8fb5c980d165a291ece74a72475a4"}, + {file = "pecos_rslib-0.6.0.dev7.tar.gz", hash = "sha256:07bb22beefa629496afcf857ead8871541de3cd1497a5c8d9301d1cfcf33af19"}, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -2234,30 +2252,6 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "projectq" -version = "0.8.0" -description = "ProjectQ - An open source software framework for quantum computing" -optional = true -python-versions = ">=3.7" -files = [ - {file = "projectq-0.8.0.tar.gz", hash = "sha256:0bcd242afabe947ac4737dffab1de62628b84125ee6ccb3ec23bd4f1d082ec60"}, -] - -[package.dependencies] -matplotlib = ">=2.2.3" -networkx = ">=2" -numpy = "*" -requests = "*" -scipy = "*" - -[package.extras] -azure-quantum = ["azure-quantum"] -braket = ["boto3"] -docs = ["sphinx", "sphinx_rtd_theme"] -revkit = ["dormouse", "revkit (==3.0a2.dev2)"] -test = ["flaky", "mock", "pytest (>=6.0)", "pytest-cov", "pytest-mock"] - [[package]] name = "prompt-toolkit" version = "3.0.48" @@ -2327,20 +2321,6 @@ files = [ [package.extras] tests = ["pytest"] -[[package]] -name = "pybind11" -version = "2.13.6" -description = "Seamless operability between C++11 and Python" -optional = true -python-versions = ">=3.7" -files = [ - {file = "pybind11-2.13.6-py3-none-any.whl", hash = "sha256:237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5"}, - {file = "pybind11-2.13.6.tar.gz", hash = "sha256:ba6af10348c12b24e92fa086b39cfba0eff619b61ac77c406167d813b096d39a"}, -] - -[package.extras] -global = ["pybind11-global (==2.13.6)"] - [[package]] name = "pycparser" version = "2.22" @@ -2354,19 +2334,22 @@ files = [ [[package]] name = "pydantic" -version = "2.10.2" +version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, - {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.27.1" -typing-extensions = ">=4.12.2" +pydantic-core = "2.23.4" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] [package.extras] email = ["email-validator (>=2.0.0)"] @@ -2374,111 +2357,100 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.27.1" +version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, - {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, - {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, - {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, - {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, - {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, - {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, - {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, - {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, - {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, - {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, - {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, - {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, - {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, - {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, - {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, - {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] @@ -2547,65 +2519,6 @@ files = [ [package.extras] test = ["pytest (>=7.2.0,<7.3.0)"] -[[package]] -name = "pyquest" -version = "0.0.1" -description = "A Python interface for QuEST." -optional = true -python-versions = ">=3.7" -files = [ - {file = "pyquest-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43173b21e544ad13325e72fb8a84cda76f4c8bb2da0b679ad06472737a19036d"}, - {file = "pyquest-0.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e2dea8226671bb61d893a5e7aef47f6a0021f24322b5b6feccd649d2e471990"}, - {file = "pyquest-0.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:695914f5ef71b32c9ee20e96f29638035ab37365f20e1cf0b34a388e2e579178"}, - {file = "pyquest-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:231c354f0e28d64bda9f40df87bc508652508a4484cd056e2b2458086b199bed"}, - {file = "pyquest-0.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:016bb1e07dd370df09e144646ff286ec46f95e0f43055d4f36c01d819cf6372d"}, - {file = "pyquest-0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f0efab71b17448e8b2dac098e098125c92c5306331c5b1dd130470178bd64b2"}, - {file = "pyquest-0.0.1-cp310-cp310-win32.whl", hash = "sha256:eb62de18da0159db95b4b2a916ad532d0da6a7cb0a0d9c83c144831c8fd452b2"}, - {file = "pyquest-0.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:f1997520b11b2d0850c38ec842561333a6acd3f1d3019cd0ed5bd9794283b628"}, - {file = "pyquest-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8406f4efe2daea5685276a93e23683532923f1b3dac32edc30f6369076d94d3"}, - {file = "pyquest-0.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f8d4d77ec27b1e768a68915fb2198c1f0f433074946a2aca2e2593fc3dd146f"}, - {file = "pyquest-0.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9399ec92c262adef0cda52be3911f2adfc7c17e2fe02f55083e3213a9eec8c43"}, - {file = "pyquest-0.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7f4f7dc943f3e0e91ec52d00501d9021148b1c34131694549ea3d229ef5dc96"}, - {file = "pyquest-0.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a5353e0dec4b723fea2fd280529f8e5cc96d50e79e9781926501e108bf63e34e"}, - {file = "pyquest-0.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:40a89b119fe81435d8f943dfef3e9cda4afdc08e7f16b765e46efd4c5aaf809d"}, - {file = "pyquest-0.0.1-cp311-cp311-win32.whl", hash = "sha256:d61a602c3e6586b11e1f2ccd6e8699cb956b1afa51dac573d9063561f7cf9e36"}, - {file = "pyquest-0.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:10eb813ffb572f06e07a6b7991452129a3401e1e6e1a876a9ad08a07469c92d9"}, - {file = "pyquest-0.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4d8f701eb4b6f04878831a61415df620d4eeab9296d170501d7d8dc7ee6295b0"}, - {file = "pyquest-0.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d2a2a24d4e362d994d9e940b8c8e68a64fdb09d1e2f52dd7bb2e5b12964dbbc"}, - {file = "pyquest-0.0.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:444bca5e7a67f7701ce609e86e0be8150dd5485ca618888da0dd6bca7de4d17a"}, - {file = "pyquest-0.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd68d07f456323c085433603198d06bfa960948541c34507c6ccdf29b309c2ea"}, - {file = "pyquest-0.0.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:17408c18bd4e534bbe0fc82ca0177055bf60f1851161293e423dd1d56b6ff26e"}, - {file = "pyquest-0.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:72521f611be35ec83855c5a1e7c58c0007ccf06cada175cd8c381f8c6bf92e5c"}, - {file = "pyquest-0.0.1-cp312-cp312-win32.whl", hash = "sha256:7dc340f178b79601cb5923d0431d7217b4c3acaf90a92553ec66ed0e2c56c8ad"}, - {file = "pyquest-0.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e0632c6d974ec8a852e17722f63217629a057cbb9fbc015005aded53436ac17"}, - {file = "pyquest-0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:730585ea635618632139a384fa1bd82d90c1cf11bb13b9d9aa87a4c8915ab3e1"}, - {file = "pyquest-0.0.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ab0e2c341a24181fe9c10451f80143ada69d8bca8928700b4291bcdabeb9cd8"}, - {file = "pyquest-0.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b381e552469d92c5bdef906ca0bb3b6b362c08f9c4feebdb3ccd4bd065198fa"}, - {file = "pyquest-0.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6a88519c51e70a06261f61e2496da6bf5f6d2687ab373d31b7ea9cc53f4021c5"}, - {file = "pyquest-0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:39ec2252b30dc4d4e98e1d9f13bcbaf133452d3c0e14c0f81ffdbc14a913e7d2"}, - {file = "pyquest-0.0.1-cp37-cp37m-win32.whl", hash = "sha256:a0f73f267a9269e7600fa86478a65f8fec18ffd8eac76c400da6cae30c73c73c"}, - {file = "pyquest-0.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:058cb13bc86aea6a312c34c74297da45626490d773d8ecd40392ebe60c3a0c46"}, - {file = "pyquest-0.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:174b8e0358a6b204f25698151665854b111c37d8b0c9db10c7fa65fd0e368b4f"}, - {file = "pyquest-0.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6202629a7dc28112cb7312f19c1a822ea600b481c253736fa50a69b327448404"}, - {file = "pyquest-0.0.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbfa283e664e451a1770c7bedce1a0a33e583afc490f9eeecdd7371f74d6d029"}, - {file = "pyquest-0.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9225aac2cb90c12fc091f1f9537a55f99336a2c9316f48b6d7b58af35a359f19"}, - {file = "pyquest-0.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:eabd8999fe233612267fa0c41ccda409572b53839333aaae384b546c563f5954"}, - {file = "pyquest-0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af44d3a4817066566597fac299c00ae4a1355c8b49457f720b77125061aecf4"}, - {file = "pyquest-0.0.1-cp38-cp38-win32.whl", hash = "sha256:314ca00314f7ac7174186ba0832446fa2c42fd20cb9eb340d874f478eb4314a7"}, - {file = "pyquest-0.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:b14f70dd59b29d7a066f0ddf45425d5789c069f8cc15b19c1ed60a257fc27bb3"}, - {file = "pyquest-0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d10fcf06055eb6f3e51229d6eafff010b586fb8b5cb461903306b7fb92d1bb9"}, - {file = "pyquest-0.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52f5eb5ce456b5c6d65aed282218580c592f0396f340ade6746a3718c095633d"}, - {file = "pyquest-0.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b54e39745cca784eb82adeab4e502cf4fa35148117d992f5bd9a1cd2a826f192"}, - {file = "pyquest-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a9078cf697c1b8284d2b7948534df4e75c736882aa4696968d09c403ec08286"}, - {file = "pyquest-0.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e3e36eaeaa8e76c15e439fedbc16175d6ea9fba6c8ef19c4a6d60547adb7ac9c"}, - {file = "pyquest-0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a0e77bdbf76165c16cf0cbb123bea6112bbe9fbee68c2fcdd48227910d33d070"}, - {file = "pyquest-0.0.1-cp39-cp39-win32.whl", hash = "sha256:7f99d62e67888bf4f13183a8bff84cc45ab17c600866ec52d3b0bc66f4df1e2a"}, - {file = "pyquest-0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:e566daedba50fe45c0f5b9b6e8474a8f7ed833ff63db08cc20493168113f7f5a"}, -] - -[package.dependencies] -numpy = ">=1.20" - [[package]] name = "pyspnego" version = "0.11.2" @@ -2627,13 +2540,13 @@ yaml = ["ruamel.yaml"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = true python-versions = ">=3.8" files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] @@ -3145,19 +3058,19 @@ visualization = ["ipython (>=5.0.0)", "ipyvue (>=1.8.5)", "ipyvuetify (>=1.1)", [[package]] name = "qiskit-ibm-runtime" -version = "0.33.2" +version = "0.34.0" description = "IBM Quantum client for Qiskit Runtime." optional = false python-versions = ">=3.8" files = [ - {file = "qiskit_ibm_runtime-0.33.2-py3-none-any.whl", hash = "sha256:fe414429098f49c7caddca31203b801eca0f2b587913eb3583c5b284a6c2c271"}, - {file = "qiskit_ibm_runtime-0.33.2.tar.gz", hash = "sha256:f75bcfee97c4a8014a7999a353b5adc70dccf4b92eafc1cf81fa05a26ea5519b"}, + {file = "qiskit_ibm_runtime-0.34.0-py3-none-any.whl", hash = "sha256:a082c7ae53cf771c28ed2d8748a86990bada1ab4742c171d49918a8948a910bd"}, + {file = "qiskit_ibm_runtime-0.34.0.tar.gz", hash = "sha256:58905231fa326d8c8e5b72c1eb55d0ca193af8276eeb4b8a55e9b7cddfc98882"}, ] [package.dependencies] ibm-platform-services = ">=0.22.6" numpy = ">=1.13" -pydantic = ">=2.5.0" +pydantic = ">=2.5.0,<2.10" python-dateutil = ">=2.8.0" qiskit = ">=1.1.0" requests = ">=2.19" @@ -3166,69 +3079,73 @@ urllib3 = ">=1.21.1" websocket-client = ">=1.5.1" [package.extras] +common = ["black (>=24.1,<25.0)", "coverage (>=6.3)", "ddt (>=1.2.0,!=1.4.0,!=1.4.3)", "jupyter", "matplotlib (>=2.1)", "mypy (==0.931)", "nbconvert (>=5.3.1)", "nbformat (>=4.4.0)", "nbqa (==1.5.3)", "pproxy (==2.7.8)", "pylatexenc", "pylint (==3.0.0)", "qiskit-aer (>=0.14.2)", "scikit-learn", "scipy (>=1.0)", "setuptools", "websockets (>=8)"] +dev = ["qiskit-ibm-runtime[common]", "qiskit-ibm-runtime[documentation]"] +documentation = ["Sphinx (>=6)", "jupyter-sphinx", "nbsphinx", "packaging", "sphinx-autodoc-typehints (<=1.19.2)", "sphinx-automodapi", "sphinxcontrib-katex (==0.9.9)"] visualization = ["plotly (>=5.23.0)"] [[package]] name = "quantum-pecos" -version = "0.6.0.dev6" +version = "0.6.0.dev7" description = "PECOS is a library/framework for the evaluation, study, and design of QEC protocols. It also provides the ability to study and evaluate the performance advanced hybrid quantum/classical compute execution models for NISQ algorithms and beyond." optional = true python-versions = ">=3.10" files = [ - {file = "quantum_pecos-0.6.0.dev6-py2.py3-none-any.whl", hash = "sha256:a29c757e89fe6040e43be4d374cd1c3d1fed31d9fff542f4feb53b346d33921d"}, - {file = "quantum_pecos-0.6.0.dev6.tar.gz", hash = "sha256:3064752eedbdb14cfcc0800380bdda980ada070acb8ec7693a01cc373a2f7592"}, + {file = "quantum_pecos-0.6.0.dev7-py2.py3-none-any.whl", hash = "sha256:d3988e1ed697b071e851d20f761e175858d4eff16c6f0ce76b9b80fdd30c1e78"}, + {file = "quantum_pecos-0.6.0.dev7.tar.gz", hash = "sha256:859f71db326c9daf0a1ca6ba3046d5f4b74013ff3138e1ebb1049bea6f161d6d"}, ] [package.dependencies] -cython = {version = "*", optional = true, markers = "extra == \"simulators\""} -matplotlib = ">=2.2.0,<4.0" -networkx = ">=2.1.0,<3.0" -numpy = ">=1.15.0,<2.0" -phir = ">=0.3.3,<0.4" -projectq = {version = ">=0.5.0,<0.9.0", optional = true, markers = "extra == \"simulators\""} -pybind11 = {version = ">=2.2.3,<3.0", optional = true, markers = "extra == \"simulators\""} -pyquest = {version = ">=0.0.1", optional = true, markers = "extra == \"simulators\""} -qulacs = {version = ">=0.6.4", optional = true, markers = "extra == \"simulators\""} -scipy = ">=1.1.0,<2.0" +matplotlib = ">=2.2.0" +networkx = ">=2.1.0" +numpy = [ + {version = ">=1.15.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.15.0,<2.0", markers = "python_version < \"3.13\""}, +] +pecos-rslib = "0.6.0.dev7" +phir = ">=0.3.3" +scipy = ">=1.1.0" wasmtime = {version = ">=13.0", optional = true, markers = "extra == \"wasmtime\""} [package.extras] -all = ["quantum-pecos[simulators]", "quantum-pecos[tests]", "quantum-pecos[visualization]", "quantum-pecos[wasmer]", "quantum-pecos[wasmtime]"] +all = ["quantum-pecos[projectq]", "quantum-pecos[pyquest]", "quantum-pecos[qulacs]", "quantum-pecos[tests]", "quantum-pecos[visualization]", "quantum-pecos[wasmer]", "quantum-pecos[wasmtime]"] cuda = ["cupy (>=10.4.0)", "cuquantum-python (>=24.03.0)", "custatevec (>=1.6.0)", "pytket-cutensornet (>=0.7.0)"] -simulators = ["cython", "projectq (>=0.5.0,<0.9.0)", "pybind11 (>=2.2.3,<3.0)", "pyquest (>=0.0.1)", "qulacs (>=0.6.4)"] -tests = ["hypothesis", "pytest (>=5.0.0)"] +projectq = ["projectq", "pybind11 (>=2.2.3)"] +pyquest = ["pyquest (>=0.0.1)"] +qulacs = ["qulacs (>=0.6.4)"] +tests = ["hypothesis", "pytest (>=5.0.0,<8.3.4)", "pytest-cov"] visualization = ["plotly (>=5.9.0,<5.10.0)"] -wasmer = ["wasmer (>=1.1.0,<1.2.0)", "wasmer-compiler-cranelift (>=1.1.0,<1.2.0)"] +wasmer = ["wasmer (>=1.1.0,<1.2.0)", "wasmer_compiler_cranelift (>=1.1.0,<1.2.0)"] wasmtime = ["wasmtime (>=13.0)"] [[package]] name = "qulacs" -version = "0.6.10" +version = "0.6.11" description = "Quantum circuit simulator for research" -optional = true +optional = false python-versions = "*" files = [ - {file = "qulacs-0.6.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f3c9e60929947f68117fa4e19b097490377a9fe2482d527444d0201a89d9a87b"}, - {file = "qulacs-0.6.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c8857e283c0e1627a12a155a1b5ed593cf32f8037a291e2297e044d75a82d3"}, - {file = "qulacs-0.6.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c80a45202ceff76fcc3a0f2f21125d1187fa6baddc51c969cfb0949b2a3ba9e"}, - {file = "qulacs-0.6.10-cp310-cp310-win_amd64.whl", hash = "sha256:c72571328ca3fbc94b4277feaf8629781580e9b22da471b4355f01dd135a52a8"}, - {file = "qulacs-0.6.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a8d044c3d9ebb8c393ed11bd5e92ee30e8ca485016b9e0c1e7a8fd4fac9d21"}, - {file = "qulacs-0.6.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43d4cab074fb0a85d21b621d9c951c31a9a21ac361ce34056b39a758245b8a95"}, - {file = "qulacs-0.6.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ca215e00fe956aa0f12c2a0fcbecd9283fe571b2cc36e3c68bdd1f48ca406a"}, - {file = "qulacs-0.6.10-cp311-cp311-win_amd64.whl", hash = "sha256:acefb66da0bf563169b135865efb9d85f9f4428b02503d08fa6cc6289d6d9aec"}, - {file = "qulacs-0.6.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:04d68f4b3616741f4cf3f03fd63a964118d560204b15e6ef331e71b64a8a7d72"}, - {file = "qulacs-0.6.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e378ebb421dcc926f7e040dad326756b2ca6b921598fd6bfe66ceeb5e5a4b8e2"}, - {file = "qulacs-0.6.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca8bd30828571d5a83f408f995030efee2350020cc8351d5695139dd0ddeac18"}, - {file = "qulacs-0.6.10-cp312-cp312-win_amd64.whl", hash = "sha256:354458f1576fa88806cc31b692ea56a935fd62fb01cfd351c01aa80c0e6a61f6"}, - {file = "qulacs-0.6.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3ffd975f04f0583e75d792a3adc9268f23251e86f192e6d411350684699ad794"}, - {file = "qulacs-0.6.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c9c0d7204a400e6eb7dc10fdfbf26949622e67cc7ae22e80d9f4a74577ef31c"}, - {file = "qulacs-0.6.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f66ef094aba52281348f929b5ce9f55b39a50e8c9d7a7f9e98564a4ae372cac"}, - {file = "qulacs-0.6.10-cp38-cp38-win_amd64.whl", hash = "sha256:1a0e1293e8619921791be2150a5db633585ad20f1ef2ad718f0fd41af8900ed9"}, - {file = "qulacs-0.6.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ce590b72bffb992d158022fde34f264c7d44c78a40546be9e58465765a3f962"}, - {file = "qulacs-0.6.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8410fdcc8477fd970cba6ab9b83e1d3a03cdf3d28ac0d3ec146c939d67c13c40"}, - {file = "qulacs-0.6.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:287b5f756faa3842d6b4cc20c0ab000b6a9f63891f3aaaf7a069537e02dccfe4"}, - {file = "qulacs-0.6.10-cp39-cp39-win_amd64.whl", hash = "sha256:e8a7afbdaf53b54e925f96d5bb7bf3acd885fa9037ac8d4ee83a0053c90b29b1"}, - {file = "qulacs-0.6.10.tar.gz", hash = "sha256:e7a872f0497b22ac3e64a9074a6b5572d5cb426864ac27f5cbfd11527959cd96"}, + {file = "qulacs-0.6.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35b007c96fc357b64d7c0c2fb5f6a7337708cca1180658607904a408e62037da"}, + {file = "qulacs-0.6.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:56fb790d9ee6f24b39ed691d906983b54b7992f7a011b2c6c436188c5ce626ab"}, + {file = "qulacs-0.6.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:117813f4238e4594a72468823bad715361983742ea8d1948a2aaf62965460f20"}, + {file = "qulacs-0.6.11-cp310-cp310-win_amd64.whl", hash = "sha256:b199964dbaf6785233a39d4cde8f0e139bf360c75f8f99b31c0bb37179eacd84"}, + {file = "qulacs-0.6.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:50431a7571504f620127e564947ab03d3be32a2b0fcca5c7f9391bab125601a2"}, + {file = "qulacs-0.6.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db64865730f099fd4e880453c8874cb593c42a036007465ce59208240b9f83b3"}, + {file = "qulacs-0.6.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf675de5f608824a84f107f48472df2d4a4133ae1b0d5c13d8157a47b6efa78"}, + {file = "qulacs-0.6.11-cp311-cp311-win_amd64.whl", hash = "sha256:98a5b6957807c4e5f6ad12f5bad71a4b90d8211c80c38b074304f58dad7b0988"}, + {file = "qulacs-0.6.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:739b1a63ef909caa5f579cba78dc77e3ab00cfe261b3384f81f4591b9aa3458c"}, + {file = "qulacs-0.6.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a1df7d8e5fd3c402ab7214a3e2486e33fb0b1f0b9a0cfcd0c0e568871dff09"}, + {file = "qulacs-0.6.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da7a659c73c0a575af16ab7bd9ef1673a24fc5baf8e82b1401a798b82406362"}, + {file = "qulacs-0.6.11-cp312-cp312-win_amd64.whl", hash = "sha256:07e6ff93d875907423aedea41cadaa5c7ee96001d4a79603ecdb725bfedc33c7"}, + {file = "qulacs-0.6.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:98c8e5981317c3c2e8fd8c7d9824067306e1a794ff1a0f5545096c298b090cb6"}, + {file = "qulacs-0.6.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:07b5e714aeefa177a7b39d2430d06afddbf92778cc0fc7d18c3cae4271de94e7"}, + {file = "qulacs-0.6.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97b1b72a6d47e525c5d7ff4a9a9fe2d3f7cd61051ea9d4a177dd006588fe4c62"}, + {file = "qulacs-0.6.11-cp38-cp38-win_amd64.whl", hash = "sha256:f943b07e8d299376fb032920d70fa66c62d2f99f2c6da7a1175c4a60858c1bee"}, + {file = "qulacs-0.6.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:42abca915c49b082df7e85c7e6d86dfe62f173fcdb82f9f65830a79ee2467cfe"}, + {file = "qulacs-0.6.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9241e1e97298515dc0466eabc87aabb8ee00a1134c64973cb03581b9a3aa1e7c"}, + {file = "qulacs-0.6.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679d13a65d2f68587b5bde2a0cefa7e8cc0d3f0075561ecdb1d130cff36e2c5b"}, + {file = "qulacs-0.6.11-cp39-cp39-win_amd64.whl", hash = "sha256:2c2f10adefcbb667fbea7a0b1db59f876190f508eb843965bb8a8f59d5b0a1c5"}, + {file = "qulacs-0.6.11.tar.gz", hash = "sha256:3dfa030c6d90e78c8dfe840423a53fb1d7e7e4a63bb7180e1b46a4d25d2c72bf"}, ] [package.dependencies] @@ -3328,128 +3245,141 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.21.0" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.9" files = [ - {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, - {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, - {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, - {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, - {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, - {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, - {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, - {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, - {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, - {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, - {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, - {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, - {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] [[package]] name = "ruff" -version = "0.8.1" +version = "0.8.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = true python-versions = ">=3.7" files = [ - {file = "ruff-0.8.1-py3-none-linux_armv6l.whl", hash = "sha256:fae0805bd514066f20309f6742f6ee7904a773eb9e6c17c45d6b1600ca65c9b5"}, - {file = "ruff-0.8.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8a4f7385c2285c30f34b200ca5511fcc865f17578383db154e098150ce0a087"}, - {file = "ruff-0.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd054486da0c53e41e0086e1730eb77d1f698154f910e0cd9e0d64274979a209"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2029b8c22da147c50ae577e621a5bfbc5d1fed75d86af53643d7a7aee1d23871"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2666520828dee7dfc7e47ee4ea0d928f40de72056d929a7c5292d95071d881d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:333c57013ef8c97a53892aa56042831c372e0bb1785ab7026187b7abd0135ad5"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:288326162804f34088ac007139488dcb43de590a5ccfec3166396530b58fb89d"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b12c39b9448632284561cbf4191aa1b005882acbc81900ffa9f9f471c8ff7e26"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:364e6674450cbac8e998f7b30639040c99d81dfb5bbc6dfad69bc7a8f916b3d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b22346f845fec132aa39cd29acb94451d030c10874408dbf776af3aaeb53284c"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b2f2f7a7e7648a2bfe6ead4e0a16745db956da0e3a231ad443d2a66a105c04fa"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:adf314fc458374c25c5c4a4a9270c3e8a6a807b1bec018cfa2813d6546215540"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a885d68342a231b5ba4d30b8c6e1b1ee3a65cf37e3d29b3c74069cdf1ee1e3c9"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d2c16e3508c8cc73e96aa5127d0df8913d2290098f776416a4b157657bee44c5"}, - {file = "ruff-0.8.1-py3-none-win32.whl", hash = "sha256:93335cd7c0eaedb44882d75a7acb7df4b77cd7cd0d2255c93b28791716e81790"}, - {file = "ruff-0.8.1-py3-none-win_amd64.whl", hash = "sha256:2954cdbe8dfd8ab359d4a30cd971b589d335a44d444b6ca2cb3d1da21b75e4b6"}, - {file = "ruff-0.8.1-py3-none-win_arm64.whl", hash = "sha256:55873cc1a473e5ac129d15eccb3c008c096b94809d693fc7053f588b67822737"}, - {file = "ruff-0.8.1.tar.gz", hash = "sha256:3583db9a6450364ed5ca3f3b4225958b24f78178908d5c4bc0f46251ccca898f"}, + {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, + {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, + {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, + {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, + {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, + {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, + {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, ] [[package]] @@ -3553,13 +3483,13 @@ type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12 [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -4315,4 +4245,4 @@ tests = ["mypy", "pytest", "pytest-cov", "pytket-quantinuum", "qiskit-ibm-provid [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "518fb4ebd0da46487bbb8279c79d26e244c3459d43ab11e8506fbd7ab91095f6" +content-hash = "15c0d2722625025e8e8290f48766f172a993fdb89dd4c4f83b05e7a0dec3d27a" diff --git a/pyproject.toml b/pyproject.toml index 3c052111..e5644470 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ furo = { version = "^2024.8.6", optional = true } myst-nb = { version = "^1.1.2", optional = true} sphinx-autodoc-typehints = { version = "^2.5.0", optional = true } jupyter-sphinx = { version = "^0.5.3", optional = true} +qulacs = "^0.6.11" [tool.poetry.extras] tests = [ From 87ed732a6252e63e3e200b80427c11fd720255f1 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:07:47 +0000 Subject: [PATCH 21/25] Move qulacs dependency --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e5644470..4ff31a33 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ readme = "README.md" python = ">=3.10,<3.14" pytket-qiskit = "^0.60.0" matplotlib = "^3.8.3" +qulacs = "^0.6.11" pytest = { version = "^8.1.1", optional = true } mypy = { version = "^1.9.0", optional = true } @@ -29,7 +30,6 @@ furo = { version = "^2024.8.6", optional = true } myst-nb = { version = "^1.1.2", optional = true} sphinx-autodoc-typehints = { version = "^2.5.0", optional = true } jupyter-sphinx = { version = "^0.5.3", optional = true} -qulacs = "^0.6.11" [tool.poetry.extras] tests = [ From a1eaf53dfddd4c97e2fe42d26ea9fd7137627183 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:13:26 +0000 Subject: [PATCH 22/25] Add projectq --- poetry.lock | 26 +++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index e24c7440..d1de7f06 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2252,6 +2252,30 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "projectq" +version = "0.8.0" +description = "ProjectQ - An open source software framework for quantum computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "projectq-0.8.0.tar.gz", hash = "sha256:0bcd242afabe947ac4737dffab1de62628b84125ee6ccb3ec23bd4f1d082ec60"}, +] + +[package.dependencies] +matplotlib = ">=2.2.3" +networkx = ">=2" +numpy = "*" +requests = "*" +scipy = "*" + +[package.extras] +azure-quantum = ["azure-quantum"] +braket = ["boto3"] +docs = ["sphinx", "sphinx_rtd_theme"] +revkit = ["dormouse", "revkit (==3.0a2.dev2)"] +test = ["flaky", "mock", "pytest (>=6.0)", "pytest-cov", "pytest-mock"] + [[package]] name = "prompt-toolkit" version = "3.0.48" @@ -4245,4 +4269,4 @@ tests = ["mypy", "pytest", "pytest-cov", "pytket-quantinuum", "qiskit-ibm-provid [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "15c0d2722625025e8e8290f48766f172a993fdb89dd4c4f83b05e7a0dec3d27a" +content-hash = "b3da9668630723c6def5e311d38009bd63b1a9f488469e9bfc142113e1dffad8" diff --git a/pyproject.toml b/pyproject.toml index 4ff31a33..30234ca0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ furo = { version = "^2024.8.6", optional = true } myst-nb = { version = "^1.1.2", optional = true} sphinx-autodoc-typehints = { version = "^2.5.0", optional = true } jupyter-sphinx = { version = "^0.5.3", optional = true} +projectq = "^0.8.0" [tool.poetry.extras] tests = [ From a285f2bb390c74522810dfeac5833d8918cf7f77 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:17:41 +0000 Subject: [PATCH 23/25] Reduce projectq version dep --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 30234ca0..5d1687ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ python = ">=3.10,<3.14" pytket-qiskit = "^0.60.0" matplotlib = "^3.8.3" qulacs = "^0.6.11" +projectq = "^0.7.0" pytest = { version = "^8.1.1", optional = true } mypy = { version = "^1.9.0", optional = true } @@ -30,7 +31,6 @@ furo = { version = "^2024.8.6", optional = true } myst-nb = { version = "^1.1.2", optional = true} sphinx-autodoc-typehints = { version = "^2.5.0", optional = true } jupyter-sphinx = { version = "^0.5.3", optional = true} -projectq = "^0.8.0" [tool.poetry.extras] tests = [ From a71de8ee3cea87a217c0f2a8fc1e597876adc6ae Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Thu, 12 Dec 2024 17:39:05 +0000 Subject: [PATCH 24/25] Revert projectq dependency change --- poetry.lock | 152 +++++++++++++++++++++---------------------------- pyproject.toml | 2 - 2 files changed, 64 insertions(+), 90 deletions(-) diff --git a/poetry.lock b/poetry.lock index d1de7f06..6cbb400b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2256,7 +2256,7 @@ testing = ["pytest", "pytest-benchmark"] name = "projectq" version = "0.8.0" description = "ProjectQ - An open source software framework for quantum computing" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "projectq-0.8.0.tar.gz", hash = "sha256:0bcd242afabe947ac4737dffab1de62628b84125ee6ccb3ec23bd4f1d082ec60"}, @@ -2345,6 +2345,20 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "pybind11" +version = "2.13.6" +description = "Seamless operability between C++11 and Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pybind11-2.13.6-py3-none-any.whl", hash = "sha256:237c41e29157b962835d356b370ededd57594a26d5894a795960f0047cb5caf5"}, + {file = "pybind11-2.13.6.tar.gz", hash = "sha256:ba6af10348c12b24e92fa086b39cfba0eff619b61ac77c406167d813b096d39a"}, +] + +[package.extras] +global = ["pybind11-global (==2.13.6)"] + [[package]] name = "pycparser" version = "2.22" @@ -2618,31 +2632,31 @@ six = ">=1.5" [[package]] name = "pytket" -version = "1.36.0" +version = "1.37.0" description = "Quantum computing toolkit and interface to the TKET compiler" optional = false python-versions = ">=3.10" files = [ - {file = "pytket-1.36.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4b360ba2362cc9ae75929a9c3e9b5259fe82214ca21aaf9e892811d5cc205bc1"}, - {file = "pytket-1.36.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:aacf6ca5565b0e8d73f06462600d4f66179b0a0ea7110ca3c496f5b1f27c2aa9"}, - {file = "pytket-1.36.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2dc9be3b03670343d2af5e171ef8a13450a39a48dc5ffb7098afa721256aea03"}, - {file = "pytket-1.36.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8563d94c927cadac076eef6667721899a6f103e6b8cdc9d7b104624ab4b1cbc6"}, - {file = "pytket-1.36.0-cp310-cp310-win_amd64.whl", hash = "sha256:ffd37116afe4fa48910b8011458a05bde4eb82bb528fd7b5b60ffb2f5ec84efa"}, - {file = "pytket-1.36.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a7eb6f1baf1f239726484e97a39568710ae7f82f7185fa65e4aba8c9555d915a"}, - {file = "pytket-1.36.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:2127df6cb5d1e72680eecba8e4535140214315b53d3d9fd98fef9158e7e4f320"}, - {file = "pytket-1.36.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dcfff1fde6c8018c8c58428cf33dbce10dccdfb19ef658ef77d930af0cf32ae0"}, - {file = "pytket-1.36.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37b00e8aefc57802619e33582405d88fb0b9f372263d57217fd35e94f4fd92c5"}, - {file = "pytket-1.36.0-cp311-cp311-win_amd64.whl", hash = "sha256:419a95ce931d8f98abfb0339e8cdc7cce46d7453c1874d8e42df0e2617be5538"}, - {file = "pytket-1.36.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:f9176f7fa8a42d75a43caec2634e19f854f527947fe2b76c06b8ca4a61084028"}, - {file = "pytket-1.36.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:982fbf203bc04266825680404e697ff38e1c1743b6d0305fda4b5d289ac4921a"}, - {file = "pytket-1.36.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f8b8497067a092c8d6a7e3af86a3a78e7881d0ae45ea0f2904e45fe58d66719e"}, - {file = "pytket-1.36.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a238300db1a27da8bb15aea1c334b7fe9bbc96c89f95a586bbe349d2771b652"}, - {file = "pytket-1.36.0-cp312-cp312-win_amd64.whl", hash = "sha256:90cdbc7cceefee213d38d839de497786a5e70c71dc3c4f93f9e09c18e8316557"}, - {file = "pytket-1.36.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2bd76470aa3c0249141f0a24492f04e5910c3b1fede2eb4a78c0e312ee5aa7d7"}, - {file = "pytket-1.36.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:551d736054357a64f9da405d89e62dd33cdbd679ecae94556de120063ea08d3c"}, - {file = "pytket-1.36.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9404eecd9aa112d7ef5781bcc30167bf6e1760805877caf21380fed3c2f17cb"}, - {file = "pytket-1.36.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f20619e577eb0ba6ac6b132dd070f7b9f29b71fb9dbc05ce4bc0bf1b2698372c"}, - {file = "pytket-1.36.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f477d408e6a5684aabd9cd0e3f80fedcbcfb30ceb2af6f66bff6fcac54d0294"}, + {file = "pytket-1.37.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:ab9fd0210250dbb37d4540e735eddf2f1e412f946720b7c2382ebfb41af53e11"}, + {file = "pytket-1.37.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db7f30709e1e45ddf43e3d7b686f8606d899bce0846447d5680a61adf9bd1379"}, + {file = "pytket-1.37.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d4946f9c419107d5861ece3d0e4e390513e5e2a47a960ec1f657dcb53ebe88a"}, + {file = "pytket-1.37.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:794478b2d5a9d8c15805f66d0d866f4e804254f758db80e494d439f5f858bced"}, + {file = "pytket-1.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:76b2ed871df97e51bcb96c08ab18329617fce4baa782bfad89e1c85b18d1b1e7"}, + {file = "pytket-1.37.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:6683d2da32fd51cc6bf1ff0a1216665b7d1a4d34df733656e38aed235c2b0c6a"}, + {file = "pytket-1.37.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:ae72d7a93546f390a918a7442e76ccf91b66694ed279c9e1c93f5db82d3f76c6"}, + {file = "pytket-1.37.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71bea19332a9f3138a2331eb0be0a65a392f1b9be9ff8fc145380e8ad2213e61"}, + {file = "pytket-1.37.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a1425c5b6428e1d1a7907d2d7bc1c5c740a6640d467642d938414f20a745ec9"}, + {file = "pytket-1.37.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbc220761b8af4be93ed9618abf04be8a292faa8dbfb53c701ea952eb0bf1ee5"}, + {file = "pytket-1.37.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:f3bd9d42a6de858e35d082d1f9c5ac60f85cbe19e74668b97bd593fae2a8a1e5"}, + {file = "pytket-1.37.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:bb74db598281bcdb22f84dc35a73df0c0807e7aa01a5a4282d6433ffa7ef79fe"}, + {file = "pytket-1.37.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c6682c2dac4ba361578377630d91ea0ec2f36864b19e94867fff84b6c0ddce0"}, + {file = "pytket-1.37.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6691f8df2de9432f70552f305f4136da694d71b648c0e5a2ccc435b02d19bd7d"}, + {file = "pytket-1.37.0-cp312-cp312-win_amd64.whl", hash = "sha256:bd33e86b003fd8583e1992f3a9983662a376affdba2f9ef5752bb88a3c0fdd03"}, + {file = "pytket-1.37.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:4ce560347411e69434b625a62d31f0fb20b8126ad7dabc03e8478f73b65490e1"}, + {file = "pytket-1.37.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:6676535c4ff44e5da8b54f7237acdcb134f0c9f8f940d7e4d2a1028340138ace"}, + {file = "pytket-1.37.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d887bca4c40be9a0919fc1820cbf1f667d42a99d1cc149453793e4b9c034bab8"}, + {file = "pytket-1.37.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1be58da4cb449560db20606d1e431e2d4a1621fabd2578bc670cd35b1e5e3bd1"}, + {file = "pytket-1.37.0-cp313-cp313-win_amd64.whl", hash = "sha256:9c723381d1856e7df763dff611a9a3909481a3072b6c7019b7147be602d953ca"}, ] [package.dependencies] @@ -2661,19 +2675,19 @@ zx = ["autoray (>=0.6.12)", "numba (>=0.60.0)", "quimb (>=1.8.2)"] [[package]] name = "pytket-pecos" -version = "0.1.31" +version = "0.1.32" description = "This package enables emulation of pytket circuits using the PECOS emulator." optional = true python-versions = "*" files = [ - {file = "pytket_pecos-0.1.31-py2.py3-none-any.whl", hash = "sha256:f06d7495252f37ac734b2b3f3136d06513f0783ac7f38fc3708aa510f82247a2"}, - {file = "pytket_pecos-0.1.31.tar.gz", hash = "sha256:bc1b3e090a83b4023683d1ecc8181daf0a4e735127caafd043724cbcfa703bdb"}, + {file = "pytket_pecos-0.1.32-py2.py3-none-any.whl", hash = "sha256:c30dc77668236573d19a34767324af3df429c071fa3a12a5608c94dd9af97047"}, + {file = "pytket_pecos-0.1.32.tar.gz", hash = "sha256:587cbe61426d5520033b5629874ef168a85dc9bd26382a583e016395c01f4a60"}, ] [package.dependencies] -pytket = ">=1.34" -pytket-phir = ">=0.9.0" -quantum-pecos = {version = ">=0.6.0.dev6", extras = ["simulators", "wasmtime"]} +pytket = ">=1.36" +pytket-phir = ">=0.9.1" +quantum-pecos = {version = ">=0.6.0.dev7", extras = ["projectq", "wasmtime"]} [[package]] name = "pytket-phir" @@ -3128,6 +3142,8 @@ numpy = [ ] pecos-rslib = "0.6.0.dev7" phir = ">=0.3.3" +projectq = {version = "*", optional = true, markers = "extra == \"projectq\""} +pybind11 = {version = ">=2.2.3", optional = true, markers = "extra == \"projectq\""} scipy = ">=1.1.0" wasmtime = {version = ">=13.0", optional = true, markers = "extra == \"wasmtime\""} @@ -3142,46 +3158,6 @@ visualization = ["plotly (>=5.9.0,<5.10.0)"] wasmer = ["wasmer (>=1.1.0,<1.2.0)", "wasmer_compiler_cranelift (>=1.1.0,<1.2.0)"] wasmtime = ["wasmtime (>=13.0)"] -[[package]] -name = "qulacs" -version = "0.6.11" -description = "Quantum circuit simulator for research" -optional = false -python-versions = "*" -files = [ - {file = "qulacs-0.6.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35b007c96fc357b64d7c0c2fb5f6a7337708cca1180658607904a408e62037da"}, - {file = "qulacs-0.6.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:56fb790d9ee6f24b39ed691d906983b54b7992f7a011b2c6c436188c5ce626ab"}, - {file = "qulacs-0.6.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:117813f4238e4594a72468823bad715361983742ea8d1948a2aaf62965460f20"}, - {file = "qulacs-0.6.11-cp310-cp310-win_amd64.whl", hash = "sha256:b199964dbaf6785233a39d4cde8f0e139bf360c75f8f99b31c0bb37179eacd84"}, - {file = "qulacs-0.6.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:50431a7571504f620127e564947ab03d3be32a2b0fcca5c7f9391bab125601a2"}, - {file = "qulacs-0.6.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db64865730f099fd4e880453c8874cb593c42a036007465ce59208240b9f83b3"}, - {file = "qulacs-0.6.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf675de5f608824a84f107f48472df2d4a4133ae1b0d5c13d8157a47b6efa78"}, - {file = "qulacs-0.6.11-cp311-cp311-win_amd64.whl", hash = "sha256:98a5b6957807c4e5f6ad12f5bad71a4b90d8211c80c38b074304f58dad7b0988"}, - {file = "qulacs-0.6.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:739b1a63ef909caa5f579cba78dc77e3ab00cfe261b3384f81f4591b9aa3458c"}, - {file = "qulacs-0.6.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a1df7d8e5fd3c402ab7214a3e2486e33fb0b1f0b9a0cfcd0c0e568871dff09"}, - {file = "qulacs-0.6.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da7a659c73c0a575af16ab7bd9ef1673a24fc5baf8e82b1401a798b82406362"}, - {file = "qulacs-0.6.11-cp312-cp312-win_amd64.whl", hash = "sha256:07e6ff93d875907423aedea41cadaa5c7ee96001d4a79603ecdb725bfedc33c7"}, - {file = "qulacs-0.6.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:98c8e5981317c3c2e8fd8c7d9824067306e1a794ff1a0f5545096c298b090cb6"}, - {file = "qulacs-0.6.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:07b5e714aeefa177a7b39d2430d06afddbf92778cc0fc7d18c3cae4271de94e7"}, - {file = "qulacs-0.6.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97b1b72a6d47e525c5d7ff4a9a9fe2d3f7cd61051ea9d4a177dd006588fe4c62"}, - {file = "qulacs-0.6.11-cp38-cp38-win_amd64.whl", hash = "sha256:f943b07e8d299376fb032920d70fa66c62d2f99f2c6da7a1175c4a60858c1bee"}, - {file = "qulacs-0.6.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:42abca915c49b082df7e85c7e6d86dfe62f173fcdb82f9f65830a79ee2467cfe"}, - {file = "qulacs-0.6.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9241e1e97298515dc0466eabc87aabb8ee00a1134c64973cb03581b9a3aa1e7c"}, - {file = "qulacs-0.6.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679d13a65d2f68587b5bde2a0cefa7e8cc0d3f0075561ecdb1d130cff36e2c5b"}, - {file = "qulacs-0.6.11-cp39-cp39-win_amd64.whl", hash = "sha256:2c2f10adefcbb667fbea7a0b1db59f876190f508eb843965bb8a8f59d5b0a1c5"}, - {file = "qulacs-0.6.11.tar.gz", hash = "sha256:3dfa030c6d90e78c8dfe840423a53fb1d7e7e4a63bb7180e1b46a4d25d2c72bf"}, -] - -[package.dependencies] -numpy = "*" -scipy = "*" - -[package.extras] -ci = ["black", "flake8", "isort", "mypy", "openfermion", "pybind11-stubgen", "pytest"] -dev = ["black", "flake8", "isort", "mypy", "openfermion", "pybind11-stubgen", "pytest"] -doc = ["breathe", "exhale", "ipykernel", "mypy", "myst-parser", "nbsphinx", "pybind11-stubgen", "sphinx (==7.*)", "sphinx-autoapi (==3.0.0)", "sphinx-copybutton", "sphinx-rtd-theme"] -test = ["openfermion"] - [[package]] name = "qwasm" version = "1.0.1" @@ -3381,29 +3357,29 @@ files = [ [[package]] name = "ruff" -version = "0.8.2" +version = "0.8.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = true python-versions = ">=3.7" files = [ - {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, - {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, - {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, - {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, - {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, - {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, - {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, - {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, - {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, + {file = "ruff-0.8.3-py3-none-linux_armv6l.whl", hash = "sha256:8d5d273ffffff0acd3db5bf626d4b131aa5a5ada1276126231c4174543ce20d6"}, + {file = "ruff-0.8.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4d66a21de39f15c9757d00c50c8cdd20ac84f55684ca56def7891a025d7e939"}, + {file = "ruff-0.8.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c356e770811858bd20832af696ff6c7e884701115094f427b64b25093d6d932d"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c0a60a825e3e177116c84009d5ebaa90cf40dfab56e1358d1df4e29a9a14b13"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fb782f4db39501210ac093c79c3de581d306624575eddd7e4e13747e61ba18"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f26bc76a133ecb09a38b7868737eded6941b70a6d34ef53a4027e83913b6502"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01b14b2f72a37390c1b13477c1c02d53184f728be2f3ffc3ace5b44e9e87b90d"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53babd6e63e31f4e96ec95ea0d962298f9f0d9cc5990a1bbb023a6baf2503a82"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ae441ce4cf925b7f363d33cd6570c51435972d697e3e58928973994e56e1452"}, + {file = "ruff-0.8.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7c65bc0cadce32255e93c57d57ecc2cca23149edd52714c0c5d6fa11ec328cd"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5be450bb18f23f0edc5a4e5585c17a56ba88920d598f04a06bd9fd76d324cb20"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8faeae3827eaa77f5721f09b9472a18c749139c891dbc17f45e72d8f2ca1f8fc"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:db503486e1cf074b9808403991663e4277f5c664d3fe237ee0d994d1305bb060"}, + {file = "ruff-0.8.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6567be9fb62fbd7a099209257fef4ad2c3153b60579818b31a23c886ed4147ea"}, + {file = "ruff-0.8.3-py3-none-win32.whl", hash = "sha256:19048f2f878f3ee4583fc6cb23fb636e48c2635e30fb2022b3a1cd293402f964"}, + {file = "ruff-0.8.3-py3-none-win_amd64.whl", hash = "sha256:f7df94f57d7418fa7c3ffb650757e0c2b96cf2501a0b192c18e4fb5571dfada9"}, + {file = "ruff-0.8.3-py3-none-win_arm64.whl", hash = "sha256:fe2756edf68ea79707c8d68b78ca9a58ed9af22e430430491ee03e718b5e4936"}, + {file = "ruff-0.8.3.tar.gz", hash = "sha256:5e7558304353b84279042fc584a4f4cb8a07ae79b2bf3da1a7551d960b5626d3"}, ] [[package]] @@ -4269,4 +4245,4 @@ tests = ["mypy", "pytest", "pytest-cov", "pytket-quantinuum", "qiskit-ibm-provid [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "b3da9668630723c6def5e311d38009bd63b1a9f488469e9bfc142113e1dffad8" +content-hash = "518fb4ebd0da46487bbb8279c79d26e244c3459d43ab11e8506fbd7ab91095f6" diff --git a/pyproject.toml b/pyproject.toml index 5d1687ff..3c052111 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,8 +17,6 @@ readme = "README.md" python = ">=3.10,<3.14" pytket-qiskit = "^0.60.0" matplotlib = "^3.8.3" -qulacs = "^0.6.11" -projectq = "^0.7.0" pytest = { version = "^8.1.1", optional = true } mypy = { version = "^1.9.0", optional = true } From ec3aa139c541cc60d78d78f9bb9a7132ccd487f4 Mon Sep 17 00:00:00 2001 From: Dan Mills <52407433+daniel-mills-cqc@users.noreply.github.com> Date: Thu, 12 Dec 2024 20:59:45 +0000 Subject: [PATCH 25/25] Do not use init --- poetry.lock | 682 ++++++++++++++++-- pyproject.toml | 1 + qermit/coherent_pauli_checks/pauli_sampler.py | 47 +- qermit/noise_model/noise_model.py | 16 +- tests/coherent_pauli_checks_test.py | 81 ++- tests/noise_model_test.py | 141 ++-- 6 files changed, 814 insertions(+), 154 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6cbb400b..a8389fa8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -22,22 +22,120 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[[package]] +name = "anyio" +version = "4.7.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +files = [ + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +trio = ["trio (>=0.26.1)"] + [[package]] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + [[package]] name = "asttokens" version = "3.0.0" description = "Annotate AST trees with source code positions" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, @@ -48,11 +146,25 @@ files = [ astroid = ["astroid (>=2,<4)"] test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "attrs" version = "24.2.0" description = "Classes Without Boilerplate" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, @@ -71,7 +183,7 @@ tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] name = "babel" version = "2.16.0" description = "Internationalization utilities" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, @@ -85,7 +197,7 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "beautifulsoup4" version = "4.12.3" description = "Screen-scraping library" -optional = true +optional = false python-versions = ">=3.6.0" files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, @@ -106,7 +218,7 @@ lxml = ["lxml"] name = "bleach" version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, @@ -341,7 +453,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, @@ -352,7 +464,7 @@ files = [ name = "comm" version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, @@ -585,7 +697,7 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "debugpy" version = "1.8.9" description = "An implementation of the Debug Adapter Protocol for Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"}, @@ -620,7 +732,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -631,7 +743,7 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, @@ -668,7 +780,7 @@ files = [ name = "exceptiongroup" version = "1.2.2" description = "Backport of PEP 654 (exception groups)" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, @@ -682,7 +794,7 @@ test = ["pytest (>=6)"] name = "executing" version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, @@ -696,7 +808,7 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.21.1" description = "Fastest Python implementation of JSON schema" -optional = true +optional = false python-versions = "*" files = [ {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, @@ -779,6 +891,17 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "furo" version = "2024.8.6" @@ -898,6 +1021,62 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "ibm-cloud-sdk-core" version = "3.22.0" @@ -1019,7 +1198,7 @@ files = [ name = "ipykernel" version = "6.29.5" description = "IPython Kernel for Jupyter" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, @@ -1052,7 +1231,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio name = "ipython" version = "8.30.0" description = "IPython: Productive Interactive Computing" -optional = true +optional = false python-versions = ">=3.10" files = [ {file = "ipython-8.30.0-py3-none-any.whl", hash = "sha256:85ec56a7e20f6c38fce7727dcca699ae4ffc85985aa7b23635a8008f918ae321"}, @@ -1107,11 +1286,25 @@ widgetsnbextension = ">=4.0.12,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "jedi" version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, @@ -1143,11 +1336,36 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "json5" +version = "0.10.0" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, + {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, +] + +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + [[package]] name = "jsonschema" version = "4.23.0" description = "An implementation of JSON Schema validation for Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, @@ -1156,9 +1374,17 @@ files = [ [package.dependencies] attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} jsonschema-specifications = ">=2023.03.6" referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -1168,7 +1394,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, @@ -1209,7 +1435,7 @@ testing = ["coverage", "ipykernel", "jupytext", "matplotlib", "nbdime", "nbforma name = "jupyter-client" version = "8.6.3" description = "Jupyter protocol implementation and client libraries" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, @@ -1231,7 +1457,7 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-core" version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, @@ -1247,6 +1473,100 @@ traitlets = ">=5.3" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.2" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + [[package]] name = "jupyter-sphinx" version = "0.5.3" @@ -1270,17 +1590,76 @@ sphinx = ">=7" doc = ["matplotlib"] test = ["bash-kernel", "pytest"] +[[package]] +name = "jupyterlab" +version = "4.3.3" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.3.3-py3-none-any.whl", hash = "sha256:32a8fd30677e734ffcc3916a4758b9dab21b02015b668c60eb36f84357b7d4b1"}, + {file = "jupyterlab-4.3.3.tar.gz", hash = "sha256:76fa39e548fdac94dc1204af5956c556f54c785f70ee26aa47ea08eda4d5bbcd"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=40.8.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + [[package]] name = "jupyterlab-pygments" version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, ] +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + [[package]] name = "jupyterlab-widgets" version = "3.0.13" @@ -1594,7 +1973,7 @@ dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", name = "matplotlib-inline" version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, @@ -1638,7 +2017,7 @@ files = [ name = "mistune" version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, @@ -1803,7 +2182,7 @@ testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0, name = "nbclient" version = "0.10.1" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = true +optional = false python-versions = ">=3.8.0" files = [ {file = "nbclient-0.10.1-py3-none-any.whl", hash = "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d"}, @@ -1825,7 +2204,7 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= name = "nbconvert" version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, @@ -1862,7 +2241,7 @@ webpdf = ["playwright"] name = "nbformat" version = "5.10.4" description = "The Jupyter Notebook format" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, @@ -1883,7 +2262,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, @@ -1909,6 +2288,46 @@ example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] +[[package]] +name = "notebook" +version = "7.3.1" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.3.1-py3-none-any.whl", hash = "sha256:212e1486b2230fe22279043f33c7db5cf9a01d29feb063a85cb139747b7c9483"}, + {file = "notebook-7.3.1.tar.gz", hash = "sha256:84381c2a82d867517fd25b86e986dae1fe113a70b98f03edff9b94e499fec8fa"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.3.2,<4.4" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + [[package]] name = "numpy" version = "1.26.4" @@ -2018,6 +2437,17 @@ files = [ {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "24.2" @@ -2033,7 +2463,7 @@ files = [ name = "pandocfilters" version = "1.5.1" description = "Utilities for writing pandoc filters in python" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, @@ -2044,7 +2474,7 @@ files = [ name = "parso" version = "0.8.4" description = "A Python Parser" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, @@ -2100,7 +2530,7 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -optional = true +optional = false python-versions = "*" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, @@ -2225,7 +2655,7 @@ xmp = ["defusedxml"] name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, @@ -2276,11 +2706,25 @@ docs = ["sphinx", "sphinx_rtd_theme"] revkit = ["dormouse", "revkit (==3.0a2.dev2)"] test = ["flaky", "mock", "pytest (>=6.0)", "pytest-cov", "pytest-mock"] +[[package]] +name = "prometheus-client" +version = "0.21.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, + {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, +] + +[package.extras] +twisted = ["twisted"] + [[package]] name = "prompt-toolkit" version = "3.0.48" description = "Library for building powerful interactive command lines in Python" -optional = true +optional = false python-versions = ">=3.7.0" files = [ {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, @@ -2324,7 +2768,7 @@ test = ["pytest", "pytest-xdist", "setuptools"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -optional = true +optional = false python-versions = "*" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -2335,7 +2779,7 @@ files = [ name = "pure-eval" version = "0.2.3" description = "Safely evaluate AST nodes without side effects" -optional = true +optional = false python-versions = "*" files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, @@ -2498,7 +2942,7 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, @@ -2630,6 +3074,20 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "3.2.0" +description = "JSON Log Formatter for the Python Logging Package" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python_json_logger-3.2.0-py3-none-any.whl", hash = "sha256:d73522ddcfc6d0461394120feaddea9025dc64bf804d96357dd42fa878cc5fe8"}, + {file = "python_json_logger-3.2.0.tar.gz", hash = "sha256:2c11056458d3f56614480b24e9cb28f7aba69cbfbebddbb77c92f0ec0d4947ab"}, +] + +[package.extras] +dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "msgspec-python313-pre", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + [[package]] name = "pytket" version = "1.37.0" @@ -2771,7 +3229,7 @@ pecos = ["pytket-pecos (>=0.1.31,<0.2.0)"] name = "pywin32" version = "308" description = "Python for Window Extensions" -optional = true +optional = false python-versions = "*" files = [ {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, @@ -2794,11 +3252,26 @@ files = [ {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] +[[package]] +name = "pywinpty" +version = "2.0.14" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, + {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, + {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"}, + {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"}, + {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"}, + {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"}, +] + [[package]] name = "pyyaml" version = "6.0.2" description = "YAML parser and emitter for Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, @@ -2860,7 +3333,7 @@ files = [ name = "pyzmq" version = "26.2.0" description = "Python bindings for 0MQ" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, @@ -3176,7 +3649,7 @@ setuptools = "*" name = "referencing" version = "0.35.1" description = "JSON Referencing + Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, @@ -3224,6 +3697,31 @@ cryptography = ">=1.3" pyspnego = ">=0.4.0" requests = ">=2.0.0" +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rich" version = "13.9.4" @@ -3247,7 +3745,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rpds-py" version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, @@ -3461,6 +3959,22 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodest doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + [[package]] name = "setuptools" version = "75.6.0" @@ -3492,6 +4006,17 @@ files = [ {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "snowballstemmer" version = "2.2.0" @@ -3507,7 +4032,7 @@ files = [ name = "soupsieve" version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, @@ -3823,7 +4348,7 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -optional = true +optional = false python-versions = "*" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, @@ -3934,11 +4459,32 @@ files = [ [package.extras] widechars = ["wcwidth"] +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + [[package]] name = "tinycss2" version = "1.4.0" description = "A tiny CSS parser" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, @@ -3956,7 +4502,7 @@ test = ["pytest", "ruff"] name = "tomli" version = "2.2.1" description = "A lil' TOML parser" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, @@ -3997,7 +4543,7 @@ files = [ name = "tornado" version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, @@ -4017,7 +4563,7 @@ files = [ name = "traitlets" version = "5.14.3" description = "Traitlets Python configuration system" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, @@ -4028,6 +4574,17 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241206" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, + {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, +] + [[package]] name = "types-requests" version = "2.32.0.20241016" @@ -4053,6 +4610,20 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" version = "2.2.3" @@ -4096,18 +4667,29 @@ testing = ["componentize-py", "coverage", "pycparser", "pytest", "pytest-mypy"] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -optional = true +optional = false python-versions = "*" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "webcolors" +version = "24.11.1" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.9" +files = [ + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, +] + [[package]] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -optional = true +optional = false python-versions = "*" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, @@ -4245,4 +4827,4 @@ tests = ["mypy", "pytest", "pytest-cov", "pytket-quantinuum", "qiskit-ibm-provid [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "518fb4ebd0da46487bbb8279c79d26e244c3459d43ab11e8506fbd7ab91095f6" +content-hash = "f9e5ba419678f6e8c780cca0a354340f9cb9f5e163719161dc0d34da76b441fe" diff --git a/pyproject.toml b/pyproject.toml index 3c052111..5fce61fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ furo = { version = "^2024.8.6", optional = true } myst-nb = { version = "^1.1.2", optional = true} sphinx-autodoc-typehints = { version = "^2.5.0", optional = true } jupyter-sphinx = { version = "^0.5.3", optional = true} +notebook = "^7.3.1" [tool.poetry.extras] tests = [ diff --git a/qermit/coherent_pauli_checks/pauli_sampler.py b/qermit/coherent_pauli_checks/pauli_sampler.py index 6da63035..5fc40655 100644 --- a/qermit/coherent_pauli_checks/pauli_sampler.py +++ b/qermit/coherent_pauli_checks/pauli_sampler.py @@ -188,10 +188,13 @@ def sample(self, circ: Circuit) -> List[QermitPauli]: :return: Z Pauli string of length equal to the circuit. """ return [ - QermitPauli( - Z_list=[1] * circ.n_qubits, - X_list=[0] * circ.n_qubits, - qubit_list=circ.qubits, + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={qubit: Pauli.Z for qubit in circ.qubits} + ), + coeff=1, + ) ) ] @@ -206,10 +209,13 @@ def sample(self, circ: Circuit) -> List[QermitPauli]: :return: X Pauli string of length equal to the circuit. """ return [ - QermitPauli( - Z_list=[0] * circ.n_qubits, - X_list=[1] * circ.n_qubits, - qubit_list=circ.qubits, + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={qubit: Pauli.X for qubit in circ.qubits} + ), + coeff=1, + ) ) ] @@ -240,18 +246,19 @@ def sample( # TODO: Make sure sampling is done without replacement stabiliser_list: List[QermitPauli] = [] while len(stabiliser_list) < self.n_checks: - Z_list = [self.rng.integers(2) for _ in circ.qubits] - X_list = [self.rng.integers(2) for _ in circ.qubits] - - # Avoids using the identity string as it commutes with all errors - if any(Z == 1 for Z in Z_list) or any(X == 1 for X in X_list): - stabiliser_list.append( - QermitPauli( - Z_list=Z_list, - X_list=X_list, - qubit_list=circ.qubits, - ) - ) + qpt = QubitPauliTensor( + string=QubitPauliString( + map={ + qubit: self.rng.choice( + numpy.array([Pauli.X, Pauli.Y, Pauli.Z, Pauli.I]) + ) + for qubit in circ.qubits + } + ), + coeff=1, + ) + if qpt != QubitPauliTensor(): + stabiliser_list.append(QermitPauli.from_qubit_pauli_tensor(qpt)) return stabiliser_list diff --git a/qermit/noise_model/noise_model.py b/qermit/noise_model/noise_model.py index 137e6b1f..9a49162f 100644 --- a/qermit/noise_model/noise_model.py +++ b/qermit/noise_model/noise_model.py @@ -12,7 +12,7 @@ from numpy.typing import NDArray from pytket import Circuit, Qubit from pytket.circuit import OpType -from pytket.pauli import Pauli, QubitPauliString +from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor from scipy.linalg import fractional_matrix_power # type: ignore from .qermit_pauli import QermitPauli @@ -636,13 +636,13 @@ def random_propagate( :raises Exception: Raised if direction is invalid. :return: Resulting logical error. """ - - # Create identity error. - qubit_list = cliff_circ.qubits - pauli_error = QermitPauli( - Z_list=[0] * len(qubit_list), - X_list=[0] * len(qubit_list), - qubit_list=qubit_list, + pauli_error = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={qubit: Pauli.I for qubit in cliff_circ.qubits} + ), + coeff=1, + ) ) # Commands are ordered in reverse or original order depending on which diff --git a/tests/coherent_pauli_checks_test.py b/tests/coherent_pauli_checks_test.py index 028f1731..3f28635b 100644 --- a/tests/coherent_pauli_checks_test.py +++ b/tests/coherent_pauli_checks_test.py @@ -8,7 +8,7 @@ from pytket.circuit import Bit, CircBox, Qubit from pytket.extensions.qiskit import AerBackend from pytket.passes import DecomposeBoxes -from pytket.pauli import Pauli, QubitPauliString +from pytket.pauli import Pauli, QubitPauliString, QubitPauliTensor from qermit import CircuitShots from qermit.coherent_pauli_checks import ( @@ -802,11 +802,11 @@ def test_optimal_pauli_sampler(): circ=cliff_circ, ) - assert stab[0] == QermitPauli( - Z_list=[0, 0, 1], - X_list=[0, 0, 1], - qubit_list=qubits, - phase=1, + assert stab[0] == QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(qubits=qubits, paulis=[Pauli.I, Pauli.I, Pauli.Y]), + coeff=1, + ) ) # TODO: an assert is needed for this last part @@ -836,10 +836,14 @@ class DeterministicPauliSampler(PauliSampler): def sample(self, circ, **kwargs): qubit_list = circ.qubits return [ - QermitPauli( - Z_list=[1], - X_list=[1], - qubit_list=qubit_list, + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + pauli=Pauli.Y, + qubit=qubit_list[0], + ), + coeff=-1j, + ) ) ] @@ -970,32 +974,41 @@ def test_error_sampler(): ) ideal = Counter( { - QermitPauli( - Z_list=[0, 0, 0], - X_list=[1, 1, 0], - qubit_list=[ - Qubit(name="ancilla", index=0), - Qubit(name="my_reg", index=0), - Qubit(name="my_reg", index=1), - ], + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(name="ancilla", index=0): Pauli.X, + Qubit(name="my_reg", index=0): Pauli.X, + Qubit(name="my_reg", index=1): Pauli.I, + } + ), + coeff=1, + ) ): 190, - QermitPauli( - Z_list=[0, 0, 0], - X_list=[1, 0, 1], - qubit_list=[ - Qubit(name="ancilla", index=0), - Qubit(name="my_reg", index=0), - Qubit(name="my_reg", index=1), - ], + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(name="ancilla", index=0): Pauli.X, + Qubit(name="my_reg", index=0): Pauli.I, + Qubit(name="my_reg", index=1): Pauli.X, + } + ), + coeff=1, + ) ): 164, - QermitPauli( - Z_list=[0, 0, 0], - X_list=[0, 1, 1], - qubit_list=[ - Qubit(name="ancilla", index=0), - Qubit(name="my_reg", index=0), - Qubit(name="my_reg", index=1), - ], + QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(name="ancilla", index=0): Pauli.X, + Qubit(name="my_reg", index=0): Pauli.X, + Qubit(name="my_reg", index=1): Pauli.X, + } + ), + coeff=1, + ) ): 81, } ) diff --git a/tests/noise_model_test.py b/tests/noise_model_test.py index a75d2ecf..f7c86bf9 100644 --- a/tests/noise_model_test.py +++ b/tests/noise_model_test.py @@ -387,10 +387,11 @@ def test_error_backpropagation() -> None: name = "my_reg" qubit_list = [Qubit(name=name, index=0), Qubit(name=name, index=1)] - stabilise = QermitPauli( - Z_list=[0] * len(qubit_list), - X_list=[0] * len(qubit_list), - qubit_list=qubit_list, + stabilise = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={qubit: Pauli.I for qubit in qubit_list}), + coeff=1, + ) ) stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[1]) @@ -408,10 +409,11 @@ def test_error_backpropagation() -> None: coeff=-1j, ) - stabilise = QermitPauli( - Z_list=[0] * len(qubit_list), - X_list=[0] * len(qubit_list), - qubit_list=qubit_list, + stabilise = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={qubit: Pauli.I for qubit in qubit_list}), + coeff=1, + ) ) stabilise.pre_apply_pauli(pauli=Pauli.X, qubit=qubit_list[1]) @@ -433,7 +435,6 @@ def test_error_backpropagation() -> None: def test_back_propagate_random_error() -> None: cliff_circ = Circuit(2).CZ(0, 1).X(1).CZ(1, 0) - qubit_list = cliff_circ.qubits error_rate = 0.5 error_distribution_dict = {} @@ -569,10 +570,24 @@ def test_qermit_pauli_circuit() -> None: circ = Circuit(3) circ.CZ(0, 1).add_barrier([0, 2]).H(1).H(2).SWAP(1, 2).S(1).Y(0) - L = QermitPauli(Z_list=[1, 1, 1], X_list=[0, 0, 0], qubit_list=circ.qubits) + L = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + paulis=[Pauli.Z, Pauli.Z, Pauli.Z], + qubits=circ.qubits, + ) + ) + ) L_circ = L.circuit - R = QermitPauli(Z_list=[1, 1, 1], X_list=[0, 0, 0], qubit_list=circ.qubits) + R = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + paulis=[Pauli.Z, Pauli.Z, Pauli.Z], + qubits=circ.qubits, + ) + ) + ) R.apply_circuit(circ) R_circ = R.circuit @@ -588,11 +603,13 @@ def test_qermit_pauli_circuit() -> None: def test_initialisation() -> None: - qubit_list = [Qubit(0), Qubit(1), Qubit(2)] - pauli = QermitPauli( - Z_list=[0, 0, 1], - X_list=[0, 0, 0], - qubit_list=qubit_list, + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={Qubit(0): Pauli.I, Qubit(1): Pauli.I, Qubit(2): Pauli.Z} + ), + coeff=1, + ) ) assert pauli.qubit_pauli_tensor == QubitPauliTensor( string=QubitPauliString( @@ -607,8 +624,11 @@ def test_identity_clifford() -> None: circ.X(1).H(1).X(1).X(0).Sdg(1).X(0).CZ(1, 0) qubit_list = circ.qubits - pauli = QermitPauli( - Z_list=circ.n_qubits * [1], X_list=circ.n_qubits * [0], qubit_list=qubit_list + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={qubit: Pauli.Z for qubit in qubit_list}), + coeff=1, + ) ) pauli.apply_circuit(circ) @@ -620,7 +640,11 @@ def test_identity_clifford() -> None: def test_H() -> None: qubit_list = [Qubit(0)] - pauli = QermitPauli(Z_list=[1], X_list=[0], qubit_list=qubit_list) + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(qubit=Qubit(0), pauli=Pauli.Z), coeff=1 + ) + ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) assert pauli.qubit_pauli_tensor.string == QubitPauliString( @@ -637,15 +661,23 @@ def test_H() -> None: def test_h_series_gates() -> None: circ = Circuit(2).ZZPhase(3.5, 0, 1).PhasedX(1.5, 0.5, 0) - stab = QermitPauli(Z_list=[1, 1], X_list=[1, 1], qubit_list=circ.qubits) + stab = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={qubit: Pauli.Y for qubit in circ.qubits}), + coeff=-1, + ) + ) stab.apply_circuit(circ) def test_apply_circuit() -> None: circ = Circuit(2).H(0).S(0).CX(0, 1) qubit_list = circ.qubits - pauli = QermitPauli( - Z_list=circ.n_qubits * [1], X_list=circ.n_qubits * [0], qubit_list=qubit_list + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString(map={qubit: Pauli.Z for qubit in circ.qubits}), + coeff=1, + ) ) pauli.apply_circuit(circ) @@ -658,10 +690,17 @@ def test_apply_circuit() -> None: def test_apply_gate() -> None: qubit_list = [Qubit(0), Qubit(1), Qubit(2)] - pauli = QermitPauli( - Z_list=[1, 1, 1], - X_list=[0, 0, 0], - qubit_list=qubit_list, + + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.Z, + Qubit(1): Pauli.Z, + Qubit(2): Pauli.Z, + } + ) + ) ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) @@ -690,10 +729,17 @@ def test_apply_gate() -> None: def test_qubit_pauli_string() -> None: qubit_list = [Qubit(0), Qubit(1), Qubit(2)] - pauli = QermitPauli( - Z_list=[1, 1, 1], - X_list=[0, 0, 0], - qubit_list=qubit_list, + + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.Z, + Qubit(1): Pauli.Z, + Qubit(2): Pauli.Z, + } + ) + ) ) qubit_pauli_string = QubitPauliString( @@ -739,10 +785,18 @@ def test_qubit_pauli_string() -> None: def test_clifford_incremental() -> None: qubit_list = [Qubit(0), Qubit(1), Qubit(2)] - pauli = QermitPauli( - Z_list=[0, 0, 1], - X_list=[0, 0, 0], - qubit_list=qubit_list, + + pauli = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(0): Pauli.I, + Qubit(1): Pauli.I, + Qubit(2): Pauli.Z, + } + ), + coeff=1, + ) ) pauli.apply_gate(op=Op.create(OpType.H), qubits=[qubit_list[0]]) @@ -872,14 +926,17 @@ def test_to_from_qps() -> None: def test_is_measureable() -> None: - stab = QermitPauli( - Z_list=[1, 0, 0], - X_list=[1, 0, 1], - qubit_list=[ - Qubit(name="A", index=0), - Qubit(name="B", index=0), - Qubit(name="A", index=1), - ], + stab = QermitPauli.from_qubit_pauli_tensor( + QubitPauliTensor( + string=QubitPauliString( + map={ + Qubit(name="A", index=0): Pauli.Y, + Qubit(name="B", index=0): Pauli.I, + Qubit(name="A", index=1): Pauli.X, + } + ), + coeff=-1j, + ) ) assert stab.is_measureable(qubit_list=[Qubit(name="A", index=1)]) assert stab.is_measureable(qubit_list=[Qubit(name="A", index=0)])