From ce82a33249f9a4d5b1935d88bea4b2f1307828ea Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 11 Dec 2023 17:02:44 +0400 Subject: [PATCH 01/73] feat: implemented numba clifford operations --- src/qibojit/backends/clifford.py | 139 ++++++++++++++++++++++++++++++ src/qibojit/backends/clifford.py~ | 95 ++++++++++++++++++++ src/qibojit/backends/cpu.py | 5 ++ 3 files changed, 239 insertions(+) create mode 100644 src/qibojit/backends/clifford.py create mode 100644 src/qibojit/backends/clifford.py~ diff --git a/src/qibojit/backends/clifford.py b/src/qibojit/backends/clifford.py new file mode 100644 index 00000000..2dedabd9 --- /dev/null +++ b/src/qibojit/backends/clifford.py @@ -0,0 +1,139 @@ +from numba import njit +from qibo.backends.clifford import CliffordOperations as CO + + +class CliffordOperations(CO): + def __init__(self, engine): + super().__init__(engine) + + @staticmethod + def I(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.I)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def H(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.H)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def CNOT(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CNOT)( + symplectic_matrix, control_q, target_q, nqubits + ) + + @staticmethod + def CZ(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CZ)( + symplectic_matrix, control_q, target_q, nqubits + ) + + @staticmethod + def S(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.S)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def Z(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Z)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def X(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.X)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def Y(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Y)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def SX(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SX)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def SDG(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SDG)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def SXDG(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SXDG)( + symplectic_matrix, q, nqubits + ) + + @staticmethod + def RX(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RX)( + symplectic_matrix, q, nqubits, theta + ) + + @staticmethod + def RZ(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RZ)( + symplectic_matrix, q, nqubits, theta + ) + + @staticmethod + def RY(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RY)( + symplectic_matrix, q, nqubits, theta + ) + + @staticmethod + def SWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.SWAP)( + symplectic_matrix, control_q, target_q, nqubits + ) + + @staticmethod + def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)( + CO.iSWAP + )(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def FSWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)( + CO.FSWAP + )(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def CY(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CY)( + symplectic_matrix, control_q, target_q, nqubits + ) + + @staticmethod + def CRX(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( + CO.CRX + )(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def CRZ(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( + CO.CRZ + )(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def CRY(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( + CO.CRY + )(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def ECR(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.ECR)( + symplectic_matrix, control_q, target_q, nqubits + ) diff --git a/src/qibojit/backends/clifford.py~ b/src/qibojit/backends/clifford.py~ new file mode 100644 index 00000000..cd3f793c --- /dev/null +++ b/src/qibojit/backends/clifford.py~ @@ -0,0 +1,95 @@ +from numba import njit +from qibo.backends.clifford import CliffordOperations as CO + +class CliffordOperations(CO): + + def __init__(self, engine): + super().__init__(engine) + + @staticmethod + def I(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.I)(symplectic_matrix, q, nqubits) + + @staticmethod + def H(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.H)(symplectic_matrix, q, nqubits) + + @staticmethod + def CNOT(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CNOT)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def CZ(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CZ)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def S(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.S)(symplectic_matrix, q, nqubits) + + @staticmethod + def Z(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Z)(symplectic_matrix, q, nqubits) + + @staticmethod + def X(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.X)(symplectic_matrix, q, nqubits) + + @staticmethod + def Y(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Y)(symplectic_matrix, q, nqubits) + + @staticmethod + def SX(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SX)(symplectic_matrix, q, nqubits) + + @staticmethod + def SDG(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SDG)(symplectic_matrix, q, nqubits) + + @staticmethod + def SXDG(symplectic_matrix, q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SXDG)(symplectic_matrix, q, nqubits) + + @staticmethod + def RX(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RX)(symplectic_matrix, q, nqubits, theta) + + @staticmethod + def RZ(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RZ)(symplectic_matrix, q, nqubits, theta) + + @staticmethod + def RY(symplectic_matrix, q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RY)(symplectic_matrix, q, nqubits, theta) + + @staticmethod + def SWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.SWAP)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.iSWAP)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def FSWAP(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.FSWAP)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def CY(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CY)(symplectic_matrix, control_q, target_q, nqubits) + + @staticmethod + def CRX(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRX)(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def CRZ(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRZ)(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def CRY(symplectic_matrix, control_q, target_q, nqubits, theta): + return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRY)(symplectic_matrix, control_q, target_q, nqubits, theta) + + @staticmethod + def ECR(symplectic_matrix, control_q, target_q, nqubits): + return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.ECR)(symplectic_matrix, control_q, target_q, nqubits) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 4ae8deaf..db3bf222 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,4 +1,5 @@ import numpy as np +from numba import njit from qibo.backends.numpy import NumpyBackend from qibo.config import log from qibo.gates.abstract import ParametrizedGate @@ -69,6 +70,10 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) + from qibojit.backends.clifford import CliffordOperations + + self.clifford_operations = CliffordOperations(self.np) + def set_precision(self, precision): if precision != self.precision: super().set_precision(precision) From 53aecc63470f601152356d5e9042d2a0e04eeac4 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 13 Dec 2023 14:48:05 +0400 Subject: [PATCH 02/73] feat: rewrote the operations as numba loops --- src/qibojit/backends/clifford.py | 306 +++++++++++++++++++++---------- 1 file changed, 212 insertions(+), 94 deletions(-) diff --git a/src/qibojit/backends/clifford.py b/src/qibojit/backends/clifford.py index 2dedabd9..f8bffea7 100644 --- a/src/qibojit/backends/clifford.py +++ b/src/qibojit/backends/clifford.py @@ -1,4 +1,5 @@ -from numba import njit +import numpy as np +from numba import njit, prange from qibo.backends.clifford import CliffordOperations as CO @@ -7,133 +8,250 @@ def __init__(self, engine): super().__init__(engine) @staticmethod - def I(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.I)( - symplectic_matrix, q, nqubits - ) - - @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def H(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.H)( - symplectic_matrix, q, nqubits - ) + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[:, nqubits + q] = tmp + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def CNOT(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CNOT)( - symplectic_matrix, control_q, target_q, nqubits - ) + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def CZ(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CZ)( - symplectic_matrix, control_q, target_q, nqubits - ) + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ ( + x[i, control_q] + & x[i, target_q] + & (z[i, target_q] ^ ~z[i, control_q]) + ) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def S(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.S)( - symplectic_matrix, q, nqubits - ) + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def Z(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Z)( - symplectic_matrix, q, nqubits - ) + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def X(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.X)( - symplectic_matrix, q, nqubits - ) + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def Y(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Y)( - symplectic_matrix, q, nqubits - ) + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def SX(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SX)( - symplectic_matrix, q, nqubits - ) + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def SDG(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SDG)( - symplectic_matrix, q, nqubits - ) + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def SXDG(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SXDG)( - symplectic_matrix, q, nqubits - ) - - @staticmethod - def RX(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RX)( - symplectic_matrix, q, nqubits, theta - ) - - @staticmethod - def RZ(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RZ)( - symplectic_matrix, q, nqubits, theta - ) - - @staticmethod - def RY(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RY)( - symplectic_matrix, q, nqubits, theta - ) + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def SWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.SWAP)( - symplectic_matrix, control_q, target_q, nqubits - ) + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ ( + x[i, control_q] + & z[i, target_q] + & (x[i, target_q] ^ ~z[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & ( + x[i, control_q] + ^ x[i, target_q] + ^ z[i, control_q] + ^ ~z[i, target_q] + ) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)( - CO.iSWAP - )(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def FSWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)( - CO.FSWAP - )(symplectic_matrix, control_q, target_q, nqubits) + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & ( + x[i, target_q] + ^ z[i, target_q] + ^ x[i, control_q] + ^ ~z[i, control_q] + ) + ) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) + ) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def CY(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CY)( - symplectic_matrix, control_q, target_q, nqubits - ) - - @staticmethod - def CRX(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( - CO.CRX - )(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def CRZ(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( - CO.CRZ - )(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def CRY(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)( - CO.CRY - )(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def ECR(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.ECR)( - symplectic_matrix, control_q, target_q, nqubits - ) + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + ) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i - 1, target_q] = x_target_q + symplectic_matrix[i - 1, nqubits + control_q] = z_control_q + symplectic_matrix[i - 1, nqubits + target_q] = z_target_q + return symplectic_matrix From e112917ba83e0466223e609a79dbc81db5e1ac5f Mon Sep 17 00:00:00 2001 From: Renato Mello Date: Wed, 13 Dec 2023 14:41:57 +0000 Subject: [PATCH 03/73] Delete src/qibojit/backends/clifford.py~ --- src/qibojit/backends/clifford.py~ | 95 ------------------------------- 1 file changed, 95 deletions(-) delete mode 100644 src/qibojit/backends/clifford.py~ diff --git a/src/qibojit/backends/clifford.py~ b/src/qibojit/backends/clifford.py~ deleted file mode 100644 index cd3f793c..00000000 --- a/src/qibojit/backends/clifford.py~ +++ /dev/null @@ -1,95 +0,0 @@ -from numba import njit -from qibo.backends.clifford import CliffordOperations as CO - -class CliffordOperations(CO): - - def __init__(self, engine): - super().__init__(engine) - - @staticmethod - def I(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.I)(symplectic_matrix, q, nqubits) - - @staticmethod - def H(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.H)(symplectic_matrix, q, nqubits) - - @staticmethod - def CNOT(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CNOT)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def CZ(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CZ)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def S(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.S)(symplectic_matrix, q, nqubits) - - @staticmethod - def Z(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Z)(symplectic_matrix, q, nqubits) - - @staticmethod - def X(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.X)(symplectic_matrix, q, nqubits) - - @staticmethod - def Y(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.Y)(symplectic_matrix, q, nqubits) - - @staticmethod - def SX(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SX)(symplectic_matrix, q, nqubits) - - @staticmethod - def SDG(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SDG)(symplectic_matrix, q, nqubits) - - @staticmethod - def SXDG(symplectic_matrix, q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True)(CO.SXDG)(symplectic_matrix, q, nqubits) - - @staticmethod - def RX(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RX)(symplectic_matrix, q, nqubits, theta) - - @staticmethod - def RZ(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RZ)(symplectic_matrix, q, nqubits, theta) - - @staticmethod - def RY(symplectic_matrix, q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, f4)", parallel=True, cache=True)(CO.RY)(symplectic_matrix, q, nqubits, theta) - - @staticmethod - def SWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.SWAP)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.iSWAP)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def FSWAP(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.FSWAP)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def CY(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.CY)(symplectic_matrix, control_q, target_q, nqubits) - - @staticmethod - def CRX(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRX)(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def CRZ(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRZ)(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def CRY(symplectic_matrix, control_q, target_q, nqubits, theta): - return njit("b1[:,:](b1[:,:], u8, u8, u8, f4)", parallel=True, cache=True)(CO.CRY)(symplectic_matrix, control_q, target_q, nqubits, theta) - - @staticmethod - def ECR(symplectic_matrix, control_q, target_q, nqubits): - return njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True)(CO.ECR)(symplectic_matrix, control_q, target_q, nqubits) From d6f28b07708378fc1d8c5090a163ac7b921a9f03 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 14 Dec 2023 12:48:04 +0400 Subject: [PATCH 04/73] feat: implemented custom cuda kernels (to be tested) --- .../backends/{clifford.py => clifford_cpu.py} | 0 src/qibojit/backends/clifford_gpu.py | 296 ++++++++++++++++++ src/qibojit/backends/clifford_gpu.py~ | 257 +++++++++++++++ src/qibojit/backends/cpu.py | 2 +- src/qibojit/backends/gpu.py | 4 + 5 files changed, 558 insertions(+), 1 deletion(-) rename src/qibojit/backends/{clifford.py => clifford_cpu.py} (100%) create mode 100644 src/qibojit/backends/clifford_gpu.py create mode 100644 src/qibojit/backends/clifford_gpu.py~ diff --git a/src/qibojit/backends/clifford.py b/src/qibojit/backends/clifford_cpu.py similarity index 100% rename from src/qibojit/backends/clifford.py rename to src/qibojit/backends/clifford_cpu.py diff --git a/src/qibojit/backends/clifford_gpu.py b/src/qibojit/backends/clifford_gpu.py new file mode 100644 index 00000000..1601e79d --- /dev/null +++ b/src/qibojit/backends/clifford_gpu.py @@ -0,0 +1,296 @@ +import numpy as np +from cupyx import jit +from qibo.backends.clifford import CliffordOperations as CO + + +class CliffordOperations(CO): + def __init__(self, engine): + super().__init__(engine) + + @staticmethod + @jit.rawkernel() + def H(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[:, nqubits + q] = tmp + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def CNOT(symplectic_matrix, control_q, target_q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def CZ(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ ( + x[i, control_q] + & x[i, target_q] + & (z[i, target_q] ^ ~z[i, control_q]) + ) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def S(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def Z(symplectic_matrix, q, nqubits): + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def X(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def Y(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def SX(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def SDG(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def SXDG(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def SWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ ( + x[i, control_q] + & z[i, target_q] + & (x[i, target_q] ^ ~z[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & ( + x[i, control_q] + ^ x[i, target_q] + ^ z[i, control_q] + ^ ~z[i, target_q] + ) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & ( + x[i, target_q] + ^ z[i, target_q] + ^ x[i, control_q] + ^ ~z[i, control_q] + ) + ) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) + ) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def CY(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + ) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i - 1, target_q] = x_target_q + symplectic_matrix[i - 1, nqubits + control_q] = z_control_q + symplectic_matrix[i - 1, nqubits + target_q] = z_target_q + return symplectic_matrix diff --git a/src/qibojit/backends/clifford_gpu.py~ b/src/qibojit/backends/clifford_gpu.py~ new file mode 100644 index 00000000..f8bffea7 --- /dev/null +++ b/src/qibojit/backends/clifford_gpu.py~ @@ -0,0 +1,257 @@ +import numpy as np +from numba import njit, prange +from qibo.backends.clifford import CliffordOperations as CO + + +class CliffordOperations(CO): + def __init__(self, engine): + super().__init__(engine) + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def H(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[:, nqubits + q] = tmp + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) + def CNOT(symplectic_matrix, control_q, target_q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) + def CZ(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ ( + x[i, control_q] + & x[i, target_q] + & (z[i, target_q] ^ ~z[i, control_q]) + ) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def S(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def Z(symplectic_matrix, q, nqubits): + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def X(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def Y(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def SX(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def SDG(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def SXDG(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) + def SWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ ( + x[i, control_q] + & z[i, target_q] + & (x[i, target_q] ^ ~z[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & ( + x[i, control_q] + ^ x[i, target_q] + ^ z[i, control_q] + ^ ~z[i, target_q] + ) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) + def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & ( + x[i, target_q] + ^ z[i, target_q] + ^ x[i, control_q] + ^ ~z[i, control_q] + ) + ) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) + ) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) + def CY(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + ) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i - 1, target_q] = x_target_q + symplectic_matrix[i - 1, nqubits + control_q] = z_control_q + symplectic_matrix[i - 1, nqubits + target_q] = z_target_q + return symplectic_matrix diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index db3bf222..857293d3 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -70,7 +70,7 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - from qibojit.backends.clifford import CliffordOperations + from qibojit.backends.clifford_cpu import CliffordOperations self.clifford_operations = CliffordOperations(self.np) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index c00d233c..64d1fc04 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -98,6 +98,10 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() + from qibojit.backends.clifford_gpu import CliffordOperations + + self.clifford_operations = CliffordOperations(self.np) + def set_precision(self, precision): super().set_precision(precision) if self.dtype == "complex128": From e39e89e314c099a469ca67e18b92e443dbeb50bd Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 18 Dec 2023 16:09:39 +0400 Subject: [PATCH 05/73] feat: implemented rowsum --- src/qibojit/backends/clifford_cpu.py | 68 ++++++- src/qibojit/backends/clifford_gpu.py | 73 ++++++++ src/qibojit/backends/clifford_gpu.py~ | 257 -------------------------- 3 files changed, 140 insertions(+), 258 deletions(-) delete mode 100644 src/qibojit/backends/clifford_gpu.py~ diff --git a/src/qibojit/backends/clifford_cpu.py b/src/qibojit/backends/clifford_cpu.py index f8bffea7..a01dfea0 100644 --- a/src/qibojit/backends/clifford_cpu.py +++ b/src/qibojit/backends/clifford_cpu.py @@ -1,5 +1,5 @@ import numpy as np -from numba import njit, prange +from numba import njit, prange, uint64 from qibo.backends.clifford import CliffordOperations as CO @@ -144,6 +144,34 @@ def SXDG(symplectic_matrix, q, nqubits): symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def RY_pi(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) + def RY_3pi_2(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + @staticmethod @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def SWAP(symplectic_matrix, control_q, target_q, nqubits): @@ -255,3 +283,41 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): symplectic_matrix[i - 1, nqubits + control_q] = z_control_q symplectic_matrix[i - 1, nqubits + target_q] = z_target_q return symplectic_matrix + + @staticmethod + @njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) + def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + x = symplectic_matrix[ + : -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits + ] + z = symplectic_matrix[ + : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 + ] + + x1, x2 = x[i, :], x[h, :] + z1, z2 = z[i, :], z[h, :] + for j in prange(len(h)): + exp = np.zeros(nqubits, dtype=uint64) + x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_neq_z1 = ~x1_eq_z1 + x1_eq_0 = x1[j] == False + x1_eq_1 = ~x1_eq_0 + ind2 = x1_eq_z1 & x1_eq_1 + ind3 = x1_eq_1 & x1_neq_z1 + ind4 = x1_eq_0 & x1_neq_z1 + exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) + exp[ind3] = z2[j, ind3].astype(uint64) * ( + 2 * x2[j, ind3].astype(uint64) - 1 + ) + exp[ind4] = x2[j, ind4].astype(uint64) * ( + 1 - 2 * z2[j, ind4].astype(uint64) + ) + + symplectic_matrix[h[j], -1] = ( + 2 * symplectic_matrix[h[j], -1] + + 2 * symplectic_matrix[i[j], -1] + + np.sum(exp) + ) % 4 == 0 + symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] + symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + return symplectic_matrix diff --git a/src/qibojit/backends/clifford_gpu.py b/src/qibojit/backends/clifford_gpu.py index 1601e79d..a8442858 100644 --- a/src/qibojit/backends/clifford_gpu.py +++ b/src/qibojit/backends/clifford_gpu.py @@ -1,3 +1,4 @@ +import cupy as cp import numpy as np from cupyx import jit from qibo.backends.clifford import CliffordOperations as CO @@ -174,6 +175,40 @@ def SXDG(symplectic_matrix, q, nqubits): symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix + @staticmethod + @jit.rawkernel() + def RY_pi(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def RY_3pi_2(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + @staticmethod @jit.rawkernel() def SWAP(symplectic_matrix, control_q, target_q, nqubits): @@ -294,3 +329,41 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): symplectic_matrix[i - 1, nqubits + control_q] = z_control_q symplectic_matrix[i - 1, nqubits + target_q] = z_target_q return symplectic_matrix + + @staticmethod + @jit.rawkernel() + def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + x = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), :nqubits] + z = symplectic_matrix[ + : -1 + (2 * nqubits + 2) * int(include_scratch), nqubits:-1 + ] + + x1, x2 = x[i, :], x[h, :] + z1, z2 = z[i, :], z[h, :] + tid = jit.blockIdx.h * jit.blockDim.h + jit.threadIdx.h + ntid = jit.gridDim.h * jit.blockDim.h + for i in range(tid, len(h), ntid): + exp = cp.zeros(nqubits, dtype=int64) + x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_neq_z1 = ~x1_eq_z1 + x1_eq_0 = x1[j] == False + x1_eq_1 = ~x1_eq_0 + ind2 = x1_eq_z1 & x1_eq_1 + ind3 = x1_eq_1 & x1_neq_z1 + ind4 = x1_eq_0 & x1_neq_z1 + exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) + exp[ind3] = z2[j, ind3].astype(uint64) * ( + 2 * x2[j, ind3].astype(uint64) - 1 + ) + exp[ind4] = x2[j, ind4].astype(uint64) * ( + 1 - 2 * z2[j, ind4].astype(uint64) + ) + + symplectic_matrix[h[j], -1] = ( + 2 * symplectic_matrix[h[j], -1] + + 2 * symplectic_matrix[i[j], -1] + + cp.sum(exp) + ) % 4 == 0 + symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] + symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + return symplectic_matrix diff --git a/src/qibojit/backends/clifford_gpu.py~ b/src/qibojit/backends/clifford_gpu.py~ deleted file mode 100644 index f8bffea7..00000000 --- a/src/qibojit/backends/clifford_gpu.py~ +++ /dev/null @@ -1,257 +0,0 @@ -import numpy as np -from numba import njit, prange -from qibo.backends.clifford import CliffordOperations as CO - - -class CliffordOperations(CO): - def __init__(self, engine): - super().__init__(engine) - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def H(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[:, nqubits + q] = tmp - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CNOT(symplectic_matrix, control_q, target_q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( - x[i, target_q] ^ ~z[i, control_q] - ) - symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CZ(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ ( - x[i, control_q] - & x[i, target_q] - & (z[i, target_q] ^ ~z[i, control_q]) - ) - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) - ) - z_control_q = x[i, target_q] ^ z[i, control_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def S(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def Z(symplectic_matrix, q, nqubits): - """Decomposition --> S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ ( - (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def X(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def Y(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SX(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SDG(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SXDG(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def SWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> CNOT-CNOT-CNOT""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[:-1, -1] = ( - r[i] - ^ ( - x[i, control_q] - & z[i, target_q] - & (x[i, target_q] ^ ~z[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ z[i, control_q]) - & (z[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - x[i, target_q] - & z[i, control_q] - & ( - x[i, control_q] - ^ x[i, target_q] - ^ z[i, control_q] - ^ ~z[i, target_q] - ) - ) - ) - x_cq = symplectic_matrix[i, control_q] - x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, nqubits + control_q] - z_tq = symplectic_matrix[i, nqubits + target_q] - symplectic_matrix[i, control_q] = x_tq - symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, nqubits + control_q] = z_tq - symplectic_matrix[i, nqubits + target_q] = z_cq - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-CNOT-H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & z[i, control_q]) - ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) - ^ ( - (z[i, control_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - & (x[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) - & ( - x[i, target_q] - ^ z[i, target_q] - ^ x[i, control_q] - ^ ~z[i, control_q] - ) - ) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) - ) - ) - z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] - z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - tmp = symplectic_matrix[i, control_q] - symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] - symplectic_matrix[i, target_q] = tmp - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CY(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> S-CNOT-SDG""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ z[i, target_q]) - & (z[i, control_q] ^ ~x[i, target_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - ) - ) - x_target_q = x[i, control_q] ^ x[i, target_q] - z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i - 1, target_q] = x_target_q - symplectic_matrix[i - 1, nqubits + control_q] = z_control_q - symplectic_matrix[i - 1, nqubits + target_q] = z_target_q - return symplectic_matrix From 007c348556069cee20daa01bccefa259c23d265b Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Tue, 19 Dec 2023 09:59:17 +0400 Subject: [PATCH 06/73] fix: fixed H, CY and rowsum --- src/qibojit/backends/clifford_cpu.py | 10 +++++----- src/qibojit/backends/clifford_gpu.py | 10 +++++----- src/qibojit/backends/gpu.py | 3 +++ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/qibojit/backends/clifford_cpu.py b/src/qibojit/backends/clifford_cpu.py index a01dfea0..3a9672ae 100644 --- a/src/qibojit/backends/clifford_cpu.py +++ b/src/qibojit/backends/clifford_cpu.py @@ -17,7 +17,7 @@ def H(symplectic_matrix, q, nqubits): symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) tmp = symplectic_matrix[i, q] symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[:, nqubits + q] = tmp + symplectic_matrix[i, nqubits + q] = tmp return symplectic_matrix @staticmethod @@ -279,9 +279,9 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): x_target_q = x[i, control_q] ^ x[i, target_q] z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i - 1, target_q] = x_target_q - symplectic_matrix[i - 1, nqubits + control_q] = z_control_q - symplectic_matrix[i - 1, nqubits + target_q] = z_target_q + symplectic_matrix[i, target_q] = x_target_q + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q return symplectic_matrix @staticmethod @@ -317,7 +317,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + np.sum(exp) - ) % 4 == 0 + ) % 4 != 0 symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] return symplectic_matrix diff --git a/src/qibojit/backends/clifford_gpu.py b/src/qibojit/backends/clifford_gpu.py index a8442858..b1e09659 100644 --- a/src/qibojit/backends/clifford_gpu.py +++ b/src/qibojit/backends/clifford_gpu.py @@ -21,7 +21,7 @@ def H(symplectic_matrix, q, nqubits): symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) tmp = symplectic_matrix[i, q] symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[:, nqubits + q] = tmp + symplectic_matrix[i, nqubits + q] = tmp return symplectic_matrix @staticmethod @@ -325,9 +325,9 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): x_target_q = x[i, control_q] ^ x[i, target_q] z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i - 1, target_q] = x_target_q - symplectic_matrix[i - 1, nqubits + control_q] = z_control_q - symplectic_matrix[i - 1, nqubits + target_q] = z_target_q + symplectic_matrix[i, target_q] = x_target_q + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q return symplectic_matrix @staticmethod @@ -363,7 +363,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + cp.sum(exp) - ) % 4 == 0 + ) % 4 != 0 symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] return symplectic_matrix diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 64d1fc04..d708fee9 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -64,8 +64,11 @@ def __init__(self): # load core kernels self.gates = {} + from qibojit.backends.clifford_gpu import CliffordOperations from qibojit.custom_operators import raw_kernels + self.clifford_operations = CliffordOperations(self.cp) + def kernel_loader(name, ktype): code = getattr(raw_kernels, name) code = code.replace("T", f"thrust::complex<{ktype}>") From 0f7be24f64079e03dd3634506b2f83b364f2b4a2 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Fri, 22 Dec 2023 19:13:19 +0100 Subject: [PATCH 07/73] feat: made numba operations as standalone functions --- .../backends/clifford_operations_cpu.py | 307 ++++++++++++++++++ .../backends/clifford_operations_cpu.py~ | 0 src/qibojit/backends/cpu.py | 5 +- 3 files changed, 309 insertions(+), 3 deletions(-) create mode 100644 src/qibojit/backends/clifford_operations_cpu.py create mode 100644 src/qibojit/backends/clifford_operations_cpu.py~ diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py new file mode 100644 index 00000000..0040f59b --- /dev/null +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -0,0 +1,307 @@ +import numpy as np +from numba import njit, prange, uint64 +from qibo.backends.clifford_operations import M as _M +from qibo.backends.clifford_operations import * + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def H(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = tmp + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CNOT(symplectic_matrix, control_q, target_q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix + + +@staticmethod +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CZ(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & x[i, target_q] & (z[i, target_q] ^ ~z[i, control_q])) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@staticmethod +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def S(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def Z(symplectic_matrix, q, nqubits): + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def X(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def Y(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SX(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SDG(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SXDG(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def RY_pi(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def RY_3pi_2(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def SWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & (x[i, control_q] ^ x[i, target_q] ^ z[i, control_q] ^ ~z[i, target_q]) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] ^ ~z[i, control_q]) + ) + ^ (x[i, control_q] & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CY(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ((x[i, target_q] ^ x[i, control_q]) & (z[i, target_q] ^ x[i, target_q])) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, target_q] = x_target_q + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) +def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + print("using numba rowsum") + x = symplectic_matrix[: -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits] + z = symplectic_matrix[ + : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 + ] + + x1, x2 = x[i, :], x[h, :] + z1, z2 = z[i, :], z[h, :] + for j in prange(len(h)): + exp = np.zeros(nqubits, dtype=uint64) + x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_neq_z1 = ~x1_eq_z1 + x1_eq_0 = x1[j] == False + x1_eq_1 = ~x1_eq_0 + ind2 = x1_eq_z1 & x1_eq_1 + ind3 = x1_eq_1 & x1_neq_z1 + ind4 = x1_eq_0 & x1_neq_z1 + exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) + exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) + exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) + + symplectic_matrix[h[j], -1] = ( + 2 * symplectic_matrix[h[j], -1] + + 2 * symplectic_matrix[i[j], -1] + + np.sum(exp) + ) % 4 != 0 + symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] + symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + return symplectic_matrix + + +@njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) +def _determined_outcome(state, q, nqubits): + state[-1, :] = False + indices = state[:nqubits, q].nonzero()[0] + for i in prange(len(indices)): + state = _rowsum( + state, + np.array([2 * nqubits], dtype=uint64), + np.array([indices[i] + nqubits], dtype=uint64), + nqubits, + include_scratch=True, + ) + return state, uint64(state[-1, -1]) diff --git a/src/qibojit/backends/clifford_operations_cpu.py~ b/src/qibojit/backends/clifford_operations_cpu.py~ new file mode 100644 index 00000000..e69de29b diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 857293d3..916ef82c 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -6,6 +6,7 @@ from qibo.gates.channels import ReadoutErrorChannel from qibo.gates.special import FusedGate +from qibojit.backends import clifford_operations_cpu from qibojit.backends.matrices import CustomMatrices GATE_OPS = { @@ -70,9 +71,7 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - from qibojit.backends.clifford_cpu import CliffordOperations - - self.clifford_operations = CliffordOperations(self.np) + self.clifford_operations = clifford_operations_cpu def set_precision(self, precision): if precision != self.precision: From d589890f1dd5bf3135ead064e9ca4dde5e3f8665 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Wed, 27 Dec 2023 10:11:31 +0100 Subject: [PATCH 08/73] fix: monkey-patching qibo operations --- .../backends/clifford_operations_cpu.py | 26 +++++++++++++++++-- .../backends/clifford_operations_cpu.py~ | 0 2 files changed, 24 insertions(+), 2 deletions(-) delete mode 100644 src/qibojit/backends/clifford_operations_cpu.py~ diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 0040f59b..05903690 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -1,6 +1,6 @@ import numpy as np +import qibo.backends.clifford_operations as co from numba import njit, prange, uint64 -from qibo.backends.clifford_operations import M as _M from qibo.backends.clifford_operations import * @@ -261,7 +261,6 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): @njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - print("using numba rowsum") x = symplectic_matrix[: -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits] z = symplectic_matrix[ : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 @@ -305,3 +304,26 @@ def _determined_outcome(state, q, nqubits): include_scratch=True, ) return state, uint64(state[-1, -1]) + + +# monkey-patching the original qibo clifford operations +for f in [ + "H", + "CNOT", + "CZ", + "S", + "Z", + "X", + "Y", + "SX", + "SDG", + "SXDG", + "RY_pi", + "RY_3pi_2", + "SWAP", + "iSWAP", + "CY", + "_rowsum", + "_determined_outcome", +]: + setattr(co, f, locals()[f]) diff --git a/src/qibojit/backends/clifford_operations_cpu.py~ b/src/qibojit/backends/clifford_operations_cpu.py~ deleted file mode 100644 index e69de29b..00000000 From 72e951d0dbc2669f385962d875075eeef672d206 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Wed, 27 Dec 2023 14:53:07 +0100 Subject: [PATCH 09/73] feat: updated the gpu operations as well --- .../backends/#clifford_operations_cpu.py# | 329 +++++++++++++++ .../backends/.#clifford_operations_cpu.py | 1 + .../backends/clifford_operations_cpu.py | 2 +- .../backends/clifford_operations_gpu.py | 375 ++++++++++++++++++ src/qibojit/backends/gpu.py | 4 +- 5 files changed, 708 insertions(+), 3 deletions(-) create mode 100644 src/qibojit/backends/#clifford_operations_cpu.py# create mode 120000 src/qibojit/backends/.#clifford_operations_cpu.py create mode 100644 src/qibojit/backends/clifford_operations_gpu.py diff --git a/src/qibojit/backends/#clifford_operations_cpu.py# b/src/qibojit/backends/#clifford_operations_cpu.py# new file mode 100644 index 00000000..05903690 --- /dev/null +++ b/src/qibojit/backends/#clifford_operations_cpu.py# @@ -0,0 +1,329 @@ +import numpy as np +import qibo.backends.clifford_operations as co +from numba import njit, prange, uint64 +from qibo.backends.clifford_operations import * + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def H(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = tmp + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CNOT(symplectic_matrix, control_q, target_q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix + + +@staticmethod +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CZ(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & x[i, target_q] & (z[i, target_q] ^ ~z[i, control_q])) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@staticmethod +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def S(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def Z(symplectic_matrix, q, nqubits): + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def X(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def Y(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SX(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SDG(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def SXDG(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def RY_pi(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) +def RY_3pi_2(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def SWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & (x[i, control_q] ^ x[i, target_q] ^ z[i, control_q] ^ ~z[i, target_q]) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] ^ ~z[i, control_q]) + ) + ^ (x[i, control_q] & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) +def CY(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + for i in prange(symplectic_matrix.shape[0] - 1): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ((x[i, target_q] ^ x[i, control_q]) & (z[i, target_q] ^ x[i, target_q])) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, target_q] = x_target_q + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) +def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + x = symplectic_matrix[: -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits] + z = symplectic_matrix[ + : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 + ] + + x1, x2 = x[i, :], x[h, :] + z1, z2 = z[i, :], z[h, :] + for j in prange(len(h)): + exp = np.zeros(nqubits, dtype=uint64) + x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_neq_z1 = ~x1_eq_z1 + x1_eq_0 = x1[j] == False + x1_eq_1 = ~x1_eq_0 + ind2 = x1_eq_z1 & x1_eq_1 + ind3 = x1_eq_1 & x1_neq_z1 + ind4 = x1_eq_0 & x1_neq_z1 + exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) + exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) + exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) + + symplectic_matrix[h[j], -1] = ( + 2 * symplectic_matrix[h[j], -1] + + 2 * symplectic_matrix[i[j], -1] + + np.sum(exp) + ) % 4 != 0 + symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] + symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + return symplectic_matrix + + +@njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) +def _determined_outcome(state, q, nqubits): + state[-1, :] = False + indices = state[:nqubits, q].nonzero()[0] + for i in prange(len(indices)): + state = _rowsum( + state, + np.array([2 * nqubits], dtype=uint64), + np.array([indices[i] + nqubits], dtype=uint64), + nqubits, + include_scratch=True, + ) + return state, uint64(state[-1, -1]) + + +# monkey-patching the original qibo clifford operations +for f in [ + "H", + "CNOT", + "CZ", + "S", + "Z", + "X", + "Y", + "SX", + "SDG", + "SXDG", + "RY_pi", + "RY_3pi_2", + "SWAP", + "iSWAP", + "CY", + "_rowsum", + "_determined_outcome", +]: + setattr(co, f, locals()[f]) diff --git a/src/qibojit/backends/.#clifford_operations_cpu.py b/src/qibojit/backends/.#clifford_operations_cpu.py new file mode 120000 index 00000000..1ad9d1d6 --- /dev/null +++ b/src/qibojit/backends/.#clifford_operations_cpu.py @@ -0,0 +1 @@ +andrea@MacBook-Pro-di-andrea.local.4120 \ No newline at end of file diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 05903690..ba2b5c7e 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -324,6 +324,6 @@ def _determined_outcome(state, q, nqubits): "iSWAP", "CY", "_rowsum", - "_determined_outcome", + # "_determined_outcome", ]: setattr(co, f, locals()[f]) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py new file mode 100644 index 00000000..e07d8b1d --- /dev/null +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -0,0 +1,375 @@ +import cupy as cp +import numpy as np +import qibo.backends.clifford_operations as co +from cupyx import jit +from qibo.backends.clifford_operations import * + + +@jit.rawkernel() +def H(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + tmp = symplectic_matrix[i, q] + symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = tmp + return symplectic_matrix + + +@jit.rawkernel() +def CNOT(symplectic_matrix, control_q, target_q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( + x[i, target_q] ^ ~z[i, control_q] + ) + symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + return symplectic_matrix + + +@jit.rawkernel() +def CZ(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & x[i, target_q] & (z[i, target_q] ^ ~z[i, control_q])) + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, control_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@jit.rawkernel() +def S(symplectic_matrix, q, nqubits): + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@jit.rawkernel() +def Z(symplectic_matrix, q, nqubits): + """Decomposition --> S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ ( + (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + ) + return symplectic_matrix + + +@jit.rawkernel() +def X(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + ) + return symplectic_matrix + + +@jit.rawkernel() +def Y(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-H-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + ) + return symplectic_matrix + + +@jit.rawkernel() +def SX(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@jit.rawkernel() +def SDG(symplectic_matrix, q, nqubits): + """Decomposition --> S-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@jit.rawkernel() +def SXDG(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S-S-H""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + return symplectic_matrix + + +@jit.rawkernel() +def RY_pi(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@jit.rawkernel() +def RY_3pi_2(symplectic_matrix, q, nqubits): + """Decomposition --> H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) + zq = symplectic_matrix[i, nqubits + q] + symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + symplectic_matrix[i, q] = zq + return symplectic_matrix + + +@jit.rawkernel() +def SWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> CNOT-CNOT-CNOT""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[:-1, -1] = ( + r[i] + ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) + ^ ( + (x[i, target_q] ^ x[i, control_q]) + & (z[i, target_q] ^ z[i, control_q]) + & (z[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + x[i, target_q] + & z[i, control_q] + & (x[i, control_q] ^ x[i, target_q] ^ z[i, control_q] ^ ~z[i, target_q]) + ) + ) + x_cq = symplectic_matrix[i, control_q] + x_tq = symplectic_matrix[i, target_q] + z_cq = symplectic_matrix[i, nqubits + control_q] + z_tq = symplectic_matrix[i, nqubits + target_q] + symplectic_matrix[i, control_q] = x_tq + symplectic_matrix[i, target_q] = x_cq + symplectic_matrix[i, nqubits + control_q] = z_tq + symplectic_matrix[i, nqubits + target_q] = z_cq + return symplectic_matrix + + +@jit.rawkernel() +def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> H-CNOT-CNOT-H-S-S""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & z[i, target_q]) + ^ (x[i, control_q] & z[i, control_q]) + ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + ^ ( + (z[i, control_q] ^ x[i, control_q]) + & (z[i, target_q] ^ x[i, target_q]) + & (x[i, target_q] ^ ~x[i, control_q]) + ) + ^ ( + (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) + & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] ^ ~z[i, control_q]) + ) + ^ (x[i, control_q] & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q])) + ) + z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] + z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + tmp = symplectic_matrix[i, control_q] + symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] + symplectic_matrix[i, target_q] = tmp + return symplectic_matrix + + +@jit.rawkernel() +def CY(symplectic_matrix, control_q, target_q, nqubits): + """Decomposition --> S-CNOT-SDG""" + r = symplectic_matrix[:-1, -1] + x = symplectic_matrix[:-1, :nqubits] + z = symplectic_matrix[:-1, nqubits:-1] + xq = x[:, control_q] + tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq + ntid = jit.gridDim.xq * jit.blockDim.xq + for i in range(tid, xq.shape[0], ntid): + symplectic_matrix[i, -1] = ( + r[i] + ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + ^ ( + x[i, control_q] + & (x[i, target_q] ^ z[i, target_q]) + & (z[i, control_q] ^ ~x[i, target_q]) + ) + ^ ((x[i, target_q] ^ x[i, control_q]) & (z[i, target_q] ^ x[i, target_q])) + ) + x_target_q = x[i, control_q] ^ x[i, target_q] + z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] + z_target_q = z[i, target_q] ^ x[i, control_q] + symplectic_matrix[i, target_q] = x_target_q + symplectic_matrix[i, nqubits + control_q] = z_control_q + symplectic_matrix[i, nqubits + target_q] = z_target_q + return symplectic_matrix + + +@jit.rawkernel() +def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + x = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), :nqubits] + z = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), nqubits:-1] + + x1, x2 = x[i, :], x[h, :] + z1, z2 = z[i, :], z[h, :] + tid = jit.blockIdx.h * jit.blockDim.h + jit.threadIdx.h + ntid = jit.gridDim.h * jit.blockDim.h + for j in range(tid, len(h), ntid): + exp = cp.zeros(nqubits, dtype=int64) + x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_neq_z1 = ~x1_eq_z1 + x1_eq_0 = x1[j] == False + x1_eq_1 = ~x1_eq_0 + ind2 = x1_eq_z1 & x1_eq_1 + ind3 = x1_eq_1 & x1_neq_z1 + ind4 = x1_eq_0 & x1_neq_z1 + exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) + exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) + exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) + + symplectic_matrix[h[j], -1] = ( + 2 * symplectic_matrix[h[j], -1] + + 2 * symplectic_matrix[i[j], -1] + + cp.sum(exp) + ) % 4 != 0 + symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] + symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + return symplectic_matrix + + +@jit.rawkernel() +def _determined_outcome(state, q, nqubits): + state[-1, :] = False + indices = state[:nqubits, q].nonzero()[0] + tid = jit.blockIdx.indices * jit.blockDim.indices + jit.threadIdx.indices + ntid = jit.gridDim.indices * jit.blockDim.indices + for i in range(tid, len(indices), ntid): + state = _rowsum( + state, + np.array([2 * nqubits], dtype=uint64), + np.array([indices[i] + nqubits], dtype=uint64), + nqubits, + include_scratch=True, + ) + return state, uint64(state[-1, -1]) + + +# monkey-patching the original qibo clifford operations +for f in [ + "H", + "CNOT", + "CZ", + "S", + "Z", + "X", + "Y", + "SX", + "SDG", + "SXDG", + "RY_pi", + "RY_3pi_2", + "SWAP", + "iSWAP", + "CY", + "_rowsum", + "_determined_outcome", +]: + setattr(co, f, locals()[f]) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index d708fee9..945f143b 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -2,6 +2,7 @@ from qibo.backends.numpy import NumpyBackend from qibo.config import log, raise_error +from qibojit.backends import clifford_operations_gpu from qibojit.backends.cpu import NumbaBackend from qibojit.backends.matrices import CupyMatrices, CuQuantumMatrices, CustomMatrices @@ -64,10 +65,9 @@ def __init__(self): # load core kernels self.gates = {} - from qibojit.backends.clifford_gpu import CliffordOperations from qibojit.custom_operators import raw_kernels - self.clifford_operations = CliffordOperations(self.cp) + self.clifford_operations = clifford_operations_gpu def kernel_loader(name, ktype): code = getattr(raw_kernels, name) From 032c4b0f85bb4f21260bbe69196da99698cf9933 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Wed, 27 Dec 2023 14:55:30 +0100 Subject: [PATCH 10/73] fix: removed unnecessary files --- .../backends/#clifford_operations_cpu.py# | 329 ---------------- .../backends/.#clifford_operations_cpu.py | 1 - src/qibojit/backends/clifford_cpu.py | 323 --------------- src/qibojit/backends/clifford_gpu.py | 369 ------------------ 4 files changed, 1022 deletions(-) delete mode 100644 src/qibojit/backends/#clifford_operations_cpu.py# delete mode 120000 src/qibojit/backends/.#clifford_operations_cpu.py delete mode 100644 src/qibojit/backends/clifford_cpu.py delete mode 100644 src/qibojit/backends/clifford_gpu.py diff --git a/src/qibojit/backends/#clifford_operations_cpu.py# b/src/qibojit/backends/#clifford_operations_cpu.py# deleted file mode 100644 index 05903690..00000000 --- a/src/qibojit/backends/#clifford_operations_cpu.py# +++ /dev/null @@ -1,329 +0,0 @@ -import numpy as np -import qibo.backends.clifford_operations as co -from numba import njit, prange, uint64 -from qibo.backends.clifford_operations import * - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def H(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = tmp - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) -def CNOT(symplectic_matrix, control_q, target_q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( - x[i, target_q] ^ ~z[i, control_q] - ) - symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] - return symplectic_matrix - - -@staticmethod -@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) -def CZ(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & x[i, target_q] & (z[i, target_q] ^ ~z[i, control_q])) - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) - ) - z_control_q = x[i, target_q] ^ z[i, control_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - -@staticmethod -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def S(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def Z(symplectic_matrix, q, nqubits): - """Decomposition --> S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ ( - (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) - ) - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def X(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) - ) - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def Y(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) - ) - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def SX(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def SDG(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def SXDG(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def RY_pi(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) -def RY_3pi_2(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) -def SWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> CNOT-CNOT-CNOT""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[:-1, -1] = ( - r[i] - ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ z[i, control_q]) - & (z[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - x[i, target_q] - & z[i, control_q] - & (x[i, control_q] ^ x[i, target_q] ^ z[i, control_q] ^ ~z[i, target_q]) - ) - ) - x_cq = symplectic_matrix[i, control_q] - x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, nqubits + control_q] - z_tq = symplectic_matrix[i, nqubits + target_q] - symplectic_matrix[i, control_q] = x_tq - symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, nqubits + control_q] = z_tq - symplectic_matrix[i, nqubits + target_q] = z_cq - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) -def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-CNOT-H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & z[i, control_q]) - ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) - ^ ( - (z[i, control_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - & (x[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] ^ ~z[i, control_q]) - ) - ^ (x[i, control_q] & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q])) - ) - z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] - z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - tmp = symplectic_matrix[i, control_q] - symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] - symplectic_matrix[i, target_q] = tmp - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) -def CY(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> S-CNOT-SDG""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ z[i, target_q]) - & (z[i, control_q] ^ ~x[i, target_q]) - ) - ^ ((x[i, target_q] ^ x[i, control_q]) & (z[i, target_q] ^ x[i, target_q])) - ) - x_target_q = x[i, control_q] ^ x[i, target_q] - z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, target_q] = x_target_q - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - -@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) -def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - x = symplectic_matrix[: -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits] - z = symplectic_matrix[ - : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 - ] - - x1, x2 = x[i, :], x[h, :] - z1, z2 = z[i, :], z[h, :] - for j in prange(len(h)): - exp = np.zeros(nqubits, dtype=uint64) - x1_eq_z1 = (x1[j] ^ z1[j]) == False - x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = x1[j] == False - x1_eq_1 = ~x1_eq_0 - ind2 = x1_eq_z1 & x1_eq_1 - ind3 = x1_eq_1 & x1_neq_z1 - ind4 = x1_eq_0 & x1_neq_z1 - exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) - exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) - exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) - - symplectic_matrix[h[j], -1] = ( - 2 * symplectic_matrix[h[j], -1] - + 2 * symplectic_matrix[i[j], -1] - + np.sum(exp) - ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] - symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] - return symplectic_matrix - - -@njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) -def _determined_outcome(state, q, nqubits): - state[-1, :] = False - indices = state[:nqubits, q].nonzero()[0] - for i in prange(len(indices)): - state = _rowsum( - state, - np.array([2 * nqubits], dtype=uint64), - np.array([indices[i] + nqubits], dtype=uint64), - nqubits, - include_scratch=True, - ) - return state, uint64(state[-1, -1]) - - -# monkey-patching the original qibo clifford operations -for f in [ - "H", - "CNOT", - "CZ", - "S", - "Z", - "X", - "Y", - "SX", - "SDG", - "SXDG", - "RY_pi", - "RY_3pi_2", - "SWAP", - "iSWAP", - "CY", - "_rowsum", - "_determined_outcome", -]: - setattr(co, f, locals()[f]) diff --git a/src/qibojit/backends/.#clifford_operations_cpu.py b/src/qibojit/backends/.#clifford_operations_cpu.py deleted file mode 120000 index 1ad9d1d6..00000000 --- a/src/qibojit/backends/.#clifford_operations_cpu.py +++ /dev/null @@ -1 +0,0 @@ -andrea@MacBook-Pro-di-andrea.local.4120 \ No newline at end of file diff --git a/src/qibojit/backends/clifford_cpu.py b/src/qibojit/backends/clifford_cpu.py deleted file mode 100644 index 3a9672ae..00000000 --- a/src/qibojit/backends/clifford_cpu.py +++ /dev/null @@ -1,323 +0,0 @@ -import numpy as np -from numba import njit, prange, uint64 -from qibo.backends.clifford import CliffordOperations as CO - - -class CliffordOperations(CO): - def __init__(self, engine): - super().__init__(engine) - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def H(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = tmp - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CNOT(symplectic_matrix, control_q, target_q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( - x[i, target_q] ^ ~z[i, control_q] - ) - symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CZ(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ ( - x[i, control_q] - & x[i, target_q] - & (z[i, target_q] ^ ~z[i, control_q]) - ) - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) - ) - z_control_q = x[i, target_q] ^ z[i, control_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def S(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def Z(symplectic_matrix, q, nqubits): - """Decomposition --> S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ ( - (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def X(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def Y(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) - ) - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SX(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SDG(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def SXDG(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def RY_pi(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) - def RY_3pi_2(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def SWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> CNOT-CNOT-CNOT""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[:-1, -1] = ( - r[i] - ^ ( - x[i, control_q] - & z[i, target_q] - & (x[i, target_q] ^ ~z[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ z[i, control_q]) - & (z[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - x[i, target_q] - & z[i, control_q] - & ( - x[i, control_q] - ^ x[i, target_q] - ^ z[i, control_q] - ^ ~z[i, target_q] - ) - ) - ) - x_cq = symplectic_matrix[i, control_q] - x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, nqubits + control_q] - z_tq = symplectic_matrix[i, nqubits + target_q] - symplectic_matrix[i, control_q] = x_tq - symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, nqubits + control_q] = z_tq - symplectic_matrix[i, nqubits + target_q] = z_cq - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-CNOT-H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & z[i, control_q]) - ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) - ^ ( - (z[i, control_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - & (x[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) - & ( - x[i, target_q] - ^ z[i, target_q] - ^ x[i, control_q] - ^ ~z[i, control_q] - ) - ) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) - ) - ) - z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] - z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - tmp = symplectic_matrix[i, control_q] - symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] - symplectic_matrix[i, target_q] = tmp - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) - def CY(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> S-CNOT-SDG""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ z[i, target_q]) - & (z[i, control_q] ^ ~x[i, target_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - ) - ) - x_target_q = x[i, control_q] ^ x[i, target_q] - z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, target_q] = x_target_q - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - @staticmethod - @njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) - def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - x = symplectic_matrix[ - : -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits - ] - z = symplectic_matrix[ - : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 - ] - - x1, x2 = x[i, :], x[h, :] - z1, z2 = z[i, :], z[h, :] - for j in prange(len(h)): - exp = np.zeros(nqubits, dtype=uint64) - x1_eq_z1 = (x1[j] ^ z1[j]) == False - x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = x1[j] == False - x1_eq_1 = ~x1_eq_0 - ind2 = x1_eq_z1 & x1_eq_1 - ind3 = x1_eq_1 & x1_neq_z1 - ind4 = x1_eq_0 & x1_neq_z1 - exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) - exp[ind3] = z2[j, ind3].astype(uint64) * ( - 2 * x2[j, ind3].astype(uint64) - 1 - ) - exp[ind4] = x2[j, ind4].astype(uint64) * ( - 1 - 2 * z2[j, ind4].astype(uint64) - ) - - symplectic_matrix[h[j], -1] = ( - 2 * symplectic_matrix[h[j], -1] - + 2 * symplectic_matrix[i[j], -1] - + np.sum(exp) - ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] - symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] - return symplectic_matrix diff --git a/src/qibojit/backends/clifford_gpu.py b/src/qibojit/backends/clifford_gpu.py deleted file mode 100644 index b1e09659..00000000 --- a/src/qibojit/backends/clifford_gpu.py +++ /dev/null @@ -1,369 +0,0 @@ -import cupy as cp -import numpy as np -from cupyx import jit -from qibo.backends.clifford import CliffordOperations as CO - - -class CliffordOperations(CO): - def __init__(self, engine): - super().__init__(engine) - - @staticmethod - @jit.rawkernel() - def H(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = tmp - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def CNOT(symplectic_matrix, control_q, target_q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( - x[i, target_q] ^ ~z[i, control_q] - ) - symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def CZ(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ ( - x[i, control_q] - & x[i, target_q] - & (z[i, target_q] ^ ~z[i, control_q]) - ) - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) - ) - z_control_q = x[i, target_q] ^ z[i, control_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def S(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def Z(symplectic_matrix, q, nqubits): - """Decomposition --> S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ ( - (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def X(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) - ) - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def Y(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) - ) - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def SX(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def SDG(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def SXDG(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def RY_pi(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def RY_3pi_2(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def SWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> CNOT-CNOT-CNOT""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[:-1, -1] = ( - r[i] - ^ ( - x[i, control_q] - & z[i, target_q] - & (x[i, target_q] ^ ~z[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ z[i, control_q]) - & (z[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - x[i, target_q] - & z[i, control_q] - & ( - x[i, control_q] - ^ x[i, target_q] - ^ z[i, control_q] - ^ ~z[i, target_q] - ) - ) - ) - x_cq = symplectic_matrix[i, control_q] - x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, nqubits + control_q] - z_tq = symplectic_matrix[i, nqubits + target_q] - symplectic_matrix[i, control_q] = x_tq - symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, nqubits + control_q] = z_tq - symplectic_matrix[i, nqubits + target_q] = z_cq - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-CNOT-H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & z[i, control_q]) - ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) - ^ ( - (z[i, control_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - & (x[i, target_q] ^ ~x[i, control_q]) - ) - ^ ( - (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) - & ( - x[i, target_q] - ^ z[i, target_q] - ^ x[i, control_q] - ^ ~z[i, control_q] - ) - ) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q]) - ) - ) - z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] - z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - tmp = symplectic_matrix[i, control_q] - symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] - symplectic_matrix[i, target_q] = tmp - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def CY(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> S-CNOT-SDG""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) - ^ ( - x[i, control_q] - & (x[i, target_q] ^ z[i, target_q]) - & (z[i, control_q] ^ ~x[i, target_q]) - ) - ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - ) - ) - x_target_q = x[i, control_q] ^ x[i, target_q] - z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, target_q] = x_target_q - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q - return symplectic_matrix - - @staticmethod - @jit.rawkernel() - def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - x = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), :nqubits] - z = symplectic_matrix[ - : -1 + (2 * nqubits + 2) * int(include_scratch), nqubits:-1 - ] - - x1, x2 = x[i, :], x[h, :] - z1, z2 = z[i, :], z[h, :] - tid = jit.blockIdx.h * jit.blockDim.h + jit.threadIdx.h - ntid = jit.gridDim.h * jit.blockDim.h - for i in range(tid, len(h), ntid): - exp = cp.zeros(nqubits, dtype=int64) - x1_eq_z1 = (x1[j] ^ z1[j]) == False - x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = x1[j] == False - x1_eq_1 = ~x1_eq_0 - ind2 = x1_eq_z1 & x1_eq_1 - ind3 = x1_eq_1 & x1_neq_z1 - ind4 = x1_eq_0 & x1_neq_z1 - exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) - exp[ind3] = z2[j, ind3].astype(uint64) * ( - 2 * x2[j, ind3].astype(uint64) - 1 - ) - exp[ind4] = x2[j, ind4].astype(uint64) * ( - 1 - 2 * z2[j, ind4].astype(uint64) - ) - - symplectic_matrix[h[j], -1] = ( - 2 * symplectic_matrix[h[j], -1] - + 2 * symplectic_matrix[i[j], -1] - + cp.sum(exp) - ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] - symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] - return symplectic_matrix From f82dcd4dd7766228c0c4ef55e360a01e5d05f7f5 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Wed, 27 Dec 2023 15:00:47 +0100 Subject: [PATCH 11/73] fix: minor import fix --- src/qibojit/backends/gpu.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 945f143b..b5f50474 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -67,8 +67,6 @@ def __init__(self): self.gates = {} from qibojit.custom_operators import raw_kernels - self.clifford_operations = clifford_operations_gpu - def kernel_loader(name, ktype): code = getattr(raw_kernels, name) code = code.replace("T", f"thrust::complex<{ktype}>") @@ -101,9 +99,7 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() - from qibojit.backends.clifford_gpu import CliffordOperations - - self.clifford_operations = CliffordOperations(self.np) + self.clifford_operations = clifford_operations_gpu def set_precision(self, precision): super().set_precision(precision) From 57399ab50b7d931756472da2c39fadb462729efc Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Thu, 4 Jan 2024 13:00:33 +0100 Subject: [PATCH 12/73] fix: fix cupy implementation of gates --- .../backends/clifford_operations_gpu.py | 482 +++++++++++------- 1 file changed, 299 insertions(+), 183 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index e07d8b1d..84370daf 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -4,302 +4,418 @@ from cupyx import jit from qibo.backends.clifford_operations import * +GRIDDIM, BLOCKDIM = 1024, 128 + @jit.rawkernel() -def H(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) +def apply_H(symplectic_matrix, q, nqubits): + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, q] & symplectic_matrix[i, qz] + ) tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = tmp + symplectic_matrix[i, q] = symplectic_matrix[i, qz] + symplectic_matrix[i, qz] = tmp + + +def H(symplectic_matrix, q, nqubits): + apply_H[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def CNOT(symplectic_matrix, control_q, target_q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( - x[i, target_q] ^ ~z[i, control_q] +def apply_CNOT(symplectic_matrix, control_q, target_q, nqubits): + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + cqz = nqubits + control_q + tqz = nqubits + target_q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, control_q] & symplectic_matrix[i, tqz] + ) & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, cqz]) + symplectic_matrix[i, target_q] = ( + symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q] + ) + symplectic_matrix[i, nqubits + control_q] = ( + symplectic_matrix[i, cqz] ^ symplectic_matrix[i, tqz] ) - symplectic_matrix[i, target_q] = x[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z[i, control_q] ^ z[i, target_q] + + +def CNOT(symplectic_matrix, control_q, target_q, nqubits): + apply_CNOT[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) return symplectic_matrix @jit.rawkernel() -def CZ(symplectic_matrix, control_q, target_q, nqubits): +def apply_CZ(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> H-CNOT-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] + cqz = nqubits + control_q + tqz = nqubits + target_q tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & x[i, target_q] & (z[i, target_q] ^ ~z[i, control_q])) - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, control_q])) + symplectic_matrix[i, -1] + ^ (symplectic_matrix[i, target_q] & symplectic_matrix[i, tqz]) + ^ ( + symplectic_matrix[i, control_q] + & symplectic_matrix[i, target_q] + & (symplectic_matrix[i, tqz] ^ ~symplectic_matrix[i, cqz]) + ) + ^ ( + symplectic_matrix[i, target_q] + & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q]) + ) ) - z_control_q = x[i, target_q] ^ z[i, control_q] - z_target_q = z[i, target_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q + z_control_q = symplectic_matrix[i, target_q] ^ symplectic_matrix[i, cqz] + z_target_q = symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q] + symplectic_matrix[i, cqz] = z_control_q + symplectic_matrix[i, tqz] = z_target_q + + +def CZ(symplectic_matrix, control_q, target_q, nqubits): + apply_CZ[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) return symplectic_matrix @jit.rawkernel() +def apply_S(symplectic_matrix, q, nqubits): + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, q] & symplectic_matrix[i, qz] + ) + symplectic_matrix[i, qz] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] + + def S(symplectic_matrix, q, nqubits): - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + apply_S[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def Z(symplectic_matrix, q, nqubits): +def apply_Z(symplectic_matrix, q, nqubits): """Decomposition --> S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ ( - (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + (symplectic_matrix[i, q] & symplectic_matrix[i, qz]) + ^ symplectic_matrix[i, q] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) ) + + +def Z(symplectic_matrix, q, nqubits): + apply_Z[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def X(symplectic_matrix, q, nqubits): +def apply_X(symplectic_matrix, q, nqubits): """Decomposition --> H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) + symplectic_matrix[i, -1] + ^ ( + symplectic_matrix[i, qz] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) + ^ (symplectic_matrix[i, qz] & symplectic_matrix[i, q]) ) + + +def X(symplectic_matrix, q, nqubits): + apply_X[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def Y(symplectic_matrix, q, nqubits): +def apply_Y(symplectic_matrix, q, nqubits): """Decomposition --> S-S-H-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) + rsymplectic_matrix[i, -1] + ^ ( + symplectic_matrix[i, qz] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) + ^ ( + symplectic_matrix[i, q] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) ) + + +def Y(symplectic_matrix, q, nqubits): + apply_Y[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def SX(symplectic_matrix, q, nqubits): +def apply_SX(symplectic_matrix, q, nqubits): """Decomposition --> H-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, qz] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) + symplectic_matrix[i, q] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] + + +def SX(symplectic_matrix, q, nqubits): + apply_SX[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def SDG(symplectic_matrix, q, nqubits): +def apply_SDG(symplectic_matrix, q, nqubits): """Decomposition --> S-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, q] + & (symplectic_matrix[i, qZ] ^ symplectic_matrix[i, q]) + ) + symplectic_matrix[i, qz] = symplectic_matrix[i, qZ] ^ symplectic_matrix[i, q] + + +def SDG(symplectic_matrix, q, nqubits): + apply_SDG[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def SXDG(symplectic_matrix, q, nqubits): +def apply_SXDG(symplectic_matrix, q, nqubits): """Decomposition --> H-S-S-S-H""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) - symplectic_matrix[i, q] = z[i, q] ^ x[i, q] + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, qz] & symplectic_matrix[i, q] + ) + symplectic_matrix[i, q] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] + + +def SXDG(symplectic_matrix, q, nqubits): + apply_SXDG[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def RY_pi(symplectic_matrix, q, nqubits): +def apply_RY_pi(symplectic_matrix, q, nqubits): """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, q] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) + zq = symplectic_matrix[i, qz] + symplectic_matrix[i, qz] = symplectic_matrix[i, q] symplectic_matrix[i, q] = zq + + +def RY_pi(symplectic_matrix, q, nqubits): + apply_RY_pi[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def RY_3pi_2(symplectic_matrix, q, nqubits): +def apply_RY_3pi_2(symplectic_matrix, q, nqubits): """Decomposition --> H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, q] - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) - zq = symplectic_matrix[i, nqubits + q] - symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x + qz = nqubits + q + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( + symplectic_matrix[i, qz] + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + ) + zq = symplectic_matrix[i, qz] + symplectic_matrix[i, qz] = symplectic_matrix[i, q] symplectic_matrix[i, q] = zq + + +def RY_3pi_2(symplectic_matrix, q, nqubits): + apply_RY_3pi_2[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) return symplectic_matrix @jit.rawkernel() -def SWAP(symplectic_matrix, control_q, target_q, nqubits): +def apply_SWAP(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> CNOT-CNOT-CNOT""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] + cqz = nqubits + control_q + tqz = nqubits + target_q tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): - symplectic_matrix[:-1, -1] = ( - r[i] - ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): + symplectic_matrix[i, -1] = ( + symplectic_matrix[i, -1] ^ ( - (x[i, target_q] ^ x[i, control_q]) - & (z[i, target_q] ^ z[i, control_q]) - & (z[i, target_q] ^ ~x[i, control_q]) + symplectic_matrix[i, control_q] + & symplectic_matrix[i, tqz] + & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, cqz]) ) ^ ( - x[i, target_q] - & z[i, control_q] - & (x[i, control_q] ^ x[i, target_q] ^ z[i, control_q] ^ ~z[i, target_q]) + (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q]) + & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, cqz]) + & (symplectic_matrix[i, tqz] ^ ~symplectic_matrix[i, control_q]) + ) + ^ ( + symplectic_matrix[i, target_q] + & symplectic_matrix[i, cqz] + & ( + symplectic_matrix[i, control_q] + ^ symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, cqz] + ^ ~symplectic_matrix[i, tqz] + ) ) ) x_cq = symplectic_matrix[i, control_q] x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, nqubits + control_q] - z_tq = symplectic_matrix[i, nqubits + target_q] + z_cq = symplectic_matrix[i, cqz] + z_tq = symplectic_matrix[i, tqz] symplectic_matrix[i, control_q] = x_tq symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, nqubits + control_q] = z_tq - symplectic_matrix[i, nqubits + target_q] = z_cq + symplectic_matrix[i, cqz] = z_tq + symplectic_matrix[i, tqz] = z_cq + + +def SWAP(symplectic_matrix, control_q, target_q, nqubits): + apply_SWAP[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) return symplectic_matrix @jit.rawkernel() -def iSWAP(symplectic_matrix, control_q, target_q, nqubits): +def apply_iSWAP(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> H-CNOT-CNOT-H-S-S""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] + cqz = nqubits + control_q + tqz = nqubits + target_q tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & z[i, target_q]) - ^ (x[i, control_q] & z[i, control_q]) - ^ (x[i, control_q] & (z[i, control_q] ^ x[i, control_q])) + symplectic_matrix[i, -1] + ^ (symplectic_matrix[i, target_q] & symplectic_matrix[i, tqz]) + ^ (symplectic_matrix[i, control_q] & symplectic_matrix[i, cqz]) + ^ ( + symplectic_matrix[i, control_q] + & (symplectic_matrix[i, cqz] ^ symplectic_matrix[i, control_q]) + ) + ^ ( + (symplectic_matrix[i, cqz] ^ symplectic_matrix[i, control_q]) + & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) + & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, control_q]) + ) ^ ( - (z[i, control_q] ^ x[i, control_q]) - & (z[i, target_q] ^ x[i, target_q]) - & (x[i, target_q] ^ ~x[i, control_q]) + ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, cqz] + ^ symplectic_matrix[i, control_q] + ) + & ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, tqz] + ^ symplectic_matrix[i, control_q] + ) + & ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, tqz] + ^ symplectic_matrix[i, control_q] + ^ ~symplectic_matrix[i, cqz] + ) ) ^ ( - (x[i, target_q] ^ z[i, control_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q]) - & (x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] ^ ~z[i, control_q]) + symplectic_matrix[i, control_q] + & ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, control_q] + ^ symplectic_matrix[i, cqz] + ) ) - ^ (x[i, control_q] & (x[i, target_q] ^ x[i, control_q] ^ z[i, control_q])) ) - z_control_q = x[i, target_q] ^ z[i, target_q] ^ x[i, control_q] - z_target_q = x[i, target_q] ^ z[i, control_q] ^ x[i, control_q] - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q + z_control_q = ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, tqz] + ^ symplectic_matrix[i, control_q] + ) + z_target_q = ( + symplectic_matrix[i, target_q] + ^ symplectic_matrix[i, cqz] + ^ symplectic_matrix[i, control_q] + ) + symplectic_matrix[i, cqz] = z_control_q + symplectic_matrix[i, tqz] = z_target_q tmp = symplectic_matrix[i, control_q] symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] symplectic_matrix[i, target_q] = tmp + + +def iSWAP(symplectic_matrix, control_q, target_q, nqubits): + apply_iSWAP[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) return symplectic_matrix @jit.rawkernel() -def CY(symplectic_matrix, control_q, target_q, nqubits): +def apply_CY(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> S-CNOT-SDG""" - r = symplectic_matrix[:-1, -1] - x = symplectic_matrix[:-1, :nqubits] - z = symplectic_matrix[:-1, nqubits:-1] - xq = x[:, control_q] + cqz = nqubits + control_q + tqz = nqubits + target_q tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq ntid = jit.gridDim.xq * jit.blockDim.xq - for i in range(tid, xq.shape[0], ntid): + for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - r[i] - ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) + symplectic_matrix[i, -1] + ^ ( + symplectic_matrix[i, target_q] + & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) + ) + ^ ( + symplectic_matrix[i, control_q] + & (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, tqz]) + & (symplectic_matrix[i, cqz] ^ ~symplectic_matrix[i, target_q]) + ) ^ ( - x[i, control_q] - & (x[i, target_q] ^ z[i, target_q]) - & (z[i, control_q] ^ ~x[i, target_q]) + (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q]) + & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) ) - ^ ((x[i, target_q] ^ x[i, control_q]) & (z[i, target_q] ^ x[i, target_q])) ) - x_target_q = x[i, control_q] ^ x[i, target_q] - z_control_q = z[i, control_q] ^ z[i, target_q] ^ x[i, target_q] - z_target_q = z[i, target_q] ^ x[i, control_q] + x_target_q = symplectic_matrix[i, control_q] ^ symplectic_matrix[i, target_q] + z_control_q = ( + symplectic_matrix[i, cqz] + ^ symplectic_matrix[i, tqz] + ^ symplectic_matrix[i, target_q] + ) + z_target_q = symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q] symplectic_matrix[i, target_q] = x_target_q - symplectic_matrix[i, nqubits + control_q] = z_control_q - symplectic_matrix[i, nqubits + target_q] = z_target_q + symplectic_matrix[i, cqz] = z_control_q + symplectic_matrix[i, tqz] = z_target_q + + +def CY(symplectic_matrix, control_q, target_q, nqubits): + apply_CY[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) return symplectic_matrix From 6c0e59e52f577186a459954ec5c7e9e5e8b35953 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Thu, 4 Jan 2024 13:23:19 +0100 Subject: [PATCH 13/73] fix: fixed some typos --- src/qibojit/backends/clifford_operations_gpu.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 84370daf..9c87ca92 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -54,8 +54,8 @@ def apply_CZ(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> H-CNOT-H""" cqz = nqubits + control_q tqz = nqubits + target_q - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( symplectic_matrix[i, -1] @@ -147,7 +147,7 @@ def apply_Y(symplectic_matrix, q, nqubits): qz = nqubits + q for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( - rsymplectic_matrix[i, -1] + symplectic_matrix[i, -1] ^ ( symplectic_matrix[i, qz] & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) From 0bcc49bdcdc8b4a6925910b01179479e1a262d9c Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Thu, 4 Jan 2024 16:36:54 +0100 Subject: [PATCH 14/73] fix: fixed parallelization of _rowsum in cupy --- .../backends/clifford_operations_gpu.py | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 9c87ca92..a25eda6b 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -420,34 +420,48 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): @jit.rawkernel() -def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - x = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), :nqubits] - z = symplectic_matrix[: -1 + (2 * nqubits + 2) * int(include_scratch), nqubits:-1] - - x1, x2 = x[i, :], x[h, :] - z1, z2 = z[i, :], z[h, :] - tid = jit.blockIdx.h * jit.blockDim.h + jit.threadIdx.h - ntid = jit.gridDim.h * jit.blockDim.h - for j in range(tid, len(h), ntid): - exp = cp.zeros(nqubits, dtype=int64) - x1_eq_z1 = (x1[j] ^ z1[j]) == False - x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = x1[j] == False - x1_eq_1 = ~x1_eq_0 - ind2 = x1_eq_z1 & x1_eq_1 - ind3 = x1_eq_1 & x1_neq_z1 - ind4 = x1_eq_0 & x1_neq_z1 - exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) - exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) - exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) - +def _apply_rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + tid_x = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + tid_y = jit.blockIdx.y * jit.blockDim.y + jit.threadIdx.y + ntid_x = jit.gridDim.x * jit.blockDim.x + ntid_y = jit.gridDim.x * jit.blockDim.y + for j in range(tid_y, len(h), ntid_y): + exp = 0 + for k in range(tid_x, nqubits, ntid_x): + jz = nqubits + j + x1_eq_z1 = symplectic_matrix[i[k], j] == symplectic_matrix[i[k], jz] + x1_eq_0 = symplectic_matrix[i[k], j] == False + if x1_eq_z1: + if not x1_eq_0: + exp += int(symplectic_matrix[h[k], jz]) - int( + symplectic_matrix[h[k], j] + ) + else: + if x1_eq_0: + exp += int(symplectic_matrix[h[k], j]) * ( + 1 - 2 * int(symplectic_matrix[h[k], jz]) + ) + else: + exp += int(symplectic_matrix[h[k], jz]) * ( + 2 * int(symplectic_matrix[h[k], j]) - 1 + ) symplectic_matrix[h[j], -1] = ( - 2 * symplectic_matrix[h[j], -1] - + 2 * symplectic_matrix[i[j], -1] - + cp.sum(exp) + 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + exp ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] - symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + for k in range(tid_x, nqubits, ntid_y): + kz = nqubits + k + symplectic_matrix[h[j], k] = ( + symplectic_matrix[i[j], k] ^ symplectic_matrix[h[j], k] + ) + symplectic_matrix[h[j], nqubits + k] = ( + symplectic_matrix[i[j], kz] ^ symplectic_matrix[h[j], kz] + ) + + +def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + _apply_rowsum[GRIDDIM, (BLOCKDIM, BLOCKDIM)]( + symplectic_matrix, h, i, nqubits, include_scratch + ) return symplectic_matrix @@ -486,6 +500,6 @@ def _determined_outcome(state, q, nqubits): "iSWAP", "CY", "_rowsum", - "_determined_outcome", + # "_determined_outcome", ]: setattr(co, f, locals()[f]) From 757904e60ab9052fd0df605dd3e431e73ae9d0c7 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Fri, 5 Jan 2024 10:51:38 +0100 Subject: [PATCH 15/73] fix: small fix to _rowsum --- src/qibojit/backends/clifford_operations_gpu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index a25eda6b..bf97948e 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -424,7 +424,7 @@ def _apply_rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = Fals tid_x = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x tid_y = jit.blockIdx.y * jit.blockDim.y + jit.threadIdx.y ntid_x = jit.gridDim.x * jit.blockDim.x - ntid_y = jit.gridDim.x * jit.blockDim.y + ntid_y = jit.gridDim.y * jit.blockDim.y for j in range(tid_y, len(h), ntid_y): exp = 0 for k in range(tid_x, nqubits, ntid_x): @@ -459,7 +459,7 @@ def _apply_rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = Fals def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - _apply_rowsum[GRIDDIM, (BLOCKDIM, BLOCKDIM)]( + _apply_rowsum[(GRIDDIM, GRIDDIM), (BLOCKDIM, BLOCKDIM)]( symplectic_matrix, h, i, nqubits, include_scratch ) return symplectic_matrix From aaf19ff7798f6e22c81da86edcbcefa3f38cd932 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Fri, 5 Jan 2024 13:19:10 +0100 Subject: [PATCH 16/73] feat: moved clifford operations monkey-patching to backends --- .../backends/clifford_operations_cpu.py | 27 +-------- .../backends/clifford_operations_gpu.py | 59 +++++++++++-------- src/qibojit/backends/cpu.py | 9 ++- src/qibojit/backends/gpu.py | 9 ++- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index ba2b5c7e..4472ff9b 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -1,7 +1,5 @@ import numpy as np -import qibo.backends.clifford_operations as co from numba import njit, prange, uint64 -from qibo.backends.clifford_operations import * @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) @@ -291,6 +289,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): return symplectic_matrix +""" @njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) def _determined_outcome(state, q, nqubits): state[-1, :] = False @@ -304,26 +303,4 @@ def _determined_outcome(state, q, nqubits): include_scratch=True, ) return state, uint64(state[-1, -1]) - - -# monkey-patching the original qibo clifford operations -for f in [ - "H", - "CNOT", - "CZ", - "S", - "Z", - "X", - "Y", - "SX", - "SDG", - "SXDG", - "RY_pi", - "RY_3pi_2", - "SWAP", - "iSWAP", - "CY", - "_rowsum", - # "_determined_outcome", -]: - setattr(co, f, locals()[f]) +""" diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index bf97948e..2196d9e7 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -1,8 +1,6 @@ import cupy as cp import numpy as np -import qibo.backends.clifford_operations as co from cupyx import jit -from qibo.backends.clifford_operations import * GRIDDIM, BLOCKDIM = 1024, 128 @@ -420,7 +418,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): @jit.rawkernel() -def _apply_rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): +def _apply_rowsum(symplectic_matrix, h, i, nqubits): tid_x = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x tid_y = jit.blockIdx.y * jit.blockDim.y + jit.threadIdx.y ntid_x = jit.gridDim.x * jit.blockDim.x @@ -459,12 +457,32 @@ def _apply_rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = Fals def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): + GRIDDIM, BLOCKDIM = 32, 32 _apply_rowsum[(GRIDDIM, GRIDDIM), (BLOCKDIM, BLOCKDIM)]( - symplectic_matrix, h, i, nqubits, include_scratch + symplectic_matrix, h, i, nqubits ) return symplectic_matrix +def _random_outcome(state, p, q, nqubits): + h = cp.array([i for i in state[:-1, q].nonzero()[0] if i != p], dtype=cp.uint) + if h.shape[0] > 0: + state = _rowsum( + state, + h, + p * cp.ones(h.shape[0], dtype=np.uint), + nqubits, + False, + ) + state[p - nqubits, :] = state[p, :] + outcome = cp.random.randint(2, size=1).item() + state[p, :] = 0 + state[p, -1] = outcome + state[p, nqubits + q] = 1 + return state, outcome + + +""" @jit.rawkernel() def _determined_outcome(state, q, nqubits): state[-1, :] = False @@ -480,26 +498,17 @@ def _determined_outcome(state, q, nqubits): include_scratch=True, ) return state, uint64(state[-1, -1]) +""" -# monkey-patching the original qibo clifford operations -for f in [ - "H", - "CNOT", - "CZ", - "S", - "Z", - "X", - "Y", - "SX", - "SDG", - "SXDG", - "RY_pi", - "RY_3pi_2", - "SWAP", - "iSWAP", - "CY", - "_rowsum", - # "_determined_outcome", -]: - setattr(co, f, locals()[f]) +def _determined_outcome(state, q, nqubits): + state[-1, :] = False + for i in state[:nqubits, q].nonzero()[0]: + state = _rowsum( + state, + cp.array([2 * nqubits], dtype=np.uint), + cp.array([i + nqubits], dtype=np.uint), + nqubits, + include_scratch=True, + ) + return state, cp.uint(state[-1, -1]) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 916ef82c..85736066 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,5 +1,6 @@ import numpy as np from numba import njit +from qibo.backends import clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log from qibo.gates.abstract import ParametrizedGate @@ -71,7 +72,13 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - self.clifford_operations = clifford_operations_cpu + self.clifford_operations = clifford_operations + for method in dir(clifford_operations_cpu): + setattr( + self.clifford_operations, + method, + getattr(clifford_operations_cpu, method), + ) def set_precision(self, precision): if precision != self.precision: diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index b5f50474..e25f79c0 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -1,4 +1,5 @@ import numpy as np +from qibo.backends import clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log, raise_error @@ -99,7 +100,13 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() - self.clifford_operations = clifford_operations_gpu + self.clifford_operations = clifford_operations + for method in dir(clifford_operations_gpu): + setattr( + self.clifford_operations, + method, + getattr(clifford_operations_gpu, method), + ) def set_precision(self, precision): super().set_precision(precision) From bb7cc10e02b2f362cb10627bf417b58421ee643a Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Tue, 9 Jan 2024 10:33:00 +0400 Subject: [PATCH 17/73] fix: fixed patching problem --- src/qibojit/backends/cpu.py | 6 +++++- src/qibojit/backends/gpu.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 85736066..ed0276a9 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,3 +1,5 @@ +from importlib.util import find_spec, module_from_spec + import numpy as np from numba import njit from qibo.backends import clifford_operations @@ -72,7 +74,9 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - self.clifford_operations = clifford_operations + spec = find_spec("qibo.backends.clifford_operations") + self.clifford_operations = module_from_spec(spec) + spec.loader.exec_module(self.clifford_operations) for method in dir(clifford_operations_cpu): setattr( self.clifford_operations, diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index e25f79c0..7687d59e 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -1,3 +1,5 @@ +from importlib.util import find_spec, module_from_spec + import numpy as np from qibo.backends import clifford_operations from qibo.backends.numpy import NumpyBackend @@ -100,7 +102,9 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() - self.clifford_operations = clifford_operations + spec = find_spec("qibo.backends.clifford_operations") + self.clifford_operations = module_from_spec(spec) + spec.loader.exec_module(self.clifford_operations) for method in dir(clifford_operations_gpu): setattr( self.clifford_operations, From ad5f0b8f04951df4ce94a8c371dc8a452d31f2c8 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 10 Jan 2024 13:01:16 +0400 Subject: [PATCH 18/73] feat: removed include_scratch + updated random_outcome --- .../backends/clifford_operations_cpu.py | 30 ++++++++----------- .../backends/clifford_operations_gpu.py | 20 ++++++------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 4472ff9b..24b0225d 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -29,7 +29,6 @@ def CNOT(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -@staticmethod @njit("b1[:,:](b1[:,:], u8, u8, u8)", parallel=True, cache=True) def CZ(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> H-CNOT-H""" @@ -50,7 +49,6 @@ def CZ(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -@staticmethod @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def S(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] @@ -257,39 +255,35 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True) -def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - x = symplectic_matrix[: -1 + (2 * nqubits + 2) * uint64(include_scratch), :nqubits] - z = symplectic_matrix[ - : -1 + (2 * nqubits + 2) * uint64(include_scratch), nqubits:-1 - ] - - x1, x2 = x[i, :], x[h, :] - z1, z2 = z[i, :], z[h, :] +@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8)", parallel=True, cache=True) +def _rowsum(symplectic_matrix, h, i, nqubits): + xi, xh = symplectic_matrix[i, :nqubits], symplectic_matrix[h, :nqubits] + zi, zh = symplectic_matrix[i, nqubits:-1], symplectic_matrix[h, nqubits:-1] for j in prange(len(h)): exp = np.zeros(nqubits, dtype=uint64) - x1_eq_z1 = (x1[j] ^ z1[j]) == False + x1_eq_z1 = (xi[j] ^ zi[j]) == False x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = x1[j] == False + x1_eq_0 = xi[j] == False x1_eq_1 = ~x1_eq_0 ind2 = x1_eq_z1 & x1_eq_1 ind3 = x1_eq_1 & x1_neq_z1 ind4 = x1_eq_0 & x1_neq_z1 - exp[ind2] = z2[j, ind2].astype(uint64) - x2[j, ind2].astype(uint64) - exp[ind3] = z2[j, ind3].astype(uint64) * (2 * x2[j, ind3].astype(uint64) - 1) - exp[ind4] = x2[j, ind4].astype(uint64) * (1 - 2 * z2[j, ind4].astype(uint64)) + exp[ind2] = zh[j, ind2].astype(uint64) - xh[j, ind2].astype(uint64) + exp[ind3] = zh[j, ind3].astype(uint64) * (2 * xh[j, ind3].astype(uint64) - 1) + exp[ind4] = xh[j, ind4].astype(uint64) * (1 - 2 * zh[j, ind4].astype(uint64)) symplectic_matrix[h[j], -1] = ( 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + np.sum(exp) ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = x[i[j], :] ^ x[h[j], :] - symplectic_matrix[h[j], nqubits:-1] = z[i[j], :] ^ z[h[j], :] + symplectic_matrix[h[j], :nqubits] = xi[j] ^ xh[j] + symplectic_matrix[h[j], nqubits:-1] = zi[j] ^ zh[j] return symplectic_matrix """ +# Not parallelizable? @njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) def _determined_outcome(state, q, nqubits): state[-1, :] = False diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 2196d9e7..1d3a9ced 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -3,6 +3,7 @@ from cupyx import jit GRIDDIM, BLOCKDIM = 1024, 128 +BLOCKDIM_2D = (32, 32) @jit.rawkernel() @@ -424,7 +425,8 @@ def _apply_rowsum(symplectic_matrix, h, i, nqubits): ntid_x = jit.gridDim.x * jit.blockDim.x ntid_y = jit.gridDim.y * jit.blockDim.y for j in range(tid_y, len(h), ntid_y): - exp = 0 + if jit.blockIdx.x == 0: + exp = 0 for k in range(tid_x, nqubits, ntid_x): jz = nqubits + j x1_eq_z1 = symplectic_matrix[i[k], j] == symplectic_matrix[i[k], jz] @@ -456,26 +458,25 @@ def _apply_rowsum(symplectic_matrix, h, i, nqubits): ) -def _rowsum(symplectic_matrix, h, i, nqubits, include_scratch: bool = False): - GRIDDIM, BLOCKDIM = 32, 32 - _apply_rowsum[(GRIDDIM, GRIDDIM), (BLOCKDIM, BLOCKDIM)]( - symplectic_matrix, h, i, nqubits - ) +def _rowsum(symplectic_matrix, h, i, nqubits): + _apply_rowsum[(GRIDDIM, GRIDDIM), BLOCKDIM_2D](symplectic_matrix, h, i, nqubits) return symplectic_matrix def _random_outcome(state, p, q, nqubits): - h = cp.array([i for i in state[:-1, q].nonzero()[0] if i != p], dtype=cp.uint) + p = p[0] + nqubits + h = state[:-1, q].copy() + h[p] = False + h = h.nonzero()[0] if h.shape[0] > 0: state = _rowsum( state, h, p * cp.ones(h.shape[0], dtype=np.uint), nqubits, - False, ) state[p - nqubits, :] = state[p, :] - outcome = cp.random.randint(2, size=1).item() + outcome = cp.random.randint(2, size=1) state[p, :] = 0 state[p, -1] = outcome state[p, nqubits + q] = 1 @@ -509,6 +510,5 @@ def _determined_outcome(state, q, nqubits): cp.array([2 * nqubits], dtype=np.uint), cp.array([i + nqubits], dtype=np.uint), nqubits, - include_scratch=True, ) return state, cp.uint(state[-1, -1]) From d22904820c7dac9557f290522d7c98fced012483 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 10 Jan 2024 13:40:41 +0400 Subject: [PATCH 19/73] fix: fixed some typos --- src/qibojit/backends/clifford_operations_gpu.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 1d3a9ced..94a28e6c 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -191,9 +191,9 @@ def apply_SDG(symplectic_matrix, q, nqubits): for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( symplectic_matrix[i, q] - & (symplectic_matrix[i, qZ] ^ symplectic_matrix[i, q]) + & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) ) - symplectic_matrix[i, qz] = symplectic_matrix[i, qZ] ^ symplectic_matrix[i, q] + symplectic_matrix[i, qz] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] def SDG(symplectic_matrix, q, nqubits): @@ -266,8 +266,8 @@ def apply_SWAP(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> CNOT-CNOT-CNOT""" cqz = nqubits + control_q tqz = nqubits + target_q - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( symplectic_matrix[i, -1] @@ -312,8 +312,8 @@ def apply_iSWAP(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> H-CNOT-CNOT-H-S-S""" cqz = nqubits + control_q tqz = nqubits + target_q - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( symplectic_matrix[i, -1] @@ -382,8 +382,8 @@ def apply_CY(symplectic_matrix, control_q, target_q, nqubits): """Decomposition --> S-CNOT-SDG""" cqz = nqubits + control_q tqz = nqubits + target_q - tid = jit.blockIdx.xq * jit.blockDim.xq + jit.threadIdx.xq - ntid = jit.gridDim.xq * jit.blockDim.xq + tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x + ntid = jit.gridDim.x * jit.blockDim.x for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): symplectic_matrix[i, -1] = ( symplectic_matrix[i, -1] From 9acd8861fa3f8c053c7709931efd7035137a61ad Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 12 Jan 2024 16:15:35 +0400 Subject: [PATCH 20/73] feat: implemented cupy kernels in CUDA + matrix linearization --- .../backends/clifford_operations_gpu.py | 675 +++++++++++------- src/qibojit/backends/gpu.py | 7 + 2 files changed, 415 insertions(+), 267 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 94a28e6c..57d06c93 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -5,217 +5,307 @@ GRIDDIM, BLOCKDIM = 1024, 128 BLOCKDIM_2D = (32, 32) +apply_one_qubit_kernel = """ +extern "C" +__global__ void apply_{}(bool* symplectic_matrix, const int q, const int nqubits, conts int qz, const int dim) {{ + _apply_{}(symplectic_matrix, q, nqubits, qz, dim); +}} +""" -@jit.rawkernel() -def apply_H(symplectic_matrix, q, nqubits): - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x +apply_two_qubits_kernel = """ +extern "C" +__global__ void apply_{}(bool* symplectic_matrix, const int control_q, const int target_q, const int nqubits, const int cqz, const int tqz, const int dim) {{ + _apply_{}(symplectic_matrix, control_q, target_q, nqubits, cqz, tqz, dim); +}} +""" + + +def one_qubit_kernel_launcher(kernel, args): qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, q] & symplectic_matrix[i, qz] - ) - tmp = symplectic_matrix[i, q] - symplectic_matrix[i, q] = symplectic_matrix[i, qz] - symplectic_matrix[i, qz] = tmp + dim = symplectic_matrix.shape[0] + return kernel((GRIDDIM,), (BLOCKDIM,), (*args, qz, dim)) + + +def two_qubits_kernel_launcher(kernel, args): + cqz = nqubits + control_q + tqz = nqubits + target_q + dim = symplectic_matrix.shape[0] + return kernel((GRIDDIM,), (BLOCKDIM,), (*args, cqz, tqz, dim)) + + +apply_H = """ +__device__ void _apply_H(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ (symplectic_matrix[i * dim + q] & symplectic_matrix[i * dim + qz]); + const bool tmp = symplectic_matrix[i * dim + q]; + symplectic_matrix[i * dim + q] = symplectic_matrix[i * dim + qz]; + symplectic_matrix[i * dim + qz] = tmp; + }; +} +""" + apply_one_qubit_kernel.format( + "H", "H" +) + +apply_H = cp.RawKernel(apply_H, "apply_H", options=("--std=c++11",)) def H(symplectic_matrix, q, nqubits): - apply_H[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_H, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_CNOT(symplectic_matrix, control_q, target_q, nqubits): - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - cqz = nqubits + control_q - tqz = nqubits + target_q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, control_q] & symplectic_matrix[i, tqz] - ) & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, cqz]) - symplectic_matrix[i, target_q] = ( - symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q] - ) - symplectic_matrix[i, nqubits + control_q] = ( - symplectic_matrix[i, cqz] ^ symplectic_matrix[i, tqz] - ) +apply_CNOT = """ +__device__ void _apply_CNOT(bool* symplectic_matrix, const int& control_q, const int& target_q, const int& nqubits, const int& cqz, const int& tqz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + control_q] & symplectic_matrix[i * dim + tqz] + ) & (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + cqz] ^ 1); + symplectic_matrix[i * dim + target_q] = ( + symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + control_q] + ); + symplectic_matrix[i * dim + cqz] = ( + symplectic_matrix[i * dim + cqz] ^ symplectic_matrix[i * dim + tqz] + ); + }; +} +""" + apply_two_qubits_kernel.format( + "CNOT", "CNOT" +) + +apply_CNOT = cp.RawKernel(apply_CNOT, "apply_CNOT", options=("--std=c++11",)) def CNOT(symplectic_matrix, control_q, target_q, nqubits): - apply_CNOT[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) + two_qubits_kernel_launcher( + apply_CNOT, symplectic_matrix, control_q, target_q, nqubits + ) return symplectic_matrix -@jit.rawkernel() -def apply_CZ(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-H""" - cqz = nqubits + control_q - tqz = nqubits + target_q - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] - ^ (symplectic_matrix[i, target_q] & symplectic_matrix[i, tqz]) +apply_CZ = """ +__device__ void _apply_CZ(bool* symplectic_matrix, const int& control_q, const int& target_q, const int& nqubits, const int& cqz, const int& tqz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] + ^ (symplectic_matrix[i * dim + target_q] & symplectic_matrix[i * dim + tqz]) ^ ( - symplectic_matrix[i, control_q] - & symplectic_matrix[i, target_q] - & (symplectic_matrix[i, tqz] ^ ~symplectic_matrix[i, cqz]) + symplectic_matrix[i * dim + control_q] + & symplectic_matrix[i * dim + target_q] + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + cqz]) ^ 1 ) ^ ( - symplectic_matrix[i, target_q] - & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q]) + symplectic_matrix[i * dim + target_q] + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + control_q]) ) - ) - z_control_q = symplectic_matrix[i, target_q] ^ symplectic_matrix[i, cqz] - z_target_q = symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q] - symplectic_matrix[i, cqz] = z_control_q - symplectic_matrix[i, tqz] = z_target_q + ); + const bool z_control_q = symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + cqz]; + const bool z_target_q = symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + control_q]; + symplectic_matrix[i * dim + cqz] = z_control_q; + symplectic_matrix[i * dim + tqz] = z_target_q; + }; +} +""" + apply_two_qubits_kernel.format( + "CZ", "CZ" +) + +apply_CZ = cp.RawKernel(apply_CZ, "apply_CZ", options=("--std=c++11",)) def CZ(symplectic_matrix, control_q, target_q, nqubits): - apply_CZ[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) + two_qubits_kernel_launcher( + apply_CZ, symplectic_matrix, control_q, target_q, nqubits + ) return symplectic_matrix -@jit.rawkernel() -def apply_S(symplectic_matrix, q, nqubits): - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, q] & symplectic_matrix[i, qz] - ) - symplectic_matrix[i, qz] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] +apply_S = """ +__device__ void _apply_S(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + q] & symplectic_matrix[i * dim + qz] + ); + symplectic_matrix[i * dim + qz] = symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]; + }; +} +""" + apply_one_qubit_kernel.format( + "S", "S" +) + +apply_S = cp.RawKernel(apply_S, "apply_S", options=("--std=c++11",)) def S(symplectic_matrix, q, nqubits): - apply_S[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_S, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_Z(symplectic_matrix, q, nqubits): - """Decomposition --> S-S""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - (symplectic_matrix[i, q] & symplectic_matrix[i, qz]) - ^ symplectic_matrix[i, q] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) - ) +apply_Z = """ +__device__ void _apply_Z(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + (symplectic_matrix[i * dim + q] & symplectic_matrix[i * dim + qz]) + ^ symplectic_matrix[i * dim + q] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) + ); + }; +} +""" + apply_one_qubit_kernel.format( + "Z", "Z" +) + +apply_Z = cp.RawKernel(apply_Z, "apply_Z", options=("--std=c++11",)) def Z(symplectic_matrix, q, nqubits): - apply_Z[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_Z, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_X(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-H""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] +apply_X = """ +__device__ void _apply_X(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] ^ ( - symplectic_matrix[i, qz] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + symplectic_matrix[i * dim + qz] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) ) - ^ (symplectic_matrix[i, qz] & symplectic_matrix[i, q]) - ) + ^ (symplectic_matrix[i * dim + qz] & symplectic_matrix[i * dim + q]) + ); + }; +} +""" + apply_one_qubit_kernel.format( + "X", "X" +) + +apply_X = cp.RawKernel(apply_X, "apply_X", options=("--std=c++11",)) def X(symplectic_matrix, q, nqubits): - apply_X[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_X, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_Y(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-H-S-S-H""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] +apply_Y = """ +__device__ void _apply_Y(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] ^ ( - symplectic_matrix[i, qz] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + symplectic_matrix[i * dim + qz] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) ) ^ ( - symplectic_matrix[i, q] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) + symplectic_matrix[i * dim + q] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) ) - ) + ); + }; +} +""" + apply_one_qubit_kernel.format( + "Y", "Y" +) + +apply_Y = cp.RawKernel(apply_Y, "apply_Y", options=("--std=c++11",)) def Y(symplectic_matrix, q, nqubits): - apply_Y[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_Y, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_SX(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-H""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, qz] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) - ) - symplectic_matrix[i, q] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] +apply_SX = """ +__device__ void _apply_SX(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + qz] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) + ); + symplectic_matrix[i * dim + q] = symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]; + }; +} +""" + apply_one_qubit_kernel.format( + "SX", "SX" +) + +apply_SX = cp.RawKernel(apply_SX, "apply_SX", options=("--std=c++11",)) def SX(symplectic_matrix, q, nqubits): - apply_SX[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_SX, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_SDG(symplectic_matrix, q, nqubits): - """Decomposition --> S-S-S""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, q] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) - ) - symplectic_matrix[i, qz] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] +apply_SDG = """ +__device__ void _apply_SDG(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + q] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) + ); + symplectic_matrix[i * dim + qz] = symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]; + }; +} +""" + apply_one_qubit_kernel.format( + "SDG", "SDG" +) + +apply_SDG = cp.RawKernel(apply_SDG, "apply_SDG", options=("--std=c++11",)) def SDG(symplectic_matrix, q, nqubits): - apply_SDG[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_SDG, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_SXDG(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S-S-H""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, qz] & symplectic_matrix[i, q] - ) - symplectic_matrix[i, q] = symplectic_matrix[i, qz] ^ symplectic_matrix[i, q] +apply_SXDG = """ +__device__ void _apply_SXDG(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + qz] & symplectic_matrix[i * dim + q] + ); + symplectic_matrix[i * dim + q] = symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]; + }; +} +""" + apply_one_qubit_kernel.format( + "SXDG", "SXDG" +) + +apply_SXDG = cp.RawKernel(apply_SXDG, "apply_SXDG", options=("--std=c++11",)) def SXDG(symplectic_matrix, q, nqubits): - apply_SXDG[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_SXDG, symplectic_matrix, q, nqubits) return symplectic_matrix @@ -235,186 +325,237 @@ def apply_RY_pi(symplectic_matrix, q, nqubits): symplectic_matrix[i, q] = zq +apply_RY_pi = """ +__device__ void _apply_RY_pi(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + q] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) + ); + const bool zq = symplectic_matrix[i * dim + qz]; + symplectic_matrix[i * dim + qz] = symplectic_matrix[i * dim + q]; + symplectic_matrix[i * dim + q] = zq; + }; +} +""" + apply_one_qubit_kernel.format( + "RY_pi", "RY_pi" +) + +apply_RY_pi = cp.RawKernel(apply_RY_pi, "apply_RY_pi", options=("--std=c++11",)) + + def RY_pi(symplectic_matrix, q, nqubits): - apply_RY_pi[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_RY_pi, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_RY_3pi_2(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, qz] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) - ) - zq = symplectic_matrix[i, qz] - symplectic_matrix[i, qz] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq +apply_RY_3pi_2 = """ +__device__ void _apply_RY_3pi_2(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = symplectic_matrix[i * dim + last] ^ ( + symplectic_matrix[i * dim + qz] + & (symplectic_matrix[i * dim + qz] ^ symplectic_matrix[i * dim + q]) + ); + const bool zq = symplectic_matrix[i * dim + qz]; + symplectic_matrix[i * dim + qz] = symplectic_matrix[i * dim + q]; + symplectic_matrix[i * dim + q] = zq; + }; +} +""" + apply_one_qubit_kernel.format( + "RY_3pi_2", "RY_3pi_2" +) + +apply_RY_3pi_2 = cp.RawKernel( + apply_RY_3pi_2, "apply_RY_3pi_2", options=("--std=c++11",) +) def RY_3pi_2(symplectic_matrix, q, nqubits): - apply_RY_3pi_2[GRIDDIM, BLOCKDIM](symplectic_matrix, q, nqubits) + one_qubit_kernel_launcher(apply_RY_3pi_2, symplectic_matrix, q, nqubits) return symplectic_matrix -@jit.rawkernel() -def apply_SWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> CNOT-CNOT-CNOT""" - cqz = nqubits + control_q - tqz = nqubits + target_q - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] +apply_SWAP = """ +__device__ void _apply_SWAP(bool* symplectic_matrix, const int& control_q, const int& target_q, const int& nqubits, const int& cqz, const int& tqz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] ^ ( - symplectic_matrix[i, control_q] - & symplectic_matrix[i, tqz] - & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, cqz]) + symplectic_matrix[i * dim + control_q] + & symplectic_matrix[i * dim + tqz] + & (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + cqz] ^ 1) ) ^ ( - (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q]) - & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, cqz]) - & (symplectic_matrix[i, tqz] ^ ~symplectic_matrix[i, control_q]) + (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + control_q]) + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + cqz]) + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + control_q] ^ 1) ) ^ ( - symplectic_matrix[i, target_q] - & symplectic_matrix[i, cqz] + symplectic_matrix[i * dim + target_q] + & symplectic_matrix[i * dim + cqz] & ( - symplectic_matrix[i, control_q] - ^ symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, cqz] - ^ ~symplectic_matrix[i, tqz] + symplectic_matrix[i * dim + control_q] + ^ symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + cqz] + ^ symplectic_matrix[i * dim + tqz] ^ 1 ) ) - ) - x_cq = symplectic_matrix[i, control_q] - x_tq = symplectic_matrix[i, target_q] - z_cq = symplectic_matrix[i, cqz] - z_tq = symplectic_matrix[i, tqz] - symplectic_matrix[i, control_q] = x_tq - symplectic_matrix[i, target_q] = x_cq - symplectic_matrix[i, cqz] = z_tq - symplectic_matrix[i, tqz] = z_cq + ); + const bool x_cq = symplectic_matrix[i * dim + control_q]; + const bool x_tq = symplectic_matrix[i * dim + target_q]; + const bool z_cq = symplectic_matrix[i * dim + cqz]; + const bool z_tq = symplectic_matrix[i * dim + tqz]; + symplectic_matrix[i * dim + control_q] = x_tq; + symplectic_matrix[i * dim + target_q] = x_cq; + symplectic_matrix[i * dim + cqz] = z_tq; + symplectic_matrix[i * dim + tqz] = z_cq; + }; +} +""" + apply_two_qubits_kernel.format( + "SWAP", "SWAP" +) + +apply_SWAP = cp.RawKernel(apply_SWAP, "apply_SWAP", options=("--std=c++11",)) def SWAP(symplectic_matrix, control_q, target_q, nqubits): - apply_SWAP[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) + two_qubits_kernel_launcher( + apply_SWAP, symplectic_matrix, control_q, target_q, nqubits + ) return symplectic_matrix -@jit.rawkernel() -def apply_iSWAP(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> H-CNOT-CNOT-H-S-S""" - cqz = nqubits + control_q - tqz = nqubits + target_q - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] - ^ (symplectic_matrix[i, target_q] & symplectic_matrix[i, tqz]) - ^ (symplectic_matrix[i, control_q] & symplectic_matrix[i, cqz]) +apply_iSWAP = """ +__device__ void _apply_iSWAP(bool* symplectic_matrix, const int& control_q, const int& target_q, const int& nqubits, const int& cqz, const int& tqz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] + ^ (symplectic_matrix[i * dim + target_q] & symplectic_matrix[i * dim + tqz]) + ^ (symplectic_matrix[i * dim + control_q] & symplectic_matrix[i * dim + cqz]) ^ ( - symplectic_matrix[i, control_q] - & (symplectic_matrix[i, cqz] ^ symplectic_matrix[i, control_q]) + symplectic_matrix[i * dim + control_q] + & (symplectic_matrix[i * dim + cqz] ^ symplectic_matrix[i * dim + control_q]) ) ^ ( - (symplectic_matrix[i, cqz] ^ symplectic_matrix[i, control_q]) - & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) - & (symplectic_matrix[i, target_q] ^ ~symplectic_matrix[i, control_q]) + (symplectic_matrix[i * dim + cqz] ^ symplectic_matrix[i * dim + control_q]) + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + target_q]) + & (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + control_q] ^ 1) ) ^ ( ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, cqz] - ^ symplectic_matrix[i, control_q] + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + cqz] + ^ symplectic_matrix[i * dim + control_q] ) & ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, tqz] - ^ symplectic_matrix[i, control_q] + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + tqz] + ^ symplectic_matrix[i * dim + control_q] ) & ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, tqz] - ^ symplectic_matrix[i, control_q] - ^ ~symplectic_matrix[i, cqz] + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + tqz] + ^ symplectic_matrix[i * dim + control_q] + ^ symplectic_matrix[i * dim + cqz] ^ 1 ) ) ^ ( - symplectic_matrix[i, control_q] + symplectic_matrix[i * dim + control_q] & ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, control_q] - ^ symplectic_matrix[i, cqz] + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + control_q] + ^ symplectic_matrix[i * dim + cqz] ) ) - ) - z_control_q = ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, tqz] - ^ symplectic_matrix[i, control_q] - ) - z_target_q = ( - symplectic_matrix[i, target_q] - ^ symplectic_matrix[i, cqz] - ^ symplectic_matrix[i, control_q] - ) - symplectic_matrix[i, cqz] = z_control_q - symplectic_matrix[i, tqz] = z_target_q - tmp = symplectic_matrix[i, control_q] - symplectic_matrix[i, control_q] = symplectic_matrix[i, target_q] - symplectic_matrix[i, target_q] = tmp + ); + const bool z_control_q = ( + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + tqz] + ^ symplectic_matrix[i * dim + control_q] + ); + const bool z_target_q = ( + symplectic_matrix[i * dim + target_q] + ^ symplectic_matrix[i * dim + cqz] + ^ symplectic_matrix[i * dim + control_q] + ); + symplectic_matrix[i * dim + cqz] = z_control_q; + symplectic_matrix[i * dim + tqz] = z_target_q; + tmp = symplectic_matrix[i * dim + control_q]; + symplectic_matrix[i * dim + control_q] = symplectic_matrix[i * dim + target_q]; + symplectic_matrix[i * dim + target_q] = tmp; + }; +} +""" + apply_two_qubits_kernel.format( + "iSWAP", "iSWAP" +) + +apply_iSWAP = cp.RawKernel(apply_iSWAP, "apply_iSWAP", options=("--std=c++11",)) def iSWAP(symplectic_matrix, control_q, target_q, nqubits): - apply_iSWAP[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) + two_qubits_kernel_launcher( + apply_iSWAP, symplectic_matrix, control_q, target_q, nqubits + ) return symplectic_matrix -@jit.rawkernel() -def apply_CY(symplectic_matrix, control_q, target_q, nqubits): - """Decomposition --> S-CNOT-SDG""" - cqz = nqubits + control_q - tqz = nqubits + target_q - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = ( - symplectic_matrix[i, -1] +apply_CY = """ +__device__ void _apply_CY(bool* symplectic_matrix, const int& control_q, const int& target_q, const int& nqubits, const int& cqz, const int& tqz, const int& dim) { + const int tid = blockIdx.x * blockDim.x + threadIdx.x; + const int ntid = gridDim.x * blockDim.x; + const int last = dim - 1; + for(int i = tid; i < last; i += ntid) { + symplectic_matrix[i * dim + last] = ( + symplectic_matrix[i * dim + last] ^ ( - symplectic_matrix[i, target_q] - & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) + symplectic_matrix[i * dim + target_q] + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + target_q]) ) ^ ( - symplectic_matrix[i, control_q] - & (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, tqz]) - & (symplectic_matrix[i, cqz] ^ ~symplectic_matrix[i, target_q]) + symplectic_matrix[i * dim + control_q] + & (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + tqz]) + & (symplectic_matrix[i * dim + cqz] ^ symplectic_matrix[i * dim + target_q] ^ 1) ) ^ ( - (symplectic_matrix[i, target_q] ^ symplectic_matrix[i, control_q]) - & (symplectic_matrix[i, tqz] ^ symplectic_matrix[i, target_q]) + (symplectic_matrix[i * dim + target_q] ^ symplectic_matrix[i * dim + control_q]) + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + target_q]) ) - ) - x_target_q = symplectic_matrix[i, control_q] ^ symplectic_matrix[i, target_q] - z_control_q = ( - symplectic_matrix[i, cqz] - ^ symplectic_matrix[i, tqz] - ^ symplectic_matrix[i, target_q] - ) - z_target_q = symplectic_matrix[i, tqz] ^ symplectic_matrix[i, control_q] - symplectic_matrix[i, target_q] = x_target_q - symplectic_matrix[i, cqz] = z_control_q - symplectic_matrix[i, tqz] = z_target_q + ); + const bool x_target_q = symplectic_matrix[i * dim + control_q] ^ symplectic_matrix[i * dim + target_q]; + const bool z_control_q = ( + symplectic_matrix[i * dim + cqz] + ^ symplectic_matrix[i * dim + tqz] + ^ symplectic_matrix[i * dim + target_q] + ); + const bool z_target_q = symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + control_q]; + symplectic_matrix[i * dim + target_q] = x_target_q; + symplectic_matrix[i * dim + cqz] = z_control_q; + symplectic_matrix[i * dim + tqz] = z_target_q; + }; +} +""" + apply_two_qubits_kernel.format( + "CY", "CY" +) + +apply_CY = cp.RawKernel(apply_CY, "apply_CY", options=("--std=c++11",)) def CY(symplectic_matrix, control_q, target_q, nqubits): - apply_CY[GRIDDIM, BLOCKDIM](symplectic_matrix, control_q, target_q, nqubits) + two_qubits_kernel_launcher( + apply_CY, symplectic_matrix, control_q, target_q, nqubits + ) return symplectic_matrix diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 7687d59e..a7122966 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -157,6 +157,13 @@ def to_numpy(self, x): def issparse(self, x): return self.sparse.issparse(x) or self.npsparse.issparse(x) + def reshape_clifford_state(self, state, nqubits): + if len(state.shape) > 1: + return state.ravel() + else: + dim = 2 * nqubits + 1 + return state.reshape(dim, dim) + def zero_state(self, nqubits): n = 1 << nqubits kernel = self.gates.get(f"initial_state_kernel_{self.kernel_type}") From c89a625d93bff07d858aaf59efd2f5b02ca26034 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 12 Jan 2024 17:09:50 +0400 Subject: [PATCH 21/73] fix: bugfix to kernel launchers --- .../backends/clifford_operations_gpu.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 57d06c93..415add3b 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -7,7 +7,7 @@ apply_one_qubit_kernel = """ extern "C" -__global__ void apply_{}(bool* symplectic_matrix, const int q, const int nqubits, conts int qz, const int dim) {{ +__global__ void apply_{}(bool* symplectic_matrix, const int q, const int nqubits, const int qz, const int dim) {{ _apply_{}(symplectic_matrix, q, nqubits, qz, dim); }} """ @@ -20,17 +20,21 @@ """ -def one_qubit_kernel_launcher(kernel, args): +def one_qubit_kernel_launcher(kernel, symplectic_matrix, q, nqubits): qz = nqubits + q - dim = symplectic_matrix.shape[0] - return kernel((GRIDDIM,), (BLOCKDIM,), (*args, qz, dim)) + dim = 2 * nqubits + 1 + return kernel((GRIDDIM,), (BLOCKDIM,), (symplectic_matrix, q, nqubits, qz, dim)) -def two_qubits_kernel_launcher(kernel, args): +def two_qubits_kernel_launcher(kernel, symplectic_matrix, control_q, target_q, nqubits): cqz = nqubits + control_q tqz = nqubits + target_q - dim = symplectic_matrix.shape[0] - return kernel((GRIDDIM,), (BLOCKDIM,), (*args, cqz, tqz, dim)) + dim = 2 * nqubits + 1 + return kernel( + (GRIDDIM,), + (BLOCKDIM,), + (symplectic_matrix, control_q, target_q, nqubits, cqz, tqz, dim), + ) apply_H = """ From 45f9c9cff66c556058acc9847a6200616444a303 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 15 Jan 2024 12:30:32 +0400 Subject: [PATCH 22/73] feat: implemented rowsum in cuda --- .../backends/clifford_operations_gpu.py | 98 +++++++++++-------- 1 file changed, 59 insertions(+), 39 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 415add3b..0850b638 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -3,7 +3,8 @@ from cupyx import jit GRIDDIM, BLOCKDIM = 1024, 128 -BLOCKDIM_2D = (32, 32) +BLOCKDIM_2D = (16, 64) +GRIDDIM_2D = (8, 32) apply_one_qubit_kernel = """ extern "C" @@ -496,7 +497,7 @@ def SWAP(symplectic_matrix, control_q, target_q, nqubits): ); symplectic_matrix[i * dim + cqz] = z_control_q; symplectic_matrix[i * dim + tqz] = z_target_q; - tmp = symplectic_matrix[i * dim + control_q]; + const bool tmp = symplectic_matrix[i * dim + control_q]; symplectic_matrix[i * dim + control_q] = symplectic_matrix[i * dim + target_q]; symplectic_matrix[i * dim + target_q] = tmp; }; @@ -563,48 +564,67 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -@jit.rawkernel() -def _apply_rowsum(symplectic_matrix, h, i, nqubits): - tid_x = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - tid_y = jit.blockIdx.y * jit.blockDim.y + jit.threadIdx.y - ntid_x = jit.gridDim.x * jit.blockDim.x - ntid_y = jit.gridDim.y * jit.blockDim.y - for j in range(tid_y, len(h), ntid_y): - if jit.blockIdx.x == 0: - exp = 0 - for k in range(tid_x, nqubits, ntid_x): - jz = nqubits + j - x1_eq_z1 = symplectic_matrix[i[k], j] == symplectic_matrix[i[k], jz] - x1_eq_0 = symplectic_matrix[i[k], j] == False - if x1_eq_z1: +# This might be optimized using shared memory and warp reduction +apply_rowsum = """ +__device__ void _apply_rowsum(bool* symplectic_matrix, const int* h, const int *i, const int& nqubits, const int& nrows, int* exp, const int& dim): + tid_x = blockIdx.x * blockDim.x + threadIdx.x; + tid_y = blockIdx.y * blockDim.y + threadIdx.y; + ntid_x = gridDim.x * blockDim.x; + ntid_y = gridDim.y * blockDim.y; + const int last = dim - 1; + for(int j = tid_y; j < nrows; j += ntid_y) { + int jz = nqubits + j; + for(int k = tid_x; k < nqubits; k += ntid_x) { + x1_eq_z1 = symplectic_matrix[i[k] * dim + j] == symplectic_matrix[i[k] * dim + jz]; + x1_eq_0 = symplectic_matrix[i[k] * dim + j] == False + if (x1_eq_z1) { if not x1_eq_0: - exp += int(symplectic_matrix[h[k], jz]) - int( - symplectic_matrix[h[k], j] - ) - else: - if x1_eq_0: - exp += int(symplectic_matrix[h[k], j]) * ( - 1 - 2 * int(symplectic_matrix[h[k], jz]) - ) - else: - exp += int(symplectic_matrix[h[k], jz]) * ( - 2 * int(symplectic_matrix[h[k], j]) - 1 - ) - symplectic_matrix[h[j], -1] = ( - 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + exp - ) % 4 != 0 - for k in range(tid_x, nqubits, ntid_y): - kz = nqubits + k - symplectic_matrix[h[j], k] = ( - symplectic_matrix[i[j], k] ^ symplectic_matrix[h[j], k] - ) + exp[j] += ((int) symplectic_matrix[h[k] * dim + jz]) - + (int) symplectic_matrix[h[k] * dim + j]; + } else { + if (x1_eq_0) { + exp[j] += ((int) symplectic_matrix[h[k] * dim + j]) * ( + 1 - 2 * (int) symplectic_matrix[h[k] * dim + jz] + ); + } else { + exp[j] += ((int) symplectic_matrix[h[k] * dim + jz]) * ( + 2 * (int) symplectic_matrix[h[k] * dim + j] - 1 + ); + } + } + } + __syncthreads(); + if (threadIdx.x == 0) { + symplectic_matrix[h[j] * dim + last] = ( + 2 * symplectic_matrix[h[j] * dim + last] + 2 * symplectic_matrix[i[j] * dim + last] + exp[j] + ) % 4 != 0; + } + for(int k = tid_x; k < nqubits; k += ntid_x) { + int kz = nqubits + k; + symplectic_matrix[h[j] * dim + k] = ( + symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] + ); symplectic_matrix[h[j], nqubits + k] = ( - symplectic_matrix[i[j], kz] ^ symplectic_matrix[h[j], kz] - ) + symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] + ); + } + } +extern "C" +__global__ void apply_rowsum(bool* symplectic_matrix, const int* h, const int* i, const int nqubits, const int nrows, int* exp, const int dim) { + _apply_rowsum(symplectic_matrix, h, i, nqubits, nrows, exp, dim); +} +""" + +apply_rowsum = cp.RawKernel(apply_rowsum, "apply_rowsum", options=("--std=c++11",)) def _rowsum(symplectic_matrix, h, i, nqubits): - _apply_rowsum[(GRIDDIM, GRIDDIM), BLOCKDIM_2D](symplectic_matrix, h, i, nqubits) + dim = 2 * nqubits + 1 + nrows = len(h) + exp = cp.zeros(len(h), dtype=cp.uint) + _apply_rowsum( + GRIDDIM2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, dim) + ) return symplectic_matrix From 038ca86dbd1a9726442bbd04d4cd69b2cc78c67a Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 15 Jan 2024 12:54:23 +0400 Subject: [PATCH 23/73] feat: implemented rowsum in cuda --- .../backends/clifford_operations_gpu.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 0850b638..1af71885 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -566,21 +566,22 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): # This might be optimized using shared memory and warp reduction apply_rowsum = """ -__device__ void _apply_rowsum(bool* symplectic_matrix, const int* h, const int *i, const int& nqubits, const int& nrows, int* exp, const int& dim): - tid_x = blockIdx.x * blockDim.x + threadIdx.x; - tid_y = blockIdx.y * blockDim.y + threadIdx.y; - ntid_x = gridDim.x * blockDim.x; - ntid_y = gridDim.y * blockDim.y; +__device__ void _apply_rowsum(bool* symplectic_matrix, const int* h, const int *i, const int& nqubits, const int& nrows, int* exp, const int& dim) { + unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; + unsigned int tid_y = blockIdx.y * blockDim.y + threadIdx.y; + unsigned int ntid_x = gridDim.x * blockDim.x; + unsigned int ntid_y = gridDim.y * blockDim.y; const int last = dim - 1; for(int j = tid_y; j < nrows; j += ntid_y) { int jz = nqubits + j; for(int k = tid_x; k < nqubits; k += ntid_x) { - x1_eq_z1 = symplectic_matrix[i[k] * dim + j] == symplectic_matrix[i[k] * dim + jz]; - x1_eq_0 = symplectic_matrix[i[k] * dim + j] == False + bool x1_eq_z1 = symplectic_matrix[i[k] * dim + j] == symplectic_matrix[i[k] * dim + jz]; + bool x1_eq_0 = symplectic_matrix[i[k] * dim + j] == false; if (x1_eq_z1) { - if not x1_eq_0: + if (not x1_eq_0) { exp[j] += ((int) symplectic_matrix[h[k] * dim + jz]) - (int) symplectic_matrix[h[k] * dim + j]; + } } else { if (x1_eq_0) { exp[j] += ((int) symplectic_matrix[h[k] * dim + j]) * ( @@ -604,11 +605,12 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): symplectic_matrix[h[j] * dim + k] = ( symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] ); - symplectic_matrix[h[j], nqubits + k] = ( + symplectic_matrix[h[j] * dim + kz] = ( symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] ); } } +} extern "C" __global__ void apply_rowsum(bool* symplectic_matrix, const int* h, const int* i, const int nqubits, const int nrows, int* exp, const int dim) { _apply_rowsum(symplectic_matrix, h, i, nqubits, nrows, exp, dim); From 821d056c174f141ebf76bd50887448ee0d02567f Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 15 Jan 2024 15:10:52 +0400 Subject: [PATCH 24/73] fix: fixed CZ --- src/qibojit/backends/clifford_operations_gpu.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 1af71885..d430ce8f 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -1,6 +1,5 @@ import cupy as cp import numpy as np -from cupyx import jit GRIDDIM, BLOCKDIM = 1024, 128 BLOCKDIM_2D = (16, 64) @@ -105,7 +104,7 @@ def CNOT(symplectic_matrix, control_q, target_q, nqubits): ^ ( symplectic_matrix[i * dim + control_q] & symplectic_matrix[i * dim + target_q] - & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + cqz]) ^ 1 + & (symplectic_matrix[i * dim + tqz] ^ symplectic_matrix[i * dim + cqz] ^ 1) ) ^ ( symplectic_matrix[i * dim + target_q] @@ -624,8 +623,8 @@ def _rowsum(symplectic_matrix, h, i, nqubits): dim = 2 * nqubits + 1 nrows = len(h) exp = cp.zeros(len(h), dtype=cp.uint) - _apply_rowsum( - GRIDDIM2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, dim) + apply_rowsum( + GRIDDIM_2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, dim) ) return symplectic_matrix From b0a2a6a9db31f53810d6f1ae6a61518fb629bd88 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 15 Jan 2024 16:27:52 +0400 Subject: [PATCH 25/73] fix: passing exp to rowsum --- .../backends/clifford_operations_gpu.py | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index d430ce8f..7877b54d 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -2,8 +2,8 @@ import numpy as np GRIDDIM, BLOCKDIM = 1024, 128 -BLOCKDIM_2D = (16, 64) -GRIDDIM_2D = (8, 32) +BLOCKDIM_2D = (64, 16) +GRIDDIM_2D = (32, 8) apply_one_qubit_kernel = """ extern "C" @@ -572,23 +572,23 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): unsigned int ntid_y = gridDim.y * blockDim.y; const int last = dim - 1; for(int j = tid_y; j < nrows; j += ntid_y) { - int jz = nqubits + j; for(int k = tid_x; k < nqubits; k += ntid_x) { - bool x1_eq_z1 = symplectic_matrix[i[k] * dim + j] == symplectic_matrix[i[k] * dim + jz]; - bool x1_eq_0 = symplectic_matrix[i[k] * dim + j] == false; + unsigned int kz = nqubits + k; + bool x1_eq_z1 = symplectic_matrix[i[j] * dim + k] == symplectic_matrix[i[j] * dim + kz]; + bool x1_eq_0 = symplectic_matrix[i[j] * dim + k] == false; if (x1_eq_z1) { if (not x1_eq_0) { - exp[j] += ((int) symplectic_matrix[h[k] * dim + jz]) - - (int) symplectic_matrix[h[k] * dim + j]; + exp[j] += ((int) symplectic_matrix[h[j] * dim + kz]) - + (int) symplectic_matrix[h[j] * dim + k]; } } else { if (x1_eq_0) { - exp[j] += ((int) symplectic_matrix[h[k] * dim + j]) * ( - 1 - 2 * (int) symplectic_matrix[h[k] * dim + jz] + exp[j] += ((int) symplectic_matrix[h[j] * dim + k]) * ( + 1 - 2 * (int) symplectic_matrix[h[j] * dim + kz] ); } else { - exp[j] += ((int) symplectic_matrix[h[k] * dim + jz]) * ( - 2 * (int) symplectic_matrix[h[k] * dim + j] - 1 + exp[j] += ((int) symplectic_matrix[h[j] * dim + kz]) * ( + 2 * (int) symplectic_matrix[h[j] * dim + k] - 1 ); } } @@ -600,7 +600,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): ) % 4 != 0; } for(int k = tid_x; k < nqubits; k += ntid_x) { - int kz = nqubits + k; + unsigned int kz = nqubits + k; symplectic_matrix[h[j] * dim + k] = ( symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] ); @@ -624,7 +624,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits): nrows = len(h) exp = cp.zeros(len(h), dtype=cp.uint) apply_rowsum( - GRIDDIM_2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, dim) + GRIDDIM_2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, exp, dim) ) return symplectic_matrix From 5d0ee57c47082766f67461c6bc13a7abaf505af7 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 17 Jan 2024 11:41:01 +0400 Subject: [PATCH 26/73] fix: fixed cupy rowsum --- src/qibojit/backends/clifford_operations_gpu.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 7877b54d..1efb1c22 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -594,7 +594,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): } } __syncthreads(); - if (threadIdx.x == 0) { + if (threadIdx.x == 0 && blockIdx.x == 0) { symplectic_matrix[h[j] * dim + last] = ( 2 * symplectic_matrix[h[j] * dim + last] + 2 * symplectic_matrix[i[j] * dim + last] + exp[j] ) % 4 != 0; @@ -622,7 +622,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): def _rowsum(symplectic_matrix, h, i, nqubits): dim = 2 * nqubits + 1 nrows = len(h) - exp = cp.zeros(len(h), dtype=cp.uint) + exp = cp.zeros(len(h), dtype=int) apply_rowsum( GRIDDIM_2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, exp, dim) ) @@ -638,13 +638,13 @@ def _random_outcome(state, p, q, nqubits): state = _rowsum( state, h, - p * cp.ones(h.shape[0], dtype=np.uint), + p.astype(cp.uint) * cp.ones(h.shape[0], dtype=np.uint), nqubits, ) state[p - nqubits, :] = state[p, :] - outcome = cp.random.randint(2, size=1) + outcome = cp.random.randint(2, size=None, dtype=cp.uint) state[p, :] = 0 - state[p, -1] = outcome + state[p, -1] = outcome.astype(bool) state[p, nqubits + q] = 1 return state, outcome From 4d0c96c3aa549a2a4e6aaae011170e560bc2f490 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 17 Jan 2024 17:46:32 +0400 Subject: [PATCH 27/73] fix: fixing random outcome --- .../backends/clifford_operations_gpu.py | 81 ++++++++++++------- 1 file changed, 53 insertions(+), 28 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 1efb1c22..5c8041e4 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -1,3 +1,5 @@ +from functools import cache + import cupy as cp import numpy as np @@ -564,7 +566,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): # This might be optimized using shared memory and warp reduction -apply_rowsum = """ +_apply_rowsum = """ __device__ void _apply_rowsum(bool* symplectic_matrix, const int* h, const int *i, const int& nqubits, const int& nrows, int* exp, const int& dim) { unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; unsigned int tid_y = blockIdx.y * blockDim.y + threadIdx.y; @@ -610,17 +612,26 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): } } } +""" + +apply_rowsum = f""" +{_apply_rowsum} extern "C" -__global__ void apply_rowsum(bool* symplectic_matrix, const int* h, const int* i, const int nqubits, const int nrows, int* exp, const int dim) { +__global__ void apply_rowsum(bool* symplectic_matrix, const int* h, const int* i, const int nqubits, const int nrows, int* exp, const int dim) {{ _apply_rowsum(symplectic_matrix, h, i, nqubits, nrows, exp, dim); -} +}} """ apply_rowsum = cp.RawKernel(apply_rowsum, "apply_rowsum", options=("--std=c++11",)) +@cache +def _get_dim(nqubits): + return 2 * nqubits + 1 + + def _rowsum(symplectic_matrix, h, i, nqubits): - dim = 2 * nqubits + 1 + dim = _get_dim(nqubits) nrows = len(h) exp = cp.zeros(len(h), dtype=int) apply_rowsum( @@ -629,11 +640,18 @@ def _rowsum(symplectic_matrix, h, i, nqubits): return symplectic_matrix +def _get_p(state, nqubtis, q): + dim = _get_dim(nqubits) + return state.reshape(dim, dim)[nqubits:-1, q].nonzero()[0] + + def _random_outcome(state, p, q, nqubits): + dim = _get_dim(nqubits) p = p[0] + nqubits - h = state[:-1, q].copy() - h[p] = False - h = h.nonzero()[0] + tmp = state[p * dim + q].copy() + state[p * dim + q] = False + h = state.reshape(dim, dim)[:-1, q].nonzero()[0] + state[p * dim + q] = tmp if h.shape[0] > 0: state = _rowsum( state, @@ -641,30 +659,37 @@ def _random_outcome(state, p, q, nqubits): p.astype(cp.uint) * cp.ones(h.shape[0], dtype=np.uint), nqubits, ) + state = state.reshape(dim, dim) state[p - nqubits, :] = state[p, :] outcome = cp.random.randint(2, size=None, dtype=cp.uint) - state[p, :] = 0 + state[p, :] = False state[p, -1] = outcome.astype(bool) - state[p, nqubits + q] = 1 - return state, outcome - - -""" -@jit.rawkernel() -def _determined_outcome(state, q, nqubits): - state[-1, :] = False - indices = state[:nqubits, q].nonzero()[0] - tid = jit.blockIdx.indices * jit.blockDim.indices + jit.threadIdx.indices - ntid = jit.gridDim.indices * jit.blockDim.indices - for i in range(tid, len(indices), ntid): - state = _rowsum( - state, - np.array([2 * nqubits], dtype=uint64), - np.array([indices[i] + nqubits], dtype=uint64), - nqubits, - include_scratch=True, - ) - return state, uint64(state[-1, -1]) + state[p, nqubits + q] = True + return state.ravel(), outcome + + +__random_outcome = f""" +#include +{_apply_rowsum} +__device__ void random_outcome(bool* state, int& p, int& q, int& nqubits, int& dim, int& outcome) {{ + unsigned int tid_y = blockIdx.y; + unsigned int ntid_y = gridDim.y; + for(int j = tid_y; j < dim - 1; j += ntid_y) {{ + if (state[j * dim + q] && j != p) {{ + _apply_rowsum(state, j, p, nqubits, dim) + }} + }} + unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; + for(int j = tid_x * (1 + tid_y); j < dim; j += ntid_y) {{ + state[(p - nqubits) * dim + j] = state[p * dim + j]; + state[p * dim + j] = false; + }} + if (threadIdx.x == 0 && blockIdx.x == 0 && blockIdx.y == 0) {{ + outcome = rand() % 2; + state[p * dim + dim] = (bool) outcome; + state[p * dim + nqubits + q] = true; + }} +}} """ From e58737b2c4d3b4f0101e7d0121115b4e8d4b55b0 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 18 Jan 2024 15:23:17 +0400 Subject: [PATCH 28/73] fix: minor fixes to measurements --- .../backends/clifford_operations_gpu.py | 32 ++++++------------- src/qibojit/backends/gpu.py | 12 +++---- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 5c8041e4..e491cdc4 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -315,22 +315,6 @@ def SXDG(symplectic_matrix, q, nqubits): return symplectic_matrix -@jit.rawkernel() -def apply_RY_pi(symplectic_matrix, q, nqubits): - """Decomposition --> H-S-S""" - tid = jit.blockIdx.x * jit.blockDim.x + jit.threadIdx.x - ntid = jit.gridDim.x * jit.blockDim.x - qz = nqubits + q - for i in range(tid, symplectic_matrix.shape[0] - 1, ntid): - symplectic_matrix[i, -1] = symplectic_matrix[i, -1] ^ ( - symplectic_matrix[i, q] - & (symplectic_matrix[i, qz] ^ symplectic_matrix[i, q]) - ) - zq = symplectic_matrix[i, qz] - symplectic_matrix[i, qz] = symplectic_matrix[i, q] - symplectic_matrix[i, q] = zq - - apply_RY_pi = """ __device__ void _apply_RY_pi(bool* symplectic_matrix, const int& q, const int& nqubits, const int& qz, const int& dim) { const int tid = blockIdx.x * blockDim.x + threadIdx.x; @@ -640,7 +624,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits): return symplectic_matrix -def _get_p(state, nqubtis, q): +def _get_p(state, q, nqubits): dim = _get_dim(nqubits) return state.reshape(dim, dim)[nqubits:-1, q].nonzero()[0] @@ -648,10 +632,11 @@ def _get_p(state, nqubtis, q): def _random_outcome(state, p, q, nqubits): dim = _get_dim(nqubits) p = p[0] + nqubits - tmp = state[p * dim + q].copy() - state[p * dim + q] = False + idx_pq = p * dim + q + tmp = state[idx_pq].copy() + state[idx_pq] = False h = state.reshape(dim, dim)[:-1, q].nonzero()[0] - state[p * dim + q] = tmp + state[idx_pq] = tmp if h.shape[0] > 0: state = _rowsum( state, @@ -694,12 +679,13 @@ def _random_outcome(state, p, q, nqubits): def _determined_outcome(state, q, nqubits): - state[-1, :] = False - for i in state[:nqubits, q].nonzero()[0]: + dim = _get_dim(nqubits) + state.reshape(dim, dim)[-1, :] = False + for i in state.reshape(dim, dim)[:nqubits, q].nonzero()[0]: state = _rowsum( state, cp.array([2 * nqubits], dtype=np.uint), cp.array([i + nqubits], dtype=np.uint), nqubits, ) - return state, cp.uint(state[-1, -1]) + return state, state[-1, -1].astype(cp.uint) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index a7122966..802b0931 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -157,12 +157,12 @@ def to_numpy(self, x): def issparse(self, x): return self.sparse.issparse(x) or self.npsparse.issparse(x) - def reshape_clifford_state(self, state, nqubits): - if len(state.shape) > 1: - return state.ravel() - else: - dim = 2 * nqubits + 1 - return state.reshape(dim, dim) + def clifford_pre_execution_reshape(self, state): + return state.ravel() + + def clifford_post_execution_reshape(self, state, nqubits): + dim = 2 * nqubits + 1 + return state.reshape(dim, dim) def zero_state(self, nqubits): n = 1 << nqubits From d7f3a36f74e205e8b3a1c9118fb6881224618cc1 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi <45011234+BrunoLiegiBastonLiegi@users.noreply.github.com> Date: Thu, 18 Jan 2024 15:29:35 +0400 Subject: [PATCH 29/73] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7c0fb5c4..8e9719b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers=[ [tool.poetry.dependencies] python=">=3.9.0,<3.12" numba=">=0.51.0" -qibo=">=0.2.3" +qibo={ git = "git@github.com:qiboteam/qibo.git", branch = "clifford_simulator_numba" } scipy = "^1.10.1" psutil = "^5.9.5" From da329e77bf230b3cec517998dc51df704c8ed147 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 18 Jan 2024 15:32:20 +0400 Subject: [PATCH 30/73] feat: updated poetry lock --- poetry.lock | 465 ++-------------------------------------------------- 1 file changed, 17 insertions(+), 448 deletions(-) diff --git a/poetry.lock b/poetry.lock index e4e39047..0996b61e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "astroid" @@ -59,69 +59,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "contourpy" -version = "1.2.0" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, -] - -[package.dependencies] -numpy = ">=1.20,<2.0" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] - [[package]] name = "coverage" version = "7.3.2" @@ -189,21 +126,6 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - [[package]] name = "dill" version = "0.3.7" @@ -232,71 +154,6 @@ files = [ [package.extras] test = ["pytest (>=6)"] -[[package]] -name = "fonttools" -version = "4.45.1" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:45fa321c458ea29224067700954ec44493ae869b47e7c5485a350a149a19fb53"}, - {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0dc7617d96b1e668eea9250e1c1fe62d0c78c3f69573ce7e3332cc40e6d84356"}, - {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ed3bda541e86725f6b4e1b94213f13ed1ae51a5a1f167028534cedea38c010"}, - {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f4a5870e3b56788fb196da8cf30d0dfd51a76dc3b907861d018165f76ae4c2"}, - {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a3c11d9687479f01eddef729aa737abcdea0a44fdaffb62a930a18892f186c9b"}, - {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:316cec50581e844c3ab69d7c82455b54c7cf18236b2f09e722faf665fbfcac58"}, - {file = "fonttools-4.45.1-cp310-cp310-win32.whl", hash = "sha256:e2277cba9f0b525e30de2a9ad3cb4219aa4bc697230c1645666b0deee9f914f0"}, - {file = "fonttools-4.45.1-cp310-cp310-win_amd64.whl", hash = "sha256:1b9e9ad2bcded9a1431afaa57c8d3c39143ac1f050862d66bddd863c515464a2"}, - {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff6a698bdd435d24c379f6e8a54908cd9bb7dda23719084d56bf8c87709bf3bd"}, - {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c980d60cd6ec1376206fe55013d166e5627ad0b149b5c81e74eaa913ab6134f"}, - {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a12dee6523c02ca78aeedd0a5e12bfa9b7b29896350edd5241542897b072ae23"}, - {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37cd1ced6efb3dd6fe82e9f9bf92fd74ac58a5aefc284045f59ecd517a5fb9ab"}, - {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3d24248221bd7151dfff0d88b1b5da02dccd7134bd576ce8888199827bbaa19"}, - {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba6c23591427844dfb0a13658f1718489de75de6a46b64234584c0d17573162d"}, - {file = "fonttools-4.45.1-cp311-cp311-win32.whl", hash = "sha256:cebcddbe9351b67166292b4f71ffdbfcce01ba4b07d4267824eb46b277aeb19a"}, - {file = "fonttools-4.45.1-cp311-cp311-win_amd64.whl", hash = "sha256:f22eb69996a0bd49f76bdefb30be54ce8dbb89a0d1246874d610f05c2aa2e69e"}, - {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:794de93e83297db7b4943f2431e206d8b1ea69cb3ae14638a49cc50332bf0db8"}, - {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ba17822a6681d06849078daaf6e03eccc9f467efe7c4c60280e28a78e8e5df9"}, - {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e50f794d09df0675da8d9dbd7c66bfcab2f74a708343aabcad41936d26556891"}, - {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b07b857d4f9de3199a8c3d1b1bf2078c0f37447891ca1a8d9234106b9a27aff"}, - {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:777ba42b94a27bb7fb2b4082522fccfd345667c32a56011e1c3e105979af5b79"}, - {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:21e96b99878348c74aa58059b8578d7586f9519cbcdadacf56486737038aa043"}, - {file = "fonttools-4.45.1-cp312-cp312-win32.whl", hash = "sha256:5cbf02cda8465b69769d07385f5d11e7bba19954e7787792f46fe679ec755ebb"}, - {file = "fonttools-4.45.1-cp312-cp312-win_amd64.whl", hash = "sha256:800e354e0c3afaeb8d9552769773d02f228e98c37b8cb03041157c3d0687cffc"}, - {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6eb2c54f7a07c92108daabcf02caf31df97825738db02a28270633946bcda4d0"}, - {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43a3d267334109ff849c37cf3629476b5feb392ef1d2e464a167b83de8cd599c"}, - {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e1aefc2bf3c43e0f33f995f828a7bbeff4adc9393a7760b11456dbcf14388f6"}, - {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f53a19dcdd5737440839b8394eeebb35da9ec8109f7926cb6456639b5b58e47"}, - {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a17706b9cc24b27721613fe5773d93331ab7f0ecaca9955aead89c6b843d3a7"}, - {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fb36e5f40191274a95938b40c0a1fa7f895e36935aea8709e1d6deff0b2d0d4f"}, - {file = "fonttools-4.45.1-cp38-cp38-win32.whl", hash = "sha256:46eabddec12066829b8a1efe45ae552ba2f1796981ecf538d5f68284c354c589"}, - {file = "fonttools-4.45.1-cp38-cp38-win_amd64.whl", hash = "sha256:b6de2f0fcd3302fb82f94801002cb473959e998c14c24ec28234adb674aed345"}, - {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:392d0e3cc23daee910193625f7cf1b387aff9dd5b6f1a5f4a925680acb6dcbc2"}, - {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4b9544b1346d99848ac0e9b05b5d45ee703d7562fc4c9c48cf4b781de9632e57"}, - {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8717db3e4895e4820ade64ea379187738827ee60748223cb0438ef044ee208c6"}, - {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29d5f298d616a93a4c5963682dc6cc8cc09f6d89cad2c29019fc5fb3b4d9472"}, - {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cb472905da3049960e80fc1cf808231880d79727a8410e156bf3e5063a1c574f"}, - {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ba299f1fbaa2a1e33210aaaf6fa816d4059e4d3cfe2ae9871368d4ab548c1c6a"}, - {file = "fonttools-4.45.1-cp39-cp39-win32.whl", hash = "sha256:105099968b58a5b4cef6f3eb409db8ea8578b302a9d05e23fecba1b8b0177b5f"}, - {file = "fonttools-4.45.1-cp39-cp39-win_amd64.whl", hash = "sha256:847f3f49dd3423e5a678c098e2ba92c7f4955d4aab3044f6a507b0bb0ecb07e0"}, - {file = "fonttools-4.45.1-py3-none-any.whl", hash = "sha256:3bdd7dfca8f6c9f4779384064027e8477ad6a037d6a327b09381f43e0247c6f3"}, - {file = "fonttools-4.45.1.tar.gz", hash = "sha256:6e441286d55fe7ec7c4fb36812bf914924813776ff514b744b510680fc2733f2"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -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 = "future" version = "0.18.3" @@ -334,24 +191,6 @@ dev = ["black", "nose", "pre-commit", "pytest"] mongotrials = ["pymongo"] sparktrials = ["pyspark"] -[[package]] -name = "importlib-resources" -version = "6.1.1" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -391,119 +230,6 @@ files = [ {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, ] -[[package]] -name = "kiwisolver" -version = "1.4.5" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, -] - [[package]] name = "lazy-object-proxy" version = "1.9.0" @@ -582,55 +308,6 @@ files = [ {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"}, ] -[[package]] -name = "matplotlib" -version = "3.8.2" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - [[package]] name = "mccabe" version = "0.7.0" @@ -767,73 +444,6 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -[[package]] -name = "pillow" -version = "10.1.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - [[package]] name = "platformdirs" version = "4.0.0" @@ -932,20 +542,6 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - [[package]] name = "pytest" version = "7.4.3" @@ -1003,40 +599,28 @@ pytest = ">=7.3.1" [package.extras] test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - [[package]] name = "qibo" -version = "0.2.3" +version = "0.2.5" description = "A framework for quantum computing with hardware acceleration." optional = false python-versions = ">=3.9,<3.12" -files = [ - {file = "qibo-0.2.3-py3-none-any.whl", hash = "sha256:53e649c57bf17c75ccafff804633d99aab595a4cbf42b3c42d625764c3dbb5b6"}, - {file = "qibo-0.2.3.tar.gz", hash = "sha256:ad375d47499781c9a0c942fcbd3747c84346e4c671e40fca34797929a2f509b3"}, -] +files = [] +develop = false [package.dependencies] -cma = ">=3.3.0,<4.0.0" -hyperopt = ">=0.2.7,<0.3.0" -joblib = ">=1.2.0,<2.0.0" -matplotlib = ">=3.7.0,<4.0.0" -psutil = ">=5.9.4,<6.0.0" -scipy = ">=1.10.1,<2.0.0" -sympy = ">=1.11.1,<2.0.0" -tabulate = ">=0.9.0,<0.10.0" +cma = "^3.3.0" +hyperopt = "^0.2.7" +joblib = "^1.2.0" +scipy = "^1.10.1" +sympy = "^1.11.1" +tabulate = "^0.9.0" + +[package.source] +type = "git" +url = "git@github.com:qiboteam/qibo.git" +reference = "clifford_simulator_numba" +resolved_reference = "df0550589f522e783175acad4a0fba05f99479f7" [[package]] name = "scipy" @@ -1251,22 +835,7 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - [metadata] lock-version = "2.0" python-versions = ">=3.9.0,<3.12" -content-hash = "c0f5c5341a5f291d321362dfc1e1a37f1f2306bfd1593548afd5c41f4410abe2" +content-hash = "1d8249dbfff5fd42b9a664818f6fa4de7b1d3c8e0535783aa93cd71737417c0c" From 1e1c62397794ffd59641f36eb1972256925189f2 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 19 Jan 2024 09:18:24 +0400 Subject: [PATCH 31/73] fix: changed int to long in rowsum --- src/qibojit/backends/clifford_operations_gpu.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index e491cdc4..42f164da 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -551,7 +551,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): # This might be optimized using shared memory and warp reduction _apply_rowsum = """ -__device__ void _apply_rowsum(bool* symplectic_matrix, const int* h, const int *i, const int& nqubits, const int& nrows, int* exp, const int& dim) { +__device__ void _apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int& nqubits, const int& nrows, long* exp, const int& dim) { unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; unsigned int tid_y = blockIdx.y * blockDim.y + threadIdx.y; unsigned int ntid_x = gridDim.x * blockDim.x; @@ -601,7 +601,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): apply_rowsum = f""" {_apply_rowsum} extern "C" -__global__ void apply_rowsum(bool* symplectic_matrix, const int* h, const int* i, const int nqubits, const int nrows, int* exp, const int dim) {{ +__global__ void apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int nqubits, const int nrows, long* exp, const int dim) {{ _apply_rowsum(symplectic_matrix, h, i, nqubits, nrows, exp, dim); }} """ @@ -688,4 +688,4 @@ def _determined_outcome(state, q, nqubits): cp.array([i + nqubits], dtype=np.uint), nqubits, ) - return state, state[-1, -1].astype(cp.uint) + return state, state[dim * dim - 1].astype(cp.uint) From a3ecc360985c05732351126e0aaf93b00b5ae9b3 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 19 Jan 2024 09:26:16 +0400 Subject: [PATCH 32/73] fix: regenerated lock file --- poetry.lock | 322 ++++++++++++++++++++++++++-------------------------- 1 file changed, 160 insertions(+), 162 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0996b61e..83ffe137 100644 --- a/poetry.lock +++ b/poetry.lock @@ -61,63 +61,63 @@ files = [ [[package]] name = "coverage" -version = "7.3.2" +version = "7.4.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, + {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, + {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, + {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, + {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, + {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, + {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, + {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, + {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, + {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, + {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, + {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, + {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, + {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, + {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, + {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, + {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, + {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, + {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, + {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, + {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, + {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, + {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, + {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, + {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, + {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, + {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, + {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, + {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, + {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, + {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, + {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, + {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, ] [package.dependencies] @@ -204,20 +204,17 @@ files = [ [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "joblib" @@ -232,47 +229,48 @@ files = [ [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] @@ -390,47 +388,47 @@ numpy = ">=1.22,<1.27" [[package]] name = "numpy" -version = "1.26.2" +version = "1.26.3" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, + {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, + {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, + {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, + {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, + {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, + {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, + {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, + {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, + {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, + {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, + {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, + {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, + {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, + {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, + {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, + {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, + {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, + {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, + {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, + {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, + {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, + {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, ] [[package]] @@ -446,13 +444,13 @@ files = [ [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -476,27 +474,27 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "psutil" -version = "5.9.6" +version = "5.9.7" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, - {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, - {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, - {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, - {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, - {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, - {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, - {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, - {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, - {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, + {file = "psutil-5.9.7-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0bd41bf2d1463dfa535942b2a8f0e958acf6607ac0be52265ab31f7923bcd5e6"}, + {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5794944462509e49d4d458f4dbfb92c47539e7d8d15c796f141f474010084056"}, + {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:fe361f743cb3389b8efda21980d93eb55c1f1e3898269bc9a2a1d0bb7b1f6508"}, + {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e469990e28f1ad738f65a42dcfc17adaed9d0f325d55047593cb9033a0ab63df"}, + {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3c4747a3e2ead1589e647e64aad601981f01b68f9398ddf94d01e3dc0d1e57c7"}, + {file = "psutil-5.9.7-cp27-none-win32.whl", hash = "sha256:1d4bc4a0148fdd7fd8f38e0498639ae128e64538faa507df25a20f8f7fb2341c"}, + {file = "psutil-5.9.7-cp27-none-win_amd64.whl", hash = "sha256:4c03362e280d06bbbfcd52f29acd79c733e0af33d707c54255d21029b8b32ba6"}, + {file = "psutil-5.9.7-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e"}, + {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284"}, + {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe"}, + {file = "psutil-5.9.7-cp36-cp36m-win32.whl", hash = "sha256:b27f8fdb190c8c03914f908a4555159327d7481dac2f01008d483137ef3311a9"}, + {file = "psutil-5.9.7-cp36-cp36m-win_amd64.whl", hash = "sha256:44969859757f4d8f2a9bd5b76eba8c3099a2c8cf3992ff62144061e39ba8568e"}, + {file = "psutil-5.9.7-cp37-abi3-win32.whl", hash = "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68"}, + {file = "psutil-5.9.7-cp37-abi3-win_amd64.whl", hash = "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414"}, + {file = "psutil-5.9.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340"}, + {file = "psutil-5.9.7.tar.gz", hash = "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c"}, ] [package.extras] @@ -544,13 +542,13 @@ testutils = ["gitpython (>3)"] [[package]] name = "pytest" -version = "7.4.3" +version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, ] [package.dependencies] @@ -747,13 +745,13 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] From 09460f4be0e096212c69650c7722f9a6d9248cc1 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 19 Jan 2024 09:36:58 +0400 Subject: [PATCH 33/73] build: updated lock --- poetry.lock | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83ffe137..0d925845 100644 --- a/poetry.lock +++ b/poetry.lock @@ -616,7 +616,7 @@ tabulate = "^0.9.0" [package.source] type = "git" -url = "git@github.com:qiboteam/qibo.git" +url = "https://github.com/qiboteam/qibo.git" reference = "clifford_simulator_numba" resolved_reference = "df0550589f522e783175acad4a0fba05f99479f7" @@ -836,4 +836,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.9.0,<3.12" -content-hash = "1d8249dbfff5fd42b9a664818f6fa4de7b1d3c8e0535783aa93cd71737417c0c" +content-hash = "372112a05578a3d828cf79825e364d099074f147d11dacf9e1c278c052120c5c" diff --git a/pyproject.toml b/pyproject.toml index 8e9719b8..dc8edaa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers=[ [tool.poetry.dependencies] python=">=3.9.0,<3.12" numba=">=0.51.0" -qibo={ git = "git@github.com:qiboteam/qibo.git", branch = "clifford_simulator_numba" } +qibo={ git = "https://github.com/qiboteam/qibo.git", branch = "clifford_simulator_numba" } scipy = "^1.10.1" psutil = "^5.9.5" From 4fe78b114dcdcd83e22146be7adf188ae6594b46 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 19 Jan 2024 13:23:57 +0400 Subject: [PATCH 34/73] fix: moved import of gpu_operations --- src/qibojit/backends/gpu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 802b0931..5d274a2e 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -5,7 +5,6 @@ from qibo.backends.numpy import NumpyBackend from qibo.config import log, raise_error -from qibojit.backends import clifford_operations_gpu from qibojit.backends.cpu import NumbaBackend from qibojit.backends.matrices import CupyMatrices, CuQuantumMatrices, CustomMatrices @@ -102,6 +101,8 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() + from qibojit.backends import clifford_operations_gpu + spec = find_spec("qibo.backends.clifford_operations") self.clifford_operations = module_from_spec(spec) spec.loader.exec_module(self.clifford_operations) From 8b5fe364eeec402a6ec9cf020604960790ee8e13 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 22 Jan 2024 17:12:47 +0400 Subject: [PATCH 35/73] fix: removed some pylint checks --- .../backends/clifford_operations_cpu.py | 32 +++---- .../backends/clifford_operations_gpu.py | 83 ++++++++++++++++++- 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 24b0225d..195f00eb 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -7,7 +7,7 @@ def H(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) tmp = symplectic_matrix[i, q] symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] @@ -20,7 +20,7 @@ def CNOT(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( x[i, target_q] ^ ~z[i, control_q] ) @@ -35,7 +35,7 @@ def CZ(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -54,7 +54,7 @@ def S(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -66,7 +66,7 @@ def Z(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ ( (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) ) @@ -79,7 +79,7 @@ def X(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) ) @@ -92,7 +92,7 @@ def Y(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) ) @@ -105,7 +105,7 @@ def SX(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -117,7 +117,7 @@ def SDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -129,7 +129,7 @@ def SXDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -141,7 +141,7 @@ def RY_pi(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -155,7 +155,7 @@ def RY_3pi_2(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -169,7 +169,7 @@ def SWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[:-1, -1] = ( r[i] ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) @@ -201,7 +201,7 @@ def iSWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -235,7 +235,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) @@ -259,7 +259,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): def _rowsum(symplectic_matrix, h, i, nqubits): xi, xh = symplectic_matrix[i, :nqubits], symplectic_matrix[h, :nqubits] zi, zh = symplectic_matrix[i, nqubits:-1], symplectic_matrix[h, nqubits:-1] - for j in prange(len(h)): + for j in prange(len(h)): # pylint: disable=E0401 exp = np.zeros(nqubits, dtype=uint64) x1_eq_z1 = (xi[j] ^ zi[j]) == False x1_neq_z1 = ~x1_eq_z1 diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 42f164da..1d0bf4ce 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -1,6 +1,6 @@ from functools import cache -import cupy as cp +import cupy as cp # pylint: disable=E0401 import numpy as np GRIDDIM, BLOCKDIM = 1024, 128 @@ -653,12 +653,91 @@ def _random_outcome(state, p, q, nqubits): return state.ravel(), outcome +__apply_rowsum = """ +__device__ void _apply_rowsum(bool* symplectic_matrix, const int& h, const int& i, const int& nqubits, const int& dim, unsigned int* global_exp) { + unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; + unsigned int ntid_x = gridDim.x * blockDim.x; + const int last = dim - 1; + __shared__ unsigned int exp = 0; + for(int k = tid_x; k < nqubits; k += ntid_x) { + unsigned int kz = nqubits + k; + bool x1_eq_z1 = symplectic_matrix[i * dim + k] == symplectic_matrix[i * dim + kz]; + bool x1_eq_0 = symplectic_matrix[i * dim + k] == false; + if (x1_eq_z1) { + if (not x1_eq_0) { + exp += ((int) symplectic_matrix[h * dim + kz]) - + (int) symplectic_matrix[h * dim + k]; + } + } else { + if (x1_eq_0) { + exp += ((int) symplectic_matrix[h * dim + k]) * ( + 1 - 2 * (int) symplectic_matrix[h * dim + kz] + ); + } else { + exp += ((int) symplectic_matrix[h * dim + kz]) * ( + 2 * (int) symplectic_matrix[h * dim + k] - 1 + ); + } + } + } + __syncthreads(); + unsigned int iteration = (int) (dim - 1) / gridDim.y + 1; + for (int k = blockIdx.x; k < (int) (nqubits / (gridDim.x * blockDim.x)); k += gridDim.x) { + if (threadIdx.x == 0) { + global_exp[iteration * blockIdx.y * gridDim.x + k] = exp; + } + } + for (int k = 0; k < gridDim.x; k++) { + if (threadIdx.x == 0 && blobkIdx.x == 0) { + global_exp[blockIdx.y * iteration] += global_exp[iteration * blockIdx.y + k]; + } + } + + symplectic_matrix[h[j] * dim + last] = ( + 2 * symplectic_matrix[h * dim + last] + 2 * symplectic_matrix[i * dim + last] + exp[j] + ) % 4 != 0; + } + for(int k = tid_x; k < nqubits; k += ntid_x) { + unsigned int kz = nqubits + k; + symplectic_matrix[h[j] * dim + k] = ( + symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] + ); + symplectic_matrix[h[j] * dim + kz] = ( + symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] + ); + } + } +} +""" + +_get_h = """ +__device__ void _get_h(bool* state, int& p, int& q, int& dim, int* g_h, int* g_nrows) { + const unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; + const unsigned int ntid = gridDim.x * blockDim.x; + __shared__ unsigned int nrows; + __shared__ unsigned int h[]; + unsigned int n_iterations = 1; + for(int j = tid_x; j < dim - 1; j += ntid_x) { + if (state[j * dim + q] && j != p) { + h[n_iterations * blockIdx.x + nrows + j] = j; + nrows += 1; + } + n_iterations += 1; + } + for(int j = tid_x; j < dim - 1; j += ntid_x) { + if (threadIdx.x == 0) { + g_nrows[j] + } + } +""" + __random_outcome = f""" #include -{_apply_rowsum} +{__apply_rowsum} __device__ void random_outcome(bool* state, int& p, int& q, int& nqubits, int& dim, int& outcome) {{ unsigned int tid_y = blockIdx.y; unsigned int ntid_y = gridDim.y; + __global__ unsigned int global_exp[1024]; for(int j = tid_y; j < dim - 1; j += ntid_y) {{ if (state[j * dim + q] && j != p) {{ _apply_rowsum(state, j, p, nqubits, dim) From 7d08f2f42dad88c4d7fcb32c8062b26f6eae6592 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 22 Jan 2024 17:21:41 +0400 Subject: [PATCH 36/73] fix: pylint disable --- .../backends/clifford_operations_cpu.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 195f00eb..d268af79 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -7,7 +7,7 @@ def H(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) tmp = symplectic_matrix[i, q] symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] @@ -20,7 +20,7 @@ def CNOT(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( x[i, target_q] ^ ~z[i, control_q] ) @@ -35,7 +35,7 @@ def CZ(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -54,7 +54,7 @@ def S(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -66,7 +66,7 @@ def Z(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ ( (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) ) @@ -79,7 +79,7 @@ def X(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) ) @@ -92,7 +92,7 @@ def Y(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) ) @@ -105,7 +105,7 @@ def SX(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -117,7 +117,7 @@ def SDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -129,7 +129,7 @@ def SXDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -141,7 +141,7 @@ def RY_pi(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -155,7 +155,7 @@ def RY_3pi_2(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -169,7 +169,7 @@ def SWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[:-1, -1] = ( r[i] ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) @@ -201,7 +201,7 @@ def iSWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -235,7 +235,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=E0401 + for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) @@ -259,7 +259,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): def _rowsum(symplectic_matrix, h, i, nqubits): xi, xh = symplectic_matrix[i, :nqubits], symplectic_matrix[h, :nqubits] zi, zh = symplectic_matrix[i, nqubits:-1], symplectic_matrix[h, nqubits:-1] - for j in prange(len(h)): # pylint: disable=E0401 + for j in prange(len(h)): # pylint: disable=not-an-iterable exp = np.zeros(nqubits, dtype=uint64) x1_eq_z1 = (xi[j] ^ zi[j]) == False x1_neq_z1 = ~x1_eq_z1 From 6834afd7bfddb535d01048f26a4e9b5c3f31c90c Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 29 Jan 2024 12:12:44 +0400 Subject: [PATCH 37/73] feat: adapted numba rowsum --- .../backends/clifford_operations_cpu.py | 47 ++++++++++--------- .../backends/clifford_operations_gpu.py | 33 +++++++++---- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index d268af79..647800be 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -255,10 +255,16 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -@njit("b1[:,:](b1[:,:], u8[:], u8[:], u8)", parallel=True, cache=True) -def _rowsum(symplectic_matrix, h, i, nqubits): +@njit( + "b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True, fastmath=True +) +def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): xi, xh = symplectic_matrix[i, :nqubits], symplectic_matrix[h, :nqubits] zi, zh = symplectic_matrix[i, nqubits:-1], symplectic_matrix[h, nqubits:-1] + if determined: + g_r = np.array([False for _ in range(h.shape[0])]) + g_xi_xh = xi.copy() + g_zi_zh = xi.copy() for j in prange(len(h)): # pylint: disable=not-an-iterable exp = np.zeros(nqubits, dtype=uint64) x1_eq_z1 = (xi[j] ^ zi[j]) == False @@ -272,29 +278,24 @@ def _rowsum(symplectic_matrix, h, i, nqubits): exp[ind3] = zh[j, ind3].astype(uint64) * (2 * xh[j, ind3].astype(uint64) - 1) exp[ind4] = xh[j, ind4].astype(uint64) * (1 - 2 * zh[j, ind4].astype(uint64)) - symplectic_matrix[h[j], -1] = ( + r = ( 2 * symplectic_matrix[h[j], -1] + 2 * symplectic_matrix[i[j], -1] + np.sum(exp) ) % 4 != 0 - symplectic_matrix[h[j], :nqubits] = xi[j] ^ xh[j] - symplectic_matrix[h[j], nqubits:-1] = zi[j] ^ zh[j] + xi_xh = xi[j] ^ xh[j] + zi_zh = zi[j] ^ zh[j] + if determined: # for some reason xor reduction fails here + g_r[j] = r # thus, I cannot do g_r += r here + g_xi_xh[j] = xi_xh + g_zi_zh[j] = zi_zh + else: + symplectic_matrix[h[j], -1] = r + symplectic_matrix[h[j], :nqubits] = xi_xh + symplectic_matrix[h[j], nqubits:-1] = zi_zh + if determined: + for j in prange(len(g_r)): + symplectic_matrix[h[0], -1] ^= g_r[j] + symplectic_matrix[h[0], :nqubits] ^= g_xi_xh[j] + symplectic_matrix[h[0], nqubits:-1] ^= g_zi_zh[j] return symplectic_matrix - - -""" -# Not parallelizable? -@njit("Tuple((b1[:,:], u8))(b1[:,:], u8, u8)", parallel=False, cache=True) -def _determined_outcome(state, q, nqubits): - state[-1, :] = False - indices = state[:nqubits, q].nonzero()[0] - for i in prange(len(indices)): - state = _rowsum( - state, - np.array([2 * nqubits], dtype=uint64), - np.array([indices[i] + nqubits], dtype=uint64), - nqubits, - include_scratch=True, - ) - return state, uint64(state[-1, -1]) -""" diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 1d0bf4ce..6d025180 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -711,26 +711,41 @@ def _random_outcome(state, p, q, nqubits): """ _get_h = """ -__device__ void _get_h(bool* state, int& p, int& q, int& dim, int* g_h, int* g_nrows) { +__device__ void _get_h(bool* state, int& p, int& q, int& dim, int* g_h, int& g_nrows) { const unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; const unsigned int ntid = gridDim.x * blockDim.x; - __shared__ unsigned int nrows; - __shared__ unsigned int h[]; - unsigned int n_iterations = 1; + __shared__ unsigned int nrows = 0; + __shared__ unsigned int h[128]; // 128 fixed block dimension + unsigned int n_iterations = 0; for(int j = tid_x; j < dim - 1; j += ntid_x) { if (state[j * dim + q] && j != p) { - h[n_iterations * blockIdx.x + nrows + j] = j; nrows += 1; + h[nrows - 1] = j; } - n_iterations += 1; - } - for(int j = tid_x; j < dim - 1; j += ntid_x) { + int idx = atomicAdd(&g_nrows, 1); + g_h[idx] = h[] if (threadIdx.x == 0) { - g_nrows[j] + for(int k = 0; k < nrows; k ++) { + g_h[(n_iterations * gridDim.x) + blockIdx.x * blockDim.x + k] = h[k]; + } + g_nrows[(n_iterations * gridDim.x) + blockIdx.x] = nrows; } + n_iterations += 1; } +__global__ void get_h(bool* state, int& p, int& q, int& dim, int* g_h, int* g_nrows) { + _get_h(state, p, q, dim, g_h, g_nrows); + if threadIdx.x +} """ +_get_h = cp.RawKernel(_get_h, "_get_h", options=("--std=c++11",)) + + +def get_h(symplectic_matrix, p, q, nqubits): + g_h = cp.zeros(_get_dim(nqubits)) + g_nrows = cp.zeros(math.ceil(_get_dim(nqubits) / 128)) + + __random_outcome = f""" #include {__apply_rowsum} From e0cff64b8ae25250bbb36dd22a05b2ae969af891 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 29 Jan 2024 14:49:41 +0400 Subject: [PATCH 38/73] feat: updated rowsum for cupy (to be tested) --- .../backends/clifford_operations_gpu.py | 115 ++++++------------ 1 file changed, 36 insertions(+), 79 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 6d025180..cb864957 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -4,8 +4,7 @@ import numpy as np GRIDDIM, BLOCKDIM = 1024, 128 -BLOCKDIM_2D = (64, 16) -GRIDDIM_2D = (32, 8) +GRIDDIM_2D = (1024, 1024) apply_one_qubit_kernel = """ extern "C" @@ -549,50 +548,65 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): return symplectic_matrix -# This might be optimized using shared memory and warp reduction _apply_rowsum = """ -__device__ void _apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int& nqubits, const int& nrows, long* exp, const int& dim) { +__device__ void _apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int& nqubits, const bool& determined, const int& nrows, long* g_exp, const int& dim) { unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; - unsigned int tid_y = blockIdx.y * blockDim.y + threadIdx.y; + unsigned int bid_y = blockIdx.y; unsigned int ntid_x = gridDim.x * blockDim.x; - unsigned int ntid_y = gridDim.y * blockDim.y; + unsigned int nbid_y = gridDim.y; const int last = dim - 1; - for(int j = tid_y; j < nrows; j += ntid_y) { + __shared__ int exp = 0; + for(int j = bid_y; j < nrows; j += nbid_y) { for(int k = tid_x; k < nqubits; k += ntid_x) { unsigned int kz = nqubits + k; bool x1_eq_z1 = symplectic_matrix[i[j] * dim + k] == symplectic_matrix[i[j] * dim + kz]; bool x1_eq_0 = symplectic_matrix[i[j] * dim + k] == false; if (x1_eq_z1) { if (not x1_eq_0) { - exp[j] += ((int) symplectic_matrix[h[j] * dim + kz]) - + exp += ((int) symplectic_matrix[h[j] * dim + kz]) - (int) symplectic_matrix[h[j] * dim + k]; } } else { if (x1_eq_0) { - exp[j] += ((int) symplectic_matrix[h[j] * dim + k]) * ( + exp += ((int) symplectic_matrix[h[j] * dim + k]) * ( 1 - 2 * (int) symplectic_matrix[h[j] * dim + kz] ); } else { - exp[j] += ((int) symplectic_matrix[h[j] * dim + kz]) * ( + exp += ((int) symplectic_matrix[h[j] * dim + kz]) * ( 2 * (int) symplectic_matrix[h[j] * dim + k] - 1 ); } } } + if (threadIdx.x == 0 && tid_x < nqubits) { + g_exp[blockIdx.y] += exp; + } __syncthreads(); if (threadIdx.x == 0 && blockIdx.x == 0) { symplectic_matrix[h[j] * dim + last] = ( - 2 * symplectic_matrix[h[j] * dim + last] + 2 * symplectic_matrix[i[j] * dim + last] + exp[j] + 2 * symplectic_matrix[h[j] * dim + last] + 2 * symplectic_matrix[i[j] * dim + last] + g_exp[j] ) % 4 != 0; } - for(int k = tid_x; k < nqubits; k += ntid_x) { - unsigned int kz = nqubits + k; - symplectic_matrix[h[j] * dim + k] = ( - symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] - ); - symplectic_matrix[h[j] * dim + kz] = ( - symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] - ); + if (determined) { + for(int k = tid_x; k < nqubits; k += ntid_x) { + unsigned int kz = nqubits + k; + symplectic_matrix[h[j] * dim + k] ^= ( + symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] + ); + symplectic_matrix[h[j] * dim + kz] ^= ( + symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] + ); + } + } else { + for(int k = tid_x; k < nqubits; k += ntid_x) { + unsigned int kz = nqubits + k; + symplectic_matrix[h[j] * dim + k] = ( + symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] + ); + symplectic_matrix[h[j] * dim + kz] = ( + symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] + ); + } } } } @@ -601,8 +615,8 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): apply_rowsum = f""" {_apply_rowsum} extern "C" -__global__ void apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int nqubits, const int nrows, long* exp, const int dim) {{ - _apply_rowsum(symplectic_matrix, h, i, nqubits, nrows, exp, dim); +__global__ void apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int nqubits, const bool& determined, const int nrows, long* g_exp, const int dim) {{ + _apply_rowsum(symplectic_matrix, h, i, nqubits, determined, nrows, g_exp, dim); }} """ @@ -619,7 +633,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits): nrows = len(h) exp = cp.zeros(len(h), dtype=int) apply_rowsum( - GRIDDIM_2D, BLOCKDIM_2D, (symplectic_matrix, h, i, nqubits, nrows, exp, dim) + GRIDDIM_2D, BLOCKDIM, (symplectic_matrix, h, i, nqubits, nrows, exp, dim) ) return symplectic_matrix @@ -653,63 +667,6 @@ def _random_outcome(state, p, q, nqubits): return state.ravel(), outcome -__apply_rowsum = """ -__device__ void _apply_rowsum(bool* symplectic_matrix, const int& h, const int& i, const int& nqubits, const int& dim, unsigned int* global_exp) { - unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; - unsigned int ntid_x = gridDim.x * blockDim.x; - const int last = dim - 1; - __shared__ unsigned int exp = 0; - for(int k = tid_x; k < nqubits; k += ntid_x) { - unsigned int kz = nqubits + k; - bool x1_eq_z1 = symplectic_matrix[i * dim + k] == symplectic_matrix[i * dim + kz]; - bool x1_eq_0 = symplectic_matrix[i * dim + k] == false; - if (x1_eq_z1) { - if (not x1_eq_0) { - exp += ((int) symplectic_matrix[h * dim + kz]) - - (int) symplectic_matrix[h * dim + k]; - } - } else { - if (x1_eq_0) { - exp += ((int) symplectic_matrix[h * dim + k]) * ( - 1 - 2 * (int) symplectic_matrix[h * dim + kz] - ); - } else { - exp += ((int) symplectic_matrix[h * dim + kz]) * ( - 2 * (int) symplectic_matrix[h * dim + k] - 1 - ); - } - } - } - __syncthreads(); - unsigned int iteration = (int) (dim - 1) / gridDim.y + 1; - for (int k = blockIdx.x; k < (int) (nqubits / (gridDim.x * blockDim.x)); k += gridDim.x) { - if (threadIdx.x == 0) { - global_exp[iteration * blockIdx.y * gridDim.x + k] = exp; - } - } - for (int k = 0; k < gridDim.x; k++) { - if (threadIdx.x == 0 && blobkIdx.x == 0) { - global_exp[blockIdx.y * iteration] += global_exp[iteration * blockIdx.y + k]; - } - } - - symplectic_matrix[h[j] * dim + last] = ( - 2 * symplectic_matrix[h * dim + last] + 2 * symplectic_matrix[i * dim + last] + exp[j] - ) % 4 != 0; - } - for(int k = tid_x; k < nqubits; k += ntid_x) { - unsigned int kz = nqubits + k; - symplectic_matrix[h[j] * dim + k] = ( - symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] - ); - symplectic_matrix[h[j] * dim + kz] = ( - symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] - ); - } - } -} -""" - _get_h = """ __device__ void _get_h(bool* state, int& p, int& q, int& dim, int* g_h, int& g_nrows) { const unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; From 5b34d15d15db6c5074bf4c5221969322b726acb6 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 29 Jan 2024 16:12:32 +0400 Subject: [PATCH 39/73] fix: fix cupy rowsum --- .../backends/clifford_operations_gpu.py | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index cb864957..ff5e950e 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -555,7 +555,10 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): unsigned int ntid_x = gridDim.x * blockDim.x; unsigned int nbid_y = gridDim.y; const int last = dim - 1; - __shared__ int exp = 0; + __shared__ int exp; + if (threadIdx.x == 0) { + exp = 0; + } for(int j = bid_y; j < nrows; j += nbid_y) { for(int k = tid_x; k < nqubits; k += ntid_x) { unsigned int kz = nqubits + k; @@ -579,7 +582,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): } } if (threadIdx.x == 0 && tid_x < nqubits) { - g_exp[blockIdx.y] += exp; + g_exp[j] += exp; } __syncthreads(); if (threadIdx.x == 0 && blockIdx.x == 0) { @@ -615,7 +618,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): apply_rowsum = f""" {_apply_rowsum} extern "C" -__global__ void apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int nqubits, const bool& determined, const int nrows, long* g_exp, const int dim) {{ +__global__ void apply_rowsum(bool* symplectic_matrix, const long* h, const long* i, const int nqubits, const bool determined, const int nrows, long* g_exp, const int dim) {{ _apply_rowsum(symplectic_matrix, h, i, nqubits, determined, nrows, g_exp, dim); }} """ @@ -628,12 +631,14 @@ def _get_dim(nqubits): return 2 * nqubits + 1 -def _rowsum(symplectic_matrix, h, i, nqubits): +def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): dim = _get_dim(nqubits) nrows = len(h) exp = cp.zeros(len(h), dtype=int) apply_rowsum( - GRIDDIM_2D, BLOCKDIM, (symplectic_matrix, h, i, nqubits, nrows, exp, dim) + GRIDDIM_2D, + (BLOCKDIM,), + (symplectic_matrix, h, i, nqubits, determined, nrows, exp, dim), ) return symplectic_matrix @@ -657,6 +662,7 @@ def _random_outcome(state, p, q, nqubits): h, p.astype(cp.uint) * cp.ones(h.shape[0], dtype=np.uint), nqubits, + False, ) state = state.reshape(dim, dim) state[p - nqubits, :] = state[p, :] @@ -705,7 +711,7 @@ def get_h(symplectic_matrix, p, q, nqubits): __random_outcome = f""" #include -{__apply_rowsum} +{_apply_rowsum} __device__ void random_outcome(bool* state, int& p, int& q, int& nqubits, int& dim, int& outcome) {{ unsigned int tid_y = blockIdx.y; unsigned int ntid_y = gridDim.y; @@ -731,12 +737,14 @@ def get_h(symplectic_matrix, p, q, nqubits): def _determined_outcome(state, q, nqubits): dim = _get_dim(nqubits) - state.reshape(dim, dim)[-1, :] = False - for i in state.reshape(dim, dim)[:nqubits, q].nonzero()[0]: - state = _rowsum( - state, - cp.array([2 * nqubits], dtype=np.uint), - cp.array([i + nqubits], dtype=np.uint), - nqubits, - ) + state = state.reshape(dim, dim) + state[-1, :] = False + idx = state[:nqubits, q].nonzero()[0] + state = _rowsum( + state.ravel(), + (2 * nqubits * cp.ones(idx.shape, dtype=np.uint)).astype(np.uint), + idx.astype(np.uint), + nqubits, + True, + ) return state, state[dim * dim - 1].astype(cp.uint) From 249c0f9eae9dcce43dcd53c17c05c98765dd860f Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Tue, 30 Jan 2024 11:48:13 +0400 Subject: [PATCH 40/73] refactor: refactor cupy rowsum --- .../backends/clifford_operations_gpu.py | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index ff5e950e..c4cf8712 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -590,25 +590,22 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): 2 * symplectic_matrix[h[j] * dim + last] + 2 * symplectic_matrix[i[j] * dim + last] + g_exp[j] ) % 4 != 0; } - if (determined) { - for(int k = tid_x; k < nqubits; k += ntid_x) { - unsigned int kz = nqubits + k; - symplectic_matrix[h[j] * dim + k] ^= ( - symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] - ); - symplectic_matrix[h[j] * dim + kz] ^= ( - symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] - ); - } - } else { - for(int k = tid_x; k < nqubits; k += ntid_x) { - unsigned int kz = nqubits + k; - symplectic_matrix[h[j] * dim + k] = ( - symplectic_matrix[i[j] * dim + k] ^ symplectic_matrix[h[j] * dim + k] - ); - symplectic_matrix[h[j] * dim + kz] = ( - symplectic_matrix[i[j] * dim + kz] ^ symplectic_matrix[h[j] * dim + kz] - ); + for(int k = tid_x; k < nqubits; k += ntid_x) { + unsigned int kz = nqubits + k; + unsigned int row_i = i[j] * dim; + unsigned int row_h = h[j] * dim; + bool xi_xh = ( + symplectic_matrix[row_i + k] ^ symplectic_matrix[row_h + k] + ); + bool zi_zh = ( + symplectic_matrix[row_i + kz] ^ symplectic_matrix[row_h + kz] + ); + if (determined) { + symplectic_matrix[row_h + k] ^= xi_xh; + symplectic_matrix[row_h + kz] ^= zi_zh; + } else { + symplectic_matrix[row_h + k] = xi_xh; + symplectic_matrix[row_h + kz] = zi_zh; } } } From 6971051a6d27527c71459b489743bab348d2f3bf Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 31 Jan 2024 14:15:59 +0400 Subject: [PATCH 41/73] fix: bugfix to numba SWAP --- src/qibojit/backends/clifford_operations_cpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 647800be..fbfee32c 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -170,7 +170,7 @@ def SWAP(symplectic_matrix, control_q, target_q, nqubits): x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable - symplectic_matrix[:-1, -1] = ( + symplectic_matrix[i, -1] = ( r[i] ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) ^ ( From 4e6e48135c3fb20004c2ffa67b777ea530745bcb Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Tue, 6 Feb 2024 11:46:45 +0400 Subject: [PATCH 42/73] fix: fix cupy determined outcome --- src/qibojit/backends/clifford_operations_gpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index c4cf8712..69cea033 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -736,7 +736,7 @@ def _determined_outcome(state, q, nqubits): dim = _get_dim(nqubits) state = state.reshape(dim, dim) state[-1, :] = False - idx = state[:nqubits, q].nonzero()[0] + idx = state[:nqubits, q].nonzero()[0] + nqubits state = _rowsum( state.ravel(), (2 * nqubits * cp.ones(idx.shape, dtype=np.uint)).astype(np.uint), From 1c49fc4ac49f9216e0a5762d6105543db7b659d2 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 7 Feb 2024 12:23:14 +0400 Subject: [PATCH 43/73] fix: review updates --- src/qibojit/backends/cpu.py | 4 ++-- src/qibojit/backends/gpu.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index ed0276a9..315c44f5 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -2,7 +2,7 @@ import numpy as np from numba import njit -from qibo.backends import clifford_operations +from qibo.backends import _clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log from qibo.gates.abstract import ParametrizedGate @@ -74,7 +74,7 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - spec = find_spec("qibo.backends.clifford_operations") + spec = find_spec("qibo.backends._clifford_operations") self.clifford_operations = module_from_spec(spec) spec.loader.exec_module(self.clifford_operations) for method in dir(clifford_operations_cpu): diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 5d274a2e..f4f041fb 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -1,7 +1,7 @@ from importlib.util import find_spec, module_from_spec import numpy as np -from qibo.backends import clifford_operations +from qibo.backends import _clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log, raise_error @@ -103,7 +103,7 @@ def kernel_loader(name, ktype): from qibojit.backends import clifford_operations_gpu - spec = find_spec("qibo.backends.clifford_operations") + spec = find_spec("qibo.backends._clifford_operations") self.clifford_operations = module_from_spec(spec) spec.loader.exec_module(self.clifford_operations) for method in dir(clifford_operations_gpu): @@ -158,10 +158,10 @@ def to_numpy(self, x): def issparse(self, x): return self.sparse.issparse(x) or self.npsparse.issparse(x) - def clifford_pre_execution_reshape(self, state): + def _clifford_pre_execution_reshape(self, state): return state.ravel() - def clifford_post_execution_reshape(self, state, nqubits): + def _clifford_post_execution_reshape(self, state, nqubits): dim = 2 * nqubits + 1 return state.reshape(dim, dim) From 28972869fbf3377052b8e42176eb18c2ef8dc66d Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 7 Feb 2024 12:28:46 +0400 Subject: [PATCH 44/73] fix: pylint fix --- .../backends/clifford_operations_cpu.py | 2 +- .../backends/clifford_operations_gpu.py | 62 ------------------- 2 files changed, 1 insertion(+), 63 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index fbfee32c..e02ae9be 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -294,7 +294,7 @@ def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): symplectic_matrix[h[j], :nqubits] = xi_xh symplectic_matrix[h[j], nqubits:-1] = zi_zh if determined: - for j in prange(len(g_r)): + for j in prange(len(g_r)): # pylint: disable=not-an-iterable symplectic_matrix[h[0], -1] ^= g_r[j] symplectic_matrix[h[0], :nqubits] ^= g_xi_xh[j] symplectic_matrix[h[0], nqubits:-1] ^= g_zi_zh[j] diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 69cea033..2ff37f97 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -670,68 +670,6 @@ def _random_outcome(state, p, q, nqubits): return state.ravel(), outcome -_get_h = """ -__device__ void _get_h(bool* state, int& p, int& q, int& dim, int* g_h, int& g_nrows) { - const unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; - const unsigned int ntid = gridDim.x * blockDim.x; - __shared__ unsigned int nrows = 0; - __shared__ unsigned int h[128]; // 128 fixed block dimension - unsigned int n_iterations = 0; - for(int j = tid_x; j < dim - 1; j += ntid_x) { - if (state[j * dim + q] && j != p) { - nrows += 1; - h[nrows - 1] = j; - } - int idx = atomicAdd(&g_nrows, 1); - g_h[idx] = h[] - if (threadIdx.x == 0) { - for(int k = 0; k < nrows; k ++) { - g_h[(n_iterations * gridDim.x) + blockIdx.x * blockDim.x + k] = h[k]; - } - g_nrows[(n_iterations * gridDim.x) + blockIdx.x] = nrows; - } - n_iterations += 1; - } -__global__ void get_h(bool* state, int& p, int& q, int& dim, int* g_h, int* g_nrows) { - _get_h(state, p, q, dim, g_h, g_nrows); - if threadIdx.x -} -""" - -_get_h = cp.RawKernel(_get_h, "_get_h", options=("--std=c++11",)) - - -def get_h(symplectic_matrix, p, q, nqubits): - g_h = cp.zeros(_get_dim(nqubits)) - g_nrows = cp.zeros(math.ceil(_get_dim(nqubits) / 128)) - - -__random_outcome = f""" -#include -{_apply_rowsum} -__device__ void random_outcome(bool* state, int& p, int& q, int& nqubits, int& dim, int& outcome) {{ - unsigned int tid_y = blockIdx.y; - unsigned int ntid_y = gridDim.y; - __global__ unsigned int global_exp[1024]; - for(int j = tid_y; j < dim - 1; j += ntid_y) {{ - if (state[j * dim + q] && j != p) {{ - _apply_rowsum(state, j, p, nqubits, dim) - }} - }} - unsigned int tid_x = blockIdx.x * blockDim.x + threadIdx.x; - for(int j = tid_x * (1 + tid_y); j < dim; j += ntid_y) {{ - state[(p - nqubits) * dim + j] = state[p * dim + j]; - state[p * dim + j] = false; - }} - if (threadIdx.x == 0 && blockIdx.x == 0 && blockIdx.y == 0) {{ - outcome = rand() % 2; - state[p * dim + dim] = (bool) outcome; - state[p * dim + nqubits + q] = true; - }} -}} -""" - - def _determined_outcome(state, q, nqubits): dim = _get_dim(nqubits) state = state.reshape(dim, dim) From f9ea2ed9347e3131845e7eb7b9f9eda740e16ace Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 8 Feb 2024 15:15:56 +0400 Subject: [PATCH 45/73] refactor: passing state[:-1] --- .../backends/clifford_operations_cpu.py | 32 ++++++++++--------- .../backends/clifford_operations_gpu.py | 15 +++++---- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index e02ae9be..674ed899 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -7,7 +7,7 @@ def H(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) tmp = symplectic_matrix[i, q] symplectic_matrix[i, q] = symplectic_matrix[i, nqubits + q] @@ -20,7 +20,8 @@ def CNOT(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, control_q] & z[i, target_q]) & ( x[i, target_q] ^ ~z[i, control_q] ) @@ -35,7 +36,8 @@ def CZ(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -54,7 +56,7 @@ def S(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & z[i, q]) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -66,7 +68,7 @@ def Z(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ ( (x[i, q] & z[i, q]) ^ x[i, q] & (z[i, q] ^ x[i, q]) ) @@ -79,7 +81,7 @@ def X(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (z[i, q] & x[i, q]) ) @@ -92,7 +94,7 @@ def Y(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) ^ (x[i, q] & (z[i, q] ^ x[i, q])) ) @@ -105,7 +107,7 @@ def SX(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -117,7 +119,7 @@ def SDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) symplectic_matrix[i, nqubits + q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -129,7 +131,7 @@ def SXDG(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & x[i, q]) symplectic_matrix[i, q] = z[i, q] ^ x[i, q] return symplectic_matrix @@ -141,7 +143,7 @@ def RY_pi(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (x[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -155,7 +157,7 @@ def RY_3pi_2(symplectic_matrix, q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = r[i] ^ (z[i, q] & (z[i, q] ^ x[i, q])) zq = symplectic_matrix[i, nqubits + q] symplectic_matrix[i, nqubits + q] = symplectic_matrix[i, q] @@ -169,7 +171,7 @@ def SWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, control_q] & z[i, target_q] & (x[i, target_q] ^ ~z[i, control_q])) @@ -201,7 +203,7 @@ def iSWAP(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & z[i, target_q]) @@ -235,7 +237,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): r = symplectic_matrix[:-1, -1] x = symplectic_matrix[:-1, :nqubits] z = symplectic_matrix[:-1, nqubits:-1] - for i in prange(symplectic_matrix.shape[0] - 1): # pylint: disable=not-an-iterable + for i in prange(symplectic_matrix.shape[0]): # pylint: disable=not-an-iterable symplectic_matrix[i, -1] = ( r[i] ^ (x[i, target_q] & (z[i, target_q] ^ x[i, target_q])) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 2ff37f97..d720ced8 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -6,6 +6,12 @@ GRIDDIM, BLOCKDIM = 1024, 128 GRIDDIM_2D = (1024, 1024) + +@cache +def _get_dim(nqubits): + return 2 * nqubits + 1 + + apply_one_qubit_kernel = """ extern "C" __global__ void apply_{}(bool* symplectic_matrix, const int q, const int nqubits, const int qz, const int dim) {{ @@ -23,14 +29,14 @@ def one_qubit_kernel_launcher(kernel, symplectic_matrix, q, nqubits): qz = nqubits + q - dim = 2 * nqubits + 1 + dim = _get_dim(nqubits) return kernel((GRIDDIM,), (BLOCKDIM,), (symplectic_matrix, q, nqubits, qz, dim)) def two_qubits_kernel_launcher(kernel, symplectic_matrix, control_q, target_q, nqubits): cqz = nqubits + control_q tqz = nqubits + target_q - dim = 2 * nqubits + 1 + dim = _get_dim(nqubits) return kernel( (GRIDDIM,), (BLOCKDIM,), @@ -623,11 +629,6 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): apply_rowsum = cp.RawKernel(apply_rowsum, "apply_rowsum", options=("--std=c++11",)) -@cache -def _get_dim(nqubits): - return 2 * nqubits + 1 - - def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): dim = _get_dim(nqubits) nrows = len(h) From 3b28b4a3149bcb404090df5674de8407fe10068f Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 8 Feb 2024 15:53:30 +0400 Subject: [PATCH 46/73] refactor: changing operations overloading method --- src/qibojit/backends/cpu.py | 18 +++++++----------- src/qibojit/backends/gpu.py | 18 +++++++----------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 315c44f5..681881cf 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,5 +1,3 @@ -from importlib.util import find_spec, module_from_spec - import numpy as np from numba import njit from qibo.backends import _clifford_operations @@ -74,15 +72,13 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - spec = find_spec("qibo.backends._clifford_operations") - self.clifford_operations = module_from_spec(spec) - spec.loader.exec_module(self.clifford_operations) - for method in dir(clifford_operations_cpu): - setattr( - self.clifford_operations, - method, - getattr(clifford_operations_cpu, method), - ) + class CliffordOperations: + pass + + self.clifford_operations = CliffordOperations() + for operations in (_clifford_operations, clifford_operations_cpu): + for method in dir(operations): + setattr(self.clifford_operations, method, getattr(operations, method)) def set_precision(self, precision): if precision != self.precision: diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index f4f041fb..2e8115ab 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -1,5 +1,3 @@ -from importlib.util import find_spec, module_from_spec - import numpy as np from qibo.backends import _clifford_operations from qibo.backends.numpy import NumpyBackend @@ -103,15 +101,13 @@ def kernel_loader(name, ktype): from qibojit.backends import clifford_operations_gpu - spec = find_spec("qibo.backends._clifford_operations") - self.clifford_operations = module_from_spec(spec) - spec.loader.exec_module(self.clifford_operations) - for method in dir(clifford_operations_gpu): - setattr( - self.clifford_operations, - method, - getattr(clifford_operations_gpu, method), - ) + class CliffordOperations: + pass + + self.clifford_operations = CliffordOperations() + for operations in (_clifford_operations, clifford_operations_gpu): + for method in dir(operations): + setattr(self.clifford_operations, method, getattr(operations, method)) def set_precision(self, precision): super().set_precision(precision) From ba7e09ce6308c1bd875aba4351e81e619edeea53 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 9 Feb 2024 11:14:46 +0400 Subject: [PATCH 47/73] build: update poetry lock --- poetry.lock | 394 ++++++++++++++++++++++++++-------------------------- 1 file changed, 196 insertions(+), 198 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0d925845..8db772bc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -61,63 +61,63 @@ files = [ [[package]] name = "coverage" -version = "7.4.0" +version = "7.4.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, - {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, - {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, - {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, - {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, - {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, - {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, - {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, - {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, - {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, - {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, - {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, - {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, - {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [package.dependencies] @@ -128,17 +128,18 @@ toml = ["tomli"] [[package]] name = "dill" -version = "0.3.7" +version = "0.3.8" description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "exceptiongroup" @@ -275,35 +276,32 @@ files = [ [[package]] name = "llvmlite" -version = "0.41.1" +version = "0.42.0" description = "lightweight wrapper around basic LLVM functionality" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "llvmlite-0.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1e1029d47ee66d3a0c4d6088641882f75b93db82bd0e6178f7bd744ebce42b9"}, - {file = "llvmlite-0.41.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150d0bc275a8ac664a705135e639178883293cf08c1a38de3bbaa2f693a0a867"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eee5cf17ec2b4198b509272cf300ee6577229d237c98cc6e63861b08463ddc6"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd0338da625346538f1173a17cabf21d1e315cf387ca21b294ff209d176e244"}, - {file = "llvmlite-0.41.1-cp310-cp310-win32.whl", hash = "sha256:fa1469901a2e100c17eb8fe2678e34bd4255a3576d1a543421356e9c14d6e2ae"}, - {file = "llvmlite-0.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:2b76acee82ea0e9304be6be9d4b3840208d050ea0dcad75b1635fa06e949a0ae"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:210e458723436b2469d61b54b453474e09e12a94453c97ea3fbb0742ba5a83d8"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:855f280e781d49e0640aef4c4af586831ade8f1a6c4df483fb901cbe1a48d127"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67340c62c93a11fae482910dc29163a50dff3dfa88bc874872d28ee604a83be"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2181bb63ef3c607e6403813421b46982c3ac6bfc1f11fa16a13eaafb46f578e6"}, - {file = "llvmlite-0.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:9564c19b31a0434f01d2025b06b44c7ed422f51e719ab5d24ff03b7560066c9a"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5940bc901fb0325970415dbede82c0b7f3e35c2d5fd1d5e0047134c2c46b3281"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b0a9a47c28f67a269bb62f6256e63cef28d3c5f13cbae4fab587c3ad506778b"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8afdfa6da33f0b4226af8e64cfc2b28986e005528fbf944d0a24a72acfc9432"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8454c1133ef701e8c050a59edd85d238ee18bb9a0eb95faf2fca8b909ee3c89a"}, - {file = "llvmlite-0.41.1-cp38-cp38-win32.whl", hash = "sha256:2d92c51e6e9394d503033ffe3292f5bef1566ab73029ec853861f60ad5c925d0"}, - {file = "llvmlite-0.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:df75594e5a4702b032684d5481db3af990b69c249ccb1d32687b8501f0689432"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04725975e5b2af416d685ea0769f4ecc33f97be541e301054c9f741003085802"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf14aa0eb22b58c231243dccf7e7f42f7beec48970f2549b3a6acc737d1a4ba4"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c32356f669e036eb01016e883b22add883c60739bc1ebee3a1cc0249a50828"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24091a6b31242bcdd56ae2dbea40007f462260bc9bdf947953acc39dffd54f8f"}, - {file = "llvmlite-0.41.1-cp39-cp39-win32.whl", hash = "sha256:880cb57ca49e862e1cd077104375b9d1dfdc0622596dfa22105f470d7bacb309"}, - {file = "llvmlite-0.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:92f093986ab92e71c9ffe334c002f96defc7986efda18397d0f08534f3ebdc4d"}, - {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70f44ccc3c6220bd23e0ba698a63ec2a7d3205da0d848804807f37fc243e3f77"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f8d8717a9073b9e0246998de89929071d15b47f254c10eef2310b9aac033d"}, + {file = "llvmlite-0.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d90edf400b4ceb3a0e776b6c6e4656d05c7187c439587e06f86afceb66d2be5"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ae511caed28beaf1252dbaf5f40e663f533b79ceb408c874c01754cafabb9cbf"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81e674c2fe85576e6c4474e8c7e7aba7901ac0196e864fe7985492b737dbab65"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb3975787f13eb97629052edb5017f6c170eebc1c14a0433e8089e5db43bcce6"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5bece0cdf77f22379f19b1959ccd7aee518afa4afbd3656c6365865f84903f9"}, + {file = "llvmlite-0.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e0c4c11c8c2aa9b0701f91b799cb9134a6a6de51444eff5a9087fc7c1384275"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:08fa9ab02b0d0179c688a4216b8939138266519aaa0aa94f1195a8542faedb56"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b2fce7d355068494d1e42202c7aff25d50c462584233013eb4470c33b995e3ee"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebe66a86dc44634b59a3bc860c7b20d26d9aaffcd30364ebe8ba79161a9121f4"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d47494552559e00d81bfb836cf1c4d5a5062e54102cc5767d5aa1e77ccd2505c"}, + {file = "llvmlite-0.42.0-cp312-cp312-win_amd64.whl", hash = "sha256:05cb7e9b6ce69165ce4d1b994fbdedca0c62492e537b0cc86141b6e2c78d5888"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdd3888544538a94d7ec99e7c62a0cdd8833609c85f0c23fcb6c5c591aec60ad"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0936c2067a67fb8816c908d5457d63eba3e2b17e515c5fe00e5ee2bace06040"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a78ab89f1924fc11482209f6799a7a3fc74ddc80425a7a3e0e8174af0e9e2301"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7599b65c7af7abbc978dbf345712c60fd596aa5670496561cc10e8a71cebfb2"}, + {file = "llvmlite-0.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:43d65cc4e206c2e902c1004dd5418417c4efa6c1d04df05c6c5675a27e8ca90e"}, + {file = "llvmlite-0.42.0.tar.gz", hash = "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a"}, ] [[package]] @@ -354,81 +352,81 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numba" -version = "0.58.1" +version = "0.59.0" description = "compiling Python code using LLVM" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "numba-0.58.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07f2fa7e7144aa6f275f27260e73ce0d808d3c62b30cff8906ad1dec12d87bbe"}, - {file = "numba-0.58.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bf1ddd4f7b9c2306de0384bf3854cac3edd7b4d8dffae2ec1b925e4c436233f"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bc2d904d0319d7a5857bd65062340bed627f5bfe9ae4a495aef342f072880d50"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e79b6cc0d2bf064a955934a2e02bf676bc7995ab2db929dbbc62e4c16551be6"}, - {file = "numba-0.58.1-cp310-cp310-win_amd64.whl", hash = "sha256:81fe5b51532478149b5081311b0fd4206959174e660c372b94ed5364cfb37c82"}, - {file = "numba-0.58.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bcecd3fb9df36554b342140a4d77d938a549be635d64caf8bd9ef6c47a47f8aa"}, - {file = "numba-0.58.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1eaa744f518bbd60e1f7ccddfb8002b3d06bd865b94a5d7eac25028efe0e0ff"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bf68df9c307fb0aa81cacd33faccd6e419496fdc621e83f1efce35cdc5e79cac"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:55a01e1881120e86d54efdff1be08381886fe9f04fc3006af309c602a72bc44d"}, - {file = "numba-0.58.1-cp311-cp311-win_amd64.whl", hash = "sha256:811305d5dc40ae43c3ace5b192c670c358a89a4d2ae4f86d1665003798ea7a1a"}, - {file = "numba-0.58.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea5bfcf7d641d351c6a80e8e1826eb4a145d619870016eeaf20bbd71ef5caa22"}, - {file = "numba-0.58.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d6aacaae1ba4ef3695f1c2122b30fa3d8ba039c8f517784668075856d79e2"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6fe7a9d8e3bd996fbe5eac0683227ccef26cba98dae6e5cee2c1894d4b9f16c1"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:898af055b03f09d33a587e9425500e5be84fc90cd2f80b3fb71c6a4a17a7e354"}, - {file = "numba-0.58.1-cp38-cp38-win_amd64.whl", hash = "sha256:d3e2fe81fe9a59fcd99cc572002101119059d64d31eb6324995ee8b0f144a306"}, - {file = "numba-0.58.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c765aef472a9406a97ea9782116335ad4f9ef5c9f93fc05fd44aab0db486954"}, - {file = "numba-0.58.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9356e943617f5e35a74bf56ff6e7cc83e6b1865d5e13cee535d79bf2cae954"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:240e7a1ae80eb6b14061dc91263b99dc8d6af9ea45d310751b780888097c1aaa"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:45698b995914003f890ad839cfc909eeb9c74921849c712a05405d1a79c50f68"}, - {file = "numba-0.58.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd3dda77955be03ff366eebbfdb39919ce7c2620d86c906203bed92124989032"}, - {file = "numba-0.58.1.tar.gz", hash = "sha256:487ded0633efccd9ca3a46364b40006dbdaca0f95e99b8b83e778d1195ebcbaa"}, + {file = "numba-0.59.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d061d800473fb8fef76a455221f4ad649a53f5e0f96e3f6c8b8553ee6fa98fa"}, + {file = "numba-0.59.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c086a434e7d3891ce5dfd3d1e7ee8102ac1e733962098578b507864120559ceb"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9e20736bf62e61f8353fb71b0d3a1efba636c7a303d511600fc57648b55823ed"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e86e6786aec31d2002122199486e10bbc0dc40f78d76364cded375912b13614c"}, + {file = "numba-0.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:0307ee91b24500bb7e64d8a109848baf3a3905df48ce142b8ac60aaa406a0400"}, + {file = "numba-0.59.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d540f69a8245fb714419c2209e9af6104e568eb97623adc8943642e61f5d6d8e"}, + {file = "numba-0.59.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1192d6b2906bf3ff72b1d97458724d98860ab86a91abdd4cfd9328432b661e31"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90efb436d3413809fcd15298c6d395cb7d98184350472588356ccf19db9e37c8"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd3dac45e25d927dcb65d44fb3a973994f5add2b15add13337844afe669dd1ba"}, + {file = "numba-0.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:753dc601a159861808cc3207bad5c17724d3b69552fd22768fddbf302a817a4c"}, + {file = "numba-0.59.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ce62bc0e6dd5264e7ff7f34f41786889fa81a6b860662f824aa7532537a7bee0"}, + {file = "numba-0.59.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8cbef55b73741b5eea2dbaf1b0590b14977ca95a13a07d200b794f8f6833a01c"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:70d26ba589f764be45ea8c272caa467dbe882b9676f6749fe6f42678091f5f21"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e125f7d69968118c28ec0eed9fbedd75440e64214b8d2eac033c22c04db48492"}, + {file = "numba-0.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:4981659220b61a03c1e557654027d271f56f3087448967a55c79a0e5f926de62"}, + {file = "numba-0.59.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe4d7562d1eed754a7511ed7ba962067f198f86909741c5c6e18c4f1819b1f47"}, + {file = "numba-0.59.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6feb1504bb432280f900deaf4b1dadcee68812209500ed3f81c375cbceab24dc"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:944faad25ee23ea9dda582bfb0189fb9f4fc232359a80ab2a028b94c14ce2b1d"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5516a469514bfae52a9d7989db4940653a5cbfac106f44cb9c50133b7ad6224b"}, + {file = "numba-0.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:32bd0a41525ec0b1b853da244808f4e5333867df3c43c30c33f89cf20b9c2b63"}, + {file = "numba-0.59.0.tar.gz", hash = "sha256:12b9b064a3e4ad00e2371fc5212ef0396c80f41caec9b5ec391c8b04b6eaf2a8"}, ] [package.dependencies] -llvmlite = "==0.41.*" +llvmlite = "==0.42.*" numpy = ">=1.22,<1.27" [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -444,28 +442,28 @@ files = [ [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -474,27 +472,27 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "psutil" -version = "5.9.7" +version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.7-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0bd41bf2d1463dfa535942b2a8f0e958acf6607ac0be52265ab31f7923bcd5e6"}, - {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5794944462509e49d4d458f4dbfb92c47539e7d8d15c796f141f474010084056"}, - {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:fe361f743cb3389b8efda21980d93eb55c1f1e3898269bc9a2a1d0bb7b1f6508"}, - {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e469990e28f1ad738f65a42dcfc17adaed9d0f325d55047593cb9033a0ab63df"}, - {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3c4747a3e2ead1589e647e64aad601981f01b68f9398ddf94d01e3dc0d1e57c7"}, - {file = "psutil-5.9.7-cp27-none-win32.whl", hash = "sha256:1d4bc4a0148fdd7fd8f38e0498639ae128e64538faa507df25a20f8f7fb2341c"}, - {file = "psutil-5.9.7-cp27-none-win_amd64.whl", hash = "sha256:4c03362e280d06bbbfcd52f29acd79c733e0af33d707c54255d21029b8b32ba6"}, - {file = "psutil-5.9.7-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e"}, - {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284"}, - {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe"}, - {file = "psutil-5.9.7-cp36-cp36m-win32.whl", hash = "sha256:b27f8fdb190c8c03914f908a4555159327d7481dac2f01008d483137ef3311a9"}, - {file = "psutil-5.9.7-cp36-cp36m-win_amd64.whl", hash = "sha256:44969859757f4d8f2a9bd5b76eba8c3099a2c8cf3992ff62144061e39ba8568e"}, - {file = "psutil-5.9.7-cp37-abi3-win32.whl", hash = "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68"}, - {file = "psutil-5.9.7-cp37-abi3-win_amd64.whl", hash = "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414"}, - {file = "psutil-5.9.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340"}, - {file = "psutil-5.9.7.tar.gz", hash = "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c"}, + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, ] [package.extras] @@ -618,49 +616,49 @@ tabulate = "^0.9.0" type = "git" url = "https://github.com/qiboteam/qibo.git" reference = "clifford_simulator_numba" -resolved_reference = "df0550589f522e783175acad4a0fba05f99479f7" +resolved_reference = "9d15645e6fe3a3629bedd0ab3d95541f71d75e9a" [[package]] name = "scipy" -version = "1.11.4" +version = "1.12.0" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, - {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, - {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, - {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, - {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, - {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, - {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, - {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, - {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, - {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, - {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, - {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, - {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, - {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, - {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, - {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, - {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, - {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, - {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, - {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, - {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, - {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, - {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, - {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, - {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, + {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, + {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, + {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, + {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, + {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, + {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, + {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, + {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, + {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, ] [package.dependencies] -numpy = ">=1.21.6,<1.28.0" +numpy = ">=1.22.4,<1.29.0" [package.extras] dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "six" From 3d05b3709bd834b19b6095f2e306dd7703f2e28a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 00:23:49 +0000 Subject: [PATCH 48/73] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 24.1.1 → 24.2.0](https://github.com/psf/black/compare/24.1.1...24.2.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 28dfdd0d..b8632cdd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ repos: - id: check-yaml - id: debug-statements - repo: https://github.com/psf/black - rev: 24.1.1 + rev: 24.2.0 hooks: - id: black - repo: https://github.com/pycqa/isort From 0370ca49a37897073fef07614286cafbe23fc401 Mon Sep 17 00:00:00 2001 From: simone bordoni Date: Wed, 14 Feb 2024 14:32:44 +0400 Subject: [PATCH 49/73] SXDG --- src/qibojit/backends/matrices.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qibojit/backends/matrices.py b/src/qibojit/backends/matrices.py index 6bf2ff00..75e94f48 100644 --- a/src/qibojit/backends/matrices.py +++ b/src/qibojit/backends/matrices.py @@ -33,6 +33,10 @@ def CZ(self): @cached_property def CSX(self): return self.SX + + @cached_property + def CSXDG(self): + return self.SXDG def CRX(self, theta): return self.RX(theta) From 512e90048c24e1df7c651d1e721e5b9ca226fa92 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:36:21 +0000 Subject: [PATCH 50/73] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/qibojit/backends/matrices.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibojit/backends/matrices.py b/src/qibojit/backends/matrices.py index 75e94f48..099c3a76 100644 --- a/src/qibojit/backends/matrices.py +++ b/src/qibojit/backends/matrices.py @@ -33,7 +33,7 @@ def CZ(self): @cached_property def CSX(self): return self.SX - + @cached_property def CSXDG(self): return self.SXDG From b38492a88d9bb6c8bb875d712a9c9403a1b3923b Mon Sep 17 00:00:00 2001 From: simone bordoni Date: Wed, 14 Feb 2024 15:11:44 +0400 Subject: [PATCH 51/73] add tests --- src/qibojit/tests/test_gates.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/qibojit/tests/test_gates.py b/src/qibojit/tests/test_gates.py index 0aef558e..b83e0708 100644 --- a/src/qibojit/tests/test_gates.py +++ b/src/qibojit/tests/test_gates.py @@ -203,6 +203,28 @@ def test_apply_csx(backend, nqubits, targets, dtype): state = backend.apply_gate(gate, np.copy(state), nqubits) backend.assert_allclose(state, target_state, atol=ATOL.get(dtype)) +@pytest.mark.parametrize( + ("nqubits", "targets"), + [ + (2, [0, 1]), + (3, [0, 2]), + (4, [1, 3]), + (3, [1, 2]), + (4, [0, 2]), + (4, [2, 3]), + (5, [3, 4]), + (6, [1, 4]), + ], +) +def test_apply_csxdg(backend, nqubits, targets, dtype): + tbackend = NumpyBackend() + state = random_statevector(2**nqubits, backend=tbackend).astype(dtype) + gate = gates.CSXDG(*targets) + + set_precision(dtype, backend, tbackend) + target_state = tbackend.apply_gate(gate, np.copy(state), nqubits) + state = backend.apply_gate(gate, np.copy(state), nqubits) + backend.assert_allclose(state, target_state, atol=ATOL.get(dtype)) @pytest.mark.parametrize( ("nqubits", "targets"), From 7b819b9224b2793ff1d3786aef0e9023c1cccb6d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:11:59 +0000 Subject: [PATCH 52/73] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/qibojit/tests/test_gates.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qibojit/tests/test_gates.py b/src/qibojit/tests/test_gates.py index b83e0708..e086efb3 100644 --- a/src/qibojit/tests/test_gates.py +++ b/src/qibojit/tests/test_gates.py @@ -203,6 +203,7 @@ def test_apply_csx(backend, nqubits, targets, dtype): state = backend.apply_gate(gate, np.copy(state), nqubits) backend.assert_allclose(state, target_state, atol=ATOL.get(dtype)) + @pytest.mark.parametrize( ("nqubits", "targets"), [ @@ -226,6 +227,7 @@ def test_apply_csxdg(backend, nqubits, targets, dtype): state = backend.apply_gate(gate, np.copy(state), nqubits) backend.assert_allclose(state, target_state, atol=ATOL.get(dtype)) + @pytest.mark.parametrize( ("nqubits", "targets"), [ From 037227d82101dde322b61ae5ec88696b567dac82 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 16 Feb 2024 17:02:31 +0400 Subject: [PATCH 53/73] refatcor: moved clifford operations out of the standard backends --- .../backends/clifford_operations_cpu.py | 4 ++ .../backends/clifford_operations_gpu.py | 40 +++++++++++++++++++ src/qibojit/backends/cpu.py | 8 ---- src/qibojit/backends/gpu.py | 17 -------- 4 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 674ed899..7f9a904f 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -1,6 +1,10 @@ import numpy as np from numba import njit, prange, uint64 +name = "numba" + +np = np + @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def H(symplectic_matrix, q, nqubits): diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index d720ced8..67c2215a 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -2,6 +2,11 @@ import cupy as cp # pylint: disable=E0401 import numpy as np +from scipy import sparse + +name = "cupy" + +np = cp GRIDDIM, BLOCKDIM = 1024, 128 GRIDDIM_2D = (1024, 1024) @@ -684,3 +689,38 @@ def _determined_outcome(state, q, nqubits): True, ) return state, state[dim * dim - 1].astype(cp.uint) + + +def cast(self, x, dtype=None, copy=False): + if dtype is None: + dtype = "complex128" + if cp.sparse.issparse(x): + if dtype != x.dtype: + return x.astype(dtype) + else: + return x + elif sparse.issparse(x): + cls = getattr(cp.sparse, x.__class__.__name__) + return cls(x, dtype=dtype) + elif isinstance(x, cp.ndarray) and copy: + return cp.copy(cp.asarray(x, dtype=dtype)) + else: + return cp.asarray(x, dtype=dtype) + + +def _clifford_pre_execution_reshape(state): + return state.ravel() + + +def _clifford_post_execution_reshape(state, nqubits): + dim = _get_dim(nqubits) + return state.reshape(dim, dim) + + +def identity_density_matrix(nqubits, normalize: bool = True): + n = 1 << nqubits + state = cp.eye(n, dtype="complex128") + cp.cuda.stream.get_current_stream().synchronize() + if normalize: + state /= 2**nqubits + return state.reshape((n, n)) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 681881cf..7f065ffb 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -72,14 +72,6 @@ def __init__(self): else: self.set_threads(len(psutil.Process().cpu_affinity())) - class CliffordOperations: - pass - - self.clifford_operations = CliffordOperations() - for operations in (_clifford_operations, clifford_operations_cpu): - for method in dir(operations): - setattr(self.clifford_operations, method, getattr(operations, method)) - def set_precision(self, precision): if precision != self.precision: super().set_precision(precision) diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 2e8115ab..048f07f6 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -99,16 +99,6 @@ def kernel_loader(name, ktype): # number of available GPUs (for multigpu) self.ngpus = cp.cuda.runtime.getDeviceCount() - from qibojit.backends import clifford_operations_gpu - - class CliffordOperations: - pass - - self.clifford_operations = CliffordOperations() - for operations in (_clifford_operations, clifford_operations_gpu): - for method in dir(operations): - setattr(self.clifford_operations, method, getattr(operations, method)) - def set_precision(self, precision): super().set_precision(precision) if self.dtype == "complex128": @@ -154,13 +144,6 @@ def to_numpy(self, x): def issparse(self, x): return self.sparse.issparse(x) or self.npsparse.issparse(x) - def _clifford_pre_execution_reshape(self, state): - return state.ravel() - - def _clifford_post_execution_reshape(self, state, nqubits): - dim = 2 * nqubits + 1 - return state.reshape(dim, dim) - def zero_state(self, nqubits): n = 1 << nqubits kernel = self.gates.get(f"initial_state_kernel_{self.kernel_type}") From cfc43f039e1df0038453ccf80506ed60e41a4f58 Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Fri, 16 Feb 2024 10:44:25 +0100 Subject: [PATCH 54/73] chore: Add IPython to the development tools --- poetry.lock | 1272 ------------------------------------------------ pyproject.toml | 26 +- 2 files changed, 13 insertions(+), 1285 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index e4e39047..00000000 --- a/poetry.lock +++ /dev/null @@ -1,1272 +0,0 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. - -[[package]] -name = "astroid" -version = "2.15.8" -description = "An abstract syntax tree for Python with inference support." -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, - {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, -] - -[package.dependencies] -lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, -] - -[[package]] -name = "cloudpickle" -version = "3.0.0" -description = "Pickler class to extend the standard pickle.Pickler functionality" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, - {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, -] - -[[package]] -name = "cma" -version = "3.3.0" -description = "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python" -optional = false -python-versions = "*" -files = [ - {file = "cma-3.3.0-py3-none-any.whl", hash = "sha256:5cc571b1e2068fcf1c538be36f8f3a870107456fed22ce81c1345a96329e61db"}, - {file = "cma-3.3.0.tar.gz", hash = "sha256:b748b8e03f4e7ae816157d7b9bb2fc6b1fb2fee1d5fd3399329b646bb75861ec"}, -] - -[package.dependencies] -numpy = "*" - -[package.extras] -constrained-solution-tracking = ["moarchiving"] -plotting = ["matplotlib"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -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"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "contourpy" -version = "1.2.0" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, -] - -[package.dependencies] -numpy = ">=1.20,<2.0" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "coverage" -version = "7.3.2" -description = "Code coverage measurement for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, - {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, - {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, - {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, - {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, - {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, - {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, - {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, - {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, - {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, - {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, - {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, - {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, - {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, - {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, - {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, - {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, - {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, - {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, - {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, - {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, - {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, - {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, - {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, - {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, - {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, - {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, - {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, -] - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "dill" -version = "0.3.7" -description = "serialize all of Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, -] - -[package.extras] -graph = ["objgraph (>=1.7.2)"] - -[[package]] -name = "exceptiongroup" -version = "1.2.0" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fonttools" -version = "4.45.1" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:45fa321c458ea29224067700954ec44493ae869b47e7c5485a350a149a19fb53"}, - {file = "fonttools-4.45.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0dc7617d96b1e668eea9250e1c1fe62d0c78c3f69573ce7e3332cc40e6d84356"}, - {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ed3bda541e86725f6b4e1b94213f13ed1ae51a5a1f167028534cedea38c010"}, - {file = "fonttools-4.45.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4f4a5870e3b56788fb196da8cf30d0dfd51a76dc3b907861d018165f76ae4c2"}, - {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a3c11d9687479f01eddef729aa737abcdea0a44fdaffb62a930a18892f186c9b"}, - {file = "fonttools-4.45.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:316cec50581e844c3ab69d7c82455b54c7cf18236b2f09e722faf665fbfcac58"}, - {file = "fonttools-4.45.1-cp310-cp310-win32.whl", hash = "sha256:e2277cba9f0b525e30de2a9ad3cb4219aa4bc697230c1645666b0deee9f914f0"}, - {file = "fonttools-4.45.1-cp310-cp310-win_amd64.whl", hash = "sha256:1b9e9ad2bcded9a1431afaa57c8d3c39143ac1f050862d66bddd863c515464a2"}, - {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff6a698bdd435d24c379f6e8a54908cd9bb7dda23719084d56bf8c87709bf3bd"}, - {file = "fonttools-4.45.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c980d60cd6ec1376206fe55013d166e5627ad0b149b5c81e74eaa913ab6134f"}, - {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a12dee6523c02ca78aeedd0a5e12bfa9b7b29896350edd5241542897b072ae23"}, - {file = "fonttools-4.45.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37cd1ced6efb3dd6fe82e9f9bf92fd74ac58a5aefc284045f59ecd517a5fb9ab"}, - {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3d24248221bd7151dfff0d88b1b5da02dccd7134bd576ce8888199827bbaa19"}, - {file = "fonttools-4.45.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba6c23591427844dfb0a13658f1718489de75de6a46b64234584c0d17573162d"}, - {file = "fonttools-4.45.1-cp311-cp311-win32.whl", hash = "sha256:cebcddbe9351b67166292b4f71ffdbfcce01ba4b07d4267824eb46b277aeb19a"}, - {file = "fonttools-4.45.1-cp311-cp311-win_amd64.whl", hash = "sha256:f22eb69996a0bd49f76bdefb30be54ce8dbb89a0d1246874d610f05c2aa2e69e"}, - {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:794de93e83297db7b4943f2431e206d8b1ea69cb3ae14638a49cc50332bf0db8"}, - {file = "fonttools-4.45.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4ba17822a6681d06849078daaf6e03eccc9f467efe7c4c60280e28a78e8e5df9"}, - {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e50f794d09df0675da8d9dbd7c66bfcab2f74a708343aabcad41936d26556891"}, - {file = "fonttools-4.45.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b07b857d4f9de3199a8c3d1b1bf2078c0f37447891ca1a8d9234106b9a27aff"}, - {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:777ba42b94a27bb7fb2b4082522fccfd345667c32a56011e1c3e105979af5b79"}, - {file = "fonttools-4.45.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:21e96b99878348c74aa58059b8578d7586f9519cbcdadacf56486737038aa043"}, - {file = "fonttools-4.45.1-cp312-cp312-win32.whl", hash = "sha256:5cbf02cda8465b69769d07385f5d11e7bba19954e7787792f46fe679ec755ebb"}, - {file = "fonttools-4.45.1-cp312-cp312-win_amd64.whl", hash = "sha256:800e354e0c3afaeb8d9552769773d02f228e98c37b8cb03041157c3d0687cffc"}, - {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6eb2c54f7a07c92108daabcf02caf31df97825738db02a28270633946bcda4d0"}, - {file = "fonttools-4.45.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43a3d267334109ff849c37cf3629476b5feb392ef1d2e464a167b83de8cd599c"}, - {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e1aefc2bf3c43e0f33f995f828a7bbeff4adc9393a7760b11456dbcf14388f6"}, - {file = "fonttools-4.45.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f53a19dcdd5737440839b8394eeebb35da9ec8109f7926cb6456639b5b58e47"}, - {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a17706b9cc24b27721613fe5773d93331ab7f0ecaca9955aead89c6b843d3a7"}, - {file = "fonttools-4.45.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fb36e5f40191274a95938b40c0a1fa7f895e36935aea8709e1d6deff0b2d0d4f"}, - {file = "fonttools-4.45.1-cp38-cp38-win32.whl", hash = "sha256:46eabddec12066829b8a1efe45ae552ba2f1796981ecf538d5f68284c354c589"}, - {file = "fonttools-4.45.1-cp38-cp38-win_amd64.whl", hash = "sha256:b6de2f0fcd3302fb82f94801002cb473959e998c14c24ec28234adb674aed345"}, - {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:392d0e3cc23daee910193625f7cf1b387aff9dd5b6f1a5f4a925680acb6dcbc2"}, - {file = "fonttools-4.45.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4b9544b1346d99848ac0e9b05b5d45ee703d7562fc4c9c48cf4b781de9632e57"}, - {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8717db3e4895e4820ade64ea379187738827ee60748223cb0438ef044ee208c6"}, - {file = "fonttools-4.45.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29d5f298d616a93a4c5963682dc6cc8cc09f6d89cad2c29019fc5fb3b4d9472"}, - {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cb472905da3049960e80fc1cf808231880d79727a8410e156bf3e5063a1c574f"}, - {file = "fonttools-4.45.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ba299f1fbaa2a1e33210aaaf6fa816d4059e4d3cfe2ae9871368d4ab548c1c6a"}, - {file = "fonttools-4.45.1-cp39-cp39-win32.whl", hash = "sha256:105099968b58a5b4cef6f3eb409db8ea8578b302a9d05e23fecba1b8b0177b5f"}, - {file = "fonttools-4.45.1-cp39-cp39-win_amd64.whl", hash = "sha256:847f3f49dd3423e5a678c098e2ba92c7f4955d4aab3044f6a507b0bb0ecb07e0"}, - {file = "fonttools-4.45.1-py3-none-any.whl", hash = "sha256:3bdd7dfca8f6c9f4779384064027e8477ad6a037d6a327b09381f43e0247c6f3"}, - {file = "fonttools-4.45.1.tar.gz", hash = "sha256:6e441286d55fe7ec7c4fb36812bf914924813776ff514b744b510680fc2733f2"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -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 = "future" -version = "0.18.3" -description = "Clean single-source support for Python 3 and 2" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, -] - -[[package]] -name = "hyperopt" -version = "0.2.7" -description = "Distributed Asynchronous Hyperparameter Optimization" -optional = false -python-versions = "*" -files = [ - {file = "hyperopt-0.2.7-py2.py3-none-any.whl", hash = "sha256:f3046d91fe4167dbf104365016596856b2524a609d22f047a066fc1ac796427c"}, - {file = "hyperopt-0.2.7.tar.gz", hash = "sha256:1bf89ae58050bbd32c7307199046117feee245c2fd9ab6255c7308522b7ca149"}, -] - -[package.dependencies] -cloudpickle = "*" -future = "*" -networkx = ">=2.2" -numpy = "*" -py4j = "*" -scipy = "*" -six = "*" -tqdm = "*" - -[package.extras] -atpe = ["lightgbm", "scikit-learn"] -dev = ["black", "nose", "pre-commit", "pytest"] -mongotrials = ["pymongo"] -sparktrials = ["pyspark"] - -[[package]] -name = "importlib-resources" -version = "6.1.1" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "joblib" -version = "1.3.2" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.7" -files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, -] - -[[package]] -name = "kiwisolver" -version = "1.4.5" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, -] - -[[package]] -name = "lazy-object-proxy" -version = "1.9.0" -description = "A fast and thorough lazy object proxy." -optional = false -python-versions = ">=3.7" -files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, -] - -[[package]] -name = "llvmlite" -version = "0.41.1" -description = "lightweight wrapper around basic LLVM functionality" -optional = false -python-versions = ">=3.8" -files = [ - {file = "llvmlite-0.41.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1e1029d47ee66d3a0c4d6088641882f75b93db82bd0e6178f7bd744ebce42b9"}, - {file = "llvmlite-0.41.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150d0bc275a8ac664a705135e639178883293cf08c1a38de3bbaa2f693a0a867"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eee5cf17ec2b4198b509272cf300ee6577229d237c98cc6e63861b08463ddc6"}, - {file = "llvmlite-0.41.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd0338da625346538f1173a17cabf21d1e315cf387ca21b294ff209d176e244"}, - {file = "llvmlite-0.41.1-cp310-cp310-win32.whl", hash = "sha256:fa1469901a2e100c17eb8fe2678e34bd4255a3576d1a543421356e9c14d6e2ae"}, - {file = "llvmlite-0.41.1-cp310-cp310-win_amd64.whl", hash = "sha256:2b76acee82ea0e9304be6be9d4b3840208d050ea0dcad75b1635fa06e949a0ae"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:210e458723436b2469d61b54b453474e09e12a94453c97ea3fbb0742ba5a83d8"}, - {file = "llvmlite-0.41.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:855f280e781d49e0640aef4c4af586831ade8f1a6c4df483fb901cbe1a48d127"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b67340c62c93a11fae482910dc29163a50dff3dfa88bc874872d28ee604a83be"}, - {file = "llvmlite-0.41.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2181bb63ef3c607e6403813421b46982c3ac6bfc1f11fa16a13eaafb46f578e6"}, - {file = "llvmlite-0.41.1-cp311-cp311-win_amd64.whl", hash = "sha256:9564c19b31a0434f01d2025b06b44c7ed422f51e719ab5d24ff03b7560066c9a"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5940bc901fb0325970415dbede82c0b7f3e35c2d5fd1d5e0047134c2c46b3281"}, - {file = "llvmlite-0.41.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8b0a9a47c28f67a269bb62f6256e63cef28d3c5f13cbae4fab587c3ad506778b"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8afdfa6da33f0b4226af8e64cfc2b28986e005528fbf944d0a24a72acfc9432"}, - {file = "llvmlite-0.41.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8454c1133ef701e8c050a59edd85d238ee18bb9a0eb95faf2fca8b909ee3c89a"}, - {file = "llvmlite-0.41.1-cp38-cp38-win32.whl", hash = "sha256:2d92c51e6e9394d503033ffe3292f5bef1566ab73029ec853861f60ad5c925d0"}, - {file = "llvmlite-0.41.1-cp38-cp38-win_amd64.whl", hash = "sha256:df75594e5a4702b032684d5481db3af990b69c249ccb1d32687b8501f0689432"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04725975e5b2af416d685ea0769f4ecc33f97be541e301054c9f741003085802"}, - {file = "llvmlite-0.41.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf14aa0eb22b58c231243dccf7e7f42f7beec48970f2549b3a6acc737d1a4ba4"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c32356f669e036eb01016e883b22add883c60739bc1ebee3a1cc0249a50828"}, - {file = "llvmlite-0.41.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24091a6b31242bcdd56ae2dbea40007f462260bc9bdf947953acc39dffd54f8f"}, - {file = "llvmlite-0.41.1-cp39-cp39-win32.whl", hash = "sha256:880cb57ca49e862e1cd077104375b9d1dfdc0622596dfa22105f470d7bacb309"}, - {file = "llvmlite-0.41.1-cp39-cp39-win_amd64.whl", hash = "sha256:92f093986ab92e71c9ffe334c002f96defc7986efda18397d0f08534f3ebdc4d"}, - {file = "llvmlite-0.41.1.tar.gz", hash = "sha256:f19f767a018e6ec89608e1f6b13348fa2fcde657151137cb64e56d48598a92db"}, -] - -[[package]] -name = "matplotlib" -version = "3.8.2" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -files = [ - {file = "matplotlib-3.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7"}, - {file = "matplotlib-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18"}, - {file = "matplotlib-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31"}, - {file = "matplotlib-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a"}, - {file = "matplotlib-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63"}, - {file = "matplotlib-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6"}, - {file = "matplotlib-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788"}, - {file = "matplotlib-3.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0"}, - {file = "matplotlib-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627"}, - {file = "matplotlib-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, - {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, - {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "networkx" -version = "3.2.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.9" -files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, -] - -[package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "numba" -version = "0.58.1" -description = "compiling Python code using LLVM" -optional = false -python-versions = ">=3.8" -files = [ - {file = "numba-0.58.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:07f2fa7e7144aa6f275f27260e73ce0d808d3c62b30cff8906ad1dec12d87bbe"}, - {file = "numba-0.58.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bf1ddd4f7b9c2306de0384bf3854cac3edd7b4d8dffae2ec1b925e4c436233f"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bc2d904d0319d7a5857bd65062340bed627f5bfe9ae4a495aef342f072880d50"}, - {file = "numba-0.58.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e79b6cc0d2bf064a955934a2e02bf676bc7995ab2db929dbbc62e4c16551be6"}, - {file = "numba-0.58.1-cp310-cp310-win_amd64.whl", hash = "sha256:81fe5b51532478149b5081311b0fd4206959174e660c372b94ed5364cfb37c82"}, - {file = "numba-0.58.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bcecd3fb9df36554b342140a4d77d938a549be635d64caf8bd9ef6c47a47f8aa"}, - {file = "numba-0.58.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1eaa744f518bbd60e1f7ccddfb8002b3d06bd865b94a5d7eac25028efe0e0ff"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bf68df9c307fb0aa81cacd33faccd6e419496fdc621e83f1efce35cdc5e79cac"}, - {file = "numba-0.58.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:55a01e1881120e86d54efdff1be08381886fe9f04fc3006af309c602a72bc44d"}, - {file = "numba-0.58.1-cp311-cp311-win_amd64.whl", hash = "sha256:811305d5dc40ae43c3ace5b192c670c358a89a4d2ae4f86d1665003798ea7a1a"}, - {file = "numba-0.58.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea5bfcf7d641d351c6a80e8e1826eb4a145d619870016eeaf20bbd71ef5caa22"}, - {file = "numba-0.58.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e63d6aacaae1ba4ef3695f1c2122b30fa3d8ba039c8f517784668075856d79e2"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6fe7a9d8e3bd996fbe5eac0683227ccef26cba98dae6e5cee2c1894d4b9f16c1"}, - {file = "numba-0.58.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:898af055b03f09d33a587e9425500e5be84fc90cd2f80b3fb71c6a4a17a7e354"}, - {file = "numba-0.58.1-cp38-cp38-win_amd64.whl", hash = "sha256:d3e2fe81fe9a59fcd99cc572002101119059d64d31eb6324995ee8b0f144a306"}, - {file = "numba-0.58.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c765aef472a9406a97ea9782116335ad4f9ef5c9f93fc05fd44aab0db486954"}, - {file = "numba-0.58.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9356e943617f5e35a74bf56ff6e7cc83e6b1865d5e13cee535d79bf2cae954"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:240e7a1ae80eb6b14061dc91263b99dc8d6af9ea45d310751b780888097c1aaa"}, - {file = "numba-0.58.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:45698b995914003f890ad839cfc909eeb9c74921849c712a05405d1a79c50f68"}, - {file = "numba-0.58.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd3dda77955be03ff366eebbfdb39919ce7c2620d86c906203bed92124989032"}, - {file = "numba-0.58.1.tar.gz", hash = "sha256:487ded0633efccd9ca3a46364b40006dbdaca0f95e99b8b83e778d1195ebcbaa"}, -] - -[package.dependencies] -llvmlite = "==0.41.*" -numpy = ">=1.22,<1.27" - -[[package]] -name = "numpy" -version = "1.26.2" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, - {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, - {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, - {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, - {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, - {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, - {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, - {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, - {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, - {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, - {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, - {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, - {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, - {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, - {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, - {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, - {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, - {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, - {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, - {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, - {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, - {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, - {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, -] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "pillow" -version = "10.1.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "platformdirs" -version = "4.0.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, -] - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.3.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "psutil" -version = "5.9.6" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, - {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, - {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, - {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, - {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, - {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, - {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, - {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, - {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, - {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "py4j" -version = "0.10.9.7" -description = "Enables Python programs to dynamically access arbitrary Java objects" -optional = false -python-versions = "*" -files = [ - {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, - {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, -] - -[[package]] -name = "pylint" -version = "2.17.7" -description = "python code static checker" -optional = false -python-versions = ">=3.7.2" -files = [ - {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, - {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, -] - -[package.dependencies] -astroid = ">=2.15.8,<=2.17.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, -] -isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pytest" -version = "7.4.3" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "4.1.0" -description = "Pytest plugin for measuring coverage." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, -] - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-env" -version = "0.8.2" -description = "py.test plugin that allows you to add environment variables." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"}, - {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"}, -] - -[package.dependencies] -pytest = ">=7.3.1" - -[package.extras] -test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "qibo" -version = "0.2.3" -description = "A framework for quantum computing with hardware acceleration." -optional = false -python-versions = ">=3.9,<3.12" -files = [ - {file = "qibo-0.2.3-py3-none-any.whl", hash = "sha256:53e649c57bf17c75ccafff804633d99aab595a4cbf42b3c42d625764c3dbb5b6"}, - {file = "qibo-0.2.3.tar.gz", hash = "sha256:ad375d47499781c9a0c942fcbd3747c84346e4c671e40fca34797929a2f509b3"}, -] - -[package.dependencies] -cma = ">=3.3.0,<4.0.0" -hyperopt = ">=0.2.7,<0.3.0" -joblib = ">=1.2.0,<2.0.0" -matplotlib = ">=3.7.0,<4.0.0" -psutil = ">=5.9.4,<6.0.0" -scipy = ">=1.10.1,<2.0.0" -sympy = ">=1.11.1,<2.0.0" -tabulate = ">=0.9.0,<0.10.0" - -[[package]] -name = "scipy" -version = "1.11.4" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, - {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, - {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, - {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, - {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, - {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, - {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, - {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, - {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, - {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, - {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, - {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, - {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, - {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, - {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, - {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, - {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, - {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, - {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, - {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, - {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, - {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, - {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, - {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, - {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, -] - -[package.dependencies] -numpy = ">=1.21.6,<1.28.0" - -[package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sympy" -version = "1.12" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, - {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, -] - -[package.dependencies] -mpmath = ">=0.19" - -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.12.3" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, -] - -[[package]] -name = "tqdm" -version = "4.66.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, -] - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "2.0" -python-versions = ">=3.9.0,<3.12" -content-hash = "c0f5c5341a5f291d321362dfc1e1a37f1f2306bfd1593548afd5c41f4410abe2" diff --git a/pyproject.toml b/pyproject.toml index 7c0fb5c4..0fce54cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,27 +5,30 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "qibojit" version = "0.1.3" -description="Simulation tools based on numba and cupy." -authors=["The Qibo team"] +description = "Simulation tools based on numba and cupy." +authors = ["The Qibo team"] license = "Apache License 2.0" readme = "README.md" homepage = "https://qibo.science" -repository="https://github.com/qiboteam/qibojit" +repository = "https://github.com/qiboteam/qibojit" documentation = "https://qibo.science/docs/qibo/stable" keywords = [] packages = [{ include = "qibojit", from = "src" }] -classifiers=[ - "Programming Language :: Python :: 3", - "Topic :: Scientific/Engineering :: Physics", +classifiers = [ + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering :: Physics", ] [tool.poetry.dependencies] -python=">=3.9.0,<3.12" -numba=">=0.51.0" -qibo=">=0.2.3" +python = ">=3.8.0,<3.12" +numba = ">=0.51.0" +qibo = ">=0.2.3" scipy = "^1.10.1" psutil = "^5.9.5" +[tool.poetry.group.dev.dependencies] +ipython = "^7.0" + [tool.poetry.group.test] optional = true @@ -48,8 +51,5 @@ output-format = "colorized" [tool.pytest.ini_options] testpaths = ['src/qibojit/tests/'] -addopts = [ - '--cov=qibojit', - '--cov-report=xml', -] +addopts = ['--cov=qibojit', '--cov-report=xml'] env = ["D:NUMBA_DISABLE_JIT=1"] From 26cdf88d382b5da6b9132114aa7a8dd322ee2adb Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Fri, 16 Feb 2024 10:44:37 +0100 Subject: [PATCH 55/73] build: Add Nix files --- flake.lock | 58 +-- flake.nix | 11 +- poetry.lock | 1057 ++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 4 files changed, 1088 insertions(+), 40 deletions(-) create mode 100644 poetry.lock diff --git a/flake.lock b/flake.lock index 0debd253..19bf8725 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1697058441, - "narHash": "sha256-gjtW+nkM9suMsjyid63HPmt6WZQEvuVqA5cOAf4lLM0=", + "lastModified": 1707817777, + "narHash": "sha256-vHyIs1OULQ3/91wD6xOiuayfI71JXALGA5KLnDKAcy0=", "owner": "cachix", "repo": "devenv", - "rev": "55294461a62d90c8626feca22f52b0d3d0e18e39", + "rev": "5a30b9e5ac7c6167e61b1f4193d5130bb9f8defa", "type": "github" }, "original": { @@ -40,11 +40,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "owner": "edolstra", "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { @@ -76,11 +76,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1685518550, - "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "owner": "numtide", "repo": "flake-utils", - "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "type": "github" }, "original": { @@ -170,14 +170,16 @@ "inputs": { "flake-compat": "flake-compat_2", "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_3" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1696615633, - "narHash": "sha256-W9G6V4tCCjDa7PzqRYHWuRnews8ZCXWOa8MAujlr38Q=", + "lastModified": 1707114737, + "narHash": "sha256-ZXqv2epXAjDjfWbYn+yy4VOmW+C7SuUBoiZkkDoSqA4=", "owner": "cachix", "repo": "nixpkgs-python", - "rev": "08da523dfbab0833bfeada2de1e84ffc921bdf0f", + "rev": "f34ed02276bc08fe1c91c1bf0ef3589d68028878", "type": "github" }, "original": { @@ -220,32 +222,16 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1697851979, - "narHash": "sha256-lJ8k4qkkwdvi+t/Xc6Fn74kUuobpu9ynPGxNZR6OwoA=", + "lastModified": 1707956935, + "narHash": "sha256-ZL2TrjVsiFNKOYwYQozpbvQSwvtV/3Me7Zwhmdsfyu4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5550a85a087c04ddcace7f892b0bdc9d8bb080c8", + "rev": "a4d4fe8c5002202493e87ec8dbc91335ff55552c", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-23.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1685974512, - "narHash": "sha256-WLPHpe96RbPRO9iDtCxgsYkadTheRq7wqXWdGpR6g7w=", - "owner": "domenkozar", - "repo": "nixpkgs", - "rev": "1102477695918daba466123cc2ef694ed3a49939", - "type": "github" - }, - "original": { - "owner": "domenkozar", - "ref": "cpython-moduralize", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -265,11 +251,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1688056373, - "narHash": "sha256-2+SDlNRTKsgo3LBRiMUcoEUb6sDViRNQhzJquZ4koOI=", + "lastModified": 1704725188, + "narHash": "sha256-qq8NbkhRZF1vVYQFt1s8Mbgo8knj+83+QlL5LBnYGpI=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "5843cf069272d92b60c3ed9e55b7a8989c01d4c7", + "rev": "ea96f0c05924341c551a797aaba8126334c505d2", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index b56b0796..e4e82435 100644 --- a/flake.nix +++ b/flake.nix @@ -1,9 +1,12 @@ { inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; systems.url = "github:nix-systems/default"; devenv.url = "github:cachix/devenv"; - nixpkgs-python.url = "github:cachix/nixpkgs-python"; + nixpkgs-python = { + url = "github:cachix/nixpkgs-python"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { @@ -31,15 +34,17 @@ in { default = devenv.lib.mkShell { inherit inputs pkgs; + modules = [ { - packages = with pkgs; [pre-commit]; + packages = with pkgs; [pre-commit poethepoet stdenv.cc.cc.lib]; languages.python = { enable = true; poetry = { enable = true; install.enable = true; + install.groups = ["dev" "test"]; install.allExtras = true; }; version = "3.11"; diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..be45cd53 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1057 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +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 = "astroid" +version = "2.15.8" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, +] + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "cloudpickle" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, +] + +[[package]] +name = "cma" +version = "3.3.0" +description = "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python" +optional = false +python-versions = "*" +files = [ + {file = "cma-3.3.0-py3-none-any.whl", hash = "sha256:5cc571b1e2068fcf1c538be36f8f3a870107456fed22ce81c1345a96329e61db"}, + {file = "cma-3.3.0.tar.gz", hash = "sha256:b748b8e03f4e7ae816157d7b9bb2fc6b1fb2fee1d5fd3399329b646bb75861ec"}, +] + +[package.dependencies] +numpy = "*" + +[package.extras] +constrained-solution-tracking = ["moarchiving"] +plotting = ["matplotlib"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +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"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.4.1" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "dill" +version = "0.3.8" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "future" +version = "0.18.3" +description = "Clean single-source support for Python 3 and 2" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] + +[[package]] +name = "hyperopt" +version = "0.2.7" +description = "Distributed Asynchronous Hyperparameter Optimization" +optional = false +python-versions = "*" +files = [ + {file = "hyperopt-0.2.7-py2.py3-none-any.whl", hash = "sha256:f3046d91fe4167dbf104365016596856b2524a609d22f047a066fc1ac796427c"}, + {file = "hyperopt-0.2.7.tar.gz", hash = "sha256:1bf89ae58050bbd32c7307199046117feee245c2fd9ab6255c7308522b7ca149"}, +] + +[package.dependencies] +cloudpickle = "*" +future = "*" +networkx = ">=2.2" +numpy = "*" +py4j = "*" +scipy = "*" +six = "*" +tqdm = "*" + +[package.extras] +atpe = ["lightgbm", "scikit-learn"] +dev = ["black", "nose", "pre-commit", "pytest"] +mongotrials = ["pymongo"] +sparktrials = ["pyspark"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, + {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "joblib" +version = "1.3.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, +] + +[[package]] +name = "lazy-object-proxy" +version = "1.10.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.8" +files = [ + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, +] + +[[package]] +name = "llvmlite" +version = "0.42.0" +description = "lightweight wrapper around basic LLVM functionality" +optional = false +python-versions = ">=3.9" +files = [ + {file = "llvmlite-0.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3366938e1bf63d26c34fbfb4c8e8d2ded57d11e0567d5bb243d89aab1eb56098"}, + {file = "llvmlite-0.42.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c35da49666a21185d21b551fc3caf46a935d54d66969d32d72af109b5e7d2b6f"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70f44ccc3c6220bd23e0ba698a63ec2a7d3205da0d848804807f37fc243e3f77"}, + {file = "llvmlite-0.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f8d8717a9073b9e0246998de89929071d15b47f254c10eef2310b9aac033d"}, + {file = "llvmlite-0.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d90edf400b4ceb3a0e776b6c6e4656d05c7187c439587e06f86afceb66d2be5"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ae511caed28beaf1252dbaf5f40e663f533b79ceb408c874c01754cafabb9cbf"}, + {file = "llvmlite-0.42.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81e674c2fe85576e6c4474e8c7e7aba7901ac0196e864fe7985492b737dbab65"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb3975787f13eb97629052edb5017f6c170eebc1c14a0433e8089e5db43bcce6"}, + {file = "llvmlite-0.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5bece0cdf77f22379f19b1959ccd7aee518afa4afbd3656c6365865f84903f9"}, + {file = "llvmlite-0.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e0c4c11c8c2aa9b0701f91b799cb9134a6a6de51444eff5a9087fc7c1384275"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:08fa9ab02b0d0179c688a4216b8939138266519aaa0aa94f1195a8542faedb56"}, + {file = "llvmlite-0.42.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b2fce7d355068494d1e42202c7aff25d50c462584233013eb4470c33b995e3ee"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebe66a86dc44634b59a3bc860c7b20d26d9aaffcd30364ebe8ba79161a9121f4"}, + {file = "llvmlite-0.42.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d47494552559e00d81bfb836cf1c4d5a5062e54102cc5767d5aa1e77ccd2505c"}, + {file = "llvmlite-0.42.0-cp312-cp312-win_amd64.whl", hash = "sha256:05cb7e9b6ce69165ce4d1b994fbdedca0c62492e537b0cc86141b6e2c78d5888"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdd3888544538a94d7ec99e7c62a0cdd8833609c85f0c23fcb6c5c591aec60ad"}, + {file = "llvmlite-0.42.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0936c2067a67fb8816c908d5457d63eba3e2b17e515c5fe00e5ee2bace06040"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a78ab89f1924fc11482209f6799a7a3fc74ddc80425a7a3e0e8174af0e9e2301"}, + {file = "llvmlite-0.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7599b65c7af7abbc978dbf345712c60fd596aa5670496561cc10e8a71cebfb2"}, + {file = "llvmlite-0.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:43d65cc4e206c2e902c1004dd5418417c4efa6c1d04df05c6c5675a27e8ca90e"}, + {file = "llvmlite-0.42.0.tar.gz", hash = "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "numba" +version = "0.59.0" +description = "compiling Python code using LLVM" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numba-0.59.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d061d800473fb8fef76a455221f4ad649a53f5e0f96e3f6c8b8553ee6fa98fa"}, + {file = "numba-0.59.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c086a434e7d3891ce5dfd3d1e7ee8102ac1e733962098578b507864120559ceb"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9e20736bf62e61f8353fb71b0d3a1efba636c7a303d511600fc57648b55823ed"}, + {file = "numba-0.59.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e86e6786aec31d2002122199486e10bbc0dc40f78d76364cded375912b13614c"}, + {file = "numba-0.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:0307ee91b24500bb7e64d8a109848baf3a3905df48ce142b8ac60aaa406a0400"}, + {file = "numba-0.59.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d540f69a8245fb714419c2209e9af6104e568eb97623adc8943642e61f5d6d8e"}, + {file = "numba-0.59.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1192d6b2906bf3ff72b1d97458724d98860ab86a91abdd4cfd9328432b661e31"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90efb436d3413809fcd15298c6d395cb7d98184350472588356ccf19db9e37c8"}, + {file = "numba-0.59.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd3dac45e25d927dcb65d44fb3a973994f5add2b15add13337844afe669dd1ba"}, + {file = "numba-0.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:753dc601a159861808cc3207bad5c17724d3b69552fd22768fddbf302a817a4c"}, + {file = "numba-0.59.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ce62bc0e6dd5264e7ff7f34f41786889fa81a6b860662f824aa7532537a7bee0"}, + {file = "numba-0.59.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8cbef55b73741b5eea2dbaf1b0590b14977ca95a13a07d200b794f8f6833a01c"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:70d26ba589f764be45ea8c272caa467dbe882b9676f6749fe6f42678091f5f21"}, + {file = "numba-0.59.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e125f7d69968118c28ec0eed9fbedd75440e64214b8d2eac033c22c04db48492"}, + {file = "numba-0.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:4981659220b61a03c1e557654027d271f56f3087448967a55c79a0e5f926de62"}, + {file = "numba-0.59.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe4d7562d1eed754a7511ed7ba962067f198f86909741c5c6e18c4f1819b1f47"}, + {file = "numba-0.59.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6feb1504bb432280f900deaf4b1dadcee68812209500ed3f81c375cbceab24dc"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:944faad25ee23ea9dda582bfb0189fb9f4fc232359a80ab2a028b94c14ce2b1d"}, + {file = "numba-0.59.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5516a469514bfae52a9d7989db4940653a5cbfac106f44cb9c50133b7ad6224b"}, + {file = "numba-0.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:32bd0a41525ec0b1b853da244808f4e5333867df3c43c30c33f89cf20b9c2b63"}, + {file = "numba-0.59.0.tar.gz", hash = "sha256:12b9b064a3e4ad00e2371fc5212ef0396c80f41caec9b5ec391c8b04b6eaf2a8"}, +] + +[package.dependencies] +llvmlite = "==0.42.*" +numpy = ">=1.22,<1.27" + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] + +[[package]] +name = "pluggy" +version = "1.4.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.43" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.8" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "py4j" +version = "0.10.9.7" +description = "Enables Python programs to dynamically access arbitrary Java objects" +optional = false +python-versions = "*" +files = [ + {file = "py4j-0.10.9.7-py2.py3-none-any.whl", hash = "sha256:85defdfd2b2376eb3abf5ca6474b51ab7e0de341c75a02f46dc9b5976f5a5c1b"}, + {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, +] + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pylint" +version = "2.17.7" +description = "python code static checker" +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, +] + +[package.dependencies] +astroid = ">=2.15.8,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pytest" +version = "7.4.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-env" +version = "0.8.2" +description = "py.test plugin that allows you to add environment variables." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"}, + {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"}, +] + +[package.dependencies] +pytest = ">=7.3.1" + +[package.extras] +test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] + +[[package]] +name = "qibo" +version = "0.2.4" +description = "A framework for quantum computing with hardware acceleration." +optional = false +python-versions = ">=3.9,<3.12" +files = [ + {file = "qibo-0.2.4-py3-none-any.whl", hash = "sha256:5aaf7693004d8106eff3cc614e20ff03e7016742ab129e7ece76c84b3deb7366"}, + {file = "qibo-0.2.4.tar.gz", hash = "sha256:8ab8519b107fdfa57a7aa19d9243403437ceb4a776454816ce3071a00bdc15ff"}, +] + +[package.dependencies] +cma = ">=3.3.0,<4.0.0" +hyperopt = ">=0.2.7,<0.3.0" +joblib = ">=1.2.0,<2.0.0" +scipy = ">=1.10.1,<2.0.0" +sympy = ">=1.11.1,<2.0.0" +tabulate = ">=0.9.0,<0.10.0" + +[[package]] +name = "scipy" +version = "1.12.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, + {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, + {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, + {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, + {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, + {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, + {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, + {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, + {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, + {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<1.29.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "setuptools" +version = "69.1.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, + {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tomlkit" +version = "0.12.3" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, +] + +[[package]] +name = "tqdm" +version = "4.66.2" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.14.1" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, + {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +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 = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9,<3.12" +content-hash = "24eb1e151039a5ba7908579cf8e18b7175c9b385adcbcc36322f600c1a8f1b50" diff --git a/pyproject.toml b/pyproject.toml index 0fce54cb..31509c6f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ ] [tool.poetry.dependencies] -python = ">=3.8.0,<3.12" +python = "^3.9,<3.12" numba = ">=0.51.0" qibo = ">=0.2.3" scipy = "^1.10.1" From c145667f16b91fca96f327d6ca7276b0d2315fed Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Mon, 19 Feb 2024 11:28:24 +0400 Subject: [PATCH 56/73] fix: removed unused imports --- src/qibojit/backends/cpu.py | 2 -- src/qibojit/backends/gpu.py | 1 - 2 files changed, 3 deletions(-) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index 7f065ffb..d90371a2 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,13 +1,11 @@ import numpy as np from numba import njit -from qibo.backends import _clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log from qibo.gates.abstract import ParametrizedGate from qibo.gates.channels import ReadoutErrorChannel from qibo.gates.special import FusedGate -from qibojit.backends import clifford_operations_cpu from qibojit.backends.matrices import CustomMatrices GATE_OPS = { diff --git a/src/qibojit/backends/gpu.py b/src/qibojit/backends/gpu.py index 048f07f6..c00d233c 100644 --- a/src/qibojit/backends/gpu.py +++ b/src/qibojit/backends/gpu.py @@ -1,5 +1,4 @@ import numpy as np -from qibo.backends import _clifford_operations from qibo.backends.numpy import NumpyBackend from qibo.config import log, raise_error From dc23b690bb831f27cae1661bb6a872a1e02aed6f Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Mon, 19 Feb 2024 08:39:04 +0100 Subject: [PATCH 57/73] chore: Remove unused Numba import --- src/qibojit/backends/cpu.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qibojit/backends/cpu.py b/src/qibojit/backends/cpu.py index d90371a2..4ae8deaf 100644 --- a/src/qibojit/backends/cpu.py +++ b/src/qibojit/backends/cpu.py @@ -1,5 +1,4 @@ import numpy as np -from numba import njit from qibo.backends.numpy import NumpyBackend from qibo.config import log from qibo.gates.abstract import ParametrizedGate From 85494c2847151ee225875cf5129465bda22b1524 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 00:40:48 +0000 Subject: [PATCH 58/73] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.15.0 → v3.15.1](https://github.com/asottile/pyupgrade/compare/v3.15.0...v3.15.1) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b8632cdd..9e5265c2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: - id: isort args: ["--profile", "black"] - repo: https://github.com/asottile/pyupgrade - rev: v3.15.0 + rev: v3.15.1 hooks: - id: pyupgrade - repo: https://github.com/hadialqattan/pycln From 7b13ea386f5efd641a230b26abd7d35bf12fec45 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 21 Feb 2024 10:09:17 +0400 Subject: [PATCH 59/73] build: changed qibo dependency --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dc8edaa1..485605a1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers=[ [tool.poetry.dependencies] python=">=3.9.0,<3.12" numba=">=0.51.0" -qibo={ git = "https://github.com/qiboteam/qibo.git", branch = "clifford_simulator_numba" } +qibo=">=0.2.4" scipy = "^1.10.1" psutil = "^5.9.5" From 6cc064b786f8df578e382f78e5798a5909e94a54 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 21 Feb 2024 10:12:45 +0400 Subject: [PATCH 60/73] build: updated lock --- poetry.lock | 140 +++++++++++++++++++++++++--------------------------- 1 file changed, 68 insertions(+), 72 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8db772bc..bf8c5d23 100644 --- a/poetry.lock +++ b/poetry.lock @@ -61,63 +61,63 @@ files = [ [[package]] name = "coverage" -version = "7.4.1" +version = "7.4.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, - {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, - {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, - {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, - {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, - {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, - {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, - {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, - {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, - {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, - {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, - {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, - {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, - {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, - {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, - {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, - {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, - {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, - {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, - {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, - {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, - {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, - {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, - {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, - {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, - {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, - {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, - {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, - {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, - {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, - {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, - {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, + {file = "coverage-7.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3e089179d9d23900e3efc86d46e4431188d9a657f345410eecdd0151f50"}, + {file = "coverage-7.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe6e43c8b510719b48af7db9631b5fbac910ade4bd90e6378c85ac5ac706382c"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b98c89db1b150d851a7840142d60d01d07677a18f0f46836e691c38134ed18b"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f9683be6a5b19cd776ee4e2f2ffb411424819c69afab6b2db3a0a364ec6642"}, + {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cdcbf7b9cb83fe047ee09298e25b1cd1636824067166dc97ad0543b079d22f"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2599972b21911111114100d362aea9e70a88b258400672626efa2b9e2179609c"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef00d31b7569ed3cb2036f26565f1984b9fc08541731ce01012b02a4c238bf03"}, + {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:20a875bfd8c282985c4720c32aa05056f77a68e6d8bbc5fe8632c5860ee0b49b"}, + {file = "coverage-7.4.2-cp310-cp310-win32.whl", hash = "sha256:b3f2b1eb229f23c82898eedfc3296137cf1f16bb145ceab3edfd17cbde273fb7"}, + {file = "coverage-7.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7df95fdd1432a5d2675ce630fef5f239939e2b3610fe2f2b5bf21fa505256fa3"}, + {file = "coverage-7.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8ddbd158e069dded57738ea69b9744525181e99974c899b39f75b2b29a624e2"}, + {file = "coverage-7.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81a5fb41b0d24447a47543b749adc34d45a2cf77b48ca74e5bf3de60a7bd9edc"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2412e98e70f16243be41d20836abd5f3f32edef07cbf8f407f1b6e1ceae783ac"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb79414c15c6f03f56cc68fa06994f047cf20207c31b5dad3f6bab54a0f66ef"}, + {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf89ab85027427d351f1de918aff4b43f4eb5f33aff6835ed30322a86ac29c9e"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a178b7b1ac0f1530bb28d2e51f88c0bab3e5949835851a60dda80bff6052510c"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:06fe398145a2e91edaf1ab4eee66149c6776c6b25b136f4a86fcbbb09512fd10"}, + {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:18cac867950943fe93d6cd56a67eb7dcd2d4a781a40f4c1e25d6f1ed98721a55"}, + {file = "coverage-7.4.2-cp311-cp311-win32.whl", hash = "sha256:f72cdd2586f9a769570d4b5714a3837b3a59a53b096bb954f1811f6a0afad305"}, + {file = "coverage-7.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:d779a48fac416387dd5673fc5b2d6bd903ed903faaa3247dc1865c65eaa5a93e"}, + {file = "coverage-7.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:adbdfcda2469d188d79771d5696dc54fab98a16d2ef7e0875013b5f56a251047"}, + {file = "coverage-7.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ac4bab32f396b03ebecfcf2971668da9275b3bb5f81b3b6ba96622f4ef3f6e17"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:006d220ba2e1a45f1de083d5022d4955abb0aedd78904cd5a779b955b019ec73"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3733545eb294e5ad274abe131d1e7e7de4ba17a144505c12feca48803fea5f64"}, + {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a9e754aa250fe61f0f99986399cec086d7e7a01dd82fd863a20af34cbce962"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2ed37e16cf35c8d6e0b430254574b8edd242a367a1b1531bd1adc99c6a5e00fe"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b953275d4edfab6cc0ed7139fa773dfb89e81fee1569a932f6020ce7c6da0e8f"}, + {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32b4ab7e6c924f945cbae5392832e93e4ceb81483fd6dc4aa8fb1a97b9d3e0e1"}, + {file = "coverage-7.4.2-cp312-cp312-win32.whl", hash = "sha256:f5df76c58977bc35a49515b2fbba84a1d952ff0ec784a4070334dfbec28a2def"}, + {file = "coverage-7.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:34423abbaad70fea9d0164add189eabaea679068ebdf693baa5c02d03e7db244"}, + {file = "coverage-7.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b11f9c6587668e495cc7365f85c93bed34c3a81f9f08b0920b87a89acc13469"}, + {file = "coverage-7.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:51593a1f05c39332f623d64d910445fdec3d2ac2d96b37ce7f331882d5678ddf"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69f1665165ba2fe7614e2f0c1aed71e14d83510bf67e2ee13df467d1c08bf1e8"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3c8bbb95a699c80a167478478efe5e09ad31680931ec280bf2087905e3b95ec"}, + {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:175f56572f25e1e1201d2b3e07b71ca4d201bf0b9cb8fad3f1dfae6a4188de86"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8562ca91e8c40864942615b1d0b12289d3e745e6b2da901d133f52f2d510a1e3"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d9a1ef0f173e1a19738f154fb3644f90d0ada56fe6c9b422f992b04266c55d5a"}, + {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f40ac873045db4fd98a6f40387d242bde2708a3f8167bd967ccd43ad46394ba2"}, + {file = "coverage-7.4.2-cp38-cp38-win32.whl", hash = "sha256:d1b750a8409bec61caa7824bfd64a8074b6d2d420433f64c161a8335796c7c6b"}, + {file = "coverage-7.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b4ae777bebaed89e3a7e80c4a03fac434a98a8abb5251b2a957d38fe3fd30088"}, + {file = "coverage-7.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ff7f92ae5a456101ca8f48387fd3c56eb96353588e686286f50633a611afc95"}, + {file = "coverage-7.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:861d75402269ffda0b33af94694b8e0703563116b04c681b1832903fac8fd647"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3507427d83fa961cbd73f11140f4a5ce84208d31756f7238d6257b2d3d868405"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf711d517e21fb5bc429f5c4308fbc430a8585ff2a43e88540264ae87871e36a"}, + {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c00e54f0bd258ab25e7f731ca1d5144b0bf7bec0051abccd2bdcff65fa3262c9"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8e845d894e39fb53834da826078f6dc1a933b32b1478cf437007367efaf6f6a"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:840456cb1067dc350af9080298c7c2cfdddcedc1cb1e0b30dceecdaf7be1a2d3"}, + {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c11ca2df2206a4e3e4c4567f52594637392ed05d7c7fb73b4ea1c658ba560265"}, + {file = "coverage-7.4.2-cp39-cp39-win32.whl", hash = "sha256:3ff5bdb08d8938d336ce4088ca1a1e4b6c8cd3bef8bb3a4c0eb2f37406e49643"}, + {file = "coverage-7.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:ac9e95cefcf044c98d4e2c829cd0669918585755dd9a92e28a1a7012322d0a95"}, + {file = "coverage-7.4.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:f593a4a90118d99014517c2679e04a4ef5aee2d81aa05c26c734d271065efcb6"}, + {file = "coverage-7.4.2.tar.gz", hash = "sha256:1a5ee18e3a8d766075ce9314ed1cb695414bae67df6a4b0805f5137d93d6f1cb"}, ] [package.dependencies] @@ -597,26 +597,22 @@ test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] [[package]] name = "qibo" -version = "0.2.5" +version = "0.2.4" description = "A framework for quantum computing with hardware acceleration." optional = false python-versions = ">=3.9,<3.12" -files = [] -develop = false +files = [ + {file = "qibo-0.2.4-py3-none-any.whl", hash = "sha256:5aaf7693004d8106eff3cc614e20ff03e7016742ab129e7ece76c84b3deb7366"}, + {file = "qibo-0.2.4.tar.gz", hash = "sha256:8ab8519b107fdfa57a7aa19d9243403437ceb4a776454816ce3071a00bdc15ff"}, +] [package.dependencies] -cma = "^3.3.0" -hyperopt = "^0.2.7" -joblib = "^1.2.0" -scipy = "^1.10.1" -sympy = "^1.11.1" -tabulate = "^0.9.0" - -[package.source] -type = "git" -url = "https://github.com/qiboteam/qibo.git" -reference = "clifford_simulator_numba" -resolved_reference = "9d15645e6fe3a3629bedd0ab3d95541f71d75e9a" +cma = ">=3.3.0,<4.0.0" +hyperopt = ">=0.2.7,<0.3.0" +joblib = ">=1.2.0,<2.0.0" +scipy = ">=1.10.1,<2.0.0" +sympy = ">=1.11.1,<2.0.0" +tabulate = ">=0.9.0,<0.10.0" [[package]] name = "scipy" @@ -723,13 +719,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.2" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, ] [package.dependencies] @@ -834,4 +830,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.9.0,<3.12" -content-hash = "372112a05578a3d828cf79825e364d099074f147d11dacf9e1c278c052120c5c" +content-hash = "4e399a6215b886743d8caec2542b9d615a164f8ba45fea13f639a721bb6e832c" From 2e292d4df7c57597986ef821061e5fdce5d49097 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 21 Feb 2024 11:12:20 +0400 Subject: [PATCH 61/73] fix: added alternative signature to rowsum for windows --- src/qibojit/backends/clifford_operations_cpu.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 7f9a904f..422f4cb4 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -262,7 +262,13 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): @njit( - "b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", parallel=True, cache=True, fastmath=True + [ + "b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", + "b1[:,:](b1[:,:], u8[:], u8[:], i8, b1)", + ], + parallel=True, + cache=True, + fastmath=True, ) def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): xi, xh = symplectic_matrix[i, :nqubits], symplectic_matrix[h, :nqubits] From 3e0505d52b0890a484ca57cae3b5ff8deb7e9949 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Wed, 21 Feb 2024 11:47:20 +0400 Subject: [PATCH 62/73] fix: changed rowsum signature --- src/qibojit/backends/clifford_operations_cpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 422f4cb4..0712eed4 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -264,7 +264,7 @@ def CY(symplectic_matrix, control_q, target_q, nqubits): @njit( [ "b1[:,:](b1[:,:], u8[:], u8[:], u8, b1)", - "b1[:,:](b1[:,:], u8[:], u8[:], i8, b1)", + "b1[:,:](b1[:,:], u4[:], u4[:], u4, b1)", ], parallel=True, cache=True, From a6b0e26514c58c2315161e54604182f9d114749d Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Thu, 22 Feb 2024 11:02:32 +0400 Subject: [PATCH 63/73] fix: removed self from cast for cupy --- src/qibojit/backends/clifford_operations_gpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 67c2215a..49bfbd25 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -691,7 +691,7 @@ def _determined_outcome(state, q, nqubits): return state, state[dim * dim - 1].astype(cp.uint) -def cast(self, x, dtype=None, copy=False): +def cast(x, dtype=None, copy=False): if dtype is None: dtype = "complex128" if cp.sparse.issparse(x): From 4539ab719358efce75e215b42759d49891a160c3 Mon Sep 17 00:00:00 2001 From: Renato Mello Date: Fri, 23 Feb 2024 09:04:54 +0400 Subject: [PATCH 64/73] `pylint` suggestions --- src/qibojit/backends/clifford_operations_cpu.py | 10 ++++------ src/qibojit/backends/clifford_operations_gpu.py | 2 ++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 0712eed4..603dbc9f 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -1,10 +1,8 @@ +"""Set of custom Numba operations for the Clifford backend.""" + import numpy as np from numba import njit, prange, uint64 -name = "numba" - -np = np - @njit("b1[:,:](b1[:,:], u8, u8)", parallel=True, cache=True) def H(symplectic_matrix, q, nqubits): @@ -279,9 +277,9 @@ def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): g_zi_zh = xi.copy() for j in prange(len(h)): # pylint: disable=not-an-iterable exp = np.zeros(nqubits, dtype=uint64) - x1_eq_z1 = (xi[j] ^ zi[j]) == False + x1_eq_z1 = (xi[j] ^ zi[j]) is False x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = xi[j] == False + x1_eq_0 = xi[j] is False x1_eq_1 = ~x1_eq_0 ind2 = x1_eq_z1 & x1_eq_1 ind3 = x1_eq_1 & x1_neq_z1 diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 49bfbd25..ac16debf 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -1,3 +1,5 @@ +"""Set of custom CuPy operations for the Clifford backend.""" + from functools import cache import cupy as cp # pylint: disable=E0401 From 7c4f22b796b59470ba4c4d175b5ba42f19786105 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi <45011234+BrunoLiegiBastonLiegi@users.noreply.github.com> Date: Fri, 23 Feb 2024 09:24:23 +0400 Subject: [PATCH 65/73] Update src/qibojit/backends/clifford_operations_gpu.py Co-authored-by: Renato Mello --- src/qibojit/backends/clifford_operations_gpu.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index ac16debf..07a3479d 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -696,18 +696,20 @@ def _determined_outcome(state, q, nqubits): def cast(x, dtype=None, copy=False): if dtype is None: dtype = "complex128" + if cp.sparse.issparse(x): if dtype != x.dtype: return x.astype(dtype) - else: - return x - elif sparse.issparse(x): + return x + + if sparse.issparse(x): cls = getattr(cp.sparse, x.__class__.__name__) return cls(x, dtype=dtype) - elif isinstance(x, cp.ndarray) and copy: + + if isinstance(x, cp.ndarray) and copy: return cp.copy(cp.asarray(x, dtype=dtype)) - else: - return cp.asarray(x, dtype=dtype) + + return cp.asarray(x, dtype=dtype) def _clifford_pre_execution_reshape(state): From a1405fe6f1b1b250a4c5ee6af8dc896028efd16a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 05:24:29 +0000 Subject: [PATCH 66/73] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/qibojit/backends/clifford_operations_gpu.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 07a3479d..438ea794 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -701,14 +701,14 @@ def cast(x, dtype=None, copy=False): if dtype != x.dtype: return x.astype(dtype) return x - + if sparse.issparse(x): cls = getattr(cp.sparse, x.__class__.__name__) return cls(x, dtype=dtype) - + if isinstance(x, cp.ndarray) and copy: return cp.copy(cp.asarray(x, dtype=dtype)) - + return cp.asarray(x, dtype=dtype) From 0ff0e505e9422217ff2a4d8327d845fa47d18928 Mon Sep 17 00:00:00 2001 From: Andrea Papaluca Date: Fri, 23 Feb 2024 10:05:47 +0400 Subject: [PATCH 67/73] fix: revert some pylint suggestions --- src/qibojit/backends/clifford_operations_cpu.py | 4 ++-- src/qibojit/backends/clifford_operations_gpu.py | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/qibojit/backends/clifford_operations_cpu.py b/src/qibojit/backends/clifford_operations_cpu.py index 603dbc9f..9d595165 100644 --- a/src/qibojit/backends/clifford_operations_cpu.py +++ b/src/qibojit/backends/clifford_operations_cpu.py @@ -277,9 +277,9 @@ def _rowsum(symplectic_matrix, h, i, nqubits, determined=False): g_zi_zh = xi.copy() for j in prange(len(h)): # pylint: disable=not-an-iterable exp = np.zeros(nqubits, dtype=uint64) - x1_eq_z1 = (xi[j] ^ zi[j]) is False + x1_eq_z1 = (xi[j] ^ zi[j]) == False x1_neq_z1 = ~x1_eq_z1 - x1_eq_0 = xi[j] is False + x1_eq_0 = xi[j] == False x1_eq_1 = ~x1_eq_0 ind2 = x1_eq_z1 & x1_eq_1 ind3 = x1_eq_1 & x1_neq_z1 diff --git a/src/qibojit/backends/clifford_operations_gpu.py b/src/qibojit/backends/clifford_operations_gpu.py index 438ea794..1039c2bc 100644 --- a/src/qibojit/backends/clifford_operations_gpu.py +++ b/src/qibojit/backends/clifford_operations_gpu.py @@ -3,11 +3,8 @@ from functools import cache import cupy as cp # pylint: disable=E0401 -import numpy as np from scipy import sparse -name = "cupy" - np = cp GRIDDIM, BLOCKDIM = 1024, 128 From 95353c32b057e0f1419df1cfdc2f5b21657f3726 Mon Sep 17 00:00:00 2001 From: BrunoLiegiBastonLiegi Date: Mon, 26 Feb 2024 20:20:17 +0400 Subject: [PATCH 68/73] cov: omitting clifford_operations from coverage --- poetry.lock | 184 ++++++++++++++++++++++++++++++++----------------- pyproject.toml | 5 ++ 2 files changed, 124 insertions(+), 65 deletions(-) diff --git a/poetry.lock b/poetry.lock index c295cf9a..8bd8dfb1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -15,6 +16,7 @@ files = [ name = "astroid" version = "2.15.8" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -34,6 +36,7 @@ wrapt = [ name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" +category = "dev" optional = false python-versions = "*" files = [ @@ -45,6 +48,7 @@ files = [ name = "cloudpickle" version = "3.0.0" description = "Pickler class to extend the standard pickle.Pickler functionality" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -56,6 +60,7 @@ files = [ name = "cma" version = "3.3.0" description = "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python" +category = "main" optional = false python-versions = "*" files = [ @@ -74,6 +79,7 @@ plotting = ["matplotlib"] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -83,63 +89,64 @@ files = [ [[package]] name = "coverage" -version = "7.4.2" +version = "7.4.3" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf54c3e089179d9d23900e3efc86d46e4431188d9a657f345410eecdd0151f50"}, - {file = "coverage-7.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe6e43c8b510719b48af7db9631b5fbac910ade4bd90e6378c85ac5ac706382c"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b98c89db1b150d851a7840142d60d01d07677a18f0f46836e691c38134ed18b"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f9683be6a5b19cd776ee4e2f2ffb411424819c69afab6b2db3a0a364ec6642"}, - {file = "coverage-7.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cdcbf7b9cb83fe047ee09298e25b1cd1636824067166dc97ad0543b079d22f"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2599972b21911111114100d362aea9e70a88b258400672626efa2b9e2179609c"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ef00d31b7569ed3cb2036f26565f1984b9fc08541731ce01012b02a4c238bf03"}, - {file = "coverage-7.4.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:20a875bfd8c282985c4720c32aa05056f77a68e6d8bbc5fe8632c5860ee0b49b"}, - {file = "coverage-7.4.2-cp310-cp310-win32.whl", hash = "sha256:b3f2b1eb229f23c82898eedfc3296137cf1f16bb145ceab3edfd17cbde273fb7"}, - {file = "coverage-7.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7df95fdd1432a5d2675ce630fef5f239939e2b3610fe2f2b5bf21fa505256fa3"}, - {file = "coverage-7.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8ddbd158e069dded57738ea69b9744525181e99974c899b39f75b2b29a624e2"}, - {file = "coverage-7.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81a5fb41b0d24447a47543b749adc34d45a2cf77b48ca74e5bf3de60a7bd9edc"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2412e98e70f16243be41d20836abd5f3f32edef07cbf8f407f1b6e1ceae783ac"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb79414c15c6f03f56cc68fa06994f047cf20207c31b5dad3f6bab54a0f66ef"}, - {file = "coverage-7.4.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf89ab85027427d351f1de918aff4b43f4eb5f33aff6835ed30322a86ac29c9e"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a178b7b1ac0f1530bb28d2e51f88c0bab3e5949835851a60dda80bff6052510c"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:06fe398145a2e91edaf1ab4eee66149c6776c6b25b136f4a86fcbbb09512fd10"}, - {file = "coverage-7.4.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:18cac867950943fe93d6cd56a67eb7dcd2d4a781a40f4c1e25d6f1ed98721a55"}, - {file = "coverage-7.4.2-cp311-cp311-win32.whl", hash = "sha256:f72cdd2586f9a769570d4b5714a3837b3a59a53b096bb954f1811f6a0afad305"}, - {file = "coverage-7.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:d779a48fac416387dd5673fc5b2d6bd903ed903faaa3247dc1865c65eaa5a93e"}, - {file = "coverage-7.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:adbdfcda2469d188d79771d5696dc54fab98a16d2ef7e0875013b5f56a251047"}, - {file = "coverage-7.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ac4bab32f396b03ebecfcf2971668da9275b3bb5f81b3b6ba96622f4ef3f6e17"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:006d220ba2e1a45f1de083d5022d4955abb0aedd78904cd5a779b955b019ec73"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3733545eb294e5ad274abe131d1e7e7de4ba17a144505c12feca48803fea5f64"}, - {file = "coverage-7.4.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a9e754aa250fe61f0f99986399cec086d7e7a01dd82fd863a20af34cbce962"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2ed37e16cf35c8d6e0b430254574b8edd242a367a1b1531bd1adc99c6a5e00fe"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b953275d4edfab6cc0ed7139fa773dfb89e81fee1569a932f6020ce7c6da0e8f"}, - {file = "coverage-7.4.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32b4ab7e6c924f945cbae5392832e93e4ceb81483fd6dc4aa8fb1a97b9d3e0e1"}, - {file = "coverage-7.4.2-cp312-cp312-win32.whl", hash = "sha256:f5df76c58977bc35a49515b2fbba84a1d952ff0ec784a4070334dfbec28a2def"}, - {file = "coverage-7.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:34423abbaad70fea9d0164add189eabaea679068ebdf693baa5c02d03e7db244"}, - {file = "coverage-7.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b11f9c6587668e495cc7365f85c93bed34c3a81f9f08b0920b87a89acc13469"}, - {file = "coverage-7.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:51593a1f05c39332f623d64d910445fdec3d2ac2d96b37ce7f331882d5678ddf"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69f1665165ba2fe7614e2f0c1aed71e14d83510bf67e2ee13df467d1c08bf1e8"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3c8bbb95a699c80a167478478efe5e09ad31680931ec280bf2087905e3b95ec"}, - {file = "coverage-7.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:175f56572f25e1e1201d2b3e07b71ca4d201bf0b9cb8fad3f1dfae6a4188de86"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8562ca91e8c40864942615b1d0b12289d3e745e6b2da901d133f52f2d510a1e3"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d9a1ef0f173e1a19738f154fb3644f90d0ada56fe6c9b422f992b04266c55d5a"}, - {file = "coverage-7.4.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f40ac873045db4fd98a6f40387d242bde2708a3f8167bd967ccd43ad46394ba2"}, - {file = "coverage-7.4.2-cp38-cp38-win32.whl", hash = "sha256:d1b750a8409bec61caa7824bfd64a8074b6d2d420433f64c161a8335796c7c6b"}, - {file = "coverage-7.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b4ae777bebaed89e3a7e80c4a03fac434a98a8abb5251b2a957d38fe3fd30088"}, - {file = "coverage-7.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ff7f92ae5a456101ca8f48387fd3c56eb96353588e686286f50633a611afc95"}, - {file = "coverage-7.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:861d75402269ffda0b33af94694b8e0703563116b04c681b1832903fac8fd647"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3507427d83fa961cbd73f11140f4a5ce84208d31756f7238d6257b2d3d868405"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf711d517e21fb5bc429f5c4308fbc430a8585ff2a43e88540264ae87871e36a"}, - {file = "coverage-7.4.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c00e54f0bd258ab25e7f731ca1d5144b0bf7bec0051abccd2bdcff65fa3262c9"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8e845d894e39fb53834da826078f6dc1a933b32b1478cf437007367efaf6f6a"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:840456cb1067dc350af9080298c7c2cfdddcedc1cb1e0b30dceecdaf7be1a2d3"}, - {file = "coverage-7.4.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c11ca2df2206a4e3e4c4567f52594637392ed05d7c7fb73b4ea1c658ba560265"}, - {file = "coverage-7.4.2-cp39-cp39-win32.whl", hash = "sha256:3ff5bdb08d8938d336ce4088ca1a1e4b6c8cd3bef8bb3a4c0eb2f37406e49643"}, - {file = "coverage-7.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:ac9e95cefcf044c98d4e2c829cd0669918585755dd9a92e28a1a7012322d0a95"}, - {file = "coverage-7.4.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:f593a4a90118d99014517c2679e04a4ef5aee2d81aa05c26c734d271065efcb6"}, - {file = "coverage-7.4.2.tar.gz", hash = "sha256:1a5ee18e3a8d766075ce9314ed1cb695414bae67df6a4b0805f5137d93d6f1cb"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, + {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, + {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, + {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, + {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, + {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, + {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, + {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, + {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, + {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, + {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, + {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, + {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, ] [package.dependencies] @@ -152,6 +159,7 @@ toml = ["tomli"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -163,6 +171,7 @@ files = [ name = "dill" version = "0.3.8" description = "serialize all of Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -178,6 +187,7 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -190,18 +200,21 @@ test = ["pytest (>=6)"] [[package]] name = "future" -version = "0.18.3" +version = "1.0.0" description = "Clean single-source support for Python 3 and 2" +category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ - {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, + {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, + {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, ] [[package]] name = "hyperopt" version = "0.2.7" description = "Distributed Asynchronous Hyperparameter Optimization" +category = "main" optional = false python-versions = "*" files = [ @@ -229,6 +242,7 @@ sparktrials = ["pyspark"] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -240,6 +254,7 @@ files = [ name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -276,6 +291,7 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -290,6 +306,7 @@ colors = ["colorama (>=0.4.6)"] name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -309,6 +326,7 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "joblib" version = "1.3.2" description = "Lightweight pipelining with Python functions" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -320,6 +338,7 @@ files = [ name = "lazy-object-proxy" version = "1.10.0" description = "A fast and thorough lazy object proxy." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -366,6 +385,7 @@ files = [ name = "llvmlite" version = "0.42.0" description = "lightweight wrapper around basic LLVM functionality" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -396,6 +416,7 @@ files = [ name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -410,6 +431,7 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -421,6 +443,7 @@ files = [ name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" +category = "main" optional = false python-versions = "*" files = [ @@ -438,6 +461,7 @@ tests = ["pytest (>=4.6)"] name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -456,6 +480,7 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "numba" version = "0.59.0" description = "compiling Python code using LLVM" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -483,13 +508,14 @@ files = [ ] [package.dependencies] -llvmlite = "==0.42.*" +llvmlite = ">=0.42.0dev0,<0.43" numpy = ">=1.22,<1.27" [[package]] name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -535,6 +561,7 @@ files = [ name = "packaging" version = "23.2" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -546,6 +573,7 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -561,6 +589,7 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." +category = "dev" optional = false python-versions = "*" files = [ @@ -575,6 +604,7 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "dev" optional = false python-versions = "*" files = [ @@ -586,6 +616,7 @@ files = [ name = "platformdirs" version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -601,6 +632,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- name = "pluggy" version = "1.4.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -616,6 +648,7 @@ testing = ["pytest", "pytest-benchmark"] name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" +category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -630,6 +663,7 @@ wcwidth = "*" name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -658,6 +692,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "dev" optional = false python-versions = "*" files = [ @@ -669,6 +704,7 @@ files = [ name = "py4j" version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" +category = "main" optional = false python-versions = "*" files = [ @@ -680,6 +716,7 @@ files = [ name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -695,6 +732,7 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pylint" version = "2.17.7" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -724,6 +762,7 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -746,6 +785,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -764,6 +804,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-env" version = "0.8.2" description = "py.test plugin that allows you to add environment variables." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -781,6 +822,7 @@ test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] name = "qibo" version = "0.2.4" description = "A framework for quantum computing with hardware acceleration." +category = "main" optional = false python-versions = ">=3.9,<3.12" files = [ @@ -800,6 +842,7 @@ tabulate = ">=0.9.0,<0.10.0" name = "scipy" version = "1.12.0" description = "Fundamental algorithms for scientific computing in Python" +category = "main" optional = false python-versions = ">=3.9" files = [ @@ -840,24 +883,26 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "setuptools" -version = "69.1.0" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, - {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -869,6 +914,7 @@ files = [ name = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -883,6 +929,7 @@ mpmath = ">=0.19" name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -897,6 +944,7 @@ widechars = ["wcwidth"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -908,6 +956,7 @@ files = [ name = "tomlkit" version = "0.12.3" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -919,6 +968,7 @@ files = [ name = "tqdm" version = "4.66.2" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -939,6 +989,7 @@ telegram = ["requests"] name = "traitlets" version = "5.14.1" description = "Traitlets Python configuration system" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -952,19 +1003,21 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" optional = false python-versions = "*" files = [ @@ -976,6 +1029,7 @@ files = [ name = "wrapt" version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." +category = "dev" optional = false python-versions = ">=3.6" files = [ diff --git a/pyproject.toml b/pyproject.toml index 7c34f40d..ee61ec9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,11 @@ output-format = "colorized" [tool.pylint.reports] output-format = "colorized" +[tool.coverage.run] +omit = [ + "src/qibojit/backends/clifford_operations*", +] + [tool.pytest.ini_options] testpaths = ['src/qibojit/tests/'] addopts = ['--cov=qibojit', '--cov-report=xml'] From 5080bb75f855a84c6049261e9e9d8af023fb3c93 Mon Sep 17 00:00:00 2001 From: scarrazza Date: Sat, 2 Mar 2024 08:24:54 +0100 Subject: [PATCH 69/73] updating dependecies --- poetry.lock | 1391 ++++++++++++++++++++++++++++++++++++++++++------ pyproject.toml | 2 +- 2 files changed, 1230 insertions(+), 163 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8bd8dfb1..86c2bd2c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,31 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. + +[[package]] +name = "absl-py" +version = "2.1.0" +description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." +optional = false +python-versions = ">=3.7" +files = [ + {file = "absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff"}, + {file = "absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308"}, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.1" +description = "ANTLR 4.13.1 runtime for Python 3" +optional = false +python-versions = "*" +files = [ + {file = "antlr4-python3-runtime-4.13.1.tar.gz", hash = "sha256:3cd282f5ea7cfb841537fe01f143350fdb1c0b1ce7981443a2fa8513fddb6d1a"}, + {file = "antlr4_python3_runtime-4.13.1-py3-none-any.whl", hash = "sha256:78ec57aad12c97ac039ca27403ad61cb98aaec8a3f9bb8144f889aa0fa28b943"}, +] [[package]] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -16,7 +37,6 @@ files = [ name = "astroid" version = "2.15.8" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -32,11 +52,25 @@ wrapt = [ {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] +[[package]] +name = "astunparse" +version = "1.6.3" +description = "An AST unparser for Python" +optional = false +python-versions = "*" +files = [ + {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"}, + {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"}, +] + +[package.dependencies] +six = ">=1.6.1,<2.0" +wheel = ">=0.23.0,<1.0" + [[package]] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" optional = false python-versions = "*" files = [ @@ -44,11 +78,152 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +[[package]] +name = "cachetools" +version = "5.3.3" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, +] + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "clarabel" +version = "0.7.1" +description = "Clarabel Conic Interior Point Solver for Rust / Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "clarabel-0.7.1-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:32980b578842d17abe3d277df2d31a6b8bff3facf33b169c74d59b2ada10b61b"}, + {file = "clarabel-0.7.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b4d414b9db040effa186f9e048de2c7d3e38b6edcadaaa2432a52b6451ba9999"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec0fde90a467e07010176b0bd159ab8cb11c59c8ff0a09580af1ac77d7861971"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:754e2681eb74e7f6fc35612ae58219d76819a0bc1b67771752b6f5425f72c1f8"}, + {file = "clarabel-0.7.1-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33283d190f1e2a3b8559c928f0eb0d1fefc45aad334fd0566cdf5eaa94606a13"}, + {file = "clarabel-0.7.1-cp37-abi3-win32.whl", hash = "sha256:519f9b1daba08f909c106da8b5fd52937cfbc4ba27086c4cbd9728d168cfbc5c"}, + {file = "clarabel-0.7.1-cp37-abi3-win_amd64.whl", hash = "sha256:33faf5a02465eb5f7f7380d892ce3cf1d293a3efefcea18d637c618f012f5f36"}, + {file = "clarabel-0.7.1.tar.gz", hash = "sha256:a30ab135f475c5bc78329fd7df575291155e6055bcaf02124eb610b8ad176396"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" + [[package]] name = "cloudpickle" version = "3.0.0" description = "Pickler class to extend the standard pickle.Pickler functionality" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -60,7 +235,6 @@ files = [ name = "cma" version = "3.3.0" description = "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python" -category = "main" optional = false python-versions = "*" files = [ @@ -79,7 +253,6 @@ plotting = ["matplotlib"] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -91,7 +264,6 @@ files = [ name = "coverage" version = "7.4.3" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -155,11 +327,68 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cvxpy" +version = "1.4.2" +description = "A domain-specific language for modeling convex optimization problems in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cvxpy-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:06231c0b2a65f7c8ba32c2772576c24e93e1ca964444b90c6bad366b9c0a5bdc"}, + {file = "cvxpy-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f257971b007261d53ec7f50618f0c6a511387dd7df6cd686d2647c3fa91da0eb"}, + {file = "cvxpy-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38c2191d4142baac206ac590ba9e5cb1c6e025ac95d0a746692c9cf8d1afd46e"}, + {file = "cvxpy-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9d006f76925127cd42b80e2d98c950a8339f8204b4c23fa25af83d895e95fa"}, + {file = "cvxpy-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:2a09ebd8f7a8b6b5d026d03295daee0780e2f6847fbe6f207e9764045ffbbfc9"}, + {file = "cvxpy-1.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:079fe6aeaeec2ddf6163ff8ca6510afd5c2b66ea391605791a77b51e534b935e"}, + {file = "cvxpy-1.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8419dffcadefc16e6fcbe8a088068c29edb1f28ea90582f075a96f21ae7ff11"}, + {file = "cvxpy-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6551ef3b325d707e98f920dd120ebaa968f3ac3484c21f8567f2081967d26f0"}, + {file = "cvxpy-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea513f4bf83491a1c9e5366faa4ca9fc21ec9522c30bcd55e49de9bb85fe9a2"}, + {file = "cvxpy-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:78560a02607d16fbb26db6306e7ce6d8e4fcda49cf04578d199ac050c2e74daa"}, + {file = "cvxpy-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9817cf8da86641e2d322911844e86b8e7b1d93d9b2d57ae6d33e84be430e1e04"}, + {file = "cvxpy-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:32999d550a923c9448d973ef9d3ab75d73e1bdf56102fc32fe7ccb5e0cb5d7a3"}, + {file = "cvxpy-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213b465450f4254226e6c18c70e25e911ae2c60176621f1bc2d9a0eb874288db"}, + {file = "cvxpy-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec30efa81d1f79f668b0fa6e8ac654047db7a3e844ab16022e1b5dcf52177192"}, + {file = "cvxpy-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:779c19be964f7a586337fd4d017c7a0202bf845e08b04a174850f962b45b2a00"}, + {file = "cvxpy-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb1d6af8406efa1de0408d0a76c248da3185cade49f45c443239772830b7d6bb"}, + {file = "cvxpy-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:63102885fdfd3eae716c042ee7aad9439d0b71ba22e5432c85f0e35056fcb159"}, + {file = "cvxpy-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20015b82117c0253ca803c4e174010067bda0eedb539503ba58b98e00acdd0f2"}, + {file = "cvxpy-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f73ff4f0e7bff1e438dc2b02490d7a8e1027c421057a7971b4ca4982c28d60"}, + {file = "cvxpy-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b7cfc6be34b288acade31b58a1e88b119487165d0ed877db9decf7fd676502f6"}, + {file = "cvxpy-1.4.2.tar.gz", hash = "sha256:0a386a5788dbd78b7b20dd071524ec636c8fa72b3628e69f1abc714c8f9811e5"}, +] + +[package.dependencies] +clarabel = ">=0.5.0" +ecos = ">=2" +numpy = ">=1.15" +osqp = ">=0.6.2" +pybind11 = "*" +scipy = ">=1.1.0" +scs = ">=3.0" + +[package.extras] +cbc = ["cylp (>=0.91.5)"] +clarabel = ["clarabel"] +cvxopt = ["cvxopt"] +diffcp = ["diffcp"] +glop = ["ortools (>=9.5,<9.8)"] +glpk = ["cvxopt"] +glpk-mi = ["cvxopt"] +gurobi = ["gurobipy"] +highs = ["scipy (>=1.6.1)"] +mosek = ["Mosek"] +pdlp = ["ortools (>=9.5,<9.8)"] +piqp = ["piqp"] +proxqp = ["proxsuite"] +scip = ["PySCIPOpt"] +scipy = ["scipy"] +scs = ["setuptools (>65.5.1)"] +xpress = ["xpress"] + [[package]] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -171,7 +400,6 @@ files = [ name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -183,11 +411,42 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] +[[package]] +name = "ecos" +version = "2.0.13" +description = "This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information." +optional = false +python-versions = "*" +files = [ + {file = "ecos-2.0.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1c1acf33b70f8657c25f07ec8d7b59bb01dbad39f072fa61fc956c2166ed979"}, + {file = "ecos-2.0.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ea88ee2c94192004d6be9c55a3c79f184eaba3bbf31474229045a1b0a8a1536"}, + {file = "ecos-2.0.13-cp310-cp310-win_amd64.whl", hash = "sha256:df8ae7fce79be9e5f79f0511c51a4824795de5154847fabe1a0288bc2ea349d3"}, + {file = "ecos-2.0.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88dd628bc6e77a069165fa5f50340e2856795c28e00e3fce213a04d7c41c584a"}, + {file = "ecos-2.0.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2c969c7e22fd8a1d1cd0a90f4325d90572da23e2e923b0da6138ce62503d0"}, + {file = "ecos-2.0.13-cp311-cp311-win_amd64.whl", hash = "sha256:936890fb85a186360a5c8f228dd19acb760e234b38c598d0b46ab29644e31dfc"}, + {file = "ecos-2.0.13-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62ed497ab56017f1d7264eb56223826a984462b1d84fb850d10f0bec3490877d"}, + {file = "ecos-2.0.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf2b1384012bee9e58e5a2373905d3644f74a0ea000b307a239366fe7850c29c"}, + {file = "ecos-2.0.13-cp312-cp312-win_amd64.whl", hash = "sha256:2c1ea09069e32185912506f946bb6d1f144841ba1d1cd0217c67f72cbdf7a8fd"}, + {file = "ecos-2.0.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9f4a76a3e1165359e1704ec6b1b89d487858ec0d838d62a7268133d88221914"}, + {file = "ecos-2.0.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c2d4e0d3ada1a619ddd62fbf48ccbe9b738fdbef119945fe2a05566d03b85a"}, + {file = "ecos-2.0.13-cp37-cp37m-win_amd64.whl", hash = "sha256:84c72e1e5ffa41cd38352dcf0a8c25418f5bf04ed76a576db0daaf9a69f5568f"}, + {file = "ecos-2.0.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1979f1f17ec7f1a0fc45964d02d762393f9f427d965fe8a893e7b1476a9023c3"}, + {file = "ecos-2.0.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:059e6c29c89f47a490353e4f9336e96350a5102a97e1d8a2aaff796bcbe50058"}, + {file = "ecos-2.0.13-cp38-cp38-win_amd64.whl", hash = "sha256:30c7d0cce6c830da5b9ea25af0d47b203255639524eb4d03d1331c600958c834"}, + {file = "ecos-2.0.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42c15f1d79eb2ada532e9781b4aeb3ed84b1c7e38239ba4d6502c6a092d5b1"}, + {file = "ecos-2.0.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32fb33185f6dd94a1c798bc481eb86c9f4e832efec91f6ab0584e2fc26fd375e"}, + {file = "ecos-2.0.13-cp39-cp39-win_amd64.whl", hash = "sha256:68995ab12d363576dddb2d1f91ead3b9c8a8ca61f29000f0b1daef1b4e7b5b64"}, + {file = "ecos-2.0.13.tar.gz", hash = "sha256:f2a9dc108ade7faf6f6f4fad245f4714b7293c8767d2a351ead59428a94a98b9"}, +] + +[package.dependencies] +numpy = ">=1.6" +scipy = ">=0.9" + [[package]] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -198,11 +457,21 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "flatbuffers" +version = "23.5.26" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-23.5.26-py2.py3-none-any.whl", hash = "sha256:c0ff356da363087b915fde4b8b45bdda73432fc17cddb3c8157472eab1422ad1"}, + {file = "flatbuffers-23.5.26.tar.gz", hash = "sha256:9ea1144cac05ce5d86e2859f431c6cd5e66cd9c78c558317c7955fb8d4c78d89"}, +] + [[package]] name = "future" version = "1.0.0" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -210,11 +479,180 @@ files = [ {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, ] +[[package]] +name = "gast" +version = "0.5.4" +description = "Python AST that abstracts the underlying Python version" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "gast-0.5.4-py3-none-any.whl", hash = "sha256:6fc4fa5fa10b72fb8aab4ae58bcb023058386e67b6fa2e3e34cec5c769360316"}, + {file = "gast-0.5.4.tar.gz", hash = "sha256:9c270fe5f4b130969b54174de7db4e764b09b4f7f67ccfc32480e29f78348d97"}, +] + +[[package]] +name = "google-auth" +version = "2.28.1" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.28.1.tar.gz", hash = "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885"}, + {file = "google_auth-2.28.1-py2.py3-none-any.whl", hash = "sha256:25141e2d7a14bfcba945f5e9827f98092716e99482562f15306e5b026e21aa72"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-oauthlib" +version = "1.2.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "google-auth-oauthlib-1.2.0.tar.gz", hash = "sha256:292d2d3783349f2b0734a0a0207b1e1e322ac193c2c09d8f7c613fb7cc501ea8"}, + {file = "google_auth_oauthlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:297c1ce4cb13a99b5834c74a1fe03252e1e499716718b190f56bcb9c4abc4faf"}, +] + +[package.dependencies] +google-auth = ">=2.15.0" +requests-oauthlib = ">=0.7.0" + +[package.extras] +tool = ["click (>=6.0.0)"] + +[[package]] +name = "google-pasta" +version = "0.2.0" +description = "pasta is an AST-based Python refactoring library" +optional = false +python-versions = "*" +files = [ + {file = "google-pasta-0.2.0.tar.gz", hash = "sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e"}, + {file = "google_pasta-0.2.0-py2-none-any.whl", hash = "sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954"}, + {file = "google_pasta-0.2.0-py3-none-any.whl", hash = "sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "grpcio" +version = "1.62.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.62.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:136ffd79791b1eddda8d827b607a6285474ff8a1a5735c4947b58c481e5e4271"}, + {file = "grpcio-1.62.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d6a56ba703be6b6267bf19423d888600c3f574ac7c2cc5e6220af90662a4d6b0"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:4cd356211579043fce9f52acc861e519316fff93980a212c8109cca8f47366b6"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e803e9b58d8f9b4ff0ea991611a8d51b31c68d2e24572cd1fe85e99e8cc1b4f8"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4c04fe33039b35b97c02d2901a164bbbb2f21fb9c4e2a45a959f0b044c3512c"}, + {file = "grpcio-1.62.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:95370c71b8c9062f9ea033a0867c4c73d6f0ff35113ebd2618171ec1f1e903e0"}, + {file = "grpcio-1.62.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c912688acc05e4ff012c8891803659d6a8a8b5106f0f66e0aed3fb7e77898fa6"}, + {file = "grpcio-1.62.0-cp310-cp310-win32.whl", hash = "sha256:821a44bd63d0f04e33cf4ddf33c14cae176346486b0df08b41a6132b976de5fc"}, + {file = "grpcio-1.62.0-cp310-cp310-win_amd64.whl", hash = "sha256:81531632f93fece32b2762247c4c169021177e58e725494f9a746ca62c83acaa"}, + {file = "grpcio-1.62.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3fa15850a6aba230eed06b236287c50d65a98f05054a0f01ccedf8e1cc89d57f"}, + {file = "grpcio-1.62.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:36df33080cd7897623feff57831eb83c98b84640b016ce443305977fac7566fb"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:7a195531828b46ea9c4623c47e1dc45650fc7206f8a71825898dd4c9004b0928"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab140a3542bbcea37162bdfc12ce0d47a3cda3f2d91b752a124cc9fe6776a9e2"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f9d6c3223914abb51ac564dc9c3782d23ca445d2864321b9059d62d47144021"}, + {file = "grpcio-1.62.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fbe0c20ce9a1cff75cfb828b21f08d0a1ca527b67f2443174af6626798a754a4"}, + {file = "grpcio-1.62.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38f69de9c28c1e7a8fd24e4af4264726637b72f27c2099eaea6e513e7142b47e"}, + {file = "grpcio-1.62.0-cp311-cp311-win32.whl", hash = "sha256:ce1aafdf8d3f58cb67664f42a617af0e34555fe955450d42c19e4a6ad41c84bd"}, + {file = "grpcio-1.62.0-cp311-cp311-win_amd64.whl", hash = "sha256:eef1d16ac26c5325e7d39f5452ea98d6988c700c427c52cbc7ce3201e6d93334"}, + {file = "grpcio-1.62.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8aab8f90b2a41208c0a071ec39a6e5dbba16fd827455aaa070fec241624ccef8"}, + {file = "grpcio-1.62.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:62aa1659d8b6aad7329ede5d5b077e3d71bf488d85795db517118c390358d5f6"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:0d7ae7fc7dbbf2d78d6323641ded767d9ec6d121aaf931ec4a5c50797b886532"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f359d635ee9428f0294bea062bb60c478a8ddc44b0b6f8e1f42997e5dc12e2ee"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d48e5b1f8f4204889f1acf30bb57c30378e17c8d20df5acbe8029e985f735c"}, + {file = "grpcio-1.62.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:662d3df5314ecde3184cf87ddd2c3a66095b3acbb2d57a8cada571747af03873"}, + {file = "grpcio-1.62.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92cdb616be44c8ac23a57cce0243af0137a10aa82234f23cd46e69e115071388"}, + {file = "grpcio-1.62.0-cp312-cp312-win32.whl", hash = "sha256:0b9179478b09ee22f4a36b40ca87ad43376acdccc816ce7c2193a9061bf35701"}, + {file = "grpcio-1.62.0-cp312-cp312-win_amd64.whl", hash = "sha256:614c3ed234208e76991992342bab725f379cc81c7dd5035ee1de2f7e3f7a9842"}, + {file = "grpcio-1.62.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:7e1f51e2a460b7394670fdb615e26d31d3260015154ea4f1501a45047abe06c9"}, + {file = "grpcio-1.62.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:bcff647e7fe25495e7719f779cc219bbb90b9e79fbd1ce5bda6aae2567f469f2"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:56ca7ba0b51ed0de1646f1735154143dcbdf9ec2dbe8cc6645def299bb527ca1"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e84bfb2a734e4a234b116be208d6f0214e68dcf7804306f97962f93c22a1839"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c1488b31a521fbba50ae86423f5306668d6f3a46d124f7819c603979fc538c4"}, + {file = "grpcio-1.62.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:98d8f4eb91f1ce0735bf0b67c3b2a4fea68b52b2fd13dc4318583181f9219b4b"}, + {file = "grpcio-1.62.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b3d3d755cfa331d6090e13aac276d4a3fb828bf935449dc16c3d554bf366136b"}, + {file = "grpcio-1.62.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a33f2bfd8a58a02aab93f94f6c61279be0f48f99fcca20ebaee67576cd57307b"}, + {file = "grpcio-1.62.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:5e709f7c8028ce0443bddc290fb9c967c1e0e9159ef7a030e8c21cac1feabd35"}, + {file = "grpcio-1.62.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:2f3d9a4d0abb57e5f49ed5039d3ed375826c2635751ab89dcc25932ff683bbb6"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:62ccb92f594d3d9fcd00064b149a0187c246b11e46ff1b7935191f169227f04c"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921148f57c2e4b076af59a815467d399b7447f6e0ee10ef6d2601eb1e9c7f402"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f897b16190b46bc4d4aaf0a32a4b819d559a37a756d7c6b571e9562c360eed72"}, + {file = "grpcio-1.62.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1bc8449084fe395575ed24809752e1dc4592bb70900a03ca42bf236ed5bf008f"}, + {file = "grpcio-1.62.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81d444e5e182be4c7856cd33a610154fe9ea1726bd071d07e7ba13fafd202e38"}, + {file = "grpcio-1.62.0-cp38-cp38-win32.whl", hash = "sha256:88f41f33da3840b4a9bbec68079096d4caf629e2c6ed3a72112159d570d98ebe"}, + {file = "grpcio-1.62.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc2836cb829895ee190813446dce63df67e6ed7b9bf76060262c55fcd097d270"}, + {file = "grpcio-1.62.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fcc98cff4084467839d0a20d16abc2a76005f3d1b38062464d088c07f500d170"}, + {file = "grpcio-1.62.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:0d3dee701e48ee76b7d6fbbba18ba8bc142e5b231ef7d3d97065204702224e0e"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b7a6be562dd18e5d5bec146ae9537f20ae1253beb971c0164f1e8a2f5a27e829"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29cb592c4ce64a023712875368bcae13938c7f03e99f080407e20ffe0a9aa33b"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eda79574aec8ec4d00768dcb07daba60ed08ef32583b62b90bbf274b3c279f7"}, + {file = "grpcio-1.62.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7eea57444a354ee217fda23f4b479a4cdfea35fb918ca0d8a0e73c271e52c09c"}, + {file = "grpcio-1.62.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0e97f37a3b7c89f9125b92d22e9c8323f4e76e7993ba7049b9f4ccbe8bae958a"}, + {file = "grpcio-1.62.0-cp39-cp39-win32.whl", hash = "sha256:39cd45bd82a2e510e591ca2ddbe22352e8413378852ae814549c162cf3992a93"}, + {file = "grpcio-1.62.0-cp39-cp39-win_amd64.whl", hash = "sha256:b71c65427bf0ec6a8b48c68c17356cb9fbfc96b1130d20a07cb462f4e4dcdcd5"}, + {file = "grpcio-1.62.0.tar.gz", hash = "sha256:748496af9238ac78dcd98cce65421f1adce28c3979393e3609683fcd7f3880d7"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.62.0)"] + +[[package]] +name = "h5py" +version = "3.10.0" +description = "Read and write HDF5 files from Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "h5py-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b963fb772964fc1d1563c57e4e2e874022ce11f75ddc6df1a626f42bd49ab99f"}, + {file = "h5py-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:012ab448590e3c4f5a8dd0f3533255bc57f80629bf7c5054cf4c87b30085063c"}, + {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:781a24263c1270a62cd67be59f293e62b76acfcc207afa6384961762bb88ea03"}, + {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42e6c30698b520f0295d70157c4e202a9e402406f50dc08f5a7bc416b24e52d"}, + {file = "h5py-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:93dd840bd675787fc0b016f7a05fc6efe37312a08849d9dd4053fd0377b1357f"}, + {file = "h5py-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2381e98af081b6df7f6db300cd88f88e740649d77736e4b53db522d8874bf2dc"}, + {file = "h5py-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:667fe23ab33d5a8a6b77970b229e14ae3bb84e4ea3382cc08567a02e1499eedd"}, + {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90286b79abd085e4e65e07c1bd7ee65a0f15818ea107f44b175d2dfe1a4674b7"}, + {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c013d2e79c00f28ffd0cc24e68665ea03ae9069e167087b2adb5727d2736a52"}, + {file = "h5py-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:92273ce69ae4983dadb898fd4d3bea5eb90820df953b401282ee69ad648df684"}, + {file = "h5py-3.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c97d03f87f215e7759a354460fb4b0d0f27001450b18b23e556e7856a0b21c3"}, + {file = "h5py-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86df4c2de68257b8539a18646ceccdcf2c1ce6b1768ada16c8dcfb489eafae20"}, + {file = "h5py-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9ab36be991119a3ff32d0c7cbe5faf9b8d2375b5278b2aea64effbeba66039"}, + {file = "h5py-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c8e4fda19eb769e9a678592e67eaec3a2f069f7570c82d2da909c077aa94339"}, + {file = "h5py-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:492305a074327e8d2513011fa9fffeb54ecb28a04ca4c4227d7e1e9616d35641"}, + {file = "h5py-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9450464b458cca2c86252b624279115dcaa7260a40d3cb1594bf2b410a2bd1a3"}, + {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6f6d1384a9f491732cee233b99cd4bfd6e838a8815cc86722f9d2ee64032af"}, + {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3074ec45d3dc6e178c6f96834cf8108bf4a60ccb5ab044e16909580352010a97"}, + {file = "h5py-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:212bb997a91e6a895ce5e2f365ba764debeaef5d2dca5c6fb7098d66607adf99"}, + {file = "h5py-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dfc65ac21fa2f630323c92453cadbe8d4f504726ec42f6a56cf80c2f90d6c52"}, + {file = "h5py-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4682b94fd36ab217352be438abd44c8f357c5449b8995e63886b431d260f3d3"}, + {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aece0e2e1ed2aab076c41802e50a0c3e5ef8816d60ece39107d68717d4559824"}, + {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a61b2c2ad65b1fabc28802d133eed34debcc2c8b420cb213d3d4ef4d3e2229"}, + {file = "h5py-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae2f0201c950059676455daf92700eeb57dcf5caaf71b9e1328e6e6593601770"}, + {file = "h5py-3.10.0.tar.gz", hash = "sha256:d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"}, +] + +[package.dependencies] +numpy = ">=1.17.3" + [[package]] name = "hyperopt" version = "0.2.7" description = "Distributed Asynchronous Hyperparameter Optimization" -category = "main" optional = false python-versions = "*" files = [ @@ -238,11 +676,40 @@ dev = ["black", "nose", "pre-commit", "pytest"] mongotrials = ["pymongo"] sparktrials = ["pyspark"] +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "importlib-metadata" +version = "7.0.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -254,7 +721,6 @@ files = [ name = "ipython" version = "7.34.0" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -291,7 +757,6 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -306,7 +771,6 @@ colors = ["colorama (>=0.4.6)"] name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -326,7 +790,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "joblib" version = "1.3.2" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -334,11 +797,21 @@ files = [ {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, ] +[[package]] +name = "keras" +version = "2.15.0" +description = "Deep learning for humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "keras-2.15.0-py3-none-any.whl", hash = "sha256:2dcc6d2e30cf9c951064b63c1f4c404b966c59caf09e01f3549138ec8ee0dd1f"}, + {file = "keras-2.15.0.tar.gz", hash = "sha256:81871d298c064dc4ac6b58440fdae67bfcf47c8d7ad28580fab401834c06a575"}, +] + [[package]] name = "lazy-object-proxy" version = "1.10.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -381,11 +854,30 @@ files = [ {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] +[[package]] +name = "libclang" +version = "16.0.6" +description = "Clang Python Bindings, mirrored from the official LLVM repo: https://github.com/llvm/llvm-project/tree/main/clang/bindings/python, to make the installation process easier." +optional = false +python-versions = "*" +files = [ + {file = "libclang-16.0.6-1-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:88bc7e7b393c32e41e03ba77ef02fdd647da1f764c2cd028e69e0837080b79f6"}, + {file = "libclang-16.0.6-1-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:d80ed5827736ed5ec2bcedf536720476fd9d4fa4c79ef0cb24aea4c59332f361"}, + {file = "libclang-16.0.6-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:da9e47ebc3f0a6d90fb169ef25f9fbcd29b4a4ef97a8b0e3e3a17800af1423f4"}, + {file = "libclang-16.0.6-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1a5ad1e895e5443e205568c85c04b4608e4e973dae42f4dfd9cb46c81d1486b"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2010_x86_64.whl", hash = "sha256:9dcdc730939788b8b69ffd6d5d75fe5366e3ee007f1e36a99799ec0b0c001492"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:8130482120500476a027171f8f3c8dfc2536b591716eea71fc5da22cae13131b"}, + {file = "libclang-16.0.6-py2.py3-none-manylinux2014_armv7l.whl", hash = "sha256:1e940048f51d0b0999099a9b78629ab8a64b62af5e9ff1b2b062439c21ee244d"}, + {file = "libclang-16.0.6-py2.py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f04e3060ae1f207f234d0608900c99c50edcb743e5e18276d78da2ddd727d39f"}, + {file = "libclang-16.0.6-py2.py3-none-win_amd64.whl", hash = "sha256:daab4a11dae228f1efa9efa3fe638b493b14d8d52c71fb3c7019e2f1df4514c2"}, + {file = "libclang-16.0.6-py2.py3-none-win_arm64.whl", hash = "sha256:4a9acbfd9c135a72f80d5dbff7588dfb0c81458244a89b9e83526e8595880e0a"}, + {file = "libclang-16.0.6.tar.gz", hash = "sha256:4acdde39dfe410c877b4ccc0d4b57eb952100e4ee26bbdf6cfdb88e2033a7d31"}, +] + [[package]] name = "llvmlite" version = "0.42.0" description = "lightweight wrapper around basic LLVM functionality" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -412,11 +904,97 @@ files = [ {file = "llvmlite-0.42.0.tar.gz", hash = "sha256:f92b09243c0cc3f457da8b983f67bd8e1295d0f5b3746c7a1861d7a99403854a"}, ] +[[package]] +name = "markdown" +version = "3.5.2" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + [[package]] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -431,7 +1009,6 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -439,11 +1016,46 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "ml-dtypes" +version = "0.2.0" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ml_dtypes-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df6a76e1c8adf484feb138ed323f9f40a7b6c21788f120f7c78bec20ac37ee81"}, + {file = "ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc29a0524ef5e23a7fbb8d881bdecabeb3fc1d19d9db61785d077a86cb94fab2"}, + {file = "ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08c391c2794f2aad358e6f4c70785a9a7b1df980ef4c232b3ccd4f6fe39f719"}, + {file = "ml_dtypes-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:75015818a7fccf99a5e8ed18720cb430f3e71a8838388840f4cdf225c036c983"}, + {file = "ml_dtypes-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e70047ec2c83eaee01afdfdabee2c5b0c133804d90d0f7db4dd903360fcc537c"}, + {file = "ml_dtypes-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36d28b8861a8931695e5a31176cad5ae85f6504906650dea5598fbec06c94606"}, + {file = "ml_dtypes-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e85ba8e24cf48d456e564688e981cf379d4c8e644db0a2f719b78de281bac2ca"}, + {file = "ml_dtypes-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:832a019a1b6db5c4422032ca9940a990fa104eee420f643713241b3a518977fa"}, + {file = "ml_dtypes-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8faaf0897942c8253dd126662776ba45f0a5861968cf0f06d6d465f8a7bc298a"}, + {file = "ml_dtypes-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b984cddbe8173b545a0e3334fe56ea1a5c3eb67c507f60d0cfde1d3fa8f8c2"}, + {file = "ml_dtypes-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:022d5a4ee6be14569c2a9d1549e16f1ec87ca949681d0dca59995445d5fcdd5b"}, + {file = "ml_dtypes-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:50845af3e9a601810751b55091dee6c2562403fa1cb4e0123675cf3a4fc2c17a"}, + {file = "ml_dtypes-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f00c71c8c63e03aff313bc6a7aeaac9a4f1483a921a6ffefa6d4404efd1af3d0"}, + {file = "ml_dtypes-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80d304c836d73f10605c58ccf7789c171cc229bfb678748adfb7cea2510dfd0e"}, + {file = "ml_dtypes-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32107e7fa9f62db9a5281de923861325211dfff87bd23faefb27b303314635ab"}, + {file = "ml_dtypes-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:1749b60348da71fd3c2ab303fdbc1965958dc50775ead41f5669c932a341cafd"}, + {file = "ml_dtypes-0.2.0.tar.gz", hash = "sha256:6488eb642acaaf08d8020f6de0a38acee7ac324c1e6e92ee0c0fea42422cb797"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.3", markers = "python_version > \"3.10\""}, + {version = ">=1.21.2", markers = "python_version > \"3.9\" and python_version <= \"3.10\""}, + {version = ">1.20", markers = "python_version <= \"3.9\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + [[package]] name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" -category = "main" optional = false python-versions = "*" files = [ @@ -461,7 +1073,6 @@ tests = ["pytest (>=4.6)"] name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -480,7 +1091,6 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "numba" version = "0.59.0" description = "compiling Python code using LLVM" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -508,14 +1118,13 @@ files = [ ] [package.dependencies] -llvmlite = ">=0.42.0dev0,<0.43" +llvmlite = "==0.42.*" numpy = ">=1.22,<1.27" [[package]] name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -557,11 +1166,107 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "openqasm3" +version = "0.5.0" +description = "Reference OpenQASM AST in Python" +optional = false +python-versions = "*" +files = [ + {file = "openqasm3-0.5.0-py3-none-any.whl", hash = "sha256:40991ac057b9e3c208d1b34242b0aad8a3b9840df0335a652b1e4e4248937b1c"}, + {file = "openqasm3-0.5.0.tar.gz", hash = "sha256:bf8bf4ed098393447e552eaea18b0a34a2429d228477683d6b579348bc17bfc8"}, +] + +[package.dependencies] +antlr4-python3-runtime = {version = ">=4.7,<4.14", optional = true, markers = "extra == \"parser\""} +importlib-metadata = {version = "*", optional = true, markers = "python_version < \"3.10\" and extra == \"parser\""} + +[package.extras] +all = ["antlr4-python3-runtime (>=4.7,<4.14)", "importlib-metadata", "pytest (>=6.0)", "pyyaml"] +parser = ["antlr4-python3-runtime (>=4.7,<4.14)", "importlib-metadata"] +tests = ["pytest (>=6.0)", "pyyaml"] + +[[package]] +name = "opt-einsum" +version = "3.3.0" +description = "Optimizing numpys einsum function" +optional = false +python-versions = ">=3.5" +files = [ + {file = "opt_einsum-3.3.0-py3-none-any.whl", hash = "sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147"}, + {file = "opt_einsum-3.3.0.tar.gz", hash = "sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549"}, +] + +[package.dependencies] +numpy = ">=1.7" + +[package.extras] +docs = ["numpydoc", "sphinx (==1.2.3)", "sphinx-rtd-theme", "sphinxcontrib-napoleon"] +tests = ["pytest", "pytest-cov", "pytest-pep8"] + +[[package]] +name = "osqp" +version = "0.6.5" +description = "OSQP: The Operator Splitting QP Solver" +optional = false +python-versions = "*" +files = [ + {file = "osqp-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8024dba07281111af39e71bff6449fb22a37bf3358aa0c7fd1daa6bca692c99"}, + {file = "osqp-0.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a68e247f2bbb53e87f1c1ca80ff3fc86b781f771d6da2a2ecd2f6e7492c802f3"}, + {file = "osqp-0.6.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e81e299637eb2342e30eb2df0ec45dc243683af0a71676c9b45b9337bb05da97"}, + {file = "osqp-0.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:42425632927d983cbe935067783b944ebd4959e9eb6611da8401007b66a0c841"}, + {file = "osqp-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7b180db09be1c3e3cb4109396b894f481ca9c6e160a530acd71f1769610f96c"}, + {file = "osqp-0.6.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:648f4beff10c16620f3b95e86dee702052d587b847ddbd5d8f71ad39ac36db3a"}, + {file = "osqp-0.6.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7649d56d775662e0a5d1665ed220d585f904d14a49cc6931bf27725bb9c4b2e0"}, + {file = "osqp-0.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:b033b7aec973a655cfec4558e0c4fc92ee9f914bcb0a669e0156398d8ddbef8f"}, + {file = "osqp-0.6.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5c344619465e625aac6d13812d442dd31d4a9ab243e39abb5938c3f6116409b0"}, + {file = "osqp-0.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:000ad48aa071ecc4c75ebc39d1291752fe3a9937a30d00fff5dc61663ec67eeb"}, + {file = "osqp-0.6.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a36a40df69db5195fba613341663db2c7dcf977eb75b9578a8fd7682bbe02324"}, + {file = "osqp-0.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:3d8212db7c55af1961ccce4a32fd382bfe34e2198664ea3f81cc47eef8d0f288"}, + {file = "osqp-0.6.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ca7d80c0767b1350cd74e4f1446ec51661152690d38b1382ceccdfccd757afce"}, + {file = "osqp-0.6.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b15e2b96d4d9b2eff37a05405372c69cf17ada3d1e42c5e28cbdbd053189ab5"}, + {file = "osqp-0.6.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a41600e34ece7156606fd3620987fdf224b0a35c857540cb5bf45072f5c022b"}, + {file = "osqp-0.6.5-cp36-cp36m-win_amd64.whl", hash = "sha256:8c38574b35a3ddfb794aafee9bc5a74635160b9fc52bbc89ae6164fe207556de"}, + {file = "osqp-0.6.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d06f614e3be1b1f3cd68569b2dc3628c2fdef1e7c4b992672fe05efb1add9801"}, + {file = "osqp-0.6.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a6b995e0a022bd1c33d20d8846d9a068df89cec288b905b5cdfdb98a2ffae8"}, + {file = "osqp-0.6.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09de9b53e7513ee4ade3024ce9f36ef993d916118d0927cce740d086882ea92c"}, + {file = "osqp-0.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:1f80f85d515ef29b90fb34f137857e75d4fcf21a715d644f54d2cf9494567fab"}, + {file = "osqp-0.6.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de9b9e96001e8f0b2e474106ac75e220fd9279e1635b107b836a6035795e8d07"}, + {file = "osqp-0.6.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fe545d7a87a46cfc57dfb9f0aa2788d2f29e0c71dc1ac57e92f9c9d93064753"}, + {file = "osqp-0.6.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49ab020b5fd7abb5da99e01e47bf81f817ba1df6895e3d3ba4893722cc24d9b6"}, + {file = "osqp-0.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:5d1b5ed6fc4faea94117a0abe140fefe980449b29d3907bd2e6ec1c18eca3d43"}, + {file = "osqp-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dca127b7a333ce53fb430fc441b2e0aee2df619693d967277a8f8fd095e95007"}, + {file = "osqp-0.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ec902844defedf7c5a5ed482b93286d1735a65b71bb27c93e18c929f313c93d"}, + {file = "osqp-0.6.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25a9e1e8f1db38094dc7ee544e603e31fe7bf1b2a3fc75c78c1d39a727e2540"}, + {file = "osqp-0.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:6dce90d8c4ad551489a452573ea819e089e1e1c3b23bbd8f155bb6059ce8ef36"}, + {file = "osqp-0.6.5.tar.gz", hash = "sha256:b2810aee7be2373add8b6c0be5ad99b810288774abca421751cb032d6a5aedef"}, +] + +[package.dependencies] +numpy = ">=1.7" +qdldl = "*" +scipy = ">=0.13.2,<1.12.0" + [[package]] name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -573,7 +1278,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -589,7 +1293,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -604,7 +1307,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" optional = false python-versions = "*" files = [ @@ -616,7 +1318,6 @@ files = [ name = "platformdirs" version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -632,7 +1333,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- name = "pluggy" version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -648,7 +1348,6 @@ testing = ["pytest", "pytest-benchmark"] name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -659,11 +1358,30 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "protobuf" +version = "4.25.3" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, + {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, + {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, + {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, + {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, + {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, + {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, + {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, + {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, + {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, +] + [[package]] name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -692,7 +1410,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -704,7 +1421,6 @@ files = [ name = "py4j" version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" -category = "main" optional = false python-versions = "*" files = [ @@ -712,11 +1428,49 @@ files = [ {file = "py4j-0.10.9.7.tar.gz", hash = "sha256:0b6e5315bb3ada5cf62ac651d107bb2ebc02def3dee9d9548e3baac644ea8dbb"}, ] +[[package]] +name = "pyasn1" +version = "0.5.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, + {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + +[[package]] +name = "pybind11" +version = "2.11.1" +description = "Seamless operability between C++11 and Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pybind11-2.11.1-py3-none-any.whl", hash = "sha256:33cdd02a6453380dd71cc70357ce388ad1ee8d32bd0e38fc22b273d050aa29b3"}, + {file = "pybind11-2.11.1.tar.gz", hash = "sha256:00cd59116a6e8155aecd9174f37ba299d1d397ed4a6b86ac1dfe01b3e40f2cc4"}, +] + +[package.extras] +global = ["pybind11-global (==2.11.1)"] + [[package]] name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -732,7 +1486,6 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pylint" version = "2.17.7" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -762,7 +1515,6 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -785,7 +1537,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -804,7 +1555,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-env" version = "0.8.2" description = "py.test plugin that allows you to add environment variables." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -818,74 +1568,194 @@ pytest = ">=7.3.1" [package.extras] test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] +[[package]] +name = "qdldl" +version = "0.1.7.post0" +description = "QDLDL, a free LDL factorization routine." +optional = false +python-versions = "*" +files = [ + {file = "qdldl-0.1.7.post0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ab02e8b9ff86bd644a1935718387c82fbe04c31e3309cf9f7a121d02b1deda8"}, + {file = "qdldl-0.1.7.post0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e5d6753310377451ed4dc09b1ef28faf40108b713e7f55c8a8ae94d679a672"}, + {file = "qdldl-0.1.7.post0-cp310-cp310-win_amd64.whl", hash = "sha256:718d8e141832e96ba71ca1807a74813836c6403110faaa3d33a67de1af3b29c4"}, + {file = "qdldl-0.1.7.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e3f06e8a49ddd834b24fc3d7afbba4fec0923101045aa2666e18d2a9980e329"}, + {file = "qdldl-0.1.7.post0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a81c46522dd6b3042e2348fa98128bb5c0e466f42bce214e80cfb766ff40930"}, + {file = "qdldl-0.1.7.post0-cp311-cp311-win_amd64.whl", hash = "sha256:4a86155f3de66c5db0e21544b7a2421c671028fa20da407686d2a8d0e9b57e51"}, + {file = "qdldl-0.1.7.post0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:717cb1892b033c01a0aae84ededcfa1f05bcb97013095d779c497e6c32f90dac"}, + {file = "qdldl-0.1.7.post0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc35432913085d94b2327242cf51388467ef7a37ac0d71eb31b594b575dd498"}, + {file = "qdldl-0.1.7.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:fd5cfd8c50f33ddacb830594a63b8c1093a24aea45312b9d2ed826cea5ece08a"}, + {file = "qdldl-0.1.7.post0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:981ca8672e9506976c663552c1eb6f6daf9726d62650b3bf5900260946156166"}, + {file = "qdldl-0.1.7.post0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ec670d97cf756f9159dc0a11de5cf054e88aefe84bea1c7282f00334642843"}, + {file = "qdldl-0.1.7.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:aa208703b44337a7e77f6f2663f7a452144becb4421970d534ff8297b92e1e10"}, + {file = "qdldl-0.1.7.post0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b42649484f7c0d8ee659224ecaac0a3e97f12531018207f4d7323e4071320eb1"}, + {file = "qdldl-0.1.7.post0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26aa3d6f0da7779265d72e8f418094003e75fa53c515a53bc03fd8b9bcfbf7de"}, + {file = "qdldl-0.1.7.post0-cp38-cp38-win_amd64.whl", hash = "sha256:e55bcd6962178029faf543addd49db145302dd51e19855fefa71b5fd55840eea"}, + {file = "qdldl-0.1.7.post0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1dd0e570e65aaf35e10b7fb345f7ac763fd05a2227b9c06ce65e07993fc4984"}, + {file = "qdldl-0.1.7.post0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae161342529852b6248ace4642bc4ee371a7c1e0707b7bc43a43ef7e73c06ca3"}, + {file = "qdldl-0.1.7.post0-cp39-cp39-win_amd64.whl", hash = "sha256:092f6606690a2b9bd3c939f3147887e02de13bb068fbed5ffdc7459034def623"}, + {file = "qdldl-0.1.7.post0.tar.gz", hash = "sha256:f346a114c8342ee6d4dbd6471eef314199fb268d3bf7b95885ca351fde2b023f"}, +] + +[package.dependencies] +numpy = ">=1.7" +scipy = ">=0.13.2" + [[package]] name = "qibo" -version = "0.2.4" +version = "0.2.5" description = "A framework for quantum computing with hardware acceleration." -category = "main" optional = false python-versions = ">=3.9,<3.12" files = [ - {file = "qibo-0.2.4-py3-none-any.whl", hash = "sha256:5aaf7693004d8106eff3cc614e20ff03e7016742ab129e7ece76c84b3deb7366"}, - {file = "qibo-0.2.4.tar.gz", hash = "sha256:8ab8519b107fdfa57a7aa19d9243403437ceb4a776454816ce3071a00bdc15ff"}, + {file = "qibo-0.2.5-py3-none-any.whl", hash = "sha256:e885c1596a954673f30950257df4a81d66adb79f1f35009575904bb3852a6a0f"}, + {file = "qibo-0.2.5.tar.gz", hash = "sha256:46fd7eb06d30d071fc022544d74923b9765529f98a541a24383c49d114f9b05b"}, ] [package.dependencies] cma = ">=3.3.0,<4.0.0" +cvxpy = ">=1.4.2,<2.0.0" hyperopt = ">=0.2.7,<0.3.0" joblib = ">=1.2.0,<2.0.0" +networkx = ">=3.2.1,<4.0.0" +numpy = ">=1.26.4,<2.0.0" +openqasm3 = {version = ">=0.5.0", extras = ["parser"]} scipy = ">=1.10.1,<2.0.0" sympy = ">=1.11.1,<2.0.0" tabulate = ">=0.9.0,<0.10.0" +tensorflow = {version = ">=2.14.1,<2.16", markers = "sys_platform == \"linux\" or sys_platform == \"darwin\""} + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" [[package]] name = "scipy" -version = "1.12.0" +version = "1.11.4" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, + {file = "scipy-1.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc9a714581f561af0848e6b69947fda0614915f072dfd14142ed1bfe1b806710"}, + {file = "scipy-1.11.4-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:cf00bd2b1b0211888d4dc75656c0412213a8b25e80d73898083f402b50f47e41"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9999c008ccf00e8fbcce1236f85ade5c569d13144f77a1946bef8863e8f6eb4"}, + {file = "scipy-1.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:933baf588daa8dc9a92c20a0be32f56d43faf3d1a60ab11b3f08c356430f6e56"}, + {file = "scipy-1.11.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fce70f39076a5aa62e92e69a7f62349f9574d8405c0a5de6ed3ef72de07f446"}, + {file = "scipy-1.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:6550466fbeec7453d7465e74d4f4b19f905642c89a7525571ee91dd7adabb5a3"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f313b39a7e94f296025e3cffc2c567618174c0b1dde173960cf23808f9fae4be"}, + {file = "scipy-1.11.4-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1b7c3dca977f30a739e0409fb001056484661cb2541a01aba0bb0029f7b68db8"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00150c5eae7b610c32589dda259eacc7c4f1665aedf25d921907f4d08a951b1c"}, + {file = "scipy-1.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530f9ad26440e85766509dbf78edcfe13ffd0ab7fec2560ee5c36ff74d6269ff"}, + {file = "scipy-1.11.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5e347b14fe01003d3b78e196e84bd3f48ffe4c8a7b8a1afbcb8f5505cb710993"}, + {file = "scipy-1.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:acf8ed278cc03f5aff035e69cb511741e0418681d25fbbb86ca65429c4f4d9cd"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:028eccd22e654b3ea01ee63705681ee79933652b2d8f873e7949898dda6d11b6"}, + {file = "scipy-1.11.4-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c6ff6ef9cc27f9b3db93a6f8b38f97387e6e0591600369a297a50a8e96e835d"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030c6674b9230d37c5c60ab456e2cf12f6784596d15ce8da9365e70896effc4"}, + {file = "scipy-1.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad669df80528aeca5f557712102538f4f37e503f0c5b9541655016dd0932ca79"}, + {file = "scipy-1.11.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce7fff2e23ab2cc81ff452a9444c215c28e6305f396b2ba88343a567feec9660"}, + {file = "scipy-1.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:36750b7733d960d7994888f0d148d31ea3017ac15eef664194b4ef68d36a4a97"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e619aba2df228a9b34718efb023966da781e89dd3d21637b27f2e54db0410d7"}, + {file = "scipy-1.11.4-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f3cd9e7b3c2c1ec26364856f9fbe78695fe631150f94cd1c22228456404cf1ec"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d10e45a6c50211fe256da61a11c34927c68f277e03138777bdebedd933712fea"}, + {file = "scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937"}, + {file = "scipy-1.11.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6df1468153a31cf55ed5ed39647279beb9cfb5d3f84369453b49e4b8502394fd"}, + {file = "scipy-1.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:ee410e6de8f88fd5cf6eadd73c135020bfbbbdfcd0f6162c36a7638a1ea8cc65"}, + {file = "scipy-1.11.4.tar.gz", hash = "sha256:90a2b78e7f5733b9de748f589f09225013685f9b218275257f8a8168ededaeaa"}, ] [package.dependencies] -numpy = ">=1.22.4,<1.29.0" +numpy = ">=1.21.6,<1.28.0" [package.extras] dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "scs" +version = "3.2.4.post1" +description = "Splitting conic solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "scs-3.2.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51fed30d2a4a1e6fbfc1e52b4cb3adeecbe89d7c47f3539b49afbb852415fe19"}, + {file = "scs-3.2.4.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0524c0b9c3ed0d65dae161475accf3efa8e170938eb93251a60e9709b156ee"}, + {file = "scs-3.2.4.post1-cp310-cp310-win_amd64.whl", hash = "sha256:534519819eea96f18902a9fce15c4ec562b99d23b38dc843a48cb137b5641613"}, + {file = "scs-3.2.4.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d04ee4d19ac6d0f5053663bc48fcd5c5faed534272f13b10a4e173c814eea69"}, + {file = "scs-3.2.4.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c23b4299ab77ff5f654573d5667dc982292a8ef2b979053b38c40663919f13"}, + {file = "scs-3.2.4.post1-cp311-cp311-win_amd64.whl", hash = "sha256:ae4624938d3e3a8b7e508029275c6ad7a978fd48c158d0818f69f4ae764bf945"}, + {file = "scs-3.2.4.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:40294e22bfe509bdf7fd65a6b77c38cec22dcb3567ff5a75f3c41a1faf2ef1d5"}, + {file = "scs-3.2.4.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a2337acb0604770b6df1473254065a51c210ff9c82fc7c4490595510287a337"}, + {file = "scs-3.2.4.post1-cp312-cp312-win_amd64.whl", hash = "sha256:8689e75a57e59846e65d1c4b9d57e9964b00fcbb8e67fc77f98cf6e0a0530abd"}, + {file = "scs-3.2.4.post1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ad991b00d0a87c85db57bf2f1863c21bdc4e2f13837f6c35e809f5936bc6f165"}, + {file = "scs-3.2.4.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a28af160a44268e726a59d6cf340629b82940c1a643c4c87fe777e9cbe550d75"}, + {file = "scs-3.2.4.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:f6283f725f3fee63d4631c2532d01a5b2ea65883b04d3da3be06084b1c60171b"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b3a622cf2120ae765f0f3ad5c6f4f86796d317e29132bab2ad4af3c14d9bf4d"}, + {file = "scs-3.2.4.post1-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:4b5259137c263304effa2b28d0125437ac23569e6e7753c115ae1206ec5033fd"}, + {file = "scs-3.2.4.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424710bc19b0506feee7e05e6d2b7af98acf09af5bd5353126164cbd46ac923f"}, + {file = "scs-3.2.4.post1-cp38-cp38-win_amd64.whl", hash = "sha256:e21bdc8046648846e2c204a6c5cf24eaaedd2b8f5e0a2ab41a647b0247b8d592"}, + {file = "scs-3.2.4.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cea0f7e9473f43f7edf1641d020ead7e39653a81c540fbdba8f3b7b8480038c9"}, + {file = "scs-3.2.4.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6126f1d7ed5ff368cb8c1836715b17a50074314579eefc6d511995a3ab93d70"}, + {file = "scs-3.2.4.post1-cp39-cp39-win_amd64.whl", hash = "sha256:18788befa5284bb1f49149bac7f813703de60ef5b6bf7698a9f1c3a5a49b78e4"}, + {file = "scs-3.2.4.post1.tar.gz", hash = "sha256:7015d7a56d1d5b53264fd277289ea169949309e26101677ff88cd0e5030d032f"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" [[package]] name = "setuptools" version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -902,7 +1772,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -914,7 +1783,6 @@ files = [ name = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -929,7 +1797,6 @@ mpmath = ">=0.19" name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -940,11 +1807,150 @@ files = [ [package.extras] widechars = ["wcwidth"] +[[package]] +name = "tensorboard" +version = "2.15.2" +description = "TensorBoard lets you watch Tensors Flow" +optional = false +python-versions = ">=3.9" +files = [ + {file = "tensorboard-2.15.2-py3-none-any.whl", hash = "sha256:a6f6443728064d962caea6d34653e220e34ef8df764cb06a8212c17e1a8f0622"}, +] + +[package.dependencies] +absl-py = ">=0.4" +google-auth = ">=1.6.3,<3" +google-auth-oauthlib = ">=0.5,<2" +grpcio = ">=1.48.2" +markdown = ">=2.6.8" +numpy = ">=1.12.0" +protobuf = ">=3.19.6,<4.24.0 || >4.24.0" +requests = ">=2.21.0,<3" +setuptools = ">=41.0.0" +six = ">1.9" +tensorboard-data-server = ">=0.7.0,<0.8.0" +werkzeug = ">=1.0.1" + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +description = "Fast data loading for TensorBoard" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, + {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, + {file = "tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530"}, +] + +[[package]] +name = "tensorflow" +version = "2.15.0" +description = "TensorFlow is an open source machine learning framework for everyone." +optional = false +python-versions = ">=3.9" +files = [ + {file = "tensorflow-2.15.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9b248e0f4316b3a3c54cd1f83edfb7a761d473060c1972a8ea31a90d5de3aa72"}, + {file = "tensorflow-2.15.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:eaf420d8b8ec1d4bd75859be7d7545d8e7052726eed8456fdbba63718e7e07ea"}, + {file = "tensorflow-2.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98aab454fc73ff1900314821e5bafbf20840ada2004c8caccf4d92e0e12a628"}, + {file = "tensorflow-2.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed601b43df9b7d9bed0203b34bcb9356efd4f671eaaac1046b7166a2afee0cf8"}, + {file = "tensorflow-2.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:2d88f8b71f4a8d9ab9dc7c8e42b14ca0f53d1daab0f989b8f2918907c2891f41"}, + {file = "tensorflow-2.15.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1e0716622ed7af867d8b1997b00a2940f1a1587dee923ff53efa2ee506992f32"}, + {file = "tensorflow-2.15.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:124930e7d4f5d74c61a5c80d642a26c22fe0c42fdd383fe9ee5803c3ac9ed4ce"}, + {file = "tensorflow-2.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:852efeb4d18beedac0120c4f2d4f4dccf4c090bb6740c5199d395ff609e85e98"}, + {file = "tensorflow-2.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee8ec2b2c6c942ae65d25746e53cdc475e82d5fcbbb3009ce47f5963d69ebfc"}, + {file = "tensorflow-2.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:e05a48006930e4e9e68468e7affed3bbce8a1c7fe6df86500496ad1558804a78"}, + {file = "tensorflow-2.15.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:2cfcdde1ff3c01be617e99ce9783c49cb11da5796ce32a31855412bd092c0bcf"}, + {file = "tensorflow-2.15.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:896bda03f722700a9918d144aee5152a75f1be5e6c5045fd0683b8318a3fc9d9"}, + {file = "tensorflow-2.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7697b005ce48fec8b2ee8cf25bcbd138f16b5e17f99f7c01a6ea3f2429f86c6"}, + {file = "tensorflow-2.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fa865956d96b7614f247c36e4c22b1543ba5ce656fbe8e4f6266ae7a4917132"}, + {file = "tensorflow-2.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:01108746e1bbfcd48dfabf7f51ddca7693b91ea6821f6f62a27b5a5ebf0817c5"}, +] + +[package.dependencies] +absl-py = ">=1.0.0" +astunparse = ">=1.6.0" +flatbuffers = ">=23.5.26" +gast = ">=0.2.1,<0.5.0 || >0.5.0,<0.5.1 || >0.5.1,<0.5.2 || >0.5.2" +google-pasta = ">=0.1.1" +grpcio = ">=1.24.3,<2.0" +h5py = ">=2.9.0" +keras = ">=2.15.0,<2.16" +libclang = ">=13.0.0" +ml-dtypes = ">=0.2.0,<0.3.0" +numpy = ">=1.23.5,<2.0.0" +opt-einsum = ">=2.3.2" +packaging = "*" +protobuf = ">=3.20.3,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +setuptools = "*" +six = ">=1.12.0" +tensorboard = ">=2.15,<2.16" +tensorflow-estimator = ">=2.15.0,<2.16" +tensorflow-io-gcs-filesystem = ">=0.23.1" +termcolor = ">=1.1.0" +typing-extensions = ">=3.6.6" +wrapt = ">=1.11.0,<1.15" + +[package.extras] +and-cuda = ["nvidia-cublas-cu12 (==12.2.5.6)", "nvidia-cuda-cupti-cu12 (==12.2.142)", "nvidia-cuda-nvcc-cu12 (==12.2.140)", "nvidia-cuda-nvrtc-cu12 (==12.2.140)", "nvidia-cuda-runtime-cu12 (==12.2.140)", "nvidia-cudnn-cu12 (==8.9.4.25)", "nvidia-cufft-cu12 (==11.0.8.103)", "nvidia-curand-cu12 (==10.3.3.141)", "nvidia-cusolver-cu12 (==11.5.2.141)", "nvidia-cusparse-cu12 (==12.1.2.141)", "nvidia-nccl-cu12 (==2.16.5)", "nvidia-nvjitlink-cu12 (==12.2.140)", "tensorrt (==8.6.1.post1)", "tensorrt-bindings (==8.6.1)", "tensorrt-libs (==8.6.1)"] + +[[package]] +name = "tensorflow-estimator" +version = "2.15.0" +description = "TensorFlow Estimator." +optional = false +python-versions = ">=3.7" +files = [ + {file = "tensorflow_estimator-2.15.0-py2.py3-none-any.whl", hash = "sha256:aedf21eec7fb2dc91150fc91a1ce12bc44dbb72278a08b58e79ff87c9e28f153"}, +] + +[[package]] +name = "tensorflow-io-gcs-filesystem" +version = "0.36.0" +description = "TensorFlow IO" +optional = false +python-versions = ">=3.7, <3.12" +files = [ + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:702c6df62b38095ff613c433546d9424d4f33902a5ab26b00fd26457e27a99fa"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e9b8aaca2789af356c42afda0f52380f82e5abb2f3c0b85087833fcfe03875d8"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c477aed96864ceae77d7051c3b687f28813aba7320fc5dd552164fad6ec8d1a1"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be1ff92559dfa23048b01179a1827081947583f5c6f9986ccac471df8a29322a"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:72c3ca4b8c0d8dbdd970699d05a100107cf200317ad8e6a8373e2c37225cd552"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:848e8e89a0f49258c7782189c938d8d1162d989da1a80c79f95c7af3ef6006c8"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d72db1ab03edb65fa1e98d06e504ccbc64282d38ab3589afb6db66dc448d1c1"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd4d946b5fa23220daa473a80e511a5fb27493d7e49d17dff0bb43bb0a31f32"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa346fd1dd9f57848b73874007440504f060fadd689fa1cc29cc49817d0eeaf3"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:0a4437824424a4423cf86162cb8b21b1bec24698194332748b50bb952e62ab9f"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:31806bd7ac2db789161bc720747de22947063265561a4c17be54698fd9780b03"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0e57976c1aa035af6281f0330cfb8dd50eee2f63412ecc84d60ff5075d29b7"}, + {file = "tensorflow_io_gcs_filesystem-0.36.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e97ff5c280eb10f699098ae21057be2b146d39e8a906cd5db91f2ea6c34e47d0"}, +] + +[package.extras] +tensorflow = ["tensorflow (>=2.15.0,<2.16.0)"] +tensorflow-aarch64 = ["tensorflow-aarch64 (>=2.15.0,<2.16.0)"] +tensorflow-cpu = ["tensorflow-cpu (>=2.15.0,<2.16.0)"] +tensorflow-gpu = ["tensorflow-gpu (>=2.15.0,<2.16.0)"] +tensorflow-rocm = ["tensorflow-rocm (>=2.15.0,<2.16.0)"] + +[[package]] +name = "termcolor" +version = "2.4.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.8" +files = [ + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -954,21 +1960,19 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.3" +version = "0.12.4" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] name = "tqdm" version = "4.66.2" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -989,7 +1993,6 @@ telegram = ["requests"] name = "traitlets" version = "5.14.1" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1005,7 +2008,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typing-extensions" version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1013,11 +2015,27 @@ files = [ {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -1025,87 +2043,136 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "werkzeug" +version = "3.0.1" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, + {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "wheel" +version = "0.42.0" +description = "A built-package format for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "wheel-0.42.0-py3-none-any.whl", hash = "sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d"}, + {file = "wheel-0.42.0.tar.gz", hash = "sha256:c45be39f7882c9d34243236f2d63cbd58039e360f85d0913425fbd7ceea617a8"}, +] + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + [[package]] name = "wrapt" -version = "1.16.0" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecee4132c6cd2ce5308e21672015ddfed1ff975ad0ac8d27168ea82e71413f55"}, + {file = "wrapt-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2020f391008ef874c6d9e208b24f28e31bcb85ccff4f335f15a3251d222b92d9"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2feecf86e1f7a86517cab34ae6c2f081fd2d0dac860cb0c0ded96d799d20b335"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:240b1686f38ae665d1b15475966fe0472f78e71b1b4903c143a842659c8e4cb9"}, + {file = "wrapt-1.14.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9008dad07d71f68487c91e96579c8567c98ca4c3881b9b113bc7b33e9fd78b8"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6447e9f3ba72f8e2b985a1da758767698efa72723d5b59accefd716e9e8272bf"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:acae32e13a4153809db37405f5eba5bac5fbe2e2ba61ab227926a22901051c0a"}, + {file = "wrapt-1.14.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49ef582b7a1152ae2766557f0550a9fcbf7bbd76f43fbdc94dd3bf07cc7168be"}, + {file = "wrapt-1.14.1-cp311-cp311-win32.whl", hash = "sha256:358fe87cc899c6bb0ddc185bf3dbfa4ba646f05b1b0b9b5a27c2cb92c2cea204"}, + {file = "wrapt-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:26046cd03936ae745a502abf44dac702a5e6880b2b01c29aea8ddf3353b68224"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + [metadata] lock-version = "2.0" python-versions = ">=3.9.0,<3.12" -content-hash = "889aec5a74487e201285450cca34b04384003b283433ad0338418a39634ec96d" +content-hash = "88ee4efeef767f3900df64a7faf9df62ff3bae29e630120602f7f14b7736a482" diff --git a/pyproject.toml b/pyproject.toml index ee61ec9f..6ea161c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers = [ [tool.poetry.dependencies] python=">=3.9.0,<3.12" numba=">=0.51.0" -qibo=">=0.2.4" +qibo=">=0.2.5" scipy = "^1.10.1" psutil = "^5.9.5" From 5af642977fd66a4268608fbe2986e55160a88fe4 Mon Sep 17 00:00:00 2001 From: scarrazza Date: Sat, 2 Mar 2024 10:09:56 +0100 Subject: [PATCH 70/73] increasing version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6ea161c9..e83d8bbb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "qibojit" -version = "0.1.3" +version = "0.1.4" description = "Simulation tools based on numba and cupy." authors = ["The Qibo team"] license = "Apache License 2.0" From 07296caec4fbc51cb9876a1b984bda6236a860da Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:30:05 +0000 Subject: [PATCH 71/73] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 24.2.0 → 24.3.0](https://github.com/psf/black/compare/24.2.0...24.3.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9e5265c2..266c80e5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ repos: - id: check-yaml - id: debug-statements - repo: https://github.com/psf/black - rev: 24.2.0 + rev: 24.3.0 hooks: - id: black - repo: https://github.com/pycqa/isort From e212e31e34889c7b74a627702eb5ee1838be4523 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 22:11:09 +0000 Subject: [PATCH 72/73] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.15.1 → v3.15.2](https://github.com/asottile/pyupgrade/compare/v3.15.1...v3.15.2) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 266c80e5..09becec5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: - id: isort args: ["--profile", "black"] - repo: https://github.com/asottile/pyupgrade - rev: v3.15.1 + rev: v3.15.2 hooks: - id: pyupgrade - repo: https://github.com/hadialqattan/pycln From e426a43cec61400b3b0c8b9f77057304db8fbb4b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 22:54:35 +0000 Subject: [PATCH 73/73] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.5.0 → v4.6.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.5.0...v4.6.0) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 09becec5..e1a2de79 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ ci: autofix_prs: true repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer