From dc917cee9c2d2b8e86058aca0e7e8102689d6696 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Tue, 13 Jun 2023 17:39:24 +0400 Subject: [PATCH 01/26] Initiall commit --- .../randomized_benchmarking/fitting.py | 3 + .../randomized_benchmarking/noisemodels.py | 56 ++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py index d43fad3f7..9b1ecf93d 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py @@ -178,6 +178,9 @@ def fit_expn_func( Tuple[tuple, tuple]: (A1, ..., An, f1, ..., fn) with f* the decay parameters. """ + if n == 1: + return fit_exp1_func(xdata, ydata, **kwargs) + # TODO how are the errors estimated? # TODO the data has to have a sufficiently big size, check that. decays = esprit(np.array(xdata), np.array(ydata), n) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py index e2ffa72ef..666a03d70 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py @@ -7,7 +7,9 @@ import numpy as np from qibo import gates -from qibo.noise import NoiseModel, PauliError +from qibo.noise import NoiseModel, PauliError, UnitaryError +from qibo.quantum_info import random_hermitian +from scipy.linalg import expm from qibocal.config import raise_error @@ -50,3 +52,55 @@ class PauliErrorOnX(PauliErrorOnAll): def build(self): self.add(PauliError(list(zip(["X", "Y", "Z"], self.params))), gates.X) + + +class UnitaryErrorOnAll(NoiseModel): + """Builds a noise model with a unitary error + acting on all gates in a Circuit. + + If parameters are not given, + a random unitary close to identity is generated + ::math:`U = \\exp(-i t H)` for a random Harmitian matrix ::math:`H`. + + Args: + probabilities (list): list of probabilities corresponding to unitaries. Defualt is []. + unitaries (list): list of unitaries. Defualt is []. + nqubits (int): number of qubits. Default is 1. + t (float): "strength" of random unitary noise. Default is 0.1. + """ + + def __init__(self, nqubits=1, t=0.1, probabilities=[], unitaries=[]) -> None: + super().__init__() + + if not isinstance(t, float): + raise_error(TypeError, f"Parameter t must be float, but is {type(t)}.") + + # If unitaries are not given, generate a random Unitary close to Id + if len(unitaries) == 0: + dim = 2**nqubits + + # Generate random unitary matrix close to Id. U=exp(i*t*H) + herm_generator = random_hermitian(dim) + unitary_matr = expm(-1j * t * herm_generator) + + unitaries = [unitary_matr] + probabilities = [1] + self.params = (probabilities, unitaries) + self.build() + + def build(self): + self.add(UnitaryError(*self.params)) + + +class UnitaryErrorOnX(UnitaryErrorOnAll): + """Builds a noise model with a unitary error + acting on all gates in a Circuit. + + Inherited from ``UnitaryErrorOnAll`` but the ``build`` method is + overwritten to act on X gates. + If matrix ``U`` is not given, + a random unitary close to identity is generated. + """ + + def build(self): + self.add(UnitaryError(*self.params), gates.X) From e5d80c392c0debcf5d096f8ad3fd5f6c32844f03 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Wed, 14 Jun 2023 11:40:53 +0400 Subject: [PATCH 02/26] Clifford simultaneous filtered RB --- .../protocols/characterization/__init__.py | 2 + .../clifford_filtered_rb.py | 417 ++++++++++++++++++ .../randomized_benchmarking/plot.py | 122 +++++ .../randomized_benchmarking/standard_rb.py | 121 ++--- 4 files changed, 604 insertions(+), 58 deletions(-) create mode 100644 src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py create mode 100644 src/qibocal/protocols/characterization/randomized_benchmarking/plot.py diff --git a/src/qibocal/protocols/characterization/__init__.py b/src/qibocal/protocols/characterization/__init__.py index b1010dc50..1e3bbb856 100644 --- a/src/qibocal/protocols/characterization/__init__.py +++ b/src/qibocal/protocols/characterization/__init__.py @@ -15,6 +15,7 @@ from .rabi.amplitude import rabi_amplitude from .rabi.length import rabi_length from .ramsey import ramsey +from .randomized_benchmarking.clifford_filtered_rb import clifford_filtered_rb from .randomized_benchmarking.standard_rb import standard_rb from .resonator_punchout import resonator_punchout from .resonator_punchout_attenuation import resonator_punchout_attenuation @@ -43,3 +44,4 @@ class Operation(Enum): flipping = flipping dispersive_shift = dispersive_shift standard_rb = standard_rb + clifford_filtered_rb = clifford_filtered_rb diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py new file mode 100644 index 000000000..d989d1e1a --- /dev/null +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -0,0 +1,417 @@ +from copy import deepcopy +from dataclasses import dataclass +from itertools import product +from typing import Iterable, List, Tuple, Union + +import numpy as np +import pandas as pd +import plotly.graph_objects as go +import qibo +from qibolab.platform import Platform +from qibolab.qubits import QubitId + +from qibocal.auto.operation import Qubits, Results, Routine +from qibocal.bootstrap import bootstrap, data_errors +from qibocal.config import log, raise_error +from qibocal.protocols.characterization.randomized_benchmarking import noisemodels + +from .circuit_tools import add_measurement_layer, embed_circuit, layer_circuit +from .fitting import exp1_func, fit_exp1_func +from .plot import carousel, rb_figure +from .standard_rb import RBData, StandardRBParameters +from .utils import extract_from_data, number_to_str, random_clifford + + +@dataclass +class CliffordRBResult(Results): + """Standard RB outputs.""" + + irrep_signal: dict + """Raw fitting parameters and uncertainties.""" + fit_parameters: dict + """Fitting parameters.""" + fit_errors: dict + """Uncertainties of the fitting parameters.""" + error_y: dict + """Error bars.""" + + +def filter_function(samples_list, circuit_list) -> list: + """Calculates the filtered signal for every crosstalk irrep. + + Every irrep has a projector charactarized with a bit string + :math:`\\boldsymbol{\\lambda}\\in\\mathbb{F}_2^N` where :math:`N` is the + number of qubits. + The experimental outcome for each qubit is denoted as + :math:`\\ket{i_k}` with :math:`i_k=0, 1` with :math:`d=2`. + + .. math:: + f_{\\boldsymbol{\\lambda}}(i,g) + = \\frac{1}{2^{N-|\\boldsymbol{\\lambda}|}} + \\sum_{\\mathbf b\\in\\mathbb F_2^N} + (-1)^{|\\boldsymbol{\\lambda}\\wedge\\mathbf b|} + \\frac{1}{d^N}\\left(\\prod_{k=1}^N(d|\\bra{i_k} U_{g_{(k)}} + \\ket{0}|^2)^{\\lambda_k-\\lambda_kb_k}\\right) + + Args: + samples_list (list or ndarray): list with lists of samples. + circuit_list (Circuit): list of circuits used to produce the samples. + + Returns: + datarow (dict): Filtered signals are stored additionally. + """ + + # Extract amount of used qubits and used shots. + nshots, nqubits = np.array(samples_list[0]).shape + # For qubits the local dimension is 2. + d = 2 + + datarow = {f"irrep{kk}": [] for kk in range(d**nqubits)} + + for circuit, samples in zip(circuit_list, samples_list): + # Fuse the gates for each qubit. + fused_circuit = circuit.fuse(max_qubits=1) + # Extract for each qubit the ideal state. + # If depth = 0 there is only a measurement circuit and it does + # not have an implemented matrix. Set the ideal states to ground states. + if circuit.depth == 1: + ideal_states = np.tile(np.array([1, 0]), nqubits).reshape(nqubits, 2) + else: + ideal_states = np.array( + [fused_circuit.queue[k].matrix[:, 0] for k in range(nqubits)] + ) + # Go through every irrep. + f_list = [] + for l in np.array(list(product([False, True], repeat=nqubits))): + # Check if the trivial irrep is calculated + if not sum(l): + # In the end every value will be divided by ``nshots``. + a = nshots + else: + # Get the supported ideal outcomes and samples + # for this irreps projector. + suppl = ideal_states[l] + suppsamples = samples[:, l] + a = 0 + # Go through all ``nshots`` samples + for s in suppsamples: + # Go through all combinations of (0,1) on the support + # of lambda ``l``. + for b in np.array(list(product([False, True], repeat=sum(l)))): + # Calculate the sign depending on how many times the + # nontrivial projector was used. + # Take the product of all probabilities chosen by the + # experimental outcome which are supported by the + # inverse of b. + a += (-1) ** sum(b) * np.prod( + d * np.abs(suppl[~b][np.eye(2, dtype=bool)[s[~b]]]) ** 2 + ) + # Normalize with inverse of effective measuremetn. + f_list.append(a * (d + 1) ** sum(l) / d**nqubits) + for kk in range(len(f_list)): + datarow[f"irrep{kk}"].append(f_list[kk] / nshots) + return datarow + + +def resample_filter(data, sample_size=100, homogeneous: bool = True): + """Preforms parametric resampling of shots with binomial distribution + and returns a list of "corrected" probabilites. + + Args: + data (list or np.ndarray): list of probabilities for the binomial distribution. + nshots (int): sample size for one probability distribution. + + Returns: + list: resampled probabilities. + """ + if homogeneous: + return np.apply_along_axis( + lambda p: filter_function( + np.random.multinomial(n=1, p=1 - p, size=(1, sample_size, len(p))).T + ), + 0, + data, + ) + resampled_data = [] + for row in data: + resampled_data.append([]) + for p in row: + samples_corrected = np.random.multinomial( + n=1, p=1 - p, size=(1, sample_size, *p.shape) + ).T + resampled_data[-1].append(filter_function(samples_corrected)) + return resampled_data + + +def setup_scan( + params: StandardRBParameters, qubits: Union[Qubits, List[QubitId]], nqubits: int +) -> Iterable: + """Returns an iterator of single-qubit random self-inverting Clifford circuits. + + Args: + params (StandardRBParameters): Parameters of the RB protocol. + qubits (Dict[int, Union[str, int]] or List[Union[str, int]]): + List of qubits the circuit is executed on. + nqubits (int, optional): Number of qubits of the resulting circuits. + If ``None``, sets ``len(qubits)``. Defaults to ``None``. + + Returns: + Iterable: The iterator of circuits. + """ + + qubit_ids = list(qubits) if isinstance(qubits, dict) else qubits + + def make_circuit(depth): + """Returns a random Clifford circuit with inverse of ``depth``.""" + + # This function is needed so that the inside of the layer_circuit function layer_gen() + # can be called for each layer of the circuit, and it returns a random layer of + # Clifford gates. Could also be a generator, it just has to be callable. + def layer_gen(): + """Returns a circuit with a random single-qubit clifford unitary.""" + return random_clifford(len(qubit_ids), params.seed) + + circuit = layer_circuit(layer_gen, depth) + add_measurement_layer(circuit) + return embed_circuit(circuit, nqubits, qubit_ids) + + return map(make_circuit, params.depths * params.niter) + + +def _acquisition( + params: StandardRBParameters, + platform: Platform, + qubits: Union[Qubits, List[QubitId]], +) -> RBData: + """The data acquisition stage of Clifford Filtered Randomized Benchmarking. + + 1. Set up the scan + 2. Execute the scan + 3. Post process the data and initialize a data object with it. + + Args: + params (StandardRBParameters): All parameters in one object. + platform (Platform): Platform the experiment is executed on. + qubits (Dict[int, Union[str, int]] or List[Union[str, int]]): List of qubits the experiment is executed on. + + Returns: + RBData: The depths, samples and ground state probability of each exeriment in the scan. + """ + + # For simulations, a noise model can be added. + noise_model = None + if params.noise_model: + # FIXME implement this check outside acquisition + if platform and platform.name != "dummy": + raise_error( + NotImplementedError, + f"Backend qibolab ({platform}) does not perform noise models simulation.", + ) + elif platform: + log.warning( + ( + "Backend qibolab (%s) does not perform noise models simulation. " + "Setting backend to ``NumpyBackend`` instead." + ), + platform.name, + ) + qibo.set_backend("numpy") + platform = None + + noise_model = getattr(noisemodels, params.noise_model)(params.noise_params) + params.noise_params = noise_model.params + + # 1. Set up the scan (here an iterator of circuits of random clifford gates with an inverse). + nqubits = platform.nqubits if platform else max(qubits) + 1 + scan = setup_scan(params, qubits, nqubits) + + # 2. Execute the scan. + data_list = [] + # Iterate through the scan and execute each circuit. + for circuit in scan: + # Every executed circuit gets a row where the data is stored. + depth = circuit.depth - 1 + data_list.append({"depth": depth, "circuit": circuit}) + if noise_model is not None: + circuit = noise_model.apply(circuit) + samples = circuit.execute(nshots=params.nshots).samples() + data_list[-1]["samples"] = samples + + # Build the data object which will be returned and later saved. + data = pd.DataFrame(data_list) + clifford_rb_data = RBData( + data + ) # .join(pd.DataFrame(filter_dict, index=data.index))) + + # Store the parameters to display them later. + clifford_rb_data.attrs = params.__dict__ + clifford_rb_data.attrs.setdefault("nqubits", nqubits) + return clifford_rb_data + + +def _fit(data: RBData) -> CliffordRBResult: + """Takes a data frame, extracts the depths and the signal and fits it with an + exponential function y = Ap^x. + + Args: + data (RBData): Data from the data acquisition stage. + + Returns: + CliffordRBResult: Aggregated and processed data. + """ + + # Compute the filter functions for samples of each random circuit + irrep_signal = filter_function(data.samples.tolist(), data.circuit.tolist()) + fit_parameters, fit_errors, error_y_dict = {}, {}, {} + for irrep_key in irrep_signal: + # Extract depths and probabilities + x, y_scatter = extract_from_data( + data.join(pd.DataFrame(irrep_signal, index=data.index)), + irrep_key, + "depth", + list, + ) + homogeneous = all(len(y_scatter[0]) == len(row) for row in y_scatter) + + # Extract fitting and bootstrap parameters if given + uncertainties = data.attrs.get("uncertainties", None) + n_bootstrap = data.attrs.get("n_bootstrap", 0) + + y_estimates, popt_estimates = y_scatter, [] + if n_bootstrap: + # Non-parametric bootstrap resampling + bootstrap_y = bootstrap( + y_scatter, + n_bootstrap, + homogeneous=homogeneous, + seed=data.attrs.get("seed", None), + ) + + # Compute y and popt estimates for each bootstrap iteration + y_estimates = ( + np.mean(bootstrap_y, axis=1) + if homogeneous + else [np.mean(y_iter, axis=0) for y_iter in bootstrap_y] + ) + popt_estimates = np.apply_along_axis( + lambda y_iter: fit_exp1_func(x, y_iter, bounds=[0, 1])[0], + axis=0, + arr=np.array(y_estimates), + ) + + # Fit the initial data and compute error bars + y = [np.mean(y_row) for y_row in y_scatter] + error_y = data_errors( + y_estimates, uncertainties, symmetric=False, data_median=y + ) + sigma = ( + np.max(error_y, axis=0) + if error_y is not None and len(error_y.shape) == 2 + else error_y + ) + popt, perr = fit_exp1_func(x, y, sigma=sigma, bounds=[0, 1]) + + # Compute fitting errors + if len(popt_estimates): + perr = data_errors(popt_estimates, uncertainties, data_median=popt) + perr = perr.T if perr is not None else (0,) * len(popt) + + fit_parameters[irrep_key] = popt + fit_errors[irrep_key] = perr + error_y_dict[irrep_key] = error_y + + return CliffordRBResult(irrep_signal, fit_parameters, fit_errors, error_y_dict) + + +def _plot(data: RBData, result: CliffordRBResult, qubit) -> Tuple[List[go.Figure], str]: + """Builds the table for the qq pipe, calls the plot function of the result object + and returns the figure es list. + + Args: + data (RBData): Data object used for the table. + result (StandardRBResult): Is called for the plot. + qubit (_type_): Not used yet. + + Returns: + Tuple[List[go.Figure], str]: + """ + + def crosstalk(q0, q1): + p0 = result.fit_parameters[f"irrep{2 ** q0}"][1] + p1 = result.fit_parameters[f"irrep{2 ** q1}"][1] + p01 = result.fit_parameters[f"irrep{2 ** q1 + 2 ** q0}"][1] + if p0 == 0 or p1 == 0 or p01 == 0: + return None + return p01 / (p0 * p1) + + nqubits = data.attrs.get("nqubits", int(np.log2(len(result.irrep_signal)))) + # crosstalk_heatmap = np.ones((nqubits, nqubits)) + # crosstalk_heatmap[np.triu_indices(nqubits)] = None + rb_params = {} + + fig_list = [] + for kk, irrep_key in enumerate(result.irrep_signal): + irrep_binary = np.binary_repr(kk, width=nqubits) + # nontrivial_qubits = [q for q, c in enumerate(irrep_binary) if c == '1'] + popt, perr, error_y = ( + result.fit_parameters[irrep_key], + result.fit_errors[irrep_key], + result.error_y[irrep_key], + ) + label = "Fit: y=Ap^x
A: {}
p: {}".format( + number_to_str(popt[0], perr[0]), + number_to_str(popt[1], perr[1]), + ) + rb_params[f"p_{irrep_binary}"] = number_to_str(popt[1], perr[1]) + # if len(nontrivial_qubits) == 2: + # crosstalk_heatmap[nontrivial_qubits[1], nontrivial_qubits[0]] *= popt[1] + # elif len(nontrivial_qubits) == 1 and nqubits > 1: + # crosstalk_heatmap[nontrivial_qubits[0]] /= popt[1] + + fig_irrep = rb_figure( + data.join(pd.DataFrame(result.irrep_signal, index=data.index)), + model=lambda x: exp1_func(x, *popt), + fit_label=label, + signal_label=irrep_key, + error_y=error_y, + ) + fig_irrep.update_layout(title=dict(text=irrep_binary)) + fig_list.append(fig_irrep) + result_fig = [carousel(fig_list)] + + if nqubits > 1: + crosstalk_heatmap = np.array( + [ + [crosstalk(i, j) if i > j else None for j in range(nqubits)] + for i in range(nqubits) + ] + ) + np.fill_diagonal(crosstalk_heatmap, 1) + crosstalk_fig = go.Figure( + go.Heatmap( + x=list(range(nqubits)), + y=list(range(nqubits)), + z=crosstalk_heatmap, + hoverongaps=False, + ) + ) + crosstalk_fig.update_layout( + yaxis=dict(scaleanchor="x", autorange="reversed"), + plot_bgcolor="rgba(0, 0, 0, 0)", + xaxis_showgrid=False, + yaxis_showgrid=False, + ) + result_fig.append(crosstalk_fig) + + meta_data = deepcopy(data.attrs) + meta_data.pop("depths", None) + if not meta_data["noise_model"]: + meta_data.pop("noise_model") + meta_data.pop("noise_params") + + table_str = "".join([f" | {key}: {value}
" for key, value in meta_data.items()]) + return result_fig, table_str + + +# Build the routine object which is used by qq. +clifford_filtered_rb = Routine(_acquisition, _fit, _plot) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py new file mode 100644 index 000000000..1ec609717 --- /dev/null +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py @@ -0,0 +1,122 @@ +from typing import Iterable + +import numpy as np +import plotly.graph_objects as go + +from .utils import extract_from_data + + +def rb_figure(data, model, fit_label="", signal_label="signal", error_y=None): + x, y = extract_from_data(data, signal_label, "depth", "mean") + + fig = go.Figure() + + # All samples + fig.add_trace( + go.Scatter( + x=data.depth.tolist(), + y=data.get(signal_label).tolist(), + line=dict(color="#6597aa"), + mode="markers", + marker={"opacity": 0.2, "symbol": "square"}, + name="itertarions", + ) + ) + + # Averages + fig.add_trace( + go.Scatter( + x=x, + y=y, + line=dict(color="#aa6464"), + mode="markers", + name="average", + ) + ) + + # If error_y is given, plot the error bars + error_y_dict = None + if error_y is not None: + # Constant error bars + if isinstance(error_y, Iterable) is False: + error_y_dict = {"type": "constant", "value": error_y} + # Symmetric error bars + elif isinstance(error_y[0], Iterable) is False: + error_y_dict = {"type": "data", "array": error_y} + # Asymmetric error bars + else: + error_y_dict = { + "type": "data", + "symmetric": False, + "array": error_y[1], + "arrayminus": error_y[0], + } + fig.add_trace( + go.Scatter( + x=x, + y=y, + error_y=error_y_dict, + line={"color": "#aa6464"}, + mode="markers", + name="error bars", + ) + ) + x_fit = np.linspace(min(x), max(x), len(x) * 20) + y_fit = model(x_fit) + fig.add_trace( + go.Scatter( + x=x_fit, + y=y_fit, + name=fit_label, + line=go.scatter.Line(dash="dot", color="#00cc96"), + ) + ) + return fig + + +def carousel(fig_list: list): + """Generate a Plotly figure as a carousel with a slider from a list of figures. + + Args: + fig_list (List[plotly.graph_objects.Figure]): list of ``Plotly`` figures. + + Returns: + :class:`plotly.graph_objects.Figure`: Carousel figure with a slider. + """ + + carousel_fig = go.Figure() + steps = [] + fig_sizes = [len(fig.data) for fig in fig_list] + for count, fig in enumerate(fig_list): + for plot in fig.data: + carousel_fig.add_trace(plot) + carousel_fig.data[-1].visible = count == 0 + subplot_title = fig.layout.title.text if fig.layout.title.text else count + 1 + + # Update slider data + step = dict( + label=subplot_title, + method="update", + args=[ + {"visible": [False] * sum(fig_sizes)}, + {"title": subplot_title}, + ], + ) + + # Toggle kth figure traces to "visible" + step["args"][0]["visible"][ + len(carousel_fig.data) - fig_sizes[count] : len(carousel_fig.data) + ] = [True] * fig_sizes[count] + steps.append(step) + + # Create the slider + sliders = [ + dict( + active=0, + pad={"t": 50}, + steps=steps, + ) + ] + + carousel_fig.update_layout(sliders=sliders) + return carousel_fig diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index f71a4772d..fabdaf31f 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -21,6 +21,7 @@ layer_circuit, ) from .fitting import exp1B_func, fit_exp1B_func +from .plot import rb_figure from .utils import extract_from_data, number_to_str, random_clifford NPULSES_PER_CLIFFORD = 1.875 @@ -330,70 +331,74 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> Tuple[List[go.Figure Tuple[List[go.Figure], str]: """ - x, y_scatter = extract_from_data(data, "signal", "depth", list) - y = [np.mean(y_row) for y_row in y_scatter] + # x, y_scatter = extract_from_data(data, "signal", "depth", list) + # y = [np.mean(y_row) for y_row in y_scatter] popt, perr = result.fitting_parameters label = "Fit: y=Ap^x
A: {}
p: {}
B: {}".format( number_to_str(popt[0], perr[0]), number_to_str(popt[1], perr[1]), number_to_str(popt[2], perr[2]), ) - fig = go.Figure() - fig.add_trace( - go.Scatter( - x=data.depth.tolist(), - y=data.signal.tolist(), - line=dict(color="#6597aa"), - mode="markers", - marker={"opacity": 0.2, "symbol": "square"}, - name="itertarions", - ) - ) - fig.add_trace( - go.Scatter( - x=x, - y=y, - line=dict(color="#aa6464"), - mode="markers", - name="average", - ) - ) - # If result.error_y is given, create a dictionary for the error bars - error_y_dict = None - if result.error_y is not None: - # Constant error bars - if isinstance(result.error_y, Iterable) is False: - error_y_dict = {"type": "constant", "value": result.error_y} - # Symmetric error bars - elif isinstance(result.error_y[0], Iterable) is False: - error_y_dict = {"type": "data", "array": result.error_y} - # Asymmetric error bars - else: - error_y_dict = { - "type": "data", - "symmetric": False, - "array": result.error_y[1], - "arrayminus": result.error_y[0], - } - fig.add_trace( - go.Scatter( - x=x, - y=y, - error_y=error_y_dict, - line={"color": "#aa6464"}, - mode="markers", - name="error bars", - ) - ) - x_fit = np.linspace(min(x), max(x), len(x) * 20) - y_fit = exp1B_func(x_fit, *popt) - fig.add_trace( - go.Scatter( - x=x_fit, - y=y_fit, - name=label, - line=go.scatter.Line(dash="dot", color="#00cc96"), - ) + # fig = go.Figure() + # fig.add_trace( + # go.Scatter( + # x=data.depth.tolist(), + # y=data.signal.tolist(), + # line=dict(color="#6597aa"), + # mode="markers", + # marker={"opacity": 0.2, "symbol": "square"}, + # name="itertarions", + # ) + # ) + # fig.add_trace( + # go.Scatter( + # x=x, + # y=y, + # line=dict(color="#aa6464"), + # mode="markers", + # name="average", + # ) + # ) + # # If result.error_y is given, create a dictionary for the error bars + # error_y_dict = None + # if result.error_y is not None: + # # Constant error bars + # if isinstance(result.error_y, Iterable) is False: + # error_y_dict = {"type": "constant", "value": result.error_y} + # # Symmetric error bars + # elif isinstance(result.error_y[0], Iterable) is False: + # error_y_dict = {"type": "data", "array": result.error_y} + # # Asymmetric error bars + # else: + # error_y_dict = { + # "type": "data", + # "symmetric": False, + # "array": result.error_y[1], + # "arrayminus": result.error_y[0], + # } + # fig.add_trace( + # go.Scatter( + # x=x, + # y=y, + # error_y=error_y_dict, + # line={"color": "#aa6464"}, + # mode="markers", + # name="error bars", + # ) + # ) + # x_fit = np.linspace(min(x), max(x), len(x) * 20) + # y_fit = exp1B_func(x_fit, *popt) + # fig.add_trace( + # go.Scatter( + # x=x_fit, + # y=y_fit, + # name=label, + # line=go.scatter.Line(dash="dot", color="#00cc96"), + # ) + # ) + + fig = rb_figure( + data, lambda x: exp1B_func(x, *popt), fit_label=label, error_y=result.error_y ) meta_data = deepcopy(data.attrs) From d51e25823acfcc05e94444c5b843f99416b82950 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Thu, 15 Jun 2023 08:56:36 +0400 Subject: [PATCH 03/26] Minor change --- .../randomized_benchmarking/clifford_filtered_rb.py | 2 +- .../characterization/randomized_benchmarking/standard_rb.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index e5fe3bb8a..ec9bcd59b 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -310,7 +310,7 @@ def _fit(data: RBData) -> CliffordRBResult: ) sigma = ( np.max(error_y, axis=0) - if error_y is not None and len(error_y.shape) == 2 + if error_y is not None and isinstance(error_y[0], Iterable) else error_y ) popt, perr = fit_exp1_func(x, y, sigma=sigma, bounds=[0, 1]) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index 9675c237e..04d8cf7eb 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -342,7 +342,7 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> Tuple[List[go.Figure # x, y_scatter = extract_from_data(data, "signal", "depth", list) # y = [np.mean(y_row) for y_row in y_scatter] - popt, perr = result.fitting_parameters + popt, perr = result.fit_parameters, result.fit_uncertainties label = "Fit: y=Ap^x
A: {}
p: {}
B: {}".format( number_to_str(popt[0], perr[0]), number_to_str(popt[1], perr[1]), @@ -407,7 +407,7 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> Tuple[List[go.Figure # ) fig = rb_figure( - data, lambda x: exp1B_func(x, *popt), fit_label=label, error_y=result.error_y + data, lambda x: exp1B_func(x, *popt), fit_label=label, error_y=result.error_bars ) meta_data = deepcopy(data.attrs) From 7d9d83b9075461b6af744bc6df76d7f90193a818 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Tue, 20 Jun 2023 17:25:19 +0400 Subject: [PATCH 04/26] Change plot --- .../randomized_benchmarking/circuit_tools.py | 10 +- .../clifford_filtered_rb.py | 171 ++++++++---------- .../randomized_benchmarking/fitting.py | 6 +- .../randomized_benchmarking/plot.py | 1 + .../randomized_benchmarking/standard_rb.py | 71 +------- .../randomized_benchmarking/utils.py | 58 ++---- tests/test_randomized_benchmarking.py | 10 +- 7 files changed, 122 insertions(+), 205 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py index d5677c7de..626d0030f 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py @@ -31,7 +31,7 @@ def embed_circuit(circuit: Circuit, nqubits: int, qubits: list) -> Circuit: return large_circuit -def layer_circuit(layer_gen: Callable, depth: int) -> Circuit: +def layer_circuit(layer_gen: Callable, depth: int, **kwargs) -> Circuit: """Creates a circuit of `depth` layers from a generator `layer_gen` yielding `Circuit` or `Gate`. Args: @@ -51,10 +51,12 @@ def layer_circuit(layer_gen: Callable, depth: int) -> Circuit: new_layer = layer_gen() # Ensure new_layer is a circuit if isinstance(new_layer, Gate): - new_circuit = Circuit(max(new_layer.qubits) + 1) + new_circuit = Circuit(max(new_layer.qubits) + 1, **kwargs) new_circuit.add(new_layer) elif all(isinstance(gate, Gate) for gate in new_layer): - new_circuit = Circuit(max(max(gate.qubits) for gate in new_layer) + 1) + new_circuit = Circuit( + max(max(gate.qubits) for gate in new_layer) + 1, **kwargs + ) new_circuit.add(new_layer) elif isinstance(new_layer, Circuit): new_circuit = new_layer @@ -64,7 +66,7 @@ def layer_circuit(layer_gen: Callable, depth: int) -> Circuit: f"layer_gen must return type Circuit or Gate, but it is type {type(new_layer)}.", ) if full_circuit is None: # instantiate in first loop - full_circuit = Circuit(new_circuit.nqubits) + full_circuit = Circuit(new_circuit.nqubits, **kwargs) full_circuit = full_circuit + new_circuit return full_circuit diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index ec9bcd59b..c688459ab 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -1,10 +1,11 @@ from copy import deepcopy from dataclasses import dataclass from itertools import product -from typing import Iterable, List, Tuple, Union +from typing import Iterable, Union import numpy as np import pandas as pd +import plotly.express as px import plotly.graph_objects as go import qibo from qibolab.platform import Platform @@ -24,16 +25,11 @@ @dataclass class CliffordRBResult(Results): - """Standard RB outputs.""" + """Clifford simultaneous filtered RB outputs.""" - irrep_signal: dict + filtered_data: pd.DataFrame """Raw fitting parameters and uncertainties.""" - fit_parameters: dict - """Fitting parameters.""" - fit_errors: dict - """Uncertainties of the fitting parameters.""" - error_y: dict - """Error bars.""" + fit_results: pd.DataFrame def filter_function(samples_list, circuit_list) -> list: @@ -113,44 +109,17 @@ def filter_function(samples_list, circuit_list) -> list: return datarow -def resample_filter(data, sample_size=100, homogeneous: bool = True): - """Preforms parametric resampling of shots with binomial distribution - and returns a list of "corrected" probabilites. - - Args: - data (list or np.ndarray): list of probabilities for the binomial distribution. - nshots (int): sample size for one probability distribution. - - Returns: - list: resampled probabilities. - """ - if homogeneous: - return np.apply_along_axis( - lambda p: filter_function( - np.random.multinomial(n=1, p=1 - p, size=(1, sample_size, len(p))).T - ), - 0, - data, - ) - resampled_data = [] - for row in data: - resampled_data.append([]) - for p in row: - samples_corrected = np.random.multinomial( - n=1, p=1 - p, size=(1, sample_size, *p.shape) - ).T - resampled_data[-1].append(filter_function(samples_corrected)) - return resampled_data - - def setup_scan( - params: StandardRBParameters, qubits: Union[Qubits, List[QubitId]], nqubits: int + params: StandardRBParameters, + qubits: Union[Qubits, list[QubitId]], + nqubits: int, + **kwargs, ) -> Iterable: """Returns an iterator of single-qubit random self-inverting Clifford circuits. Args: params (StandardRBParameters): Parameters of the RB protocol. - qubits (Dict[int, Union[str, int]] or List[Union[str, int]]): + qubits (dict[int, Union[str, int]] or list[Union[str, int]]): List of qubits the circuit is executed on. nqubits (int, optional): Number of qubits of the resulting circuits. If ``None``, sets ``len(qubits)``. Defaults to ``None``. @@ -171,7 +140,7 @@ def layer_gen(): """Returns a circuit with a random single-qubit clifford unitary.""" return random_clifford(len(qubit_ids), params.seed) - circuit = layer_circuit(layer_gen, depth) + circuit = layer_circuit(layer_gen, depth, **kwargs) add_measurement_layer(circuit) return embed_circuit(circuit, nqubits, qubit_ids) @@ -181,7 +150,7 @@ def layer_gen(): def _acquisition( params: StandardRBParameters, platform: Platform, - qubits: Union[Qubits, List[QubitId]], + qubits: Union[Qubits, list[QubitId]], ) -> RBData: """The data acquisition stage of Clifford Filtered Randomized Benchmarking. @@ -192,7 +161,7 @@ def _acquisition( Args: params (StandardRBParameters): All parameters in one object. platform (Platform): Platform the experiment is executed on. - qubits (Dict[int, Union[str, int]] or List[Union[str, int]]): List of qubits the experiment is executed on. + qubits (dict[int, Union[str, int]] or list[Union[str, int]]): List of qubits the experiment is executed on. Returns: RBData: The depths, samples and ground state probability of each exeriment in the scan. @@ -223,14 +192,14 @@ def _acquisition( # 1. Set up the scan (here an iterator of circuits of random clifford gates with an inverse). nqubits = platform.nqubits if platform else max(qubits) + 1 - scan = setup_scan(params, qubits, nqubits) + scan = setup_scan(params, qubits, nqubits, density_matrix=(noise_model is not None)) # 2. Execute the scan. data_list = [] # Iterate through the scan and execute each circuit. for circuit in scan: # Every executed circuit gets a row where the data is stored. - depth = circuit.depth - 1 + depth = circuit.depth - 1 if circuit.depth > 0 else 0 data_list.append({"depth": depth, "circuit": circuit}) if noise_model is not None: circuit = noise_model.apply(circuit) @@ -238,14 +207,12 @@ def _acquisition( data_list[-1]["samples"] = samples # Build the data object which will be returned and later saved. - data = pd.DataFrame(data_list) - clifford_rb_data = RBData( - data - ) # .join(pd.DataFrame(filter_dict, index=data.index))) + # data = pd.DataFrame(data_list) + clifford_rb_data = RBData(data_list) # Store the parameters to display them later. clifford_rb_data.attrs = params.__dict__ - clifford_rb_data.attrs.setdefault("nqubits", nqubits) + clifford_rb_data.attrs.setdefault("qubits", qubits) return clifford_rb_data @@ -259,14 +226,17 @@ def _fit(data: RBData) -> CliffordRBResult: Returns: CliffordRBResult: Aggregated and processed data. """ - - # Compute the filter functions for samples of each random circuit + # Post-processing: compute the filter functions of each random circuit given samples irrep_signal = filter_function(data.samples.tolist(), data.circuit.tolist()) - fit_parameters, fit_errors, error_y_dict = {}, {}, {} + filtered_data = data.join(pd.DataFrame(irrep_signal, index=data.index)) + + # Perform fitting for each irrep and store in pd.DataFrame + fit_results = {"fit_parameters": [], "fit_uncertainties": [], "error_bars": []} + for irrep_key in irrep_signal: # Extract depths and probabilities x, y_scatter = extract_from_data( - data.join(pd.DataFrame(irrep_signal, index=data.index)), + filtered_data, irrep_key, "depth", list, @@ -301,33 +271,42 @@ def _fit(data: RBData) -> CliffordRBResult: # Fit the initial data and compute error bars y = [np.mean(y_row) for y_row in y_scatter] - error_y = data_uncertainties( + # If bootstrap was not performed, y_estimates can be inhomogeneous + error_bars = data_uncertainties( y_estimates, uncertainties, - symmetric=False, data_median=y, homogeneous=(homogeneous or n_bootstrap != 0), ) - sigma = ( - np.max(error_y, axis=0) - if error_y is not None and isinstance(error_y[0], Iterable) - else error_y - ) + # Generate symmetric non-zero uncertainty of y for the fit + sigma = None + if error_bars is not None: + sigma = ( + np.max(error_bars, axis=0) + if isinstance(error_bars[0], Iterable) + else error_bars + ) + 0.1 popt, perr = fit_exp1_func(x, y, sigma=sigma, bounds=[0, 1]) - # Compute fitting errors + # Compute fitting uncertainties if len(popt_estimates): perr = data_uncertainties(popt_estimates, uncertainties, data_median=popt) perr = perr.T if perr is not None else (0,) * len(popt) - fit_parameters[irrep_key] = popt - fit_errors[irrep_key] = perr - error_y_dict[irrep_key] = error_y - - return CliffordRBResult(irrep_signal, fit_parameters, fit_errors, error_y_dict) + fit_results["fit_parameters"].append(popt) + fit_results["fit_uncertainties"].append(perr) + fit_results["error_bars"].append(error_bars) + fit_results = pd.DataFrame( + fit_results, + index=list(irrep_signal.keys()), + ) + return CliffordRBResult( + filtered_data, + fit_results, + ) -def _plot(data: RBData, result: CliffordRBResult, qubit) -> Tuple[List[go.Figure], str]: +def _plot(data: RBData, result: CliffordRBResult, qubit) -> tuple[list[go.Figure], str]: """Builds the table for the qq pipe, calls the plot function of the result object and returns the figure es list. @@ -341,39 +320,41 @@ def _plot(data: RBData, result: CliffordRBResult, qubit) -> Tuple[List[go.Figure """ def crosstalk(q0, q1): - p0 = result.fit_parameters[f"irrep{2 ** q0}"][1] - p1 = result.fit_parameters[f"irrep{2 ** q1}"][1] - p01 = result.fit_parameters[f"irrep{2 ** q1 + 2 ** q0}"][1] - if p0 == 0 or p1 == 0 or p01 == 0: + p0 = result.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] + p1 = result.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] + p01 = result.fit_results["fit_parameters"][f"irrep{2 ** q1 + 2 ** q0}"][1] + if p0 == 0 or p1 == 0: return None return p01 / (p0 * p1) - nqubits = data.attrs.get("nqubits", int(np.log2(len(result.irrep_signal)))) + nqubits = int(np.log2(len(result.fit_results.index))) + qubits = data.attrs.get("qubits", list(range(nqubits))) + # crosstalk_heatmap = np.ones((nqubits, nqubits)) # crosstalk_heatmap[np.triu_indices(nqubits)] = None rb_params = {} fig_list = [] - for kk, irrep_key in enumerate(result.irrep_signal): + for kk, irrep_key in enumerate(result.filtered_data.columns[3:]): irrep_binary = np.binary_repr(kk, width=nqubits) # nontrivial_qubits = [q for q, c in enumerate(irrep_binary) if c == '1'] popt, perr, error_y = ( - result.fit_parameters[irrep_key], - result.fit_errors[irrep_key], - result.error_y[irrep_key], + result.fit_results["fit_parameters"][irrep_key], + result.fit_results["fit_uncertainties"][irrep_key], + result.fit_results["error_bars"][irrep_key], ) label = "Fit: y=Ap^x
A: {}
p: {}".format( number_to_str(popt[0], perr[0]), number_to_str(popt[1], perr[1]), ) - rb_params[f"p_{irrep_binary}"] = number_to_str(popt[1], perr[1]) + rb_params[f"Irrep {irrep_binary}"] = number_to_str(popt[1], perr[1]) # if len(nontrivial_qubits) == 2: # crosstalk_heatmap[nontrivial_qubits[1], nontrivial_qubits[0]] *= popt[1] # elif len(nontrivial_qubits) == 1 and nqubits > 1: # crosstalk_heatmap[nontrivial_qubits[0]] /= popt[1] fig_irrep = rb_figure( - data.join(pd.DataFrame(result.irrep_signal, index=data.index)), + result.filtered_data, model=lambda x: exp1_func(x, *popt), fit_label=label, signal_label=irrep_key, @@ -386,24 +367,28 @@ def crosstalk(q0, q1): if nqubits > 1: crosstalk_heatmap = np.array( [ - [crosstalk(i, j) if i > j else None for j in range(nqubits)] + [crosstalk(i, j) if i > j else np.nan for j in range(nqubits)] for i in range(nqubits) ] ) np.fill_diagonal(crosstalk_heatmap, 1) - crosstalk_fig = go.Figure( - go.Heatmap( - x=list(range(nqubits)), - y=list(range(nqubits)), - z=crosstalk_heatmap, - hoverongaps=False, - ) + crosstalk_fig = px.imshow( + crosstalk_heatmap, + zmin=np.nanmin(crosstalk_heatmap, initial=0), + zmax=np.nanmax(crosstalk_heatmap), ) crosstalk_fig.update_layout( - yaxis=dict(scaleanchor="x", autorange="reversed"), plot_bgcolor="rgba(0, 0, 0, 0)", - xaxis_showgrid=False, - yaxis_showgrid=False, + xaxis=dict( + showgrid=False, + tickvals=list(range(nqubits)), + ticktext=qubits, + ), + yaxis=dict( + showgrid=False, + tickvals=list(range(nqubits)), + ticktext=qubits, + ), ) result_fig.append(crosstalk_fig) @@ -413,7 +398,9 @@ def crosstalk(q0, q1): meta_data.pop("noise_model") meta_data.pop("noise_params") - table_str = "".join([f" | {key}: {value}
" for key, value in meta_data.items()]) + table_str = "".join( + [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] + ) return result_fig, table_str diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py index a54b20680..fcc076d80 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py @@ -152,7 +152,11 @@ def fit_exp1_func( # If the search for fitting parameters does not work just return # fixed parameters where one can see that the fit did not work try: - kwargs.setdefault("p0", (np.max(ydata) - np.min(ydata), 0.9)) + bounds = kwargs.get("bounds", [-np.inf, np.inf]) + + kwargs.setdefault( + "p0", (np.clip(np.max(ydata) - np.min(ydata), *bounds), 0.9) + ) # Build a new function such that the linear offset is zero. popt, pcov = curve_fit(exp1_func, xdata, ydata, **kwargs) perr = tuple(np.sqrt(np.diag(pcov))) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py index 1ec609717..8e4d9a8a8 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py @@ -113,6 +113,7 @@ def carousel(fig_list: list): sliders = [ dict( active=0, + currentvalue={"prefix": "Irrep "}, pad={"t": 50}, steps=steps, ) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index 1a7a833cc..04d31d56a 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -89,7 +89,7 @@ class StandardRBResult(Results): pulse_fidelity: float """The pulse fidelity of the gates acting on this qubit.""" fit_parameters: tuple[float, float, float] - """Raw fitting parameters.""" + """Fitting parameters.""" fit_uncertainties: tuple[float, float, float] """Fitting parameters uncertainties.""" error_bars: Optional[Union[float, list[float], np.ndarray]] = None @@ -146,7 +146,10 @@ def resample_p0(data, sample_size=100, homogeneous: bool = True): def setup_scan( - params: StandardRBParameters, qubits: Union[Qubits, list[QubitId]], nqubits: int + params: StandardRBParameters, + qubits: Union[Qubits, list[QubitId]], + nqubits: int, + **kwargs, ) -> Iterable: """Returns an iterator of single-qubit random self-inverting Clifford circuits. @@ -173,7 +176,7 @@ def layer_gen(): """Returns a circuit with a random single-qubit clifford unitary.""" return random_clifford(len(qubit_ids), params.seed) - circuit = layer_circuit(layer_gen, depth) + circuit = layer_circuit(layer_gen, depth, **kwargs) add_inverse_layer(circuit) add_measurement_layer(circuit) return embed_circuit(circuit, nqubits, qubit_ids) @@ -226,7 +229,7 @@ def _acquisition( # 1. Set up the scan (here an iterator of circuits of random clifford gates with an inverse). nqubits = platform.nqubits if platform else max(qubits) + 1 - scan = setup_scan(params, qubits, nqubits) + scan = setup_scan(params, qubits, nqubits, density_matrix=(noise_model is not None)) # 2. Execute the scan. data_list = [] @@ -341,72 +344,12 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> tuple[list[go.Figure Returns: tuple[list[go.Figure], str]: """ - - # x, y_scatter = extract_from_data(data, "signal", "depth", list) - # y = [np.mean(y_row) for y_row in y_scatter] popt, perr = result.fit_parameters, result.fit_uncertainties label = "Fit: y=Ap^x
A: {}
p: {}
B: {}".format( number_to_str(popt[0], perr[0]), number_to_str(popt[1], perr[1]), number_to_str(popt[2], perr[2]), ) - # fig = go.Figure() - # fig.add_trace( - # go.Scatter( - # x=data.depth.tolist(), - # y=data.signal.tolist(), - # line=dict(color="#6597aa"), - # mode="markers", - # marker={"opacity": 0.2, "symbol": "square"}, - # name="itertarions", - # ) - # ) - # fig.add_trace( - # go.Scatter( - # x=x, - # y=y, - # line=dict(color="#aa6464"), - # mode="markers", - # name="average", - # ) - # ) - # # If result.error_y is given, create a dictionary for the error bars - # error_y_dict = None - # if result.error_y is not None: - # # Constant error bars - # if isinstance(result.error_y, Iterable) is False: - # error_y_dict = {"type": "constant", "value": result.error_y} - # # Symmetric error bars - # elif isinstance(result.error_y[0], Iterable) is False: - # error_y_dict = {"type": "data", "array": result.error_y} - # # Asymmetric error bars - # else: - # error_y_dict = { - # "type": "data", - # "symmetric": False, - # "array": result.error_y[1], - # "arrayminus": result.error_y[0], - # } - # fig.add_trace( - # go.Scatter( - # x=x, - # y=y, - # error_y=error_y_dict, - # line={"color": "#aa6464"}, - # mode="markers", - # name="error bars", - # ) - # ) - # x_fit = np.linspace(min(x), max(x), len(x) * 20) - # y_fit = exp1B_func(x_fit, *popt) - # fig.add_trace( - # go.Scatter( - # x=x_fit, - # y=y_fit, - # name=label, - # line=go.scatter.Line(dash="dot", color="#00cc96"), - # ) - # ) fig = rb_figure( data, lambda x: exp1B_func(x, *popt), fit_label=label, error_y=result.error_bars diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py index 25b5d6505..217a56d2c 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py @@ -1,10 +1,11 @@ -from math import ceil, isinf, log10 from numbers import Number from typing import Callable, Optional, Union import numpy as np from pandas import DataFrame from qibo import gates +from qibo.config import PRECISION_TOL +from uncertainties import ufloat from qibocal.config import raise_error @@ -87,32 +88,10 @@ def random_clifford(qubits, seed=None): return clifford_gates -def significant_digit(number: Number): - """Computes the position of the first significant digit of a given number. - - Args: - number (Number): number for which the significant digit is computed. Can be complex. - - Returns: - int: position of the first significant digit. Returns ``-1`` if the given number - is ``>= 1``, ``= 0`` or ``inf``. - """ - - if isinf(np.real(number)) or np.real(number) >= 1 or number == 0: - return -1 - - position = max(ceil(-log10(abs(np.real(number)))), -1) - - if np.imag(number) != 0: - position = max(position, ceil(-log10(abs(np.imag(number))))) - - return position - - def number_to_str( value: Number, - uncertainty: Optional[Union[Number, list, tuple, np.ndarray]] = None, - precision: Optional[int] = None, + uncertainty: Optional[Union[float, list, tuple, np.ndarray]] = None, + precision: Optional[int] = 3, ): """Converts a number into a string. @@ -121,36 +100,39 @@ def number_to_str( uncertainty (Number or list or tuple or np.ndarray, optional): number or 2-element interval with the low and high uncertainties of ``value``. Defaults to ``None``. precision (int, optional): nonnegative number of floating points of the displayed value. - If ``None``, defaults to the second significant digit of ``uncertainty`` - or ``3`` if ``uncertainty`` is ``None``. Defaults to ``None``. + Defaults to ``3`` or the second significant digit of the uncertainty. Returns: str: The number expressed as a string, with the uncertainty if given. """ + def _display(dev): + if dev >= 1e-4: + return f"{ufloat(value, dev):.2u}".split("+/-") + dev_display = f"{dev:.1e}" if np.real(dev) > PRECISION_TOL else "0" + return f"{value:.{precision}f}", dev_display + # If uncertainty is not given, return the value with precision if uncertainty is None: precision = precision if precision is not None else 3 return f"{value:.{precision}f}" if isinstance(uncertainty, Number): - if precision is None: - precision = (significant_digit(uncertainty) + 1) or 3 - return f"{value:.{precision}f} \u00B1 {uncertainty:.{precision}f}" + value_display, uncertainty_display = _display(uncertainty) + return value_display + " \u00B1 " + uncertainty_display # If any uncertainty is None, return the value with precision if any(u is None for u in uncertainty): - return f"{value:.{precision if precision is not None else 3}f}" + return f"{value:.{precision}f}" - # If precision is None, get the first significant digit of the uncertainty - if precision is None: - precision = max(significant_digit(u) + 1 for u in uncertainty) or 3 + value_0, uncertainty_0 = _display(uncertainty[0]) + value_1, uncertainty_1 = _display(uncertainty[1]) + value_display = max(value_0, value_1, key=len) - # Check if both uncertainties are equal up to precision - if np.round(uncertainty[0], precision) == np.round(uncertainty[1], precision): - return f"{value:.{precision}f} \u00B1 {uncertainty[0]:.{precision}f}" + if uncertainty_0 == uncertainty_1: + return value_display + " \u00B1 " + uncertainty_0 - return f"{value:.{precision}f} +{uncertainty[1]:.{precision}f} / -{uncertainty[0]:.{precision}f}" + return f"{value_display} +{uncertainty_1} / -{uncertainty_0}" def extract_from_data( diff --git a/tests/test_randomized_benchmarking.py b/tests/test_randomized_benchmarking.py index 1db9b8d2e..d10719d05 100644 --- a/tests/test_randomized_benchmarking.py +++ b/tests/test_randomized_benchmarking.py @@ -172,17 +172,15 @@ def test_random_clifford(qubits, seed): assert np.allclose(matrix, result) -@pytest.mark.parametrize("value", [0.555555, 2, -0.1 + 0.1j]) +@pytest.mark.parametrize("value", [0.555555, 2.1]) def test_number_to_str(value): assert number_to_str(value) == f"{value:.3f}" assert number_to_str(value, [None, None]) == f"{value:.3f}" assert number_to_str(value, 0.0123) == f"{value:.3f} \u00B1 0.012" assert number_to_str(value, [0.0123, 0.012]) == f"{value:.3f} \u00B1 0.012" - assert number_to_str(value, 0.1 + 0.02j) == f"{value:.3f} \u00B1 0.100+0.020j" - assert number_to_str(value, [0.203, 0.001]) == f"{value:.4f} +0.0010 / -0.2030" - assert ( - number_to_str(value, [float("inf"), float("inf")]) == f"{value:.3f} \u00B1 inf" - ) + assert number_to_str(value, [0.203, 0.001]) == f"{value:.4f} +0.0010 / -0.20" + assert number_to_str(value, [0.203, 0.00001]) == f"{value:.3f} +1.0e-05 / -0.20" + assert number_to_str(value, [float("inf"), float("inf")]) == f"{value} \u00B1 inf" def test_extract_from_data(): From 57e81e51f2be15e36f24c804f08cfeb85aa1837b Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Tue, 20 Jun 2023 18:51:09 +0400 Subject: [PATCH 05/26] Add tests --- .../randomized_benchmarking/circuit_tools.py | 6 +- .../clifford_filtered_rb.py | 4 +- .../randomized_benchmarking/noisemodels.py | 56 +------------------ tests/runcards/protocols.yml | 25 ++++++++- 4 files changed, 32 insertions(+), 59 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py index 626d0030f..76e9cc144 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py @@ -42,8 +42,8 @@ def layer_circuit(layer_gen: Callable, depth: int, **kwargs) -> Circuit: Circuit: with `depth` many layers. """ - if not isinstance(depth, int) or depth <= 0: - raise_error(ValueError, "Depth must be type int and positive.") + if not isinstance(depth, int) or depth < 0: + raise_error(ValueError, "Depth must be type int and >= 0.") full_circuit = None # Build each layer, there will be depth many in the final circuit. for _ in range(depth): @@ -68,6 +68,8 @@ def layer_circuit(layer_gen: Callable, depth: int, **kwargs) -> Circuit: if full_circuit is None: # instantiate in first loop full_circuit = Circuit(new_circuit.nqubits, **kwargs) full_circuit = full_circuit + new_circuit + if full_circuit is None: + return Circuit(1, **kwargs) return full_circuit diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index c688459ab..16ca3d765 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -248,7 +248,7 @@ def _fit(data: RBData) -> CliffordRBResult: n_bootstrap = data.attrs.get("n_bootstrap", 0) y_estimates, popt_estimates = y_scatter, [] - if n_bootstrap: + if uncertainties and n_bootstrap: # Non-parametric bootstrap resampling bootstrap_y = bootstrap( y_scatter, @@ -329,6 +329,8 @@ def crosstalk(q0, q1): nqubits = int(np.log2(len(result.fit_results.index))) qubits = data.attrs.get("qubits", list(range(nqubits))) + if isinstance(qubits, dict): + qubits = [q.name for q in qubits.values()] # crosstalk_heatmap = np.ones((nqubits, nqubits)) # crosstalk_heatmap[np.triu_indices(nqubits)] = None diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py index 666a03d70..e2ffa72ef 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py @@ -7,9 +7,7 @@ import numpy as np from qibo import gates -from qibo.noise import NoiseModel, PauliError, UnitaryError -from qibo.quantum_info import random_hermitian -from scipy.linalg import expm +from qibo.noise import NoiseModel, PauliError from qibocal.config import raise_error @@ -52,55 +50,3 @@ class PauliErrorOnX(PauliErrorOnAll): def build(self): self.add(PauliError(list(zip(["X", "Y", "Z"], self.params))), gates.X) - - -class UnitaryErrorOnAll(NoiseModel): - """Builds a noise model with a unitary error - acting on all gates in a Circuit. - - If parameters are not given, - a random unitary close to identity is generated - ::math:`U = \\exp(-i t H)` for a random Harmitian matrix ::math:`H`. - - Args: - probabilities (list): list of probabilities corresponding to unitaries. Defualt is []. - unitaries (list): list of unitaries. Defualt is []. - nqubits (int): number of qubits. Default is 1. - t (float): "strength" of random unitary noise. Default is 0.1. - """ - - def __init__(self, nqubits=1, t=0.1, probabilities=[], unitaries=[]) -> None: - super().__init__() - - if not isinstance(t, float): - raise_error(TypeError, f"Parameter t must be float, but is {type(t)}.") - - # If unitaries are not given, generate a random Unitary close to Id - if len(unitaries) == 0: - dim = 2**nqubits - - # Generate random unitary matrix close to Id. U=exp(i*t*H) - herm_generator = random_hermitian(dim) - unitary_matr = expm(-1j * t * herm_generator) - - unitaries = [unitary_matr] - probabilities = [1] - self.params = (probabilities, unitaries) - self.build() - - def build(self): - self.add(UnitaryError(*self.params)) - - -class UnitaryErrorOnX(UnitaryErrorOnAll): - """Builds a noise model with a unitary error - acting on all gates in a Circuit. - - Inherited from ``UnitaryErrorOnAll`` but the ``build`` method is - overwritten to act on X gates. - If matrix ``U`` is not given, - a random unitary close to identity is generated. - """ - - def build(self): - self.add(UnitaryError(*self.params), gates.X) diff --git a/tests/runcards/protocols.yml b/tests/runcards/protocols.yml index 2fdba2c77..b56cb8011 100644 --- a/tests/runcards/protocols.yml +++ b/tests/runcards/protocols.yml @@ -269,7 +269,6 @@ actions: freq_step: 100_000 nshots: 10 - - id: standard rb no error priority: 0 operation: standard_rb @@ -306,3 +305,27 @@ actions: n_bootstrap: 10 noise_model: PauliErrorOnX noise_params: [0.01, 0.01, 0.01] + + - id: clifford rb no error + priority: 0 + operation: clifford_filtered_rb + parameters: + depths: + start: 1 + stop: 10 + step: 2 + niter: 2 + nshots: 50 + uncertainties: None + n_bootstrap: 0 + + - id: clifford rb bootstrap + priority: 0 + operation: clifford_filtered_rb + qubits: [1] + parameters: + depths: [0, 1, 2, 3, 5] + niter: 5 + nshots: 50 + n_bootstrap: 10 + noise_model: PauliErrorOnAll From d3a6306dcff01ae65bcad216c1b64f200d989222 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Wed, 21 Jun 2023 15:45:19 +0400 Subject: [PATCH 06/26] change display | add seed to noise models --- .../randomized_benchmarking/circuit_tools.py | 41 +++++++------- .../clifford_filtered_rb.py | 18 +++---- .../randomized_benchmarking/noisemodels.py | 12 ++--- .../randomized_benchmarking/plot.py | 54 ++++++++++++++----- .../randomized_benchmarking/standard_rb.py | 7 ++- .../randomized_benchmarking/utils.py | 30 ++++++++--- tests/runcards/protocols.yml | 11 ---- tests/test_randomized_benchmarking.py | 34 ++++++++---- 8 files changed, 128 insertions(+), 79 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py index 76e9cc144..b74382ba0 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py @@ -44,32 +44,35 @@ def layer_circuit(layer_gen: Callable, depth: int, **kwargs) -> Circuit: if not isinstance(depth, int) or depth < 0: raise_error(ValueError, "Depth must be type int and >= 0.") - full_circuit = None + + # Generate a layer to get nqubits. + new_layer = layer_gen() + if isinstance(new_layer, Gate): + nqubits = max(new_layer.qubits) + 1 + elif all(isinstance(gate, Gate) for gate in new_layer): + nqubits = max(max(gate.qubits) for gate in new_layer) + 1 + elif isinstance(new_layer, Circuit): + nqubits = new_layer.nqubits + else: + raise_error( + TypeError, + f"layer_gen must return type Circuit or Gate, but it is type {type(new_layer)}.", + ) + + # instantiate an empty circuit + full_circuit = Circuit(nqubits, **kwargs) + # Build each layer, there will be depth many in the final circuit. for _ in range(depth): - # Generate a layer. + # Generate a new layer. new_layer = layer_gen() # Ensure new_layer is a circuit - if isinstance(new_layer, Gate): - new_circuit = Circuit(max(new_layer.qubits) + 1, **kwargs) - new_circuit.add(new_layer) - elif all(isinstance(gate, Gate) for gate in new_layer): - new_circuit = Circuit( - max(max(gate.qubits) for gate in new_layer) + 1, **kwargs - ) - new_circuit.add(new_layer) - elif isinstance(new_layer, Circuit): + if isinstance(new_layer, Circuit): new_circuit = new_layer else: - raise_error( - TypeError, - f"layer_gen must return type Circuit or Gate, but it is type {type(new_layer)}.", - ) - if full_circuit is None: # instantiate in first loop - full_circuit = Circuit(new_circuit.nqubits, **kwargs) + new_circuit = Circuit(nqubits, **kwargs) + new_circuit.add(new_layer) full_circuit = full_circuit + new_circuit - if full_circuit is None: - return Circuit(1, **kwargs) return full_circuit diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 16ca3d765..aa9d3fa28 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -332,15 +332,12 @@ def crosstalk(q0, q1): if isinstance(qubits, dict): qubits = [q.name for q in qubits.values()] - # crosstalk_heatmap = np.ones((nqubits, nqubits)) - # crosstalk_heatmap[np.triu_indices(nqubits)] = None rb_params = {} - fig_list = [] for kk, irrep_key in enumerate(result.filtered_data.columns[3:]): irrep_binary = np.binary_repr(kk, width=nqubits) - # nontrivial_qubits = [q for q, c in enumerate(irrep_binary) if c == '1'] - popt, perr, error_y = ( + + popt, perr, error_bars = ( result.fit_results["fit_parameters"][irrep_key], result.fit_results["fit_uncertainties"][irrep_key], result.fit_results["error_bars"][irrep_key], @@ -350,19 +347,16 @@ def crosstalk(q0, q1): number_to_str(popt[1], perr[1]), ) rb_params[f"Irrep {irrep_binary}"] = number_to_str(popt[1], perr[1]) - # if len(nontrivial_qubits) == 2: - # crosstalk_heatmap[nontrivial_qubits[1], nontrivial_qubits[0]] *= popt[1] - # elif len(nontrivial_qubits) == 1 and nqubits > 1: - # crosstalk_heatmap[nontrivial_qubits[0]] /= popt[1] fig_irrep = rb_figure( result.filtered_data, model=lambda x: exp1_func(x, *popt), fit_label=label, signal_label=irrep_key, - error_y=error_y, + error_bars=error_bars, + legend=dict(yanchor="bottom", y=1.02, xanchor="right", x=1), + title=dict(text=irrep_binary), ) - fig_irrep.update_layout(title=dict(text=irrep_binary)) fig_list.append(fig_irrep) result_fig = [carousel(fig_list)] @@ -399,6 +393,8 @@ def crosstalk(q0, q1): if not meta_data["noise_model"]: meta_data.pop("noise_model") meta_data.pop("noise_params") + elif meta_data.get("noise_params", None) is not None: + meta_data["noise_params"] = np.round(meta_data["noise_params"], 3) table_str = "".join( [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py index e2ffa72ef..58d034da5 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py @@ -19,12 +19,15 @@ class PauliErrorOnAll(NoiseModel): are drawn (in sum not bigger than 1). """ - def __init__(self, probabilities: Optional[list] = None) -> None: + def __init__( + self, probabilities: Optional[list] = None, seed: Optional[int] = None + ) -> None: super().__init__() # Check if number of arguments is 0 or 1 and if it's equal to None if not probabilities: # Assign random values to params. - self.params = np.random.uniform(0, 0.25, size=3).round(3) + np.random.seed(seed) + self.params = np.random.uniform(0, 0.25, size=3) elif len(probabilities) == 3: self.params = probabilities else: @@ -42,10 +45,7 @@ def build(self): class PauliErrorOnX(PauliErrorOnAll): """Builds a noise model with pauli flips acting on X gates. - Inherited from ``PauliErrorOnAll`` but the ``build`` method is - overwritten to act on X gates. - If no initial parameters for px, py, pz are given, random values - are drawn (in sum not bigger than 1). + Inherited from :class:`PauliErrorOnAll` but acts on X gates. """ def build(self): diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py index 8e4d9a8a8..6cce2dcc6 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py @@ -1,4 +1,4 @@ -from typing import Iterable +from typing import Iterable, Optional, Union import numpy as np import plotly.graph_objects as go @@ -6,7 +6,27 @@ from .utils import extract_from_data -def rb_figure(data, model, fit_label="", signal_label="signal", error_y=None): +def rb_figure( + data, + model, + fit_label: Optional[str] = "", + signal_label: Optional[str] = "signal", + error_bars: Optional[Union[float, list, np.ndarray]] = None, + **kwargs +): + """Create Figure with RB signal, average values and fitting result. + + Args: + data (:class:`RBData`): data of a protocol. + model (callable): function that maps 1d array of ``x`` to ``y`` of the fitting result. + fit_label (str, optional): label of the fit model in the plot legend. + signal_label (str, optonal): name of the signal parameter in ``data``. + error_bars (float or list or np.ndarray, optonal): error bars for the averaged signal. + **kwargs: passed to the resulting figure's layout. + + Returns: + plotly.graph_objects.Figure: resulting RB figure. + """ x, y = extract_from_data(data, signal_label, "depth", "mean") fig = go.Figure() @@ -34,28 +54,28 @@ def rb_figure(data, model, fit_label="", signal_label="signal", error_y=None): ) ) - # If error_y is given, plot the error bars - error_y_dict = None - if error_y is not None: + # If error_bars is given, plot the error bars + error_bars_dict = None + if error_bars is not None: # Constant error bars - if isinstance(error_y, Iterable) is False: - error_y_dict = {"type": "constant", "value": error_y} + if isinstance(error_bars, Iterable) is False: + error_bars_dict = {"type": "constant", "value": error_bars} # Symmetric error bars - elif isinstance(error_y[0], Iterable) is False: - error_y_dict = {"type": "data", "array": error_y} + elif isinstance(error_bars[0], Iterable) is False: + error_bars_dict = {"type": "data", "array": error_bars} # Asymmetric error bars else: - error_y_dict = { + error_bars_dict = { "type": "data", "symmetric": False, - "array": error_y[1], - "arrayminus": error_y[0], + "array": error_bars[1], + "arrayminus": error_bars[0], } fig.add_trace( go.Scatter( x=x, y=y, - error_y=error_y_dict, + error_y=error_bars_dict, line={"color": "#aa6464"}, mode="markers", name="error bars", @@ -71,6 +91,7 @@ def rb_figure(data, model, fit_label="", signal_label="signal", error_y=None): line=go.scatter.Line(dash="dot", color="#00cc96"), ) ) + fig.update_layout(**kwargs) return fig @@ -79,12 +100,18 @@ def carousel(fig_list: list): Args: fig_list (List[plotly.graph_objects.Figure]): list of ``Plotly`` figures. + Resulting figure will have the layout of ``fig_list[0]``, the slider values will + correspond to figures' titles if given. Returns: :class:`plotly.graph_objects.Figure`: Carousel figure with a slider. """ + # Create a figure with the layout of `fig_list[0]` figure. carousel_fig = go.Figure() + carousel_fig.update_layout(**fig_list[0].to_dict().get("layout", {})) + + # Record each figure as a step for the slider steps = [] fig_sizes = [len(fig.data) for fig in fig_list] for count, fig in enumerate(fig_list): @@ -118,6 +145,5 @@ def carousel(fig_list: list): steps=steps, ) ] - carousel_fig.update_layout(sliders=sliders) return carousel_fig diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index 04d31d56a..0220e384e 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -352,7 +352,10 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> tuple[list[go.Figure ) fig = rb_figure( - data, lambda x: exp1B_func(x, *popt), fit_label=label, error_y=result.error_bars + data, + lambda x: exp1B_func(x, *popt), + fit_label=label, + error_bars=result.error_bars, ) meta_data = deepcopy(data.attrs) @@ -360,6 +363,8 @@ def _plot(data: RBData, result: StandardRBResult, qubit) -> tuple[list[go.Figure if not meta_data["noise_model"]: meta_data.pop("noise_model") meta_data.pop("noise_params") + elif meta_data.get("noise_params", None) is not None: + meta_data["noise_params"] = np.round(meta_data["noise_params"], 3) table_str = "".join( [ diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py index 217a56d2c..bb50d2241 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py @@ -106,11 +106,25 @@ def number_to_str( str: The number expressed as a string, with the uncertainty if given. """ - def _display(dev): - if dev >= 1e-4: - return f"{ufloat(value, dev):.2u}".split("+/-") - dev_display = f"{dev:.1e}" if np.real(dev) > PRECISION_TOL else "0" - return f"{value:.{precision}f}", dev_display + def _sign(val): + return "+" if float(val) > -PRECISION_TOL else "-" + + def _display(val, dev): + # inf uncertainty + if np.isinf(dev): + return f"{value:.{precision}f}", "inf" + # Real values + if not np.iscomplex(val) and not np.iscomplex(dev): + if dev >= 1e-4: + return f"{ufloat(val, dev):.2u}".split("+/-") + dev_display = f"{dev:.1e}" if np.real(dev) > PRECISION_TOL else "0" + return f"{val:.{precision}f}", dev_display + # Complex case + val_display, dev_display = _display(np.real(val), np.real(dev)) + val_imag, dev_imag = _display(np.imag(val), np.imag(dev)) + val_display = f"({val_display}{_sign(val_imag)}{val_imag.strip('-')}j)" + dev_display = f"({dev_display}{_sign(dev_imag)}{dev_imag.strip('-')}j)" + return val_display, dev_display # If uncertainty is not given, return the value with precision if uncertainty is None: @@ -118,15 +132,15 @@ def _display(dev): return f"{value:.{precision}f}" if isinstance(uncertainty, Number): - value_display, uncertainty_display = _display(uncertainty) + value_display, uncertainty_display = _display(value, uncertainty) return value_display + " \u00B1 " + uncertainty_display # If any uncertainty is None, return the value with precision if any(u is None for u in uncertainty): return f"{value:.{precision}f}" - value_0, uncertainty_0 = _display(uncertainty[0]) - value_1, uncertainty_1 = _display(uncertainty[1]) + value_0, uncertainty_0 = _display(value, uncertainty[0]) + value_1, uncertainty_1 = _display(value, uncertainty[1]) value_display = max(value_0, value_1, key=len) if uncertainty_0 == uncertainty_1: diff --git a/tests/runcards/protocols.yml b/tests/runcards/protocols.yml index b56cb8011..44d901145 100644 --- a/tests/runcards/protocols.yml +++ b/tests/runcards/protocols.yml @@ -282,17 +282,6 @@ actions: uncertainties: None n_bootstrap: 0 - - id: standard rb bootstrap - priority: 0 - operation: standard_rb - qubits: [1] - parameters: - depths: [1, 2, 3, 5] - niter: 5 - nshots: 50 - n_bootstrap: 10 - noise_model: PauliErrorOnAll - - id: standard rb inhomogeneous priority: 0 operation: standard_rb diff --git a/tests/test_randomized_benchmarking.py b/tests/test_randomized_benchmarking.py index d10719d05..b701b7a87 100644 --- a/tests/test_randomized_benchmarking.py +++ b/tests/test_randomized_benchmarking.py @@ -172,15 +172,31 @@ def test_random_clifford(qubits, seed): assert np.allclose(matrix, result) -@pytest.mark.parametrize("value", [0.555555, 2.1]) -def test_number_to_str(value): - assert number_to_str(value) == f"{value:.3f}" - assert number_to_str(value, [None, None]) == f"{value:.3f}" - assert number_to_str(value, 0.0123) == f"{value:.3f} \u00B1 0.012" - assert number_to_str(value, [0.0123, 0.012]) == f"{value:.3f} \u00B1 0.012" - assert number_to_str(value, [0.203, 0.001]) == f"{value:.4f} +0.0010 / -0.20" - assert number_to_str(value, [0.203, 0.00001]) == f"{value:.3f} +1.0e-05 / -0.20" - assert number_to_str(value, [float("inf"), float("inf")]) == f"{value} \u00B1 inf" +@pytest.mark.parametrize("prec", [2, 3]) +def test_number_to_str(prec): + # Real values + value = np.random.uniform(0, 1) + assert number_to_str(value, precision=prec) == f"{value:.{prec}f}" + assert number_to_str(value, [None, None], prec) == f"{value:.{prec}f}" + assert number_to_str(value, 0.0123, prec) == f"{value:.3f} \u00B1 0.012" + assert number_to_str(value, [0.0123, 0.012], prec) == f"{value:.3f} \u00B1 0.012" + assert ( + number_to_str(value, [0.2, 1e-5], prec) == f"{value:.{prec}f} +1.0e-05 / -0.20" + ) + assert number_to_str(value, [np.inf] * 2, prec) == f"{value:.{prec}f} \u00B1 inf" + # Complex values + value += np.random.uniform(0, 1) * 1j + assert number_to_str(value, precision=prec) == f"{value:.{prec}f}" + assert number_to_str(value, [None, None], prec) == f"{value:.{prec}f}" + assert ( + number_to_str(value, 0.0123, prec) + == f"({np.real(value):.3f}+{np.imag(value):.{prec}f}j) \u00B1 (0.012+0j)" + ) + assert ( + number_to_str(value, [0.2, 1e-5], prec) + == f"({value:.{prec}f}) +(1.0e-05+0j) / -(0.20+0j)" + ) + assert number_to_str(value, [np.inf] * 2, prec) == f"{value:.{prec}f} \u00B1 inf" def test_extract_from_data(): From 21997f3c2c1ae5d310938c240fb51d202bbf8599 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Thu, 22 Jun 2023 11:54:30 +0400 Subject: [PATCH 07/26] Fix coverage --- .../randomized_benchmarking/fitting.py | 28 +------------------ .../randomized_benchmarking/noisemodels.py | 4 +-- tests/test_randomized_benchmarking.py | 10 +++---- 3 files changed, 8 insertions(+), 34 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py index fcc076d80..a43858563 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/fitting.py @@ -24,21 +24,13 @@ def exp1B_func(x: np.ndarray, A: float, f: float, B: float) -> np.ndarray: return A * f**x + B -def exp2_func(x: np.ndarray, A1: float, A2: float, f1: float, f2: float) -> np.ndarray: - """Return :math:`A_1\\cdot f_1^x+A_2\\cdot f_2^x` where ``x`` is an ``np.ndarray`` and - ``A1``, ``f1``, ``A2``, ``f2`` are floats. There is no linear offsett B. - """ - x = np.array(x, dtype=complex) - return A1 * f1**x + A2 * f2**x - - def expn_func(x: Union[np.ndarray, list], *args) -> np.ndarray: """Compute the sum of exponentials :math:`\\sum A_i\\cdot f_i^x` Args: x (np.ndarray | list): list of exponents. *args: Parameters of type `float` in the order - :math:`A_1`, :math:`A_2`, :math:`f_1`, :math:`f_2`,... + :math:`A_1`, :math:`A_2`, ... :math:`f_1`, :math:`f_2`,... Returns: The resulting sum of exponentials. @@ -191,21 +183,3 @@ def fit_expn_func( vandermonde = np.array([decays**x for x in xdata]) alphas = np.linalg.pinv(vandermonde) @ np.array(ydata).reshape(-1, 1).flatten() return tuple([*alphas, *decays]), (0,) * (len(alphas) + len(decays)) - - -def fit_exp2_func( - xdata: Union[np.ndarray, list], ydata: Union[np.ndarray, list], **kwargs -) -> tuple[tuple, tuple]: - """Calculate 2 exponentials on top of each other, fit to the given ydata. - - No linear offset, the ESPRIT algorithm is used to identify the two exponential decays. - - Args: - xdata (Union[np.ndarray, list]): The x-labels. - ydata (Union[np.ndarray, list]): The data to be fitted - - Returns: - tuple[tuple, tuple]: (A1, A2, f1, f2) with f* the decay parameters. - """ - - return fit_expn_func(xdata, ydata, 2) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py index 58d034da5..5d5be35b4 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/noisemodels.py @@ -26,8 +26,8 @@ def __init__( # Check if number of arguments is 0 or 1 and if it's equal to None if not probabilities: # Assign random values to params. - np.random.seed(seed) - self.params = np.random.uniform(0, 0.25, size=3) + random_generator = np.random.default_rng(seed) + self.params = random_generator.uniform(0, 0.25, size=3) elif len(probabilities) == 3: self.params = probabilities else: diff --git a/tests/test_randomized_benchmarking.py b/tests/test_randomized_benchmarking.py index b701b7a87..0b005b567 100644 --- a/tests/test_randomized_benchmarking.py +++ b/tests/test_randomized_benchmarking.py @@ -61,13 +61,13 @@ def test_1expfitting(): # Catch exceptions x = np.linspace(-np.pi / 2, np.pi / 2, 100) y_dist = np.tan(x) - popt, perr = fitting.fit_exp1_func(x, y_dist, maxfev=1, p0=[1]) + popt, perr = fitting.fit_expn_func(x, y_dist, n=1, maxfev=1, p0=[1]) assert not (np.all(np.array([*popt, *perr]), 0)) popt, perr = fitting.fit_exp1B_func(x, y_dist, maxfev=1) assert not (np.all(np.array([*popt, *perr]), 0)) -def test_exp2_fitting(): +def test_expn_fitting(): successes = 0 number_runs = 50 for count in range(number_runs): @@ -80,10 +80,10 @@ def test_exp2_fitting(): else: f1, f2 = np.random.uniform(0.1, 0.99, size=2) y = A1 * f1**x + A2 * f2**x - assert np.allclose(fitting.exp2_func(x, A1, A2, f1, f2), y) + assert np.allclose(fitting.expn_func(x, A1, A2, f1, f2), y) # Distort ``y`` a bit. y_dist = y + np.random.uniform(-1, 1, size=len(y)) * 0.001 - popt, perr = fitting.fit_exp2_func(x, y_dist) + popt, _ = fitting.fit_expn_func(x, y_dist, 2) worked = np.all( np.logical_or( np.allclose(np.array(popt), [A2, A1, f2, f1], atol=0.05, rtol=0.1), @@ -108,7 +108,7 @@ def test_exp2_fitting(): y = A1 * f1**x + A2 * f2**x # Distort ``y`` a bit. y_dist = y + np.random.uniform(-1, 1, size=len(y)) * 0.001 - popt, perr = fitting.fit_exp2_func(x, y_dist) + popt, _ = fitting.fit_expn_func(x, y_dist, 2) # Test noisemodels From 2186a788d864c45997866ceb7a5163c838bc6821 Mon Sep 17 00:00:00 2001 From: Liza Vodovozova Date: Thu, 6 Jul 2023 17:56:48 +0400 Subject: [PATCH 08/26] Fix plots --- .../characterization/randomized_benchmarking/plot.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py index 6cce2dcc6..6f7533348 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py @@ -39,7 +39,7 @@ def rb_figure( line=dict(color="#6597aa"), mode="markers", marker={"opacity": 0.2, "symbol": "square"}, - name="itertarions", + name="iterations", ) ) @@ -91,7 +91,15 @@ def rb_figure( line=go.scatter.Line(dash="dot", color="#00cc96"), ) ) + + kwargs.setdefault("showlegend", True) + kwargs.setdefault( + "uirevision", "0" + ) # ``uirevision`` allows zooming while live plotting + kwargs.setdefault("xaxis_title", "Circuit depth") + kwargs.setdefault("yaxis_title", "RB signal") fig.update_layout(**kwargs) + return fig From 3824b527bf9428746d497d1721d0907fc81fa47b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:32:36 +0000 Subject: [PATCH 09/26] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../characterization/randomized_benchmarking/standard_rb.py | 1 - .../protocols/characterization/randomized_benchmarking/utils.py | 1 - 2 files changed, 2 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index 2d2ea3656..d94d90af1 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -21,7 +21,6 @@ ) from .data import RBData from .fitting import exp1B_func, fit_exp1B_func -from .plot import rb_figure from .utils import extract_from_data, number_to_str, random_clifford NPULSES_PER_CLIFFORD = 1.875 diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py index 472fa3f4d..4684118b3 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py @@ -8,7 +8,6 @@ from uncertainties import ufloat from qibocal.config import raise_error -from qibocal.protocols.characterization.utils import significant_digit SINGLE_QUBIT_CLIFFORDS = { # Virtual gates From e2c1194c443979181a45aa481577782839334cd7 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 21 Sep 2023 11:42:37 +0400 Subject: [PATCH 10/26] save and load circuits --- .../randomized_benchmarking/data.py | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index f11abbe3c..d3a7cf7b6 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -1,18 +1,82 @@ +import json + import pandas as pd +from qibo import gates +from qibo.models import Circuit from qibocal.auto.operation import DATAFILE +def circ_toJSON(circuit): + circ_json = [] + for gate in circuit.queue: + circ_json.append(gate.toJSON()) + return circ_json + + +# Make in a nicer general way +def json_tocircuit(circuit, nqubits): + gatelist = [] + for gate_json in circuit: + gate = json.loads(gate_json) + if gate["name"] == "u3": + gatelist.append( + gates.U3( + gate["_target_qubits"][0], + gate["init_kwargs"]["theta"], + gate["init_kwargs"]["phi"], + gate["init_kwargs"]["lam"], + ) + ) + if gate["name"] == "id": + gatelist.append(gates.I(gate["_target_qubits"][0])) + if gate["name"] == "rz": + gatelist.append( + gates.RZ(gate["_target_qubits"][0], gate["init_kwargs"]["theta"]) + ) + if gate["name"] == "rx": + gatelist.append( + gates.RX(gate["_target_qubits"][0], gate["init_kwargs"]["theta"]) + ) + if gate["name"] == "ry": + gatelist.append( + gates.RY(gate["_target_qubits"][0], gate["init_kwargs"]["theta"]) + ) + if gate["name"] == "z": + gatelist.append(gates.Z(gate["_target_qubits"][0])) + if gate["name"] == "x": + gatelist.append(gates.X(gate["_target_qubits"][0])) + if gate["name"] == "y": + gatelist.append(gates.Y(gate["_target_qubits"][0])) + + new_circuit = Circuit(nqubits) + new_circuit.add(gatelist) + return new_circuit + + class RBData(pd.DataFrame): """A pandas DataFrame child. The output of the acquisition function.""" def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) + # Modifies at save, do a copy ? def save(self, path): """Overwrite because qibocal action builder calls this function with a directory.""" - super().to_json(path / DATAFILE, default_handler=str) + save_copy = self.copy() + for index, circuit in enumerate(self.circuit): + save_copy.at[index, "circuit"] = circ_toJSON(circuit) + + save_copy.to_json(path / DATAFILE, default_handler=str) + # When loading add inverse gate or measurament if needed. + # I skipped them as they may not be needed. @classmethod def load(cls, path): - return cls(pd.read_json(path / DATAFILE)) + new_data = cls(pd.read_json(path / DATAFILE)) + + nqubits = len(new_data.samples[0][0]) + for index, circuit in enumerate(new_data.circuit): + new_data.at[index, "circuit"] = json_tocircuit(circuit, nqubits) + + return new_data From 93ca115c5a07db2c2ec88a5f55609af2f64199c9 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 21 Sep 2023 16:12:28 +0400 Subject: [PATCH 11/26] working --- .../clifford_filtered_rb.py | 29 +++++++++++-------- .../randomized_benchmarking/data.py | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index aa9d3fa28..8d7c69d13 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -11,7 +11,7 @@ from qibolab.platform import Platform from qibolab.qubits import QubitId -from qibocal.auto.operation import Qubits, Results, Routine +from qibocal.auto.operation import RESULTSFILE, Qubits, Results, Routine from qibocal.bootstrap import bootstrap, data_uncertainties from qibocal.config import log, raise_error from qibocal.protocols.characterization.randomized_benchmarking import noisemodels @@ -31,6 +31,11 @@ class CliffordRBResult(Results): """Raw fitting parameters and uncertainties.""" fit_results: pd.DataFrame + def save(self, path): + """Store results to json.""" + self.filtered_data.to_json(path / RESULTSFILE, default_handler=str) + self.fit_results.to_json(path / "results_fit.json", default_handler=str) + def filter_function(samples_list, circuit_list) -> list: """Calculates the filtered signal for every crosstalk irrep. @@ -74,7 +79,7 @@ def filter_function(samples_list, circuit_list) -> list: ideal_states = np.tile(np.array([1, 0]), nqubits).reshape(nqubits, 2) else: ideal_states = np.array( - [fused_circuit.queue[k].matrix[:, 0] for k in range(nqubits)] + [fused_circuit.queue[k].matrix()[:, 0] for k in range(nqubits)] ) # Go through every irrep. f_list = [] @@ -306,7 +311,7 @@ def _fit(data: RBData) -> CliffordRBResult: ) -def _plot(data: RBData, result: CliffordRBResult, qubit) -> tuple[list[go.Figure], str]: +def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], str]: """Builds the table for the qq pipe, calls the plot function of the result object and returns the figure es list. @@ -320,27 +325,27 @@ def _plot(data: RBData, result: CliffordRBResult, qubit) -> tuple[list[go.Figure """ def crosstalk(q0, q1): - p0 = result.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] - p1 = result.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] - p01 = result.fit_results["fit_parameters"][f"irrep{2 ** q1 + 2 ** q0}"][1] + p0 = fit.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] + p1 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] + p01 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1 + 2 ** q0}"][1] if p0 == 0 or p1 == 0: return None return p01 / (p0 * p1) - nqubits = int(np.log2(len(result.fit_results.index))) + nqubits = int(np.log2(len(fit.fit_results.index))) qubits = data.attrs.get("qubits", list(range(nqubits))) if isinstance(qubits, dict): qubits = [q.name for q in qubits.values()] rb_params = {} fig_list = [] - for kk, irrep_key in enumerate(result.filtered_data.columns[3:]): + for kk, irrep_key in enumerate(fit.filtered_data.columns[3:]): irrep_binary = np.binary_repr(kk, width=nqubits) popt, perr, error_bars = ( - result.fit_results["fit_parameters"][irrep_key], - result.fit_results["fit_uncertainties"][irrep_key], - result.fit_results["error_bars"][irrep_key], + fit.fit_results["fit_parameters"][irrep_key], + fit.fit_results["fit_uncertainties"][irrep_key], + fit.fit_results["error_bars"][irrep_key], ) label = "Fit: y=Ap^x
A: {}
p: {}".format( number_to_str(popt[0], perr[0]), @@ -349,7 +354,7 @@ def crosstalk(q0, q1): rb_params[f"Irrep {irrep_binary}"] = number_to_str(popt[1], perr[1]) fig_irrep = rb_figure( - result.filtered_data, + fit.filtered_data, model=lambda x: exp1_func(x, *popt), fit_label=label, signal_label=irrep_key, diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index d3a7cf7b6..95486d8d9 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -9,6 +9,7 @@ def circ_toJSON(circuit): circ_json = [] + # Look into circuit.moments for noise matters for gate in circuit.queue: circ_json.append(gate.toJSON()) return circ_json @@ -60,7 +61,6 @@ class RBData(pd.DataFrame): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) - # Modifies at save, do a copy ? def save(self, path): """Overwrite because qibocal action builder calls this function with a directory.""" save_copy = self.copy() From 39353f66c53a7d75d289ba9cdd234f8602d4dde5 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 21 Sep 2023 16:16:38 +0400 Subject: [PATCH 12/26] comment --- .../randomized_benchmarking/clifford_filtered_rb.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 8d7c69d13..c204fc419 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -324,6 +324,8 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], Tuple[List[go.Figure], str]: """ + #TODO: If fit is None: loop to separate plotting for fitting in qq + def crosstalk(q0, q1): p0 = fit.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] p1 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] From 31b120837cbb749d1a7e498cb990638a59922fd0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 21 Sep 2023 12:17:01 +0000 Subject: [PATCH 13/26] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../randomized_benchmarking/clifford_filtered_rb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index c204fc419..ccf86ed15 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -324,8 +324,8 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], Tuple[List[go.Figure], str]: """ - #TODO: If fit is None: loop to separate plotting for fitting in qq - + # TODO: If fit is None: loop to separate plotting for fitting in qq + def crosstalk(q0, q1): p0 = fit.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] p1 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] From dff591086af13ca69072c514672e57d62bc63a08 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Fri, 22 Sep 2023 12:19:04 +0400 Subject: [PATCH 14/26] rename json --- .../characterization/randomized_benchmarking/data.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index 95486d8d9..1f3cb2204 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -7,11 +7,11 @@ from qibocal.auto.operation import DATAFILE -def circ_toJSON(circuit): +def circ_to_json(circuit): circ_json = [] # Look into circuit.moments for noise matters for gate in circuit.queue: - circ_json.append(gate.toJSON()) + circ_json.append(gate.to_json()) return circ_json @@ -65,7 +65,7 @@ def save(self, path): """Overwrite because qibocal action builder calls this function with a directory.""" save_copy = self.copy() for index, circuit in enumerate(self.circuit): - save_copy.at[index, "circuit"] = circ_toJSON(circuit) + save_copy.at[index, "circuit"] = circ_to_json(circuit) save_copy.to_json(path / DATAFILE, default_handler=str) From 724e7f280437651d08a658298075f0ac97d52852 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Mon, 25 Sep 2023 13:21:19 +0400 Subject: [PATCH 15/26] fixes --- .../characterization/randomized_benchmarking/data.py | 4 +++- .../characterization/randomized_benchmarking/standard_rb.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index 1f3cb2204..df5e10f13 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -9,7 +9,8 @@ def circ_to_json(circuit): circ_json = [] - # Look into circuit.moments for noise matters + # Look into circuit.moments for noise matters + # when then get implemented in Qibo for gate in circuit.queue: circ_json.append(gate.to_json()) return circ_json @@ -50,6 +51,7 @@ def json_tocircuit(circuit, nqubits): if gate["name"] == "y": gatelist.append(gates.Y(gate["_target_qubits"][0])) + nqubits = max(max(gate.qubits) for gate in gatelist) + 1 new_circuit = Circuit(nqubits) new_circuit.add(gatelist) return new_circuit diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py index d94d90af1..b6201e62b 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/standard_rb.py @@ -230,7 +230,7 @@ def _acquisition( circuit = noise_model.apply(circuit) samples = circuit.execute(nshots=params.nshots).samples() # Every executed circuit gets a row where the data is stored. - data_list.append({"depth": depth, "samples": samples}) + data_list.append({"depth": depth, "circuit": circuit, "samples": samples}) # Build the data object which will be returned and later saved. data = pd.DataFrame(data_list) From 0fd4a46185c3bf0d31d6295dac7c252f6f48d3e4 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Mon, 25 Sep 2023 13:21:36 +0400 Subject: [PATCH 16/26] pre-commit --- .../protocols/characterization/randomized_benchmarking/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index df5e10f13..de93a4f6d 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -9,7 +9,7 @@ def circ_to_json(circuit): circ_json = [] - # Look into circuit.moments for noise matters + # Look into circuit.moments for noise matters # when then get implemented in Qibo for gate in circuit.queue: circ_json.append(gate.to_json()) From 126ce86743dbe7d16c0ac29130d09c2bf9da8a50 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Wed, 27 Sep 2023 18:47:50 +0400 Subject: [PATCH 17/26] 1st fixes --- .../clifford_filtered_rb.py | 129 ++++++++++-------- .../randomized_benchmarking/data.py | 9 +- 2 files changed, 79 insertions(+), 59 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index ccf86ed15..6bc319455 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -36,6 +36,11 @@ def save(self, path): self.filtered_data.to_json(path / RESULTSFILE, default_handler=str) self.fit_results.to_json(path / "results_fit.json", default_handler=str) + # FIXME: Load this properly + def load(self, path): + self.filtered_data = pd.read_json(path / RESULTSFILE) + self.fit_results = pd.read_json(path / "results_fit.json") + def filter_function(samples_list, circuit_list) -> list: """Calculates the filtered signal for every crosstalk irrep. @@ -215,6 +220,7 @@ def _acquisition( # data = pd.DataFrame(data_list) clifford_rb_data = RBData(data_list) + # TODO: They save noise model and noise params ... # Store the parameters to display them later. clifford_rb_data.attrs = params.__dict__ clifford_rb_data.attrs.setdefault("qubits", qubits) @@ -231,6 +237,7 @@ def _fit(data: RBData) -> CliffordRBResult: Returns: CliffordRBResult: Aggregated and processed data. """ + # Post-processing: compute the filter functions of each random circuit given samples irrep_signal = filter_function(data.samples.tolist(), data.circuit.tolist()) filtered_data = data.join(pd.DataFrame(irrep_signal, index=data.index)) @@ -326,6 +333,8 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], # TODO: If fit is None: loop to separate plotting for fitting in qq + # TODO: fit doesn't get loaded on acquisition tests + def crosstalk(q0, q1): p0 = fit.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] p1 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] @@ -334,66 +343,69 @@ def crosstalk(q0, q1): return None return p01 / (p0 * p1) - nqubits = int(np.log2(len(fit.fit_results.index))) - qubits = data.attrs.get("qubits", list(range(nqubits))) - if isinstance(qubits, dict): - qubits = [q.name for q in qubits.values()] - rb_params = {} fig_list = [] - for kk, irrep_key in enumerate(fit.filtered_data.columns[3:]): - irrep_binary = np.binary_repr(kk, width=nqubits) - - popt, perr, error_bars = ( - fit.fit_results["fit_parameters"][irrep_key], - fit.fit_results["fit_uncertainties"][irrep_key], - fit.fit_results["error_bars"][irrep_key], - ) - label = "Fit: y=Ap^x
A: {}
p: {}".format( - number_to_str(popt[0], perr[0]), - number_to_str(popt[1], perr[1]), - ) - rb_params[f"Irrep {irrep_binary}"] = number_to_str(popt[1], perr[1]) - - fig_irrep = rb_figure( - fit.filtered_data, - model=lambda x: exp1_func(x, *popt), - fit_label=label, - signal_label=irrep_key, - error_bars=error_bars, - legend=dict(yanchor="bottom", y=1.02, xanchor="right", x=1), - title=dict(text=irrep_binary), - ) - fig_list.append(fig_irrep) - result_fig = [carousel(fig_list)] - - if nqubits > 1: - crosstalk_heatmap = np.array( - [ - [crosstalk(i, j) if i > j else np.nan for j in range(nqubits)] - for i in range(nqubits) - ] - ) - np.fill_diagonal(crosstalk_heatmap, 1) - crosstalk_fig = px.imshow( - crosstalk_heatmap, - zmin=np.nanmin(crosstalk_heatmap, initial=0), - zmax=np.nanmax(crosstalk_heatmap), - ) - crosstalk_fig.update_layout( - plot_bgcolor="rgba(0, 0, 0, 0)", - xaxis=dict( - showgrid=False, - tickvals=list(range(nqubits)), - ticktext=qubits, - ), - yaxis=dict( - showgrid=False, - tickvals=list(range(nqubits)), - ticktext=qubits, - ), - ) - result_fig.append(crosstalk_fig) + result_fig = go.Figure() + table_str = "" + if fit: + nqubits = int(np.log2(len(fit.fit_results.index))) + qubits = data.attrs.get("qubits", list(range(nqubits))) + if isinstance(qubits, dict): + qubits = [q.name for q in qubits.values()] + + for kk, irrep_key in enumerate(fit.filtered_data.columns[3:]): + irrep_binary = np.binary_repr(kk, width=nqubits) + + popt, perr, error_bars = ( + fit.fit_results["fit_parameters"][irrep_key], + fit.fit_results["fit_uncertainties"][irrep_key], + fit.fit_results["error_bars"][irrep_key], + ) + label = "Fit: y=Ap^x
A: {}
p: {}".format( + number_to_str(popt[0], perr[0]), + number_to_str(popt[1], perr[1]), + ) + rb_params[f"Irrep {irrep_binary}"] = number_to_str(popt[1], perr[1]) + + fig_irrep = rb_figure( + fit.filtered_data, + model=lambda x: exp1_func(x, *popt), + fit_label=label, + signal_label=irrep_key, + error_bars=error_bars, + legend=dict(yanchor="bottom", y=1.02, xanchor="right", x=1), + title=dict(text=irrep_binary), + ) + fig_list.append(fig_irrep) + result_fig = [carousel(fig_list)] + + if nqubits > 1: + crosstalk_heatmap = np.array( + [ + [crosstalk(i, j) if i > j else np.nan for j in range(nqubits)] + for i in range(nqubits) + ] + ) + np.fill_diagonal(crosstalk_heatmap, 1) + crosstalk_fig = px.imshow( + crosstalk_heatmap, + zmin=np.nanmin(crosstalk_heatmap, initial=0), + zmax=np.nanmax(crosstalk_heatmap), + ) + crosstalk_fig.update_layout( + plot_bgcolor="rgba(0, 0, 0, 0)", + xaxis=dict( + showgrid=False, + tickvals=list(range(nqubits)), + ticktext=qubits, + ), + yaxis=dict( + showgrid=False, + tickvals=list(range(nqubits)), + ticktext=qubits, + ), + ) + result_fig.append(crosstalk_fig) meta_data = deepcopy(data.attrs) meta_data.pop("depths", None) @@ -406,6 +418,7 @@ def crosstalk(q0, q1): table_str = "".join( [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] ) + return result_fig, table_str diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py index de93a4f6d..628a6969e 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/data.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/data.py @@ -1,5 +1,6 @@ import json +import numpy as np import pandas as pd from qibo import gates from qibo.models import Circuit @@ -51,7 +52,10 @@ def json_tocircuit(circuit, nqubits): if gate["name"] == "y": gatelist.append(gates.Y(gate["_target_qubits"][0])) - nqubits = max(max(gate.qubits) for gate in gatelist) + 1 + if gatelist: + nqubits = max(max(gate.qubits) for gate in gatelist) + 1 + else: + nqubits = max(gate["_target_qubits"]) new_circuit = Circuit(nqubits) new_circuit.add(gatelist) return new_circuit @@ -73,12 +77,15 @@ def save(self, path): # When loading add inverse gate or measurament if needed. # I skipped them as they may not be needed. + # TODO: Store and load noise model and noise params @classmethod def load(cls, path): new_data = cls(pd.read_json(path / DATAFILE)) + new_data.samples = np.array(new_data.samples) nqubits = len(new_data.samples[0][0]) for index, circuit in enumerate(new_data.circuit): new_data.at[index, "circuit"] = json_tocircuit(circuit, nqubits) + new_data.at[index, "samples"] = np.array(new_data.samples[index]) return new_data From 7767ebb8718e3deb2f9408aa2b261dffdf491ff3 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 28 Sep 2023 12:38:30 +0400 Subject: [PATCH 18/26] pufff --- .../clifford_filtered_rb.py | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 6bc319455..50acfd698 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -1,4 +1,3 @@ -from copy import deepcopy from dataclasses import dataclass from itertools import product from typing import Iterable, Union @@ -37,9 +36,10 @@ def save(self, path): self.fit_results.to_json(path / "results_fit.json", default_handler=str) # FIXME: Load this properly - def load(self, path): - self.filtered_data = pd.read_json(path / RESULTSFILE) - self.fit_results = pd.read_json(path / "results_fit.json") + @classmethod + def load(cls, path): + cls.filtered_data = pd.read_json(path / RESULTSFILE) + cls.fit_results = pd.read_json(path / "results_fit.json") def filter_function(samples_list, circuit_list) -> list: @@ -345,8 +345,8 @@ def crosstalk(q0, q1): rb_params = {} fig_list = [] - result_fig = go.Figure() - table_str = "" + result_fig = [go.Figure()] + table_str = None if fit: nqubits = int(np.log2(len(fit.fit_results.index))) qubits = data.attrs.get("qubits", list(range(nqubits))) @@ -407,17 +407,18 @@ def crosstalk(q0, q1): ) result_fig.append(crosstalk_fig) - meta_data = deepcopy(data.attrs) - meta_data.pop("depths", None) - if not meta_data["noise_model"]: - meta_data.pop("noise_model") - meta_data.pop("noise_params") - elif meta_data.get("noise_params", None) is not None: - meta_data["noise_params"] = np.round(meta_data["noise_params"], 3) - - table_str = "".join( - [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] - ) + # TODO: This mess as well ... + # meta_data = deepcopy(data.attrs) + # meta_data.pop("depths", None) + # if not meta_data["noise_model"]: + # meta_data.pop("noise_model") + # meta_data.pop("noise_params") + # elif meta_data.get("noise_params", None) is not None: + # meta_data["noise_params"] = np.round(meta_data["noise_params"], 3) + + # table_str = "".join( + # [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] + # ) return result_fig, table_str From af686e20307ca7b84755870aca2f247f3559d59b Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 28 Sep 2023 16:43:35 +0400 Subject: [PATCH 19/26] poetry --- poetry.lock | 798 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 406 insertions(+), 394 deletions(-) diff --git a/poetry.lock b/poetry.lock index ba6c7d79e..58acbd205 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.5.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 = "absl-py" -version = "1.4.0" +version = "2.0.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "absl-py-1.4.0.tar.gz", hash = "sha256:d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d"}, - {file = "absl_py-1.4.0-py3-none-any.whl", hash = "sha256:0d3fe606adfa4f7db64792dd4c7aee4ee0c38ab75dfd353b7a83ed3e957fcb47"}, + {file = "absl-py-2.0.0.tar.gz", hash = "sha256:d9690211c5fcfefcdd1a45470ac2b5c5acd45241c3af71eed96bc5441746c0d5"}, + {file = "absl_py-2.0.0-py3-none-any.whl", hash = "sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3"}, ] [[package]] @@ -67,13 +67,13 @@ test = ["coverage", "pytest", "pytest-cov"] [[package]] name = "astroid" -version = "2.15.6" +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.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, - {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -116,6 +116,24 @@ files = [ six = ">=1.6.1,<2.0" wheel = ">=0.23.0,<1.0" +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + [[package]] name = "babel" version = "2.12.1" @@ -338,59 +356,72 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "contourpy" -version = "1.1.0" +version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.8" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, -] - -[package.dependencies] -numpy = ">=1.16" + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, +] + +[package.dependencies] +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "wurlitzer"] @@ -583,13 +614,13 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "docutils" -version = "0.17.1" +version = "0.19" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" files = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, + {file = "docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc"}, + {file = "docutils-0.19.tar.gz", hash = "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6"}, ] [[package]] @@ -637,21 +668,19 @@ pyrepl = ">=0.8.2" [[package]] name = "filelock" -version = "3.12.3" +version = "3.12.4" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.12.3-py3-none-any.whl", hash = "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb"}, - {file = "filelock-3.12.3.tar.gz", hash = "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d"}, + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.11\""} - [package.extras] docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "flask" @@ -745,13 +774,13 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] name = "fsspec" -version = "2023.9.0" +version = "2023.9.2" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2023.9.0-py3-none-any.whl", hash = "sha256:d55b9ab2a4c1f2b759888ae9f93e40c2aa72c0808132e87e282b549f9e6c4254"}, - {file = "fsspec-2023.9.0.tar.gz", hash = "sha256:4dbf0fefee035b7c6d3bbbe6bc99b2f201f40d4dca95b67c2b719be77bcd917f"}, + {file = "fsspec-2023.9.2-py3-none-any.whl", hash = "sha256:603dbc52c75b84da501b9b2ec8c11e1f61c25984c4a0dda1f129ef391fbfc9b4"}, + {file = "fsspec-2023.9.2.tar.gz", hash = "sha256:80bfb8c70cc27b2178cc62a935ecf242fc6e8c3fb801f9c571fc01b1e715ba7d"}, ] [package.extras] @@ -818,27 +847,27 @@ files = [ [[package]] name = "google-auth" -version = "2.17.3" +version = "2.23.1" description = "Google Authentication Library" optional = true -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.7" files = [ - {file = "google-auth-2.17.3.tar.gz", hash = "sha256:ce311e2bc58b130fddf316df57c9b3943c2a7b4f6ec31de9663a9333e4064efc"}, - {file = "google_auth-2.17.3-py2.py3-none-any.whl", hash = "sha256:f586b274d3eb7bd932ea424b1c702a30e0393a2e2bc4ca3eae8263ffd8be229f"}, + {file = "google-auth-2.23.1.tar.gz", hash = "sha256:d38bdf4fa1e7c5a35e574861bce55784fd08afadb4e48f99f284f1e487ce702d"}, + {file = "google_auth-2.23.1-py2.py3-none-any.whl", hash = "sha256:9800802266366a2a87890fb2d04923fc0c0d4368af0b86db18edd94a62386ea1"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" +rsa = ">=3.1.4,<5" +urllib3 = ">=2.0.5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +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.0dev)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-oauthlib" @@ -965,13 +994,13 @@ numpy = ">=1.17.3" [[package]] name = "huggingface-hub" -version = "0.17.1" +version = "0.17.3" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.17.1-py3-none-any.whl", hash = "sha256:7a9dc262a2e0ecf8c1749c8b9a7510a7a22981849f561af4345942d421822451"}, - {file = "huggingface_hub-0.17.1.tar.gz", hash = "sha256:dd828d2a24ee6af86392042cc1052c482c053eb574864669f0cae4d29620e62c"}, + {file = "huggingface_hub-0.17.3-py3-none-any.whl", hash = "sha256:545eb3665f6ac587add946e73984148f2ea5c7877eac2e845549730570c1933a"}, + {file = "huggingface_hub-0.17.3.tar.gz", hash = "sha256:40439632b211311f788964602bf8b0d9d6b7a2314fba4e8d67b2ce3ecea0e3fd"}, ] [package.dependencies] @@ -1053,21 +1082,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [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 (>=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"] +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" @@ -1565,58 +1594,39 @@ files = [ [[package]] name = "matplotlib" -version = "3.7.3" +version = "3.8.0" description = "Python plotting package" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, - {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, - {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, - {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, - {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, - {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, - {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, - {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, - {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, - {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, - {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, + {file = "matplotlib-3.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c4940bad88a932ddc69734274f6fb047207e008389489f2b6f77d9ca485f0e7a"}, + {file = "matplotlib-3.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a33bd3045c7452ca1fa65676d88ba940867880e13e2546abb143035fa9072a9d"}, + {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea6886e93401c22e534bbfd39201ce8931b75502895cfb115cbdbbe2d31f287"}, + {file = "matplotlib-3.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d670b9348e712ec176de225d425f150dc8e37b13010d85233c539b547da0be39"}, + {file = "matplotlib-3.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b37b74f00c4cb6af908cb9a00779d97d294e89fd2145ad43f0cdc23f635760c"}, + {file = "matplotlib-3.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:0e723f5b96f3cd4aad99103dc93e9e3cdc4f18afdcc76951f4857b46f8e39d2d"}, + {file = "matplotlib-3.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5dc945a9cb2deb7d197ba23eb4c210e591d52d77bf0ba27c35fc82dec9fa78d4"}, + {file = "matplotlib-3.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b5a1bf27d078453aa7b5b27f52580e16360d02df6d3dc9504f3d2ce11f6309"}, + {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f25ffb6ad972cdffa7df8e5be4b1e3cadd2f8d43fc72085feb1518006178394"}, + {file = "matplotlib-3.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee482731c8c17d86d9ddb5194d38621f9b0f0d53c99006275a12523ab021732"}, + {file = "matplotlib-3.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:36eafe2128772195b373e1242df28d1b7ec6c04c15b090b8d9e335d55a323900"}, + {file = "matplotlib-3.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:061ee58facb3580cd2d046a6d227fb77e9295599c5ec6ad069f06b5821ad1cfc"}, + {file = "matplotlib-3.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3cc3776836d0f4f22654a7f2d2ec2004618d5cf86b7185318381f73b80fd8a2d"}, + {file = "matplotlib-3.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c49a2bd6981264bddcb8c317b6bd25febcece9e2ebfcbc34e7f4c0c867c09dc"}, + {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ed11654fc83cd6cfdf6170b453e437674a050a452133a064d47f2f1371f8d3"}, + {file = "matplotlib-3.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae97fdd6996b3a25da8ee43e3fc734fff502f396801063c6b76c20b56683196"}, + {file = "matplotlib-3.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:87df75f528020a6299f76a1d986c0ed4406e3b2bd44bc5e306e46bca7d45e53e"}, + {file = "matplotlib-3.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:90d74a95fe055f73a6cd737beecc1b81c26f2893b7a3751d52b53ff06ca53f36"}, + {file = "matplotlib-3.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c3499c312f5def8f362a2bf761d04fa2d452b333f3a9a3f58805273719bf20d9"}, + {file = "matplotlib-3.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31e793c8bd4ea268cc5d3a695c27b30650ec35238626961d73085d5e94b6ab68"}, + {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d5ee602ef517a89d1f2c508ca189cfc395dd0b4a08284fb1b97a78eec354644"}, + {file = "matplotlib-3.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5de39dc61ca35342cf409e031f70f18219f2c48380d3886c1cf5ad9f17898e06"}, + {file = "matplotlib-3.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dd386c80a98b5f51571b9484bf6c6976de383cd2a8cd972b6a9562d85c6d2087"}, + {file = "matplotlib-3.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f691b4ef47c7384d0936b2e8ebdeb5d526c81d004ad9403dfb9d4c76b9979a93"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0b11f354aae62a2aa53ec5bb09946f5f06fc41793e351a04ff60223ea9162955"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f54b9fb87ca5acbcdd0f286021bedc162e1425fa5555ebf3b3dfc167b955ad9"}, + {file = "matplotlib-3.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:60a6e04dfd77c0d3bcfee61c3cd335fff1b917c2f303b32524cd1235e194ef99"}, + {file = "matplotlib-3.8.0.tar.gz", hash = "sha256:df8505e1c19d5c2c26aff3497a7cbd3ccfc2e97043d1e4db3e76afa399164b69"}, ] [package.dependencies] @@ -1625,7 +1635,7 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.0.1" -numpy = ">=1.20,<2" +numpy = ">=1.21,<2" packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.3.1" @@ -1685,8 +1695,8 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.21.2", markers = "python_version > \"3.9\" and python_version <= \"3.10\""}, {version = ">1.20", markers = "python_version <= \"3.9\""}, - {version = ">=1.21.2", markers = "python_version > \"3.9\""}, {version = ">=1.23.3", markers = "python_version > \"3.10\""}, ] @@ -1723,13 +1733,13 @@ tests = ["pytest (>=4.6)"] [[package]] name = "nest-asyncio" -version = "1.5.7" +version = "1.5.8" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, + {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"}, + {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"}, ] [[package]] @@ -1907,35 +1917,35 @@ protobuf = "*" [[package]] name = "onnxruntime" -version = "1.15.1" +version = "1.16.0" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = true python-versions = "*" files = [ - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baad59e6a763237fa39545325d29c16f98b8a45d2dfc524c67631e2e3ba44d16"}, - {file = "onnxruntime-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:568c2db848f619a0a93e843c028e9fb4879929d40b04bd60f9ba6eb8d2e93421"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69088d7784bb04dedfd9e883e2c96e4adf8ae0451acdd0abb78d68f59ecc6d9d"}, - {file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cef43737b2cd886d5d718d100f56ec78c9c476c5db5f8f946e95024978fe754"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win32.whl", hash = "sha256:79d7e65abb44a47c633ede8e53fe7b9756c272efaf169758c482c983cca98d7e"}, - {file = "onnxruntime-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:8bc4c47682933a7a2c79808688aad5f12581305e182be552de50783b5438e6bd"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:652b2cb777f76446e3cc41072dd3d1585a6388aeff92b9de656724bc22e241e4"}, - {file = "onnxruntime-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89b86dbed15740abc385055a29c9673a212600248d702737ce856515bdeddc88"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5cdd9ee748149a57f4cdfa67187a0d68f75240645a3c688299dcd08742cc98"}, - {file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f748cce6a70ed38c19658615c55f4eedb9192765a4e9c4bd2682adfe980698d"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win32.whl", hash = "sha256:e0312046e814c40066e7823da58075992d51364cbe739eeeb2345ec440c3ac59"}, - {file = "onnxruntime-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:f0980969689cb956c22bd1318b271e1be260060b37f3ddd82c7d63bd7f2d9a79"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:345986cfdbd6f4b20a89b6a6cd9abd3e2ced2926ae0b6e91fefa8149f95c0f09"}, - {file = "onnxruntime-1.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d7b3ad75e040f1e95757f69826a11051737b31584938a26d466a0234c6de98"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3603d07b829bcc1c14963a76103e257aade8861eb208173b300cc26e118ec2f8"}, - {file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3df0625b9295daf1f7409ea55f72e1eeb38d54f5769add53372e79ddc3cf98d"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win32.whl", hash = "sha256:f68b47fdf1a0406c0292f81ac993e2a2ae3e8b166b436d590eb221f64e8e187a"}, - {file = "onnxruntime-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:52d762d297cc3f731f54fa65a3e329b813164970671547bef6414d0ed52765c9"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:99228f9f03dc1fc8af89a28c9f942e8bd3e97e894e263abe1a32e4ddb1f6363b"}, - {file = "onnxruntime-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:45db7f96febb0cf23e3af147f35c4f8de1a37dd252d1cef853c242c2780250cd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bafc112a36db25c821b90ab747644041cb4218f6575889775a2c12dd958b8c3"}, - {file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:985693d18f2d46aa34fd44d7f65ff620660b2c8fa4b8ec365c2ca353f0fbdb27"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win32.whl", hash = "sha256:708eb31b0c04724bf0f01c1309a9e69bbc09b85beb750e5662c8aed29f1ff9fd"}, - {file = "onnxruntime-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:73d6de4c42dfde1e9dbea04773e6dc23346c8cda9c7e08c6554fafc97ac60138"}, + {file = "onnxruntime-1.16.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:69c86ba3d90c166944c4a3c8a5b2a24a7bc45e68ae5997d83279af21ffd0f5f3"}, + {file = "onnxruntime-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:604a46aa2ad6a51f2fc4df1a984ea571a43aa02424aea93464c32ce02d23b3bb"}, + {file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40660516b382031279fb690fc3d068ad004173c2bd12bbdc0bd0fe01ef8b7c3"}, + {file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349fd9c7875c1a76609d45b079484f8059adfb1fb87a30506934fb667ceab249"}, + {file = "onnxruntime-1.16.0-cp310-cp310-win32.whl", hash = "sha256:22c9e2f1a1f15b41b01195cd2520c013c22228efc4795ae4118048ea4118aad2"}, + {file = "onnxruntime-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:b9667a131abfd226a728cc1c1ecf5cc5afa4fff37422f95a84bc22f7c175b57f"}, + {file = "onnxruntime-1.16.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:f7b292726a1f3fa4a483d7e902da083a5889a86a860dbc3a6479988cad342578"}, + {file = "onnxruntime-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61eaf288a2482c5561f620fb686c80c32709e92724bbb59a5e4a0d349429e205"}, + {file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe2239d5821d5501eecccfe5c408485591b5d73eb76a61491a8f78179c2e65a"}, + {file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a4924604fcdf1704b7f7e087b4c0b0e181c58367a687da55b1aec2705631943"}, + {file = "onnxruntime-1.16.0-cp311-cp311-win32.whl", hash = "sha256:55d8456f1ab28c32aec9c478b7638ed145102b03bb9b719b79e065ffc5de9c72"}, + {file = "onnxruntime-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:c2a53ffd456187028c841ac7ed0d83b4c2b7e48bd2b1cf2a42d253ecf1e97cb3"}, + {file = "onnxruntime-1.16.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:bf5769aa4095cfe2503307867fa95b5f73732909ee21b67fe24da443af445925"}, + {file = "onnxruntime-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0974deadf11ddab201d915a10517be00fa9d6816def56fa374e4c1a0008985a"}, + {file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99dccf1d2eba5ecd7b6c0e8e80d92d0030291f3506726c156e018a4d7a187c6f"}, + {file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0170ed05d3a8a7c24fe01fc262a6bc603837751f3bb273df7006a2da73f37fff"}, + {file = "onnxruntime-1.16.0-cp38-cp38-win32.whl", hash = "sha256:5ecd38e98ccdcbbaa7e529e96852f4c1c136559802354b76378d9a19532018ee"}, + {file = "onnxruntime-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c585c60e9541a9bd4fb319ba9a3ef6122a28dcf4f3dbcdf014df44570cad6f8"}, + {file = "onnxruntime-1.16.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:efe59c1e51ad647fb18860233f5971e309961d09ca10697170ef9b7d9fa728f4"}, + {file = "onnxruntime-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e3c9a9cccab8f6512a0c0207b2816dd8864f2f720f6e9df5cf01e30c4f80194f"}, + {file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf16a252308ec6e0737db7028b63fed0ac28fbad134f86216c0dfb051a31f38"}, + {file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f533aa90ee7189e88b6b612d6adae7d290971090598cfd47ce034ab0d106fc9c"}, + {file = "onnxruntime-1.16.0-cp39-cp39-win32.whl", hash = "sha256:306c7f5d8a0c24c65afb34f7deb0bc526defde2249e53538f1dce083945a2d6e"}, + {file = "onnxruntime-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:df8a00a7b057ba497e2822175cc68731d84b89a6d50a3a2a3ec51e98e9c91125"}, ] [package.dependencies] @@ -2014,7 +2024,7 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.1" @@ -2085,65 +2095,65 @@ files = [ [[package]] name = "pillow" -version = "10.0.0" +version = "10.0.1" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "Pillow-10.0.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:8f06be50669087250f319b706decf69ca71fdecd829091a37cc89398ca4dc17a"}, + {file = "Pillow-10.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50bd5f1ebafe9362ad622072a1d2f5850ecfa44303531ff14353a4059113b12d"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6a90167bcca1216606223a05e2cf991bb25b14695c518bc65639463d7db722d"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f11c9102c56ffb9ca87134bd025a43d2aba3f1155f508eff88f694b33a9c6d19"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:186f7e04248103482ea6354af6d5bcedb62941ee08f7f788a1c7707bc720c66f"}, + {file = "Pillow-10.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0462b1496505a3462d0f35dc1c4d7b54069747d65d00ef48e736acda2c8cbdff"}, + {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d889b53ae2f030f756e61a7bff13684dcd77e9af8b10c6048fb2c559d6ed6eaf"}, + {file = "Pillow-10.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:552912dbca585b74d75279a7570dd29fa43b6d93594abb494ebb31ac19ace6bd"}, + {file = "Pillow-10.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:787bb0169d2385a798888e1122c980c6eff26bf941a8ea79747d35d8f9210ca0"}, + {file = "Pillow-10.0.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fd2a5403a75b54661182b75ec6132437a181209b901446ee5724b589af8edef1"}, + {file = "Pillow-10.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d7e91b4379f7a76b31c2dda84ab9e20c6220488e50f7822e59dac36b0cd92b1"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e9adb3f22d4c416e7cd79b01375b17159d6990003633ff1d8377e21b7f1b21"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93139acd8109edcdeffd85e3af8ae7d88b258b3a1e13a038f542b79b6d255c54"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:92a23b0431941a33242b1f0ce6c88a952e09feeea9af4e8be48236a68ffe2205"}, + {file = "Pillow-10.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cbe68deb8580462ca0d9eb56a81912f59eb4542e1ef8f987405e35a0179f4ea2"}, + {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:522ff4ac3aaf839242c6f4e5b406634bfea002469656ae8358644fc6c4856a3b"}, + {file = "Pillow-10.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:84efb46e8d881bb06b35d1d541aa87f574b58e87f781cbba8d200daa835b42e1"}, + {file = "Pillow-10.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:898f1d306298ff40dc1b9ca24824f0488f6f039bc0e25cfb549d3195ffa17088"}, + {file = "Pillow-10.0.1-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:bcf1207e2f2385a576832af02702de104be71301c2696d0012b1b93fe34aaa5b"}, + {file = "Pillow-10.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d6c9049c6274c1bb565021367431ad04481ebb54872edecfcd6088d27edd6ed"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28444cb6ad49726127d6b340217f0627abc8732f1194fd5352dec5e6a0105635"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de596695a75496deb3b499c8c4f8e60376e0516e1a774e7bc046f0f48cd620ad"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2872f2d7846cf39b3dbff64bc1104cc48c76145854256451d33c5faa55c04d1a"}, + {file = "Pillow-10.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4ce90f8a24e1c15465048959f1e94309dfef93af272633e8f37361b824532e91"}, + {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ee7810cf7c83fa227ba9125de6084e5e8b08c59038a7b2c9045ef4dde61663b4"}, + {file = "Pillow-10.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1be1c872b9b5fcc229adeadbeb51422a9633abd847c0ff87dc4ef9bb184ae08"}, + {file = "Pillow-10.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:98533fd7fa764e5f85eebe56c8e4094db912ccbe6fbf3a58778d543cadd0db08"}, + {file = "Pillow-10.0.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:764d2c0daf9c4d40ad12fbc0abd5da3af7f8aa11daf87e4fa1b834000f4b6b0a"}, + {file = "Pillow-10.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcb59711009b0168d6ee0bd8fb5eb259c4ab1717b2f538bbf36bacf207ef7a68"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:697a06bdcedd473b35e50a7e7506b1d8ceb832dc238a336bd6f4f5aa91a4b500"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f665d1e6474af9f9da5e86c2a3a2d2d6204e04d5af9c06b9d42afa6ebde3f21"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:2fa6dd2661838c66f1a5473f3b49ab610c98a128fc08afbe81b91a1f0bf8c51d"}, + {file = "Pillow-10.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:3a04359f308ebee571a3127fdb1bd01f88ba6f6fb6d087f8dd2e0d9bff43f2a7"}, + {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:723bd25051454cea9990203405fa6b74e043ea76d4968166dfd2569b0210886a"}, + {file = "Pillow-10.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:71671503e3015da1b50bd18951e2f9daf5b6ffe36d16f1eb2c45711a301521a7"}, + {file = "Pillow-10.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:44e7e4587392953e5e251190a964675f61e4dae88d1e6edbe9f36d6243547ff3"}, + {file = "Pillow-10.0.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:3855447d98cced8670aaa63683808df905e956f00348732448b5a6df67ee5849"}, + {file = "Pillow-10.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed2d9c0704f2dc4fa980b99d565c0c9a543fe5101c25b3d60488b8ba80f0cce1"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5bb289bb835f9fe1a1e9300d011eef4d69661bb9b34d5e196e5e82c4cb09b37"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a0d3e54ab1df9df51b914b2233cf779a5a10dfd1ce339d0421748232cea9876"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:2cc6b86ece42a11f16f55fe8903595eff2b25e0358dec635d0a701ac9586588f"}, + {file = "Pillow-10.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ca26ba5767888c84bf5a0c1a32f069e8204ce8c21d00a49c90dabeba00ce0145"}, + {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f0b4b06da13275bc02adfeb82643c4a6385bd08d26f03068c2796f60d125f6f2"}, + {file = "Pillow-10.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc2e3069569ea9dbe88d6b8ea38f439a6aad8f6e7a6283a38edf61ddefb3a9bf"}, + {file = "Pillow-10.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8b451d6ead6e3500b6ce5c7916a43d8d8d25ad74b9102a629baccc0808c54971"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:32bec7423cdf25c9038fef614a853c9d25c07590e1a870ed471f47fb80b244db"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cf63d2c6928b51d35dfdbda6f2c1fddbe51a6bc4a9d4ee6ea0e11670dd981e"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f6d3d4c905e26354e8f9d82548475c46d8e0889538cb0657aa9c6f0872a37aa4"}, + {file = "Pillow-10.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:847e8d1017c741c735d3cd1883fa7b03ded4f825a6e5fcb9378fd813edee995f"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7f771e7219ff04b79e231d099c0a28ed83aa82af91fd5fa9fdb28f5b8d5addaf"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459307cacdd4138edee3875bbe22a2492519e060660eaf378ba3b405d1c66317"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b059ac2c4c7a97daafa7dc850b43b2d3667def858a4f112d1aa082e5c3d6cf7d"}, + {file = "Pillow-10.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6caf3cd38449ec3cd8a68b375e0c6fe4b6fd04edb6c9766b55ef84a6e8ddf2d"}, + {file = "Pillow-10.0.1.tar.gz", hash = "sha256:d72967b06be9300fed5cfbc8b5bafceec48bf7cdc7dab66b1d2549035287191d"}, ] [package.extras] @@ -2167,13 +2177,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "plotly" -version = "5.16.1" +version = "5.17.0" description = "An open-source, interactive data visualization library for Python" optional = false python-versions = ">=3.6" files = [ - {file = "plotly-5.16.1-py2.py3-none-any.whl", hash = "sha256:19cc34f339acd4e624177806c14df22f388f23fb70658b03aad959a0e650a0dc"}, - {file = "plotly-5.16.1.tar.gz", hash = "sha256:295ac25edeb18c893abb71dcadcea075b78fd6fdf07cee4217a4e1009667925b"}, + {file = "plotly-5.17.0-py2.py3-none-any.whl", hash = "sha256:7c84cdf11da162423da957bb093287134f2d6f170eb9a74f1459f825892247c3"}, + {file = "plotly-5.17.0.tar.gz", hash = "sha256:290d796bf7bab87aad184fe24b86096234c4c95dcca6ecbca02d02bdf17d3d97"}, ] [package.dependencies] @@ -2343,47 +2353,47 @@ pybtex = ">=0.16" [[package]] name = "pydantic" -version = "1.10.12" +version = "1.10.13" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] [package.dependencies] @@ -2423,17 +2433,17 @@ plugins = ["importlib-metadata"] [[package]] name = "pylint" -version = "2.17.5" +version = "2.17.6" description = "python code static checker" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.5-py3-none-any.whl", hash = "sha256:73995fb8216d3bed149c8d51bba25b2c52a8251a2c8ac846ec668ce38fab5413"}, - {file = "pylint-2.17.5.tar.gz", hash = "sha256:f7b601cbc06fef7e62a754e2b41294c2aa31f1cb659624b9a85bcba29eaf8252"}, + {file = "pylint-2.17.6-py3-none-any.whl", hash = "sha256:18a1412e873caf8ffb56b760ce1b5643675af23e6173a247b502406b24c716af"}, + {file = "pylint-2.17.6.tar.gz", hash = "sha256:be928cce5c76bf9acdc65ad01447a1e0b1a7bccffc609fb7fc40f2513045bd05"}, ] [package.dependencies] -astroid = ">=2.15.6,<=2.17.0-dev0" +astroid = ">=2.15.7,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -2589,7 +2599,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2597,15 +2606,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2622,7 +2624,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2630,7 +2631,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2638,23 +2638,27 @@ files = [ [[package]] name = "qibo" -version = "0.2.0" +version = "0.2.1" description = "A framework for quantum computing with hardware acceleration." optional = false python-versions = ">=3.8,<3.12" -files = [ - {file = "qibo-0.2.0-py3-none-any.whl", hash = "sha256:542c6f26de56e48a47a1e2ca56c382f426d5ddda8e9325d9fb821709b75e195b"}, - {file = "qibo-0.2.0.tar.gz", hash = "sha256:c497a9c115577c0e0c5c09ab2f55147675bd82384af4f186a65c9c7fa916b8bf"}, -] +files = [] +develop = true [package.dependencies] -cma = ">=3.3.0,<4.0.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" +joblib = "^1.2.0" +matplotlib = "^3.7.0" +psutil = "^5.9.4" +scipy = "^1.10.1" +sympy = "^1.11.1" +tabulate = "^0.9.0" + +[package.source] +type = "git" +url = "https://github.com/qiboteam/qibo.git" +reference = "master" +resolved_reference = "b85268991f26d75252f3cdbe9a781cce9881184e" [[package]] name = "qibolab" @@ -2764,37 +2768,37 @@ pyasn1 = ">=0.1.3" [[package]] name = "scikit-learn" -version = "1.3.0" +version = "1.3.1" description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, - {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, - {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, - {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, - {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, + {file = "scikit-learn-1.3.1.tar.gz", hash = "sha256:1a231cced3ee3fa04756b4a7ab532dc9417acd581a330adff5f2c01ac2831fcf"}, + {file = "scikit_learn-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3153612ff8d36fa4e35ef8b897167119213698ea78f3fd130b4068e6f8d2da5a"}, + {file = "scikit_learn-1.3.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6bb9490fdb8e7e00f1354621689187bef3cab289c9b869688f805bf724434755"}, + {file = "scikit_learn-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7135a03af71138669f19bc96e7d0cc8081aed4b3565cc3b131135d65fc642ba"}, + {file = "scikit_learn-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d8dee8c1f40eeba49a85fe378bdf70a07bb64aba1a08fda1e0f48d27edfc3e6"}, + {file = "scikit_learn-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:4d379f2b34096105a96bd857b88601dffe7389bd55750f6f29aaa37bc6272eb5"}, + {file = "scikit_learn-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14e8775eba072ab10866a7e0596bc9906873e22c4c370a651223372eb62de180"}, + {file = "scikit_learn-1.3.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:58b0c2490eff8355dc26e884487bf8edaccf2ba48d09b194fb2f3a026dd64f9d"}, + {file = "scikit_learn-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f66eddfda9d45dd6cadcd706b65669ce1df84b8549875691b1f403730bdef217"}, + {file = "scikit_learn-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6448c37741145b241eeac617028ba6ec2119e1339b1385c9720dae31367f2be"}, + {file = "scikit_learn-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c413c2c850241998168bbb3bd1bb59ff03b1195a53864f0b80ab092071af6028"}, + {file = "scikit_learn-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:52b77cc08bd555969ec5150788ed50276f5ef83abb72e6f469c5b91a0009bbca"}, + {file = "scikit_learn-1.3.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a683394bc3f80b7c312c27f9b14ebea7766b1f0a34faf1a2e9158d80e860ec26"}, + {file = "scikit_learn-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15d964d9eb181c79c190d3dbc2fff7338786bf017e9039571418a1d53dab236"}, + {file = "scikit_learn-1.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ce9233cdf0cdcf0858a5849d306490bf6de71fa7603a3835124e386e62f2311"}, + {file = "scikit_learn-1.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:1ec668ce003a5b3d12d020d2cde0abd64b262ac5f098b5c84cf9657deb9996a8"}, + {file = "scikit_learn-1.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccbbedae99325628c1d1cbe3916b7ef58a1ce949672d8d39c8b190e10219fd32"}, + {file = "scikit_learn-1.3.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:845f81c7ceb4ea6bac64ab1c9f2ce8bef0a84d0f21f3bece2126adcc213dfecd"}, + {file = "scikit_learn-1.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8454d57a22d856f1fbf3091bd86f9ebd4bff89088819886dc0c72f47a6c30652"}, + {file = "scikit_learn-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d993fb70a1d78c9798b8f2f28705bfbfcd546b661f9e2e67aa85f81052b9c53"}, + {file = "scikit_learn-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:66f7bb1fec37d65f4ef85953e1df5d3c98a0f0141d394dcdaead5a6de9170347"}, ] [package.dependencies] joblib = ">=1.1.1" -numpy = ">=1.17.3" +numpy = ">=1.17.3,<2.0" scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" @@ -2806,36 +2810,36 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.11.2" +version = "1.11.3" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = "<3.13,>=3.9" files = [ - {file = "scipy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b997a5369e2d30c97995dcb29d638701f8000d04df01b8e947f206e5d0ac788"}, - {file = "scipy-1.11.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:95763fbda1206bec41157582bea482f50eb3702c85fffcf6d24394b071c0e87a"}, - {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e367904a0fec76433bf3fbf3e85bf60dae8e9e585ffd21898ab1085a29a04d16"}, - {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d690e1ca993c8f7ede6d22e5637541217fc6a4d3f78b3672a6fe454dbb7eb9a7"}, - {file = "scipy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d2b813bfbe8dec6a75164523de650bad41f4405d35b0fa24c2c28ae07fcefb20"}, - {file = "scipy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:afdb0d983f6135d50770dd979df50bf1c7f58b5b33e0eb8cf5c73c70600eae1d"}, - {file = "scipy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d9886f44ef8c9e776cb7527fb01455bf4f4a46c455c4682edc2c2cc8cd78562"}, - {file = "scipy-1.11.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1342ca385c673208f32472830c10110a9dcd053cf0c4b7d4cd7026d0335a6c1d"}, - {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b133f237bd8ba73bad51bc12eb4f2d84cbec999753bf25ba58235e9fc2096d80"}, - {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aeb87661de987f8ec56fa6950863994cd427209158255a389fc5aea51fa7055"}, - {file = "scipy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90d3b1364e751d8214e325c371f0ee0dd38419268bf4888b2ae1040a6b266b2a"}, - {file = "scipy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:f73102f769ee06041a3aa26b5841359b1a93cc364ce45609657751795e8f4a4a"}, - {file = "scipy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa4909c6c20c3d91480533cddbc0e7c6d849e7d9ded692918c76ce5964997898"}, - {file = "scipy-1.11.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac74b1512d38718fb6a491c439aa7b3605b96b1ed3be6599c17d49d6c60fca18"}, - {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8425fa963a32936c9773ee3ce44a765d8ff67eed5f4ac81dc1e4a819a238ee9"}, - {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:542a757e2a6ec409e71df3d8fd20127afbbacb1c07990cb23c5870c13953d899"}, - {file = "scipy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea932570b1c2a30edafca922345854ff2cd20d43cd9123b6dacfdecebfc1a80b"}, - {file = "scipy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:4447ad057d7597476f9862ecbd9285bbf13ba9d73ce25acfa4e4b11c6801b4c9"}, - {file = "scipy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b0620240ef445b5ddde52460e6bc3483b7c9c750275369379e5f609a1050911c"}, - {file = "scipy-1.11.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f28f1f6cfeb48339c192efc6275749b2a25a7e49c4d8369a28b6591da02fbc9a"}, - {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:214cdf04bbae7a54784f8431f976704ed607c4bc69ba0d5d5d6a9df84374df76"}, - {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10eb6af2f751aa3424762948e5352f707b0dece77288206f227864ddf675aca0"}, - {file = "scipy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0f3261f14b767b316d7137c66cc4f33a80ea05841b9c87ad83a726205b901423"}, - {file = "scipy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:2c91cf049ffb5575917f2a01da1da082fd24ed48120d08a6e7297dfcac771dcd"}, - {file = "scipy-1.11.2.tar.gz", hash = "sha256:b29318a5e39bd200ca4381d80b065cdf3076c7d7281c5e36569e99273867f61d"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:370f569c57e1d888304052c18e58f4a927338eafdaef78613c685ca2ea0d1fa0"}, + {file = "scipy-1.11.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:9885e3e4f13b2bd44aaf2a1a6390a11add9f48d5295f7a592393ceb8991577a3"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04aa19acc324a1a076abb4035dabe9b64badb19f76ad9c798bde39d41025cdc"}, + {file = "scipy-1.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1a8a4657673bfae1e05e1e1d6e94b0cabe5ed0c7c144c8aa7b7dbb774ce5c1"}, + {file = "scipy-1.11.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7abda0e62ef00cde826d441485e2e32fe737bdddee3324e35c0e01dee65e2a88"}, + {file = "scipy-1.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:033c3fd95d55012dd1148b201b72ae854d5086d25e7c316ec9850de4fe776929"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:925c6f09d0053b1c0f90b2d92d03b261e889b20d1c9b08a3a51f61afc5f58165"}, + {file = "scipy-1.11.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5664e364f90be8219283eeb844323ff8cd79d7acbd64e15eb9c46b9bc7f6a42a"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f325434b6424952fbb636506f0567898dca7b0f7654d48f1c382ea338ce9a3"}, + {file = "scipy-1.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f290cf561a4b4edfe8d1001ee4be6da60c1c4ea712985b58bf6bc62badee221"}, + {file = "scipy-1.11.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:91770cb3b1e81ae19463b3c235bf1e0e330767dca9eb4cd73ba3ded6c4151e4d"}, + {file = "scipy-1.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1f97cd89c0fe1a0685f8f89d85fa305deb3067d0668151571ba50913e445820"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dfcc1552add7cb7c13fb70efcb2389d0624d571aaf2c80b04117e2755a0c5d15"}, + {file = "scipy-1.11.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0d3a136ae1ff0883fffbb1b05b0b2fea251cb1046a5077d0b435a1839b3e52b7"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bae66a2d7d5768eaa33008fa5a974389f167183c87bf39160d3fefe6664f8ddc"}, + {file = "scipy-1.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2f6dee6cbb0e263b8142ed587bc93e3ed5e777f1f75448d24fb923d9fd4dce6"}, + {file = "scipy-1.11.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:74e89dc5e00201e71dd94f5f382ab1c6a9f3ff806c7d24e4e90928bb1aafb280"}, + {file = "scipy-1.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:90271dbde4be191522b3903fc97334e3956d7cfb9cce3f0718d0ab4fd7d8bfd6"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83"}, + {file = "scipy-1.11.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917"}, + {file = "scipy-1.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c77da50c9a91e23beb63c2a711ef9e9ca9a2060442757dffee34ea41847d8156"}, + {file = "scipy-1.11.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:15f237e890c24aef6891c7d008f9ff7e758c6ef39a2b5df264650eb7900403c0"}, + {file = "scipy-1.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:4b4bb134c7aa457e26cc6ea482b016fef45db71417d55cc6d8f43d799cdf9ef2"}, + {file = "scipy-1.11.3.tar.gz", hash = "sha256:bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd"}, ] [package.dependencies] @@ -2885,24 +2889,25 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "setuptools-scm" -version = "7.1.0" +version = "8.0.3" description = "the blessed package to manage your versions by scm tags" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools_scm-7.1.0-py3-none-any.whl", hash = "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e"}, - {file = "setuptools_scm-7.1.0.tar.gz", hash = "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"}, + {file = "setuptools-scm-8.0.3.tar.gz", hash = "sha256:0169fd70197efda2f8c4d0b2a7a3d614431b488116f37b79d031e9e7ec884d8c"}, + {file = "setuptools_scm-8.0.3-py3-none-any.whl", hash = "sha256:813822234453438a13c78d05c8af29918fbc06f88efb33d38f065340bbb48c39"}, ] [package.dependencies] -packaging = ">=20.0" +packaging = ">=20" setuptools = "*" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} -typing-extensions = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["pytest", "rich", "virtualenv (>20)"] [[package]] name = "six" @@ -3079,21 +3084,21 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-bibtex" -version = "2.6.1" +version = "2.5.0" description = "Sphinx extension for BibTeX style citations." optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "sphinxcontrib-bibtex-2.6.1.tar.gz", hash = "sha256:046b49f070ae5276af34c1b8ddb9bc9562ef6de2f7a52d37a91cb8e53f54b863"}, - {file = "sphinxcontrib_bibtex-2.6.1-py3-none-any.whl", hash = "sha256:094c772098fe6b030cda8618c45722b2957cad0c04f328ba2b154aa08dfe720a"}, + {file = "sphinxcontrib-bibtex-2.5.0.tar.gz", hash = "sha256:71b42e5db0e2e284f243875326bf9936aa9a763282277d75048826fef5b00eaa"}, + {file = "sphinxcontrib_bibtex-2.5.0-py3-none-any.whl", hash = "sha256:748f726eaca6efff7731012103417ef130ecdcc09501b4d0c54283bf5f059f76"}, ] [package.dependencies] -docutils = ">=0.8,<0.18.dev0 || >=0.20.dev0" +docutils = ">=0.8" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} pybtex = ">=0.24" pybtex-docutils = ">=1.0.0" -Sphinx = ">=3.5" +Sphinx = ">=2.1" [[package]] name = "sphinxcontrib-devhelp" @@ -3244,12 +3249,12 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "tensorboard" -version = "2.14.0" +version = "2.14.1" description = "TensorBoard lets you watch Tensors Flow" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "tensorboard-2.14.0-py3-none-any.whl", hash = "sha256:3667f9745d99280836ad673022362c840f60ed8fefd5a3e30bf071f5a8fd0017"}, + {file = "tensorboard-2.14.1-py3-none-any.whl", hash = "sha256:3db108fb58f023b6439880e177743c5f1e703e9eeb5fb7d597871f949f85fd58"}, ] [package.dependencies] @@ -3262,9 +3267,9 @@ numpy = ">=1.12.0" protobuf = ">=3.19.6" 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" -wheel = ">=0.26" [[package]] name = "tensorboard-data-server" @@ -3280,26 +3285,26 @@ files = [ [[package]] name = "tensorflow" -version = "2.14.0rc1" +version = "2.14.0" description = "TensorFlow is an open source machine learning framework for everyone." optional = true python-versions = ">=3.9" files = [ - {file = "tensorflow-2.14.0rc1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:7367acf391f9082911e2cfb4c2e250e9d18e84c79f9421ff41f8e376a10b7d54"}, - {file = "tensorflow-2.14.0rc1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:86a31a945304932d2f5e1b57aa38bfa53250f07047a8464bd7011f6881bb07f9"}, - {file = "tensorflow-2.14.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d27ccadc975c7006437e7f85ae30893f810827f7571b5476e16eb7c5f41a54"}, - {file = "tensorflow-2.14.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:522f7b4118dc9fd562ca8501c9a015a2a3ae50e6994d2395c6efdec64f74b107"}, - {file = "tensorflow-2.14.0rc1-cp310-cp310-win_amd64.whl", hash = "sha256:63e2846950eee4fb2abfc7fe420bf4f730694ca54086bfbfcdf27f1576efc670"}, - {file = "tensorflow-2.14.0rc1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:3336d3eb34f44ed26d53adaf95e80816a6baca9e5e3a8dbdf8bdd24b711a87b3"}, - {file = "tensorflow-2.14.0rc1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:79ff90bb72755e1d9e45aba4552cdf5341cfaedb16d063e3375c587964b35767"}, - {file = "tensorflow-2.14.0rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9993b94860cb712909218c78aa5383487c879a31f18a86fd8f08f38c85413b3"}, - {file = "tensorflow-2.14.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:467ffce032c94025998fe126fd7a2a57c5afe7f0359961be874a3ad54d8947ac"}, - {file = "tensorflow-2.14.0rc1-cp311-cp311-win_amd64.whl", hash = "sha256:41172d5d2c659afb0682b2cb8d167a4e6d33501dc733546ae4aaf9554ef43475"}, - {file = "tensorflow-2.14.0rc1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:c63d59c9d16ae17bd19957796479365a934a0f1b399011dc16186df80d182947"}, - {file = "tensorflow-2.14.0rc1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:cf40096373e678666c09e78b78b13149d4a724f4e03aa875fc9cb6074cf11b89"}, - {file = "tensorflow-2.14.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706a3cfd35080773f99137ba927530cf525cba729808d10802453ed0048b94e0"}, - {file = "tensorflow-2.14.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:808c61c0d166161e59dc529b9a89d1288368d1e9e2246ea28f9fbc8f1d90e2d0"}, - {file = "tensorflow-2.14.0rc1-cp39-cp39-win_amd64.whl", hash = "sha256:adca1d48c11508bb88e6c45ec9f777dd7aab92d4fb6a7c3d37fec7aeef77a930"}, + {file = "tensorflow-2.14.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:318b21b18312df6d11f511d0f205d55809d9ad0f46d5f9c13d8325ce4fe3b159"}, + {file = "tensorflow-2.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:927868c9bd4b3d2026ac77ec65352226a9f25e2d24ec3c7d088c68cff7583c9b"}, + {file = "tensorflow-2.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3870063433aebbd1b8da65ed4dcb09495f9239397f8cb5a8822025b6bb65e04"}, + {file = "tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c9c1101269efcdb63492b45c8e83df0fc30c4454260a252d507dfeaebdf77ff"}, + {file = "tensorflow-2.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:0b7eaab5e034f1695dc968f7be52ce7ccae4621182d1e2bf6d5b3fab583be98c"}, + {file = "tensorflow-2.14.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:00c42e7d8280c660b10cf5d0b3164fdc5e38fd0bf16b3f9963b7cd0e546346d8"}, + {file = "tensorflow-2.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c92f5526c2029d31a036be06eb229c71f1c1821472876d34d0184d19908e318c"}, + {file = "tensorflow-2.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c224c076160ef9f60284e88f59df2bed347d55e64a0ca157f30f9ca57e8495b0"}, + {file = "tensorflow-2.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80cabe6ab5f44280c05533e5b4a08e5b128f0d68d112564cffa3b96638e28aa"}, + {file = "tensorflow-2.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:0587ece626c4f7c4fcb2132525ea6c77ad2f2f5659a9b0f4451b1000be1b5e16"}, + {file = "tensorflow-2.14.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:6d65b54f6928490e2b6ff51836b97f88f5d5b29b5943fe81d8ac5d8c809ccca4"}, + {file = "tensorflow-2.14.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e2840b549686080bfb824cc1578b5a15d5ec416badacc0c327d93f8762ee6b56"}, + {file = "tensorflow-2.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fb16641092b04a37ec2916c30412f986ca6adf969e6062057839efb788985f8"}, + {file = "tensorflow-2.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba2ee1f9fe7f453bcd27d39a36928142de75a427ac2097dee2db1516387c9d5"}, + {file = "tensorflow-2.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:6531e76276b1421f43e008280107ba215256d4570cc56fd54856db7ff45e58f7"}, ] [package.dependencies] @@ -3310,9 +3315,9 @@ 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.14.0rc0,<2.15" +keras = ">=2.14.0,<2.15" libclang = ">=13.0.0" -ml-dtypes = ">=0.2.0" +ml-dtypes = "0.2.0" numpy = ">=1.23.5" opt-einsum = ">=2.3.2" packaging = "*" @@ -3320,8 +3325,8 @@ protobuf = ">=3.20.3,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4 setuptools = "*" six = ">=1.12.0" tensorboard = ">=2.14,<2.15" -tensorflow-estimator = ">=2.14.0rc0,<2.15" -tensorflow-io-gcs-filesystem = {version = ">=0.23.1", markers = "platform_machine != \"arm64\" or platform_system != \"Darwin\""} +tensorflow-estimator = ">=2.14.0,<2.15" +tensorflow-io-gcs-filesystem = ">=0.23.1" termcolor = ">=1.1.0" typing-extensions = ">=3.6.6" wrapt = ">=1.11.0,<1.15" @@ -3443,28 +3448,28 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.10.1" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.10.1-py3-none-any.whl", hash = "sha256:07ab9c5bf8a0499fd7b088ba51be899c90ffc936ffc797d7b6907fc516bcd116"}, + {file = "traitlets-5.10.1.tar.gz", hash = "sha256:db9c4aa58139c3ba850101913915c042bdba86f7c8a0dda1c6f7f92c5da8e542"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {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]] @@ -3489,13 +3494,13 @@ tests = ["nose", "numpy"] [[package]] name = "urllib3" -version = "2.0.4" +version = "2.0.5" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"}, + {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"}, ] [package.extras] @@ -3548,14 +3553,21 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "wmctrl" -version = "0.4" +version = "0.5" description = "A tool to programmatically control windows inside X" optional = false -python-versions = "*" +python-versions = ">=2.7" files = [ - {file = "wmctrl-0.4.tar.gz", hash = "sha256:66cbff72b0ca06a22ec3883ac3a4d7c41078bdae4fb7310f52951769b10e14e0"}, + {file = "wmctrl-0.5-py2.py3-none-any.whl", hash = "sha256:ae695c1863a314c899e7cf113f07c0da02a394b968c4772e1936219d9234ddd7"}, + {file = "wmctrl-0.5.tar.gz", hash = "sha256:7839a36b6fe9e2d6fd22304e5dc372dbced2116ba41283ea938b2da57f53e962"}, ] +[package.dependencies] +attrs = "*" + +[package.extras] +test = ["pytest"] + [[package]] name = "wrapt" version = "1.14.1" @@ -3631,17 +3643,17 @@ files = [ [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {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 (>=3.5)", "sphinx-lint"] +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"] [extras] @@ -3652,4 +3664,4 @@ viz = ["pydot"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "77e1eff851e88ec1f8bcee61119e19aa45b53901bf8d929f31ef695f0e766fea" +content-hash = "1497e597be2a16d98e9203434e76a1b61dc070417594da49a3783043aaeaae02" diff --git a/pyproject.toml b/pyproject.toml index 765d206e1..9d3bdc56f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ classifiers = [ [tool.poetry.dependencies] python = ">=3.9,<3.12" qibolab = "^0.1.1" -qibo = "^0.2.0" +qibo = { git = "https://github.com/qiboteam/qibo.git", branch = "master", develop = true} numpy = "^1.24.0" scipy = "^1.10.1" pandas = "^1.4.3" From 8486a2e2bf1b3ce063cf423c702bbfc5fda344ec Mon Sep 17 00:00:00 2001 From: Juan Cereijo Date: Mon, 2 Oct 2023 10:28:06 +0400 Subject: [PATCH 20/26] Update src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py Co-authored-by: Andrea Pasquale --- .../randomized_benchmarking/clifford_filtered_rb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 50acfd698..00d732980 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -45,7 +45,7 @@ def load(cls, path): def filter_function(samples_list, circuit_list) -> list: """Calculates the filtered signal for every crosstalk irrep. - Every irrep has a projector charactarized with a bit string + Every irrep has a projector characterized with a bitstring :math:`\\boldsymbol{\\lambda}\\in\\mathbb{F}_2^N` where :math:`N` is the number of qubits. The experimental outcome for each qubit is denoted as From 78c3031917c5decb924bda845bc30a670a36f068 Mon Sep 17 00:00:00 2001 From: Juan Cereijo Date: Mon, 2 Oct 2023 10:28:15 +0400 Subject: [PATCH 21/26] Update src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py Co-authored-by: Andrea Pasquale --- .../randomized_benchmarking/clifford_filtered_rb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 00d732980..132ed8fcd 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -180,7 +180,7 @@ def _acquisition( # For simulations, a noise model can be added. noise_model = None if params.noise_model: - # FIXME implement this check outside acquisition + #FIXME: implement this check outside acquisition if platform and platform.name != "dummy": raise_error( NotImplementedError, From 7a3cbce2d707a3f1bb51efbc4af950424404e683 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Mon, 2 Oct 2023 11:07:59 +0400 Subject: [PATCH 22/26] comments --- .../randomized_benchmarking/circuit_tools.py | 2 +- .../clifford_filtered_rb.py | 17 ++++++----------- .../randomized_benchmarking/utils.py | 11 +++++++++++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py index b74382ba0..bc31b4f94 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/circuit_tools.py @@ -43,7 +43,7 @@ def layer_circuit(layer_gen: Callable, depth: int, **kwargs) -> Circuit: """ if not isinstance(depth, int) or depth < 0: - raise_error(ValueError, "Depth must be type int and >= 0.") + raise_error(ValueError, f"Depth: {depth}, must be type int and >= 0.") # Generate a layer to get nqubits. new_layer = layer_gen() diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 50acfd698..f09390c4c 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -19,7 +19,7 @@ from .fitting import exp1_func, fit_exp1_func from .plot import carousel, rb_figure from .standard_rb import RBData, StandardRBParameters -from .utils import extract_from_data, number_to_str, random_clifford +from .utils import crosstalk, extract_from_data, number_to_str, random_clifford @dataclass @@ -112,7 +112,7 @@ def filter_function(samples_list, circuit_list) -> list: a += (-1) ** sum(b) * np.prod( d * np.abs(suppl[~b][np.eye(2, dtype=bool)[s[~b]]]) ** 2 ) - # Normalize with inverse of effective measuremetn. + # Normalize with inverse of effective measurement. f_list.append(a * (d + 1) ** sum(l) / d**nqubits) for kk in range(len(f_list)): datarow[f"irrep{kk}"].append(f_list[kk] / nshots) @@ -335,14 +335,6 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], # TODO: fit doesn't get loaded on acquisition tests - def crosstalk(q0, q1): - p0 = fit.fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] - p1 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] - p01 = fit.fit_results["fit_parameters"][f"irrep{2 ** q1 + 2 ** q0}"][1] - if p0 == 0 or p1 == 0: - return None - return p01 / (p0 * p1) - rb_params = {} fig_list = [] result_fig = [go.Figure()] @@ -382,7 +374,10 @@ def crosstalk(q0, q1): if nqubits > 1: crosstalk_heatmap = np.array( [ - [crosstalk(i, j) if i > j else np.nan for j in range(nqubits)] + [ + crosstalk(i, j, fit.fit_results) if i > j else np.nan + for j in range(nqubits) + ] for i in range(nqubits) ] ) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py index 4684118b3..7e6d0e971 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/utils.py @@ -107,9 +107,11 @@ def number_to_str( """ def _sign(val): + "Return the correct sign to display imaginary numbers" return "+" if float(val) > -PRECISION_TOL else "-" def _display(val, dev): + "Gets a string representing imaginary numbers" # inf uncertainty if np.isinf(dev): return f"{value:.{precision}f}", "inf" @@ -191,3 +193,12 @@ def extract_from_data( df = data.get([output_key, groupby_key]) grouped_df = df.groupby(groupby_key, group_keys=True).agg(agg_type) return grouped_df.index.to_numpy(), grouped_df[output_key].values.tolist() + + +def crosstalk(q0, q1, fit_results): + p0 = fit_results["fit_parameters"][f"irrep{2 ** q0}"][1] + p1 = fit_results["fit_parameters"][f"irrep{2 ** q1}"][1] + p01 = fit_results["fit_parameters"][f"irrep{2 ** q1 + 2 ** q0}"][1] + if p0 == 0 or p1 == 0: + return None + return p01 / (p0 * p1) From 79a0d5c7da7530c99c755ec532a15b59895215ae Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 5 Oct 2023 12:32:59 +0400 Subject: [PATCH 23/26] update lock --- poetry.lock | 632 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 334 insertions(+), 300 deletions(-) diff --git a/poetry.lock b/poetry.lock index 58acbd205..9a2fdaffa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -136,15 +136,18 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "babel" -version = "2.12.1" +version = "2.13.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.0-py3-none-any.whl", hash = "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec"}, + {file = "Babel-2.13.0.tar.gz", hash = "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210"}, ] +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backcall" version = "0.2.0" @@ -198,86 +201,101 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" 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.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -427,63 +445,63 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "coverage" -version = "7.3.1" +version = "7.3.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd0f7429ecfd1ff597389907045ff209c8fdb5b013d38cfa7c60728cb484b6e3"}, - {file = "coverage-7.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:966f10df9b2b2115da87f50f6a248e313c72a668248be1b9060ce935c871f276"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0575c37e207bb9b98b6cf72fdaaa18ac909fb3d153083400c2d48e2e6d28bd8e"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:245c5a99254e83875c7fed8b8b2536f040997a9b76ac4c1da5bff398c06e860f"}, - {file = "coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c96dd7798d83b960afc6c1feb9e5af537fc4908852ef025600374ff1a017392"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:de30c1aa80f30af0f6b2058a91505ea6e36d6535d437520067f525f7df123887"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:50dd1e2dd13dbbd856ffef69196781edff26c800a74f070d3b3e3389cab2600d"}, - {file = "coverage-7.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9c0c19f70d30219113b18fe07e372b244fb2a773d4afde29d5a2f7930765136"}, - {file = "coverage-7.3.1-cp310-cp310-win32.whl", hash = "sha256:770f143980cc16eb601ccfd571846e89a5fe4c03b4193f2e485268f224ab602f"}, - {file = "coverage-7.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdd088c00c39a27cfa5329349cc763a48761fdc785879220d54eb785c8a38520"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74bb470399dc1989b535cb41f5ca7ab2af561e40def22d7e188e0a445e7639e3"}, - {file = "coverage-7.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:025ded371f1ca280c035d91b43252adbb04d2aea4c7105252d3cbc227f03b375"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6191b3a6ad3e09b6cfd75b45c6aeeffe7e3b0ad46b268345d159b8df8d835f9"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7eb0b188f30e41ddd659a529e385470aa6782f3b412f860ce22b2491c89b8593"}, - {file = "coverage-7.3.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c8f0df9dfd8ff745bccff75867d63ef336e57cc22b2908ee725cc552689ec8"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eb3cd48d54b9bd0e73026dedce44773214064be93611deab0b6a43158c3d5a0"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac3c5b7e75acac31e490b7851595212ed951889918d398b7afa12736c85e13ce"}, - {file = "coverage-7.3.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5b4ee7080878077af0afa7238df1b967f00dc10763f6e1b66f5cced4abebb0a3"}, - {file = "coverage-7.3.1-cp311-cp311-win32.whl", hash = "sha256:229c0dd2ccf956bf5aeede7e3131ca48b65beacde2029f0361b54bf93d36f45a"}, - {file = "coverage-7.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c6f55d38818ca9596dc9019eae19a47410d5322408140d9a0076001a3dcb938c"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5289490dd1c3bb86de4730a92261ae66ea8d44b79ed3cc26464f4c2cde581fbc"}, - {file = "coverage-7.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca833941ec701fda15414be400c3259479bfde7ae6d806b69e63b3dc423b1832"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd694e19c031733e446c8024dedd12a00cda87e1c10bd7b8539a87963685e969"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aab8e9464c00da5cb9c536150b7fbcd8850d376d1151741dd0d16dfe1ba4fd26"}, - {file = "coverage-7.3.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d38444efffd5b056fcc026c1e8d862191881143c3aa80bb11fcf9dca9ae204"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8a07b692129b8a14ad7a37941a3029c291254feb7a4237f245cfae2de78de037"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2829c65c8faaf55b868ed7af3c7477b76b1c6ebeee99a28f59a2cb5907a45760"}, - {file = "coverage-7.3.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f111a7d85658ea52ffad7084088277135ec5f368457275fc57f11cebb15607f"}, - {file = "coverage-7.3.1-cp312-cp312-win32.whl", hash = "sha256:c397c70cd20f6df7d2a52283857af622d5f23300c4ca8e5bd8c7a543825baa5a"}, - {file = "coverage-7.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ae4c6da8b3d123500f9525b50bf0168023313963e0e2e814badf9000dd6ef92"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca70466ca3a17460e8fc9cea7123c8cbef5ada4be3140a1ef8f7b63f2f37108f"}, - {file = "coverage-7.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f2781fd3cabc28278dc982a352f50c81c09a1a500cc2086dc4249853ea96b981"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6407424621f40205bbe6325686417e5e552f6b2dba3535dd1f90afc88a61d465"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04312b036580ec505f2b77cbbdfb15137d5efdfade09156961f5277149f5e344"}, - {file = "coverage-7.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9ad38204887349853d7c313f53a7b1c210ce138c73859e925bc4e5d8fc18e7"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53669b79f3d599da95a0afbef039ac0fadbb236532feb042c534fbb81b1a4e40"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:614f1f98b84eb256e4f35e726bfe5ca82349f8dfa576faabf8a49ca09e630086"}, - {file = "coverage-7.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1a317fdf5c122ad642db8a97964733ab7c3cf6009e1a8ae8821089993f175ff"}, - {file = "coverage-7.3.1-cp38-cp38-win32.whl", hash = "sha256:defbbb51121189722420a208957e26e49809feafca6afeef325df66c39c4fdb3"}, - {file = "coverage-7.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:f4f456590eefb6e1b3c9ea6328c1e9fa0f1006e7481179d749b3376fc793478e"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12d8b11a54f32688b165fd1a788c408f927b0960984b899be7e4c190ae758f1"}, - {file = "coverage-7.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f09195dda68d94a53123883de75bb97b0e35f5f6f9f3aa5bf6e496da718f0cb6"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6601a60318f9c3945be6ea0f2a80571f4299b6801716f8a6e4846892737ebe4"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d156269718670d00a3b06db2288b48527fc5f36859425ff7cec07c6b367745"}, - {file = "coverage-7.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:636a8ac0b044cfeccae76a36f3b18264edcc810a76a49884b96dd744613ec0b7"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5d991e13ad2ed3aced177f524e4d670f304c8233edad3210e02c465351f785a0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:586649ada7cf139445da386ab6f8ef00e6172f11a939fc3b2b7e7c9082052fa0"}, - {file = "coverage-7.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4aba512a15a3e1e4fdbfed2f5392ec221434a614cc68100ca99dcad7af29f3f8"}, - {file = "coverage-7.3.1-cp39-cp39-win32.whl", hash = "sha256:6bc6f3f4692d806831c136c5acad5ccedd0262aa44c087c46b7101c77e139140"}, - {file = "coverage-7.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:553d7094cb27db58ea91332e8b5681bac107e7242c23f7629ab1316ee73c4981"}, - {file = "coverage-7.3.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:220eb51f5fb38dfdb7e5d54284ca4d0cd70ddac047d750111a68ab1798945194"}, - {file = "coverage-7.3.1.tar.gz", hash = "sha256:6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"}, + {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] @@ -494,15 +512,19 @@ toml = ["tomli"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.0" description = "Composable style cycles" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {file = "cycler-0.12.0-py3-none-any.whl", hash = "sha256:7896994252d006771357777d0251f3e34d266f4fa5f2c572247a80ab01440947"}, + {file = "cycler-0.12.0.tar.gz", hash = "sha256:8cc3a7b4861f91b1095157f9916f748549a617046e67eb7619abed9b34d2c94a"}, ] +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "dash" version = "2.13.0" @@ -639,17 +661,17 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "1.2.0" +version = "2.0.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = "*" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.0-py2.py3-none-any.whl", hash = "sha256:06df6183df67389625f4e763921c6cf978944721abf3e714000200aab95b0657"}, + {file = "executing-2.0.0.tar.gz", hash = "sha256:0ff053696fdeef426cda5bd18eacd94f82c91f49823a2e9090124212ceea9b08"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "fancycompleter" @@ -717,45 +739,53 @@ files = [ [[package]] name = "fonttools" -version = "4.42.1" +version = "4.43.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ed1a13a27f59d1fc1920394a7f596792e9d546c9ca5a044419dca70c37815d7c"}, - {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9b1ce7a45978b821a06d375b83763b27a3a5e8a2e4570b3065abad240a18760"}, - {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f720fa82a11c0f9042376fd509b5ed88dab7e3cd602eee63a1af08883b37342b"}, - {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db55cbaea02a20b49fefbd8e9d62bd481aaabe1f2301dabc575acc6b358874fa"}, - {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a35981d90feebeaef05e46e33e6b9e5b5e618504672ca9cd0ff96b171e4bfff"}, - {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68a02bbe020dc22ee0540e040117535f06df9358106d3775e8817d826047f3fd"}, - {file = "fonttools-4.42.1-cp310-cp310-win32.whl", hash = "sha256:12a7c247d1b946829bfa2f331107a629ea77dc5391dfd34fdcd78efa61f354ca"}, - {file = "fonttools-4.42.1-cp310-cp310-win_amd64.whl", hash = "sha256:a398bdadb055f8de69f62b0fc70625f7cbdab436bbb31eef5816e28cab083ee8"}, - {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:689508b918332fb40ce117131633647731d098b1b10d092234aa959b4251add5"}, - {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e36344e48af3e3bde867a1ca54f97c308735dd8697005c2d24a86054a114a71"}, - {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7db825c8adee96fac0692e6e1ecd858cae9affb3b4812cdb9d934a898b29e"}, - {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113337c2d29665839b7d90b39f99b3cac731f72a0eda9306165a305c7c31d341"}, - {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:37983b6bdab42c501202500a2be3a572f50d4efe3237e0686ee9d5f794d76b35"}, - {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6ed2662a3d9c832afa36405f8748c250be94ae5dfc5283d668308391f2102861"}, - {file = "fonttools-4.42.1-cp311-cp311-win32.whl", hash = "sha256:179737095eb98332a2744e8f12037b2977f22948cf23ff96656928923ddf560a"}, - {file = "fonttools-4.42.1-cp311-cp311-win_amd64.whl", hash = "sha256:f2b82f46917d8722e6b5eafeefb4fb585d23babd15d8246c664cd88a5bddd19c"}, - {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:62f481ac772fd68901573956231aea3e4b1ad87b9b1089a61613a91e2b50bb9b"}, - {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2f806990160d1ce42d287aa419df3ffc42dfefe60d473695fb048355fe0c6a0"}, - {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db372213d39fa33af667c2aa586a0c1235e88e9c850f5dd5c8e1f17515861868"}, - {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d18fc642fd0ac29236ff88ecfccff229ec0386090a839dd3f1162e9a7944a40"}, - {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8708b98c278012ad267ee8a7433baeb809948855e81922878118464b274c909d"}, - {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c95b0724a6deea2c8c5d3222191783ced0a2f09bd6d33f93e563f6f1a4b3b3a4"}, - {file = "fonttools-4.42.1-cp38-cp38-win32.whl", hash = "sha256:4aa79366e442dbca6e2c8595645a3a605d9eeabdb7a094d745ed6106816bef5d"}, - {file = "fonttools-4.42.1-cp38-cp38-win_amd64.whl", hash = "sha256:acb47f6f8680de24c1ab65ebde39dd035768e2a9b571a07c7b8da95f6c8815fd"}, - {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb289b7a815638a7613d46bcf324c9106804725b2bb8ad913c12b6958ffc4ec"}, - {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:53eb5091ddc8b1199330bb7b4a8a2e7995ad5d43376cadce84523d8223ef3136"}, - {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46a0ec8adbc6ff13494eb0c9c2e643b6f009ce7320cf640de106fb614e4d4360"}, - {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cc7d685b8eeca7ae69dc6416833fbfea61660684b7089bca666067cb2937dcf"}, - {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be24fcb80493b2c94eae21df70017351851652a37de514de553435b256b2f249"}, - {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:515607ec756d7865f23070682622c49d922901943697871fc292277cf1e71967"}, - {file = "fonttools-4.42.1-cp39-cp39-win32.whl", hash = "sha256:0eb79a2da5eb6457a6f8ab904838454accc7d4cccdaff1fd2bd3a0679ea33d64"}, - {file = "fonttools-4.42.1-cp39-cp39-win_amd64.whl", hash = "sha256:7286aed4ea271df9eab8d7a9b29e507094b51397812f7ce051ecd77915a6e26b"}, - {file = "fonttools-4.42.1-py3-none-any.whl", hash = "sha256:9398f244e28e0596e2ee6024f808b06060109e33ed38dcc9bded452fd9bbb853"}, - {file = "fonttools-4.42.1.tar.gz", hash = "sha256:c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d"}, + {file = "fonttools-4.43.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ab80e7d6bb01316d5fc8161a2660ca2e9e597d0880db4927bc866c76474472ef"}, + {file = "fonttools-4.43.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82d8e687a42799df5325e7ee12977b74738f34bf7fde1c296f8140efd699a213"}, + {file = "fonttools-4.43.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d08a694b280d615460563a6b4e2afb0b1b9df708c799ec212bf966652b94fc84"}, + {file = "fonttools-4.43.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d654d3e780e0ceabb1f4eff5a3c042c67d4428d0fe1ea3afd238a721cf171b3"}, + {file = "fonttools-4.43.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:20fc43783c432862071fa76da6fa714902ae587bc68441e12ff4099b94b1fcef"}, + {file = "fonttools-4.43.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:33c40a657fb87ff83185828c0323032d63a4df1279d5c1c38e21f3ec56327803"}, + {file = "fonttools-4.43.0-cp310-cp310-win32.whl", hash = "sha256:b3813f57f85bbc0e4011a0e1e9211f9ee52f87f402e41dc05bc5135f03fa51c1"}, + {file = "fonttools-4.43.0-cp310-cp310-win_amd64.whl", hash = "sha256:05056a8c9af048381fdb17e89b17d45f6c8394176d01e8c6fef5ac96ea950d38"}, + {file = "fonttools-4.43.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da78f39b601ed0b4262929403186d65cf7a016f91ff349ab18fdc5a7080af465"}, + {file = "fonttools-4.43.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5056f69a18f3f28ab5283202d1efcfe011585d31de09d8560f91c6c88f041e92"}, + {file = "fonttools-4.43.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcc01cea0a121fb0c009993497bad93cae25e77db7dee5345fec9cce1aaa09cd"}, + {file = "fonttools-4.43.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee728d5af70f117581712966a21e2e07031e92c687ef1fdc457ac8d281016f64"}, + {file = "fonttools-4.43.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b5e760198f0b87e42478bb35a6eae385c636208f6f0d413e100b9c9c5efafb6a"}, + {file = "fonttools-4.43.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af38f5145258e9866da5881580507e6d17ff7756beef175d13213a43a84244e9"}, + {file = "fonttools-4.43.0-cp311-cp311-win32.whl", hash = "sha256:25620b738d4533cfc21fd2a4f4b667e481f7cb60e86b609799f7d98af657854e"}, + {file = "fonttools-4.43.0-cp311-cp311-win_amd64.whl", hash = "sha256:635658464dccff6fa5c3b43fe8f818ae2c386ee6a9e1abc27359d1e255528186"}, + {file = "fonttools-4.43.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a682fb5cbf8837d1822b80acc0be5ff2ea0c49ca836e468a21ffd388ef280fd3"}, + {file = "fonttools-4.43.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3d7adfa342e6b3a2b36960981f23f480969f833d565a4eba259c2e6f59d2674f"}, + {file = "fonttools-4.43.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa67d1e720fdd902fde4a59d0880854ae9f19fc958f3e1538bceb36f7f4dc92"}, + {file = "fonttools-4.43.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e5113233a2df07af9dbf493468ce526784c3b179c0e8b9c7838ced37c98b69"}, + {file = "fonttools-4.43.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:57c22e5f9f53630d458830f710424dce4f43c5f0d95cb3368c0f5178541e4db7"}, + {file = "fonttools-4.43.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:206808f9717c9b19117f461246372a2c160fa12b9b8dbdfb904ab50ca235ba0a"}, + {file = "fonttools-4.43.0-cp312-cp312-win32.whl", hash = "sha256:f19c2b1c65d57cbea25cabb80941fea3fbf2625ff0cdcae8900b5fb1c145704f"}, + {file = "fonttools-4.43.0-cp312-cp312-win_amd64.whl", hash = "sha256:7c76f32051159f8284f1a5f5b605152b5a530736fb8b55b09957db38dcae5348"}, + {file = "fonttools-4.43.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e3f8acc6ef4a627394021246e099faee4b343afd3ffe2e517d8195b4ebf20289"}, + {file = "fonttools-4.43.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a68b71adc3b3a90346e4ac92f0a69ab9caeba391f3b04ab6f1e98f2c8ebe88e3"}, + {file = "fonttools-4.43.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ace0fd5afb79849f599f76af5c6aa5e865bd042c811e4e047bbaa7752cc26126"}, + {file = "fonttools-4.43.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f9660e70a2430780e23830476332bc3391c3c8694769e2c0032a5038702a662"}, + {file = "fonttools-4.43.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:48078357984214ccd22d7fe0340cd6ff7286b2f74f173603a1a9a40b5dc25afe"}, + {file = "fonttools-4.43.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d27d960e10cf7617d70cf3104c32a69b008dde56f2d55a9bed4ba6e3df611544"}, + {file = "fonttools-4.43.0-cp38-cp38-win32.whl", hash = "sha256:a6a2e99bb9ea51e0974bbe71768df42c6dd189308c22f3f00560c3341b345646"}, + {file = "fonttools-4.43.0-cp38-cp38-win_amd64.whl", hash = "sha256:030355fbb0cea59cf75d076d04d3852900583d1258574ff2d7d719abf4513836"}, + {file = "fonttools-4.43.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52e77f23a9c059f8be01a07300ba4c4d23dc271d33eed502aea5a01ab5d2f4c1"}, + {file = "fonttools-4.43.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a530fa28c155538d32214eafa0964989098a662bd63e91e790e6a7a4e9c02da"}, + {file = "fonttools-4.43.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70f021a6b9eb10dfe7a411b78e63a503a06955dd6d2a4e130906d8760474f77c"}, + {file = "fonttools-4.43.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:812142a0e53cc853964d487e6b40963df62f522b1b571e19d1ff8467d7880ceb"}, + {file = "fonttools-4.43.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ace51902ab67ef5fe225e8b361039e996db153e467e24a28d35f74849b37b7ce"}, + {file = "fonttools-4.43.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8dfd8edfce34ad135bd69de20c77449c06e2c92b38f2a8358d0987737f82b49e"}, + {file = "fonttools-4.43.0-cp39-cp39-win32.whl", hash = "sha256:e5d53eddaf436fa131042f44a76ea1ead0a17c354ab9de0d80e818f0cb1629f1"}, + {file = "fonttools-4.43.0-cp39-cp39-win_amd64.whl", hash = "sha256:93c5b6d77baf28f306bc13fa987b0b13edca6a39dc2324eaca299a74ccc6316f"}, + {file = "fonttools-4.43.0-py3-none-any.whl", hash = "sha256:e4bc589d8da09267c7c4ceaaaa4fc01a7908ac5b43b286ac9279afe76407c384"}, + {file = "fonttools-4.43.0.tar.gz", hash = "sha256:b62a53a4ca83c32c6b78cac64464f88d02929779373c716f738af6968c8c821e"}, ] [package.extras] @@ -847,20 +877,19 @@ files = [ [[package]] name = "google-auth" -version = "2.23.1" +version = "2.23.2" description = "Google Authentication Library" optional = true python-versions = ">=3.7" files = [ - {file = "google-auth-2.23.1.tar.gz", hash = "sha256:d38bdf4fa1e7c5a35e574861bce55784fd08afadb4e48f99f284f1e487ce702d"}, - {file = "google_auth-2.23.1-py2.py3-none-any.whl", hash = "sha256:9800802266366a2a87890fb2d04923fc0c0d4368af0b86db18edd94a62386ea1"}, + {file = "google-auth-2.23.2.tar.gz", hash = "sha256:5a9af4be520ba33651471a0264eead312521566f44631cbb621164bc30c8fd40"}, + {file = "google_auth-2.23.2-py2.py3-none-any.whl", hash = "sha256:c2e253347579d483004f17c3bd0bf92e611ef6c7ba24d41c5c59f2e7aeeaf088"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" -urllib3 = ">=2.0.5" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] @@ -904,60 +933,69 @@ six = "*" [[package]] name = "grpcio" -version = "1.58.0" +version = "1.59.0" description = "HTTP/2-based RPC framework" optional = true python-versions = ">=3.7" files = [ - {file = "grpcio-1.58.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:3e6bebf1dfdbeb22afd95650e4f019219fef3ab86d3fca8ebade52e4bc39389a"}, - {file = "grpcio-1.58.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cde11577d5b6fd73a00e6bfa3cf5f428f3f33c2d2878982369b5372bbc4acc60"}, - {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:a2d67ff99e70e86b2be46c1017ae40b4840d09467d5455b2708de6d4c127e143"}, - {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ed979b273a81de36fc9c6716d9fb09dd3443efa18dcc8652501df11da9583e9"}, - {file = "grpcio-1.58.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:458899d2ebd55d5ca2350fd3826dfd8fcb11fe0f79828ae75e2b1e6051d50a29"}, - {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc7ffef430b80345729ff0a6825e9d96ac87efe39216e87ac58c6c4ef400de93"}, - {file = "grpcio-1.58.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5b23d75e5173faa3d1296a7bedffb25afd2fddb607ef292dfc651490c7b53c3d"}, - {file = "grpcio-1.58.0-cp310-cp310-win32.whl", hash = "sha256:fad9295fe02455d4f158ad72c90ef8b4bcaadfdb5efb5795f7ab0786ad67dd58"}, - {file = "grpcio-1.58.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc325fed4d074367bebd465a20763586e5e1ed5b943e9d8bc7c162b1f44fd602"}, - {file = "grpcio-1.58.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:652978551af02373a5a313e07bfef368f406b5929cf2d50fa7e4027f913dbdb4"}, - {file = "grpcio-1.58.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:9f13a171281ebb4d7b1ba9f06574bce2455dcd3f2f6d1fbe0fd0d84615c74045"}, - {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8774219e21b05f750eef8adc416e9431cf31b98f6ce9def288e4cea1548cbd22"}, - {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09206106848462763f7f273ca93d2d2d4d26cab475089e0de830bb76be04e9e8"}, - {file = "grpcio-1.58.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62831d5e251dd7561d9d9e83a0b8655084b2a1f8ea91e4bd6b3cedfefd32c9d2"}, - {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:212f38c6a156862098f6bdc9a79bf850760a751d259d8f8f249fc6d645105855"}, - {file = "grpcio-1.58.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b12754af201bb993e6e2efd7812085ddaaef21d0a6f0ff128b97de1ef55aa4a"}, - {file = "grpcio-1.58.0-cp311-cp311-win32.whl", hash = "sha256:3886b4d56bd4afeac518dbc05933926198aa967a7d1d237a318e6fbc47141577"}, - {file = "grpcio-1.58.0-cp311-cp311-win_amd64.whl", hash = "sha256:002f228d197fea12797a14e152447044e14fb4fdb2eb5d6cfa496f29ddbf79ef"}, - {file = "grpcio-1.58.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b5e8db0aff0a4819946215f156bd722b6f6c8320eb8419567ffc74850c9fd205"}, - {file = "grpcio-1.58.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:201e550b7e2ede113b63e718e7ece93cef5b0fbf3c45e8fe4541a5a4305acd15"}, - {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:d79b660681eb9bc66cc7cbf78d1b1b9e335ee56f6ea1755d34a31108b80bd3c8"}, - {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ef8d4a76d2c7d8065aba829f8d0bc0055495c998dce1964ca5b302d02514fb3"}, - {file = "grpcio-1.58.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cba491c638c76d3dc6c191d9c75041ca5b8f5c6de4b8327ecdcab527f130bb4"}, - {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6801ff6652ecd2aae08ef994a3e49ff53de29e69e9cd0fd604a79ae4e545a95c"}, - {file = "grpcio-1.58.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:24edec346e69e672daf12b2c88e95c6f737f3792d08866101d8c5f34370c54fd"}, - {file = "grpcio-1.58.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7e473a7abad9af48e3ab5f3b5d237d18208024d28ead65a459bd720401bd2f8f"}, - {file = "grpcio-1.58.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4891bbb4bba58acd1d620759b3be11245bfe715eb67a4864c8937b855b7ed7fa"}, - {file = "grpcio-1.58.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:e9f995a8a421405958ff30599b4d0eec244f28edc760de82f0412c71c61763d2"}, - {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2f85f87e2f087d9f632c085b37440a3169fda9cdde80cb84057c2fc292f8cbdf"}, - {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb6b92036ff312d5b4182fa72e8735d17aceca74d0d908a7f08e375456f03e07"}, - {file = "grpcio-1.58.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d81c2b2b24c32139dd2536972f1060678c6b9fbd106842a9fcdecf07b233eccd"}, - {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:fbcecb6aedd5c1891db1d70efbfbdc126c986645b5dd616a045c07d6bd2dfa86"}, - {file = "grpcio-1.58.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92ae871a902cf19833328bd6498ec007b265aabf2fda845ab5bd10abcaf4c8c6"}, - {file = "grpcio-1.58.0-cp38-cp38-win32.whl", hash = "sha256:dc72e04620d49d3007771c0e0348deb23ca341c0245d610605dddb4ac65a37cb"}, - {file = "grpcio-1.58.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c1c5238c6072470c7f1614bf7c774ffde6b346a100521de9ce791d1e4453afe"}, - {file = "grpcio-1.58.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fe643af248442221db027da43ed43e53b73e11f40c9043738de9a2b4b6ca7697"}, - {file = "grpcio-1.58.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:128eb1f8e70676d05b1b0c8e6600320fc222b3f8c985a92224248b1367122188"}, - {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:039003a5e0ae7d41c86c768ef8b3ee2c558aa0a23cf04bf3c23567f37befa092"}, - {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f061722cad3f9aabb3fbb27f3484ec9d4667b7328d1a7800c3c691a98f16bb0"}, - {file = "grpcio-1.58.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0af11938acf8cd4cf815c46156bcde36fa5850518120920d52620cc3ec1830"}, - {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d4cef77ad2fed42b1ba9143465856d7e737279854e444925d5ba45fc1f3ba727"}, - {file = "grpcio-1.58.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24765a627eb4d9288ace32d5104161c3654128fe27f2808ecd6e9b0cfa7fc8b9"}, - {file = "grpcio-1.58.0-cp39-cp39-win32.whl", hash = "sha256:f0241f7eb0d2303a545136c59bc565a35c4fc3b924ccbd69cb482f4828d6f31c"}, - {file = "grpcio-1.58.0-cp39-cp39-win_amd64.whl", hash = "sha256:dcfba7befe3a55dab6fe1eb7fc9359dc0c7f7272b30a70ae0af5d5b063842f28"}, - {file = "grpcio-1.58.0.tar.gz", hash = "sha256:532410c51ccd851b706d1fbc00a87be0f5312bd6f8e5dbf89d4e99c7f79d7499"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.58.0)"] + {file = "grpcio-1.59.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:225e5fa61c35eeaebb4e7491cd2d768cd8eb6ed00f2664fa83a58f29418b39fd"}, + {file = "grpcio-1.59.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b95ec8ecc4f703f5caaa8d96e93e40c7f589bad299a2617bdb8becbcce525539"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:1a839ba86764cc48226f50b924216000c79779c563a301586a107bda9cbe9dcf"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6cfe44a5d7c7d5f1017a7da1c8160304091ca5dc64a0f85bca0d63008c3137a"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0fcf53df684fcc0154b1e61f6b4a8c4cf5f49d98a63511e3f30966feff39cd0"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa66cac32861500f280bb60fe7d5b3e22d68c51e18e65367e38f8669b78cea3b"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8cd2d38c2d52f607d75a74143113174c36d8a416d9472415eab834f837580cf7"}, + {file = "grpcio-1.59.0-cp310-cp310-win32.whl", hash = "sha256:228b91ce454876d7eed74041aff24a8f04c0306b7250a2da99d35dd25e2a1211"}, + {file = "grpcio-1.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:ca87ee6183421b7cea3544190061f6c1c3dfc959e0b57a5286b108511fd34ff4"}, + {file = "grpcio-1.59.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c173a87d622ea074ce79be33b952f0b424fa92182063c3bda8625c11d3585d09"}, + {file = "grpcio-1.59.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:ec78aebb9b6771d6a1de7b6ca2f779a2f6113b9108d486e904bde323d51f5589"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:0b84445fa94d59e6806c10266b977f92fa997db3585f125d6b751af02ff8b9fe"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c251d22de8f9f5cca9ee47e4bade7c5c853e6e40743f47f5cc02288ee7a87252"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:956f0b7cb465a65de1bd90d5a7475b4dc55089b25042fe0f6c870707e9aabb1d"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:38da5310ef84e16d638ad89550b5b9424df508fd5c7b968b90eb9629ca9be4b9"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:63982150a7d598281fa1d7ffead6096e543ff8be189d3235dd2b5604f2c553e5"}, + {file = "grpcio-1.59.0-cp311-cp311-win32.whl", hash = "sha256:50eff97397e29eeee5df106ea1afce3ee134d567aa2c8e04fabab05c79d791a7"}, + {file = "grpcio-1.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:15f03bd714f987d48ae57fe092cf81960ae36da4e520e729392a59a75cda4f29"}, + {file = "grpcio-1.59.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f1feb034321ae2f718172d86b8276c03599846dc7bb1792ae370af02718f91c5"}, + {file = "grpcio-1.59.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d09bd2a4e9f5a44d36bb8684f284835c14d30c22d8ec92ce796655af12163588"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:2f120d27051e4c59db2f267b71b833796770d3ea36ca712befa8c5fff5da6ebd"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0ca727a173ee093f49ead932c051af463258b4b493b956a2c099696f38aa66"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5711c51e204dc52065f4a3327dca46e69636a0b76d3e98c2c28c4ccef9b04c52"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d74f7d2d7c242a6af9d4d069552ec3669965b74fed6b92946e0e13b4168374f9"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3859917de234a0a2a52132489c4425a73669de9c458b01c9a83687f1f31b5b10"}, + {file = "grpcio-1.59.0-cp312-cp312-win32.whl", hash = "sha256:de2599985b7c1b4ce7526e15c969d66b93687571aa008ca749d6235d056b7205"}, + {file = "grpcio-1.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:598f3530231cf10ae03f4ab92d48c3be1fee0c52213a1d5958df1a90957e6a88"}, + {file = "grpcio-1.59.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b34c7a4c31841a2ea27246a05eed8a80c319bfc0d3e644412ec9ce437105ff6c"}, + {file = "grpcio-1.59.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:c4dfdb49f4997dc664f30116af2d34751b91aa031f8c8ee251ce4dcfc11277b0"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:61bc72a00ecc2b79d9695220b4d02e8ba53b702b42411397e831c9b0589f08a3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f367e4b524cb319e50acbdea57bb63c3b717c5d561974ace0b065a648bb3bad3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849c47ef42424c86af069a9c5e691a765e304079755d5c29eff511263fad9c2a"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c0488c2b0528e6072010182075615620071371701733c63ab5be49140ed8f7f0"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:611d9aa0017fa386809bddcb76653a5ab18c264faf4d9ff35cb904d44745f575"}, + {file = "grpcio-1.59.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e5378785dce2b91eb2e5b857ec7602305a3b5cf78311767146464bfa365fc897"}, + {file = "grpcio-1.59.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fe976910de34d21057bcb53b2c5e667843588b48bf11339da2a75f5c4c5b4055"}, + {file = "grpcio-1.59.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:c041a91712bf23b2a910f61e16565a05869e505dc5a5c025d429ca6de5de842c"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0ae444221b2c16d8211b55326f8ba173ba8f8c76349bfc1768198ba592b58f74"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ceb1e68135788c3fce2211de86a7597591f0b9a0d2bb80e8401fd1d915991bac"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4b1cc3a9dc1924d2eb26eec8792fedd4b3fcd10111e26c1d551f2e4eda79ce"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:871371ce0c0055d3db2a86fdebd1e1d647cf21a8912acc30052660297a5a6901"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:93e9cb546e610829e462147ce724a9cb108e61647a3454500438a6deef610be1"}, + {file = "grpcio-1.59.0-cp38-cp38-win32.whl", hash = "sha256:f21917aa50b40842b51aff2de6ebf9e2f6af3fe0971c31960ad6a3a2b24988f4"}, + {file = "grpcio-1.59.0-cp38-cp38-win_amd64.whl", hash = "sha256:14890da86a0c0e9dc1ea8e90101d7a3e0e7b1e71f4487fab36e2bfd2ecadd13c"}, + {file = "grpcio-1.59.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:34341d9e81a4b669a5f5dca3b2a760b6798e95cdda2b173e65d29d0b16692857"}, + {file = "grpcio-1.59.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:986de4aa75646e963466b386a8c5055c8b23a26a36a6c99052385d6fe8aaf180"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:aca8a24fef80bef73f83eb8153f5f5a0134d9539b4c436a716256b311dda90a6"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:936b2e04663660c600d5173bc2cc84e15adbad9c8f71946eb833b0afc205b996"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc8bf2e7bc725e76c0c11e474634a08c8f24bcf7426c0c6d60c8f9c6e70e4d4a"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81d86a096ccd24a57fa5772a544c9e566218bc4de49e8c909882dae9d73392df"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2ea95cd6abbe20138b8df965b4a8674ec312aaef3147c0f46a0bac661f09e8d0"}, + {file = "grpcio-1.59.0-cp39-cp39-win32.whl", hash = "sha256:3b8ff795d35a93d1df6531f31c1502673d1cebeeba93d0f9bd74617381507e3f"}, + {file = "grpcio-1.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:38823bd088c69f59966f594d087d3a929d1ef310506bee9e3648317660d65b81"}, + {file = "grpcio-1.59.0.tar.gz", hash = "sha256:acf70a63cf09dd494000007b798aff88a436e1c03b394995ce450be437b8e54f"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.59.0)"] [[package]] name = "h5py" @@ -1111,13 +1149,13 @@ files = [ [[package]] name = "ipython" -version = "8.15.0" +version = "8.16.1" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.9" files = [ - {file = "ipython-8.15.0-py3-none-any.whl", hash = "sha256:45a2c3a529296870a97b7de34eda4a31bee16bc7bf954e07d39abe49caf8f887"}, - {file = "ipython-8.15.0.tar.gz", hash = "sha256:2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e"}, + {file = "ipython-8.16.1-py3-none-any.whl", hash = "sha256:0852469d4d579d9cd613c220af7bf0c9cc251813e12be647cb9d463939db9b1e"}, + {file = "ipython-8.16.1.tar.gz", hash = "sha256:ad52f58fca8f9f848e256c629eff888efc0528c12fe0f8ec14f33205f23ef938"}, ] [package.dependencies] @@ -1179,13 +1217,13 @@ files = [ [[package]] name = "jedi" -version = "0.19.0" +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.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {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] @@ -1194,7 +1232,7 @@ 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 (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" @@ -1976,13 +2014,13 @@ tests = ["pytest", "pytest-cov", "pytest-pep8"] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2162,13 +2200,13 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.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-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -2221,24 +2259,24 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.24.3" +version = "4.24.4" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "protobuf-4.24.3-cp310-abi3-win32.whl", hash = "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4"}, - {file = "protobuf-4.24.3-cp310-abi3-win_amd64.whl", hash = "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3"}, - {file = "protobuf-4.24.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959"}, - {file = "protobuf-4.24.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675"}, - {file = "protobuf-4.24.3-cp37-cp37m-win32.whl", hash = "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2"}, - {file = "protobuf-4.24.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76"}, - {file = "protobuf-4.24.3-cp38-cp38-win32.whl", hash = "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52"}, - {file = "protobuf-4.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719"}, - {file = "protobuf-4.24.3-cp39-cp39-win32.whl", hash = "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1"}, - {file = "protobuf-4.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b"}, - {file = "protobuf-4.24.3-py3-none-any.whl", hash = "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a"}, - {file = "protobuf-4.24.3.tar.gz", hash = "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"}, + {file = "protobuf-4.24.4-cp310-abi3-win32.whl", hash = "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb"}, + {file = "protobuf-4.24.4-cp310-abi3-win_amd64.whl", hash = "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085"}, + {file = "protobuf-4.24.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e61a27f362369c2f33248a0ff6896c20dcd47b5d48239cb9720134bef6082e4"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:bffa46ad9612e6779d0e51ae586fde768339b791a50610d85eb162daeb23661e"}, + {file = "protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9"}, + {file = "protobuf-4.24.4-cp37-cp37m-win32.whl", hash = "sha256:dbbed8a56e56cee8d9d522ce844a1379a72a70f453bde6243e3c86c30c2a3d46"}, + {file = "protobuf-4.24.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6b7d2e1c753715dcfe9d284a25a52d67818dd43c4932574307daf836f0071e37"}, + {file = "protobuf-4.24.4-cp38-cp38-win32.whl", hash = "sha256:02212557a76cd99574775a81fefeba8738d0f668d6abd0c6b1d3adcc75503dbe"}, + {file = "protobuf-4.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:2fa3886dfaae6b4c5ed2730d3bf47c7a38a72b3a1f0acb4d4caf68e6874b947b"}, + {file = "protobuf-4.24.4-cp39-cp39-win32.whl", hash = "sha256:b77272f3e28bb416e2071186cb39efd4abbf696d682cbb5dc731308ad37fa6dd"}, + {file = "protobuf-4.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:9fee5e8aa20ef1b84123bb9232b3f4a5114d9897ed89b4b8142d81924e05d79b"}, + {file = "protobuf-4.24.4-py3-none-any.whl", hash = "sha256:80797ce7424f8c8d2f2547e2d42bfbb6c08230ce5832d6c099a37335c9c90a92"}, + {file = "protobuf-4.24.4.tar.gz", hash = "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"}, ] [[package]] @@ -2433,17 +2471,17 @@ plugins = ["importlib-metadata"] [[package]] name = "pylint" -version = "2.17.6" +version = "2.17.7" description = "python code static checker" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.6-py3-none-any.whl", hash = "sha256:18a1412e873caf8ffb56b760ce1b5643675af23e6173a247b502406b24c716af"}, - {file = "pylint-2.17.6.tar.gz", hash = "sha256:be928cce5c76bf9acdc65ad01447a1e0b1a7bccffc609fb7fc40f2513045bd05"}, + {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.7,<=2.17.0-dev0" +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\""}, @@ -2642,46 +2680,42 @@ version = "0.2.1" description = "A framework for quantum computing with hardware acceleration." optional = false python-versions = ">=3.8,<3.12" -files = [] -develop = true +files = [ + {file = "qibo-0.2.1-py3-none-any.whl", hash = "sha256:e8c42e042588e4cd62108afffa935659e538ab47151f8bd3feaa3a8f74a4f436"}, + {file = "qibo-0.2.1.tar.gz", hash = "sha256:997146ab4d79fb435a5e6ffa241ae55ef698cbe2a975ac5a459e0ed8779f572a"}, +] [package.dependencies] -cma = "^3.3.0" -joblib = "^1.2.0" -matplotlib = "^3.7.0" -psutil = "^5.9.4" -scipy = "^1.10.1" -sympy = "^1.11.1" -tabulate = "^0.9.0" - -[package.source] -type = "git" -url = "https://github.com/qiboteam/qibo.git" -reference = "master" -resolved_reference = "b85268991f26d75252f3cdbe9a781cce9881184e" +cma = ">=3.3.0,<4.0.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 = "qibolab" -version = "0.1.1" +version = "0.1.2" description = "Quantum hardware module and drivers for Qibo" optional = false python-versions = ">=3.9,<3.12" files = [ - {file = "qibolab-0.1.1-py3-none-any.whl", hash = "sha256:bbf03fae49959911128ffe66d121163ecfe33a5ded55ae455b38b1eb84b7934c"}, - {file = "qibolab-0.1.1.tar.gz", hash = "sha256:cb97dedbf2e3067d34ef214ea22bdfb0b56d35d88c59cb57962d7d417affd2d1"}, + {file = "qibolab-0.1.2-py3-none-any.whl", hash = "sha256:2ba188c2dbd48a2858825735346863a5996e3537dc0eecf077e3eedfb5466419"}, + {file = "qibolab-0.1.2.tar.gz", hash = "sha256:c558c2d8464172186a7e992457260c950a5b25ca7a2f190855c1bade8ea261e1"}, ] [package.dependencies] more-itertools = ">=9.1.0,<10.0.0" networkx = ">=3.0,<4.0" pyyaml = ">=6.0,<7.0" -qibo = ">=0.1.16,<0.3" +qibo = ">=0.2.0,<0.3" [package.extras] -qblox = ["pyvisa-py (==0.5.3)", "qblox-instruments (==0.9.0)", "qcodes (>=0.37.0,<0.38.0)", "qcodes_contrib_drivers (==0.18.0)"] +qblox = ["pyvisa-py (==0.5.3)", "qblox-instruments (==0.11.0)", "qcodes (>=0.37.0,<0.38.0)", "qcodes_contrib_drivers (==0.18.0)"] qm = ["qm-qua (==1.1.1)", "qualang-tools (==0.14.0)", "setuptools (>67.0.0)"] rfsoc = ["qcodes (>=0.37.0,<0.38.0)", "qcodes_contrib_drivers (==0.18.0)", "qibosoq (>=0.0.4,<0.2)"] -zh = ["laboneq (==2.7.0)"] +zh = ["laboneq (>=2.12.0)"] [[package]] name = "recommonmark" @@ -2889,25 +2923,25 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "setuptools-scm" -version = "8.0.3" +version = "8.0.4" description = "the blessed package to manage your versions by scm tags" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-scm-8.0.3.tar.gz", hash = "sha256:0169fd70197efda2f8c4d0b2a7a3d614431b488116f37b79d031e9e7ec884d8c"}, - {file = "setuptools_scm-8.0.3-py3-none-any.whl", hash = "sha256:813822234453438a13c78d05c8af29918fbc06f88efb33d38f065340bbb48c39"}, + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, ] [package.dependencies] packaging = ">=20" setuptools = "*" tomli = {version = ">=1", markers = "python_version < \"3.11\""} -typing-extensions = {version = "*", markers = "python_version < \"3.11\""} +typing-extensions = "*" [package.extras] docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] rich = ["rich"] -test = ["pytest", "rich", "virtualenv (>20)"] +test = ["build", "pytest", "rich", "wheel"] [[package]] name = "six" @@ -3188,13 +3222,13 @@ test = ["pytest"] [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -3448,13 +3482,13 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.10.1" +version = "5.11.2" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.10.1-py3-none-any.whl", hash = "sha256:07ab9c5bf8a0499fd7b088ba51be899c90ffc936ffc797d7b6907fc516bcd116"}, - {file = "traitlets-5.10.1.tar.gz", hash = "sha256:db9c4aa58139c3ba850101913915c042bdba86f7c8a0dda1c6f7f92c5da8e542"}, + {file = "traitlets-5.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, + {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, ] [package.extras] @@ -3494,13 +3528,13 @@ tests = ["nose", "numpy"] [[package]] name = "urllib3" -version = "2.0.5" +version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.5-py3-none-any.whl", hash = "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e"}, - {file = "urllib3-2.0.5.tar.gz", hash = "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"}, + {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, + {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] [package.extras] @@ -3511,13 +3545,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, ] [[package]] @@ -3664,4 +3698,4 @@ viz = ["pydot"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "1497e597be2a16d98e9203434e76a1b61dc070417594da49a3783043aaeaae02" +content-hash = "c336e25f566fb7984b92fa866a508585808a7c697cae8788a40e13d6997ed920" diff --git a/pyproject.toml b/pyproject.toml index 9d3bdc56f..e68833ac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ classifiers = [ [tool.poetry.dependencies] python = ">=3.9,<3.12" qibolab = "^0.1.1" -qibo = { git = "https://github.com/qiboteam/qibo.git", branch = "master", develop = true} +qibo = "^0.2.1" numpy = "^1.24.0" scipy = "^1.10.1" pandas = "^1.4.3" From e521611726310547133032e03b9311a37fc20a4f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 08:36:47 +0000 Subject: [PATCH 24/26] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../randomized_benchmarking/clifford_filtered_rb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 87fe9e78e..81786ab41 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -180,7 +180,7 @@ def _acquisition( # For simulations, a noise model can be added. noise_model = None if params.noise_model: - #FIXME: implement this check outside acquisition + # FIXME: implement this check outside acquisition if platform and platform.name != "dummy": raise_error( NotImplementedError, From c343bd912f4264faf652c6968e0bdfeb43d477e1 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Thu, 5 Oct 2023 14:33:12 +0400 Subject: [PATCH 25/26] update qibolab --- poetry.lock | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9a2fdaffa..9dd1b2f1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3698,4 +3698,4 @@ viz = ["pydot"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "c336e25f566fb7984b92fa866a508585808a7c697cae8788a40e13d6997ed920" +content-hash = "10a426fb223796d54a9fd0fd53583fcf746b0a07e3de65065296843d05a2cb86" diff --git a/pyproject.toml b/pyproject.toml index e68833ac6..d916c11ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ classifiers = [ [tool.poetry.dependencies] python = ">=3.9,<3.12" -qibolab = "^0.1.1" +qibolab = "^0.1.2" qibo = "^0.2.1" numpy = "^1.24.0" scipy = "^1.10.1" From 76f40c0852cbbfdf0d45dbf960b8e323366319c3 Mon Sep 17 00:00:00 2001 From: Jacfomg Date: Tue, 17 Oct 2023 10:01:06 +0400 Subject: [PATCH 26/26] table --- .../randomized_benchmarking/clifford_filtered_rb.py | 6 +++--- .../characterization/randomized_benchmarking/plot.py | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py index 81786ab41..34f66257f 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/clifford_filtered_rb.py @@ -216,8 +216,6 @@ def _acquisition( samples = circuit.execute(nshots=params.nshots).samples() data_list[-1]["samples"] = samples - # Build the data object which will be returned and later saved. - # data = pd.DataFrame(data_list) clifford_rb_data = RBData(data_list) # TODO: They save noise model and noise params ... @@ -338,7 +336,7 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], rb_params = {} fig_list = [] result_fig = [go.Figure()] - table_str = None + table_str = "" if fit: nqubits = int(np.log2(len(fit.fit_results.index))) qubits = data.attrs.get("qubits", list(range(nqubits))) @@ -415,6 +413,8 @@ def _plot(data: RBData, fit: CliffordRBResult, qubit) -> tuple[list[go.Figure], # [f" | {key}: {value}
" for key, value in {**meta_data, **rb_params}.items()] # ) + # table_str = table_html(table_dict("Something")) + return result_fig, table_str diff --git a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py index 6f7533348..995519686 100644 --- a/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py +++ b/src/qibocal/protocols/characterization/randomized_benchmarking/plot.py @@ -91,7 +91,6 @@ def rb_figure( line=go.scatter.Line(dash="dot", color="#00cc96"), ) ) - kwargs.setdefault("showlegend", True) kwargs.setdefault( "uirevision", "0" @@ -100,6 +99,8 @@ def rb_figure( kwargs.setdefault("yaxis_title", "RB signal") fig.update_layout(**kwargs) + fig.update_layout(legend=dict(yanchor="top", y=0.99, xanchor="right", x=0.99)) + return fig