From 7ae5fd7c99b1787db0ef09137378968c7db06e33 Mon Sep 17 00:00:00 2001 From: jenglick Date: Fri, 9 Apr 2021 15:54:29 -0400 Subject: [PATCH 01/18] cleaned up code --- qka/featuremaps.py | 2 -- qka/kernel_matrix.py | 4 ++-- qka/qka.py | 3 --- qka/test.py | 2 ++ runtime/qka_runtime_outer.py | 17 +++-------------- 5 files changed, 7 insertions(+), 21 deletions(-) diff --git a/qka/featuremaps.py b/qka/featuremaps.py index 810fe0972..cfc2d4d14 100644 --- a/qka/featuremaps.py +++ b/qka/featuremaps.py @@ -15,8 +15,6 @@ def __init__(self, feature_dimension, entangler_map=None): """ self._feature_dimension = feature_dimension self._num_qubits = self._feature_dimension = feature_dimension - self._depth = 1 - self._copies = 1 if entangler_map is None: self._entangler_map = [[i, j] for i in range(self._feature_dimension) for j in range(i + 1, self._feature_dimension)] diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index 5663269b6..fc1bd001f 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -64,7 +64,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): mat[index_1][index_2] = counts.get(measurement_basis, 0) / shots # kernel matrix element is the probability of measuring all 0s mat[index_2][index_1] = mat[index_1][index_2] # kernel matrix is symmetric - return mat ** self._feature_map._copies + return mat else: @@ -90,7 +90,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): mat[index_1][index_2] = counts.get(measurement_basis, 0) / shots i += 1 - return mat ** self._feature_map._copies + return mat def _run_circuits(self, circuits): """Execute the input circuits.""" diff --git a/qka/qka.py b/qka/qka.py index b923fff8f..8a7c891a9 100644 --- a/qka/qka.py +++ b/qka/qka.py @@ -19,9 +19,6 @@ def __init__(self, feature_map, backend, verbose=True): self.feature_map = feature_map self.feature_map_circuit = self.feature_map.construct_circuit # the feature map circuit not yet evaluated with input arguments self.backend = backend - self.num_qubits = self.feature_map._num_qubits - self.depth = self.feature_map._depth - self.entangler_map = self.feature_map._entangler_map self.num_parameters = self.feature_map._num_parameters # number of parameters (lambdas) in the feature map self.verbose = verbose diff --git a/qka/test.py b/qka/test.py index 0935e2557..14d1f828f 100644 --- a/qka/test.py +++ b/qka/test.py @@ -26,6 +26,8 @@ x_train = np.concatenate((data_plus.T[:num_train], data_minus.T[:num_train])) y_train = np.concatenate((-1*np.ones(num_train), np.ones(num_train))) +print(np.shape(x_train)) + x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 8e9484142..66b4e8123 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -25,8 +25,6 @@ def __init__(self, feature_dimension, entangler_map=None): """ self._feature_dimension = feature_dimension self._num_qubits = self._feature_dimension = feature_dimension - self._depth = 1 - self._copies = 1 if entangler_map is None: self._entangler_map = [[i, j] for i in range(self._feature_dimension) for j in range(i + 1, self._feature_dimension)] @@ -150,7 +148,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): mat[index_1][index_2] = counts.get(measurement_basis, 0) / shots # kernel matrix element is the probability of measuring all 0s mat[index_2][index_1] = mat[index_1][index_2] # kernel matrix is symmetric - return mat ** self._feature_map._copies + return mat else: @@ -179,30 +177,25 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): mat[index_1][index_2] = counts.get(measurement_basis, 0) / shots i += 1 - return mat ** self._feature_map._copies + return mat class QKA: """The quantum kernel alignment algorithm.""" - def __init__(self, feature_map, backend, verbose=True): + def __init__(self, feature_map, backend): """Constructor. Args: feature_map (partial obj): the quantum feature map object backend (Backend): the backend instance - verbose (bool): print output during course of algorithm """ self.feature_map = feature_map self.feature_map_circuit = self.feature_map.construct_circuit # the feature map circuit not yet evaluated with input arguments self.backend = backend - self.num_qubits = self.feature_map._num_qubits - self.depth = self.feature_map._depth - self.entangler_map = self.feature_map._entangler_map self.num_parameters = self.feature_map._num_parameters # number of parameters (lambdas) in the feature map - self.verbose = verbose self.result = {} self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend) @@ -365,8 +358,6 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 for count in range(maxiters): - # if self.verbose: print('\n\n SPSA step {} of {}:\n'.format(count+1, maxiters)) - # (STEP 1 OF PSEUDOCODE) # First stage of SPSA optimization. @@ -396,8 +387,6 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 cost_final, lambda_best = self.spsa_step_two(cost_plus=cost_plus, cost_minus=cost_minus, lambdas=lambdas, spsa_params=spsa_params, delta=delta, count=count) - # if self.verbose: print('\n\n\033[92m Cost: {}\033[00m'.format(cost_final)) - lambdas = lambda_best # updated kernel parameters intrim_result = {'cost': cost_final, From b996ef4a55528f7ba47ee1a6aee0a51ae51c427e Mon Sep 17 00:00:00 2001 From: jenglick Date: Fri, 9 Apr 2021 16:52:25 -0400 Subject: [PATCH 02/18] replace qobj with circuits in backend run --- qka/kernel_matrix.py | 3 +-- qka/test.py | 4 +--- runtime/circuit_runner.py | 3 +-- runtime/qka_runtime_outer.py | 6 ++---- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index fc1bd001f..4564f6407 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -105,5 +105,4 @@ def _run_circuits(self, circuits): except Exception: # Fall back to run without runtime. transpiled = transpile(circuits, backend=self._backend) - qobj = assemble(transpiled, backend=self._backend, shots=8192) - return self._backend.run(qobj).result() + return self._backend.run(transpiled, shots=8192).result() diff --git a/qka/test.py b/qka/test.py index 14d1f828f..36c338e79 100644 --- a/qka/test.py +++ b/qka/test.py @@ -15,7 +15,7 @@ num_train=10 # number of training samples per class num_test=10 # number of test samples per class C=1 # SVM soft-margin penalty -maxiters=21 # number of SPSA iterations +maxiters=2 # number of SPSA iterations entangler_map=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] @@ -26,8 +26,6 @@ x_train = np.concatenate((data_plus.T[:num_train], data_minus.T[:num_train])) y_train = np.concatenate((-1*np.ones(num_train), np.ones(num_train))) -print(np.shape(x_train)) - x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) diff --git a/runtime/circuit_runner.py b/runtime/circuit_runner.py index b734fc6ac..f68fa2dba 100644 --- a/runtime/circuit_runner.py +++ b/runtime/circuit_runner.py @@ -64,8 +64,7 @@ def main(backend, **kwargs): if not circs: raise ValueError("Circuits are required.") transpiled = transpile(circuits=circs, backend=backend, **kwargs) - qobj = assemble(transpiled, backend=backend, shots=8192) # TODO - remove when not using Aer - result = backend.run(qobj).result() + result = backend.run(transpiled, shots=8192).result() print(json.dumps({'results': result}, cls=RuntimeEncoder)) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 66b4e8123..debca1ae0 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -134,8 +134,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): experiments.append(circuit) experiments = transpile(experiments, backend=self._backend) - qobj = assemble(experiments, backend=self._backend, shots=8192) - program_data = self._backend.run(qobj).result() + program_data = self._backend.run(experiments, shots=8192).result() self.results['program_data'] = program_data @@ -161,8 +160,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): experiments.append(circuit) experiments = transpile(experiments, backend=self._backend) - qobj = assemble(experiments, backend=self._backend, shots=8192) - program_data = self._backend.run(qobj).result() + program_data = self._backend.run(experiments, shots=8192).result() self.results['program_data'] = program_data From 943479bae2a53cce49484a2a456f54163f2f55c7 Mon Sep 17 00:00:00 2001 From: jenglick Date: Fri, 9 Apr 2021 17:13:27 -0400 Subject: [PATCH 03/18] use compose to add circuits instead of + --- qka/kernel_matrix.py | 14 +++++++++----- runtime/qka_runtime_outer.py | 12 +++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index 4564f6407..20d2742df 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -1,7 +1,7 @@ import numpy as np import itertools -from qiskit.compiler import transpile, assemble +from qiskit.compiler import transpile class KernelMatrix: @@ -47,9 +47,11 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): my_product_list = list(itertools.combinations(range(len(x1_vec)), 2)) # all pairwise combos of datapoint indices for index_1, index_2 in my_product_list: - circuit = self._feature_map_circuit(x=x1_vec[index_1], parameters=parameters, name='{}_{}'.format(index_1, index_2)) - circuit += self._feature_map_circuit(x=x1_vec[index_2], parameters=parameters, inverse=True) + circuit_1 = self._feature_map_circuit(x=x1_vec[index_1], parameters=parameters, name='{}_{}'.format(index_1, index_2)) + circuit_2 = self._feature_map_circuit(x=x1_vec[index_2], parameters=parameters, inverse=True) + circuit = circuit_1.compose(circuit_2) circuit.measure_all() + experiments.append(circuit) program_data = self._run_circuits(experiments) @@ -71,9 +73,11 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): for index_1, point_1 in enumerate(x1_vec): for index_2, point_2 in enumerate(x2_vec): - circuit = self._feature_map_circuit(x=point_1, parameters=parameters, name='{}_{}'.format(index_1, index_2)) - circuit += self._feature_map_circuit(x=point_2, parameters=parameters, inverse=True) + circuit_1 = self._feature_map_circuit(x=point_1, parameters=parameters, name='{}_{}'.format(index_1, index_2)) + circuit_2 = self._feature_map_circuit(x=point_2, parameters=parameters, inverse=True) + circuit = circuit_1.compose(circuit_2) circuit.measure_all() + experiments.append(circuit) program_data = self._run_circuits(experiments) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index debca1ae0..4999c7c6f 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -2,7 +2,7 @@ from numpy.random import RandomState import itertools from qiskit import QuantumCircuit, QuantumRegister -from qiskit.compiler import transpile, assemble +from qiskit.compiler import transpile from cvxopt import matrix, solvers from typing import Any @@ -128,8 +128,9 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): my_product_list = list(itertools.combinations(range(len(x1_vec)), 2)) # all pairwise combos of datapoint indices for index_1, index_2 in my_product_list: - circuit = self._feature_map_circuit(x=x1_vec[index_1], parameters=parameters, name='{}_{}'.format(index_1, index_2)) - circuit += self._feature_map_circuit(x=x1_vec[index_2], parameters=parameters, inverse=True) + circuit_1 = self._feature_map_circuit(x=x1_vec[index_1], parameters=parameters, name='{}_{}'.format(index_1, index_2)) + circuit_2 = self._feature_map_circuit(x=x1_vec[index_2], parameters=parameters, inverse=True) + circuit = circuit_1.compose(circuit_2) circuit.measure_all() experiments.append(circuit) @@ -154,8 +155,9 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): for index_1, point_1 in enumerate(x1_vec): for index_2, point_2 in enumerate(x2_vec): - circuit = self._feature_map_circuit(x=point_1, parameters=parameters, name='{}_{}'.format(index_1, index_2)) - circuit += self._feature_map_circuit(x=point_2, parameters=parameters, inverse=True) + circuit_1 = self._feature_map_circuit(x=point_1, parameters=parameters, name='{}_{}'.format(index_1, index_2)) + circuit_2 = self._feature_map_circuit(x=point_2, parameters=parameters, inverse=True) + circuit = circuit_1.compose(circuit_2) circuit.measure_all() experiments.append(circuit) From 38581f411956db707d380913419da6129faaa7e6 Mon Sep 17 00:00:00 2001 From: jenglick Date: Fri, 9 Apr 2021 17:24:31 -0400 Subject: [PATCH 04/18] cleaned up comments --- qka/qka.py | 2 - runtime/qka_runtime_outer.py | 79 ++++++++---------------------------- 2 files changed, 18 insertions(+), 63 deletions(-) diff --git a/qka/qka.py b/qka/qka.py index 8a7c891a9..cf49447b2 100644 --- a/qka/qka.py +++ b/qka/qka.py @@ -183,14 +183,12 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 # Pre-computed spsa parameters: spsa_params = self.SPSA_parameters() - # Save data at each SPSA run in the following lists: lambda_save = [] # updated kernel parameters after each spsa step cost_final_save = [] # avgerage cost at each spsa step cost_plus_save = [] # (+) cost at each spsa step cost_minus_save = [] # (-) cost at each spsa step program_data = [] - # ##################### # Start the alignment: diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 4999c7c6f..6a22bc774 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -95,9 +95,9 @@ def __init__(self, feature_map, backend): """ self._feature_map = feature_map - self._feature_map_circuit = self._feature_map.construct_circuit # the feature map circuit + self._feature_map_circuit = self._feature_map.construct_circuit self._backend = backend - self.results = {} # store the results object (program_data) + self.results = {} def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): @@ -192,12 +192,11 @@ def __init__(self, feature_map, backend): """ self.feature_map = feature_map - self.feature_map_circuit = self.feature_map.construct_circuit # the feature map circuit not yet evaluated with input arguments + self.feature_map_circuit = self.feature_map.construct_circuit self.backend = backend - self.num_parameters = self.feature_map._num_parameters # number of parameters (lambdas) in the feature map + self.num_parameters = self.feature_map._num_parameters self.result = {} - self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend) def SPSA_parameters(self): @@ -212,16 +211,13 @@ def SPSA_parameters(self): c_i = c / (i + 1) ** gamma, for fixed coefficents a, c, alpha, gamma, A. - - Default Qiskit values are: - SPSA_params = [2*np.pi*0.1, 0.1, 0.602, 0.101, 0] """ SPSA_params = np.zeros((5)) SPSA_params[0] = 0.05 # a SPSA_params[1] = 0.1 # c - SPSA_params[2] = 0.602 # alpha (alpha range [0.5 - 1.0]) - SPSA_params[3] = 0.101 # gamma (gamma range [0.0 - 0.5]) + SPSA_params[2] = 0.602 # alpha + SPSA_params[3] = 0.101 # gamma SPSA_params[4] = 0 # A return SPSA_params @@ -249,13 +245,12 @@ def cvxopt_solver(self, K, y, C, max_iters=10000, show_progress=False): y = y.astype('float') - P = matrix(H) # (nxn) yy^T * K, element-wise multiplication - q = matrix(f) # (nx1) -ones - G = matrix(np.vstack((-np.eye((n)), np.eye((n))))) # for soft-margin, (2nxn) matrix with -identity (+identity) in top (bottom) half - h = matrix(np.vstack((np.zeros((n,1)), np.ones((n,1)) * C))) # for soft-margin, (2nx1) vector with 0's (C's) in top (bottom) half - A = matrix(y, y.T.shape) # (1xn) y - b = matrix(np.zeros(1), (1, 1)) # (1x1) zero - + P = matrix(H) + q = matrix(f) + G = matrix(np.vstack((-np.eye((n)), np.eye((n))))) + h = matrix(np.vstack((np.zeros((n,1)), np.ones((n,1)) * C))) + A = matrix(y, y.T.shape) + b = matrix(np.zeros(1), (1, 1)) solvers.options['maxiters'] = max_iters solvers.options['show_progress'] = show_progress @@ -342,73 +337,42 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 else: lambdas = np.random.uniform(-1.0, 1.0, size=(self.num_parameters)) - # Pre-computed spsa parameters: spsa_params = self.SPSA_parameters() - # Save data at each SPSA run in the following lists: - lambda_save = [] # updated kernel parameters after each spsa step - cost_final_save = [] # avgerage cost at each spsa step - cost_plus_save = [] # (+) cost at each spsa step - cost_minus_save = [] # (-) cost at each spsa step - program_data = [] - - - # ##################### - # Start the alignment: + lambda_save = [] + cost_final_save = [] for count in range(maxiters): - # (STEP 1 OF PSEUDOCODE) - # First stage of SPSA optimization. - lambda_plus, lambda_minus, delta = self.spsa_step_one(lambdas=lambdas, spsa_params=spsa_params, count=count) - # (STEP 2 OF PSEUDOCODE) - # Evaluate kernel matrix for the (+) and (-) kernel parameters. - kernel_plus = self.kernel_matrix.construct_kernel_matrix(x1_vec=data, x2_vec=data, parameters=lambda_plus) kernel_minus = self.kernel_matrix.construct_kernel_matrix(x1_vec=data, x2_vec=data, parameters=lambda_minus) - # (STEP 3 OF PSEUDOCODE) - # Maximize SVM objective function over - # support vectors in the (+) and (-) directions. - ret_plus = self.cvxopt_solver(K=kernel_plus, y=labels, C=C) cost_plus = -1 * ret_plus['primal objective'] ret_minus = self.cvxopt_solver(K=kernel_minus, y=labels, C=C) cost_minus = -1 * ret_minus['primal objective'] - # (STEP 4 OF PSEUDOCODE) - # Second stage of SPSA optimization: - # (one iteration of SPSA on SVM objective function F - # and return updated kernel parameters). - cost_final, lambda_best = self.spsa_step_two(cost_plus=cost_plus, cost_minus=cost_minus, lambdas=lambdas, spsa_params=spsa_params, delta=delta, count=count) - lambdas = lambda_best # updated kernel parameters + lambdas = lambda_best intrim_result = {'cost': cost_final, 'kernel_parameters': lambdas} - # intrim_result = {'cost': cost_final, - # 'lambda': lambdas, 'cost_plus': cost_plus, - # 'cost_minus': cost_minus, 'cost_final': cost_final} + post_interim_result(intrim_result) lambda_save.append(lambdas) - cost_plus_save.append(cost_plus) - cost_minus_save.append(cost_minus) cost_final_save.append(cost_final) - program_data.append(self.kernel_matrix.results) - - # Evaluate aligned kernel matrix with optimized set of parameters averaged over last 10% of SPSA steps: num_last_lambdas = int(len(lambda_save) * 0.10) if num_last_lambdas > 0: - last_lambdas = np.array(lambda_save)[-num_last_lambdas:, :] # the last 10% of lambdas - lambdas = np.sum(last_lambdas, axis=0) / num_last_lambdas # average over last 10% lambdas + last_lambdas = np.array(lambda_save)[-num_last_lambdas:, :] + lambdas = np.sum(last_lambdas, axis=0) / num_last_lambdas else: lambdas = np.array(lambda_save)[-1,:] @@ -417,13 +381,6 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 self.result['aligned_kernel_parameters'] = lambdas self.result['aligned_kernel_matrix'] = kernel_best - # self.result['all_kernel_parameters'] = lambda_save - # self.result['all_final_cost_evaluations'] = cost_final_save - # self.result['all_positive_cost_evaluations'] = cost_plus_save - # self.result['all_negative_cost_evaluations'] = cost_minus_save - - # self.result['program_data'] = program_data - return self.result From b450d1694a06342bcb9f6d9da81d14eac47fcccd Mon Sep 17 00:00:00 2001 From: jenglick Date: Thu, 15 Apr 2021 10:43:28 -0400 Subject: [PATCH 05/18] updated encoder decoder --- QKA_demo_outer.ipynb | 154 ++++++----------------------------- runtime/qka_runtime_outer.py | 62 +++++++------- 2 files changed, 58 insertions(+), 158 deletions(-) diff --git a/QKA_demo_outer.ipynb b/QKA_demo_outer.ipynb index 55c2a2970..ad0f75fd1 100644 --- a/QKA_demo_outer.ipynb +++ b/QKA_demo_outer.ipynb @@ -11,7 +11,8 @@ "outputs": [], "source": [ "import os\n", - "os.environ[\"PYTHON_EXEC\"] = \"/Users/jessieyu/.pyenv/versions/qka-demo/bin/python3\"\n", + "# os.environ[\"PYTHON_EXEC\"] = \"/Users/jessieyu/.pyenv/versions/qka-demo/bin/python3\"\n", + "os.environ[\"PYTHON_EXEC\"] = \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/bin/python\"\n", "os.environ[\"NTC_DOC_FILE\"] = \"runtime/program_doc.json\"\n", "os.environ[\"NTC_PROGRAM_FILE\"] = \"runtime/qka_runtime_outer.py\"" ] @@ -164,7 +165,7 @@ "num_train=10 # number of training samples per class\n", "num_test=7 # number of test samples per class\n", "C=1 # SVM soft-margin penalty\n", - "maxiters=21 # number of SPSA iterations\n", + "maxiters=2 # number of SPSA iterations\n", "\n", "entangler_map=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]]\n", "\n", @@ -182,7 +183,7 @@ "initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy\n", "fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map)\n", "\n", - "backend = provider.backend.ibmq_qasm_simulator" + "backend = provider.backend.ibmq_qasm_simulator\n" ] }, { @@ -212,47 +213,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "interim result: {'cost': 10.585411410548094, 'kernel_parameters': array([0.28922397])}\n", + "{\"post\": {\"cost\": 10.582195964673206, \"kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.28058580667214217]}}}\n", "\n", - "interim result: {'cost': 9.482754041366878, 'kernel_parameters': array([0.55144409])}\n", + "{\"post\": {\"cost\": 9.556517614535728, \"kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.5368056491471374]}}}\n", "\n", - "interim result: {'cost': 7.170261123846278, 'kernel_parameters': array([0.7874011])}\n", + "{\"results\": {\"aligned_kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.5368056491471374]}, \"aligned_kernel_matrix\": {\"__type__\": \"array\", \"__value__\": [[1.0, 0.1722412109375, 0.2125244140625, 0.0589599609375, 0.219482421875, 0.053466796875, 0.063232421875, 0.013427734375, 0.2105712890625, 0.0445556640625, 0.4622802734375, 0.0858154296875, 0.146728515625, 0.0386962890625, 0.158447265625, 0.0509033203125, 0.03173828125, 0.0111083984375, 0.1683349609375, 0.027099609375], [0.1722412109375, 1.0, 0.060546875, 0.365478515625, 0.0408935546875, 0.141845703125, 0.0115966796875, 0.0550537109375, 0.0506591796875, 0.18603515625, 0.080322265625, 0.0379638671875, 0.03564453125, 0.015625, 0.03662109375, 0.0111083984375, 0.0096435546875, 0.0052490234375, 0.03125, 0.0111083984375], [0.2125244140625, 0.060546875, 1.0, 0.220703125, 0.0535888671875, 0.0157470703125, 0.2484130859375, 0.0552978515625, 0.06640625, 0.0174560546875, 0.1636962890625, 0.3031005859375, 0.042724609375, 0.1778564453125, 0.0299072265625, 0.1646728515625, 0.016357421875, 0.069580078125, 0.033203125, 0.1121826171875], [0.0589599609375, 0.365478515625, 0.220703125, 1.0, 0.0115966796875, 0.0692138671875, 0.0533447265625, 0.1954345703125, 0.0174560546875, 0.0640869140625, 0.0391845703125, 0.10205078125, 0.015869140625, 0.03955078125, 0.0108642578125, 0.0421142578125, 0.0042724609375, 0.0169677734375, 0.012451171875, 0.0394287109375], [0.219482421875, 0.0408935546875, 0.0535888671875, 0.0115966796875, 1.0, 0.197021484375, 0.18408203125, 0.0489501953125, 0.05126953125, 0.0123291015625, 0.17333984375, 0.031982421875, 0.0467529296875, 0.0150146484375, 0.04931640625, 0.0125732421875, 0.0203857421875, 0.0050048828125, 0.03466796875, 0.01123046875], [0.053466796875, 0.141845703125, 0.0157470703125, 0.0692138671875, 0.197021484375, 1.0, 0.0638427734375, 0.193115234375, 0.0196533203125, 0.0540771484375, 0.036376953125, 0.0067138671875, 0.013427734375, 0.002685546875, 0.0096435546875, 0.003662109375, 0.0028076171875, 0.000244140625, 0.0115966796875, 0.005615234375], [0.063232421875, 0.0115966796875, 0.2484130859375, 0.0533447265625, 0.18408203125, 0.0638427734375, 1.0, 0.203369140625, 0.0130615234375, 0.0045166015625, 0.0224609375, 0.083740234375, 0.0106201171875, 0.044677734375, 0.0096435546875, 0.04150390625, 0.003173828125, 0.011474609375, 0.00927734375, 0.016845703125], [0.013427734375, 0.0550537109375, 0.0552978515625, 0.1954345703125, 0.0489501953125, 0.193115234375, 0.203369140625, 1.0, 0.003662109375, 0.0186767578125, 0.0078125, 0.0223388671875, 0.003173828125, 0.0135498046875, 0.0035400390625, 0.0079345703125, 0.00146484375, 0.00390625, 0.00244140625, 0.001953125], [0.2105712890625, 0.0506591796875, 0.06640625, 0.0174560546875, 0.05126953125, 0.0196533203125, 0.0130615234375, 0.003662109375, 1.0, 0.1929931640625, 0.211669921875, 0.0291748046875, 0.042236328125, 0.0103759765625, 0.0352783203125, 0.007080078125, 0.012939453125, 0.003173828125, 0.053466796875, 0.016845703125], [0.0445556640625, 0.18603515625, 0.0174560546875, 0.0640869140625, 0.0123291015625, 0.0540771484375, 0.0045166015625, 0.0186767578125, 0.1929931640625, 1.0, 0.0335693359375, 0.0062255859375, 0.008544921875, 0.0028076171875, 0.012451171875, 0.0018310546875, 0.001708984375, 0.0006103515625, 0.010009765625, 0.003662109375], [0.4622802734375, 0.080322265625, 0.1636962890625, 0.0391845703125, 0.17333984375, 0.036376953125, 0.0224609375, 0.0078125, 0.211669921875, 0.0335693359375, 1.0, 0.197021484375, 0.185791015625, 0.0582275390625, 0.205810546875, 0.0557861328125, 0.0611572265625, 0.0159912109375, 0.2381591796875, 0.05712890625], [0.0858154296875, 0.0379638671875, 0.3031005859375, 0.10205078125, 0.031982421875, 0.0067138671875, 0.083740234375, 0.0223388671875, 0.0291748046875, 0.0062255859375, 0.197021484375, 1.0, 0.0994873046875, 0.175537109375, 0.1329345703125, 0.264892578125, 0.015869140625, 0.049072265625, 0.0736083984375, 0.2049560546875], [0.146728515625, 0.03564453125, 0.042724609375, 0.015869140625, 0.0467529296875, 0.013427734375, 0.0106201171875, 0.003173828125, 0.042236328125, 0.008544921875, 0.185791015625, 0.0994873046875, 1.0, 0.1978759765625, 0.0634765625, 0.010498046875, 0.17626953125, 0.05419921875, 0.0577392578125, 0.0115966796875], [0.0386962890625, 0.015625, 0.1778564453125, 0.03955078125, 0.0150146484375, 0.002685546875, 0.044677734375, 0.0135498046875, 0.0103759765625, 0.0028076171875, 0.0582275390625, 0.175537109375, 0.1978759765625, 1.0, 0.0137939453125, 0.058837890625, 0.046875, 0.2113037109375, 0.01611328125, 0.056884765625], [0.158447265625, 0.03662109375, 0.0299072265625, 0.0108642578125, 0.04931640625, 0.0096435546875, 0.0096435546875, 0.0035400390625, 0.0352783203125, 0.012451171875, 0.205810546875, 0.1329345703125, 0.0634765625, 0.0137939453125, 1.0, 0.2093505859375, 0.216796875, 0.0667724609375, 0.0606689453125, 0.0164794921875], [0.0509033203125, 0.0111083984375, 0.1646728515625, 0.0421142578125, 0.0125732421875, 0.003662109375, 0.04150390625, 0.0079345703125, 0.007080078125, 0.0018310546875, 0.0557861328125, 0.264892578125, 0.010498046875, 0.058837890625, 0.2093505859375, 1.0, 0.0596923828125, 0.2166748046875, 0.01171875, 0.053955078125], [0.03173828125, 0.0096435546875, 0.016357421875, 0.0042724609375, 0.0203857421875, 0.0028076171875, 0.003173828125, 0.00146484375, 0.012939453125, 0.001708984375, 0.0611572265625, 0.015869140625, 0.17626953125, 0.046875, 0.216796875, 0.0596923828125, 1.0, 0.223876953125, 0.0152587890625, 0.0035400390625], [0.0111083984375, 0.0052490234375, 0.069580078125, 0.0169677734375, 0.0050048828125, 0.000244140625, 0.011474609375, 0.00390625, 0.003173828125, 0.0006103515625, 0.0159912109375, 0.049072265625, 0.05419921875, 0.2113037109375, 0.0667724609375, 0.2166748046875, 0.223876953125, 1.0, 0.005126953125, 0.01025390625], [0.1683349609375, 0.03125, 0.033203125, 0.012451171875, 0.03466796875, 0.0115966796875, 0.00927734375, 0.00244140625, 0.053466796875, 0.010009765625, 0.2381591796875, 0.0736083984375, 0.0577392578125, 0.01611328125, 0.0606689453125, 0.01171875, 0.0152587890625, 0.005126953125, 1.0, 0.1983642578125], [0.027099609375, 0.0111083984375, 0.1121826171875, 0.0394287109375, 0.01123046875, 0.005615234375, 0.016845703125, 0.001953125, 0.016845703125, 0.003662109375, 0.05712890625, 0.2049560546875, 0.0115966796875, 0.056884765625, 0.0164794921875, 0.053955078125, 0.0035400390625, 0.01025390625, 0.1983642578125, 1.0]]}}}\n", "\n", - "interim result: {'cost': 5.2901342120561665, 'kernel_parameters': array([0.94536816])}\n", - "\n", - "interim result: {'cost': 4.278665316108828, 'kernel_parameters': array([1.05452627])}\n", - "\n", - "interim result: {'cost': 3.7185993231125707, 'kernel_parameters': array([1.1272473])}\n", - "\n", - "interim result: {'cost': 3.43303394550185, 'kernel_parameters': array([1.18390779])}\n", - "\n", - "interim result: {'cost': 3.2555699898088952, 'kernel_parameters': array([1.2251351])}\n", - "\n", - "interim result: {'cost': 3.1401744410551706, 'kernel_parameters': array([1.25626871])}\n", - "\n", - "interim result: {'cost': 3.0781005931677026, 'kernel_parameters': array([1.28121874])}\n", - "\n", - "interim result: {'cost': 3.0493159681810447, 'kernel_parameters': array([1.29932717])}\n", - "\n", - "interim result: {'cost': 2.998375863291555, 'kernel_parameters': array([1.31688929])}\n", - "\n", - "interim result: {'cost': 2.961070450823304, 'kernel_parameters': array([1.32833349])}\n", - "\n", - "interim result: {'cost': 2.9625330098055667, 'kernel_parameters': array([1.34125525])}\n", - "\n", - "interim result: {'cost': 2.940409296591114, 'kernel_parameters': array([1.35191929])}\n", - "\n", - "interim result: {'cost': 2.939171554295763, 'kernel_parameters': array([1.35938234])}\n", - "\n", - "interim result: {'cost': 2.923306541270239, 'kernel_parameters': array([1.36753745])}\n", - "\n", - "interim result: {'cost': 2.9175885404441972, 'kernel_parameters': array([1.3751509])}\n", - "\n", - "interim result: {'cost': 2.9036159966744663, 'kernel_parameters': array([1.38113179])}\n", - "\n", - "interim result: {'cost': 2.909333659032173, 'kernel_parameters': array([1.38783077])}\n", - "\n", - "interim result: {'cost': 2.8958447037424984, 'kernel_parameters': array([1.3921769])}\n", "\n" ] } @@ -268,16 +234,16 @@ " 'C': C\n", "}\n", "options = {'backend_name': backend.name()}\n", - "result = provider.runtime.run(program_name=\"Quantum-Kernel-Alignment\",\n", + "result = provider.runtime.run(program_id=\"Quantum-Kernel-Alignment\",\n", " options=options,\n", - " params=runtime_params,\n", + " inputs=runtime_params,\n", " callback=interim_result_callback,\n", - " ).result()\n" + " ).result()\n" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -285,92 +251,24 @@ "output_type": "stream", "text": [ "final result:\n", - "aligned_kernel_parameters: [1.39000383]\n", - "aligned_kernel_matrix: [[1. 0.66223145 0.65759277 0.62219238 0.70458984 0.57116699\n", - " 0.69287109 0.64807129 0.6237793 0.61425781 0.18359375 0.11657715\n", - " 0.19873047 0.28173828 0.20043945 0.21569824 0.22705078 0.26098633\n", - " 0.29650879 0.21252441]\n", - " [0.66223145 1. 0.61047363 0.57861328 0.60180664 0.53442383\n", - " 0.60412598 0.62182617 0.58227539 0.56481934 0.14306641 0.10534668\n", - " 0.24035645 0.28308105 0.22009277 0.25805664 0.1998291 0.26928711\n", - " 0.2244873 0.27746582]\n", - " [0.65759277 0.61047363 1. 0.79003906 0.65710449 0.62084961\n", - " 0.73828125 0.61535645 0.57165527 0.7010498 0.28601074 0.16650391\n", - " 0.25537109 0.32495117 0.25695801 0.35900879 0.34460449 0.37890625\n", - " 0.32958984 0.2947998 ]\n", - " [0.62219238 0.57861328 0.79003906 1. 0.61010742 0.78100586\n", - " 0.66906738 0.68835449 0.65222168 0.80981445 0.25024414 0.17004395\n", - " 0.2590332 0.32775879 0.27355957 0.32189941 0.29980469 0.33190918\n", - " 0.30895996 0.30249023]\n", - " [0.70458984 0.60180664 0.65710449 0.61010742 1. 0.68579102\n", - " 0.69348145 0.64709473 0.6796875 0.56835938 0.38098145 0.22937012\n", - " 0.30456543 0.43554688 0.35925293 0.36853027 0.40649414 0.43811035\n", - " 0.4864502 0.37255859]\n", - " [0.57116699 0.53442383 0.62084961 0.78100586 0.68579102 1.\n", - " 0.59399414 0.65319824 0.63500977 0.66955566 0.35131836 0.28942871\n", - " 0.2878418 0.42663574 0.38830566 0.42578125 0.41040039 0.48864746\n", - " 0.46069336 0.39599609]\n", - " [0.69287109 0.60412598 0.73828125 0.66906738 0.69348145 0.59399414\n", - " 1. 0.70422363 0.52905273 0.68151855 0.17675781 0.16638184\n", - " 0.23620605 0.32739258 0.23181152 0.2668457 0.23547363 0.31921387\n", - " 0.31298828 0.2545166 ]\n", - " [0.64807129 0.62182617 0.61535645 0.68835449 0.64709473 0.65319824\n", - " 0.70422363 1. 0.58911133 0.63208008 0.20080566 0.16796875\n", - " 0.22155762 0.28637695 0.2166748 0.2232666 0.20361328 0.28674316\n", - " 0.28894043 0.24230957]\n", - " [0.6237793 0.58227539 0.57165527 0.65222168 0.6796875 0.63500977\n", - " 0.52905273 0.58911133 1. 0.57922363 0.20959473 0.0760498\n", - " 0.1463623 0.25646973 0.21984863 0.26538086 0.19067383 0.22949219\n", - " 0.25463867 0.25183105]\n", - " [0.61425781 0.56481934 0.7010498 0.80981445 0.56835938 0.66955566\n", - " 0.68151855 0.63208008 0.57922363 1. 0.2052002 0.15136719\n", - " 0.26757812 0.26074219 0.28393555 0.31616211 0.25634766 0.30212402\n", - " 0.27380371 0.28393555]\n", - " [0.18359375 0.14306641 0.28601074 0.25024414 0.38098145 0.35131836\n", - " 0.17675781 0.20080566 0.20959473 0.2052002 1. 0.44104004\n", - " 0.51245117 0.60717773 0.66027832 0.60058594 0.65234375 0.61767578\n", - " 0.68469238 0.49194336]\n", - " [0.11657715 0.10534668 0.16650391 0.17004395 0.22937012 0.28942871\n", - " 0.16638184 0.16796875 0.0760498 0.15136719 0.44104004 1.\n", - " 0.5447998 0.54797363 0.59643555 0.47619629 0.58398438 0.67871094\n", - " 0.66271973 0.5222168 ]\n", - " [0.19873047 0.24035645 0.25537109 0.2590332 0.30456543 0.2878418\n", - " 0.23620605 0.22155762 0.1463623 0.26757812 0.51245117 0.5447998\n", - " 1. 0.65686035 0.81030273 0.57324219 0.55053711 0.6138916\n", - " 0.61096191 0.60644531]\n", - " [0.28173828 0.28308105 0.32495117 0.32775879 0.43554688 0.42663574\n", - " 0.32739258 0.28637695 0.25646973 0.26074219 0.60717773 0.54797363\n", - " 0.65686035 1. 0.72363281 0.71069336 0.6151123 0.76245117\n", - " 0.7310791 0.65600586]\n", - " [0.20043945 0.22009277 0.25695801 0.27355957 0.35925293 0.38830566\n", - " 0.23181152 0.2166748 0.21984863 0.28393555 0.66027832 0.59643555\n", - " 0.81030273 0.72363281 1. 0.74645996 0.69726562 0.75695801\n", - " 0.73681641 0.63842773]\n", - " [0.21569824 0.25805664 0.35900879 0.32189941 0.36853027 0.42578125\n", - " 0.2668457 0.2232666 0.26538086 0.31616211 0.60058594 0.47619629\n", - " 0.57324219 0.71069336 0.74645996 1. 0.66027832 0.75390625\n", - " 0.63842773 0.74304199]\n", - " [0.22705078 0.1998291 0.34460449 0.29980469 0.40649414 0.41040039\n", - " 0.23547363 0.20361328 0.19067383 0.25634766 0.65234375 0.58398438\n", - " 0.55053711 0.6151123 0.69726562 0.66027832 1. 0.84106445\n", - " 0.68286133 0.58544922]\n", - " [0.26098633 0.26928711 0.37890625 0.33190918 0.43811035 0.48864746\n", - " 0.31921387 0.28674316 0.22949219 0.30212402 0.61767578 0.67871094\n", - " 0.6138916 0.76245117 0.75695801 0.75390625 0.84106445 1.\n", - " 0.75354004 0.64135742]\n", - " [0.29650879 0.2244873 0.32958984 0.30895996 0.4864502 0.46069336\n", - " 0.31298828 0.28894043 0.25463867 0.27380371 0.68469238 0.66271973\n", - " 0.61096191 0.7310791 0.73681641 0.63842773 0.68286133 0.75354004\n", - " 1. 0.61010742]\n", - " [0.21252441 0.27746582 0.2947998 0.30249023 0.37255859 0.39599609\n", - " 0.2545166 0.24230957 0.25183105 0.28393555 0.49194336 0.5222168\n", - " 0.60644531 0.65600586 0.63842773 0.74304199 0.58544922 0.64135742\n", - " 0.61010742 1. ]]\n" + "{}\n" + ] + }, + { + "ename": "KeyError", + "evalue": "'aligned_kernel_parameters'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"final result:\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'aligned_kernel_parameters'" ] } ], "source": [ "print(\"final result:\")\n", + "print(result)\n", "print(f\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\")\n", "print(f\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\")" ] @@ -449,9 +347,9 @@ "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "Python [conda env:qiskit0.24.0python3.7] *", + "display_name": "Python [conda env:qiskit0.25.0python3.7] *", "language": "python", - "name": "conda-env-qiskit0.24.0python3.7-py" + "name": "conda-env-qiskit0.25.0python3.7-py" }, "language_info": { "codemirror_mode": { diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 6a22bc774..051231fa3 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -3,6 +3,7 @@ import itertools from qiskit import QuantumCircuit, QuantumRegister from qiskit.compiler import transpile +from qiskit.providers.ibmq.runtime.utils import RuntimeEncoder, RuntimeDecoder from cvxopt import matrix, solvers from typing import Any @@ -126,6 +127,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): if is_identical: my_product_list = list(itertools.combinations(range(len(x1_vec)), 2)) # all pairwise combos of datapoint indices + for index_1, index_2 in my_product_list: circuit_1 = self._feature_map_circuit(x=x1_vec[index_1], parameters=parameters, name='{}_{}'.format(index_1, index_2)) @@ -385,34 +387,34 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 def post_interim_result(text): - print(json.dumps({'post': text}, cls=NumpyEncoder)) - - -class NumpyEncoder(json.JSONEncoder): - """JSON Encoder for Numpy arrays and complex numbers.""" - - def default(self, obj: Any) -> Any: - if hasattr(obj, 'tolist'): - return {'type': 'array', 'value': obj.tolist()} - if isinstance(obj, complex): - return {'type': 'complex', 'value': [obj.real, obj.imag]} - return super().default(obj) - - -class NumpyDecoder(json.JSONDecoder): - """JSON Decoder for Numpy arrays and complex numbers.""" - - def __init__(self, *args, **kwargs): - super().__init__(object_hook=self.object_hook, *args, **kwargs) - - def object_hook(self, obj): - if 'type' in obj: - if obj['type'] == 'complex': - val = obj['value'] - return val[0] + 1j * val[1] - if obj['type'] == 'array': - return np.array(obj['value']) - return obj + print(json.dumps({'post': text}, cls=RuntimeEncoder)) + + +# class NumpyEncoder(json.JSONEncoder): +# """JSON Encoder for Numpy arrays and complex numbers.""" +# +# def default(self, obj: Any) -> Any: +# if hasattr(obj, 'tolist'): +# return {'type': 'array', 'value': obj.tolist()} +# if isinstance(obj, complex): +# return {'type': 'complex', 'value': [obj.real, obj.imag]} +# return super().default(obj) +# +# +# class NumpyDecoder(json.JSONDecoder): +# """JSON Decoder for Numpy arrays and complex numbers.""" +# +# def __init__(self, *args, **kwargs): +# super().__init__(object_hook=self.object_hook, *args, **kwargs) +# +# def object_hook(self, obj): +# if 'type' in obj: +# if obj['type'] == 'complex': +# val = obj['value'] +# return val[0] + 1j * val[1] +# if obj['type'] == 'array': +# return np.array(obj['value']) +# return obj def main(backend, *args, **kwargs): @@ -424,7 +426,7 @@ def main(backend, *args, **kwargs): qka = QKA(feature_map=fm, backend=backend) qka_results = qka.align_kernel(**kwargs) - print(json.dumps({'results': qka_results}, cls=NumpyEncoder)) + print(json.dumps({'results': qka_results}, cls=RuntimeEncoder)) if __name__ == '__main__': @@ -436,5 +438,5 @@ def main(backend, *args, **kwargs): user_params = {} if len(sys.argv) > 1: # If there are user parameters. - user_params = json.loads(sys.argv[1], cls=NumpyDecoder) + user_params = json.loads(sys.argv[1], cls=RuntimeDecoder) main(backend, **user_params) From 52ad97aa3cca30a50a4690a45551465865c8eee6 Mon Sep 17 00:00:00 2001 From: jenglick Date: Tue, 27 Apr 2021 12:34:58 -0400 Subject: [PATCH 06/18] removed verbose print option in qka runtime outer --- runtime/qka_runtime_outer.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 3d247730e..29b302d2c 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -188,13 +188,12 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): class QKA: """The quantum kernel alignment algorithm.""" - def __init__(self, feature_map, backend, verbose=True, user_messenger=None): + def __init__(self, feature_map, backend, user_messenger=None): """Constructor. Args: feature_map (partial obj): the quantum feature map object backend (Backend): the backend instance - verbose (bool): print output during course of algorithm user_messenger (UserMessenger): used to publish interim results. """ @@ -203,7 +202,6 @@ def __init__(self, feature_map, backend, verbose=True, user_messenger=None): self.backend = backend self.num_parameters = self.feature_map._num_parameters - self.verbose = verbose self._user_messenger = user_messenger self.result = {} self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend) @@ -371,9 +369,7 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 intrim_result = {'cost': cost_final, 'kernel_parameters': lambdas} - # intrim_result = {'cost': cost_final, - # 'lambda': lambdas, 'cost_plus': cost_plus, - # 'cost_minus': cost_minus, 'cost_final': cost_final} + self._user_messenger.publish(intrim_result) lambda_save.append(lambdas) From 7f0d81db9f7965a4d233c42c220e7854847a8230 Mon Sep 17 00:00:00 2001 From: jenglick Date: Tue, 27 Apr 2021 12:36:22 -0400 Subject: [PATCH 07/18] fixed intrim typo --- runtime/qka_runtime_outer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 29b302d2c..4d69f702f 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -367,10 +367,10 @@ def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10 lambdas = lambda_best - intrim_result = {'cost': cost_final, + interim_result = {'cost': cost_final, 'kernel_parameters': lambdas} - self._user_messenger.publish(intrim_result) + self._user_messenger.publish(interim_result) lambda_save.append(lambdas) cost_final_save.append(cost_final) From 34c204d808bb73ceb993d92d2307ef0b5309aa33 Mon Sep 17 00:00:00 2001 From: jenglick Date: Wed, 28 Apr 2021 18:42:12 -0400 Subject: [PATCH 08/18] expose option for transpiler initial layout in runtime inputs --- QKA_demo_outer.ipynb | 229 +++++++++++++++++++++++++---------- qka/kernel_matrix.py | 19 ++- qka/qka.py | 6 +- qka/test.py | 68 ++++++++--- runtime/qka_runtime_outer.py | 22 +++- 5 files changed, 251 insertions(+), 93 deletions(-) diff --git a/QKA_demo_outer.ipynb b/QKA_demo_outer.ipynb index 22eb90d35..f8953edcf 100644 --- a/QKA_demo_outer.ipynb +++ b/QKA_demo_outer.ipynb @@ -1,8 +1,36 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Kernel Alignment with Qiskit Runtime\n", + "\n", + "Classification problems are widespread in machine learning applications. A common method for tackling these problems is the support vector machine (SVM) [1,2]. This supervised learning algorithm uses labeled training samples to find an optimal separating hyperplane between data classes and predict the labels of new data points. Often, data is not linearly separable in the original space. In these cases, the kernel trick is used to encode a transformation of the data into a higher-dimensional feature space through the inner product between pairs of data points, where the data may become separable.\n", + "\n", + "Quantum computers can be used to encode clasical data in a quantum-enhanced feature space. In 2019, IBM introduced a quantum algorithm called the quantum kernel estimator (QKE), which uses quantum circuits to evaluate inner products between data points in the quantum feature space [3]. More recently, IBM proved that on certain learning problems, quantum kernels can offer superpolynomial speedups over any classical learner [4]. This means that quantum kernels can someday offer quantum advantage on suitable problems. \n", + "\n", + "With SVMs in practice, one must make a choice about which kernel function to use. Sometimes, symmetries in the data can inform the choice of kernel, other times it is chosen in an ad hoc way. Kernel alignment is one approach to learning a kernel on a given dataset by iteratively adapting it to have high similarity to a target kernel informed from the underlying data distribution [5]. Using this concept, we introduce quantum kernel alignment (QKA), which is an algorithm for optimizing parametrized quantum kernels evaluated using the QKE [6]. One can show that finding a kernel that maximizes the alignment and the SVM margin is equivalent to the following problem:\n", + "\n", + "\\begin{equation}\n", + " \\mathrm{min}_{\\vec{\\lambda}} \\mathrm{max}_{\\vec{\\alpha}} F(\\vec{\\alpha}, \\vec{\\lambda}) ~~ \\textrm{subject to} ...\n", + "\\end{equation}\n", + "\n", + "TODO: discuss the specific problem we are solving...\n", + "\n", + "QKA is an iterative quantum-classical algorithm, in which classical optimizers are used to tune the parameters of a quantum kernel evaluated by executing quantum circuits. Qiskit Runtime is a new... TODO: discuss how runtime can help QKA run faster...\n", + "\n", + "[1] B. E. Boser, I. M. Guyon, and V. N. Vapnik, Proceedings of the Fifth Annual Workshop on Computational Learning Theory, COLT ’92 (Association for Computing Machinery, New York, NY, USA, 1992) pp. 144-152 [link](https://doi.org/10.1145/130385.130401)
\n", + "[2] V. Vapnik, The Nature of Statistical Learning Theory, Information Science and Statistics (Springer New York, 2013) [link](https://books.google.com/books?id=EqgACAAAQBAJ)
\n", + "[3] V. Havlíček, A. D. Córcoles, K. Temme, A. W. Harrow, A. Kandala, J. M. Chow, and J. M. Gambetta, Nature 567, 209-212 (2019) [link](https://doi.org/10.1038/s41586-019-0980-2)
\n", + "[4] Y. Liu, S. Arunachalam, and K. Temme, arXiv:2010.02174 (2020) [link](https://arxiv.org/abs/2010.02174)
\n", + "[5] N. Cristianini, J. Shawe-taylor, A. Elisseeff, and J. Kandola, Advances in Neural Information Processing Systems 14 (2001) [link](https://proceedings.neurips.cc/paper/2001/file/1f71e393b3809197ed66df836fe833e5-Paper.pdf)
\n", + "[6] Our ref - forthcoming..." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "fragment" @@ -28,6 +56,47 @@ "# Invoke Quantum Kernel Alignment program" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Prepare the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# load the dataset\n", + "\n", + "df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None)\n", + "data = df.values\n", + "num_features = int((np.shape(data)[1]-1)/2)\n", + "\n", + "# specify the training and testing sets\n", + "\n", + "num_train = 10 # number of training samples per class\n", + "num_test = 20 # number of test samples per class\n", + "\n", + "x_train = data[:2*num_train, :-1]\n", + "y_train = data[:2*num_train, -1]\n", + "\n", + "x_test = data[2*num_train:2*(num_train+num_test), :-1]\n", + "y_test = data[2*num_train:2*(num_train+num_test), -1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Configure the algorithm settings" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -38,29 +107,15 @@ }, "outputs": [], "source": [ - "import numpy as np\n", "from qiskit import Aer\n", "from qka.featuremaps import FeatureMapACME\n", - "from oct2py import octave\n", - "octave.addpath('/Users/jen/Q/code/quantum_kernel_data/')\n", "\n", - "num_features=10 # number of features in the input data\n", - "num_train=10 # number of training samples per class\n", - "num_test=7 # number of test samples per class\n", - "C=1 # SVM soft-margin penalty\n", - "maxiters=2 # number of SPSA iterations\n", + "# Set the parameters:\n", + "C = 1 # SVM soft-margin penalty\n", + "maxiters = 11 # number of SPSA iterations\n", "\n", - "entangler_map=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]]\n", - "\n", - "# Generate the data:\n", - "state=42 # setting the state for the random number generator\n", - "data_plus, data_minus = octave.generate_data(num_train+num_test, state, nout=2)\n", - "\n", - "x_train = np.concatenate((data_plus.T[:num_train], data_minus.T[:num_train]))\n", - "y_train = np.concatenate((-1*np.ones(num_train), np.ones(num_train)))\n", - "\n", - "x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:]))\n", - "y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test)))\n", + "entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # entanglers in the feature map\n", + "initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # mapping virtual qubits to physical qubits on the chip\n", "\n", "# Define the feature map and its initial parameters:\n", "initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy\n", @@ -83,8 +138,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { + "scrolled": false, "slideshow": { "slide_type": "slide" } @@ -94,12 +150,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "{\"post\": {\"cost\": 10.582195964673206, \"kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.28058580667214217]}}}\n", - "\n", - "{\"post\": {\"cost\": 9.556517614535728, \"kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.5368056491471374]}}}\n", + "c246fgs7jmf3kdh9vveg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "runtime_job._start_websocket_client:WARNING:2021-04-27 15:36:54,616: An error occurred while streaming results from the server for job c246fgs7jmf3kdh9vveg:\n", + "Traceback (most recent call last):\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 66, in _connect\n", + " websocket = await connect(url, extra_headers=self._header)\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/websockets/client.py\", line 547, in __await_impl__\n", + " extra_headers=protocol.extra_headers,\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/websockets/client.py\", line 296, in handshake\n", + " raise InvalidStatusCode(status_code)\n", + "websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 404\n", "\n", - "{\"results\": {\"aligned_kernel_parameters\": {\"__type__\": \"array\", \"__value__\": [0.5368056491471374]}, \"aligned_kernel_matrix\": {\"__type__\": \"array\", \"__value__\": [[1.0, 0.1722412109375, 0.2125244140625, 0.0589599609375, 0.219482421875, 0.053466796875, 0.063232421875, 0.013427734375, 0.2105712890625, 0.0445556640625, 0.4622802734375, 0.0858154296875, 0.146728515625, 0.0386962890625, 0.158447265625, 0.0509033203125, 0.03173828125, 0.0111083984375, 0.1683349609375, 0.027099609375], [0.1722412109375, 1.0, 0.060546875, 0.365478515625, 0.0408935546875, 0.141845703125, 0.0115966796875, 0.0550537109375, 0.0506591796875, 0.18603515625, 0.080322265625, 0.0379638671875, 0.03564453125, 0.015625, 0.03662109375, 0.0111083984375, 0.0096435546875, 0.0052490234375, 0.03125, 0.0111083984375], [0.2125244140625, 0.060546875, 1.0, 0.220703125, 0.0535888671875, 0.0157470703125, 0.2484130859375, 0.0552978515625, 0.06640625, 0.0174560546875, 0.1636962890625, 0.3031005859375, 0.042724609375, 0.1778564453125, 0.0299072265625, 0.1646728515625, 0.016357421875, 0.069580078125, 0.033203125, 0.1121826171875], [0.0589599609375, 0.365478515625, 0.220703125, 1.0, 0.0115966796875, 0.0692138671875, 0.0533447265625, 0.1954345703125, 0.0174560546875, 0.0640869140625, 0.0391845703125, 0.10205078125, 0.015869140625, 0.03955078125, 0.0108642578125, 0.0421142578125, 0.0042724609375, 0.0169677734375, 0.012451171875, 0.0394287109375], [0.219482421875, 0.0408935546875, 0.0535888671875, 0.0115966796875, 1.0, 0.197021484375, 0.18408203125, 0.0489501953125, 0.05126953125, 0.0123291015625, 0.17333984375, 0.031982421875, 0.0467529296875, 0.0150146484375, 0.04931640625, 0.0125732421875, 0.0203857421875, 0.0050048828125, 0.03466796875, 0.01123046875], [0.053466796875, 0.141845703125, 0.0157470703125, 0.0692138671875, 0.197021484375, 1.0, 0.0638427734375, 0.193115234375, 0.0196533203125, 0.0540771484375, 0.036376953125, 0.0067138671875, 0.013427734375, 0.002685546875, 0.0096435546875, 0.003662109375, 0.0028076171875, 0.000244140625, 0.0115966796875, 0.005615234375], [0.063232421875, 0.0115966796875, 0.2484130859375, 0.0533447265625, 0.18408203125, 0.0638427734375, 1.0, 0.203369140625, 0.0130615234375, 0.0045166015625, 0.0224609375, 0.083740234375, 0.0106201171875, 0.044677734375, 0.0096435546875, 0.04150390625, 0.003173828125, 0.011474609375, 0.00927734375, 0.016845703125], [0.013427734375, 0.0550537109375, 0.0552978515625, 0.1954345703125, 0.0489501953125, 0.193115234375, 0.203369140625, 1.0, 0.003662109375, 0.0186767578125, 0.0078125, 0.0223388671875, 0.003173828125, 0.0135498046875, 0.0035400390625, 0.0079345703125, 0.00146484375, 0.00390625, 0.00244140625, 0.001953125], [0.2105712890625, 0.0506591796875, 0.06640625, 0.0174560546875, 0.05126953125, 0.0196533203125, 0.0130615234375, 0.003662109375, 1.0, 0.1929931640625, 0.211669921875, 0.0291748046875, 0.042236328125, 0.0103759765625, 0.0352783203125, 0.007080078125, 0.012939453125, 0.003173828125, 0.053466796875, 0.016845703125], [0.0445556640625, 0.18603515625, 0.0174560546875, 0.0640869140625, 0.0123291015625, 0.0540771484375, 0.0045166015625, 0.0186767578125, 0.1929931640625, 1.0, 0.0335693359375, 0.0062255859375, 0.008544921875, 0.0028076171875, 0.012451171875, 0.0018310546875, 0.001708984375, 0.0006103515625, 0.010009765625, 0.003662109375], [0.4622802734375, 0.080322265625, 0.1636962890625, 0.0391845703125, 0.17333984375, 0.036376953125, 0.0224609375, 0.0078125, 0.211669921875, 0.0335693359375, 1.0, 0.197021484375, 0.185791015625, 0.0582275390625, 0.205810546875, 0.0557861328125, 0.0611572265625, 0.0159912109375, 0.2381591796875, 0.05712890625], [0.0858154296875, 0.0379638671875, 0.3031005859375, 0.10205078125, 0.031982421875, 0.0067138671875, 0.083740234375, 0.0223388671875, 0.0291748046875, 0.0062255859375, 0.197021484375, 1.0, 0.0994873046875, 0.175537109375, 0.1329345703125, 0.264892578125, 0.015869140625, 0.049072265625, 0.0736083984375, 0.2049560546875], [0.146728515625, 0.03564453125, 0.042724609375, 0.015869140625, 0.0467529296875, 0.013427734375, 0.0106201171875, 0.003173828125, 0.042236328125, 0.008544921875, 0.185791015625, 0.0994873046875, 1.0, 0.1978759765625, 0.0634765625, 0.010498046875, 0.17626953125, 0.05419921875, 0.0577392578125, 0.0115966796875], [0.0386962890625, 0.015625, 0.1778564453125, 0.03955078125, 0.0150146484375, 0.002685546875, 0.044677734375, 0.0135498046875, 0.0103759765625, 0.0028076171875, 0.0582275390625, 0.175537109375, 0.1978759765625, 1.0, 0.0137939453125, 0.058837890625, 0.046875, 0.2113037109375, 0.01611328125, 0.056884765625], [0.158447265625, 0.03662109375, 0.0299072265625, 0.0108642578125, 0.04931640625, 0.0096435546875, 0.0096435546875, 0.0035400390625, 0.0352783203125, 0.012451171875, 0.205810546875, 0.1329345703125, 0.0634765625, 0.0137939453125, 1.0, 0.2093505859375, 0.216796875, 0.0667724609375, 0.0606689453125, 0.0164794921875], [0.0509033203125, 0.0111083984375, 0.1646728515625, 0.0421142578125, 0.0125732421875, 0.003662109375, 0.04150390625, 0.0079345703125, 0.007080078125, 0.0018310546875, 0.0557861328125, 0.264892578125, 0.010498046875, 0.058837890625, 0.2093505859375, 1.0, 0.0596923828125, 0.2166748046875, 0.01171875, 0.053955078125], [0.03173828125, 0.0096435546875, 0.016357421875, 0.0042724609375, 0.0203857421875, 0.0028076171875, 0.003173828125, 0.00146484375, 0.012939453125, 0.001708984375, 0.0611572265625, 0.015869140625, 0.17626953125, 0.046875, 0.216796875, 0.0596923828125, 1.0, 0.223876953125, 0.0152587890625, 0.0035400390625], [0.0111083984375, 0.0052490234375, 0.069580078125, 0.0169677734375, 0.0050048828125, 0.000244140625, 0.011474609375, 0.00390625, 0.003173828125, 0.0006103515625, 0.0159912109375, 0.049072265625, 0.05419921875, 0.2113037109375, 0.0667724609375, 0.2166748046875, 0.223876953125, 1.0, 0.005126953125, 0.01025390625], [0.1683349609375, 0.03125, 0.033203125, 0.012451171875, 0.03466796875, 0.0115966796875, 0.00927734375, 0.00244140625, 0.053466796875, 0.010009765625, 0.2381591796875, 0.0736083984375, 0.0577392578125, 0.01611328125, 0.0606689453125, 0.01171875, 0.0152587890625, 0.005126953125, 1.0, 0.1983642578125], [0.027099609375, 0.0111083984375, 0.1121826171875, 0.0394287109375, 0.01123046875, 0.005615234375, 0.016845703125, 0.001953125, 0.016845703125, 0.003662109375, 0.05712890625, 0.2049560546875, 0.0115966796875, 0.056884765625, 0.0164794921875, 0.053955078125, 0.0035400390625, 0.01025390625, 0.1983642578125, 1.0]]}}}\n", + "The above exception was the direct cause of the following exception:\n", "\n", + "Traceback (most recent call last):\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/runtime/runtime_job.py\", line 238, in _start_websocket_client\n", + " self._streaming_loop.run_until_complete(self._streaming_task)\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/nest_asyncio.py\", line 70, in run_until_complete\n", + " return f.result()\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/asyncio/futures.py\", line 181, in result\n", + " raise self._exception\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/asyncio/tasks.py\", line 249, in __step\n", + " result = coro.send(None)\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 136, in job_results\n", + " raise ex\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 111, in job_results\n", + " self._ws = await self._connect(url)\n", + " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 76, in _connect\n", + " raise exception_to_raise from ex\n", + "qiskit.providers.ibmq.api.exceptions.WebsocketRetryableError: 'Failed to connect to the server.'\n", "\n" ] } @@ -112,19 +197,21 @@ " 'labels': y_train,\n", " 'initial_kernel_parameters': initial_kernel_parameters,\n", " 'maxiters': maxiters,\n", - " 'C': C\n", + " 'C': C,\n", + " 'initial_layout': initial_layout\n", "}\n", "options = {'backend_name': backend.name()}\n", - "result = provider.runtime.run(program_id=\"quantum-kernel-alignment\",\n", + "job = provider.runtime.run(program_id=\"quantum-kernel-alignment\",\n", " options=options,\n", " inputs=runtime_inputs,\n", " callback=interim_result_callback,\n", - " ).result()\n" + " )\n", + "print(job.job_id())" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -132,24 +219,53 @@ "output_type": "stream", "text": [ "final result:\n", - "{}\n" - ] - }, - { - "ename": "KeyError", - "evalue": "'aligned_kernel_parameters'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"final result:\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'aligned_kernel_parameters'" + "{'aligned_kernel_parameters': array([0.09268847]), 'aligned_kernel_matrix': array([[1. , 0.01049805, 0.05932617, 0.00524902, 0.04125977,\n", + " 0.11291504, 0.03869629, 0.03442383, 0.01159668, 0.0637207 ],\n", + " [0.01049805, 1. , 0.00744629, 0.07568359, 0.00524902,\n", + " 0.01696777, 0.00793457, 0.00524902, 0.00256348, 0.00720215],\n", + " [0.05932617, 0.00744629, 1. , 0.01538086, 0.01489258,\n", + " 0.04541016, 0.08691406, 0.0123291 , 0.04333496, 0.02124023],\n", + " [0.00524902, 0.07568359, 0.01538086, 1. , 0.00134277,\n", + " 0.00488281, 0.01330566, 0.00195312, 0.00292969, 0.00256348],\n", + " [0.04125977, 0.00524902, 0.01489258, 0.00134277, 1. ,\n", + " 0.03918457, 0.01269531, 0.01428223, 0.00427246, 0.01928711],\n", + " [0.11291504, 0.01696777, 0.04541016, 0.00488281, 0.03918457,\n", + " 1. , 0.05310059, 0.04541016, 0.01953125, 0.06933594],\n", + " [0.03869629, 0.00793457, 0.08691406, 0.01330566, 0.01269531,\n", + " 0.05310059, 1. , 0.02416992, 0.04016113, 0.03723145],\n", + " [0.03442383, 0.00524902, 0.0123291 , 0.00195312, 0.01428223,\n", + " 0.04541016, 0.02416992, 1. , 0.04907227, 0.0255127 ],\n", + " [0.01159668, 0.00256348, 0.04333496, 0.00292969, 0.00427246,\n", + " 0.01953125, 0.04016113, 0.04907227, 1. , 0.00976562],\n", + " [0.0637207 , 0.00720215, 0.02124023, 0.00256348, 0.01928711,\n", + " 0.06933594, 0.03723145, 0.0255127 , 0.00976562, 1. ]])}\n", + "aligned_kernel_parameters: [0.09268847]\n", + "aligned_kernel_matrix: [[1. 0.01049805 0.05932617 0.00524902 0.04125977 0.11291504\n", + " 0.03869629 0.03442383 0.01159668 0.0637207 ]\n", + " [0.01049805 1. 0.00744629 0.07568359 0.00524902 0.01696777\n", + " 0.00793457 0.00524902 0.00256348 0.00720215]\n", + " [0.05932617 0.00744629 1. 0.01538086 0.01489258 0.04541016\n", + " 0.08691406 0.0123291 0.04333496 0.02124023]\n", + " [0.00524902 0.07568359 0.01538086 1. 0.00134277 0.00488281\n", + " 0.01330566 0.00195312 0.00292969 0.00256348]\n", + " [0.04125977 0.00524902 0.01489258 0.00134277 1. 0.03918457\n", + " 0.01269531 0.01428223 0.00427246 0.01928711]\n", + " [0.11291504 0.01696777 0.04541016 0.00488281 0.03918457 1.\n", + " 0.05310059 0.04541016 0.01953125 0.06933594]\n", + " [0.03869629 0.00793457 0.08691406 0.01330566 0.01269531 0.05310059\n", + " 1. 0.02416992 0.04016113 0.03723145]\n", + " [0.03442383 0.00524902 0.0123291 0.00195312 0.01428223 0.04541016\n", + " 0.02416992 1. 0.04907227 0.0255127 ]\n", + " [0.01159668 0.00256348 0.04333496 0.00292969 0.00427246 0.01953125\n", + " 0.04016113 0.04907227 1. 0.00976562]\n", + " [0.0637207 0.00720215 0.02124023 0.00256348 0.01928711 0.06933594\n", + " 0.03723145 0.0255127 0.00976562 1. ]]\n" ] } ], "source": [ - "print(\"final result:\")\n", - "print(result)\n", + "result = job.result()\n", + "\n", "print(f\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\")\n", "print(f\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\")" ] @@ -167,29 +283,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { + "scrolled": true, "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/jen/opt/anaconda3/envs/qiskit0.24.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/ibmqbackend.py:803: DeprecationWarning: Passing a Qobj to Backend.run is deprecated and will be removed in a future release. Please pass in circuits or pulse schedules instead.\n", - " noise_model=noise_model, **run_config)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "accuracy test: 1.0\n" - ] - } - ], + "outputs": [], "source": [ "from qka.kernel_matrix import KernelMatrix\n", "from sklearn.svm import SVC\n", @@ -219,9 +320,9 @@ "metadata": { "celltoolbar": "Slideshow", "kernelspec": { - "display_name": "Python 3", + "display_name": "Python [conda env:qiskit0.25.0python3.7] *", "language": "python", - "name": "python3" + "name": "conda-env-qiskit0.25.0python3.7-py" }, "language_info": { "codemirror_mode": { @@ -233,7 +334,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.1" + "version": "3.7.10" } }, "nbformat": 4, diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index 6c1dbcba6..6d6d3213c 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -7,16 +7,23 @@ class KernelMatrix: """Build the kernel matrix from a quantum feature map.""" - def __init__(self, feature_map, backend): + def __init__(self, feature_map, backend, initial_layout): """ Args: feature_map (int): the feature map object backend (Backend): the backend instance + initial layout: FINISH ME """ self._feature_map = feature_map self._feature_map_circuit = self._feature_map.construct_circuit # the feature map circuit self._backend = backend + + if initial_layout is None: + self._initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] + else: + self._initial_layout = initial_layout + self.results = {} # store the results object (program_data) def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): @@ -100,13 +107,15 @@ def _run_circuits(self, circuits): """Execute the input circuits.""" try: provider = self._backend.provider() - runtime_params = {'circuits': circuits, 'shots': 8192} + runtime_params = {'circuits': circuits, 'shots': 8192, 'initial_layout': self._initial_layout} options = {'backend_name': self._backend.name()} - return provider.runtime.run(program_id="circuit-runner", + job = provider.runtime.run(program_id="circuit-runner", options=options, inputs=runtime_params, - ).result() + ) + return job.result() + except Exception: # Fall back to run without runtime. - transpiled = transpile(circuits, backend=self._backend) + transpiled = transpile(circuits, backend=self._backend, initial_layout=self._initial_layout) return self._backend.run(transpiled, shots=8192).result() diff --git a/qka/qka.py b/qka/qka.py index cf49447b2..c238e4c51 100644 --- a/qka/qka.py +++ b/qka/qka.py @@ -7,24 +7,26 @@ class QKA: """The quantum kernel alignment algorithm.""" - def __init__(self, feature_map, backend, verbose=True): + def __init__(self, feature_map, backend, initial_layout, verbose=True): """Constructor. Args: feature_map (partial obj): the quantum feature map object backend (Backend): the backend instance + initial_layout: FINISH ME verbose (bool): print output during course of algorithm """ self.feature_map = feature_map self.feature_map_circuit = self.feature_map.construct_circuit # the feature map circuit not yet evaluated with input arguments self.backend = backend + self.initial_layout = initial_layout self.num_parameters = self.feature_map._num_parameters # number of parameters (lambdas) in the feature map self.verbose = verbose self.result = {} - self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend) + self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend, initial_layout=self.initial_layout) diff --git a/qka/test.py b/qka/test.py index 36c338e79..b389f3a14 100644 --- a/qka/test.py +++ b/qka/test.py @@ -10,31 +10,67 @@ octave.addpath('/Users/jen/Q/code/quantum_kernel_data') -# configure settings for the tony line: -num_features=10 # number of features in the input data -num_train=10 # number of training samples per class -num_test=10 # number of test samples per class -C=1 # SVM soft-margin penalty -maxiters=2 # number of SPSA iterations -entangler_map=[[0,1],[1,2],[2,3],[3,4],[4,5],[5,6],[6,7],[7,8],[8,9]] +# save data to csv: +# samples = 100 # per label +# state=42 # setting the state for the random number generator +# +# data_plus, data_minus = octave.generate_data(samples, state, nout=2) +# +# dat = np.empty((samples*2, 20)) +# dat[::2,:] = data_plus.T +# dat[1::2,:] = data_minus.T +# +# lab = np.reshape(np.asarray([1,-1]*samples), (samples*2,1)) +# full = np.concatenate((dat, lab), axis=1) +# +# np.savetxt("/Users/jen/Q/code/quantum_kernel_data/dataset.csv", full, delimiter=",") + + +import pandas as pd +df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None) +dat = df.values -# Generate the data: -state=42 # setting the state for the random number generator -data_plus, data_minus = octave.generate_data(num_train+num_test, state, nout=2) +num_features = int((np.shape(dat)[1]-1)/2) # determined from the dataset +num_train = 3 +num_test = 4 +C = 1 +maxiters = 11 +entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] -x_train = np.concatenate((data_plus.T[:num_train], data_minus.T[:num_train])) -y_train = np.concatenate((-1*np.ones(num_train), np.ones(num_train))) +x_train = dat[:2*num_train, :-1] +y_train = dat[:2*num_train, -1] -x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) -y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) +x_test = dat[2*num_train:2*(num_train+num_test), :-1] +y_test = dat[2*num_train:2*(num_train+num_test), -1] + +# configure settings for the tony line: +# num_features=10 # number of features in the input data +# num_train=50 # number of training samples per class +# num_test=60 # number of test samples per class +# C=1 # SVM soft-margin penalty +# maxiters=20 # number of SPSA iterations +# +# entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] +# +# # Generate the data: +# state=42 # setting the state for the random number generator +# data_plus, data_minus = octave.generate_data(num_train+num_test, state, nout=2) +# +# x_train = np.concatenate((data_plus.T[:num_train], data_minus.T[:num_train])) +# y_train = np.concatenate((-1*np.ones(num_train), np.ones(num_train))) +# +# x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) +# y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) + +initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] bk = Aer.get_backend('qasm_simulator') # Define the feature map and its initial parameters: initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map) -km = KernelMatrix(feature_map=fm, backend=bk) +km = KernelMatrix(feature_map=fm, backend=bk, initial_layout=initial_layout) # Train and test the initial kernel: kernel_init_train = km.construct_kernel_matrix(x1_vec=x_train, x2_vec=x_train, parameters=initial_kernel_parameters) @@ -48,7 +84,7 @@ print('Initial Kernel | Balanced Test Accuracy: {}'.format(accuracy_test)) # Align the parametrized kernel: -qka = QKA(feature_map=fm, backend=bk) +qka = QKA(feature_map=fm, backend=bk, initial_layout=initial_layout) qka_results = qka.align_kernel(data=x_train, labels=y_train, initial_kernel_parameters=initial_kernel_parameters, maxiters=maxiters, C=C) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index 4d69f702f..d6f063f06 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -92,16 +92,23 @@ def from_json(cls, feature_dimension, entangler_map=None): class KernelMatrix: """Build the kernel matrix from a quantum feature map.""" - def __init__(self, feature_map, backend): + def __init__(self, feature_map, backend, initial_layout): """ Args: feature_map: the feature map object backend (Backend): the backend instance + initial_layout: FINISH ME """ self._feature_map = feature_map self._feature_map_circuit = self._feature_map.construct_circuit self._backend = backend + + if initial_layout is None: + self._initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] + else: + self._initial_layout = initial_layout + self.results = {} def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): @@ -139,7 +146,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): circuit.measure_all() experiments.append(circuit) - experiments = transpile(experiments, backend=self._backend) + experiments = transpile(experiments, backend=self._backend, initial_layout=self._initial_layout) program_data = self._backend.run(experiments, shots=8192).result() self.results['program_data'] = program_data @@ -166,7 +173,7 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): circuit.measure_all() experiments.append(circuit) - experiments = transpile(experiments, backend=self._backend) + experiments = transpile(experiments, backend=self._backend, initial_layout=self._initial_layout) program_data = self._backend.run(experiments, shots=8192).result() self.results['program_data'] = program_data @@ -188,23 +195,25 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): class QKA: """The quantum kernel alignment algorithm.""" - def __init__(self, feature_map, backend, user_messenger=None): + def __init__(self, feature_map, backend, initial_layout, user_messenger=None): """Constructor. Args: feature_map (partial obj): the quantum feature map object backend (Backend): the backend instance + initial_layout: FINISH ME user_messenger (UserMessenger): used to publish interim results. """ self.feature_map = feature_map self.feature_map_circuit = self.feature_map.construct_circuit self.backend = backend + self.initial_layout = initial_layout self.num_parameters = self.feature_map._num_parameters self._user_messenger = user_messenger self.result = {} - self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend) + self.kernel_matrix = KernelMatrix(feature_map=self.feature_map, backend=self.backend, initial_layout=self.initial_layout) def SPSA_parameters(self): """Return array of precomputed SPSA parameters. @@ -397,7 +406,8 @@ def main(backend, user_messenger, **kwargs): # Reconstruct the feature map object. feature_map = kwargs.pop('feature_map') fm = FeatureMapACME.from_json(**feature_map) - qka = QKA(feature_map=fm, backend=backend, user_messenger=user_messenger) + initial_layout = kwargs.pop('initial_layout') + qka = QKA(feature_map=fm, backend=backend, initial_layout=initial_layout, user_messenger=user_messenger) qka_results = qka.align_kernel(**kwargs) print(json.dumps(qka_results, cls=RuntimeEncoder)) From f66e92b2fed45a6954890e4f20959be848fff75f Mon Sep 17 00:00:00 2001 From: jenglick Date: Wed, 28 Apr 2021 20:07:13 -0400 Subject: [PATCH 09/18] changed num features to be twice num qubits and added background info to notebook --- QKA_demo_outer.ipynb | 84 ++++++++++++++++++++++++++++++++------------ qka/featuremaps.py | 20 +++++++---- qka/test.py | 9 ++--- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/QKA_demo_outer.ipynb b/QKA_demo_outer.ipynb index f8953edcf..4934e163f 100644 --- a/QKA_demo_outer.ipynb +++ b/QKA_demo_outer.ipynb @@ -6,19 +6,22 @@ "source": [ "# Quantum Kernel Alignment with Qiskit Runtime\n", "\n", - "Classification problems are widespread in machine learning applications. A common method for tackling these problems is the support vector machine (SVM) [1,2]. This supervised learning algorithm uses labeled training samples to find an optimal separating hyperplane between data classes and predict the labels of new data points. Often, data is not linearly separable in the original space. In these cases, the kernel trick is used to encode a transformation of the data into a higher-dimensional feature space through the inner product between pairs of data points, where the data may become separable.\n", + "#### Classification with Support Vector Machines\n", + "Classification problems are widespread in machine learning applications. A common method for tackling these problems is the support vector machine (SVM) [1,2]. This supervised learning algorithm uses labeled training samples to find an optimal separating hyperplane between data classes in order to predict the labels of new data points. Often, data is not linearly separable in the original space. In these cases, the kernel trick is used to implicitly encode a transformation of the data into a higher-dimensional feature space through the inner product between pairs of data points, where the data may become separable.\n", "\n", - "Quantum computers can be used to encode clasical data in a quantum-enhanced feature space. In 2019, IBM introduced a quantum algorithm called the quantum kernel estimator (QKE), which uses quantum circuits to evaluate inner products between data points in the quantum feature space [3]. More recently, IBM proved that on certain learning problems, quantum kernels can offer superpolynomial speedups over any classical learner [4]. This means that quantum kernels can someday offer quantum advantage on suitable problems. \n", + "#### Quantum Kernels\n", + "Quantum computers can be used to encode classical data in a quantum-enhanced feature space. In 2019, IBM introduced a quantum algorithm called the quantum kernel estimator (QKE), which uses quantum circuits to evaluate inner products between data points in the quantum feature space [3]. More recently, IBM proved, on certain learning problems, quantum kernels can offer superpolynomial speedups over any classical learner [4]. This means that quantum kernels can someday offer quantum advantage on suitable problems. \n", "\n", - "With SVMs in practice, one must make a choice about which kernel function to use. Sometimes, symmetries in the data can inform the choice of kernel, other times it is chosen in an ad hoc way. Kernel alignment is one approach to learning a kernel on a given dataset by iteratively adapting it to have high similarity to a target kernel informed from the underlying data distribution [5]. Using this concept, we introduce quantum kernel alignment (QKA), which is an algorithm for optimizing parametrized quantum kernels evaluated using the QKE [6]. One can show that finding a kernel that maximizes the alignment and the SVM margin is equivalent to the following problem:\n", + "#### Learning Quantum Kernels for a Dataset\n", + "In practice, SVMs require a choice of the kernel function. Sometimes, symmetries in the data can inform this selection, other times it is chosen in an ad hoc way. Kernel alignment is one approach to learning a kernel on a given dataset by iteratively adapting it to have high similarity to a target kernel informed from the underlying data distribution [5]. As a result, the SVM with an aligned kernel will likely generalize better to new data than with an unaligned kernel. Using this concept, we introduce quantum kernel alignment (QKA), which is a new algorithm for learning a quantum kernel that maximizes the alignment while converging to the maximum SVM margin [6]. \n", "\n", - "\\begin{equation}\n", - " \\mathrm{min}_{\\vec{\\lambda}} \\mathrm{max}_{\\vec{\\alpha}} F(\\vec{\\alpha}, \\vec{\\lambda}) ~~ \\textrm{subject to} ...\n", - "\\end{equation}\n", + "#### Speeding up Quantum Algorithms with Qiskit Runtime\n", + "QKA is an iterative quantum-classical algorithm, in which quantum hardware executes parametrized quantum circuits (which are used to compute the quantum kernel matrices according to the QKE), while a classical optimizer tunes the parameters of the circuits to maximize the alignment. Iterative algorithms of this type can be slow due to latency between the quantum and classical calculations. Qiskit Runtime is a new framework (?) that can speed up iterative algorithms like QKA by pushing the classical computations into the cloud near (?) the quantum hardware. TODO: add more details here on how runtime can help QKA run faster....\n", + "\n", + "#### Trying This Out on a Specific Learning Problem\n", + "TODO: discuss the specific problem we are solving... In this tutorial, we define a particular learning problem we call ....\n", "\n", - "TODO: discuss the specific problem we are solving...\n", "\n", - "QKA is an iterative quantum-classical algorithm, in which classical optimizers are used to tune the parameters of a quantum kernel evaluated by executing quantum circuits. Qiskit Runtime is a new... TODO: discuss how runtime can help QKA run faster...\n", "\n", "[1] B. E. Boser, I. M. Guyon, and V. N. Vapnik, Proceedings of the Fifth Annual Workshop on Computational Learning Theory, COLT ’92 (Association for Computing Machinery, New York, NY, USA, 1992) pp. 144-152 [link](https://doi.org/10.1145/130385.130401)
\n", "[2] V. Vapnik, The Nature of Statistical Learning Theory, Information Science and Statistics (Springer New York, 2013) [link](https://books.google.com/books?id=EqgACAAAQBAJ)
\n", @@ -28,6 +31,15 @@ "[6] Our ref - forthcoming..." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Load your IBMQ account and get the quantum backend\n", + "\n", + "We'll be using the 27-qubit backend `ibmq_montreal` for this tutorial." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -53,14 +65,18 @@ } }, "source": [ - "# Invoke Quantum Kernel Alignment program" + "# Invoke Quantum Kernel Alignment program\n", + "\n", + "Before running the Runtime Program for QKA, we'll need to prepare the dataset and configure the settings for the algorithm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. Prepare the dataset" + "## 1. Prepare the dataset\n", + "\n", + "First, we load the dataset from the `csv` file and then extract the training the testing samples." ] }, { @@ -76,12 +92,12 @@ "\n", "df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None)\n", "data = df.values\n", - "num_features = int((np.shape(data)[1]-1)/2)\n", + "num_features = np.shape(dat)[1]-1 # feature dimension (twice the qubit number) is determined by dataset\n", "\n", "# specify the training and testing sets\n", "\n", - "num_train = 10 # number of training samples per class\n", - "num_test = 20 # number of test samples per class\n", + "num_train = 4 # number of training samples per class\n", + "num_test = 5 # number of test samples per class\n", "\n", "x_train = data[:2*num_train, :-1]\n", "y_train = data[:2*num_train, -1]\n", @@ -94,7 +110,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. Configure the algorithm settings" + "## 2. Configure the settings for QKA" ] }, { @@ -112,19 +128,28 @@ "\n", "# Set the parameters:\n", "C = 1 # SVM soft-margin penalty\n", - "maxiters = 11 # number of SPSA iterations\n", + "maxiters = 1 # number of SPSA iterations\n", "\n", "entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # entanglers in the feature map\n", "initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # mapping virtual qubits to physical qubits on the chip\n", "\n", "# Define the feature map and its initial parameters:\n", - "initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy\n", + "initial_point = [0.1] # np.pi/2 should yield 100% test accuracy\n", "fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Set up and run the Runtime Program\n", + "\n", + "There are two main components we'll need to set up for our Runtime Program: `inputs` (the feature map, labeled dataset, optimizer settings, etc) and `options` (the backend). Once these are specified, we'll run the Program on the quantum backend." + ] + }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "metadata": { "slideshow": { "slide_type": "fragment" @@ -138,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "metadata": { "scrolled": false, "slideshow": { @@ -150,14 +175,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "c246fgs7jmf3kdh9vveg\n" + "c24v0dggh40gub5h9bo0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "runtime_job._start_websocket_client:WARNING:2021-04-27 15:36:54,616: An error occurred while streaming results from the server for job c246fgs7jmf3kdh9vveg:\n", + "runtime_job._start_websocket_client:WARNING:2021-04-28 19:31:18,217: An error occurred while streaming results from the server for job c24v0dggh40gub5h9bo0:\n", "Traceback (most recent call last):\n", " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 66, in _connect\n", " websocket = await connect(url, extra_headers=self._header)\n", @@ -195,7 +220,7 @@ " 'feature_map': fm,\n", " 'data': x_train,\n", " 'labels': y_train,\n", - " 'initial_kernel_parameters': initial_kernel_parameters,\n", + " 'initial_kernel_parameters': initial_point,\n", " 'maxiters': maxiters,\n", " 'C': C,\n", " 'initial_layout': initial_layout\n", @@ -209,6 +234,15 @@ "print(job.job_id())" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Retrieve and display the results of the Runtime Program\n", + "\n", + "The output of QKA is the set of aligned kernel parameters and the aligned kernel matrix." + ] + }, { "cell_type": "code", "execution_count": 11, @@ -278,7 +312,9 @@ } }, "source": [ - "# Test the aligned kernel" + "# Use the results of the Runtime Program to test the SVM on new data\n", + "\n", + "With the aligned kernel and its parameters in hand, we can use the `sklearn` package to train the SVM and then predict labels of new test points. A second kernel matrix built from the test points is needed for the SVM decision function, so we'll invoke the Circuit Runner Runtime Program." ] }, { @@ -296,12 +332,14 @@ "from sklearn.svm import SVC\n", "from sklearn import metrics\n", "\n", - "# Test the aligned kernel on test data:\n", + "# Train the SVM with the aligned kernel matrix:\n", "\n", "kernel_aligned = result['aligned_kernel_matrix']\n", "model = SVC(C=C, kernel='precomputed')\n", "model.fit(X=kernel_aligned, y=y_train)\n", "\n", + "# Test the SVM on new data:\n", + "\n", "km = KernelMatrix(feature_map=fm, backend=backend)\n", "kernel_test = km.construct_kernel_matrix(x1_vec=x_test, x2_vec=x_train, parameters=result['aligned_kernel_parameters'])\n", "labels_test = model.predict(X=kernel_test)\n", diff --git a/qka/featuremaps.py b/qka/featuremaps.py index 3be557365..b5311b09c 100644 --- a/qka/featuremaps.py +++ b/qka/featuremaps.py @@ -9,15 +9,23 @@ class FeatureMapACME: def __init__(self, feature_dimension, entangler_map=None): """ Args: - feature_dimension (int): number of features + feature_dimension (int): number of features (twice the number of qubits for this encoding) entangler_map (list[list]): connectivity of qubits with a list of [source, target], or None for full entanglement. Note that the order in the list is the order of applying the two-qubit gate. """ - self._feature_dimension = feature_dimension - self._num_qubits = self._feature_dimension = feature_dimension + + if isinstance(feature_dimension, int): + if feature_dimension % 2 == 0: + self._feature_dimension = feature_dimension + else: + raise ValueError('Feature dimension must be an even integer.') + else: + raise ValueError('Feature dimension must be an even integer.') + + self._num_qubits = int(feature_dimension/2) if entangler_map is None: - self._entangler_map = [[i, j] for i in range(self._feature_dimension) for j in range(i + 1, self._feature_dimension)] + self._entangler_map = [[i, j] for i in range(self._num_qubits) for j in range(i + 1, self._num_qubits)] else: self._entangler_map = entangler_map @@ -46,8 +54,8 @@ def construct_circuit(self, x=None, parameters=None, q=None, inverse=False, name if len(parameters) != self._num_parameters: raise ValueError('The number of feature map parameters must be {}.'.format(self._num_parameters)) - if len(x) != 2*self._num_qubits: - raise ValueError('The input vector must be of length {}.'.format(2*self._num_qubits)) + if len(x) != self._feature_dimension: + raise ValueError('The input vector must be of length {}.'.format(self._feature_dimension)) if q is None: q = QuantumRegister(self._num_qubits, name='q') diff --git a/qka/test.py b/qka/test.py index b389f3a14..da8a5efea 100644 --- a/qka/test.py +++ b/qka/test.py @@ -31,9 +31,9 @@ df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None) dat = df.values -num_features = int((np.shape(dat)[1]-1)/2) # determined from the dataset -num_train = 3 -num_test = 4 +num_features = np.shape(dat)[1]-1 # feature dimension determined by dataset +num_train = 10 +num_test = 10 C = 1 maxiters = 11 entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] @@ -64,8 +64,9 @@ # x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) # y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) -initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] +# Specify the backend and the mapping from virtual to physical qubits bk = Aer.get_backend('qasm_simulator') +initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # Define the feature map and its initial parameters: initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy From 868c86177254f8c5f8c3eb80baf3c03133db3aa6 Mon Sep 17 00:00:00 2001 From: jenglick Date: Wed, 28 Apr 2021 20:07:53 -0400 Subject: [PATCH 10/18] changed num features to be twice num qubits --- runtime/qka_runtime_outer.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index d6f063f06..b5a6d1188 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -20,12 +20,20 @@ class FeatureMapACME: def __init__(self, feature_dimension, entangler_map=None): """ Args: - feature_dimension (int): number of features + feature_dimension (int): number of features (twice the number of qubits for this encoding) entangler_map (list[list]): connectivity of qubits with a list of [source, target], or None for full entanglement. Note that the order in the list is the order of applying the two-qubit gate. """ - self._feature_dimension = feature_dimension - self._num_qubits = self._feature_dimension = feature_dimension + + if isinstance(feature_dimension, int): + if feature_dimension % 2 == 0: + self._feature_dimension = feature_dimension + else: + raise ValueError('Feature dimension must be an even integer.') + else: + raise ValueError('Feature dimension must be an even integer.') + + self._num_qubits = int(feature_dimension/2) if entangler_map is None: self._entangler_map = [[i, j] for i in range(self._feature_dimension) for j in range(i + 1, self._feature_dimension)] @@ -56,8 +64,8 @@ def construct_circuit(self, x=None, parameters=None, q=None, inverse=False, name if len(parameters) != self._num_parameters: raise ValueError('The number of feature map parameters must be {}.'.format(self._num_parameters)) - if len(x) != 2*self._num_qubits: - raise ValueError('The input vector must be of length {}.'.format(2*self._num_qubits)) + if len(x) != self._feature_dimension: + raise ValueError('The input vector must be of length {}.'.format(self._feature_dimension)) if q is None: q = QuantumRegister(self._num_qubits, name='q') From df915fda031136d383c24717f7c9524c6649af40 Mon Sep 17 00:00:00 2001 From: jenglick Date: Thu, 29 Apr 2021 13:35:44 -0400 Subject: [PATCH 11/18] updated results publishing --- runtime/circuit_runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/circuit_runner.py b/runtime/circuit_runner.py index 954cf33b3..1238e5f09 100644 --- a/runtime/circuit_runner.py +++ b/runtime/circuit_runner.py @@ -31,7 +31,7 @@ def main(backend, user_messenger, circuits, method=scheduling_method) result = backend.run(circuits, **kwargs).result() - print(json.dumps(result, cls=RuntimeEncoder)) + user_messenger.publish(result, final=True) if __name__ == '__main__': From 7aaa0410dde41d808881ffb41e0a33b610c994a3 Mon Sep 17 00:00:00 2001 From: jenglick Date: Thu, 29 Apr 2021 13:36:11 -0400 Subject: [PATCH 12/18] added datasets and images --- qka/aux_files/chip.png | Bin 0 -> 82416 bytes qka/aux_files/dataset_graph10.csv | 200 ++++++++++++++++++++++++++++++ qka/aux_files/dataset_graph7.csv | 128 +++++++++++++++++++ qka/aux_files/subgraphs.png | Bin 0 -> 58814 bytes 4 files changed, 328 insertions(+) create mode 100644 qka/aux_files/chip.png create mode 100644 qka/aux_files/dataset_graph10.csv create mode 100644 qka/aux_files/dataset_graph7.csv create mode 100644 qka/aux_files/subgraphs.png diff --git a/qka/aux_files/chip.png b/qka/aux_files/chip.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa4a271f6f5f4f0076f1a3c2ee690b9d7cc48bc GIT binary patch literal 82416 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 literal 0 HcmV?d00001 diff --git a/qka/aux_files/dataset_graph10.csv b/qka/aux_files/dataset_graph10.csv new file mode 100644 index 000000000..44ebf4efe --- /dev/null +++ b/qka/aux_files/dataset_graph10.csv @@ -0,0 +1,200 @@ +-2.007916541292168455e-01,1.256050442151832869e-01,1.314111543464645260e-02,1.646477350505198833e-01,-3.560597642700872312e-01,-1.695353554892262138e-01,5.994882770776622377e-02,1.592180384397914317e-01,9.348020040604623770e-02,2.469030420366628009e-01,1.727334581588330087e-01,-2.454461286442135293e-01,-3.109430434520887854e-02,2.276514532517784073e-01,-1.263686379290062944e-01,-4.877100848583847126e-02,4.738988751082016115e-01,4.235600882163070846e-02,-2.479262827528456170e-01,1.403230798247892541e-01,1.000000000000000000e+00 +-3.619770471633777520e-01,3.102410201186359684e-01,1.955016471216194651e-01,2.519809753315865875e-01,1.292735649705571421e-01,6.078849113761808365e-02,4.964318280869732536e-02,-1.190043419084264448e-01,-8.907888847960093726e-02,1.806225748809974496e-01,-3.891721410299649880e-02,3.119682589033747622e-01,1.072508355964233162e-01,-1.099388113086208346e-01,-3.845260712817669124e-02,4.212519615885600144e-02,1.856383482499662785e-01,-3.290732894176815471e-01,1.326495303771342282e-01,3.258614622629292523e-02,-1.000000000000000000e+00 +-1.699567981135229555e+00,-2.499023652979625032e-01,-5.942634989765910314e-02,-1.490057110759272163e+00,-2.034813523011680669e-01,-1.341924090873996001e-01,-4.491966344218056156e-02,-2.196993563951041978e-02,2.403923643158739909e-01,1.826132765017626780e-01,1.266957737287774388e-01,-2.635429686288550122e-01,1.070721972466185806e-01,2.189779380592951075e-01,-4.680750353227767224e-01,-2.713874573953329872e-01,2.929498505299598099e-01,-1.069986603149688797e-01,-2.833521453233959764e-01,1.322852304793778744e-01,1.000000000000000000e+00 +-3.380223718184083292e-01,1.370041451716388914e-01,5.901130877775062622e-02,1.253411046206272805e-01,4.827749586157329409e-01,2.863104589419421808e-01,6.332412929986380723e-02,2.267424279624475625e-01,-5.708031373436329992e-02,-3.523595850569669063e-02,4.112363501220001050e-02,4.658254689076685717e-01,1.899918493528713614e-01,-1.686181006797268456e+00,-1.470504435177556246e+00,2.292900865442913383e-01,1.291532701981612796e-01,-1.561609060412599614e+00,-7.667967188191603112e-02,4.761345531711647094e-03,-1.000000000000000000e+00 +-2.806172170557401091e-01,2.345528404427950075e-01,2.786230084666336815e-01,8.324341648692490381e-02,-1.087067331237027423e-01,-2.470171436270433563e-01,-1.105264854755428350e-01,2.233875130486916993e-01,3.031562242994962908e-01,2.550889741263078214e-01,2.005462828553836174e-01,-1.498809094605016157e-01,7.245672564705890606e-02,-1.429262924191095685e+00,-1.782486420238048819e+00,1.298841118026229091e-01,3.343505737727016092e-01,-1.794784374883469757e+00,-2.153012737029798285e-01,2.977441142038910193e-01,1.000000000000000000e+00 +-2.346721068161321533e-01,1.194903595863296142e-01,5.917843371820045995e-02,2.835171835455025380e-01,1.699647496214566345e-01,-1.272769149921026299e+00,-1.789720273338611722e+00,2.264168273447128912e-02,-1.251693019916260696e-01,-1.355586874585725354e+00,-4.668978510920989561e-02,2.510663893922865375e-01,3.253702075238998903e-01,-2.664341538171773882e-01,-2.546299148618048624e-01,-2.764602557068271405e-01,1.857795514152297822e-01,-7.640354454908623860e-02,9.936511318800467230e-05,9.440223825573818006e-02,-1.000000000000000000e+00 +-1.814810242586567313e+00,-1.997525669651355473e-01,1.969548223903713202e-01,-1.583230326698438439e+00,-1.150166153676587671e-01,-9.435141913297197258e-02,-5.347941540267860117e-02,1.300284229724378848e-01,3.364188457449710512e-01,2.781038237105381006e-01,1.529703121157700851e-01,-2.680246024070674360e-01,2.148996979174693234e-01,-1.394628059165991196e+00,-1.484846598147639307e+00,2.773773581400869326e-02,2.998946494828771403e-01,-1.703850060811981759e+00,-2.422215832158954862e-01,1.761989570765227220e-01,1.000000000000000000e+00 +-3.068878993243701614e-01,1.458429151629054010e-01,7.900337902815834923e-02,2.413892675648690034e-01,2.008437205135009396e-01,-1.255590334176830858e+00,-1.321669830791672551e+00,3.592599513955692381e-02,-1.231808282789535053e-01,-1.429931887152628311e+00,-1.301734423857004441e-01,9.290559734769254785e-02,1.535010499455963795e-01,-1.627845519807247010e+00,-1.798953197751451683e+00,1.450263369791208456e-01,3.040604037053139530e-01,-1.647861822886954153e+00,7.039330985744604585e-02,8.906782256419291943e-02,-1.000000000000000000e+00 +-2.475185490887347184e-01,9.420921282229396954e-02,5.737282722007587543e-02,3.067577078253846609e-02,-2.072072091156420548e-01,-1.568386399799159558e-01,3.625790937428378241e-02,3.160429162302552664e-02,-5.688512450148203170e-02,7.932343149769234547e-02,2.075570007682833729e-02,-2.379648165439725571e-01,-1.027001489524781430e-03,1.311064025402823296e-01,-1.412349284243120673e-01,-1.631336636555825059e+00,-1.378349038814703276e+00,2.156114329793494822e-01,-1.942461747151418283e-01,-1.372603263961538644e+00,1.000000000000000000e+00 +-3.712681993563175520e-01,2.447203123167054906e-01,1.674824609253608432e-01,-1.446717305613078430e+00,-1.420563357980569430e+00,-3.609458750875077504e-01,1.540679229703752900e-02,-1.625051620109700057e+00,-5.736007283963888426e-02,9.804019182766415819e-02,-8.996342455644670832e-02,2.026924048741309825e-01,3.653067457918324212e-01,-2.225456451124414037e-01,-1.408978414783976507e-01,-2.002353048192771490e-01,1.324373334310313677e-01,-1.255958370812784719e-01,9.761506581143294947e-02,1.122444049740187882e-02,-1.000000000000000000e+00 +-1.814997372005986653e+00,-1.941450819739447553e-01,1.653741602290772494e-01,-1.588775077627082366e+00,-9.586166821127925508e-02,3.122259066613891632e-02,2.145107584268255707e-01,4.641439422694794426e-02,2.989727635230137182e-01,1.449741841347681748e-01,1.679038267000977636e-01,-5.138476561718791080e-02,1.807859838991984214e-01,1.237539920076329292e-01,7.541819841429758808e-02,-1.632146375789857107e+00,-1.312653953351071934e+00,1.741179444086803085e-01,-2.423301838396551833e-01,-1.451627771151446478e+00,1.000000000000000000e+00 +-1.913286986041110582e-01,2.450407650849422692e-01,3.545361380153044251e-01,-1.436025934901113299e+00,-1.358754408733316765e+00,-3.345361517269413998e-01,9.228629189717228731e-02,-1.627704820726677992e+00,-9.910154579885172010e-03,1.213180773019647829e-01,9.271637029225321402e-02,1.930591674110951339e-01,2.607463373998891720e-01,-1.584432208669410036e+00,-1.914545203619924862e+00,7.672603635086822083e-02,2.618090199653315131e-01,-1.797289647501532972e+00,6.244643382207429316e-02,1.646627836234521303e-01,-1.000000000000000000e+00 +-2.827169272843018111e-01,-8.938278041821995368e-02,8.689099131522518005e-02,8.801569791382071739e-02,-2.091786619535809799e-01,-1.932951335710459684e-01,-3.421476103753014197e-02,1.458947150913895707e-01,1.416774496008315898e-01,2.267086822419316361e-01,1.930543033835727951e-01,-2.612848042443172147e-01,1.645347232003737947e-01,-1.377589491351909334e+00,-1.684355193891810876e+00,-1.222844897880694059e+00,-1.274121514402086763e+00,-1.373542996575246589e+00,-3.515611588040133961e-01,-1.292597459201656251e+00,1.000000000000000000e+00 +-2.898068069005064751e-01,3.362530106259646878e-01,4.039937736397130053e-01,-1.292134742263436831e+00,-1.327694121309146658e+00,-1.781255923277610176e+00,-1.474615078949816471e+00,-1.707491897761346689e+00,-6.347522520753053066e-02,-1.556758761129486857e+00,3.139049175431805200e-02,1.615493989436921352e-01,1.323517093486887286e-01,-9.163479094230082833e-02,-8.476455173744942839e-02,-8.388291365994691995e-02,-6.105412411432364905e-03,-1.115762012557646732e-01,-2.509796522546856035e-02,4.234376927324820516e-02,-1.000000000000000000e+00 +-1.814790777736557059e+00,-9.654571037546932910e-02,-1.547101539374872714e-01,-1.492103527123674001e+00,-2.653854804365027853e-01,-1.556251496039434690e-01,-1.524839474212562607e-01,-6.663369304520916359e-02,2.793381062230014256e-01,7.889239734507461077e-02,2.769616381192322452e-01,-8.894663379787948188e-02,6.234700937376988494e-02,-1.340385343202203039e+00,-1.556828923430347178e+00,-1.453807041951613588e+00,-1.236379895728524581e+00,-1.475549128646258534e+00,-2.682858355304210130e-01,-1.285611067987255218e+00,1.000000000000000000e+00 +-3.908878157228444783e-01,2.113366908644658537e-01,2.228160196256315229e-01,-1.481040542017491690e+00,-1.383617867835357451e+00,-1.721604745865471298e+00,-1.414072410664353185e+00,-1.615445833161077926e+00,-4.576111109960588619e-02,-1.632679036459264932e+00,-1.234401773580307005e-03,2.811519385075775257e-01,2.014740758147050559e-01,-1.620445921842751158e+00,-1.724348080122484417e+00,1.510452929498979913e-01,1.141521430830667733e-01,-1.655542359199389191e+00,-3.369205777448615324e-02,7.371810551873218820e-02,-1.000000000000000000e+00 +-2.030544519688619043e-01,-1.406268088042871733e+00,-1.646983584535837597e+00,3.689334738254190782e-02,-3.421474950398201709e-01,-1.694136682326066179e+00,1.021401297592262059e-01,3.099079545410267714e-02,2.477327019364135852e-01,1.890797137836061625e-01,2.360554195655827359e-01,-3.439769556005214390e-01,1.309297254528933308e-01,3.071109644024896390e-01,-9.727248652127777617e-02,2.445132909854294545e-02,2.597117486340805859e-01,-2.995306108773132525e-01,-1.144873034107466298e-01,8.332311310990911379e-02,1.000000000000000000e+00 +-2.620082274319464610e-01,1.309241126975579095e-01,1.550173404465169380e-01,2.290351928486012434e-01,1.355830014974737097e-01,1.841756991634939666e-01,3.740495859304824450e-02,1.432554810241620236e-01,-1.318531366877148947e-01,-5.250125578672842908e-02,-1.872262906681710498e-02,2.208668508096660876e-01,1.719656748930894485e-01,-2.664136995765063742e-02,-3.048994777487798458e-02,-1.554169790273430829e-01,3.189090560269032260e-01,-1.618584889809290051e+00,-1.417869631432152167e+00,2.926453270514067784e-02,-1.000000000000000000e+00 +-1.906075541058226630e+00,-1.684024007286910596e+00,-1.340778937578472885e+00,-1.469986073671453619e+00,-2.579063985079173560e-01,-1.619864788609417738e+00,-1.533062362767425024e-01,1.024990390979742955e-01,2.722139247877681245e-01,3.416922464760236977e-01,1.998637733527559024e-01,-1.085948848370048153e-01,2.513993049009481395e-01,3.083956725607817084e-01,4.168154406519475330e-02,-1.614654912656046104e-01,2.233822286873882179e-01,-1.082611399000658892e-01,-3.102175660124854017e-01,2.767709743371943865e-01,1.000000000000000000e+00 +-1.403865864129003604e-01,1.399259893403922705e-01,1.822987714289338868e-01,2.233337833692906893e-01,2.711380196075012794e-01,4.136960628999039047e-01,-1.278568634968769296e-02,-7.653098140936862026e-02,-2.572331698025254881e-02,1.707020466287472726e-01,2.065920513285800508e-01,1.183980052005483008e-01,1.075900892651548701e-01,-1.555623109767140466e+00,-1.909353313594174706e+00,7.389214672735844314e-02,6.165284928008352150e-02,2.672516810167926971e-02,-1.437578316133034884e+00,1.044033025676337212e-02,-1.000000000000000000e+00 +-3.408276321069046988e-01,-1.146037249935432101e+00,-1.501258508232188316e+00,2.618804000103412688e-03,-3.833992773836243928e-01,-1.786375783453783894e+00,2.824428717436953257e-02,5.969626703842215165e-02,3.398492171004255380e-01,3.196012159857406498e-01,1.573379930471782706e-01,-2.098223058925809681e-01,1.593055053841970214e-01,-1.347342479348194288e+00,-1.674166194778130334e+00,1.528908359522206106e-01,8.505383672976472853e-02,-1.729846339704632197e+00,-2.337434662739074076e-01,8.752659306713833631e-02,1.000000000000000000e+00 +-1.412783597316017437e-01,4.731801517553746450e-02,2.343150309962709898e-01,2.573249258932783778e-01,1.910417264810912175e-01,-1.448915033225833371e+00,-1.668482896109561464e+00,-2.185696090003557968e-01,-2.576158986434173154e-02,-1.564639023958924513e+00,-3.033109236920639856e-02,1.986130184165910417e-01,2.692243894750914746e-01,-2.989017527663618418e-02,-2.447858565867271352e-01,-1.546116379421747788e-01,1.911562244413266831e-01,-1.761274715944235458e+00,-1.558771609949650250e+00,1.185904653993593988e-01,-1.000000000000000000e+00 +-1.869606538605044443e+00,-1.742161305177921893e+00,-1.705962237545518567e+00,-1.680726774343433316e+00,-2.857918908775195499e-01,-1.933229486682525478e+00,-7.713614059712470272e-02,-7.657536195635973597e-02,1.924996180568824267e-01,3.080269644621186353e-03,2.458123927851449952e-01,-2.384431090062408276e-01,4.062257989091383470e-02,-1.269543731853680413e+00,-1.805576190862282493e+00,1.471755939521104672e-01,5.569043668847070694e-02,-1.617454615027889675e+00,-2.240814913791160934e-01,8.825325484191345882e-02,1.000000000000000000e+00 +-9.196904305524630785e-02,5.969966196298605310e-02,1.086359809752615313e-01,2.512606763871440552e-01,2.094744769886715818e-01,-1.303860010467098540e+00,-1.617071325959459349e+00,4.671505936492224842e-02,1.082264663551268935e-02,-1.347863119666699250e+00,-3.034928686809768017e-04,2.294002941270299745e-01,1.181027073768831509e-01,-1.664669319623928612e+00,-1.804692453724187073e+00,8.403241356683452401e-02,1.735037831530633623e-01,5.715596369227590734e-02,-1.544565301931799528e+00,-3.264092251927003946e-02,-1.000000000000000000e+00 +-1.555022682862563510e-01,-1.125508257373301069e+00,-1.501457806107648896e+00,-7.326900178082657034e-02,-1.295022601664582163e-01,-1.531828174481691507e+00,-6.302335743966225312e-02,-1.634728460917521109e-01,-1.367145896989113707e-02,1.641630582463626531e-01,2.708179693392485099e-01,-3.283178875772138072e-01,3.473293642587648167e-01,3.770264645556749006e-01,-1.048516243520047075e-01,-1.735934660954378206e+00,-1.405843359387919600e+00,2.119896565479701955e-01,-2.917055976828555330e-01,-1.556421047832049043e+00,1.000000000000000000e+00 +-1.535012995537096414e-01,1.646959501643460166e-01,2.722442285579929622e-01,-1.675350761225579799e+00,-1.429210405398552153e+00,-1.925582100503623051e-01,1.795411376065435272e-01,-1.719388905193311334e+00,-1.287123594519922753e-01,-1.698818447393583841e-02,-4.319585086121631445e-03,2.068592938283637661e-01,6.763226153019955000e-02,-1.143541532515680720e-01,-2.263818919984550704e-01,-2.028328628885033014e-02,1.711518704530328727e-01,-1.576459216968581600e+00,-1.535806894782790755e+00,3.407970358393891397e-02,-1.000000000000000000e+00 +-1.786388176514004167e+00,-1.685889696824095507e+00,-1.608441581101702322e+00,-1.665274141382779849e+00,-3.107298980188865078e-01,-1.703074441527982597e+00,-8.020214110244330841e-02,1.159612282370702380e-01,2.790597354042892442e-01,1.195713541401621227e-01,1.827992363200610093e-01,-2.172429686024237583e-01,-6.056191698649612820e-02,2.799762459115179847e-01,-1.049038409106583247e-01,-1.702234460492283885e+00,-1.309815879622063362e+00,6.573030944695713862e-02,-1.000791266829980791e-01,-1.361385183472438865e+00,1.000000000000000000e+00 +-1.407177086790832587e-01,2.852591968528649380e-01,2.951756655992362477e-01,-1.449733370168583058e+00,-1.449509169095344108e+00,-1.880505444262600412e-01,1.166729570154840523e-01,-1.522909106459823469e+00,-2.239815175130627223e-01,8.318864492281358158e-02,2.137627597733297857e-01,1.992375630005557563e-01,4.048339239098861508e-01,-1.739775740934404125e+00,-1.837135735844621198e+00,2.133512564098599407e-01,3.844720367327983945e-01,9.980635896652981232e-02,-1.400939648441999807e+00,-3.883190660159061003e-02,-1.000000000000000000e+00 +-2.126020741230422451e-01,-1.311872790849536230e+00,-1.391669019449700340e+00,-7.875753174027555481e-04,-2.396346173070124375e-01,-1.754607623443531939e+00,-1.075734915011122839e-01,1.146509379456045127e-02,2.952091447636051025e-01,1.383247610116168369e-01,2.415999236601309441e-01,-9.295107545531325344e-02,3.205064148694648785e-02,-1.377446146155375084e+00,-1.696033905545283549e+00,-1.524333008493155894e+00,-1.431227615493637861e+00,-1.586872455940936399e+00,-2.421020614860027176e-01,-1.465509609927389656e+00,1.000000000000000000e+00 +-9.756487538296562678e-02,1.905828894672605966e-01,1.843750990526454858e-01,-1.360775204799180793e+00,-1.388809615833678679e+00,-1.758455596000101151e+00,-1.598231564606595656e+00,-1.603536979723443778e+00,-9.221819699563088557e-02,-1.475907296959872328e+00,4.609333441812505511e-02,2.021473772991954077e-01,1.269652458713305399e-01,-2.684483074984664319e-01,-1.962621436883517090e-01,-7.669821748926668181e-02,2.410952035134545368e-01,-1.701232758668220768e+00,-1.621400018873538684e+00,1.450006659205423376e-01,-1.000000000000000000e+00 +-1.919357411192960550e+00,-1.746523422285083393e+00,-1.589260229764755339e+00,-1.442571556730520399e+00,-2.789995926641056778e-01,-1.764857351249993656e+00,1.630000458435644228e-01,6.571362908834758182e-03,3.549137380973362843e-01,1.399597894133332576e-01,3.685141050889269021e-01,-3.130230034828292984e-01,3.053191735768333581e-01,-1.308207621013695476e+00,-1.577611713332105481e+00,-1.422370698021114377e+00,-1.478454732679892025e+00,-1.350695461184106438e+00,-2.198106740649748980e-01,-1.431188114865378891e+00,1.000000000000000000e+00 +-1.959723628626568459e-01,1.167913563581796932e-01,1.824795050519394946e-01,-1.511100532387372741e+00,-1.362183845710490449e+00,-1.920632789045093380e+00,-1.579189158682562599e+00,-1.484211511568479969e+00,-5.702889149716390549e-02,-1.454884880955336079e+00,6.729963140093969676e-02,3.690251353496150077e-01,2.324761940787350434e-01,-1.767268937057435263e+00,-1.766247949277564899e+00,1.532858233068019604e-01,1.552477914085325650e-01,-4.242737087494632964e-03,-1.555376670312583531e+00,-1.315702222326894377e-01,-1.000000000000000000e+00 +1.186726607285704116e-02,4.155599789751587281e-01,-1.251641913720423493e-02,-6.365542085251635340e-02,-1.321759374937407638e-01,-1.401692109535647712e-01,-4.792549716968761558e-02,-1.717425529678146212e+00,-1.346413395291601534e+00,-1.262823367737433700e-01,2.916611676991012203e-01,-1.729744498154153209e+00,1.027791152745445857e-01,1.846903559336730005e-01,-1.720817935394969300e-02,-1.813911094811911096e-01,1.743076865679060172e-01,-9.950741364948334500e-03,-4.235305658076960467e-01,1.543634301802584152e-01,1.000000000000000000e+00 +-1.839914152790248725e+00,-2.990889535071097338e-01,1.680357158788539640e-01,-1.447544727917205121e+00,2.176590145518261243e-01,1.325996131777733567e-01,1.390231493227850612e-01,-3.977803235383932379e-02,-1.532318405957663887e-02,1.224971194701602178e-01,3.141260429582210523e-01,2.573758769608737174e-01,2.382882287407745159e-01,-8.074346680799386611e-02,-2.279345605647102313e-01,-1.086430140186502163e-01,4.225392268433366127e-01,-1.186557328974662678e-01,-9.009329746143089623e-02,9.710452121918558555e-02,-1.000000000000000000e+00 +-1.612823155584582668e+00,-1.492408620970711031e-01,-2.927947714038789395e-02,-1.581898585174331684e+00,-2.639617439540696275e-01,4.074645484559386022e-02,-2.427247458169240826e-02,-1.681546120251358634e+00,-1.354123195036015304e+00,-8.456689840799687385e-02,1.220819181697277850e-01,-1.756485518145850966e+00,1.962228551288944522e-01,1.859644055105026117e-01,-1.552383657208578904e-01,-6.000494554658519775e-02,1.782292462513375697e-01,-4.014661907783578787e-02,3.379121773648191551e-02,1.016106829555737945e-01,1.000000000000000000e+00 +-1.780081046958263746e+00,-4.192030499949445099e-02,1.515788495426312610e-01,-1.427950548919541873e+00,2.592200930100108658e-01,1.312811868218668465e-01,1.718496148904553184e-02,-5.089705078785578679e-03,-1.266770518198281625e-01,1.002672490239872038e-01,4.249914927660260883e-02,2.590657667105403239e-01,2.273463138642181913e-01,-1.734370842420827730e+00,-1.651225611069535582e+00,-2.144473951662861921e-02,5.717543232942556841e-02,-1.556967000434823500e+00,-3.302190069655809579e-02,1.313883514775121553e-01,-1.000000000000000000e+00 +-1.336939134088614978e-01,2.876079839638858715e-01,2.395292122218867226e-02,7.718235769613168706e-04,-1.210079550689721201e-01,-6.948296810014226166e-02,1.107304529536503046e-01,-1.449098811951648802e+00,-1.416850769923243991e+00,-1.894821220905087145e-01,2.056007501673507987e-01,-1.629376976711315095e+00,2.652108869293851034e-01,-1.349109149383652451e+00,-1.626720009842021808e+00,9.262742226531375800e-02,1.952059358058028382e-01,-1.777446761957121035e+00,-1.366881397742658599e-01,1.802715457876161997e-01,1.000000000000000000e+00 +-1.796272690921347559e+00,-1.774123902044983658e-01,2.670581478373795781e-01,-1.278963068583510942e+00,1.469453996846848132e-01,-1.414317002840989490e+00,-1.376532910749186600e+00,1.581883384851158481e-01,-2.392557560679413331e-02,-1.485883854601798282e+00,1.397769915317580991e-01,3.184880880991732832e-01,2.909126178028541565e-01,5.254223392782449154e-02,-1.501833053874064572e-01,-1.967275627066273347e-01,3.699415999172078195e-01,-1.406049116031088952e-01,6.622133603538822577e-02,1.961873639760809973e-01,-1.000000000000000000e+00 +-1.785220638062096077e+00,-2.295243944030855021e-01,3.824649826658470253e-02,-1.648181044644347892e+00,-2.742777977271766976e-01,-2.575974150183087952e-01,-1.566125524681920636e-02,-1.429465606904201769e+00,-1.281389396059050778e+00,-2.009397256986373004e-01,2.219921338796986554e-01,-1.587302010170268396e+00,1.701491631286058959e-01,-1.451422498647342074e+00,-1.629706576250242733e+00,4.765660089118081699e-02,1.513431476593253278e-01,-1.744954124120697614e+00,-3.000077540398696230e-01,1.473663347261450762e-01,1.000000000000000000e+00 +-1.915984716237936869e+00,-2.334096645682603444e-01,2.969182944477763986e-01,-1.462364225027299458e+00,-9.038357273379871160e-04,-1.501601560571436567e+00,-1.569491762709352756e+00,-1.413126429675328095e-03,-2.823024453240063208e-02,-1.627235235307024297e+00,1.158073992136935126e-01,2.766491873201362139e-01,1.606535465287846354e-01,-1.612968800083773635e+00,-1.704458739669437284e+00,1.641455785950739488e-01,3.710519682415764908e-01,-1.704170907609168450e+00,-4.815258597647618932e-02,-4.618627193132339437e-02,-1.000000000000000000e+00 +-1.432041439121052584e-01,1.176013730967366833e-01,1.209900020741062621e-01,-4.888365609557257518e-04,-2.535302243252841592e-01,-2.654853813955358743e-02,7.763789683125185692e-02,-1.745798948827284480e+00,-1.583027137084846103e+00,-1.364820093782884713e-01,2.849165470997524485e-01,-1.641591214804483334e+00,9.071169690031330446e-02,2.004624515894348757e-01,-8.350256926870230911e-02,-1.665780049054627288e+00,-1.480118862690187775e+00,1.138372271329863294e-01,-4.213227756064114038e-03,-1.480969809958756933e+00,1.000000000000000000e+00 +-1.947212966606190365e+00,-1.109567050567978608e-01,9.189978066414331015e-02,1.377949703620761357e-01,-1.358465210982832128e+00,-1.191888379927300290e-01,1.348297913431806966e-02,-1.628476840873991360e+00,8.208056027268331722e-03,5.754932724803086402e-02,1.502609168270740425e-01,9.015234033881530662e-02,2.712580623103985622e-01,-7.811883730421693983e-02,-1.209705944878042005e-01,-1.897155308102837223e-01,3.321993044877320500e-01,-1.423230162477970018e-01,-4.922241589906117820e-04,1.276779005151182922e-01,-1.000000000000000000e+00 +-1.643142401212486892e+00,-4.452179782252499440e-02,2.761625880228188445e-02,-1.444505141847691521e+00,-1.864488011141737789e-01,4.235134262320812415e-02,-1.060818489425193190e-01,-1.530886704442798951e+00,-1.290949591393974583e+00,-1.578542625770643082e-01,2.071111419625968342e-01,-1.736294468528262191e+00,1.881918380973065519e-01,2.112289351330886022e-01,-5.637226055998517671e-02,-1.734874621224534508e+00,-1.383487644273780015e+00,1.199881250258862941e-01,-1.480144127027813172e-01,-1.548442094397331381e+00,1.000000000000000000e+00 +-1.849688848902060645e+00,-4.571354376676887987e-02,8.791423855935898146e-02,9.320985568107194308e-02,-1.209440457784467071e+00,-2.541410595060626942e-01,1.167608598191240132e-01,-1.472532643300827893e+00,-1.303253406076957110e-01,-4.200988326309663956e-02,-2.265506228267986644e-01,1.786626037264705258e-01,2.812036326502925787e-01,-1.662884083493961329e+00,-1.847554130340076650e+00,3.404476020084349908e-01,2.714841486400764170e-01,-1.642850792893414846e+00,-1.127204049092180166e-01,5.515944350723923917e-02,-1.000000000000000000e+00 +-1.059080862694527225e-01,2.413223144436135448e-01,1.188793573122913783e-01,2.759458307752131190e-01,-3.155105305463620224e-01,-4.618161741368533718e-02,-1.787389365572205069e-01,-1.675692373916033651e+00,-1.367666161849348638e+00,-2.735719631365116644e-01,2.681588822287698237e-01,-1.810320595153056988e+00,2.234518121411552816e-01,-1.309036186758603559e+00,-1.629338507535421199e+00,-1.586640938538630419e+00,-1.252224138790772212e+00,-1.510137892836192597e+00,-7.003442782371488429e-02,-1.457702130539146435e+00,1.000000000000000000e+00 +-1.825734321933270454e+00,-1.988173085426351294e-01,2.184221411006121993e-01,1.520609502758123732e-01,-1.243887567058084453e+00,-1.710232011557398790e+00,-1.424856931155371820e+00,-1.590944974346635732e+00,7.050679230094457350e-02,-1.371683718348912562e+00,-6.861154885317624630e-02,1.581601008181294232e-01,2.681787861269692708e-01,-1.504471581425083637e-01,-3.471875534253440754e-02,-9.232204486171889657e-02,1.687579589557818283e-01,-1.528039563690852809e-03,2.036078932836379307e-01,1.589408223412197008e-01,-1.000000000000000000e+00 +-1.821739796368849973e+00,-1.186406610554362334e-01,1.657895857813671547e-01,-1.623415940529338908e+00,-2.527373807759313307e-01,-4.807783132028257272e-02,-1.885058399457829187e-02,-1.612100802806384348e+00,-1.318830896830129662e+00,-2.655886226639870840e-01,2.087351429592352869e-01,-1.836812016330601871e+00,5.679997717382348488e-02,-1.326177945238083744e+00,-1.741631677579875470e+00,-1.552712102848185394e+00,-1.450288170305659596e+00,-1.572891868987263297e+00,-1.505080380159262154e-01,-1.401630510513969696e+00,1.000000000000000000e+00 +-1.925496555102242491e+00,-1.906305748726313254e-01,1.280547991103812289e-01,2.654419405709938506e-01,-1.239396153611779461e+00,-1.881188922805395958e+00,-1.387309755378072440e+00,-1.618537046170873017e+00,-4.292296268015079880e-02,-1.684758651153038134e+00,1.233955963793083588e-01,3.570822832340531106e-01,1.706324194092417867e-02,-1.774329777974420486e+00,-1.659496535286899777e+00,8.980207268961742928e-02,1.570836997909211830e-01,-1.883374127297818390e+00,-8.317299220505475210e-03,1.339917436991019395e-01,-1.000000000000000000e+00 +-4.604935331407342125e-02,-1.234022535552339317e+00,-1.489861091426315731e+00,-4.913043052586447967e-03,-2.590156368024213451e-01,-1.662104163159621617e+00,-5.207369989469273069e-02,-1.665437349206309259e+00,-1.229647888137037626e+00,-2.130412650900186111e-01,2.536501330803943577e-01,-1.787062084880876034e+00,6.970503853135476269e-02,3.262479990769734384e-01,-1.865786699508110991e-01,9.903207563649846223e-03,1.576147272749244821e-01,2.427976713302304468e-03,-1.703172656802548202e-01,8.404738727319956137e-02,1.000000000000000000e+00 +-1.871247213242097862e+00,-1.585637251903615763e-01,6.992527411208426802e-02,-1.475375407303459063e+00,-6.213881796473447183e-02,-7.554214817526197501e-02,2.442784591842216690e-01,2.511980873992987126e-02,9.329472155898771435e-03,1.454098576025833478e-02,-4.576900179080329450e-02,1.619136782862597157e-01,6.664832475728971195e-02,-1.353540837371562944e-01,-1.792257851943249436e-01,3.541029725012719009e-02,1.706196530629354724e-01,-1.548850570319505904e+00,-1.566653235345892847e+00,-9.476332446157373357e-02,-1.000000000000000000e+00 +-1.664312032916881012e+00,-1.792424242934206102e+00,-1.550040679881295125e+00,-1.722628866135070158e+00,-3.358656399764347045e-01,-1.609050084232439115e+00,-3.260669242273393081e-02,-1.399839822461237615e+00,-1.517878066986744434e+00,-1.829662077058151481e-01,3.590013195660626821e-02,-1.872548082063439701e+00,6.671205940344417107e-02,-3.332763700905849724e-02,-1.357451803972037074e-01,-8.369038624500416135e-02,2.200551866090619257e-02,-1.573374340703240226e-01,-1.710462813366873946e-01,1.267990236431605355e-01,1.000000000000000000e+00 +-1.810067284149239564e+00,-3.578680540845750047e-01,1.076401651684563421e-01,-1.298810633698214367e+00,1.221107915355371665e-01,2.726840583892822800e-01,1.445993161010468431e-03,-1.968125426327854144e-01,-2.781251465871359407e-01,1.331973805238755859e-01,-1.338553699277940934e-01,1.552493371473668837e-01,1.242063675351776919e-01,-1.747457590161428653e+00,-1.886239978448203347e+00,1.475060927519487863e-01,1.903783085105796857e-01,-2.908784561962698412e-01,-1.347455131304474696e+00,-2.255556498385771214e-01,-1.000000000000000000e+00 +-2.351463841078031136e-01,-1.356221143936683804e+00,-1.548648917862450070e+00,-1.615190690304739787e-02,-2.329305829899785962e-01,-1.563544415731793702e+00,9.712065439353889662e-02,-1.691415670496308588e+00,-1.388081797844022081e+00,-1.632355704138472863e-01,2.233080087874433906e-01,-1.875345470231006839e+00,-1.420174321688624786e-02,-1.478479012048540042e+00,-1.703585643539405226e+00,9.877765948046887678e-02,1.713826636563931527e-01,-1.684931314778971290e+00,-1.740550633523509361e-01,9.656289639812394576e-02,1.000000000000000000e+00 +-1.807051206113242658e+00,-1.702030573975785166e-01,1.457697719140259862e-01,-1.401432021185573307e+00,1.345289163726789416e-01,-1.356331314153615741e+00,-1.633447265801356130e+00,1.312671853011658854e-02,-2.688291691020219809e-02,-1.553230978892023328e+00,1.363204035600718012e-02,2.054077132999896360e-01,1.865197473453200638e-01,-8.720626685161123048e-02,-1.437604573095554172e-01,-1.211220257470444622e-01,1.462310180151815686e-01,-1.580157720731842019e+00,-1.349661545793155115e+00,-7.460394207961704161e-02,-1.000000000000000000e+00 +-1.931195335870454999e+00,-1.835012547290038487e+00,-1.563035808850954167e+00,-1.365951090765915588e+00,-2.419776476979298985e-01,-1.507160458977945705e+00,-8.698048833069951802e-02,-1.647913694272572949e+00,-1.427110558973703647e+00,-6.158962399442696745e-02,2.602267054057313400e-01,-1.645387388779374405e+00,1.823394304296815649e-01,-1.178329356963998098e+00,-1.590525171370741120e+00,8.104795490439978267e-02,8.563665889620825089e-02,-1.774907163470250460e+00,-2.473909510286317892e-01,1.307471694166303378e-01,1.000000000000000000e+00 +-1.861598019139751425e+00,-6.684922331319176347e-03,1.222846918474984612e-01,-1.346678003138850332e+00,4.520385029215109873e-02,-1.267055205377054738e+00,-1.427484046466195089e+00,-1.127116818049106323e-01,-3.035474687264514554e-02,-1.582916251647630279e+00,3.008096301293413516e-02,1.793840427488923583e-01,3.840534720938503233e-01,-1.621601357089720974e+00,-1.602307822388481906e+00,1.143111850867933044e-01,1.964837344560850796e-01,-6.220973587830265494e-02,-1.465073997817349927e+00,-7.554554908694857684e-02,-1.000000000000000000e+00 +-1.678736409827504550e-01,-1.397225422498413305e+00,-1.365152865990226561e+00,-1.024009527884461868e-01,-1.690446713422619207e-01,-1.516140030873107447e+00,9.681822913903759265e-02,-1.476257944029218949e+00,-1.411731881032226577e+00,-1.703173430826560031e-01,7.916337182364427405e-02,-1.768682251963919372e+00,7.807644879584546560e-03,2.850324494224795169e-01,-2.784570630307360573e-02,-1.552327257047553477e+00,-1.278326320403236460e+00,1.918599970261308241e-01,-1.350110322304288180e-01,-1.295089347496607868e+00,1.000000000000000000e+00 +-1.698609511154017593e+00,-1.719161528378636561e-01,1.470416765064267994e-01,2.653323661514429554e-01,-1.364127946851214856e+00,-2.333175690266216240e-01,-7.861458406690191580e-02,-1.426970427975007283e+00,1.117479189963837688e-01,9.526638619662716745e-02,2.269126506552598399e-01,2.995679068958879143e-01,1.814027885997889222e-01,1.185629160547931049e-02,-1.884169765307397992e-01,-1.145857514130308175e-01,3.129948381144793679e-01,-1.723617348532140880e+00,-1.384166647916821979e+00,-1.045716089535642102e-02,-1.000000000000000000e+00 +-1.658897420735486294e+00,-1.620726660547902265e+00,-1.660113144619751901e+00,-1.460868895984654303e+00,-2.255437947025988321e-01,-1.744884626955741647e+00,-1.362731967233296315e-01,-1.457680464175254986e+00,-1.303540666045219121e+00,-1.718893334632473346e-01,2.164523847625174358e-01,-1.884134174199312284e+00,1.430050120792410451e-01,1.974210530718532863e-01,-1.147592315053487799e-01,-1.699573877831422886e+00,-1.438276927437653452e+00,2.286490534459723056e-01,-3.407135222878493463e-01,-1.631851369298568777e+00,1.000000000000000000e+00 +-1.750902203433937432e+00,-1.890080437519559564e-01,1.785743931325385614e-01,2.414132558003883045e-01,-1.517025238295976575e+00,-3.302434795072037299e-02,7.619542695607210703e-03,-1.543139691965131455e+00,-2.701194395846782115e-01,1.521473262932916681e-01,-3.177843420423827336e-03,2.443282642050864373e-01,7.253439665310934537e-02,-1.493056011791469295e+00,-1.759651362925155338e+00,1.136859516285110977e-01,2.436539507012564498e-01,-1.175244628411053344e-01,-1.509998795837532715e+00,-9.186531512934625887e-02,-1.000000000000000000e+00 +-1.417466391479324517e-01,-1.346903524100661720e+00,-1.530929088287875217e+00,-8.903360448265199012e-02,-2.719380145026851214e-01,-1.783814970375273479e+00,7.056489037692566940e-03,-1.350262034702866876e+00,-1.405801340336546135e+00,-1.825652336646692853e-01,2.381831403450938855e-01,-1.639463560709983003e+00,1.586699744579586624e-02,-1.426067408359480426e+00,-1.774135337473782048e+00,-1.263571548561680746e+00,-1.423664858305446090e+00,-1.341604123953090477e+00,-1.745310855853467458e-01,-1.260971454265339631e+00,1.000000000000000000e+00 +-1.919642635345555792e+00,-1.214332625549610356e-01,2.029412211540288224e-01,1.199843114974788738e-01,-1.335700473640089481e+00,-1.815504579463949719e+00,-1.513510260756883996e+00,-1.745957621058216835e+00,-1.207211194117849551e-01,-1.306597022005618225e+00,-1.397984640592999372e-01,2.918508859246253251e-01,1.222937644932370754e-01,-4.161281462589887237e-02,-2.428571363426271223e-01,-2.448264522598121717e-02,7.152417885188167013e-03,-1.717509711129774574e+00,-1.641718810659424932e+00,-6.696670886160294156e-02,-1.000000000000000000e+00 +-1.961262659443256950e+00,-1.867099466739700286e+00,-1.544511259144617954e+00,-1.555113136470289925e+00,-3.633517516101433253e-01,-1.575628606715051339e+00,-1.169198757416956003e-01,-1.541564375167977952e+00,-1.384660207425590706e+00,-2.087540513422468103e-01,2.039514156118009125e-01,-1.587861423462168409e+00,2.521155683909973577e-01,-1.372270524029966632e+00,-1.550817814164088260e+00,-1.426026796856582290e+00,-1.365768584159129384e+00,-1.311865436581222788e+00,-1.850893218702704124e-01,-1.637070564823309038e+00,1.000000000000000000e+00 +-1.747474111846821110e+00,-2.290166316437901584e-01,2.180988537522543513e-01,2.694592974029106358e-01,-1.211201451859689193e+00,-1.767984885951759289e+00,-1.502625876119413562e+00,-1.438947562452083551e+00,8.065893288718263554e-02,-1.528688378021011207e+00,1.087299778884808776e-01,3.198929781779950021e-01,1.039774594364287486e-01,-1.798111513407557371e+00,-1.545989842407716974e+00,9.064067535532020770e-02,2.432173424281315610e-01,-2.081961545829282001e-01,-1.659416484977199513e+00,-9.793454098837411914e-02,-1.000000000000000000e+00 +-1.541891116190167443e-01,1.198641927962546261e-01,-9.696410479856587550e-03,-1.477477922413563460e+00,-1.597051621274383271e+00,2.406839794158164292e-01,1.407643727635641273e-01,-1.553446610635859315e+00,2.989015888209632932e-01,3.165877637380919429e-01,1.169824338328576685e-01,-2.008026315114123383e-01,-6.220300738583128819e-02,2.915046298468972896e-01,-1.616502083500595544e-01,-1.022217754874521073e-01,9.035042558882541708e-02,-1.332018434095425530e-01,-3.146826509327730337e-01,6.291195189475287664e-02,1.000000000000000000e+00 +-1.901571954471936166e-01,2.036693401068984388e-01,-8.558809588610771790e-04,1.799349081329099098e-01,9.517185955184281898e-02,3.590268720909888245e-01,1.130070230940566217e-01,-1.649686655919097245e+00,-1.567966253893172901e+00,5.390840436566476934e-02,1.478514498943867550e-01,-1.164278779706381162e+00,2.523227821439278373e-01,-1.771175375557790255e-01,-1.835251468954054443e-01,-7.142510660604928230e-02,1.156365524626673247e-01,1.752520883288299913e-02,1.580674384399360921e-01,1.595989854848350875e-01,-1.000000000000000000e+00 +-1.977287914640140531e+00,-1.086192057027827729e-01,1.128753655542010237e-01,7.440106077279728947e-02,-1.829164392143819207e+00,1.001733311909408508e-01,1.656542203717096262e-01,-1.530841270169906565e+00,1.540936542463245962e-01,6.463618023479822394e-02,4.251644257692598350e-01,-1.355725998615462391e-01,1.214504897439154657e-01,4.189501652900345929e-01,-1.659671719591041539e-01,-2.173559202300396342e-01,2.715598643706897408e-01,4.647816024550471825e-02,-2.818481592934465874e-01,-3.720732940340260031e-02,1.000000000000000000e+00 +-1.533720518381189724e-01,3.892743879497452819e-01,4.180672620449811527e-02,1.013359898957980343e-01,7.252934689412099400e-02,2.300045152220870637e-01,-2.934514337618384511e-02,-1.349080214839665226e+00,-1.695051566604298010e+00,-2.374758368466359515e-01,3.977900521952173335e-02,-1.247430214337799992e+00,6.920324582981349226e-02,-1.651284782420658681e+00,-1.725574998237646929e+00,1.484493211461310747e-01,1.961649923164716092e-01,-1.743295333073816789e+00,-7.901003630137488909e-02,-6.681325434829828158e-02,-1.000000000000000000e+00 +-2.096774839232835308e-01,3.133813251872709094e-01,4.719834877226380954e-03,-1.486312632979153836e+00,-1.556459141653098399e+00,4.912658260630371754e-02,7.744509731644938499e-02,-1.568503548805284309e+00,2.819467580128540152e-01,2.525988221138925072e-01,1.034772777057548221e-01,-7.926864226769231303e-02,2.438139918066015988e-01,-1.101530864062478798e+00,-1.641623168577236003e+00,-1.198354932584080879e-01,1.378072651587314845e-01,-1.785790733459343693e+00,-3.457637697154141154e-01,1.918905251071924556e-01,1.000000000000000000e+00 +-2.750489793675787720e-01,6.148307212179922321e-02,1.736431353070554684e-01,1.579328863818725837e-01,2.462079915353442006e-01,-1.411825664811311221e+00,-1.534168967146540163e+00,-1.551232148260871746e+00,-1.535742722413438566e+00,-1.770318007937173865e+00,1.751673676029186222e-02,-1.190055568191122015e+00,2.059950403699849497e-01,-1.012485079418455336e-01,-2.060936796710344243e-01,3.384030592975885432e-02,2.505534977666529217e-01,2.009368311663959072e-01,2.824259611451782614e-01,8.170939704749366483e-02,-1.000000000000000000e+00 +-1.917642069761332779e+00,-2.926585656134242375e-01,1.528819448980941464e-01,1.815071978415521148e-01,-1.882235658081898855e+00,1.575446717586391765e-01,-1.408146613731111989e-02,-1.571190358338920401e+00,1.657830368464734416e-01,1.461993811029305701e-01,2.901607518443575229e-01,-2.063763375229137609e-01,9.105827938715693737e-02,-1.402960325339824843e+00,-1.809441313322212919e+00,5.135189814511180451e-02,2.236863619589410657e-01,-1.729600227087127795e+00,-1.870865326701982301e-01,2.039074972169292455e-01,1.000000000000000000e+00 +-4.366449421615858917e-01,-1.003944793806665903e-02,1.918228198993621181e-03,2.955270038624893125e-01,1.648973129255825454e-01,-1.169406948177582839e+00,-1.631843085827449524e+00,-1.802517558474467707e+00,-1.706914345186495652e+00,-1.690513861068017265e+00,7.390782350365482367e-02,-1.409653456133216576e+00,3.350455036101138151e-01,-1.564931056937633347e+00,-1.688642083380686554e+00,7.406743163755136194e-02,1.813613607643461134e-01,-1.772481085071356821e+00,3.485842607448004504e-02,1.003860651007464078e-01,-1.000000000000000000e+00 +-1.798900272653050914e-01,2.389637741664693005e-01,1.663524608467675803e-02,-1.353765703336621495e+00,-1.959743191110952631e+00,2.264950660320298459e-01,1.806454108733758779e-01,-1.559512852094719459e+00,3.648320019934763181e-01,2.358935068061861207e-01,3.078967316911840890e-01,-3.361268876809028749e-01,7.867525194677538192e-03,3.361952823430025550e-01,1.096649834255997713e-01,-1.651150588517939832e+00,-1.265011938517930368e+00,1.393637110926818079e-02,-2.419700909072255435e-01,-1.331374404824197111e+00,1.000000000000000000e+00 +-3.309211948171192352e-01,2.421839490070105683e-01,6.136022709953796450e-02,-1.201853652373070069e+00,-1.436604493724723097e+00,-1.198067495246635250e-01,1.474701755038044515e-01,1.895277933144060289e-01,-1.638327916991755062e+00,-1.563818191245952005e-01,-1.077378310694679930e-01,-1.403821945296813034e+00,1.368941449902785490e-01,-3.477763887439616619e-03,7.226365175294849341e-02,-6.143754737558303897e-02,2.795623814128017637e-01,-1.289968880168595733e-01,-3.133117511980514081e-02,-1.017084218553041403e-01,-1.000000000000000000e+00 +-1.686938541095525990e+00,-5.872095876893711208e-02,2.443208985248077059e-01,9.212828068375636392e-02,-1.739992588081891389e+00,-8.489541302770341191e-02,-4.399330434624062341e-02,-1.530747659062598354e+00,2.738022830851473688e-01,9.055475238662805126e-02,6.543081035374409549e-02,2.659068042593432102e-02,2.048421980933542441e-01,3.147989394625860804e-01,-1.865517304471441262e-01,-1.775850268471311999e+00,-1.600212304956398990e+00,4.336575018149410599e-02,-9.172339110144461793e-02,-1.218500129682053457e+00,1.000000000000000000e+00 +-2.147425078722564606e-01,1.363834862484123445e-01,6.828257638775982186e-02,-1.481775071019213907e+00,-1.351991532810939312e+00,-3.283521414091315482e-01,-3.722540922456851059e-02,3.703523150812216419e-02,-1.661559154803918359e+00,-7.850714527956696720e-02,7.419368308494322939e-03,-1.244710516344766704e+00,2.207972406114958874e-01,-1.606888032720614534e+00,-1.770546800386025632e+00,1.274118906779919680e-03,1.911757525444973127e-01,-1.672845872229138164e+00,1.400165475014619743e-01,-1.208990314961668616e-01,-1.000000000000000000e+00 +-2.772045361255325302e-01,1.711467383161677236e-01,2.451393212895625756e-02,-1.587166372966360095e+00,-1.577276868896203776e+00,1.972544845751455778e-01,-1.032205822818711427e-01,-1.672327308636493370e+00,2.545592984995520558e-01,1.816840435404763476e-01,5.871646934329571854e-02,-2.502838370781583222e-01,2.337932822664689214e-01,-1.254707426736235476e+00,-1.578635681096223875e+00,-1.264382673090489906e+00,-1.367165619666614651e+00,-1.566260933111969456e+00,-1.542597882273265830e-01,-1.271568528877850435e+00,1.000000000000000000e+00 +-1.192345410485343982e-01,2.876314065052951729e-01,1.673852107512977250e-01,-1.390331194293130679e+00,-1.455016824134779840e+00,-1.768413949953279607e+00,-1.450095613466445554e+00,1.650535627965662722e-01,-1.561735774153465428e+00,-1.470408862817280893e+00,2.583023118478519967e-02,-1.241302664921004606e+00,1.513177057589079055e-01,-3.912346900213074796e-02,1.172815152082321011e-02,-1.029777163955075681e-02,2.244996134321211312e-01,-1.300648754226581272e-02,7.335149050516499847e-02,5.772273621679507860e-02,-1.000000000000000000e+00 +-1.813573345588654018e+00,-2.220478181890921665e-01,5.467008543926200892e-02,3.689254172690206723e-02,-1.665402596540724867e+00,4.922176964755629186e-02,-1.284888778791378472e-01,-1.414102000818379556e+00,1.580772852890507674e-01,1.775797928577861062e-01,1.632271718891248613e-01,-1.012449705210102247e-01,1.195179981520401447e-01,-1.362363523651744623e+00,-1.796199810051825718e+00,-1.432072896554568597e+00,-1.283539847349572938e+00,-1.532459423013815769e+00,-3.101370512901745480e-01,-1.425056629662605934e+00,1.000000000000000000e+00 +-2.321712416461661488e-01,1.197055710457237271e-01,2.331169061402619258e-01,-1.359777347085656896e+00,-1.205652424485054386e+00,-1.656023067673558780e+00,-1.663543935883512015e+00,-4.702894733069958033e-02,-1.640070771258239635e+00,-1.355343200009919924e+00,-8.415678213258656615e-03,-1.486702329052909999e+00,2.426856412005025387e-01,-1.659145659484962065e+00,-1.741035399782207449e+00,2.753416158423056537e-01,4.119729903099007551e-01,-1.851604568082790614e+00,9.514474688383869894e-02,3.355685959805613239e-01,-1.000000000000000000e+00 +-1.500485907047857115e-01,-1.221950377757007544e+00,-1.442912336766244419e+00,-1.681670222929709801e+00,-1.788854353140276299e+00,-1.454613944941973269e+00,2.198577103874525124e-02,-1.560819643228220199e+00,3.205792112120700033e-01,1.354250606290548220e-01,2.327374602498822609e-01,-4.973251672414213953e-02,1.334910473910854434e-01,2.103981666313979315e-01,-1.271344326814805581e-01,-4.364511088781411474e-02,2.178793215798139060e-01,-2.499218596906974676e-01,-2.186440282503921972e-01,1.744750978160619914e-01,1.000000000000000000e+00 +-2.192300878144892440e-01,2.129718927342666435e-01,3.987026058767699499e-02,2.000062748130256585e-01,2.628984287197382863e-01,2.270013246051293954e-01,-8.614670694217999025e-02,-1.543148031218893435e+00,-1.776428408697541705e+00,-3.957910129421529644e-02,-1.445144355756989851e-01,-1.229806842034160796e+00,1.711086066476480427e-01,-5.751169330957496550e-02,-1.759722175187910798e-01,-8.966529641510720405e-03,2.386008593071037298e-02,-1.414976449392172819e+00,-1.633366652713292622e+00,-1.020480016423235825e-01,-1.000000000000000000e+00 +-1.797731426999819693e+00,-1.752605155053432062e+00,-1.548023547333538863e+00,-1.775979434727979062e-02,-1.752352156931570981e+00,-1.478995192351079568e+00,-3.220116500219568495e-02,-1.565956927518345143e+00,1.036726623198800656e-01,2.016167245776253059e-01,2.007474174373383158e-01,-2.181649250102777327e-01,1.803902425467817372e-01,2.805682531273903102e-01,-3.578751536483423118e-02,-3.153716615350411479e-01,3.526011840434244426e-01,-1.555955680862944890e-01,-1.788745791555167719e-01,2.078745575009158519e-01,1.000000000000000000e+00 +-1.490027622720656031e-01,2.289246899079383502e-01,4.028490913735319201e-01,3.967488799718776882e-02,3.347084845734267233e-01,2.145937412022381197e-01,2.485608235905084618e-01,-1.579188017895288620e+00,-1.762261402419999401e+00,-8.870698298634535628e-02,-4.629015332510245245e-02,-1.174944430751200697e+00,2.415701140845060158e-01,-1.916344927146877319e+00,-1.677645663723282832e+00,1.576777221398396600e-01,1.798218039140481450e-01,-1.175696772797820699e-01,-1.526183409926597845e+00,-1.406353750619999954e-02,-1.000000000000000000e+00 +-2.804450381031173278e-01,-1.388453345596431854e+00,-1.416961652978935504e+00,-1.605161445656936747e+00,-1.755528150368922180e+00,-1.524795721013195937e+00,-1.240352383476334697e-01,-1.636548475370386946e+00,2.790995590094988987e-01,4.497646242908202863e-02,1.997987723294708806e-01,-3.019569124547694106e-01,8.327915621047257688e-02,-1.287148835552201165e+00,-1.625334029447224937e+00,1.748064638310643515e-01,2.640000800107265011e-01,-1.725001420021360810e+00,-2.696708474908042219e-01,1.930095222890825801e-01,1.000000000000000000e+00 +-1.926953285475565270e-01,2.189375352722924828e-01,4.539331996887961684e-02,3.008432471831398169e-01,2.565262844758790517e-01,-1.293581987033126879e+00,-1.548045675190745873e+00,-1.451162655981990124e+00,-1.525072498757130024e+00,-1.758901982256172669e+00,-3.355741212560588854e-02,-1.307502230564176804e+00,2.578444830799039855e-01,-8.432854820882182412e-02,-1.144569608876211675e-01,9.693908609789249342e-02,3.263164181899512184e-01,-1.789185589176669255e+00,-1.470419019157990004e+00,-4.516418069697201998e-02,-1.000000000000000000e+00 +-1.681524041973221362e+00,-1.757453944303776217e+00,-1.708761911120806110e+00,-1.549405097104009088e-01,-1.902663562777817674e+00,-1.548997546776542000e+00,7.351945697999465179e-02,-1.605305977413101326e+00,1.995461886745794333e-01,-4.181048681232629738e-02,3.660708897173430287e-01,-6.655161461117785338e-02,2.064950518813776226e-01,-1.398963379454520872e+00,-1.715046108526779189e+00,2.116278766484822604e-01,8.234758695042038168e-02,-1.915033149590992467e+00,-1.661268372122445269e-01,1.262595222157170127e-01,1.000000000000000000e+00 +-1.962283649628915050e-01,1.122058887764890850e-01,1.381278041680962521e-01,8.728184706616783084e-02,1.127894522815892503e-01,-1.609889772273879860e+00,-1.525538454944675548e+00,-1.598660103027582879e+00,-1.769575663994145120e+00,-1.600323143094793954e+00,2.014436967072089357e-01,-1.416089356524305787e+00,2.288057989463968267e-01,-1.556363659198443550e+00,-1.692201985594345981e+00,1.091619765004213927e-01,1.858051152871127432e-01,-3.681708277874619351e-02,-1.506373588134407582e+00,8.912630388338534104e-02,-1.000000000000000000e+00 +-5.188785821684105404e-02,-1.374675205996179317e+00,-1.369049881942256075e+00,-1.535576187239738433e+00,-1.788853910025122618e+00,-1.607163819785809356e+00,-1.372988750116458656e-01,-1.451845451849335111e+00,1.683149804906874658e-01,5.818964701482091939e-02,2.432364208586114407e-01,-1.366346592229962797e-01,2.882246812514612233e-01,2.323272716510418334e-01,-1.156633142470376435e-01,-1.722224223048894443e+00,-1.356919905977978402e+00,2.339505846669169831e-01,-2.983554805679451971e-01,-1.444471577260626693e+00,1.000000000000000000e+00 +-1.723282596120939703e-02,9.922894674221888200e-03,2.114255707134858886e-01,-1.256611435471116200e+00,-1.338172796419482058e+00,-1.393884748518721406e-01,-1.422037572426880780e-01,7.951209810074390261e-02,-1.701304200230044028e+00,-1.278531280046300567e-01,1.665352764802276175e-02,-1.531460413957198563e+00,1.201004855627265944e-01,9.143562050819743769e-02,-8.495073340818597163e-02,-8.640815974854335058e-02,3.051292050533321865e-01,-1.782691346137809996e+00,-1.541673503964391179e+00,4.359225158923388244e-02,-1.000000000000000000e+00 +-1.759731435909149821e+00,-1.722540069232149307e+00,-1.350575599538822669e+00,1.530087231441150664e-01,-1.919227638739745778e+00,-1.522311312217412116e+00,2.663977705038157034e-02,-1.462895398911590927e+00,2.346870079004382825e-01,5.298448739890479486e-02,3.208235596105920018e-01,-3.225522417942412456e-01,2.151378677463345324e-01,2.244448666307395646e-01,-1.351102521335871276e-01,-1.674098601469833580e+00,-1.321534060738071670e+00,2.232323694424712124e-01,-2.410302168203579953e-01,-1.419962320981015935e+00,1.000000000000000000e+00 +-2.633866754547229960e-01,1.358270758478960505e-02,2.574503224364339538e-01,-1.443596796605898014e+00,-1.397195964349720265e+00,-2.066669973860401355e-01,-1.758563845619880994e-01,5.331874892815188782e-02,-1.852381209734429879e+00,-1.805032153887715096e-01,1.195129378885405880e-01,-1.364271966209453790e+00,2.664623692271294031e-01,-1.600743433266965665e+00,-1.788286601561143163e+00,3.068265358594896020e-01,2.559739465456911667e-01,-1.971470390451849075e-01,-1.650667372783046982e+00,8.264199620782243516e-02,-1.000000000000000000e+00 +-2.481697005315772475e-01,-1.381967198312306300e+00,-1.512006400315489163e+00,-1.617024483795716172e+00,-1.836827134394403815e+00,-1.545026569114187343e+00,-1.582826646629847955e-02,-1.507168721185889737e+00,1.310109632937027091e-01,1.921808605290821204e-01,1.145040726005610437e-01,-1.219314979512694519e-01,2.975686261079176775e-01,-1.410124262462820521e+00,-1.564041871941007189e+00,-1.616683010822192346e+00,-1.563536729174665130e+00,-1.367834179879528822e+00,-1.919167707969222370e-01,-1.321645793082277809e+00,1.000000000000000000e+00 +-2.250694852470974394e-01,2.586746931010264205e-01,1.270736451133486211e-01,-1.453749431420937599e+00,-1.331400637263621345e+00,-1.916989105138284133e+00,-1.470519389589342474e+00,-2.575670503203331130e-02,-1.546322707545896735e+00,-1.678294797276697059e+00,1.804925820963580729e-01,-1.338470925613644669e+00,9.358071893679681397e-02,-2.050571700633527783e-01,-2.592183686402053100e-01,-2.760682876197858016e-01,2.474594164336252622e-01,-1.622977875468254227e+00,-1.600052899883098068e+00,-2.545593658316831764e-02,-1.000000000000000000e+00 +-2.008138185897252459e+00,-1.769840576784453168e+00,-1.594166575905737071e+00,1.744045374285137229e-02,-1.788144034741654620e+00,-1.604207237451122481e+00,7.450619461755142448e-02,-1.570630280276348323e+00,2.986456564471063890e-01,1.557489853546121794e-01,1.807124548561135913e-01,-3.018706573418425410e-01,1.530498899233971588e-02,-1.296057054467206537e+00,-1.703412346621872908e+00,-1.300735058435303459e+00,-1.236030663661329188e+00,-1.545097966404944456e+00,-2.497731242540399133e-01,-1.288660072959546321e+00,1.000000000000000000e+00 +-2.017963239069477388e-01,2.254262838857801210e-01,2.351494609794932966e-01,-1.293976900602812563e+00,-1.611052001077982299e+00,-1.690434313162011648e+00,-1.662958075946455505e+00,4.345128772439012244e-02,-1.672573879733247004e+00,-1.547695599399579569e+00,3.607367517426384590e-02,-1.305287577992165327e+00,2.629757329469552540e-01,-1.620581609283257007e+00,-1.849230605960164198e+00,4.143028843267702876e-02,1.501687731134105919e-01,-2.245417608825056588e-01,-1.591117214434435212e+00,-2.607642312533986484e-02,-1.000000000000000000e+00 +-4.239786628194559537e-01,1.954984361132021675e-01,-1.001112260934661768e-01,-1.521021702018586108e+00,-1.847664734870663183e+00,3.476951476860069834e-02,3.908534827535986578e-02,-3.441650628764165304e-02,-1.461542283580969714e+00,-4.302677154180577224e-02,1.998236051372857813e-01,-1.747447584324808734e+00,2.825811816454654180e-01,2.453530971542590700e-01,-1.326706774301590896e-01,-6.007190044516801108e-02,2.910221889601137812e-01,-2.185449015932421912e-01,4.480722461949049329e-02,8.659013180298130719e-02,1.000000000000000000e+00 +-1.801324665127946645e+00,-1.719544891428557709e-01,1.088482489085384614e-01,-1.299025138906894750e+00,2.763992571685174870e-01,2.530370326242789569e-01,1.448570234705879867e-01,-1.611682407748750157e+00,-1.743856501784443847e+00,-1.956733507539220041e-01,-1.178153849953956361e-02,-1.489959017649406636e+00,1.875208794936734369e-01,5.437841947870207526e-02,-1.402454379129729478e-01,-1.203440513115870830e-01,2.307435421811548926e-01,-2.925237475086465144e-01,1.891221967490180206e-02,1.194696285086674498e-01,-1.000000000000000000e+00 +-1.846673338107843509e+00,-3.023959190237470729e-01,2.286684893430069587e-01,5.411855215442593070e-02,-1.960626821316767021e+00,3.792700526303909303e-01,-8.648872687750591703e-02,2.606519216137613559e-02,-1.380530914991796365e+00,-1.484316578276552445e-01,7.369935626330553768e-02,-1.661572947509190268e+00,9.848980253666997364e-02,2.517583000120153236e-01,-9.123950666640436025e-02,-1.318329915585552681e-01,2.108636616192697266e-01,-2.370676094466734884e-01,-4.348157446128733117e-01,2.992036293923540646e-01,1.000000000000000000e+00 +-1.883699443687262276e+00,-1.882364363868459511e-01,2.543184252246958876e-01,-1.382661717471148188e+00,2.087119397685269773e-01,1.230869317918208139e-01,-1.017833311620702230e-01,-1.621497538584965925e+00,-1.533846599591235815e+00,-9.491133323523429088e-02,3.604890941637624302e-02,-1.593771289307023498e+00,2.864784080541166178e-01,-1.413364263952484379e+00,-1.781620287627969201e+00,1.188810739693684504e-01,3.699356811418870183e-01,-1.680023429240815380e+00,1.637000803747315214e-01,1.490366681935645088e-01,-1.000000000000000000e+00 +-2.710907429413343950e-01,2.994346243336623026e-01,-2.260029579715211456e-02,-1.492730556851320056e+00,-1.746468660413026175e+00,-1.010087151397107141e-02,-5.373222621421234330e-02,1.648961498104867252e-01,-1.496528298955463798e+00,-2.121406732334990553e-03,2.401872943645969871e-01,-1.619673633875661656e+00,2.162543120494445081e-01,-1.387091666676599333e+00,-1.638646216342895423e+00,3.141293775056863691e-02,2.319621855529500343e-01,-1.730590469786037477e+00,-1.413321507921310727e-01,4.549543055515198331e-01,1.000000000000000000e+00 +-1.778511147832783301e+00,-1.013988032028912412e-01,2.823156451699946334e-01,-1.485894784482977737e+00,1.917891809315158680e-01,-1.207316588191012396e+00,-1.580868066414439221e+00,-1.395163889088425702e+00,-1.649384640267517854e+00,-1.687806656840818098e+00,-1.896454383487397866e-01,-1.222417558878858390e+00,2.100555357210017182e-01,9.232630392069701708e-03,-2.889446551393878293e-01,-1.061335260786943485e-01,3.086988443948957550e-01,-5.761031263168545774e-02,-8.365443100916615526e-02,-2.975471396689306769e-02,-1.000000000000000000e+00 +-1.902045354412928546e+00,-2.251341199966401529e-01,-2.937591749939713615e-02,5.633827003579487680e-02,-1.667111122422912040e+00,6.912288299899774224e-03,4.347368841819030522e-02,-2.944643422612748807e-01,-1.394011698904371599e+00,-1.911564700887848911e-01,2.281464495289923788e-01,-1.561766753820800879e+00,1.966269197021561221e-01,-1.180009473192372926e+00,-1.712197917581733231e+00,2.464873639021550322e-01,1.919760488022198286e-01,-1.663469084195813963e+00,-1.645175843233691593e-01,1.209532845560358227e-01,1.000000000000000000e+00 +-1.833114143413420383e+00,-6.171028862943107873e-02,5.754822885933238985e-02,-1.560724420388548861e+00,3.632564576682422164e-01,-1.481945268653765746e+00,-1.279587882018693001e+00,-1.656645719030719555e+00,-1.736443148111497914e+00,-1.729863960812176193e+00,-6.536101742447317231e-02,-1.330954960290977374e+00,2.008390928839592915e-01,-1.718026687430719956e+00,-1.745088642128966860e+00,8.660695288671575731e-02,8.378037007097807742e-02,-1.719867788414559451e+00,7.806008967015282130e-02,2.804763975134820508e-02,-1.000000000000000000e+00 +-2.768067646498343914e-01,2.125317705033215876e-01,1.271250686981756362e-01,-1.582895884622139926e+00,-1.906587196338887846e+00,2.675521541774043138e-02,2.390045238483756718e-02,5.588645404529107852e-03,-1.503449110022147872e+00,-2.881893140624296468e-01,3.390313987583383759e-01,-1.628713365152743453e+00,-1.375870843740442662e-01,2.395937847036929413e-01,-2.358512458605327711e-01,-1.754802431243140504e+00,-1.361949088710851852e+00,1.429327083128897058e-01,-4.043767937558144787e-01,-1.490996219627224839e+00,1.000000000000000000e+00 +-1.761864421231023936e+00,-2.778956981999408660e-01,2.267530183011868539e-01,1.389414089794701324e-01,-1.488586038940487688e+00,-1.930455733800497398e-01,7.982816361017525120e-02,9.220722791774814409e-02,-1.646106816827008990e+00,-2.116877029822330503e-01,-6.571921097744903850e-02,-1.295791224367208283e+00,3.388574340213011959e-01,-4.880479281179687934e-02,-5.330984855600520711e-02,-1.394783381758671892e-01,2.125230646922146027e-01,-8.815444589911280993e-02,5.209478083777161622e-02,2.513044830152091902e-01,-1.000000000000000000e+00 +-1.873191616492320577e+00,-2.056873989135975522e-01,1.788792433776593138e-01,6.440261287751487818e-02,-1.639983345842225937e+00,7.431984483779473238e-02,-6.737981502640266740e-03,-9.228866042587285934e-02,-1.423709368258853081e+00,-3.519541367219973793e-01,1.929667786579778721e-01,-1.741194061661679227e+00,-8.842165688775438515e-03,3.301823485436581884e-01,-1.892267665999154413e-01,-1.723186355638004041e+00,-1.297342676980458576e+00,2.243686521156938174e-01,-1.225553682741842010e-01,-1.322983351201722391e+00,1.000000000000000000e+00 +-1.845933991953369935e+00,-1.018255445810124504e-01,1.283198692785773587e-01,2.944784400217750897e-01,-1.276526946838344667e+00,-2.567000966561716058e-01,1.870128664907933641e-02,9.175820873300864766e-02,-1.624991653992264418e+00,-7.030674276811187118e-02,2.318219308332492359e-02,-1.103949973968188836e+00,1.916707891925400475e-01,-1.833345479214313567e+00,-1.548042311660148052e+00,1.195313668833518361e-01,1.679486183195668114e-01,-1.705850794960609873e+00,2.550563100626263013e-02,-1.997707596345787984e-02,-1.000000000000000000e+00 +-2.446585241405007105e-01,2.309835849814308173e-01,1.443057578971227439e-01,-1.515667559477737569e+00,-1.619770971134667059e+00,1.187375512054550664e-01,6.649109859940552369e-02,7.432639227162841922e-02,-1.380992404316611077e+00,-6.001711401765588705e-02,2.792694154722341615e-01,-1.763976851410502311e+00,6.032378343654248853e-03,-1.387988888669036358e+00,-1.723065599013226423e+00,-1.243252983977291226e+00,-1.257042860606533363e+00,-1.321430117125417691e+00,-3.429405920406701780e-01,-1.226405993804544181e+00,1.000000000000000000e+00 +-1.865169228647927779e+00,-1.237879373561084628e-01,7.405335204670369931e-02,6.890642354928330771e-02,-1.498597461518269114e+00,-1.590548669947394078e+00,-1.461212144711625749e+00,3.490170736471687185e-02,-1.573357413030800789e+00,-1.537814114421869771e+00,2.186615813812642084e-01,-1.292038367648431718e+00,8.948357088198743980e-02,-8.928658184420408539e-02,-8.429750889904033540e-02,-2.334090783460711638e-01,3.705548010630302924e-01,-2.252870064453939836e-01,-2.091505472947417787e-02,-1.204439228438229648e-02,-1.000000000000000000e+00 +-1.707915085551401813e+00,-2.014512879346425089e-01,-4.914441854039292013e-02,-9.839895374084701996e-02,-1.726056384131820831e+00,9.440942940517532689e-03,1.001794835526170491e-01,5.070658569607315591e-02,-1.242348225775620874e+00,-1.159321605234600316e-01,3.127579004505120497e-01,-1.840778784331079887e+00,-1.658154698399136318e-02,-1.316138131065869743e+00,-1.894058600534813674e+00,-1.433057168579106255e+00,-1.278327361537103357e+00,-1.507053632706953916e+00,4.855031501400158822e-02,-1.410377662069259408e+00,1.000000000000000000e+00 +-1.927330015855815537e+00,-3.023244728403503556e-01,-1.004440616059082414e-02,2.475147107586016804e-01,-1.521246841214893841e+00,-1.832048881318087741e+00,-1.634658137038252690e+00,-1.202191394984148259e-01,-1.720221659787346091e+00,-1.575718727875419445e+00,4.137234899508839686e-02,-1.114256397670778220e+00,3.386845536114191368e-01,-1.552188726862925972e+00,-1.737857642087943022e+00,1.996806574321181027e-01,6.313713665147491216e-02,-1.632778985039999409e+00,-9.376998928433753766e-02,3.399858858802459749e-02,-1.000000000000000000e+00 +-1.599149871765311592e-01,-1.394954387635932491e+00,-1.431275230204140270e+00,-1.658557878945149389e+00,-1.665066556585239388e+00,-1.382801562304887710e+00,-1.903937519451994742e-01,-3.984804340760764868e-03,-1.498487313441081659e+00,-1.414217101692847312e-01,1.861058267637868135e-01,-1.770039703316339974e+00,2.855961150446482688e-01,2.631672011561230207e-01,-2.365965900204080041e-01,-1.170920995135496523e-02,2.603230639002764857e-01,-1.464618248912564757e-01,-3.436496738455320221e-01,1.613615754372600131e-01,1.000000000000000000e+00 +-1.901763756315645981e+00,-1.140130436048093776e-01,-1.589885895296563878e-02,-1.347714557200887731e+00,1.559893111253480291e-01,2.943525095945195846e-01,-8.762013730972015302e-02,-1.698111418051260424e+00,-1.582255231623669767e+00,-8.344383709300481899e-02,-3.070355736728235668e-02,-1.428494191647693201e+00,1.429522525186431858e-01,-1.034098271437848549e-01,-4.141065512465620657e-02,-2.107235320287753622e-03,2.025146775974647206e-01,-1.682346242604868536e+00,-1.622323666331404901e+00,-1.107978489145008821e-01,-1.000000000000000000e+00 +-1.662023350391828025e+00,-1.654770176908459289e+00,-1.557597998770770875e+00,1.203487712134641702e-01,-1.838685072399005804e+00,-1.463835343836004110e+00,-6.355507345375289996e-02,7.890762379367925045e-03,-1.342721534829666385e+00,-2.374024144962470495e-01,1.993536497136917662e-01,-1.710146411338983707e+00,7.197835586250633799e-02,2.953825947571455668e-01,-1.829940855642144815e-01,-3.553528407017891855e-04,1.407134797205625565e-01,-1.308717950203963365e-01,-3.207728021164623078e-01,3.767952619169859241e-02,1.000000000000000000e+00 +-1.887184419707484961e+00,-1.853757098381225432e-01,2.872420446140629968e-01,-1.233903244711152869e+00,4.264280874515810060e-01,1.539815503152855702e-01,-2.511728916094144864e-02,-1.430601943163283485e+00,-1.794794334882835241e+00,2.279592536379622392e-02,6.505452523012145161e-02,-1.304092811701644594e+00,3.616317939265475956e-02,-1.684500566958359480e+00,-1.748425444466124912e+00,1.320542591078140704e-01,1.988450335786769163e-01,-1.457390216866339960e-01,-1.681082243555220623e+00,-1.444260182732841624e-01,-1.000000000000000000e+00 +-2.147591247930463187e-01,-1.295880574644723060e+00,-1.414181058229858623e+00,-1.761577153389257244e+00,-1.816617960661231157e+00,-1.499391787906862561e+00,-9.587358913735103891e-03,6.155900339266405508e-02,-1.315616638581871056e+00,-2.276183033416775969e-01,3.757495554385740233e-01,-1.970598391636864566e+00,1.298988905924748360e-01,-1.210652947605888263e+00,-1.654496270186754714e+00,1.786756798855035910e-01,2.257526784963599653e-01,-1.563851404462621053e+00,-9.310080301164969097e-02,-1.898015221483945192e-03,1.000000000000000000e+00 +-1.757629487888254349e+00,2.750813333173868225e-03,1.909472985348114882e-01,-1.413755901540125759e+00,3.334691618878731223e-01,-1.487572786021322813e+00,-1.704150413544582410e+00,-1.438446898524446071e+00,-1.587959853361427420e+00,-1.756280186303360802e+00,-5.018627473955431656e-02,-1.418801834989586785e+00,7.241102316773673220e-02,-1.254257779836668307e-01,-2.277330462722834681e-01,-1.127309666191127768e-01,3.136523642408932666e-01,-1.717027655520484197e+00,-1.574448929584145285e+00,-7.734777858761476832e-03,-1.000000000000000000e+00 +-1.673765524340555588e+00,-1.873599457951749203e+00,-1.669534734460675462e+00,7.532090305687616505e-02,-1.779359154952696365e+00,-1.588579491977466729e+00,-4.716969564667664733e-02,1.002003555818729991e-01,-1.351159720441112988e+00,-2.036155985690527026e-01,1.352720472680977726e-01,-1.795540273054498925e+00,2.419025125333562620e-01,-1.355743421377280544e+00,-1.701051084926724188e+00,7.121744646704183945e-02,4.833416624330702516e-02,-1.771424242246609326e+00,-1.325963547716367819e-01,1.863729830672161969e-01,1.000000000000000000e+00 +-1.824610374325886353e+00,-2.596331126462229077e-01,1.971523564757886038e-01,-1.243699053737473248e+00,2.473200182543848491e-01,-1.414641461934736055e+00,-1.463653921120485091e+00,-1.723371048229100477e+00,-1.524784161373843983e+00,-1.485507312847800021e+00,1.495881799387448474e-01,-1.369066816825430521e+00,4.668849072457398330e-02,-1.608590022098949079e+00,-1.786438967324652571e+00,1.124377585141832503e-01,2.755700291238519783e-01,-1.233772338920482020e-01,-1.591254715929807162e+00,9.133259280459660179e-03,-1.000000000000000000e+00 +-2.180542142296966468e-01,-1.270062896352505577e+00,-1.495328868863751604e+00,-1.769646165049767905e+00,-1.840127173811692662e+00,-1.615188554748361094e+00,-1.359222778364617967e-01,-3.831082836164435845e-02,-1.445589010003945463e+00,-2.321568870857112499e-01,9.598219204448811548e-02,-1.625105004571937073e+00,1.327266192783912169e-01,2.573210482151609413e-01,-2.440372059621254697e-01,-1.733700222071140606e+00,-1.371266470740743815e+00,1.259516749085466680e-01,-2.967927586243156446e-01,-1.583235986500352688e+00,1.000000000000000000e+00 +-1.780336768017378724e+00,-1.154440834181787029e-01,7.668296338194463546e-03,2.831619677306277394e-01,-1.452473720257523970e+00,-4.285690418951215719e-03,1.654404361349363084e-01,1.514950521350017128e-03,-1.549922508433306589e+00,-1.957878405107431052e-01,4.364706251310906948e-02,-1.346951740306844059e+00,1.799600142998423191e-01,-1.325391087201296392e-01,-1.359185952055554369e-01,-5.762326559486587868e-02,2.491579101794483553e-01,-1.439385722027020531e+00,-1.545230148793086622e+00,-1.970738583918421050e-01,-1.000000000000000000e+00 +-1.629813547646396632e+00,-1.722040278342896746e+00,-1.439454653795339878e+00,8.464614837008242743e-02,-2.052730565713883681e+00,-1.407304653711857645e+00,-3.951692706296879021e-02,1.626117039329012526e-01,-1.242088494892461981e+00,-2.128027926490991262e-02,2.370403982931431064e-01,-1.860509553164634955e+00,1.115267716483113181e-01,1.591178760324968022e-01,-1.357813641817019745e-02,-1.514209434610088501e+00,-1.410136060264903124e+00,1.080091317138559270e-01,-4.215093146274401237e-02,-1.466606840271246659e+00,1.000000000000000000e+00 +-1.912817834617272172e+00,-6.515174009513001463e-02,9.790766084813876113e-02,1.054421055807980984e-01,-1.279485933635208683e+00,-4.091736000026738873e-01,-7.667769932443077585e-02,-1.375716133940347585e-01,-1.576176057217403059e+00,-8.098090482344666441e-05,1.224971632641589092e-01,-1.331235313536060172e+00,2.196543467199380817e-01,-1.620085556824799600e+00,-1.821855582416168406e+00,6.413801000505675587e-02,1.377073901576458814e-01,-9.338564267780208317e-03,-1.650633297537569710e+00,7.399495933207961285e-03,-1.000000000000000000e+00 +-9.984736554360375271e-02,-1.320494716944914604e+00,-1.330790725290356358e+00,-1.697057370467569104e+00,-1.840069058158641191e+00,-1.647605116110829604e+00,6.373820669563598496e-02,2.957061551848822606e-02,-1.389983119018888491e+00,-3.466061775014659951e-01,2.756236428698094487e-01,-1.954052051555470237e+00,1.912412080119063329e-01,-1.217490196055438290e+00,-1.623270425196640776e+00,-1.414692981415264450e+00,-1.321947685066984457e+00,-1.388634985873986816e+00,-2.403447451229275555e-01,-1.448571437282810015e+00,1.000000000000000000e+00 +-1.883952031352472911e+00,-1.122532631133231762e-01,2.764486074714272434e-01,1.901019606590734767e-01,-1.422934513119327171e+00,-1.843347631771780959e+00,-1.468065739422759197e+00,-6.261002636477708098e-03,-1.618981661560015883e+00,-1.592125152649291220e+00,1.044350868181647130e-01,-1.464179489802784451e+00,1.490295794475857694e-01,-1.047113205882685277e-01,-2.568733682170444288e-01,-2.402027069120222236e-01,3.714837850013332776e-01,-1.819701471860130093e+00,-1.382362341255056970e+00,-1.035735002863291815e-01,-1.000000000000000000e+00 +-1.650019870464853655e+00,-1.806658027340098061e+00,-1.403797902110349716e+00,-6.474476174803717177e-02,-1.926903459829577114e+00,-1.415870302696234262e+00,2.319884728917572664e-02,1.186141708858362703e-01,-1.434183175589905934e+00,-2.050432041023633190e-01,-2.093555481806824714e-02,-1.936321547958794076e+00,5.434852774581955259e-02,-1.179570740375065263e+00,-1.587208761533996926e+00,-1.440860384378481740e+00,-1.644263688499265852e+00,-1.523879281006476960e+00,-2.027536844388049819e-01,-1.524534179686675817e+00,1.000000000000000000e+00 +-1.802990477740712860e+00,-1.352501645045940670e-01,2.440960711464473243e-01,-4.801656576218121808e-02,-1.361297888556253222e+00,-1.691875451030229627e+00,-1.486751210467184281e+00,4.885939370215053312e-02,-1.629492514719542484e+00,-1.713586694934849053e+00,-3.252431019550108132e-02,-1.488537331702065591e+00,1.993187636567363141e-01,-1.778658670455917745e+00,-1.727060553958040368e+00,1.165695389493317385e-01,1.687186825675073276e-01,-1.373241103838188093e-02,-1.409423765488930780e+00,-1.015870841581417716e-01,-1.000000000000000000e+00 +-2.439795576160389834e-01,1.152532094054011663e-01,2.168617152173532847e-01,1.866894323907272030e-02,-1.646879238323857852e-01,-6.997772582165057154e-02,-9.108176612808183484e-03,1.158183025451648279e-01,2.417068706899839770e-01,2.718057870858650582e-02,1.950730446043487387e-01,-1.709516556698534584e-01,2.483579463474902549e-01,2.704376787301095431e-01,-4.982668000162603777e-02,-1.441543163316200138e-01,1.534048820910890731e-01,-1.870535299139338470e+00,-1.771469223944440285e+00,-1.662769152132258510e-01,1.000000000000000000e+00 +-2.341795754986746025e-01,4.762168186027798678e-02,1.693464442342933196e-02,2.483461373386978699e-01,1.253448620658552670e-01,2.081338345781823251e-01,1.332734179988863676e-01,1.108470358722858928e-01,-6.370999672153768167e-02,-1.650066915995046068e+00,-1.334546688506071499e+00,-1.650498092965406172e-01,2.878891556507078286e-01,-1.575315876357988198e+00,-2.287549874178484710e-01,-3.197358082530338264e-02,1.652975458202473324e-01,2.154126319311222559e-03,2.234113834455967451e-01,2.111174464899304160e-01,-1.000000000000000000e+00 +-1.808980495989261694e+00,-2.212655903719411565e-01,-4.289748993112732500e-02,-1.527312149745716052e+00,-1.889086907783862901e-01,-9.630992923883216483e-02,1.303469199482651941e-01,9.399689441044666027e-02,9.766995616252455159e-02,8.890142659765526423e-02,2.541773127400676624e-01,-2.817778219832813846e-01,2.081404177732021354e-01,2.030926442196815951e-01,-1.355886793329663109e-01,-3.622955470645472520e-02,8.246131517108407083e-02,-1.909910293441634543e+00,-1.832820919420656836e+00,-1.482993850504104871e-01,1.000000000000000000e+00 +-1.786743623700731698e-01,2.333610978623791854e-01,-2.317769286988272115e-02,2.678056858207210622e-01,2.830420863340221693e-01,2.583360251014666376e-01,6.007902334857953552e-02,-1.676753537738113475e-01,-1.351090423571608967e-01,-1.439543104631452630e+00,-1.680794493945489521e+00,-2.969694657694614826e-01,1.250456463485115632e-01,-2.179542371792486666e-01,-1.459125680687157534e+00,1.568189547032813602e-01,2.312646421745751524e-01,-1.766893625688763514e+00,-8.111903637227746433e-03,7.916568950765279222e-02,-1.000000000000000000e+00 +-2.670670863779148752e-01,3.040045732407791745e-01,7.814293641534225676e-02,4.659231234598722182e-02,-1.617743354729917482e-01,-2.300903445949606940e-01,-1.621687556751581771e-01,8.252131990860941263e-03,3.992821677531311897e-01,3.517318483013078811e-01,2.383671602944574530e-01,-1.963604713128287438e-01,1.819678838763174600e-01,-1.228480995979723822e+00,-1.723203244659578193e+00,-4.365578367003825067e-03,2.155098480035778918e-01,-2.278620059362060635e-01,-1.726971638801024556e+00,-1.059862787334183848e-01,1.000000000000000000e+00 +-1.575566994330422910e-01,1.795560211713463916e-01,2.682631552317020496e-02,2.007662517788816603e-01,1.581980924416818424e-01,-1.556207542138783317e+00,-1.449804158237339102e+00,-1.210895562639316414e-01,-5.533071193417959943e-02,-8.570354810994065820e-02,-1.502045301027012503e+00,-2.784264656142161898e-01,1.310384711439979699e-01,-1.488857577924443953e+00,-8.111371166148849399e-02,-1.177031639826650322e-01,2.241191842153236746e-01,-6.670881561524841241e-02,7.480619264484354713e-02,2.173972671173703408e-01,-1.000000000000000000e+00 +-1.787231451201681143e+00,-1.874545583443503194e-01,4.154541687070615469e-02,-1.705146527264772338e+00,-3.286917219278586710e-01,-1.936103546223102434e-01,-8.827279795360024051e-02,1.179923057226739749e-02,1.704145899614943060e-01,1.593071847959947607e-01,2.207179404937528178e-01,-2.696259934960010263e-01,2.648712489501740819e-02,-1.325651556789151808e+00,-1.813693726376160775e+00,1.451873112535447818e-01,1.860007285068369376e-01,-2.763206519063196032e-01,-1.832195978436054418e+00,-3.601298690760837418e-02,1.000000000000000000e+00 +-2.100560422946932682e-01,1.484499628425742512e-01,2.444989647549606349e-01,1.609246664696919737e-01,2.301053747903976376e-01,-1.415057182688518322e+00,-1.408164698486420008e+00,-2.405783550339117838e-01,-5.833681479055863317e-02,8.179086755040124168e-02,-1.551703219796524369e+00,-1.282693526730974698e-01,3.455256040877574542e-01,-1.750968919478370633e-01,-1.687088325495360142e+00,2.791974160174996999e-01,1.056122875882148093e-01,-1.705541528252550343e+00,2.342416190795347519e-02,1.295063049478414885e-01,-1.000000000000000000e+00 +-1.423924576211661464e-01,1.921284319409686248e-01,1.468442950975537287e-01,-5.556648021727071673e-02,-2.208593480039719448e-01,-2.099378733063208546e-01,5.313501441645162443e-02,9.703649684887688531e-02,2.871007898980917350e-01,8.824986422275575559e-02,1.708047887759106542e-01,-2.352331277535596732e-01,2.526984764809652728e-01,2.687840957456584245e-01,3.921526339296696473e-03,-1.685011646696626064e+00,-1.397855565475193407e+00,-1.339423834167504879e+00,-1.674757620603984698e+00,-1.621478794819147806e+00,1.000000000000000000e+00 +-2.260360423722762302e-01,2.008593328590530802e-01,2.431177294893352436e-01,-1.309754257792349552e+00,-1.629830824440629655e+00,-5.815124031047488873e-02,2.445471168193985023e-01,-1.485328451052150278e+00,-2.366648012703968518e-01,-1.366125741782338476e+00,-1.350246501934106558e+00,-2.816137600067232793e-01,3.882081085250954633e-01,-1.569269750155042997e+00,-2.212442823205463538e-01,-1.063440726231710820e-01,8.420960607021235611e-02,-8.748164054977126958e-02,1.772677003261586420e-02,-6.235113992909069314e-02,-1.000000000000000000e+00 +-1.736992284809889098e+00,-1.702226743355233773e-01,1.679423364667675389e-01,-1.522912300366130234e+00,-3.742089925693151131e-01,-1.092724662937819002e-01,1.351180000592946961e-02,1.006382864373599334e-01,3.765244896172081357e-01,1.726545677597331740e-01,1.583330105393303544e-01,6.125501487936368950e-02,2.171387687393007693e-01,1.167521671419302631e-02,-6.763294035732590748e-02,-1.796820751677606465e+00,-1.360450205712884886e+00,-1.402203829698527304e+00,-1.772810900332412620e+00,-1.592077081909663683e+00,1.000000000000000000e+00 +-8.260132643703596567e-02,1.506323137841703852e-01,5.015301880318073779e-02,-1.291683870600369488e+00,-1.476730015821815289e+00,-1.517797963673162553e-01,-1.088438463196348543e-02,-1.496706302959756707e+00,-1.128812469775872240e-01,-1.669594973202173094e+00,-1.353208388937376716e+00,-2.855651264253485366e-01,3.092973662683150549e-01,7.599542725378864716e-02,-1.730541964489813456e+00,2.233934729433458277e-01,3.422320311481372723e-01,-1.565095979484781852e+00,7.633830631677407386e-02,1.336755402681864546e-01,-1.000000000000000000e+00 +-1.404076984799650651e-01,1.191317553918698202e-01,-5.457105978545798153e-02,1.374395884758006503e-01,-1.667339667907631606e-01,-2.253394516688803084e-01,-8.404619183367420532e-02,-4.135243822093048749e-02,3.374401550230359259e-01,1.642256742657378921e-01,2.269022987963117965e-01,-1.905198098429376208e-01,1.607784713243614882e-01,-1.335010754414554190e+00,-1.774638571230396700e+00,-1.316770162827737067e+00,-1.247768977256307421e+00,1.920813975907403326e-01,-1.758890154793151472e+00,-1.682956658738964606e+00,1.000000000000000000e+00 +-2.022386142575156864e-01,1.336806471945872765e-01,2.875705692623020671e-02,-1.565704532131195537e+00,-1.481319864862788105e+00,-1.764617757145244159e+00,-1.488746964039890708e+00,-1.681955182045430375e+00,-9.291659391132862933e-02,6.570542869799977925e-02,-1.521660326132671326e+00,-2.335841231780483029e-01,2.916632795978746362e-01,-1.702229927469582238e+00,-3.194907254166401422e-01,-1.977399998211519516e-02,1.482855204698622364e-01,-1.361706824813516403e-01,1.397701967238868526e-01,-1.785281155111982654e-02,-1.000000000000000000e+00 +-1.710675675150777897e+00,-6.889656381993650158e-02,5.336733035525358798e-02,-1.728259254603254025e+00,-4.287565833351879574e-01,-1.351761449493077416e-01,1.708338029678988235e-01,9.443669862142795024e-02,3.810947838806565402e-01,2.831015210974562324e-01,2.806288730489565619e-01,2.644478370657210586e-02,2.074396752519246934e-01,-1.368615791967153106e+00,-1.721035943584906747e+00,-1.556529571274913648e+00,-1.339529546342336896e+00,2.604816863605534660e-01,-1.604105136993718927e+00,-1.545370663450510218e+00,1.000000000000000000e+00 +-2.539133094953536784e-01,9.952600458798718797e-02,-9.406514181245290152e-02,-1.296232657332213600e+00,-1.370233898875531153e+00,-1.703616285965132482e+00,-1.464099282246143829e+00,-1.694221421276576489e+00,2.256370931205706198e-02,2.214405366647632378e-01,-1.342361032399055798e+00,-8.651427614168735736e-02,3.670801808416190304e-01,-7.240739261390924386e-02,-1.929572319215834941e+00,1.489434662442567781e-01,1.409932506741681246e-01,-1.696455953850054543e+00,3.076169633660839203e-02,1.804048154257257841e-01,-1.000000000000000000e+00 +-3.396623784028023341e-01,-1.459286752093374107e+00,-1.562384720334421218e+00,-4.378878165881100459e-02,-2.317601361455025877e-01,-1.581590712001686105e+00,3.483088885333713441e-02,-1.974632901043600619e-02,3.235861789429929081e-01,1.827132479463205450e-01,1.058161714238032985e-01,4.567541010519204914e-04,-6.143133313296494924e-02,2.801437997963560078e-01,-2.951779216041229559e-02,-2.872110181937215234e-02,2.602588034669344186e-01,-1.653150479042223786e+00,-1.858187304053193545e+00,-1.437127986318458006e-01,1.000000000000000000e+00 +-2.156700822111204396e-01,2.856154781462307835e-01,4.358355008224418237e-02,1.055124854187428074e-02,2.930327847274443731e-01,3.196338488580008907e-01,-1.228284280631395109e-01,4.776292530106697465e-02,-3.383587202693603968e-02,-1.524384588998426215e+00,-1.557843119323771619e+00,-1.150868439085395989e-01,2.526669630902841357e-01,-1.650505190739935291e+00,-1.813030026693628338e-01,-9.010045015269224633e-02,2.665444142050752419e-01,-1.706644508361277790e+00,-1.545969851106116622e+00,-1.522187528667455769e-01,-1.000000000000000000e+00 +-1.801174539362771609e+00,-1.816188763163395503e+00,-1.497895285526630538e+00,-1.812059156867410703e+00,-7.265023004259998918e-02,-1.750380778769931256e+00,4.886934369858730171e-02,-9.685963324469006042e-02,4.122079114066758976e-01,3.623485172182143721e-01,3.723119939019490232e-01,-2.074123149641814434e-01,1.542832311789590904e-01,1.811906386589723084e-01,-1.374469101163109108e-01,-4.452547192311231972e-01,6.082083527296935910e-02,-1.638050369059725675e+00,-1.777153188779318382e+00,-2.300459371093563909e-01,1.000000000000000000e+00 +-4.451531151184778823e-02,9.148420013289577934e-02,2.534058268925715729e-01,2.054960265755059190e-01,2.785636652081447395e-01,7.879173701551790698e-02,1.541296869682636655e-02,4.721268837444195232e-02,-7.916032429184548247e-02,-1.561824407894278677e+00,-1.555743657094234900e+00,-4.816314658093525658e-01,2.938611281680565401e-01,-1.650182324738711237e-01,-1.745215565765939170e+00,2.138468654552170833e-01,2.647899305847716267e-01,-1.885477440951396633e-01,-1.354105012801542607e+00,-1.185313722870132702e-01,-1.000000000000000000e+00 +-3.862363481910549012e-01,-1.484854201284331321e+00,-1.438572421643739885e+00,-4.142546019707953747e-02,-3.348652602872161377e-01,-1.639473204331644007e+00,7.197267147107569429e-02,-1.094711591033338122e-01,1.916100059435999481e-01,1.104510484539653337e-01,3.024398227715986431e-01,-2.130822796708342626e-01,9.486294496163666379e-02,-1.512413978024118810e+00,-1.735754066485621028e+00,3.041004585394775916e-01,3.318818660567996459e-01,-3.089777197151281629e-01,-1.931654961106461510e+00,-1.354386261256982082e-01,1.000000000000000000e+00 +-4.303605809054293907e-01,2.177837137677910428e-01,3.031313748889638560e-01,1.093102325839635514e-01,7.076542489851209150e-02,-1.179183095294744188e+00,-1.505863307879028001e+00,1.365853728016261648e-01,-1.305806890730770442e-01,1.147488698401981644e-01,-1.610618557095213621e+00,-1.918134292915106287e-01,-1.336499559189097130e-02,-1.718240000988179306e+00,-2.040449602330622614e-01,-1.110775901676131772e-01,1.881237390840745927e-01,-1.630215767900932144e+00,-1.695233570779625776e+00,-2.628398216005405075e-02,-1.000000000000000000e+00 +-1.677091039606229739e+00,-1.865202226684187892e+00,-1.449574026374467861e+00,-1.606683272540252228e+00,-2.477549056295799135e-01,-1.606862935006536430e+00,-1.615279137175159307e-01,8.924077723319796818e-02,-9.582226197238646881e-02,8.636847459609645061e-02,1.077270557392905337e-01,-2.009099826210908879e-01,2.933490456390652756e-02,-1.248006919167750528e+00,-1.698874983878829958e+00,5.081814598152770146e-02,1.478842899130003719e-01,-1.493291054343111601e-01,-1.871050668915237081e+00,-1.179997572996087513e-01,1.000000000000000000e+00 +-3.328088271449912705e-01,3.498802263190264883e-02,1.731632906847828668e-01,1.552086898298051520e-01,1.565348255437749581e-01,-1.435732159384214057e+00,-1.366962610615669815e+00,-2.218411404297142286e-01,-9.745524394934233781e-02,1.438923028868028253e-01,-1.542571478877929447e+00,-4.983556069812025702e-02,2.354435482550457370e-01,-2.203854683616549015e-01,-1.646878114276301819e+00,1.502885180994540937e-01,3.258911374658394200e-01,-9.419806122841692386e-02,-1.577419009343649092e+00,-1.793921236206705849e-01,-1.000000000000000000e+00 +-5.430212539709483588e-02,-1.401301184415392642e+00,-1.620363609016238993e+00,-3.140725486911737085e-03,-2.840792002816733830e-01,-1.631557432178066369e+00,-7.907571158916459897e-02,-1.672689249186963545e-02,2.820765846230589569e-01,1.924189493545946927e-02,9.424944259944431635e-02,-2.025209418751356960e-01,8.007159720548398529e-02,2.718485183061024046e-01,-3.356755891540847414e-01,-1.539747283092349317e+00,-1.283979298093514076e+00,-1.379367054633772405e+00,-1.822919127052061272e+00,-1.655120047632869129e+00,1.000000000000000000e+00 +-1.828648407826313771e-01,1.303669714280714931e-01,3.281634341282182454e-01,-1.331218717902154625e+00,-1.440335771332840631e+00,-8.438256293891646664e-02,-3.016506776942890627e-02,-1.635986432710933247e+00,-5.706716830303201760e-03,-1.519308637308587340e+00,-1.538826082544888507e+00,-1.874635769544862052e-01,1.740443531291482604e-01,-1.642323730198749665e+00,-1.818284598289054976e-01,-1.813919099043513616e-01,3.912970162390819739e-01,-1.690514193262345755e+00,-1.560177869678597284e+00,1.489094548564861564e-01,-1.000000000000000000e+00 +-1.719337784952710724e+00,-1.787163526386397194e+00,-1.493037120732656930e+00,-1.415933286885403763e+00,-1.487854202069676668e-01,-1.583751903934811356e+00,6.103681952781319503e-02,-7.524412701058486030e-02,8.375219989444812607e-02,2.142504794038084248e-01,1.438223961253209671e-01,-1.304850311421204001e-01,1.067574007228712235e-01,2.909954696904511473e-01,-1.670366864727289014e-01,-1.689081678638551631e+00,-1.528707618705964943e+00,-1.430534163439965756e+00,-1.645195206065076965e+00,-1.604056159169864548e+00,1.000000000000000000e+00 +-2.083438875860270934e-01,2.335965437908922027e-01,1.071707499091033577e-01,-1.288246750213543512e+00,-1.378517278944689561e+00,-1.707696384816015933e-01,-1.568376077712627659e-01,-1.518355268363408062e+00,-2.629407773909601675e-01,-1.565686260935592600e+00,-1.628133544842195635e+00,-2.354517478541177933e-01,2.634825782470920918e-01,-3.164200285627927212e-01,-1.728366907590010992e+00,3.490475847534628140e-01,1.841402464753418011e-01,-1.677322903246478147e-01,-1.548509155377692847e+00,-1.388963128235166933e-02,-1.000000000000000000e+00 +-8.140862605581608569e-02,-1.531952677721658107e+00,-1.579822628334136114e+00,-2.158986542727301949e-01,-4.753407251577410064e-02,-1.939691485609706056e+00,-9.736562988277902564e-02,1.229744127047200652e-01,3.433432862619288928e-01,2.159351090051743194e-01,9.719607419281767191e-02,-1.291642903895658112e-01,1.461109897296656579e-01,-1.125938608592356616e+00,-1.704452238561950717e+00,-1.517897004328281119e+00,-1.443169289655185761e+00,1.057877446144747657e-02,-1.738438363948879628e+00,-1.854476765398893834e+00,1.000000000000000000e+00 +-2.863243735617415076e-01,2.365670741337101979e-01,8.903467814116583501e-02,-1.457571714714968714e+00,-1.246015694584325262e+00,-1.673825131524844467e+00,-1.612638785923174112e+00,-1.541490244400076648e+00,-7.079531019797660751e-02,1.034955758663737568e-01,-1.377897664362565777e+00,-2.981016076976940044e-01,6.539238018431087207e-02,-1.538001995939093369e+00,-8.463110382048388836e-03,-2.875371666447258667e-02,2.202154047120651326e-01,-1.681889004787793684e+00,-1.442212170651307579e+00,-1.412194893631334713e-01,-1.000000000000000000e+00 +-1.762130690462024862e+00,-1.668951046054449217e+00,-1.674424950970456072e+00,-1.565170102148560227e+00,-2.258421072760552206e-01,-1.724891117061284174e+00,5.276235571442480093e-02,2.270031654449717884e-01,2.078060747906807226e-01,7.275412066186140447e-02,6.531493706493668450e-02,-2.285500410644309699e-01,3.294273728423363634e-02,-1.394424769471787506e+00,-1.697314211487732205e+00,-1.423639524438613524e+00,-1.392870813809807151e+00,1.297739428189970123e-02,-1.737016674483755407e+00,-1.702235737301599272e+00,1.000000000000000000e+00 +-2.829052725322153128e-01,1.053995753974671934e-01,1.243137310869227297e-02,-1.475376154478991619e+00,-1.273230705412238040e+00,-1.788930468374629879e+00,-1.512484092449806861e+00,-1.494579560309224897e+00,-1.107833022791021582e-03,1.922377008658001513e-02,-1.489411245227656666e+00,-2.360759778040930901e-01,6.220074322926733013e-02,3.836805888715498492e-02,-1.638786439357833302e+00,6.454983442961406692e-02,8.443579955664209935e-02,-4.456643119187696234e-02,-1.535275340651167886e+00,-2.510975333924962000e-02,-1.000000000000000000e+00 +-1.888353826195675322e-01,2.331116445443457141e-01,7.209972267287956260e-02,9.936601978177159178e-02,-2.998875281976747242e-01,7.736684513841683708e-02,-4.154085777495976350e-02,-1.620416913858260699e+00,-1.536378078562709693e+00,-4.970986093233982495e-02,8.054914235365649711e-02,-1.866448787992637248e+00,1.631511674540167545e-01,2.540076346857715328e-01,-3.365790456232687494e-02,-7.210663219225983689e-02,2.482153857969794930e-01,-1.883598696167930964e+00,-1.810466289958495345e+00,-4.205707354893116479e-02,1.000000000000000000e+00 +-1.884999296168834215e+00,-3.112843589472975570e-01,2.510927801806384085e-01,-1.626425934354120084e+00,2.906727097445114816e-01,1.446522529476227947e-01,1.749560835749299215e-01,-1.309041609415544094e-01,-4.164120115564299424e-02,-1.612352644191952677e+00,-1.524397432729068580e+00,-3.156040382378184628e-01,2.208343021322482225e-01,-1.509988895926045904e+00,-2.292660974459153067e-01,-8.014049356864991203e-02,3.799991368343439424e-01,-3.734193110346489819e-01,1.073939538345585615e-01,1.177208510405130526e-01,-1.000000000000000000e+00 +-1.680459216951007306e+00,-1.929987354809645228e-01,2.338483618359407656e-02,-1.613930291721018984e+00,-3.415917136958097622e-01,-1.348783215985026596e-01,1.181432289240746669e-01,-1.585137163766282553e+00,-1.534313066984771767e+00,-1.310491011825282714e-01,1.940131849865792124e-01,-1.733134803485204101e+00,9.973672008270378919e-02,2.478634840235067749e-01,-1.556240280163657952e-01,-7.091430903922907314e-02,1.834628758540778060e-01,-1.854266729031440519e+00,-1.714678789261387504e+00,4.735125599413148034e-02,1.000000000000000000e+00 +-1.735701321098774619e+00,-3.029488293090203399e-01,7.823142982724853867e-02,-1.521530706942672229e+00,1.518072634749043082e-01,1.949321976666617273e-01,1.963842715291226615e-01,5.344791979781139679e-02,-2.110863568467451212e-02,-1.562202197067320109e+00,-1.642579250325277629e+00,-2.377295785858298816e-01,2.815042624544672467e-01,-1.414518361758450027e-01,-1.803016334354505812e+00,1.813624402682965375e-01,4.385810848825134611e-01,-1.917785633493478192e+00,1.837256278364261808e-02,-5.286230436914544917e-02,-1.000000000000000000e+00 +-7.199972550916522440e-02,7.255178596017852755e-02,9.750889304507877331e-02,6.081409242016647121e-02,-2.376473500031918706e-01,-8.982997357940228356e-02,6.192461817998318879e-02,-1.572683273506855661e+00,-1.433725385605350677e+00,3.854035867080965461e-02,2.541416204131221601e-01,-1.671030333565145964e+00,2.400026694987877907e-01,-1.278116954806505667e+00,-1.724615716649997577e+00,1.107077198748998292e-01,1.780571421151442291e-01,-1.284590954348128200e-01,-1.723855140182853019e+00,-1.584402831845356241e-01,1.000000000000000000e+00 +-1.833390667392359896e+00,-2.171180825066165443e-01,1.960964068290079465e-01,-1.392986539304137628e+00,1.584083272860981051e-01,-1.397279559595808962e+00,-1.576413536407396565e+00,2.161410269269601475e-02,6.515055618245384206e-02,3.308749079517017688e-03,-1.291117871585367061e+00,-1.183363545055007710e-01,1.098549087884565512e-01,-1.478121029211044268e+00,-1.186132878675661695e-01,-1.259727635628279940e-01,3.409386167645193089e-01,1.399151801230701653e-01,1.518843333971090503e-01,-1.522919555040948003e-01,-1.000000000000000000e+00 +-1.657067455176580939e+00,-1.956006772697657103e-01,4.866738214374304039e-02,-1.520530216719676808e+00,-3.557408683673492500e-01,-4.834124711662751012e-02,-6.597629840328217421e-02,-1.446866591736235552e+00,-1.478399872957024686e+00,3.409000577232640383e-02,1.290969519790106101e-01,-1.647536979880922514e+00,5.373522734854102589e-02,-1.392181127118939710e+00,-1.613254635171154527e+00,1.703774576150753617e-01,2.226799427848425439e-01,-1.377850789387303210e-01,-1.687682883865781136e+00,-1.182185390507711903e-01,1.000000000000000000e+00 +-1.828577673095696188e+00,-1.615210861024604649e-01,1.496379005811858676e-01,-1.408848830726687096e+00,1.157878170169065607e-01,-1.186607809631150978e+00,-1.557056686931114209e+00,-3.318515883453987403e-02,6.565717225075094754e-02,2.149917478930231662e-01,-1.557595536413655557e+00,-3.593265080683860635e-01,1.885300156998934995e-01,1.078510889679324264e-01,-1.708102050101451663e+00,1.581840693686221433e-01,3.807921891383032609e-01,-1.643429295982688831e+00,-5.589858940038970603e-02,1.439733738179163058e-01,-1.000000000000000000e+00 +-2.014535912011794216e-01,1.464013503426886964e-01,1.583118228851058129e-01,-1.311144004189748191e-01,-2.933891499481025567e-01,7.171208358498094848e-02,6.713523942833959923e-02,-1.462855678228510481e+00,-1.258580727846380531e+00,-2.498970101252624421e-01,3.144182986818298553e-01,-1.585877416016334474e+00,7.929365415811465145e-02,5.093170250068383975e-01,5.087171443260374293e-02,-1.835895741151551963e+00,-1.262516885170584136e+00,-1.497584680792570122e+00,-1.802072848342316513e+00,-1.815473843169535861e+00,1.000000000000000000e+00 +-2.065909537021775932e+00,-7.713236544590557076e-02,3.292057384357651717e-01,2.336083146754882600e-01,-1.283071514341488806e+00,-2.146017387445667002e-01,9.831816996616363213e-02,-1.529687239368231699e+00,-6.557823286419892095e-02,-1.555593879643420774e+00,-1.394966934007892512e+00,-2.834226752862956666e-01,4.210734554677593722e-01,-1.763667489644399122e+00,-1.567802012234626174e-01,-1.153855943401591311e-01,2.188752837490041958e-01,3.527404622114355126e-02,1.206088262135300293e-01,1.451652686106577050e-01,-1.000000000000000000e+00 +-1.978367994037992572e+00,-2.661520016824179824e-01,4.640207350525141217e-02,-1.330826471055515992e+00,-9.127315224419021988e-02,1.120521841253903222e-01,-3.989370800105224851e-02,-1.428621944608968741e+00,-1.434193447270862842e+00,-1.710020712058683279e-01,1.776727481698182620e-01,-1.649790298552828993e+00,1.521028295464029734e-01,3.243600900035593093e-01,1.442058524107271700e-02,-1.695752680588687333e+00,-1.436336009194452590e+00,-1.408519458204670283e+00,-1.650603052771111301e+00,-1.542717696333763877e+00,1.000000000000000000e+00 +-1.707933373529028742e+00,-1.442728049153429448e-01,1.577493833657936106e-01,4.482661014397282262e-02,-1.479160225441092491e+00,-3.834935798107614868e-01,-7.472091006248304801e-02,-1.490247557780237653e+00,3.554589831091523044e-02,-1.567078881776201582e+00,-1.411662679994448499e+00,-1.907050100663965075e-01,2.008971762137442552e-01,-3.383766032115673866e-02,-1.602868897263930226e+00,1.111484426669004516e-01,9.252353490794451574e-02,-1.533010258660377101e+00,1.832494954384461527e-01,2.531780987473795097e-01,-1.000000000000000000e+00 +-6.035667714771275616e-02,6.470808836553376686e-05,1.024276970655027263e-01,-4.101435867772194876e-03,-3.071974488665177860e-01,-1.036708515513684176e-01,-1.794222268096470549e-02,-1.542565533807144673e+00,-1.255950023731022824e+00,-1.004970149235214771e-01,3.376773188277004678e-01,-1.816046997765331517e+00,1.724808629832310369e-01,-1.427182072473219598e+00,-1.552065473637629367e+00,-1.388188809964528758e+00,-1.356036369860796675e+00,1.720711068138204847e-01,-1.791030757359659109e+00,-1.734188633268321178e+00,1.000000000000000000e+00 +-1.788632517301677716e+00,-2.617386839599858406e-01,-2.936679162613395344e-02,-2.740391682109855065e-02,-1.297405165664371918e+00,-1.493482798529176536e+00,-1.514862991219524391e+00,-1.501596256478166191e+00,1.119108588338410537e-02,1.660142063933439105e-01,-1.475156599370080812e+00,-1.933276597493817639e-01,3.668878364649680868e-01,-1.640057643036256341e+00,-6.608321478067419319e-03,-1.954839037314018424e-01,7.896595294917038710e-02,-4.431425520113368988e-02,5.677358752661965796e-02,9.539055629951720405e-03,-1.000000000000000000e+00 +-1.856006504665463019e+00,-1.777447493266164913e-01,4.881178249972623756e-02,-1.568636636291946385e+00,-2.852035358681297983e-01,-1.851432584160719041e-01,1.197743117151101877e-01,-1.616994063691078232e+00,-1.383230983243273648e+00,-1.602217973295344267e-01,1.471966636387322114e-01,-1.825824796344011292e+00,4.942638947399052851e-02,-1.251995243989245887e+00,-1.694599822855320292e+00,-1.448203897775477866e+00,-1.420129063946256709e+00,1.197172510960335112e-01,-1.847869231225990561e+00,-1.900423255698547198e+00,1.000000000000000000e+00 +-1.938517563807695243e+00,-1.176138443868801620e-02,9.293952995888341007e-02,1.396608196283463110e-01,-1.335335518405849742e+00,-1.907449672753195102e+00,-1.628182913393507070e+00,-1.574695438705880024e+00,-1.678398946053656915e-01,3.380506491156565207e-01,-1.617627992223649391e+00,-2.401866425100306346e-01,2.642820025649577076e-01,-1.972760935393504111e-02,-1.830708386519253494e+00,4.779916325500892238e-02,2.844369872034545610e-01,-1.536844096857871378e+00,2.901214956634431269e-02,7.841534439478502205e-02,-1.000000000000000000e+00 +-2.696591070101692633e-01,-1.384688193113345678e+00,-1.498195562579526685e+00,-4.585590496562568646e-02,-2.210743617984119169e-01,-1.553133811849615631e+00,-4.612209217966583424e-02,-1.748276247153416119e+00,-1.405630394575534181e+00,-2.789849179701651138e-01,1.456286412021242926e-01,-1.692047959274368019e+00,2.863753688495023209e-01,2.939749539944037648e-01,-1.074634812087749969e-01,-9.361810643094208018e-02,6.991647225105473984e-02,-1.818221290983097038e+00,-1.912601633301234116e+00,-1.175312837766143148e-01,1.000000000000000000e+00 +-1.896447579353508495e+00,-1.097519778964581999e-01,1.029161177080544221e-01,-1.405474213317246646e+00,3.927025135617715490e-01,-9.727119249037760595e-02,8.051521423641112840e-02,-1.760626230279384308e-02,3.297087136498941251e-03,-1.452286395193483015e+00,-1.477747376763081988e+00,-1.297945053187743170e-01,3.227665455531983918e-01,-1.622388934463279808e+00,-1.703479678209234849e-01,-9.740909277515255593e-02,3.072525292795419971e-01,-1.848078716688827727e+00,-1.489256089766898716e+00,-4.441061523815337253e-02,-1.000000000000000000e+00 +-1.737645268732505244e+00,-1.623708628553631517e+00,-1.423996224171091063e+00,-1.405421788882911471e+00,-2.643303970591006635e-01,-1.794543486411528166e+00,-3.986729681823630855e-02,-1.596080866086237338e+00,-1.258205450819601889e+00,-3.024064760459701517e-01,8.855568852874931562e-02,-1.692147575482150001e+00,6.168322431109037052e-02,3.332373407523177566e-01,-5.444064776614818829e-02,-1.589273107450466793e-01,3.395310182394535303e-01,-1.859003577123959250e+00,-1.632951756930816067e+00,-1.503391061938186279e-01,1.000000000000000000e+00 +-2.001237531819056059e+00,-1.888309866090089606e-01,1.327341408731530226e-01,-1.470839520049634475e+00,2.117324793461772270e-01,1.710111718709355078e-01,-5.130752647826371249e-03,1.074725059185548393e-01,6.458821145140310194e-02,-1.524867715437911109e+00,-1.397109700959722423e+00,-1.599785670409428762e-01,2.758900698739424340e-01,2.391694294421903288e-03,-1.747657762294583250e+00,1.388205165123361784e-01,2.935091611745938023e-01,-9.573406562344149995e-02,-1.405575528569151800e+00,-5.505123569376621506e-02,-1.000000000000000000e+00 +-2.415894917066411518e-01,-1.339288850842404788e+00,-1.558080312315683669e+00,-8.794419585011527263e-02,-1.887423150854516951e-01,-1.603137363622819223e+00,8.521341845397489845e-02,-1.616603324363009797e+00,-1.335036905244106675e+00,-2.740610071985419283e-01,2.950184450795598767e-01,-1.871071861455992025e+00,2.602005367930751434e-01,-1.375536276457179463e+00,-1.635367593925601826e+00,2.743069787887959521e-01,2.948093318002342200e-01,-2.163009607736440798e-01,-1.647124865158788420e+00,-6.861962110242694757e-02,1.000000000000000000e+00 +-1.703216504730926006e+00,-6.387152405651808085e-02,1.390947393323525572e-01,-1.476562929876921615e+00,2.312946350175269228e-01,-1.401775340349431742e+00,-1.540237519879024797e+00,-1.737868580789893660e-02,-8.631242477821583770e-02,-1.068932328222133021e-02,-1.299781420830113943e+00,-1.957980018651323817e-01,2.200184664051651195e-01,-1.749701421790878175e+00,-1.370682515420905134e-01,-7.887318520251951348e-02,1.967623844981341019e-01,-1.802102148505244417e+00,-1.492533598037102394e+00,1.176820069900192806e-01,-1.000000000000000000e+00 +-1.668472440053598849e+00,-1.692714191205419771e+00,-1.511862118036053859e+00,-1.536036795174505531e+00,-4.130098449562970009e-01,-1.743609344136944017e+00,1.136747901042646780e-01,-1.348305275896040545e+00,-1.469801700766598440e+00,-1.698886193741123429e-01,2.087590028510214746e-01,-1.521163599292838731e+00,1.115255063517616024e-01,-1.278257121548038278e+00,-1.599898969078416666e+00,-3.734256357462203968e-02,1.714193737288485508e-01,8.378525831000405155e-02,-1.738692901858964746e+00,-2.183929967042638753e-01,1.000000000000000000e+00 +-1.835595193407608017e+00,-1.588688468422716216e-01,1.071038085108794863e-01,-1.431996774396235184e+00,3.389680600264142196e-01,-1.471000951585167416e+00,-1.513097497047408924e+00,1.292609311097401847e-01,-1.994413707680271486e-01,-4.228260372016211244e-02,-1.477577167216317600e+00,-3.847715451458932900e-01,6.221557352316370304e-02,-1.632352539781317668e-02,-1.807777450957433807e+00,1.954061683424508367e-01,1.916242989475189784e-01,-1.637500830595114976e-02,-1.480493939244007962e+00,1.073340210416912216e-01,-1.000000000000000000e+00 +-2.627949199463695540e-01,-1.311601591218620078e+00,-1.475211753932925696e+00,-1.304726359806189229e-01,-2.367698850744863193e-01,-1.608094359485233937e+00,-1.746864918809430955e-01,-1.523101588101070325e+00,-1.397629073881587303e+00,-3.822912186360122311e-01,1.458091856878317716e-01,-1.886788841133814953e+00,1.593097248506974428e-01,3.554702193506375507e-01,-1.074756851113357475e-01,-1.697499802761408327e+00,-1.554898521660907695e+00,-1.524011092956258251e+00,-1.838783882743532994e+00,-1.754451182941514809e+00,1.000000000000000000e+00 +-1.916822041755505523e+00,-1.994469698241685129e-01,-4.933632276222865709e-02,2.863965164922512296e-01,-1.423380359870673351e+00,-2.279957244996119181e-01,9.397472235863760237e-02,-1.716764114105343131e+00,-1.787351583082517070e-01,-1.414650843336660246e+00,-1.617666909739836179e+00,-2.518808571838557775e-01,1.685049104084261895e-01,-1.761630151708398762e+00,-2.776895007447031105e-01,7.729513967419639198e-02,2.379315862066027076e-01,-1.612209955935588468e+00,-1.483619705832376567e+00,-3.020913529259734720e-02,-1.000000000000000000e+00 +-1.867044884773448876e+00,-1.472673527705081753e+00,-1.649374480873115889e+00,-1.670143217194038465e+00,-3.070842398040137811e-01,-1.754939077683911108e+00,-1.423354955399841748e-01,-1.436019218204293457e+00,-1.418730579984796680e+00,1.079839128213427868e-02,4.152375627128810365e-01,-1.795347933011969488e+00,1.158722101302399332e-01,2.850322800467037232e-01,-1.398292267306494030e-01,-1.862325214132927176e+00,-1.441179708403775406e+00,-1.496897251365243431e+00,-1.622765660460842252e+00,-1.735839599488196994e+00,1.000000000000000000e+00 +-1.677393660314144386e+00,-3.394741131965792746e-01,1.944080460453487813e-01,1.723628021977686720e-01,-1.538798771158149226e+00,-6.468438635467047004e-02,4.107668666750106945e-02,-1.655328577280850588e+00,-8.153552575454094120e-02,-1.545242692158941056e+00,-1.250308347300965517e+00,-1.377305074670933382e-01,3.616201693068952228e-01,-5.447383234045161116e-02,-1.614484662310011087e+00,1.439056111517483805e-01,3.715683101161327828e-01,-4.589024722426153502e-02,-1.545033891606071963e+00,1.469928408203699521e-01,-1.000000000000000000e+00 +-2.292484754950680492e-01,-1.404350897526567721e+00,-1.578611367140718258e+00,-7.230342715986382007e-02,-2.232169484525267644e-01,-1.630610638600653806e+00,-1.399195313728806601e-02,-1.517284057248873941e+00,-1.373463738897101383e+00,2.390939499616162589e-03,4.525627012987060160e-02,-1.595028842936575320e+00,2.367456900519744889e-01,-1.294368160546527591e+00,-1.641006081856117405e+00,-1.360542163032010698e+00,-1.333418534206741279e+00,-1.075695980286662801e-01,-1.710501050537750034e+00,-1.680464972887257602e+00,1.000000000000000000e+00 +-1.824320348288306359e+00,-2.242519383694826507e-01,1.939500729578774729e-01,2.580759419678572697e-01,-1.347001387351347779e+00,-1.949872616982624818e+00,-1.565159184620138477e+00,-1.607137737383463438e+00,-1.336710862730201010e-01,9.077958480873264679e-02,-1.500475897103216383e+00,-8.793965232887804295e-02,-5.893354486171925588e-03,-1.552925293547802843e+00,-6.394711786702439449e-02,-1.428272298215615133e-01,2.401458986440296872e-01,-1.599474863735532937e+00,-1.570795285887488513e+00,4.971420756740695113e-02,-1.000000000000000000e+00 +-1.849266502460056527e+00,-1.536793408891875767e+00,-1.450331064273818971e+00,-1.662558656273171565e+00,-4.022276506934110429e-01,-1.613844321683342686e+00,4.982096749266174546e-02,-1.344866860762329974e+00,-1.254560206002134581e+00,-4.927212993065804847e-02,2.232242021749195338e-01,-1.722173281038203330e+00,1.953070056701929624e-01,-1.385138482621590006e+00,-1.547991780235024484e+00,-1.393118208201791886e+00,-1.351351286137255858e+00,9.987190245233887320e-02,-1.744067585086658490e+00,-1.654447997079727006e+00,1.000000000000000000e+00 +-1.864387728549524947e+00,-1.528811130414389763e-01,-4.480088130063339391e-02,2.433468408664729576e-01,-1.337242124972898516e+00,-1.847268380922106656e+00,-1.392291585547845933e+00,-1.696507564704244908e+00,-1.141758842819323161e-01,2.200858804252461831e-01,-1.449409253919071494e+00,-1.095331009378930492e-01,3.895191444116400392e-01,-1.685609108953693702e-02,-1.676026096460398795e+00,4.057755272416286446e-02,1.943936625867365986e-01,-3.801300302824268673e-01,-1.371802968399387090e+00,9.391816282396751869e-02,-1.000000000000000000e+00 +-2.105163915005565378e-01,5.829521326453870889e-02,-2.330801027164454420e-02,-1.343458878646294652e+00,-1.820581971638018492e+00,1.467537468396624134e-01,-8.328161426570454551e-02,-1.639913835556530364e+00,4.188109869227139015e-01,-4.448674629190724206e-02,3.122778846918302653e-01,-2.497090139123326336e-01,1.756516076350515820e-02,3.384156809903209329e-01,-9.083422385048443848e-02,-1.565818393465682468e-01,2.942333949711795626e-01,-1.752967436998053019e+00,-1.810309952758458296e+00,-4.756885371580615862e-03,1.000000000000000000e+00 +-1.697203936453344220e-01,2.164472413569353826e-01,9.900206135490280390e-02,8.897910041792289615e-02,1.450299974962855343e-01,4.101970544519639716e-01,-1.523634557246537208e-02,-1.509339160259876911e+00,-1.668266124724471222e+00,-1.582167767407107961e+00,-1.457214891393150191e+00,-2.022051936238908443e+00,1.819840730643635385e-01,-1.664136752130559005e+00,-1.705964505243858786e-01,-3.848621840533895944e-02,1.598246614759032957e-01,1.169500345506576389e-01,2.116352785084738564e-01,-2.875304415091849142e-02,-1.000000000000000000e+00 +-1.741522805904053062e+00,8.242275280928418324e-02,-6.731059268197489565e-03,1.338939803846624366e-01,-1.600336378396729486e+00,4.710828127688442002e-02,6.274461946128231937e-02,-1.459686109124986864e+00,3.554908433498816800e-01,1.550998708565357875e-01,2.400451279624569723e-01,-1.243357785412936567e-01,3.592931021600022645e-01,1.877076490277039544e-01,-4.788271790708865938e-02,-1.406023283584208750e-01,1.467205421994474679e-02,-1.861514220027873812e+00,-1.764920111008901227e+00,-2.203720929353735480e-01,1.000000000000000000e+00 +-2.979572688018531923e-01,4.381956681169807410e-03,2.399075434135144458e-01,1.491509945883924271e-01,3.286238888827819893e-01,1.205438224858945140e-01,9.462363301464880860e-02,-1.549568351713531245e+00,-1.759306043954263155e+00,-1.641338465834012883e+00,-1.680553559052160084e+00,-1.711162544065447655e+00,1.604917534636884080e-01,-1.945737205269550824e-02,-1.804900487344063276e+00,1.830046723190849600e-01,2.744771128864742504e-01,-1.716962203553597188e+00,-3.405020573273205564e-02,1.375886700854809241e-01,-1.000000000000000000e+00 +-1.955229329530519811e-01,1.478730638909200867e-01,-1.201783668794771665e-02,-1.560107922479264664e+00,-1.924336397026852774e+00,1.066808076913345615e-01,-8.443806862302799532e-02,-1.577717476909032968e+00,2.284650283079793232e-01,4.632076426126892355e-02,1.730652179581867456e-01,-1.300486417009283913e-01,1.911590199077310703e-01,-1.242333931901333788e+00,-1.526271776844993822e+00,3.141662632691351320e-02,1.167175183099673497e-01,-7.679233401081934918e-02,-1.768567765354970955e+00,-2.365405085762902759e-01,1.000000000000000000e+00 +-9.054096414312204355e-02,1.452948527338082663e-01,2.888070720707515138e-01,2.884057962486949456e-02,4.326722243748587493e-01,-1.364266619381323320e+00,-1.778410777044421742e+00,-1.739871896155328335e+00,-1.805356701043865142e+00,-1.150138933454133705e-01,-1.650812990334628472e+00,-1.537598752479355513e+00,2.521751071627383878e-01,-1.451461304705234934e+00,-7.738008865931172986e-02,-4.056494846509665908e-02,2.136542078638204167e-01,-1.842982905436176821e-01,6.353070317174616677e-02,1.409348599713760031e-01,-1.000000000000000000e+00 +-1.678331761292732871e+00,-2.896760072346654113e-01,1.000901919821304137e-01,-2.819962035219550356e-02,-1.774843789401664873e+00,-1.008161454806341673e-02,-1.379590036791146224e-01,-1.499320264123623403e+00,4.195404364322782853e-02,7.414101326892059973e-02,3.442438587840405129e-01,-1.055178104561328434e-01,1.166994867852243628e-01,-1.522151470880838575e+00,-1.667038946022956658e+00,6.227841045719036128e-02,1.199008504703146932e-01,-1.739190013501349663e-01,-1.865603480026541083e+00,-1.899886295331251751e-01,1.000000000000000000e+00 +-1.113579885006178716e-01,2.124980417005476185e-01,2.538609187701522663e-01,3.590323973709488858e-02,2.331874689876990425e-01,-1.494376707227117240e+00,-1.509753543203158799e+00,-1.741928532826658493e+00,-1.709555712420977924e+00,6.682890234843028021e-02,-1.508294795406126321e+00,-1.506992237086572928e+00,9.519961497824627750e-02,-1.369108901517802623e-01,-1.775749068029529365e+00,7.062975084623734912e-02,1.866130611863734134e-01,-1.686654783698201321e+00,-4.405234855229853141e-02,1.726240929876382835e-01,-1.000000000000000000e+00 diff --git a/qka/aux_files/dataset_graph7.csv b/qka/aux_files/dataset_graph7.csv new file mode 100644 index 000000000..06cee93dc --- /dev/null +++ b/qka/aux_files/dataset_graph7.csv @@ -0,0 +1,128 @@ +-1.935744789981031500e-01,1.139791551437831785e-01,-5.926731841626675656e-03,3.009571667669095341e-01,-3.586033583511695211e-01,-8.786632376030925617e-02,-1.562259205070140322e-01,3.424416004906711275e-01,-1.600323779808836278e-02,1.431132975838603216e-01,2.564224733863315620e-01,-1.641254743615789824e-01,-1.367425919556901903e-01,1.467435020857448327e-02,1.000000000000000000e+00 +-1.000062547092753218e-01,2.430830704236164319e-03,2.442175729383090355e-01,1.268699051167839487e-01,-6.389123846329397560e-02,-8.558800399203210507e-02,7.249021145835105040e-02,4.298628554943320634e-02,-5.271419625106030932e-02,1.975425030271986404e-02,-1.593141663325880197e-01,-4.099908516596876273e-01,-1.996152652940482164e-01,5.384521498929881189e-02,-1.000000000000000000e+00 +-1.774447698492219727e+00,-4.764210619965775217e-02,-2.587953371292733840e-02,2.527078163863590299e-01,-3.506894908219360119e-01,-1.604509432277618775e+00,-1.148743176969121427e-01,3.476306938160337867e-01,5.950125588821331135e-02,-1.689561894348156068e-01,3.510138375728891758e-01,-1.285863892217228022e-01,9.889725276835834022e-02,-4.779867105539917227e-02,1.000000000000000000e+00 +-2.115847659490593113e-01,-4.378197457659226827e-02,-1.560226191263545115e+00,1.851037692264281831e-02,-5.186740647855887787e-02,-1.285080578288320674e-01,2.186092565573694302e-01,-7.563234413279935897e-02,-1.836555867319568658e-01,-1.715292381708927838e+00,-1.053609967823944532e-01,-3.007580256026237686e-01,-5.664314466742134124e-01,4.654207660509027122e-02,-1.000000000000000000e+00 +-1.059648825563055119e-01,2.083871134971554129e-01,-3.896191369327062226e-03,1.638163863683159416e-01,-3.325412330756547519e-01,-1.594674707958482429e+00,-1.889321220144114299e+00,-2.519374096022733989e-01,3.744445401896578929e-01,-1.431062364019081157e+00,2.905878641430151843e-01,1.188508934529553251e-01,4.879893502549231821e-02,-7.302283441518868379e-02,1.000000000000000000e+00 +-7.892925337285790210e-02,-1.425061922732849817e+00,-5.135339515188619419e-02,-1.063343810050886851e-01,-1.337699140567889744e+00,2.135462731273148618e-01,9.071650828203833838e-02,-1.555947836611493162e+00,-2.523557403743938998e-01,-1.186849304841148672e-01,-1.597332163655802995e-01,-1.787685024795254485e+00,1.745797844065838378e-03,2.254499206850570370e-01,-1.000000000000000000e+00 +-1.634685003002452675e+00,-3.251862351339719348e-01,-2.205331884740385773e-02,3.742916305651294850e-01,-1.476130033379834672e-01,1.032155617257237423e-01,-1.809921763154535901e+00,-1.758857849397117978e-01,4.028084449511597914e-02,-1.624796041221835630e+00,1.664756781513079820e-01,-1.071422644886549924e-01,1.558875726640141235e-01,-4.165906302948692297e-02,1.000000000000000000e+00 +-6.893588852403798040e-02,-1.502351679030673459e+00,-1.583392212954673361e+00,2.964158753223027770e-02,-1.679927090025262526e+00,1.960003535628031812e-01,1.493346616410116123e-01,-1.573801522268912567e+00,-3.857005873887964786e-01,-1.602374783816816084e+00,-1.260749596503021597e-01,-1.700132611113932102e+00,-2.914614680654354362e-01,1.977030193570133709e-01,-1.000000000000000000e+00 +-8.520846789723049430e-02,-2.651197730292323418e-02,-2.640371058762110146e-02,-3.274202584091251422e-03,-2.816433303798683840e-01,3.562988748599811573e-02,-3.048970621335784781e-01,2.403931662676393743e-01,5.712739777555907172e-02,-1.551001213505004861e+00,3.965997947137003821e-01,-1.509685871126274503e-01,-1.420543153268830849e+00,-3.946372188686265992e-02,1.000000000000000000e+00 +-1.668893144344563373e+00,1.919130586646038972e-01,1.022447000210930657e-01,5.905500448133854663e-02,-7.747440192085087995e-02,-1.740098495699613945e+00,2.704241472111564293e-01,-1.738207255835940712e-01,7.007512455348459401e-02,-1.715623810450799813e-01,1.464674195565787707e-02,-2.574836095767138455e-01,-2.205749926081212731e-01,2.136271854472032716e-01,-1.000000000000000000e+00 +-1.824841436379284199e+00,-1.748777344081649809e-01,6.115091744109193983e-03,2.462803020292880229e-01,-2.487724873459193076e-01,-1.450250498290739154e+00,-4.697050359614601822e-02,2.511430594108938763e-01,5.617082693944049077e-02,-1.450274777049656239e+00,1.015770576039708994e-01,-2.411988640947981544e-01,-1.607422220292852755e+00,-7.604821669259544809e-03,1.000000000000000000e+00 +-1.703817562252395001e+00,1.326709061849910554e-01,-1.517563722971078999e+00,1.060016902241523729e-01,-2.537611221091851110e-02,-1.625499260459003725e+00,1.413230949241252310e-01,-1.874853551714396604e-01,-1.370225761448278790e-01,-1.640928883789254389e+00,-4.872232664044925249e-02,-3.512887869343963021e-01,-1.330782873438719482e-01,1.884054816212058225e-01,-1.000000000000000000e+00 +-4.602927011417328185e-01,9.114648978546381619e-02,-1.142681042952753273e-01,1.181998566641369736e-01,-3.744886720748129005e-01,-1.683306709233135745e+00,-1.857226218067269841e+00,-1.306773969295676741e-01,8.745669333004414681e-02,1.081474503508523810e-01,3.039225988385292898e-01,-4.511980020317890583e-02,-1.668770004433653753e+00,5.705645149867304144e-02,1.000000000000000000e+00 +-1.609292721928712089e+00,-1.530845752972931129e+00,-8.278815713149145772e-02,-2.373194652547248318e-01,-1.642259528918827094e+00,-1.550507000140835645e+00,2.096919128243851516e-01,-1.647554901046019982e+00,-2.522533002550081949e-01,-9.368579713617050664e-02,6.839489592974815069e-02,-1.993235444764836606e+00,-1.704810005505085768e-01,7.884782078520123638e-02,-1.000000000000000000e+00 +-1.858420224161734247e+00,-1.734005282820396676e-01,9.726655340758569301e-02,1.248959239748611560e-01,-2.843455210772053432e-01,-2.268106966669906563e-02,-1.729137928685011705e+00,-2.638388678031160506e-01,2.428805271409836264e-01,1.609752903428374737e-01,5.216967446545667242e-01,-7.752550718208928160e-02,-1.454779407934555735e+00,-3.368056274862356314e-02,1.000000000000000000e+00 +-1.671006873242029567e+00,-1.355035901028246670e+00,-1.546876931567384483e+00,-4.882903868976315453e-02,-1.431346086050258259e+00,-1.412521778718294874e+00,2.408521092393056395e-01,-1.658598241196473033e+00,-1.382017859742168953e-01,-1.657214374755794140e+00,-2.481908330508241639e-02,-1.762757266728576244e+00,2.383848738496055497e-02,1.455584988399447055e-01,-1.000000000000000000e+00 +-1.902126388006115942e-01,1.996213562281251575e-02,1.008372071407214743e-01,-1.460752336310695121e+00,-1.718442887948363751e-01,5.289151945715515196e-02,-1.988938641605968449e-01,-1.404678157366375135e+00,-1.426704526380021543e+00,1.836450345611355395e-02,1.031901470487577022e-01,-1.214539315444648354e-01,6.219952114504016111e-02,-1.654616533531131140e+00,1.000000000000000000e+00 +-7.099264735690004324e-02,1.750364477230531568e-02,-1.062663212368153143e-01,-3.318805470065910868e-01,-2.759776562556524523e-02,-1.603913436870445519e+00,-1.353532462950584492e+00,-1.395546155641066988e-03,-1.210691504980217770e-01,-1.511115253680355153e+00,-1.480633014803731107e-01,-2.012839088420497746e-01,-1.997788643348255844e-01,1.007769414455348678e-01,-1.000000000000000000e+00 +-1.732361623182581800e+00,-2.102480727713798569e-01,4.589408489794362389e-02,-1.185027255246496658e+00,-1.496015716906844428e-01,-1.529090647151525317e+00,-3.767531196928636805e-01,-1.228746858778276163e+00,-1.513836205519304201e+00,1.311451637954682559e-01,5.498183059552660401e-01,8.708600070403887949e-03,6.129938060113643283e-02,-1.559814424680894263e+00,1.000000000000000000e+00 +-2.835840568649770910e-02,-2.146285735581612841e-01,-1.579610604303776533e+00,1.664476210172569082e-02,-5.099273752013008809e-02,-1.725949610073979512e+00,-1.467398823985591960e+00,9.482147057008569191e-02,-3.186590355189626578e-02,-4.781462003049682941e-02,-3.124998176502554736e-01,-2.756619479040776644e-01,-2.832558409756105178e-01,1.619123252324499995e-01,-1.000000000000000000e+00 +-2.367772758105469166e-01,2.386147726201319208e-01,-1.737780012137604135e-01,-1.355794095407284461e+00,-2.679290745175850752e-01,-1.644752444669923097e+00,-1.939455022430933262e+00,-1.868695451010987663e+00,-1.400941658776029719e+00,-1.688002662345677640e+00,3.606506533467307429e-01,-7.625979515244935003e-03,-4.330127823671142684e-02,-1.553362446245406980e+00,1.000000000000000000e+00 +4.032978658428024166e-02,-1.676820021646022507e+00,1.047351288964794014e-01,-1.274758592562561521e-01,-1.655047118035765985e+00,-1.346487776545435500e+00,-1.527216883896012289e+00,-1.410111606579167454e+00,-2.539982374704825852e-02,-1.713267267046358455e+00,-1.014092723436062216e-01,-1.806922107887470208e+00,-9.253453197220207205e-02,1.441451858524561147e-01,-1.000000000000000000e+00 +-1.731129921112224634e+00,-2.901473907450236034e-01,1.180327861648885340e-02,-1.348904830804334765e+00,-2.564662506036542444e-01,2.657611077804407709e-02,-1.800769790691219896e+00,-1.725256531502176394e+00,-1.582781276073582655e+00,-1.587734247659576381e+00,1.846722494212687804e-01,-8.745442992928353920e-02,2.461445513982963088e-02,-1.550950765867309844e+00,1.000000000000000000e+00 +-2.283456737923411917e-01,-1.581192929304472417e+00,-1.698892334002197302e+00,2.936243047887290847e-02,-1.475603940072048648e+00,-1.481309278271474517e+00,-1.344846732616987506e+00,-1.423359469725386628e+00,-7.429594089515155486e-02,-2.249300418856977068e-01,-8.150346857611970308e-02,-1.783421326054325684e+00,-1.956288978727144245e-01,3.423808630989662039e-01,-1.000000000000000000e+00 +-1.392029844521847359e-01,1.585516293481104011e-02,1.649686505433222983e-01,-1.455942057796049349e+00,-2.565270886891928837e-01,-2.995841363766689816e-02,-2.225188616804514574e-01,-1.304550654947434385e+00,-1.543543743723497785e+00,-1.625506112240582501e+00,2.646686934361995869e-01,3.536394651466978623e-02,-1.596770214722755821e+00,-1.718505474909242325e+00,1.000000000000000000e+00 +-1.709571844246771555e+00,7.258692646837865137e-02,-6.937956961166810710e-02,-1.759107096036754969e-02,1.023153468347885037e-01,-1.396731656103666064e-01,-1.290324032684116107e+00,1.744754247071788056e-01,-2.274937312973350501e-02,-1.542470932907623160e+00,-2.143952135731703179e-01,-2.178828468681655861e-01,-4.685982140614411429e-02,3.202479980416738092e-01,-1.000000000000000000e+00 +-1.783884668386667149e+00,-1.272375533214497589e-01,-6.483306964860351129e-02,-1.317393170180484407e+00,-1.785553028497116612e-01,-1.380977492719456912e+00,-2.398079458622670024e-01,-1.290907093889349877e+00,-1.351572903045891394e+00,-1.550242759707908036e+00,4.198473156596549960e-01,-1.242770486723988876e-01,-1.525877099216195854e+00,-1.554149498054001377e+00,1.000000000000000000e+00 +-1.734648507628440139e+00,2.192826484018607358e-01,-1.489106692551441569e+00,5.007721728629293406e-02,1.398957448036743448e-02,-2.921742187204966895e-02,-1.320288395167840356e+00,3.292664544724834830e-01,-1.795623271947691391e-01,-1.466962564866716723e-01,-2.662897463892865274e-02,-1.738436898994596969e-01,-3.817963162764551055e-02,6.503463516527510646e-02,-1.000000000000000000e+00 +-3.029885861559754590e-01,2.550953935420102736e-01,-1.103307825250942481e-01,-1.420240129037396049e+00,-4.057700325150146448e-01,-1.432037726658133003e+00,-1.742574743379801561e+00,-1.706346924550034450e+00,-1.610482645334571306e+00,2.052113966044370463e-01,2.691827908860374707e-01,-5.868454248888337749e-02,-1.688925815284796350e+00,-1.731488086207674471e+00,1.000000000000000000e+00 +-1.587169441767515288e+00,-1.449215424064308477e+00,1.056750713765475247e-01,1.005523967565410681e-01,-1.643903047784339266e+00,5.393450286841017238e-02,-1.355966372117012320e+00,-1.480728708640227875e+00,-1.192444720770064470e-01,-1.617205607701764691e+00,-2.001940707974544931e-01,-1.854276215264260674e+00,-2.120968756661331667e-01,1.249548214378189137e-01,-1.000000000000000000e+00 +-1.659231896786515836e+00,-2.734026343955329175e-01,1.614267437122218207e-01,-1.308580366437199105e+00,-2.585744813783290574e-01,-7.277887054484513674e-02,-1.964579895708931545e+00,-1.988637864745677053e+00,-1.417206261440844273e+00,-1.064945755041092068e-01,2.014194076204649519e-01,-1.354914430258996605e-01,-1.491698880763357549e+00,-1.551242130728441859e+00,1.000000000000000000e+00 +-1.720446547882567012e+00,-1.541241393438607110e+00,-1.630467902235066324e+00,-7.411202833128890943e-03,-1.654541032018014945e+00,2.623612216276595133e-01,-1.480764894592184522e+00,-1.460466737184188180e+00,-3.295613141155256387e-01,-1.335075346053341272e-01,-1.273070084023267268e-01,-2.127679633637005630e+00,-2.464723373152804542e-01,8.022582804182054605e-02,-1.000000000000000000e+00 +-2.109079585833683601e-01,-1.555892998862504095e+00,1.107885884130413306e-01,1.177215642018687169e-01,-1.903635417489270898e+00,6.149415741520453116e-02,-3.799748269154470948e-01,-1.353483645674147029e+00,-4.930015796167842856e-02,1.531146828385572256e-01,2.740872821745550247e-01,-1.725855934989520168e+00,1.813254786623140491e-01,-7.054318243692112023e-02,1.000000000000000000e+00 +-9.734287508391470389e-02,-4.678911477042982381e-03,-2.354664895714689635e-02,5.100745385274149668e-03,-1.331449935855308631e-01,-1.598625887398838596e+00,2.778746322995367390e-01,4.813444104940975410e-02,-1.625933685672424356e-01,-6.697790788327151468e-02,-1.749605469280097747e+00,2.623302391327739791e-01,-2.634792860014013027e-01,1.665935370787189895e-01,-1.000000000000000000e+00 +-1.817353774439702363e+00,-1.561445054303381763e+00,2.588251245924956534e-02,2.035376981561484999e-01,-1.766443070947268268e+00,-1.296972269680546797e+00,-2.543772414319446229e-01,-1.398205211604792941e+00,2.092399351858046930e-01,1.687208519899038306e-01,2.441626287880789281e-01,-1.858209074295685825e+00,-1.966273036325641155e-01,4.292932778109619096e-02,1.000000000000000000e+00 +2.703596192017793109e-03,-2.329838366977103892e-01,-1.380333551207818088e+00,2.044434338582787891e-01,-4.081958202166395544e-02,-1.681344439141456926e+00,1.476627032024580011e-01,-4.993020226228646330e-02,-1.875771998174172728e-01,-1.762007651436396705e+00,-1.557788011049577648e+00,2.837909499650285161e-01,-5.845342207235090792e-02,-9.376632748452173871e-02,-1.000000000000000000e+00 +-2.606686354658470095e-01,-1.408856249495505031e+00,1.880920528500927280e-01,1.835990601756801177e-02,-1.861442820461840064e+00,-1.652352721661132007e+00,-1.866726146333868464e+00,-1.805367024170868362e+00,-4.902227545481459281e-02,-1.560841106272784495e+00,2.205571318753309085e-01,-1.592737578886485927e+00,-2.845762836725848621e-02,1.370102237967169845e-01,1.000000000000000000e+00 +-9.844964916686858858e-02,-1.561368624864145183e+00,-3.914124367162109819e-02,-1.080476455056877255e-02,-1.722930338042492515e+00,-1.544141333393409976e+00,1.157126277790064411e-01,-1.727777618033043527e+00,-1.670565305629349573e-01,2.974758626022222519e-02,-1.581477342471812042e+00,-1.323120858919411447e+00,-2.100339313983373701e-01,1.448187770874282965e-01,-1.000000000000000000e+00 +-1.957458263369451723e+00,-1.694274989097745543e+00,5.454911108419973481e-02,1.805943278212934489e-01,-1.756092263705557599e+00,-8.595899367681159031e-02,-1.696067414366745130e+00,-1.712023576270820469e+00,2.060492194970154900e-01,-1.398335988329474810e+00,4.410001979147892825e-01,-1.719686354629639036e+00,-6.051566718506100340e-02,3.339095417045597619e-02,1.000000000000000000e+00 +-7.866696516093840685e-03,-1.616787244372446697e+00,-1.740116896609308572e+00,8.579584135912943221e-02,-1.439416796296014933e+00,-1.523227070758474966e+00,3.758797173705020200e-01,-1.769922243342483492e+00,-2.134407608641714915e-01,-1.517898778848180585e+00,-1.492718695300921272e+00,-1.078979009657375254e+00,-8.830119739724537342e-02,2.032437865555704604e-01,-1.000000000000000000e+00 +-2.053848989919285495e-01,-1.323498679920936505e+00,1.600594600689232427e-01,2.127530971190854658e-01,-1.812974538182991369e+00,-9.828391746720832600e-02,-3.237482397158925052e-01,-1.376107670949456407e+00,1.857257065594705159e-01,-1.536261310236082256e+00,3.252889388876294974e-01,-1.582426747967575320e+00,-1.644393972918431368e+00,-7.704793882180768771e-02,1.000000000000000000e+00 +-1.669671522325552715e+00,-4.738520888333819236e-03,-9.011259086863371293e-02,-2.387991865509341005e-01,-5.806701719645110393e-02,-1.206243669493144155e-01,3.369023832387631479e-01,-7.667184510194216540e-02,-6.384074432003430943e-02,-2.220560303315098627e-02,-1.677397347136823980e+00,2.831200735921008960e-01,-2.766936859144445426e-01,1.560540392900901796e-01,-1.000000000000000000e+00 +-1.777587007008249564e+00,-1.704171978040527335e+00,5.913101480819421552e-02,1.428869347821797309e-01,-1.901771407341925402e+00,-1.759160581014954428e+00,-2.726838542570871327e-01,-1.341989046626985482e+00,1.149581111517015558e-01,-1.541115658685354717e+00,1.677606151171127657e-01,-1.464461059124410713e+00,-1.691688504084269074e+00,-3.104441766574880454e-02,1.000000000000000000e+00 +-1.741418645816155575e+00,2.527459606765928291e-01,-1.635744431626482864e+00,-4.135823844505452651e-02,1.560523028071861273e-01,-9.996675928048688597e-02,3.331306303388317236e-01,-1.182858312212287932e-01,5.816274462819263913e-02,-1.764772416562902180e+00,-1.477910347247076261e+00,2.989494469385867159e-01,-1.051717978886456129e-01,1.921403438897218707e-01,-1.000000000000000000e+00 +-3.065731389712608168e-01,-1.342546641072029701e+00,5.964527988909403000e-02,1.711393678184557343e-01,-1.761287550914799827e+00,-1.611029149319431752e+00,-1.765853023869925487e+00,-1.888379046610273448e+00,1.002820626583308672e-01,-1.109509776410169124e-01,2.188709029554854468e-01,-1.576157910757060021e+00,-1.521945969532204845e+00,2.070355351194339347e-02,1.000000000000000000e+00 +-1.623549583779014815e+00,-1.350051115786569111e+00,-8.869050426022510522e-03,-1.874223112652556866e-01,-1.633442654667898397e+00,1.375420098898255117e-01,1.168110294924096237e-01,-1.569377840081284781e+00,-1.602564120101649947e-01,-1.325093610505566621e-01,-1.438045060031879707e+00,-1.050581181443586365e+00,-2.893936297597720642e-01,7.855108334561576588e-02,-1.000000000000000000e+00 +-1.658154207372490641e+00,-1.789134629255389797e+00,4.054766945845136861e-02,4.274914633188270363e-03,-1.797182622929081264e+00,2.559107562684073689e-02,-1.718806878310818353e+00,-1.755749373633363364e+00,7.060323412260165188e-02,-1.084276109706693719e-02,3.609575922405105497e-01,-1.714998993682882000e+00,-1.574951641335678110e+00,1.149572272760127495e-01,1.000000000000000000e+00 +-1.847961507423650840e+00,-1.473921222549971821e+00,-1.617837932133893375e+00,-7.103102034326941316e-02,-1.571069807864609036e+00,3.573476889499199727e-02,1.970289265713811022e-01,-1.739229085965009469e+00,-2.775349152229639182e-02,-1.680739634226039003e+00,-1.587025168513149342e+00,-1.236748239033638841e+00,6.935436000199549089e-02,2.040125069256005230e-01,-1.000000000000000000e+00 +-1.722904466803558410e-01,-1.411617617088636312e+00,2.916437094735713220e-04,-1.406253287690810927e+00,-1.615679981746658056e+00,-2.763953409871925445e-03,-3.950897247081973651e-01,2.430954492310867798e-01,-1.311681842017352828e+00,-2.200217028509704811e-02,1.703654951829411679e-01,-1.720433172383417197e+00,1.308044939654900291e-03,-1.417741158285068082e+00,1.000000000000000000e+00 +-6.888987672868050749e-02,-2.206762982686303332e-01,-1.750101396499676581e-02,-3.727240288538255508e-03,-1.083627958668931801e-01,-8.696675784860415093e-02,-1.319049022372315028e+00,5.257817621846899714e-02,-1.711129698146304778e-01,-1.555886570316086903e+00,-1.677814988070778224e+00,3.915202101818402447e-01,5.543780834425612869e-02,1.390389113262543719e-01,-1.000000000000000000e+00 +-1.727238257218281170e+00,-1.615530576147521602e+00,7.869056225858209186e-02,-1.423059514455122798e+00,-1.761192441644305884e+00,-1.630316956634427994e+00,-2.789120381103245006e-01,1.941822238716390814e-01,-1.518121723396330669e+00,-1.238462931609404100e-02,2.742496492662739316e-01,-1.645835021526846909e+00,3.721937042066567752e-02,-1.627505454659611495e+00,1.000000000000000000e+00 +1.470635122441772691e-02,-2.056113108150927626e-01,-1.764448694346967272e+00,1.968965126762830531e-01,-1.287913227649226389e-01,-1.238240475078797309e-02,-1.315648596190898134e+00,2.225161798906181432e-01,-1.704424821427150682e-01,-1.000365041999348586e-01,-1.533319399388676008e+00,2.921635897646819857e-01,-5.860574376450541911e-02,2.784987048414280242e-01,-1.000000000000000000e+00 +-2.494620197685982754e-01,-1.448566913248975796e+00,7.057694579524713407e-02,-1.273212303503205467e+00,-1.679047110450799574e+00,-1.588867586909664009e+00,-1.771914972690083134e+00,-2.517244837878088726e-01,-1.480580985639242897e+00,-1.669982779328623934e+00,3.614806337794052582e-01,-1.633837644043817372e+00,4.781815759110948083e-02,-1.560544856181362405e+00,1.000000000000000000e+00 +6.107929177820334288e-02,-1.534902656447697966e+00,-8.607572626113366154e-02,-1.053562469886166753e-01,-1.463402905170154700e+00,2.486780937748925002e-01,-1.327669916737666655e+00,-1.444079856760119851e+00,-2.251288416680337356e-02,-1.548686440706024792e+00,-1.576795558854126700e+00,-1.162050860905266214e+00,-1.797664644595173833e-01,8.235556289785103679e-02,-1.000000000000000000e+00 +-1.620915957675557850e+00,-1.759205929598766538e+00,6.587282363154096931e-02,-1.260937479341356138e+00,-1.825365113928211436e+00,-5.420203464332983695e-02,-1.856265590647504293e+00,-3.232448348203816324e-01,-1.506331929169810291e+00,-1.790950030579560037e+00,2.915247309809219645e-01,-1.553405508313238981e+00,1.064510860731728847e-01,-1.593081305610142051e+00,1.000000000000000000e+00 +-4.612223926753210301e-02,-1.491967959290764867e+00,-1.557513752337976953e+00,-5.320920254984169706e-02,-1.565674533919902078e+00,-6.933620921740490939e-03,-1.436743443340090298e+00,-1.483034265310440913e+00,-1.958793561744313072e-01,-5.822026887820264812e-02,-1.749475100938908234e+00,-1.367204286344534836e+00,-3.377935618256747152e-02,1.192202087137585464e-01,-1.000000000000000000e+00 +-4.031583925895292353e-01,-1.532565253996989396e+00,9.855479329093051744e-03,-1.389311833487676839e+00,-1.760960705542248483e+00,-1.210071189044274048e-01,-1.758028352391565741e-01,2.497081893375624473e-01,-1.526797317251125996e+00,-1.580968414753146645e+00,3.132766109992452530e-01,-1.604830716095155818e+00,-1.399353857373611509e+00,-1.618918810056891644e+00,1.000000000000000000e+00 +-1.752387993950347056e+00,-2.153427027813585581e-02,3.324646213538123146e-02,-1.248963934916344776e-01,6.501245133315829844e-03,-1.692417971345222094e+00,-1.397884025322287727e+00,1.653510492758513140e-01,-9.216492629239791956e-03,-1.832012590804132479e+00,-1.872767888166050554e+00,2.915105817056929394e-01,-1.079166206186459309e-01,2.912668576802653342e-01,-1.000000000000000000e+00 +-1.806184649482642346e+00,-1.773788783419828707e+00,7.595038272615574348e-02,-1.353747587535946373e+00,-1.926395246773682013e+00,-1.608648402785678888e+00,-2.940518864491442619e-02,1.536771172595196577e-01,-1.600446038430091589e+00,-1.568954173464251145e+00,2.377243129796963450e-01,-1.702954340893876317e+00,-1.540268035867445651e+00,-1.525964682609035838e+00,1.000000000000000000e+00 +-1.681853001192156416e+00,2.025248851261629568e-02,-1.507927323068977588e+00,6.015652368434671465e-02,6.787768755262589548e-02,-1.797346668678856396e+00,-1.328492471023882127e+00,1.083374242081695804e-01,-6.807194630225105181e-02,-1.536472371808336179e-01,-1.544991427545987506e+00,2.496879419231946562e-01,-2.586500999091325692e-01,2.472464564743200865e-01,-1.000000000000000000e+00 +-6.512889928647674909e-02,-1.280157641621820330e+00,8.548411526008756200e-03,-1.308195710131301981e+00,-1.759788721990152682e+00,-1.442917604990261449e+00,-1.893052923952196265e+00,-1.913558088187841955e-01,-1.400433029598109114e+00,-5.406451812426182196e-02,2.908001571900953874e-01,-1.654973814245627617e+00,-1.488252776308071290e+00,-1.629965511123137256e+00,1.000000000000000000e+00 +-1.600806204135150956e+00,-1.511861641530125588e+00,-4.237261964877586662e-02,-1.027349323790079094e-01,-1.534775695208126400e+00,-1.609318802955511662e+00,-1.415221590280331787e+00,-1.349255135992462717e+00,-1.603016048133207860e-01,-1.709813196142691449e+00,-1.498028189087612372e+00,-1.354158043503653763e+00,-1.324975882836215146e-01,2.711132403917941303e-01,-1.000000000000000000e+00 +-1.815694150620314362e+00,-1.841070891138648191e+00,-2.135129424367295248e-01,-1.451394165585441653e+00,-1.747533020562963335e+00,-1.200370342065606132e-02,-1.923975840908812129e+00,3.494210435125721936e-02,-1.425449270516573108e+00,-4.246354558705554838e-03,1.056439022865369171e-01,-1.676809418735673018e+00,-1.449035505955657666e+00,-1.531577706593846289e+00,1.000000000000000000e+00 +-1.604075385534005527e+00,-1.247560546127565617e+00,-1.672255369508738987e+00,1.065211685963571020e-01,-1.756483006388495305e+00,-1.617196120846714269e+00,-1.389449269607853088e+00,-1.586122669296846199e+00,-4.219247823196448088e-02,-1.204773546433365317e-01,-1.559777708682754449e+00,-1.272675445601217925e+00,-1.568985920919612476e-01,2.787010337220571787e-02,-1.000000000000000000e+00 +-8.034254508214096202e-02,6.880725407078074063e-02,2.094215261303540299e-01,1.446253521446881907e-01,-2.494568563956204299e-01,-1.612589456454816883e+00,-1.591140610263561961e-01,1.892714292746733307e-01,2.185783413107370288e-01,9.944979984667769168e-02,-1.197593196312220387e+00,8.774288695775299407e-02,1.763860410608001916e-01,1.613257325364919892e-01,1.000000000000000000e+00 +-1.886644372382341728e-01,-1.619309640274923801e-01,2.683354162221169431e-02,-1.413968591452252621e-01,9.808653926713208071e-02,-7.657823144474243393e-02,1.303211970396588870e-01,4.133184237415543638e-03,2.793182479116006200e-02,-1.535301780469503274e+00,-1.300594688837936885e-01,-2.232958274315878788e-01,-1.681883951636097274e+00,-2.720573586526732202e-01,-1.000000000000000000e+00 +-1.778715650654681291e+00,-1.262469228272111998e-01,6.962258263356069232e-02,1.095996415049501210e-01,-1.988037976727128342e-01,-1.175735577159129908e-01,-2.309365762557876178e-01,1.224684282068461416e-01,2.462409602188055102e-02,4.908526452607276519e-02,-1.363465905985415283e+00,-1.910421864649460011e-02,-5.795484461945044075e-02,-1.270035108333279483e-01,1.000000000000000000e+00 +-4.142652836984381248e-03,-6.013365015874117675e-02,-1.703420334445887141e+00,3.742735829120897445e-02,-4.025439783818521994e-02,1.289073532965347157e-02,3.107700852026719085e-01,-2.259629875830789780e-01,1.670993057174276208e-02,-1.019608591323673125e-01,-4.382862033882690272e-02,-4.585080608863484342e-01,-1.692172413371813899e+00,-5.792533591758292078e-02,-1.000000000000000000e+00 +-3.935154334802061782e-01,3.638872533473028192e-02,1.395259957821806951e-01,1.664661237197593568e-01,-3.103391820041769833e-01,-2.005443684678374638e-01,-1.884110053262168627e+00,-1.345063215107585031e-01,2.550919602531565022e-01,-1.361261227364313431e+00,-1.290216119102986614e+00,1.336215441564989337e-01,6.254152091303144534e-03,2.100087729950954329e-02,1.000000000000000000e+00 +-9.669110204168082645e-02,-1.775363854018477516e+00,1.069742929339808635e-01,-1.322016069705599928e-01,-1.547590907751123179e+00,4.749105067501178251e-02,1.252294878250418686e-01,-1.594537320930422553e+00,-2.024532740445836865e-01,-1.485978417205851887e+00,-1.276331802522947534e-01,-1.692798225641222842e+00,-1.719467001867377220e+00,-2.401686334724826843e-01,-1.000000000000000000e+00 +-1.818404423502115286e+00,-1.613776695434923358e-01,-2.963013171964887227e-03,1.003119539558565421e-01,-5.117550258241547745e-01,-1.840998639084066912e+00,-1.622614867210045109e+00,-1.900972555314071055e-01,1.886811273742927675e-01,-1.576598230931666178e+00,-1.384814828596028446e+00,2.764715054184119225e-02,-1.234786186862628088e-01,-2.848869597594009748e-02,1.000000000000000000e+00 +-8.409014969526823480e-02,-1.523030598750639619e+00,-1.651004473613457479e+00,2.050129427916006497e-01,-1.662422657414257543e+00,4.900743176672640172e-02,2.953259378908753563e-01,-1.727332438860938346e+00,-1.736397564513021963e-01,-1.754096263969709690e-01,-1.773807575012419369e-01,-1.803500231186919267e+00,-1.772739215935786206e+00,-3.388655478452351488e-02,-1.000000000000000000e+00 +-3.504893168320986074e-01,1.287453279306145226e-01,-9.912367241549739638e-02,5.441291793956634648e-02,-3.067496111818439619e-01,-1.847740748782476627e+00,-2.809401432452648950e-01,2.606615198081184692e-01,-8.298507598924294293e-02,-1.528360789793670182e+00,-1.243673834577912807e+00,8.332409430469578382e-02,-1.536772762431679151e+00,-2.276252096846678452e-01,1.000000000000000000e+00 +-1.669135017685616562e+00,1.878572457368295479e-01,-1.109103344102813082e-01,1.084848744675842580e-02,-8.542400125995765203e-02,-1.858098624717458680e+00,-1.107316092311189104e-02,-4.160138555491198209e-02,-2.961452456263555799e-01,-1.711925191657831302e+00,-1.727054823269065509e-01,-3.765547362240309059e-01,-1.915823137520314301e+00,-1.315770328525295851e-01,-1.000000000000000000e+00 +-1.800479249082186151e+00,-3.386831473970310924e-01,2.229926830865746057e-01,1.062297083684143884e-02,-2.752908599739183892e-01,3.925282309845710971e-02,-3.015683531867457412e-01,2.297082100678827232e-01,1.058116123622843130e-01,-1.433791716055095034e+00,-1.166489686173616480e+00,-4.472131141237700724e-02,-1.571037642506694976e+00,-4.200183994858083109e-02,1.000000000000000000e+00 +-1.615602691154683912e+00,-3.740395205227235731e-02,-1.741864658683469180e+00,-8.026571595103948464e-02,-6.875727441416802643e-02,-1.691643264385989998e+00,1.540923994518740570e-01,-6.881789309428396062e-02,-6.992666548691262030e-02,-1.090237072062237716e-01,-6.974526401931734065e-02,-2.892980571982610161e-01,-1.755724205511214553e+00,-1.814918365608780837e-01,-1.000000000000000000e+00 +-2.677256404895123065e-01,1.835013192157280426e-01,-5.410002376291028758e-02,1.960243382670116552e-01,-1.888170511251534012e-01,-5.086120994193638750e-02,-1.848774520891739437e+00,-2.360222779043457952e-01,6.986521036030590714e-02,3.710310692206895966e-02,-1.267617760230665969e+00,7.705794214828859401e-02,-1.624174807600006210e+00,7.589070361533122033e-02,1.000000000000000000e+00 +-1.483100626972129632e+00,-1.498241130023366896e+00,-1.839484030280719717e-01,-1.599276150165117594e-01,-1.677524565791744582e+00,-1.244818282776545715e+00,1.844648780999630366e-01,-1.531863635483006636e+00,-1.738348777911911669e-01,-1.734127336249420948e+00,-1.460549832600117337e-01,-1.760490064524646625e+00,-1.703402789107563597e+00,-7.417356541098861500e-02,-1.000000000000000000e+00 +-1.714556915953274085e+00,-1.098793838346878715e-02,1.397241074190134769e-01,1.188655975385968788e-01,-3.606397251872860421e-01,-1.623217860346481745e+00,-1.843379238712378632e+00,-2.198912233817513218e-01,5.596523583124383971e-02,1.984229244991772556e-01,-1.302687102631844951e+00,1.540032728930624817e-01,-1.707395301387358844e+00,8.229962282112589234e-02,1.000000000000000000e+00 +-1.552023699997773010e+00,-1.589629870687183866e+00,-1.546490125968891016e+00,-9.512728416417828847e-03,-1.623098593056410577e+00,-1.543080591010138392e+00,3.550992655544662480e-01,-1.651747859497800341e+00,2.138715259196787011e-02,-4.614252337635053880e-02,-1.099106707827380153e-01,-1.797091809321512024e+00,-1.723231873567492078e+00,-1.951141050461503434e-01,-1.000000000000000000e+00 +-1.606564658516367594e-01,1.619450152250831165e-01,1.865756135283968553e-01,-1.459656607146854412e+00,-1.715882654233442106e-01,-1.434470999144190406e+00,-1.193565190757426703e-01,-1.293034381978339198e+00,-1.521215319236361108e+00,-6.652759862985353767e-02,-1.407943939743753869e+00,8.327266281168387019e-02,-9.784064273089676522e-02,-1.498740980415620871e+00,1.000000000000000000e+00 +-1.483323083342633075e-03,6.967090893741754998e-02,6.278870422176768828e-02,-3.086306037876339337e-02,4.902401205912280957e-02,-1.521000431313429102e+00,-1.264142252532288513e+00,9.533858173133910596e-02,-1.011741668662529819e-01,3.310564112257621816e-02,-8.191935135946362689e-02,-3.186349310486205622e-01,-1.898669358964544029e+00,-4.496879339874823578e-02,-1.000000000000000000e+00 +-1.573620891016235035e+00,-1.329982948840280343e-01,2.399503310453289795e-01,-1.330488862416024265e+00,-2.765375378185703781e-01,8.808199743137788695e-02,-2.648386870994752784e-01,-1.379876580550749576e+00,-1.383938581042170268e+00,-8.501291019743140165e-02,-1.165802340721067143e+00,1.507153745526593203e-01,1.395678131681016287e-01,-1.418622966305338906e+00,1.000000000000000000e+00 +-2.414752338762555239e-01,6.263748091812453012e-02,-1.582288633664975963e+00,-2.138551415080261475e-02,-1.432209397597079270e-01,-1.564218586364576780e+00,-1.325323773803723570e+00,8.635628717131471621e-02,-9.389897569821684109e-02,-1.765087260484488496e+00,-6.942818194977197488e-02,-3.223149105900656175e-01,-1.783911969651682083e+00,-1.724922661524661005e-01,-1.000000000000000000e+00 +-2.663953337290222434e-01,2.367978735580491545e-01,-6.125756833378044608e-02,-1.600320213409630377e+00,-1.746247378962873520e-01,-3.198386486924113814e-02,-1.769758135789326392e+00,-1.706661585217408961e+00,-1.625355656722051734e+00,-1.457244178579490068e+00,-1.335913049256137963e+00,1.196030340183451696e-01,-1.642401908248225795e-01,-1.456435876411096952e+00,1.000000000000000000e+00 +-1.232307318054817469e-01,-1.646559127435431868e+00,-1.688108478516482103e-01,8.679061400071028110e-02,-1.626846068315488836e+00,-1.472854188583361923e+00,-1.365579138009763049e+00,-1.466056801914429553e+00,-1.148785375351140531e-01,-9.280445394721349717e-02,-2.086263845777263509e-02,-1.798345062543814654e+00,-1.807806298910443310e+00,-2.312401086807840955e-01,-1.000000000000000000e+00 +-1.797916284381434915e+00,-2.911877350873054437e-01,9.552965566583154766e-02,-1.199357917186429034e+00,-2.857742411791293069e-01,-1.605346495511491778e+00,-1.772284905664825549e+00,-1.665468436189193158e+00,-1.587105210501043695e+00,-1.713909513833273612e+00,-1.395969565879321861e+00,2.700363356400100612e-01,-3.133153261923687927e-02,-1.466512092594051575e+00,1.000000000000000000e+00 +-2.816570040640491157e-02,-1.490270920705007551e+00,-1.697566414689200442e+00,1.066246706088792573e-01,-1.536164302589434261e+00,-1.538328845280117152e+00,-1.356330561620534558e+00,-1.514472207116063451e+00,-1.094905748070687523e-01,-1.800177760814607675e+00,-1.216267770704610451e-01,-1.651142758533824972e+00,-1.955366473810422168e+00,-1.231567332270106924e-01,-1.000000000000000000e+00 +-2.882849109278932676e-01,1.983093618883552678e-01,-1.463093206844333360e-02,-1.322092918898141845e+00,-4.602704639099099992e-01,-1.605476279094690151e+00,-3.759189111112950510e-01,-1.369264970446639085e+00,-1.660121345876027110e+00,-1.739860774927726172e+00,-1.344866286821288837e+00,1.542177775336922019e-01,-1.668878289511315227e+00,-1.520740909468941915e+00,1.000000000000000000e+00 +-1.732333604683580441e+00,9.111658731908463260e-02,-4.803802635457201514e-02,-1.279143932227881919e-01,-2.649329842482005953e-02,8.165733683507830909e-02,-1.263156309110212039e+00,6.513957347289628386e-02,4.103908537035586002e-03,-5.453058692077440012e-02,-8.022016489145190887e-02,-1.727359390460022626e-01,-1.734239058057392757e+00,-3.904902587740946007e-01,-1.000000000000000000e+00 +-1.694631322106838534e+00,-2.318305759969209179e-01,1.452105664682052100e-01,-1.296445994927566847e+00,-9.002133292421310440e-02,-6.386742495464487954e-03,-2.279265489238869458e-01,-1.223730498180746640e+00,-1.310785738689320024e+00,-1.641340256361092376e+00,-1.230315848916744281e+00,1.856264504335765064e-01,-1.656945810802020302e+00,-1.748667142064466384e+00,1.000000000000000000e+00 +-1.450854206908660071e+00,7.828524456119041741e-02,-1.578406784248261419e+00,-2.512896826671837114e-02,-1.843895802506676229e-01,-1.191981600187149992e-01,-1.336143794401053242e+00,5.477238872298689082e-02,-2.040918138447603281e-01,-1.578286250190459761e+00,1.322295879957060549e-01,-1.209625784490078182e-01,-1.599368150749488127e+00,-1.874933429591453538e-01,-1.000000000000000000e+00 +-1.045059878192874936e-01,3.284108220258633581e-01,-1.804137053924599610e-02,-1.415434285098199352e+00,-4.356646779711194073e-01,4.788784486837571741e-02,-1.877641497993017383e+00,-1.743155189450987796e+00,-1.585436495856220152e+00,-2.573786078104545877e-02,-1.387310204173998418e+00,1.943702255628812492e-02,-1.487659000524529818e+00,-1.554790847506030582e+00,1.000000000000000000e+00 +-1.777631063812934009e+00,-1.474989866021839457e+00,-1.378492663939756557e-01,9.719130114846494251e-02,-1.544659298121808133e+00,-4.345709155336191509e-03,-1.300914268229148796e+00,-1.342089156350444235e+00,-1.443842580417471766e-02,1.101393450782136851e-01,-4.458906771815638465e-02,-1.947807337208174339e+00,-1.783904632762413067e+00,-1.539862301179337478e-01,-1.000000000000000000e+00 +-1.875221005130098373e+00,-3.027948236787822434e-02,1.577189260360888357e-01,-1.297525857832602103e+00,-4.466360637113593879e-01,-1.507951520190433659e+00,-1.781636723359887986e+00,-1.742255382993029400e+00,-1.490422196791556297e+00,-2.957936848575772396e-02,-1.097956120195445751e+00,1.158530889140248904e-01,-1.599658517211244968e+00,-1.684814893443490114e+00,1.000000000000000000e+00 +-1.413746274172867690e+00,-1.439223735272604943e+00,-1.606212425722667536e+00,2.463671345926384815e-01,-1.672731456423659946e+00,2.268676841522668242e-03,-1.316526726628725941e+00,-1.262398307739135195e+00,-1.777197614280082993e-01,-1.813590259802646987e+00,1.313756346090966254e-02,-1.618523643863773342e+00,-1.859687251220742299e+00,-2.495201522744032452e-01,-1.000000000000000000e+00 +-3.297252099680703097e-01,-1.371755504998362296e+00,-2.079422813263466507e-02,3.886685963712142033e-01,-1.856985700819249185e+00,-1.739845605796722872e+00,-2.518312292333283464e-01,-1.274371212320373870e+00,-4.745129115520065055e-02,4.382091814791814338e-02,-1.278635974363860894e+00,-1.420689039846026347e+00,-3.444506503819735888e-03,-2.982589230851817944e-02,1.000000000000000000e+00 +-2.124491174803492255e-01,-2.139723931994451100e-01,-3.322687787579704788e-02,7.088355859889972077e-02,-1.097689220635640478e-01,-1.607445440968523709e+00,4.407797109396910940e-01,-1.427730048091011839e-01,-9.409292144042250006e-03,-1.654717190782132308e+00,-1.578590319863247160e+00,3.807029358492156623e-01,-1.860152216807540171e+00,-7.885114569420309527e-02,-1.000000000000000000e+00 +-1.653082354576353996e+00,-1.504985772276845823e+00,8.862611021251846910e-02,-8.201785062421099171e-02,-1.879265445719659366e+00,-5.944675608816845508e-02,-3.709557306042644553e-01,-1.315055201264324181e+00,7.171794880851997678e-02,-5.131578626564396728e-02,-1.251328659172288083e+00,-1.482978491176007774e+00,6.440516665073076075e-02,-5.049820195005234186e-03,1.000000000000000000e+00 +-8.791229388322152616e-02,-5.836882405768635540e-02,-1.481081774714787969e+00,-6.391971646885230562e-02,-6.486649251415627093e-02,-1.506758250413897215e+00,1.770408338306008744e-01,-1.313950103499249289e-01,-1.531950314854812478e-01,6.990859955920894486e-02,-1.626637234267066745e+00,5.929477893373875652e-01,-1.546528241399860448e+00,-1.603662961096674056e-01,-1.000000000000000000e+00 +-3.396285678353226367e-01,-1.528294409412719546e+00,1.338140976218210321e-01,3.178166295579417100e-01,-1.884779252162981145e+00,7.587564002972220500e-02,-1.801052541146987984e+00,-1.802455789509802342e+00,5.629959864233883421e-02,-1.528386690144768467e+00,-1.196946559723040426e+00,-1.496014076337103482e+00,-1.459000822332437441e-02,-4.514110158813214313e-02,1.000000000000000000e+00 +-2.122826033075854713e-01,-1.742457408344193714e+00,-5.994940210951479193e-03,-7.429000399707801072e-02,-1.573847815175543285e+00,-1.427765538136147594e+00,-2.177683539857089290e-03,-1.848090509302166007e+00,-2.462976151736861463e-01,-1.507496047961274011e+00,-1.694486745172459230e+00,-1.084089586155583929e+00,-1.881101533930195080e+00,-4.045707885772964474e-01,-1.000000000000000000e+00 +-1.821486828404217828e+00,-1.785783773911563177e+00,8.694550389372397714e-02,1.018824281446641250e-01,-1.693691149603142154e+00,-1.484847003659224729e+00,-1.765063793949422033e+00,-1.802234392814523023e+00,5.522426840259311853e-02,-1.612363985088490770e+00,-1.317573593524661524e+00,-1.431744863444093685e+00,4.777887984338642646e-02,9.428109634203124534e-02,1.000000000000000000e+00 +-1.355231699667234502e-01,-1.478286893948838276e+00,-1.745691703278433149e+00,2.120014411317283631e-01,-1.397098658957899087e+00,-1.501016599025400300e+00,3.430488942349717574e-01,-1.593148440623272544e+00,-2.454628769550215583e-03,-2.170799739660791150e-01,-1.775361995629232137e+00,-1.198240303294508369e+00,-1.559487754720733532e+00,-1.240689768389830194e-01,-1.000000000000000000e+00 +-9.313034480929896497e-02,-1.548711135573551667e+00,3.748586304684338455e-02,2.709530778596377365e-01,-1.896236382869262327e+00,-1.485636556670600683e+00,-3.161759750274304448e-01,-1.164643173374209084e+00,2.586141464409828783e-02,-1.451717591710380173e+00,-1.196062416447940757e+00,-1.289322134291910560e+00,-1.532448668231899402e+00,-1.185949432151032212e-01,1.000000000000000000e+00 +-1.798587046249422450e+00,1.869445715679594888e-02,-1.044510995144790066e-01,5.572535109843471113e-03,2.050689463626149955e-01,-4.569373395860657633e-02,2.411256194966787947e-01,-1.233356642157531907e-01,-2.070072436122830095e-01,-1.795951024666027296e+00,-1.566054540405366291e+00,3.927205796742158639e-01,-1.603352638892656667e+00,-1.273094642344743677e-01,-1.000000000000000000e+00 +-1.695174531165744680e+00,-1.901057242239872380e+00,4.447986228189836078e-02,1.909527852487359345e-01,-1.747763271347229086e+00,-5.746031256144605581e-02,-3.742409088612788093e-01,-1.155721528626410866e+00,1.726663169414113241e-01,-1.451530504363050422e+00,-1.379182285647580386e+00,-1.538823892180034125e+00,-1.778675306065086392e+00,-1.389632348775922399e-01,1.000000000000000000e+00 +-1.516154332717399411e+00,2.948078711775095617e-01,-1.563462614010797669e+00,4.653471419431301492e-02,-1.000266205608066339e-01,-1.635299494656577979e-01,1.981747060035120023e-01,-2.439225329817111265e-01,-2.040020500696499428e-01,-3.313004356918086701e-02,-1.662464812462594477e+00,2.660385912486399884e-01,-1.808148641442627769e+00,-8.892180870150626082e-02,-1.000000000000000000e+00 +-1.897814348096344694e-01,-1.366965856206360463e+00,2.847573068305468691e-02,7.793816993692186113e-02,-1.847043456045497356e+00,1.384223405335286393e-02,-1.735776206540201150e+00,-1.960193423500923959e+00,2.393677744169735166e-02,4.390804650419367905e-02,-1.346637422342611190e+00,-1.525863026477373374e+00,-1.312007080002479231e+00,8.494577091091098930e-02,1.000000000000000000e+00 +-1.718634311223755873e+00,-1.610442672944327303e+00,2.038515277567406331e-02,-3.736477568872324101e-02,-1.742524571488221818e+00,1.347297168283280444e-02,2.893177315601560551e-01,-1.604696419948735020e+00,-2.371395839510001546e-02,-1.463682789949578567e+00,-1.652413527193833831e+00,-1.441831057552340978e+00,-1.703409524414448928e+00,-2.498822282863613631e-02,-1.000000000000000000e+00 +-1.637188078103448463e+00,-1.603885569860671767e+00,9.449692346724855585e-02,1.853561669661850375e-01,-1.904633031994200199e+00,-1.573753785839371311e+00,-1.746192613065815635e+00,-1.605014692948754984e+00,1.884122078598251537e-01,2.130393423176967782e-01,-1.313215595620440101e+00,-1.375569192665423213e+00,-1.609605564479541062e+00,1.032090234096018702e-02,1.000000000000000000e+00 +-1.463932539775016695e+00,-1.396927527135983116e+00,-1.597124513244271737e+00,1.700606987739440301e-01,-1.593214258358096158e+00,7.898635524713594480e-02,1.460646252191022954e-01,-1.727752340910720941e+00,-1.397253179256417455e-01,-6.391578604999410829e-02,-1.506917714065532099e+00,-1.327124410192860093e+00,-1.868621401392190240e+00,-4.814873314166542850e-02,-1.000000000000000000e+00 +-2.453302913512000472e-01,-1.381393475649339120e+00,2.820336751702119671e-02,-1.315876624107797266e+00,-1.824739999228144560e+00,-1.602121961177756182e+00,-3.705984461049904866e-01,2.088605174089669669e-01,-1.388530441999721976e+00,-1.614360672904696092e-01,-1.382764604531399932e+00,-1.468531559001070574e+00,4.112328007139420816e-02,-1.581333600149080088e+00,1.000000000000000000e+00 +2.713805008108567673e-02,-4.492060815494731962e-02,1.321227763640236974e-01,3.839966895412061376e-02,-1.796176035095834456e-01,-1.215735672995639227e-01,-1.373018785594215529e+00,3.902518928637641604e-01,-1.707055539118201293e-01,-2.122842042683150410e-01,-1.625022535456478234e+00,2.678538992717404144e-01,-1.770618558854318403e+00,-3.741509762172745557e-03,-1.000000000000000000e+00 +-1.578884567282865081e+00,-1.899409259283551643e+00,9.479623447999144248e-02,-1.121556247336875867e+00,-1.760989393365797628e+00,1.773819367306432304e-01,-1.958317720905401182e-01,1.349862208361168603e-01,-1.450112157788013389e+00,-1.357031782377540741e-02,-1.241624569528410049e+00,-1.484921610939185177e+00,1.376233665493970526e-01,-1.556604996631108184e+00,1.000000000000000000e+00 +-3.537691289734849059e-02,4.560153415536132016e-02,-1.594171868075497489e+00,3.781513593400184087e-02,-6.310239035113980599e-02,1.094511092510719319e-02,-1.370207269419601692e+00,1.199799911955920506e-02,-1.145156303849539092e-01,-1.601907832583182367e+00,-1.623516799310357195e+00,3.320668925349491429e-01,-1.861623716837563558e+00,-1.508498673571756210e-01,-1.000000000000000000e+00 +-1.393561281424530174e-01,-1.374758695615320159e+00,-7.759579169863080328e-02,-1.376195546802910563e+00,-1.938362542912492881e+00,2.884745655059433103e-02,-2.006920996823445602e+00,-1.004405064435997530e-01,-1.516342257132262672e+00,-1.596307634773844519e+00,-1.299829520439901742e+00,-1.381582888541074139e+00,-1.757494128895809860e-01,-1.272303335421770765e+00,1.000000000000000000e+00 +-1.960094070973704139e-01,-1.697496330090407568e+00,-5.048449415743674895e-02,-7.752022277990533450e-02,-1.662512304274329278e+00,1.033730136420900059e-01,-1.325909631133677991e+00,-1.454292015846018638e+00,-1.190555544626873269e-01,-8.137424270029648687e-02,-1.756864415556221193e+00,-1.241075488481948152e+00,-1.762882077075956788e+00,-2.177474284367885149e-01,-1.000000000000000000e+00 +-1.716506103836173969e+00,-1.693682981881873273e+00,1.236654366300238284e-01,-1.574135526811256902e+00,-1.664471526834966575e+00,-1.570844244304912207e+00,-1.774862866839263642e+00,-1.427638352974658076e-01,-1.373032160890863329e+00,-1.546979483717454640e+00,-1.022122703105811548e+00,-1.601236489560692533e+00,1.529056596888132558e-01,-1.520223067771249159e+00,1.000000000000000000e+00 +1.240211700589305688e-01,-1.673066155807911848e+00,-1.707600454721348804e+00,4.689498168707974951e-02,-1.699469709394447303e+00,2.441835890795615860e-01,-1.358180419249774618e+00,-1.729888665634490730e+00,-5.395068874283309723e-02,-1.573572313118200672e+00,-1.697368928119671549e+00,-1.296355045903686998e+00,-1.784341285676739997e+00,-1.336320934654017800e-01,-1.000000000000000000e+00 +-2.732278629720036323e-01,-1.400079234667832129e+00,1.347668265396879672e-01,-1.391620773220448415e+00,-1.758071744450004470e+00,-1.606464752742112978e+00,-3.402099865624137465e-01,1.174714134753892802e-01,-1.401180205989532190e+00,-1.721918597261670181e+00,-1.287308539237927096e+00,-1.591594651268959160e+00,-1.593165458194905293e+00,-1.557546955013530354e+00,1.000000000000000000e+00 +-1.598971646227494103e+00,1.236046246409897020e-01,3.431877784083394584e-02,-6.969119693131110849e-02,-8.563580320125260825e-02,-1.603697888322635379e+00,-1.329024396720724255e+00,1.682855646235556224e-01,-2.028225234038001645e-01,6.861652215427307966e-02,-1.602857773622162751e+00,3.625317017837687006e-01,-1.797304123293491429e+00,-5.321588608481897520e-02,-1.000000000000000000e+00 +-1.639644981974852200e+00,-1.854171895099718581e+00,-2.051973173553672813e-02,-1.366762673081192592e+00,-1.770892170133351984e+00,-4.244494930413263492e-03,-1.908786714563566189e-01,4.024445837550703065e-01,-1.370617000966698251e+00,-1.721377477636856446e+00,-1.252054711962235167e+00,-1.454787972043852795e+00,-1.453855134864529886e+00,-1.612771266479338106e+00,1.000000000000000000e+00 +-1.860920327172206346e+00,-3.041931909818444690e-02,-1.688612074945298192e+00,7.305155118052963914e-03,6.657171394361634242e-02,-1.711844099602422897e+00,-1.393033245878821713e+00,-8.345334352642244657e-02,5.571952925660876577e-02,-1.518301027691250749e+00,-1.576734468942531997e+00,2.081936884977613755e-01,-1.813402519878215990e+00,-1.063016573519409841e-01,-1.000000000000000000e+00 +-3.165671461358449679e-01,-1.599647375778868286e+00,1.133291167418244011e-01,-1.413005648690241367e+00,-1.761543553015034513e+00,-4.481829010622573328e-02,-1.810204724753768701e+00,-2.899966671567328347e-01,-1.566337292939382397e+00,-2.779789300881632674e-01,-1.298274720101524116e+00,-1.490768568518090698e+00,-1.663696415234289461e+00,-1.562536267185302030e+00,1.000000000000000000e+00 +-1.489405518472745715e+00,-1.564369280865593348e+00,-1.253944555836074802e-02,2.348296659373619311e-02,-1.559396690984679479e+00,-1.477378163711451586e+00,-1.423427973423906590e+00,-1.385349421852070328e+00,-1.112533298319890868e-01,8.818716506551810275e-02,-1.501800184321577802e+00,-1.270020039620027852e+00,-1.645927092564823946e+00,-1.069863646429739246e-01,-1.000000000000000000e+00 +-1.744035853108975909e+00,-1.852529322203081863e+00,-4.882570838350687448e-02,-1.300941334332897270e+00,-1.853250573941688906e+00,-1.660621744728149718e+00,-1.767231625151308050e+00,-1.626395347022064342e-01,-1.314747526695378310e+00,-5.551483382275135270e-02,-1.308293869447473945e+00,-1.485197846757616569e+00,-1.535382907086665805e+00,-1.519174727187065921e+00,1.000000000000000000e+00 +-1.722786422183899990e+00,-1.501959903195960289e+00,-1.365952932099750550e+00,-7.992587737987744134e-02,-1.527679953029977167e+00,-1.344128265453815585e+00,-1.358802884399927136e+00,-1.409152429298882403e+00,-3.089803980877695033e-01,-1.561449503771455749e+00,-1.702209857888720146e+00,-1.354103718271319812e+00,-1.798914482103099344e+00,-3.756717063139381474e-01,-1.000000000000000000e+00 diff --git a/qka/aux_files/subgraphs.png b/qka/aux_files/subgraphs.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1b5c62555dfffaabba83e78ae1d42fa883f27a GIT binary patch literal 58814 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 Date: Thu, 29 Apr 2021 13:37:16 -0400 Subject: [PATCH 13/18] removed default initial layout to accomodate other problem instances --- qka/kernel_matrix.py | 2 +- qka/test.py | 47 +++++++++++++++++++++++++----------- runtime/qka_runtime_outer.py | 4 +-- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index 6d6d3213c..ef00d3971 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -20,7 +20,7 @@ def __init__(self, feature_map, backend, initial_layout): self._backend = backend if initial_layout is None: - self._initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] + raise ValueError('Provide an initial layout matching the problem graph.') else: self._initial_layout = initial_layout diff --git a/qka/test.py b/qka/test.py index da8a5efea..1be6747a8 100644 --- a/qka/test.py +++ b/qka/test.py @@ -12,23 +12,25 @@ # save data to csv: -# samples = 100 # per label +# samples = 64 # per label +# features=2*7 # state=42 # setting the state for the random number generator # # data_plus, data_minus = octave.generate_data(samples, state, nout=2) # -# dat = np.empty((samples*2, 20)) +# dat = np.empty((samples*2, features)) # dat[::2,:] = data_plus.T # dat[1::2,:] = data_minus.T # # lab = np.reshape(np.asarray([1,-1]*samples), (samples*2,1)) # full = np.concatenate((dat, lab), axis=1) # -# np.savetxt("/Users/jen/Q/code/quantum_kernel_data/dataset.csv", full, delimiter=",") - +# np.savetxt("/Users/jen/Q/code/quantum_kernel_data/dataset_graph7.csv", full, delimiter=",") +# print('done') +# load data from csv: import pandas as pd -df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None) +df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset_graph7.csv',sep = ',', header = None) dat = df.values num_features = np.shape(dat)[1]-1 # feature dimension determined by dataset @@ -36,7 +38,9 @@ num_test = 10 C = 1 maxiters = 11 -entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] + +entangler_map=[[0,2],[3,4],[2,5],[1,4],[2,3],[4,6]] +initial_layout=[10,11,12,13,14,15,16] x_train = dat[:2*num_train, :-1] y_train = dat[:2*num_train, -1] @@ -45,14 +49,25 @@ y_test = dat[2*num_train:2*(num_train+num_test), -1] -# configure settings for the tony line: -# num_features=10 # number of features in the input data -# num_train=50 # number of training samples per class -# num_test=60 # number of test samples per class + + + +# configure settings for the problem graph: +# num_features=2*7 # number of features in the input data +# num_train=10 # number of training samples per class +# num_test=10 # number of test samples per class # C=1 # SVM soft-margin penalty -# maxiters=20 # number of SPSA iterations +# maxiters=11 # number of SPSA iterations +# +# entangler_map=[[0,2],[3,4],[2,5],[1,4],[2,3],[4,6]] +# initial_layout=[10,11,12,13,14,15,16] +# +# # entangler_map=[[0,1],[1,2],[1,3]] +# # initial_layout=[0,1,2,4] +# +# # entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] +# # initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # -# entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # # # Generate the data: # state=42 # setting the state for the random number generator @@ -64,9 +79,13 @@ # x_test = np.concatenate((data_plus.T[num_train:], data_minus.T[num_train:])) # y_test = np.concatenate((-1*np.ones(num_test), np.ones(num_test))) -# Specify the backend and the mapping from virtual to physical qubits + + + + + +# Specify the backend bk = Aer.get_backend('qasm_simulator') -initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # Define the feature map and its initial parameters: initial_kernel_parameters = [0.1] # np.pi/2 should yield 100% test accuracy diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index b5a6d1188..a94e6141f 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -113,7 +113,7 @@ def __init__(self, feature_map, backend, initial_layout): self._backend = backend if initial_layout is None: - self._initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] + raise ValueError('Provide an initial layout matching the problem graph.') else: self._initial_layout = initial_layout @@ -418,4 +418,4 @@ def main(backend, user_messenger, **kwargs): qka = QKA(feature_map=fm, backend=backend, initial_layout=initial_layout, user_messenger=user_messenger) qka_results = qka.align_kernel(**kwargs) - print(json.dumps(qka_results, cls=RuntimeEncoder)) + user_messenger.publish(qka_result, final=True) From 7dfeabeff32654efbbd4ba070a036f7d850c0151 Mon Sep 17 00:00:00 2001 From: jenglick Date: Thu, 29 Apr 2021 13:54:32 -0400 Subject: [PATCH 14/18] updated notebook background and problem definitions --- QKA_demo_outer.ipynb | 209 ++++++++++++++++++------------------------- 1 file changed, 86 insertions(+), 123 deletions(-) diff --git a/QKA_demo_outer.ipynb b/QKA_demo_outer.ipynb index 4934e163f..ae9fa79ae 100644 --- a/QKA_demo_outer.ipynb +++ b/QKA_demo_outer.ipynb @@ -19,7 +19,20 @@ "QKA is an iterative quantum-classical algorithm, in which quantum hardware executes parametrized quantum circuits (which are used to compute the quantum kernel matrices according to the QKE), while a classical optimizer tunes the parameters of the circuits to maximize the alignment. Iterative algorithms of this type can be slow due to latency between the quantum and classical calculations. Qiskit Runtime is a new framework (?) that can speed up iterative algorithms like QKA by pushing the classical computations into the cloud near (?) the quantum hardware. TODO: add more details here on how runtime can help QKA run faster....\n", "\n", "#### Trying This Out on a Specific Learning Problem\n", - "TODO: discuss the specific problem we are solving... In this tutorial, we define a particular learning problem we call ....\n", + "TODO: discuss the specific problem we are solving... In this tutorial, we define a particular learning problem we call ... Define our state parametrization; $\\pi/2$ should yield 100% test accuracy.\n", + "\n", + "\n", + "
\n", + "The topology of Montreal:\n", + "
\n", + "\n", + "\n", + "\n", + "
\n", + "Example problem graphs of 4, 7, and 10 qubits:\n", + "
\n", + "\n", + "
\n", "\n", "\n", "\n", @@ -59,21 +72,12 @@ }, { "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, + "metadata": {}, "source": [ "# Invoke Quantum Kernel Alignment program\n", "\n", - "Before running the Runtime Program for QKA, we'll need to prepare the dataset and configure the settings for the algorithm." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "Before running the Runtime Program for QKA, we'll need to prepare the dataset and configure the settings for the algorithm.\n", + "\n", "## 1. Prepare the dataset\n", "\n", "First, we load the dataset from the `csv` file and then extract the training the testing samples." @@ -81,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -90,9 +94,9 @@ "\n", "# load the dataset\n", "\n", - "df = pd.read_csv('/Users/jen/Q/code/quantum_kernel_data/dataset.csv',sep = ',', header = None)\n", + "df = pd.read_csv('qka/aux_files/dataset_graph7.csv',sep=',', header=None) # alterative problem dataset_graph10.csv\n", "data = df.values\n", - "num_features = np.shape(dat)[1]-1 # feature dimension (twice the qubit number) is determined by dataset\n", + "num_features = np.shape(data)[1]-1 # feature dimension is twice the qubit number\n", "\n", "# specify the training and testing sets\n", "\n", @@ -115,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "metadata": { "slideshow": { "slide_type": "fragment" @@ -127,14 +131,19 @@ "from qka.featuremaps import FeatureMapACME\n", "\n", "# Set the parameters:\n", - "C = 1 # SVM soft-margin penalty\n", - "maxiters = 1 # number of SPSA iterations\n", + "C = 1 # SVM soft-margin penalty\n", + "maxiters = 1 # number of SPSA iterations\n", + "initial_point = [0.1] # initial parameters for the feature map\n", "\n", - "entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # entanglers in the feature map\n", - "initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # mapping virtual qubits to physical qubits on the chip\n", + "# Define the entangler map to match the problem graph:\n", + "entangler_map=[[0,2],[3,4],[2,5],[1,4],[2,3],[4,6]] # see figure above for the 7-qubit graph\n", + "# entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # see figure above for the 10-qubit graph\n", "\n", - "# Define the feature map and its initial parameters:\n", - "initial_point = [0.1] # np.pi/2 should yield 100% test accuracy\n", + "# Set the mapping from virtual to physical qubits to match the problem graph:\n", + "initial_layout = [10, 11, 12, 13, 14, 15, 16] # see figure above for the 7-qubit graph\n", + "# initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # see figure above for the 10-qubit graph\n", + "\n", + "# Define the feature map:\n", "fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map)" ] }, @@ -163,57 +172,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "scrolled": false, "slideshow": { "slide_type": "slide" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "c24v0dggh40gub5h9bo0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "runtime_job._start_websocket_client:WARNING:2021-04-28 19:31:18,217: An error occurred while streaming results from the server for job c24v0dggh40gub5h9bo0:\n", - "Traceback (most recent call last):\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 66, in _connect\n", - " websocket = await connect(url, extra_headers=self._header)\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/websockets/client.py\", line 547, in __await_impl__\n", - " extra_headers=protocol.extra_headers,\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/websockets/client.py\", line 296, in handshake\n", - " raise InvalidStatusCode(status_code)\n", - "websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 404\n", - "\n", - "The above exception was the direct cause of the following exception:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/runtime/runtime_job.py\", line 238, in _start_websocket_client\n", - " self._streaming_loop.run_until_complete(self._streaming_task)\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/nest_asyncio.py\", line 70, in run_until_complete\n", - " return f.result()\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/asyncio/futures.py\", line 181, in result\n", - " raise self._exception\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/asyncio/tasks.py\", line 249, in __step\n", - " result = coro.send(None)\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 136, in job_results\n", - " raise ex\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 111, in job_results\n", - " self._ws = await self._connect(url)\n", - " File \"/Users/jen/opt/anaconda3/envs/qiskit0.25.0python3.7/lib/python3.7/site-packages/qiskit/providers/ibmq/api/clients/runtime_ws.py\", line 76, in _connect\n", - " raise exception_to_raise from ex\n", - "qiskit.providers.ibmq.api.exceptions.WebsocketRetryableError: 'Failed to connect to the server.'\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Call QKA runtime program.\n", "runtime_inputs = {\n", @@ -231,6 +197,8 @@ " inputs=runtime_inputs,\n", " callback=interim_result_callback,\n", " )\n", + "\n", + "result = job.result()\n", "print(job.job_id())" ] }, @@ -238,68 +206,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 4. Retrieve and display the results of the Runtime Program\n", + "## 4. Retrieve the results of the Runtime Program\n", "\n", "The output of QKA is the set of aligned kernel parameters and the aligned kernel matrix." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "final result:\n", - "{'aligned_kernel_parameters': array([0.09268847]), 'aligned_kernel_matrix': array([[1. , 0.01049805, 0.05932617, 0.00524902, 0.04125977,\n", - " 0.11291504, 0.03869629, 0.03442383, 0.01159668, 0.0637207 ],\n", - " [0.01049805, 1. , 0.00744629, 0.07568359, 0.00524902,\n", - " 0.01696777, 0.00793457, 0.00524902, 0.00256348, 0.00720215],\n", - " [0.05932617, 0.00744629, 1. , 0.01538086, 0.01489258,\n", - " 0.04541016, 0.08691406, 0.0123291 , 0.04333496, 0.02124023],\n", - " [0.00524902, 0.07568359, 0.01538086, 1. , 0.00134277,\n", - " 0.00488281, 0.01330566, 0.00195312, 0.00292969, 0.00256348],\n", - " [0.04125977, 0.00524902, 0.01489258, 0.00134277, 1. ,\n", - " 0.03918457, 0.01269531, 0.01428223, 0.00427246, 0.01928711],\n", - " [0.11291504, 0.01696777, 0.04541016, 0.00488281, 0.03918457,\n", - " 1. , 0.05310059, 0.04541016, 0.01953125, 0.06933594],\n", - " [0.03869629, 0.00793457, 0.08691406, 0.01330566, 0.01269531,\n", - " 0.05310059, 1. , 0.02416992, 0.04016113, 0.03723145],\n", - " [0.03442383, 0.00524902, 0.0123291 , 0.00195312, 0.01428223,\n", - " 0.04541016, 0.02416992, 1. , 0.04907227, 0.0255127 ],\n", - " [0.01159668, 0.00256348, 0.04333496, 0.00292969, 0.00427246,\n", - " 0.01953125, 0.04016113, 0.04907227, 1. , 0.00976562],\n", - " [0.0637207 , 0.00720215, 0.02124023, 0.00256348, 0.01928711,\n", - " 0.06933594, 0.03723145, 0.0255127 , 0.00976562, 1. ]])}\n", - "aligned_kernel_parameters: [0.09268847]\n", - "aligned_kernel_matrix: [[1. 0.01049805 0.05932617 0.00524902 0.04125977 0.11291504\n", - " 0.03869629 0.03442383 0.01159668 0.0637207 ]\n", - " [0.01049805 1. 0.00744629 0.07568359 0.00524902 0.01696777\n", - " 0.00793457 0.00524902 0.00256348 0.00720215]\n", - " [0.05932617 0.00744629 1. 0.01538086 0.01489258 0.04541016\n", - " 0.08691406 0.0123291 0.04333496 0.02124023]\n", - " [0.00524902 0.07568359 0.01538086 1. 0.00134277 0.00488281\n", - " 0.01330566 0.00195312 0.00292969 0.00256348]\n", - " [0.04125977 0.00524902 0.01489258 0.00134277 1. 0.03918457\n", - " 0.01269531 0.01428223 0.00427246 0.01928711]\n", - " [0.11291504 0.01696777 0.04541016 0.00488281 0.03918457 1.\n", - " 0.05310059 0.04541016 0.01953125 0.06933594]\n", - " [0.03869629 0.00793457 0.08691406 0.01330566 0.01269531 0.05310059\n", - " 1. 0.02416992 0.04016113 0.03723145]\n", - " [0.03442383 0.00524902 0.0123291 0.00195312 0.01428223 0.04541016\n", - " 0.02416992 1. 0.04907227 0.0255127 ]\n", - " [0.01159668 0.00256348 0.04333496 0.00292969 0.00427246 0.01953125\n", - " 0.04016113 0.04907227 1. 0.00976562]\n", - " [0.0637207 0.00720215 0.02124023 0.00256348 0.01928711 0.06933594\n", - " 0.03723145 0.0255127 0.00976562 1. ]]\n" - ] - } - ], + "outputs": [], "source": [ - "result = job.result()\n", - "\n", "print(f\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\")\n", "print(f\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\")" ] @@ -347,6 +264,53 @@ "print(f\"accuracy test: {accuracy_test}\")" ] }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Version Information

Qiskit SoftwareVersion
Qiskit0.25.0
Terra0.17.0
Aer0.8.0
Ignis0.6.0
Aqua0.9.0
IBM Q Provider0.13.0
System information
Python3.7.10 (default, Feb 26 2021, 10:16:00) \n", + "[Clang 10.0.0 ]
OSDarwin
CPUs4
Memory (Gb)16.0
Thu Apr 29 13:52:17 2021 EDT
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table\n", + "%qiskit_copyright" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A version of this code for quantum kernel alignment will be made available through a Qiskit application module in the future.\n", + "\n", + "\n", + "Do we need to add anything about copyrights, licensing, Qiskit versions, etc?.\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -356,7 +320,6 @@ } ], "metadata": { - "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python [conda env:qiskit0.25.0python3.7] *", "language": "python", From 4ff7fe7c84ea2ed067561ec511aca93a1da65df7 Mon Sep 17 00:00:00 2001 From: jenglick Date: Mon, 3 May 2021 14:05:14 -0400 Subject: [PATCH 15/18] removed circuit runner as option --- qka/kernel_matrix.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/qka/kernel_matrix.py b/qka/kernel_matrix.py index ef00d3971..4001d2d49 100644 --- a/qka/kernel_matrix.py +++ b/qka/kernel_matrix.py @@ -105,17 +105,21 @@ def construct_kernel_matrix(self, x1_vec, x2_vec, parameters=None): def _run_circuits(self, circuits): """Execute the input circuits.""" - try: - provider = self._backend.provider() - runtime_params = {'circuits': circuits, 'shots': 8192, 'initial_layout': self._initial_layout} - options = {'backend_name': self._backend.name()} - job = provider.runtime.run(program_id="circuit-runner", - options=options, - inputs=runtime_params, - ) - return job.result() - - except Exception: - # Fall back to run without runtime. - transpiled = transpile(circuits, backend=self._backend, initial_layout=self._initial_layout) - return self._backend.run(transpiled, shots=8192).result() + + transpiled = transpile(circuits, backend=self._backend, initial_layout=self._initial_layout) + return self._backend.run(transpiled, shots=8192).result() + + # try: + # provider = self._backend.provider() + # runtime_params = {'circuits': circuits, 'shots': 8192, 'initial_layout': self._initial_layout} + # options = {'backend_name': self._backend.name()} + # job = provider.runtime.run(program_id="circuit-runner", + # options=options, + # inputs=runtime_params + # ) + # return job.result() + # + # except Exception: + # # Fall back to run without runtime. + # transpiled = transpile(circuits, backend=self._backend, initial_layout=self._initial_layout) + # return self._backend.run(transpiled, shots=8192).result() From 35907f062efed7eb393fe0d0609e34ea8837e414 Mon Sep 17 00:00:00 2001 From: jenglick Date: Mon, 3 May 2021 14:07:00 -0400 Subject: [PATCH 16/18] update demo notebook with background --- QKA_demo_outer.ipynb | 229 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 187 insertions(+), 42 deletions(-) diff --git a/QKA_demo_outer.ipynb b/QKA_demo_outer.ipynb index ae9fa79ae..7c8e05735 100644 --- a/QKA_demo_outer.ipynb +++ b/QKA_demo_outer.ipynb @@ -29,9 +29,9 @@ "\n", "\n", "
\n", - "Example problem graphs of 4, 7, and 10 qubits:\n", + "Example problem graphs of 7 and 10 qubits:\n", "
\n", - "\n", + "\n", "
\n", "\n", "\n", @@ -48,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Load your IBMQ account and get the quantum backend\n", + "# Load your IBM Quantum account and get the quantum backend\n", "\n", "We'll be using the 27-qubit backend `ibmq_montreal` for this tutorial." ] @@ -70,6 +70,33 @@ "backend = provider.get_backend('ibmq_montreal')" ] }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "quantum-kernel-alignment\n" + ] + } + ], + "source": [ + "# TODO: remove this once notebook is finalized!\n", + "\n", + "# Delete a program.\n", + "provider.runtime.delete_program(program_id='quantum-kernel-alignment')\n", + "\n", + "# Upload a new runtime program.\n", + "program_id = provider.runtime.upload_program(\n", + " name='quantum-kernel-alignment', \n", + " data='runtime/qka_runtime_outer.py', \n", + " max_execution_time=86400)\n", + "print(program_id)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -85,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -96,12 +123,11 @@ "\n", "df = pd.read_csv('qka/aux_files/dataset_graph7.csv',sep=',', header=None) # alterative problem dataset_graph10.csv\n", "data = df.values\n", - "num_features = np.shape(data)[1]-1 # feature dimension is twice the qubit number\n", "\n", "# specify the training and testing sets\n", "\n", - "num_train = 4 # number of training samples per class\n", - "num_test = 5 # number of test samples per class\n", + "num_train = 10 # number of training samples per class\n", + "num_test = 10 # number of test samples per class\n", "\n", "x_train = data[:2*num_train, :-1]\n", "y_train = data[:2*num_train, -1]\n", @@ -119,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "metadata": { "slideshow": { "slide_type": "fragment" @@ -130,21 +156,20 @@ "from qiskit import Aer\n", "from qka.featuremaps import FeatureMapACME\n", "\n", - "# Set the parameters:\n", + "# Define the feature map:\n", + "num_features = np.shape(data)[1]-1 # feature dimension is twice the qubit number\n", + "entangler_map=[[0,2],[3,4],[2,5],[1,4],[2,3],[4,6]] # Define the entangler map to match the problem graph: \n", + "# entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] \n", + "fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map)\n", + "\n", + "# Set the remaining algorithm parameters:\n", "C = 1 # SVM soft-margin penalty\n", - "maxiters = 1 # number of SPSA iterations\n", + "maxiters = 2 # number of SPSA iterations\n", "initial_point = [0.1] # initial parameters for the feature map\n", "\n", - "# Define the entangler map to match the problem graph:\n", - "entangler_map=[[0,2],[3,4],[2,5],[1,4],[2,3],[4,6]] # see figure above for the 7-qubit graph\n", - "# entangler_map=[[0,1],[2,3],[4,5],[6,7],[8,9],[1,2],[3,4],[5,6],[7,8]] # see figure above for the 10-qubit graph\n", - "\n", "# Set the mapping from virtual to physical qubits to match the problem graph:\n", - "initial_layout = [10, 11, 12, 13, 14, 15, 16] # see figure above for the 7-qubit graph\n", - "# initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # see figure above for the 10-qubit graph\n", - "\n", - "# Define the feature map:\n", - "fm = FeatureMapACME(feature_dimension=num_features, entangler_map=entangler_map)" + "initial_layout = [10, 11, 12, 13, 14, 15, 16] # see figure above for the 7-qubit graph\n", + "# initial_layout = [9, 8, 11, 14, 16, 19, 22, 25, 24, 23] # see figure above for the 10-qubit graph\n" ] }, { @@ -158,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 5, "metadata": { "slideshow": { "slide_type": "fragment" @@ -172,14 +197,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "scrolled": false, "slideshow": { "slide_type": "slide" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "c2834njfos5m03h432d0\n", + "interim result: {'cost': 11.049993446092692, 'kernel_parameters': array([0.25000106])}\n", + "\n", + "interim result: {'cost': 10.425389914581778, 'kernel_parameters': array([0.40758418])}\n", + "\n" + ] + } + ], "source": [ "# Call QKA runtime program.\n", "runtime_inputs = {\n", @@ -198,8 +235,8 @@ " callback=interim_result_callback,\n", " )\n", "\n", - "result = job.result()\n", - "print(job.job_id())" + "print(job.job_id())\n", + "result = job.result()" ] }, { @@ -213,9 +250,119 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aligned_kernel_parameters: [0.40758418]\n", + "aligned_kernel_matrix: [[1.00000000e+00 4.65454102e-01 1.20727539e-01 1.04003906e-01\n", + " 1.26586914e-01 2.25097656e-01 2.25830078e-02 6.04248047e-02\n", + " 1.60644531e-01 1.21337891e-01 2.18505859e-02 1.72119141e-02\n", + " 2.57568359e-02 2.44140625e-02 6.59179688e-03 4.15039062e-03\n", + " 1.39648438e-01 1.42822266e-01 1.79443359e-02 2.03857422e-02]\n", + " [4.65454102e-01 1.00000000e+00 6.88476562e-02 1.47460938e-01\n", + " 7.00683594e-02 2.48779297e-01 2.05078125e-02 3.84521484e-02\n", + " 8.72802734e-02 1.24511719e-01 1.57470703e-02 2.60009766e-02\n", + " 2.00195312e-02 1.51367188e-02 4.15039062e-03 8.05664062e-03\n", + " 1.34521484e-01 1.26708984e-01 9.15527344e-03 3.79638672e-02]\n", + " [1.20727539e-01 6.88476562e-02 1.00000000e+00 1.06201172e-02\n", + " 4.32128906e-02 2.85644531e-02 1.41601562e-01 1.95312500e-03\n", + " 2.41699219e-02 5.80078125e-01 1.26831055e-01 8.87451172e-02\n", + " 5.24902344e-03 1.39038086e-01 2.44140625e-02 3.75976562e-02\n", + " 2.53906250e-02 2.63671875e-02 1.20483398e-01 2.56347656e-03]\n", + " [1.04003906e-01 1.47460938e-01 1.06201172e-02 1.00000000e+00\n", + " 1.52587891e-02 3.91845703e-02 2.44140625e-03 2.14965820e-01\n", + " 5.17578125e-02 2.57568359e-02 7.69042969e-03 1.17187500e-01\n", + " 6.34765625e-03 8.05664062e-03 1.58691406e-03 1.78222656e-02\n", + " 1.20849609e-02 2.24609375e-02 9.76562500e-04 1.04003906e-01]\n", + " [1.26586914e-01 7.00683594e-02 4.32128906e-02 1.52587891e-02\n", + " 1.00000000e+00 1.17187500e-02 1.01684570e-01 2.56347656e-03\n", + " 2.47802734e-02 2.72216797e-02 8.91113281e-03 3.90625000e-03\n", + " 9.71679688e-02 3.41796875e-03 2.46582031e-02 9.76562500e-04\n", + " 2.89306641e-02 3.08593750e-01 3.17382812e-03 4.58984375e-02]\n", + " [2.25097656e-01 2.48779297e-01 2.85644531e-02 3.91845703e-02\n", + " 1.17187500e-02 1.00000000e+00 2.92968750e-03 1.04492188e-01\n", + " 4.63867188e-02 4.83398438e-02 2.19726562e-03 2.68554688e-03\n", + " 2.68554688e-03 1.19262695e-01 3.66210938e-04 2.11181641e-02\n", + " 8.83789062e-02 2.47802734e-02 2.68554688e-03 7.08007812e-03]\n", + " [2.25830078e-02 2.05078125e-02 1.41601562e-01 2.44140625e-03\n", + " 1.01684570e-01 2.92968750e-03 1.00000000e+00 1.09863281e-03\n", + " 2.68554688e-03 2.01538086e-01 4.21142578e-02 2.55126953e-02\n", + " 1.09863281e-02 3.74755859e-02 8.81347656e-02 3.17382812e-03\n", + " 3.41796875e-03 6.35986328e-02 2.49023438e-02 7.93457031e-03]\n", + " [6.04248047e-02 3.84521484e-02 1.95312500e-03 2.14965820e-01\n", + " 2.56347656e-03 1.04492188e-01 1.09863281e-03 1.00000000e+00\n", + " 4.27246094e-03 2.19726562e-03 6.10351562e-04 4.17480469e-02\n", + " 7.32421875e-04 2.28271484e-02 4.88281250e-04 1.10961914e-01\n", + " 9.15527344e-03 6.83593750e-03 3.66210938e-04 2.06298828e-02]\n", + " [1.60644531e-01 8.72802734e-02 2.41699219e-02 5.17578125e-02\n", + " 2.47802734e-02 4.63867188e-02 2.68554688e-03 4.27246094e-03\n", + " 1.00000000e+00 1.61132812e-02 1.14013672e-01 3.78417969e-03\n", + " 1.22436523e-01 1.83105469e-03 2.70996094e-02 4.88281250e-04\n", + " 2.22167969e-02 3.35693359e-02 3.66210938e-03 6.46972656e-03]\n", + " [1.21337891e-01 1.24511719e-01 5.80078125e-01 2.57568359e-02\n", + " 2.72216797e-02 4.83398438e-02 2.01538086e-01 2.19726562e-03\n", + " 1.61132812e-02 1.00000000e+00 1.21093750e-01 1.33178711e-01\n", + " 9.39941406e-03 1.57958984e-01 2.73437500e-02 3.61328125e-02\n", + " 1.81884766e-02 2.25830078e-02 5.66406250e-02 3.66210938e-03]\n", + " [2.18505859e-02 1.57470703e-02 1.26831055e-01 7.69042969e-03\n", + " 8.91113281e-03 2.19726562e-03 4.21142578e-02 6.10351562e-04\n", + " 1.14013672e-01 1.21093750e-01 1.00000000e+00 2.01416016e-02\n", + " 2.67333984e-02 2.89306641e-02 9.87548828e-02 8.91113281e-03\n", + " 3.29589844e-03 7.69042969e-03 1.50146484e-02 8.54492188e-04]\n", + " [1.72119141e-02 2.60009766e-02 8.87451172e-02 1.17187500e-01\n", + " 3.90625000e-03 2.68554688e-03 2.55126953e-02 4.17480469e-02\n", + " 3.78417969e-03 1.33178711e-01 2.01416016e-02 1.00000000e+00\n", + " 8.54492188e-04 5.33447266e-02 3.29589844e-03 2.88208008e-01\n", + " 3.29589844e-03 9.39941406e-03 1.03759766e-02 2.44140625e-02]\n", + " [2.57568359e-02 2.00195312e-02 5.24902344e-03 6.34765625e-03\n", + " 9.71679688e-02 2.68554688e-03 1.09863281e-02 7.32421875e-04\n", + " 1.22436523e-01 9.39941406e-03 2.67333984e-02 8.54492188e-04\n", + " 1.00000000e+00 2.31933594e-03 1.08886719e-01 4.88281250e-04\n", + " 2.44140625e-03 5.21240234e-02 9.76562500e-04 1.18408203e-02]\n", + " [2.44140625e-02 1.51367188e-02 1.39038086e-01 8.05664062e-03\n", + " 3.41796875e-03 1.19262695e-01 3.74755859e-02 2.28271484e-02\n", + " 1.83105469e-03 1.57958984e-01 2.89306641e-02 5.33447266e-02\n", + " 2.31933594e-03 1.00000000e+00 1.01318359e-02 1.24755859e-01\n", + " 1.36718750e-02 4.15039062e-03 3.74755859e-02 6.10351562e-04]\n", + " [6.59179688e-03 4.15039062e-03 2.44140625e-02 1.58691406e-03\n", + " 2.46582031e-02 3.66210938e-04 8.81347656e-02 4.88281250e-04\n", + " 2.70996094e-02 2.73437500e-02 9.87548828e-02 3.29589844e-03\n", + " 1.08886719e-01 1.01318359e-02 1.00000000e+00 2.92968750e-03\n", + " 7.32421875e-04 1.81884766e-02 7.20214844e-03 2.19726562e-03]\n", + " [4.15039062e-03 8.05664062e-03 3.75976562e-02 1.78222656e-02\n", + " 9.76562500e-04 2.11181641e-02 3.17382812e-03 1.10961914e-01\n", + " 4.88281250e-04 3.61328125e-02 8.91113281e-03 2.88208008e-01\n", + " 4.88281250e-04 1.24755859e-01 2.92968750e-03 1.00000000e+00\n", + " 1.34277344e-03 8.54492188e-04 3.78417969e-03 5.37109375e-03]\n", + " [1.39648438e-01 1.34521484e-01 2.53906250e-02 1.20849609e-02\n", + " 2.89306641e-02 8.83789062e-02 3.41796875e-03 9.15527344e-03\n", + " 2.22167969e-02 1.81884766e-02 3.29589844e-03 3.29589844e-03\n", + " 2.44140625e-03 1.36718750e-02 7.32421875e-04 1.34277344e-03\n", + " 1.00000000e+00 4.29687500e-02 7.27539062e-02 4.39453125e-03]\n", + " [1.42822266e-01 1.26708984e-01 2.63671875e-02 2.24609375e-02\n", + " 3.08593750e-01 2.47802734e-02 6.35986328e-02 6.83593750e-03\n", + " 3.35693359e-02 2.25830078e-02 7.69042969e-03 9.39941406e-03\n", + " 5.21240234e-02 4.15039062e-03 1.81884766e-02 8.54492188e-04\n", + " 4.29687500e-02 1.00000000e+00 7.44628906e-03 1.54174805e-01]\n", + " [1.79443359e-02 9.15527344e-03 1.20483398e-01 9.76562500e-04\n", + " 3.17382812e-03 2.68554688e-03 2.49023438e-02 3.66210938e-04\n", + " 3.66210938e-03 5.66406250e-02 1.50146484e-02 1.03759766e-02\n", + " 9.76562500e-04 3.74755859e-02 7.20214844e-03 3.78417969e-03\n", + " 7.27539062e-02 7.44628906e-03 1.00000000e+00 1.22070312e-04]\n", + " [2.03857422e-02 3.79638672e-02 2.56347656e-03 1.04003906e-01\n", + " 4.58984375e-02 7.08007812e-03 7.93457031e-03 2.06298828e-02\n", + " 6.46972656e-03 3.66210938e-03 8.54492188e-04 2.44140625e-02\n", + " 1.18408203e-02 6.10351562e-04 2.19726562e-03 5.37109375e-03\n", + " 4.39453125e-03 1.54174805e-01 1.22070312e-04 1.00000000e+00]]\n" + ] + } + ], "source": [ "print(f\"aligned_kernel_parameters: {result['aligned_kernel_parameters']}\")\n", "print(f\"aligned_kernel_matrix: {result['aligned_kernel_matrix']}\")" @@ -236,14 +383,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "scrolled": true, "slideshow": { "slide_type": "fragment" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "accuracy test: 0.7\n" + ] + } + ], "source": [ "from qka.kernel_matrix import KernelMatrix\n", "from sklearn.svm import SVC\n", @@ -257,7 +412,7 @@ "\n", "# Test the SVM on new data:\n", "\n", - "km = KernelMatrix(feature_map=fm, backend=backend)\n", + "km = KernelMatrix(feature_map=fm, backend=backend, initial_layout=initial_layout)\n", "kernel_test = km.construct_kernel_matrix(x1_vec=x_test, x2_vec=x_train, parameters=result['aligned_kernel_parameters'])\n", "labels_test = model.predict(X=kernel_test)\n", "accuracy_test = metrics.balanced_accuracy_score(y_true=y_test, y_pred=labels_test)\n", @@ -273,7 +428,7 @@ "data": { "text/html": [ "

Version Information

Qiskit SoftwareVersion
Qiskit0.25.0
Terra0.17.0
Aer0.8.0
Ignis0.6.0
Aqua0.9.0
IBM Q Provider0.13.0
System information
Python3.7.10 (default, Feb 26 2021, 10:16:00) \n", - "[Clang 10.0.0 ]
OSDarwin
CPUs4
Memory (Gb)16.0
Thu Apr 29 13:52:17 2021 EDT
" + "[Clang 10.0.0 ]OSDarwinCPUs4Memory (Gb)16.0Mon May 03 13:47:57 2021 EDT" ], "text/plain": [ "" @@ -305,18 +460,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "A version of this code for quantum kernel alignment will be made available through a Qiskit application module in the future.\n", - "\n", - "\n", - "Do we need to add anything about copyrights, licensing, Qiskit versions, etc?.\n" + "A version of this code for quantum kernel alignment will be made available through a Qiskit application module in the future." ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From a617006bb904c3b2a292a9454243beb29f22a5cc Mon Sep 17 00:00:00 2001 From: jenglick Date: Mon, 3 May 2021 14:07:22 -0400 Subject: [PATCH 17/18] modified subgraph figure --- qka/aux_files/subgraphs.png | Bin 58814 -> 61053 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/qka/aux_files/subgraphs.png b/qka/aux_files/subgraphs.png index 1a1b5c62555dfffaabba83e78ae1d42fa883f27a..7ccd9e3e2272f7785d998ae0adf23d6925d7e8eb 100644 GIT binary patch literal 61053 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%0D8Z9RZfWi6 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 literal 58814 zcmZU*1z1#Hv`$a#Bd;gXG(Yf7~tf6f9L#kXR9)F_2J^Um&5~UxIjvA(Q>jXIW%sq(^_xqaY!L z*dU?)yG9jpy#Gr?yzcLLI6lfo{&zLvTsF#oSEGWnAN}_k`Rx9-oGxSr!~xS$9^j0G zL_%=?Lbl3+BFL6NQg|cz)*X3o9@G2n`23$cXDjeij5OgTl&|$+pipb=yqYqDas4s< zqYlv5fao`gGnXfoVr?Hd!lsd)5?z?tYFF2&+17A=)hDXqWX>+s9z){X3;06M<9xSB zh+NhGrGdwJ@?vh1ExN%O23WA-c80kPet$-Wfouuf zmn5S$pm;`8MSVs|$qDNoI;1#%&(QO4!8gQ!)Jw9FgMMHf{oF!7*h zF)42mz6$pVS1*)DNtTgi*D-w|+fr?mK^it5l$ts*kk0SmW9dXk^nWNued1`)o)l2p zlPl+jdwL+M8mPO9dZ^y?l;I^<8}3dG9pi0zKbVfcKNxi)jHS%MLBTFr90TuXf%Y9Z zTBLqva33#Qjj=nIr*_IEZ&DltuymAd<_-)DEr?kSTG>UdJpI4y#`q)It{YGq8ykCo zmNWbYQ!!rQi5XWx07EuWf;UyT3~gP1X%S%C<#sx8F&+%o${W;$3^hPEe7N=Q@If4R z>;Yw0mTz^rhD;mj6W$?HRNL=OSLq6nb8>$l`JV15!2cq`p2yi~hc-suNJS;$;1ko4 zBH#a>b->3bhbq*zPBz=?+~?ysnDqObuASAW)$yq{bT4kG8e%3|YNoj9)pc|xcqU(l zTGVfiLnj__$A7fyX(kQpI`|mgMJ#W?=juv5G|lGd^XVu+*7p_?ZG#t={w*$c~5 z5w%3pbIymlB0-y#*nsnRmgB-@e+Cpr%<%zSSDhF6za_pD?7#U4pv9<4p7(RPDKERA z33<#WGrxhecYAKo8k->wOt2OI|CWpY z5UL0TB-PN^x9FK;=Jhj=Y3)F2H{Ti$XVMaKeFu<6u51wg_H3Qr;B^@paw#4I-+(@* zY9e9!9(7zLg;{sx{z#Ql(kJfC=>+IT<7Ps}EZ%nIsh`GZx@cALj)yQ0t=<2Y0rC}^ z2q`3%Y<`Y1D5z?U(XI3bm9+0&3h6gP-j@6gaZ;sMOPDIG9HNrJVS{n5lq(IzsT<-J zoYlLQ{i&ywo4p&OC@L?6U191;oa^A;HTNPZ{DKl1|-#OD>99> zPrrurZC!kic>aoZb5=T78HWW}g|j%fsu<_0E03bD^nPT^o%rJqgVd8636D=lIf5P@ zi!mlq(NrxnJEj*)$B>;2Gh_r7M%=*@MMzcUK= zx}f~vMpEG9 zJ3KTkm~!O<|0z7l1xz?gZvnNo8gA%+I8#b#(Nt}L=Us~~(yR;qX0w2W9Ic%I(-H8;&T-XlQyH{-g1VU297$g%x)Kr+UBWqRj&YFmXO6k@dYNm1-QuUk8OR5Lj;m3&$dyoQriA zTwHkuy4O#=!f>qoMyA87c=&zFVoC6_=rkg$)~Y_{RbTk?GPpu6xD?4abw;+nZ;y{t z<)u&-7(8L7dR?rf+U9G<&@KR&0cQni@qF4MwmDC|%+K$guCj7~ya~(;c)%qeraNu) z>zdL%$%e1>0@jBF{ra|VXqlALUfbFY?^uGwv=kK|zgRvDgZ{n(2o8mHE2gz_bmFMR zy$d#I))TAi%iDa^JJ5G!_1ON9ydre&?KSKqG&GHTC>h6xCHwO+T&N-@i^r(K-$sm~ zB|tG>TYK9Bq3+pVHdMPLdylw+uD5pMjY(Boflf;6JeJFm)+bRX6E*{}M~e|XgiMh! zyRoxtwC;=H1@<(O7jx5`cDGGx6QwDG(eJPw$wTia5q*kMjt*W!`SiV?L6c}KF*+=M zQ)hC*m)}6QnuUX7o@?l(aXguSK!A4WtC^j_ThDxNCHoyJx2xaTc15M4 zv1FmbAUCDTbOz^BFwL+=Hi$$nOYDxL#6dOD>R5JnUn;}ptOK+{zB9$Up7%u-;AR#qM1umm1fvpuKUHC zn8FLIGBt)GHluQRDsnyF;B2#l7XgX#?ck=x*Dg^Qn3fSSp2M}i4*fVuCZ3?KzIVN-r%=k#z^;Q~r;&4ic6u~Ew|2eHzn}p09Ij{U zRs(O=EKOTQTEVBS5;v4#Dv3EFJdd;sp0N_<<>WRMb9I!G67;8ncVFGnQH$bL#88He z!*fy&SS@SK6p`{IgI}n|Pae+KS`laCls6qT8qdSw_6ZBFW+44ql|Oa~$_r7qbS*$d zOC23C`%}Y6-Qw$=60gl?L>$q(1IOMgM~w(m#(i(f#8|kx-u(3y+dl>TSQR|zKRj9P zbche@3Y+U)T=oXGJ6bP3!f*Ck?@a)V^hs}sl5z0+-0l9T%AHn_&in+$WD+@rmsCs$ zrB;S;r}4V(Eg<|2XQ$7O*&(3`t{Qn_Oj#n{ehBs6J zox*3YQmyUwau+4asm{!RBg%_gYc15OzH{ z!|hrq<%XpRNlEz8O#wu-8cQs=Y1o8eU5Zw3wY6u{BX)as8G58WJlNK{#>Y>8P8lJM z8n!gF-ZH0Lw=5i#iX^wb0ySS#K?lW8OsAoou_u9F6i)o`JvUG5LQb*+N{l* zpe@Nh|J8}dr3$C$0JG6_^Dw@NO$KVmwK{NdLG9Nnuke<2m2x3 zE_`ARaf-RQLow`1ELNbn3dX`tv0~oBov-wjjVd?VRC>0R9;tTW7&Vp)5~C#J-ptR- z#AhpTSS(mO?&UgW+~0^j2bB{n{Yfircbh)QxCR@T_Wt_z`DadardnzDLB{P3gWN*M ztpIT47tgf;n&N}6E3tt_j&C01?Ci%f?kKX@KMG3x{!IZ=RK% zEib&8mNT3S^>UO~-+3eY5X>R?IpPofYZLL;B<9KW?2#JkccyD>sd4ePXV2f;EPm7r z0!vr*sjM_iJH@a_W_&_ryzL?RkTRfp{Q-LL8?(C(n!W+hJQ~wK*ZXE?Qd6xC?)GZ&DV^*ZBjL!TbZ1S+6? zL?Y1}BMOf@Kd3Q71e9l<9keRyx0MG5Q}qsXjAU{ZMxez{p3A`PwrTh*mp!3iksDN& zH(Zn0D^kd7r$#!4hI0c!r9Dt&WQsNQoMCCWo8g*-Yq`aUrg)K+l8+HvkT7Z1OLGW^ z=3Ui%&wQ)ldJBsQ=LTgW*Ne;Pq_8@z31@kQ*~hni^qBg$dY;lE)V2QaV_al zD+SZxCWe(cOq(!dtv$g)``{kZ9342-*S{0SLO+lDh^%y6+6iZry(*L-es!I($gOV9 z(4IOFn!Ue6BN@qk5#AdrXzd~j^qGB%dYN+~HHuuy5>S@+ZciKGY(_^QE0Ss^Gj+DX zqHBSBsT1pyBX%6l0S$&2V7UivuY%kie9;vzG#bGcE`52f8$#h*zcZ2>vNKbb7Rt+C z(%2|;x=vzJ=$6Q#HCt=v++|`VkC!V*2+ zVm^nNyu`NSNV2YxK8sxm9ctaF?JP@nwqMg20l~VYO$w)~g3I-*_KD{OWSGlCQ+W0`hp|sDA|_zVY61||kKz%;w0zXG*{0wrDZV8d3i9~}aijJkiNsst zu}VyV^I1PX;6Tk}@c|UOq>6)H)ZN$dY?`$#TSD~Kt>tS>u7R;e5~t@jtblxAJhQ*m zK@EJQg&Wej6Ats$%{Xd-6{V9G82>!#BXDp~WzG{tA%djxzWcfCRCT!TemZa>cH`!; zB#B;x{0P1FByVq`rKvQZQpX^#U_Lm4Y<$ypvKW8CPkeNmF(b1%W!u;d6&y=^d=_w7 z!@HQn8b~Xfd$*I0?I=a`bO>y>{2u z(@SJO_C?MT<_R1=gTE_M2nds;I1Drq9c5`M10z#!Kfw04`K%%h<%N8udKnkg_cE6L8% zJohGD#IpZ+cZfctQy;{)^Uph3s6zDDgHPI;I{AY_=X0WuD_sbDu1>XdZ?88$EaikS z%8yLUqgiUin29Rel_?}L`Q9gu;OCwI9iHdEhpMHY;9j2Zdlh+$ZBx1d>QWSM^jY`+ z$V9{q8~t3?yl7XsHBe&0-c&b+vfVrm0n?H_1ivB-OAwhzLwO;BA3c3Ty4{p+hUiN` z?q}O|{PTJCcQ>$cySAG${f6e%v8O>sO~sNS6cfvaX>I~5@2x24kzS1ro){GPY-LN@ zqmmhr&`d94pKVVcL(K8dEL2Q z9`%Sd*+7%>@X(bnjyzEw^xo!4d_Slf63(y{^95)0rSEzSSil&^BkF}nL-RFLq}85b z@a5%cTYBGMnqbfAsYjz#D!-Ck(SwEiq1GOQ?cT6VZf!!;s^9@R>Mm(+Zgy~mIA{R6 z4%E))>%4$J^Ya-`4?p7eZ}z7=7sgTn)zM@EdJ84;5E)c1sag zs!+aMXoBgN>k2W+JA}k+rw=tOJc&MkCc2nnmS&|pax=3`+)Ygmkq@5OPH=g293;hR z9&EGoE*BrV(#EK2vzgzuUFDI@{k7r}EBzO!eu_?);7;roCV@P>iglGf3f;a5oB|asH%M zf$`dRh3Zb-q2(y}1)q04(<1=MaXiU1TRBfNBRg1AB4I`P2|U`Bg4<^0R}N1}iHRB)1AZn2mf(voXW8us zvGQcw4Qsp#|iSnRPg8yM!y9 z_G_sX&8UfMv+0&@scW<-F2{C-8R(GO-I-Si_?_=ZRW4WdKh4aYtv7pT2MMR=;iBGm zQ{B+oPyVi^Gcqn3U(;PeVY}2OD$Imj2Q+RwWA(JIro1ipirUHi4wjJZOXA#ZyHwmh zuft#O;}O*@7)`^uo9wjuObmf0QCQ8|u^`g|hdai8Yt8RD6r_bf3FLEM6 z`-RpP+r2VgtuwWmlV+7M6A=SnvL!>XVuc%HvzT`Drq(lVXpOn&h4@>cux z)^Gn)`&Bw<&-#Lh%W@xeN0Ya(lDVtn&MQ1yGvcyE?*Q`|$ z@#)s`6myn~p=wuQ0$cC|V`(GMC zw*3rSw1EEP%TPl@0|j_ChMKv?qAwAzdxxS?H!&`tlv7a9AU`pwn*&?ehu!q~rhJpo z-Dy))&)M6P+ea&EECrhi&Sr7rdgu)?TpsycFJ1Shq_(?WvfsoDspV8@yR^j{3(c<` z=iAoVQxJ@lY>C~h#YLWp5JhQu4DAd*!*tuCp7;ZWCKA0Rq#WD96h*z9S$Pj^>z{7e z8{jt(H9M{#I21hkvzoTvy%8RmblrM&VB4U13Dlq$g{R*d#+KiBF36$)5)Hx$|4Q|64Nvw^iHYm4i{`cMrqn`bpdB{ ze+1UYUBr+)m^yoG0YV7(fKXG2qf6LvS?zB-)h7@rfA0mr< znv1J3=l(4PFn*#o<~hQ3t4H(H-xzlSqgymd32>jAG>Ld5BO~(=3(rO8thw6z8puql zhEeC2JxVD0c-aRgR28YTP;GxZxJmASy+xgs{H$IU#&~Y@V*z&5A0c^e|t8|LD;-Y2`q>rPjOr*eRO&9sbp#`E!ZDV z^JafUPFO`!ZLeap$H_B}%j%d(E!puf98e|ZD&zqFOOZr7F0vd7fPnXsSp&aNS-Y{d zRm@(~vo+A&;CuO^y$U%+MfjdH^(-npZtrP>{l5M`5zlp4f7l=qcyP zQyRZ$D}JSHr}iXofPHlN@~>7Lnp3uEO-xyDJkoe;%NxA*QpLxV@qNFT2mtQ z4MhiNP$@voIS^ zswS)Sru{RXW<~S0Q%Ky|v{e?~)mFrKz!wS(0oLr0?YTC`cOfECB0J2$Gmp(8pB45H z-#;;O#hrNKhAnpsUKE2>Ksol`^Mz&Ye2n(TxF*dDdX0Rg-)+s(JYR0#K0^P^F`mR7 zMUZxfdh(XYv!>TbOXuTsbA!dH#?Tl&F?q3hUdolN^e6fZbhKHy;yQ`V5hY~5`_oWKh#O|;XveYf&#U$Wn;F)(x z<*3aheeQ033aP8gLy%EWE)G3#TMFQijB*G09G_0E?ptQzqxKdk+i3MN0!Y1b4ZT|F zM89SE9SDw(O-*fhFi}B*YRh1@suMx~%+6GtKbxXX)Gxp8QBS$@B+1++OX zLFzl^IU03!wma#m+Xt&?yZjL1vxjg|956m6IAp ziY^8Sa5c<`jP6>`d|lpM!}eVyd{ykq{MclBW-->**Nbk>7fmuQI;o1u?3*THiGt(b^k;(8bcf20Z>k1&q6db`>!ofkazf${K7k(T zkzD`jridIVA=)vf`nW&@Nx=RsN$`bNYVnszl+fiC9@+%kGzGB#Rnz%y+OIqB!+;Mi zM`_Ucpk)#RR057OQzc7bLObec3#N*Bo7u)<^pdTadG7^PzdtMmg`e>S^Q37`pJ7Ca z!R144_Ar7aChh0Pm{Y2b`nXyhne=Q@Yg;SOauW*C?olYAj!KSgu7ZfEUV}>aa51^P z`#76VO?<|kj)q(75-3A?FMHX92Xx#{CrMHev@Z4qU-G}y^kYYcj3JC7*WH(33fl<+BZ)ly*<+rNbYjce5RN;eqGp%Ou zk0ErF%V4zyro9;gG#!A zaeMi?vd-KP8vc$f(tJVjY52ubJ>h!(4>R3*91@Wc)ZQNRxWR^=yv57sq_R!wfi_fi z3!A%(Dpg5XL5wp1^!d+{=ikX*Ipul!jkDHV@7EawLK_S6S}(+vH>yX6)=8fI;`nWa zhYrqrGW44RL)eEV`%%nUP-VR07+oJiJgvFP$3v~wzXXEf7wRscX6L~IYJy-T^jR({ z9?Ns{r81uJPRuOtm2VSG={KUp2CP}5cP@OR{hP!*1A*$yCt>{sbFaFrvOHw({l;sB zwh$^B@m8<~__VKI4P0wEQ#xRW10&(eG;_L#0tUurV(H6|1e4g0+@l_6Bkcdd<93nIYv*OT3@FL&|@`u+)2SLxrxt(&_ug4(#6Bb=3+KOWEA8I1Z|A4>gHfRo!V)2z-~d zk$~RaT-IWJV8OO>O_BG*SfS&c?~Ng*`RUe(v=NVeIx9Q-p1NL3<9wjk!Kc;`)!o?V zzqOp^kJ2WZt}mOsDUBGifSrv3VMyCV;I`NVrc)PU!ropXcJ92e99@1F zp=hF#3af?RIBk#R@%}=m31v~4Z%u;Ksz0M-GW|Ap9)|#xVngD4vp*BY)ttSd zG~73$ZK-@*GB8_r*J1yNX*3Jb{juq!VRJ=pT?3DBEk()zST+*-1fn7`Bg zw`!Xu;DRMV1^=cVw&11ZYm^sTAQmE_Q|v@3IP~&k+j1B`d(UynmeA7sO*V)UJwb@LAy~-XTl$%4b`NJF*_g4h^V*g&#{N}}eNyMZ_4>-?^sMcN#0J3QCipF)%cTJ1 zW7kAB+Cm4*6xJ<^HnkX~^t9ThK9SlE(iSue7Uut2IpyOj7+21NLR4kRku-VySlD^A zGjhewlW0EILactlYabLTcpw0rUQcop=ugmg>B{W_N!xhWbyoVTM50P}LwFzWlO&J4 z_e?OHUo{wtSP$Z8Gz&4~#2Y&oM2E|>hWVUDQ1OhHmLZQkcbTTSQlJ;_`21U4el zf36T!^i^2G@)y;L{FxkTVK+!k_e5xe^CZ3Jg4r1;T^YJFPPq~K+0 z6Xm$(4y8uGh;k#Zq>+k6M3Mjb9b2yv`r|`Cn?>DxUENussQB5BPeB`N$(AYeahJQ_ zz^C*Ls%r6Rc`z!rgNE+Q)I9~p!FPk0&nu_ie@mS~gvhUtI$0Z=ei?|kiXI-_!7q*j z3A@A({;ZB`$Wc-7vr+sSmX&D#Sf%15<>3 zAyj*7mEmQtguiUz&^iq@&{I1s*X0~@{*Ehfq7J+ywJOZ~v>`Jptq7!^?Xc^<97r>9 zdMOTmNKCf_k#!LnlL_JXm5U_Lf3G`frT&dH06!3MRCT@K!%; z*VOD*X567y)`FeoBmL-YNlS&k776S!1TN}*w9X;bzVVrHD+jNcee-H?K`;m zRGE){irmdBub2@<9iYohd+~jQg_0#~zpJpc)LYkco+CQEyjqk8--5bgTb3y7CMqQK zjRrS0^}c6Tvzm|iBL!gU7hT=ZC~0lLq=Xkqtj>)dx7JLcA(K0%T4l%x?&pXyPWal4t=pS@c)&s+<7 z2!TjY4R>Q|O5i+*bPfprOuC5@ecP`=P|uc^--P&tCTM?FnKN}UI;bCGO}+MBMDzS{48~WfJz(gTpUn`YmC>21wh*EkSeA zM0n4W{L3BL3$oLxa!=u1u;xbn2UWA>Z$n}?V}mO-ss`vRpp?&bJy&oF*YTZkkdi^5 z=I+^#OVhYg)gmv`f%<*EQ$N28CH;zTZ+B>My@r}Sjtz~F84{eF@&3h8SP-E9m4SkS zg0G~&^%w6dzMnTx^L$i-Uo+(2-l)c{_b>J+hqfv)(2Kfd#%uabx-qD=wpZopzEgmQ zpl`}=D|nQh6RZgj-kVY|w`|Z2o0g@y@xg zeW$xc(t?m*v~6fsmltQ+*=v42yy9e@%}(kGk6&M(3Nn%VU0*rT%q|XI0=Jl5Th3i#C9UrX)%zw`{M53+kyD-=9J`{4mQ|m?PPEo=! z>csN%SOz6pDBH{#b*XXCVeZ|vT+7Xb!A?SwiO!wxsrG55h%3)m&@LBpa}&mU8_d5A zrvV?I9loJf>Qs7ZTY>|)%*1>0r-6pvQHzOWcvHEe(7j{m6!K=eq`0{CW$p--qJBW5 zLj2?wI)S^W9J(pb^4chGzqQW|ktFWhgAas7ixpKCw0B0p!P>h5M2&>$IBVLMXHP-5 z$W7@+6i|PH1-i3eZxJdH4_Vh=n>cya;&;YmJGsCH!ZDAk8az3zv5d2^bWnp1I=cV$ z?5NpLMF=6#nfqR_ww5BBJVWmt8k^SHwVx|W+aPW!9cG+4EXg9i-{Ctu>(I>2Zz|Ho zHtstjqlQdz8s6fw8(pE3k1t``XLoOB_@j@VA+~2!1krLHQiE!L}LCZ$t1ybz0N@dS6mZBsKQxM5O(b}nje=xIdYXL0r9xX1( zig8epgLLI{>HdkET<)bHD2%7paXp=pUqPcgwwUJP4*0 zcW*q4&b&<(?&<3UPv0NP^)Zhhlz}hNp*giJNj_@TEqz}nPC{7RrtALk*d2F2`-jxr zy!6#%9M2&Ro~p*n(~bQ6IELh!_d{}CJ72A64eBykJ27oVwOR3rWP^Xa?e%7FgR94A za`awt!yxC+g;H6w+J>$^9B*(JNvac5D2zStYn=guL`LEyXDdjIV%m)+PK;xAL5&*} z!YIdGQs4?X(SB9pje5h#CNu2TWkyRmeXbUG@9+EG zrkCDRKkgt{90iaM{_}f~ZpBo1na|tEiWtl`uHw>i-_hQNY2Q8Qr17l#SYve~E3Ckz~9f^jJtr!YdgA)6|`!^Nea$w%_@d0_Rs5pVbM>-|j2Q$rJShg3gAoAB!%5(`lD zL+m-lPMvjrJFTdw*hun4ig5jXwK9r+q)BuwDj&{jhaSCCUw>+9!fnj4r9wes!c9MK zxT43?gZ&NyUu#*~Nr>afridP&8i|dQ$Aw3*&8_6EYLi!Eb{Q6v->hF;5F@9Vz&o~h z_FEvLzMVqT>8@YhFe!Qva$91wYO|xiy zXCK0@#MRmNqN-AbTVoRrha(dpyURmgq<%ZuQ=aG>H2X$ERu(DEGw}{XBCLwhLq3O;j`Y`twK+3TJqH3hXL@(CPhzdKdVi}4oXfInSa?~LF7e~Y&A|cGEROnU3vB0 zZp{=Q9vLPQyolI^_YGAoTwu$A+JzmKMA5bdWYGwRHF zkEo0>zy+b4qdUJsEi{5llOeup@>+d;wrk0lUP6OvLw#O*o&eCHFhR7*dV$j{U}9xu z#op)`eoK=jS}>Cm^~lC=>Uo$?U2*Y_7CM|3`$188(=A;|=&;%3djI^A+qry5%1yuK z((prAF_Vm%bfESxlh;IU)2qP2!`Qwx)x3o6G zOu_yiV`@#9kAEw-`3$BHkr!L)SX4R750TppEoT1Kx z&Z!kRrt!$>=W;7|flkbAjG$CwkBmw#s^U%_iEhSq+rm`i>7&L~wu zcMtrm1~YFInhHF=N=PAZUkGcqQhVs(Z6zF1!$d0;#9+R(Y@wWI#v^kaBZCXy{Ss{h zo#!|dQX7=ijdfI8sSP$om1NasgxEWAtok+wYkJ6G31(}@I|>baH<*+8#x_rT|60MN z*8$;Z=*>E>dI`yqMWb{I3$4F|?-#{}jrg*ReGE%KE;oEG#>MX%77;;q*Y%}{h1qf= zKDuA@gpd^P8rw!mG=1!LfVZv(cQ;VpY?aq@etL*vjGQro%FmIR|6I~z9`D$bV!h>n z2y@CT~WjN*lEsi*GQ#3r$lqUIM|8oROZ_87HM8iPn}_p=JDue|Aol3 zv%sKWK;pYRK|x(e+VD`G5kACm@YS~6MK~%aNikv?QcK*OjeyiSM4Pd*m&^X8u*X0m zb^yudKx|U8#}&d8Fd0bWS38$5-!*KH&Kasxcxn4#GsI&Tfcf4B`Z3k&zSncNEY_om z7dm={vAuo6#IpV=lfB4hLUHXw^~ra`l^(bT^TVnTp_icUla7$o5F&||m>?uL{3E$3 z=W|?okU*^zlXWsc>3du#v2__6yXqvB69a9vk|$M*y*mf%O?<6B_i~bMd=oq)LRL~@ zp!sPC(Y2f3v5Y~_@bbPw&P|n@iF*4hPt|cFTi4LnIPVqT=r%XqHLBY+9;)CXdx%ZFqrd z;DgaXRri-6qVDk`|yB{${cNY!oq(P}p=feH_w@8_~4 zbRSd~+NHlyA19%miPJPy>+IVklu~^&s;4zt%&$}W#~M-VjVTRz)UFT^UHZYjra$9! z5#fkJdctSdEK;)+@iXq2V8CMwap{0*hjq;XFRV@c6RV*5|ib&v9=mu z;myrO@Sq;;SRKj6Z3d54%FA0v`WG$Q8v+K2Yl7s6>e^oxm!V>q*Zf@4b-vV+0t z%=$u5u;#6hxYDhj?u*K)pTT;2QHa!3O$OCK)r0h@hf@$t8+36W)I#B|K78lVVI2Q4 zXN}Rc;RGVYIK3)(@8Cne_@6*o_l))2gHPbkS@nwD-WPeCWuh;vH z!?~bua#woNT0HcIRKaWrMHtb>9z^buz-w}wIRu${3X}I*6w3X+LZc9~{GHTHg)^sz zkntpmNO34$ye-j#Y#rvXxHkCFD?YtVJD5V8%Zo%VH7%<=`Sor_t=u8TUk#0ns!8<2 z`(4Hd+4K;JMic^wr@Zlx+*s9a-o*?ZfQLD>+nE}{bkoo6VVJSJGkXiZpkQ_JHLAM-ZgfEZe!eQ zJ|K2cJ)UJ1FIhh-F6^JzyBgP};?l2XW{sMDD9TDuccP$zxp5So&M@!OMsa!N4veug zYrjns5KI>-`YiY`*#J=t<^7e)d55$D=0_rgi?d&f!GG09ui3%f)6&{!l+>6V=7>2+P@}FX5tp!GJM9yFO)Mbz2kE6mBoZzAo;U|q6dea*40F); ze!;(A>7bVS@_pL3kV!Io&=?4l?}}omT=Qr-rvQx|cQHEk@bb*XSyKR^(y5=IB%%QN z7oUIS`+rCNj>Lb-xe{0N8hHZ(-sl?nJM0;@9>p0a!^%wGttAcmgEe@9@dH5wvi)4P z_Q1{n%AzOwK9Pjaz5Ma9Udkn+lLgWKXXc{OFwD^!fRA+e0oy$@!%~c1_)~2DJNMg* zGoSt7t&Y~l7M%`$hV_q&-uHG!E+S!HCV^6C!k$<;u4kd@Mn?MPeoAR*^e-*8tG+G# zm2Q1hr zE8Z(URJnHOuv8J>q;ZFh*N4D=s*n@I@zpwt5FnqC+6_y`%e-fd;p4+or&vv2N6R?8 zGf4aV>z{C_w-C!DaN%c1aTX{IZM(xF{Ke}~vS8De$A$OAEO8)@R-Z70JU*$XS?(XH-4z+gQ=3&@U|WJl*NC6-hJU9iu>S@P~oFAb5|M(dVC-5MV~)zpxW< zU$Q_hiEG(y9wK#T>$H_v;32PmoI@4 zIOXI=nr7mP?kx_IW&UL=;_*K6?$ulY)T*f5w%LWb!Bw+|~?BXh2+%w+~TMx^;@uDhhsUMpyBPi=WlvK6LZuMC^MXdr$Po5RCDA`9JPT*dpemZ+qBOfcAdE zf%vVxJ*OyGWWM-6NgB!nUg$H|AP}>t^8bp`;+_fiNMJSNc6kf1+Xh6DGMVl#hcuu5 zAck<`l(%SVY>@v)m1zM&D9z8j>7o^*N|S96xZvkdmb|~73QI4YPHAIo#knVBKsn|= zCJQ5&&^$^UZ;p@RwC=EP;Gn?8#1ujnELsoey`Q_p4vNkuB(`Uv;Y=|jjpyHONC>Lj zasS9sCr|=3h3%hTkN%2(cCU&v{B3TOh{ck;Cwreg|A*ja`u48)B>m4|7gp0ZxjMSR znm8PL@$pQ5$AXglm@r5d1Vc%f(Ed#V@&N%~!2I=Xu{VOV%8Xv;x^!Clh%ei%P-r$F za6p*Ge?NS1*d!6T$R=@7CD)D-#C{IJ+FUaf0W~*YMar97sHmveomp#W{T-GG^@JS2 z4bz6Ey?ee~1Oj#S^6DZ?bLh77hIi&k5Bb-BdIp0!yVTIDBglUhWqtMc>A*g8oxJA{ z&c#LR^@(cD6Yi*PQuogcmz^gBA+*y!HuPpRUFs1_jlZ+T-h`x|;y(kyWV-2eQ+YtQpmdD7q3 z7aN{=@tmvDrWO~+vI=)FS@v2-XX(z>72PXsC^dt=6?j|fcXRhM<`IBO>aeOqnqma0SNw`{pnX@)prn; zPAjmKFz(p#!Wklo$WqmEsTL&wgV%H?dD0h4)33eEX{*!#-2 zD7&a%K~zdWB&3mUknR?wyHh2k8w6uxwnDs$?M>m1_B>kQCOmxO#F7CpqV2&qG93z=)(u*Y->>w^?;+%ddg zg=?)rZ|^Z~-xCV42WSFX24VFsiYKqNHnt_irMuvK2_imze{qpQ2I@ZCh?WH9T>M1t z5`P7`BYCtKMRg|w3baeFcBhZ61wqckhY5o-&XeFASsRc0eM%MB0>Aq+#(Hc`_kwKo z=P;QOky_#5;YXe_o~qStLQ3q{Z7YX|`}!%DB=g$vxlA`1J?zvl?iS7H5X~3So*5CPy>wD6 z&kMP13Fx+w;$nDo_*t_3llrZULND{f)`3r(Vy90fSk`nO7=piX9r|N(bn?=bF#kM7 z2TwD|S$^hgE26}O8#fS6rPp>^jT~RbYrJ1m2kv`jL^OTGnSC8qDm@#V!D?qeX%-^R zX_7N*!LdFm1q7GCH>N8GZ1z0^QUx6$&u{ZE9B-Wb!e2U4^ni~0M^2>D&g78c}<@5_I1X#t_;fhr)i=*EF^uF7E`xK1vdaZ;~Rm# zwd4-fgZHk~4vedjqlkPK{;fVh*Q!fs&%ytUXgQZ7`~mfxuUu%MOH*CFIvERTo*o@x z%Ou}7H2i2GTQ2Podi<**_}H-7{Em(nPvAby;tgzVjv}7*GX?T}xbeK4#2Lv_?z(Y{QjVpCerB6S3W;bMbegxEr9q)3rB)`uZ0W+ID959)Nl}#nbH+_u9Q`07v zY5QAoS79=y3Y_(kEZf6Pcen#SAtGUzu!cuxMuy5J!e;rmr&nK^Pk>|NP5|K=;5kA< zXr5~OL=q(|?2s*6?Uya*$;HLR#GHIT4F7?Y8$19~hBc1mBdaPpv(vEN=0~PbOqvXE z6IdLJe{r!sb-<@!m6LLSmjm3-nH$0uX1Bzg^4(Sbok+eo%{qk2NtD6 z{C$uOD*Or>`i-;?+Fs&ccU@kqnI@OZKxBi_Y;>^vyLr^gX3HxdQy;rYg@HVrF_PZ_ zJtIRa{RnSo2KeG$hKdbM;^zOBMtB-Z26ZsQ+l(eNY3}Q0y$3ZJ} zb=8v!Bq9t;wnb-kzn|-sw=6tyo^(QcwCqsfEUm&n_}oN2vz9u-w3ZKEeeGrG`Edsm zh#qVaDtdE*;ll$pgdQ7OiNGY1Lz2vuKz|o4_&zlOFlsF=V9-zRF2@gvS>!*}n`n!y zr!0E;EV8O8b4%&B>4!LydqhF`68m?C*)5?tr-_5K=BZ03XA==XZj?)8vg`+2#1gmUH_XJQc_g^n~TU z%kYUu3ZPct)dQ*(2^`-B*;AUx=$rTms(j7mM|%$NVTU|aU0gnl6B&1famx);H5b)^z6EfvU2K3+(#$N?R&9L zDjIH;T#grg6Y-)B)>o$Qu76!$myj;<8E{*nLJZ^&+JtDuE*Z@UGnyxf3NlLb95=Q~ zii#sflVkrn(u|d|+9wavolPdMQg~gYqf3*EiCu>7oA`m-Pe9ZCk{UiG(A&+>S5#xn z`GcjtRPhGrcszUaXGni@xB^sNUa5-baD8BpSs-+I*n8H2#5H-Z4YJ)~EKFVK$C4#T z_4T*%ZTe?Fqe!UKS~R$BbtT_vzT`fZ6~(jHC&P3uciQRlz56GaHP2S6eO`KuJj>L! zi@b$bN2V>c8y12)k#Zm1^$ehspVg1?O^bi(!6UjYWB?Ei80jM}A%Ps0)ckaZ=CuB5 zH|y9i9H_Sws69UHRuT~Kh#Y3L&d<-6AfzS^BYAZ8%n?vJtZSY*C%KhoZ|LQC?g}X$ z9V%#`{4OezO|)F{3#O8wcfTbiB^^sM4~_~0S9^FYz^_o*#m$y=hgM-tTL8A-){))z zNZU)CDZa9+-$~;KA-6XUeD+(Iu`N~`;OP;GT|b>4{IVxdH87mo-jk89H=oP%*K6?( z`T4((i=Wmz>f9OyqB0g0l7F=)fNF7W*yQzR$naeV^W5!}7`Gm-Qegy?p&1N(^vwZUpR%vn>p;hU&(7vtD$G*NTuE%$ zeZHY#;FC?(>f0!jfMpHBY7iLDe#yssO=;YOizqxGUWxQ@VkgB0LNngGQgGhio#=w44xw(_~jA4?K_^9h;j(XLn z_rA5qRNfL8^vZnfS35}kCtI^MExhFRF+Nt6D?)_baHfZVy8sc*X~0FF6p3enn|3Wp zA>FR9PytH#BN2msAWX~ZfWRHVKnK`Y-}TRfUwmDVb}aw2dN_rEtCkl;p{D1((hesN zSC)S|7?)Trw^jCAOqbK{xlTK{-jD|DPKH1|3Kih9*yv5>#N!!h#BZ{`3>Oy2*AgRx zR~jyzm0Y*#bOipBmEPh>Dv zozZTFw8;#4O+@xGoSRxdOOkxxdLRi51l@9CgNz(kepSwUydcwje$zXy<4~{9y|m=q z+W88gmZb{6a!_wHe;AGCMvt}BYIRM; z$=f730O{}J$fqaJyqJU`t4Ggm>&`RPHr6WUYPRmu5a?%4Oycjx3)Rv9SSX)d|ML{< zx!Q&>?+QeW2b2j>{m`i3C^*VqK6bFYFJ4W5OuSl2P35kC;u9c8Y?g(Z@?bj3ll?Tt}uRT4} zVaE!z@{XHHoF-CD;*B_sm(_VXAN@RNKpjyJ^lpDx-NNl86(9qu!W0u7nx0uDyZkE^ z@AF73tY(+xgLETuQ_2GIN3UalJJYJEAIGKQ23#8pUZXN}Rl?wMVlZDbX6fC&X;~XN0TPmXs4a!P&XL zA?}~|o2aAcRl4V#Bs<@lo7ZtKw`9K_FNy2AgLw3#FG1m)+kPEV z|72B5U~4JDzu|xjCQwd#7u6Tsa_36Y(Z5W_3uy&t>KGNT3bgB=CA*Dl8E;3??j~EG zTG6ak29%(afGx1b7HFTv%Wr?X(5XjeZPv+l677EEn{G6(RR^xuBnR^w<=k%Cl29*hSe)^C!h0T1Ii$U>k5}# zf+uHnomnSoB`+W7wD29UZpkB_CWz9YS(|DKOPd#B+w`*J0@?&m7zYPu^xE+#A_=D( zAzt!!J0<{gO9BgwyE1Swnd|djcF3QyDt^3h%H_~9d}xaTz#ME%XvcG^r?q`pA&s5T ztY0Z}819bLVRb6SX0X)t4Fu)~jMOnE{2i9z-Ta$C%_Vsh;Ll;hYfEau2$@PETO7O) zV9$iexx;YcRno8gZMV*$Isf<dJ=g)9681xvy+IFbZ@MN04)Z4`I6xO(ddKz)NY0C9C#Y^4E z%+6l&c`|WGq<~}?*oTovW#~1G{CLfrVH3`7q~cD62A|XNll|8!x!y z*Vvs!EDmW;Cji-q#E2emviykw)x#c5dlw&((v92jSBNl{J1@<-)lZT z?L$)Ek08i6gmJDhMQIzxUxEmjd()*>Y1KdxedN=$LkCP5r_U_e1schdbzVCElq>-t zxQABDju{(3i3CRX`$KH5?zHtLal?StPn!uz$5qu1>a8xWwUb zQqd5z>BWA71;?fxFoodR*-TnF7tdgg5ih6Nt@AVujgTeuqc#cg0oa@QFS}g@zoa?F zZP8We%ZB_2j>5Qj{mVJD3ZSTwxs{1F$sq1bjoYgQau8FLY}L|i0iR(WQ=uVRvHJ67 zgsr_Qn^FJO?$M-r)0~?frZQQlk4k+psk}NBeT77%(rg$SG3R1QkC9`TYtlwswOeEQ z{wP+ofZ063R7!b%4bL=-hLflvKKyysSR6Lqr2|HJaLqrV2@KKT#w_5-MA|E`W@412e6f7mI+zQoz(>5x0@^t8n{CsiWc1?J=H6drlIFEeihYt1y3k zzMc>v6LhiQNXwyTH3d`71wHy^etR={XkCfCit7wbuOd>&Dk{16Cc%WC9sO;ba~-OPoQwuD$c@l6-Eb2 zg`9oE-!E~BPjTF$Cpy8K{-6$MKgp03Y39w>(3UA94i^pcPA1Avas|;JInIL>SZd1h zFQJwPR*8WN4Q79X1REY-A^}rxF&5CxKP#i3nGbB9pA~KczeRqY17NfZQ|t!4&ae-x zqp{TwIun>uh|)66I#F|kEFA2q!bWv08UPbA_K&&xY18DNM#iih9~kzS{Ya9Ch8(qd?@5q9F){m z69U1HE&ON%N@&Z4e+^2kAi!Syfd6X{M;&KkBJosHDEBcptVV~@cX+Ab5)T7ZrB&ZX zd~7j(*-|->Ni!qOO2j5?sM3>oHiF&v)1PU(-JDDew&T}O z@X^a4udHQ-9P2bRjB}gQ)NzaKIVvN)2xmuqgcsOg0GAg^Gxm+;<>kYY36NwW zb;syey(e0!(L*e%$Ga_qaP%tMoGHV(^&o-X4h%>{TN{phswH`Zpmb&N z2sL7=doY&5YU;>a*Um7{P|$ZF=!^_<*vcbB#1T|Zxu<3j-G&W{zEc#3zBG8>&@Vy8z)H3Pc6r- z`&uO+NOprB9K1}#3mk!591vV1776UQfXq2UPO~BD4L$tL%-&n7ul4E(UCiQlzVP{9 zaBa3xX8Xg;1ppFKo(;jl!(jV#0o{XSzVqaKe`%qV-jDVedp@6-aVmJ+dVbnQA8+>66#VeY|TZ%#gQ#M zcP+E{VN<$Z0LYs0lZyS@b`o&DuT(q#5<6j-MQ9zLMw?eYa{L31FZ4kEyAJl}Bltlf zKtBgku>(u8|CZqa@OAUTiuHl!dR0I`LH`25ed{sRn+D(-?kXA6!#7}4+%rb|5cmXBzK=Z|;b9pV6+l~CPDjN(oX5Q#2!}Z43s5|CwZNWBHZI|+bul#a z=DltGCv4ncBw~^h5O}ac8l#~zvC0(9hXIB{ee>cUL(RilzC8(gcAumIgG>%ALn#9~ zOW!}EQXU1k325xBdldyd@mLS`cyOS75?alEE9~*$FgoB30n~YR$0G3ZfnbfSz(eJO zVPNEd2#A;aN2_3(aE{{QMSTIh$EV1Er&yc99z&gazV10_LI@>kIXR>cU;N4sVBiaE z52A!w>FF{WTlz^nme_v*PyhGhA_Y8bBG8?^v=Kr~P4B+A!@yH+O_yk&9 zEs?leH<(8IVLmPZvRwd`vwubN0K z;X`D7gFY}0J^GkCy8>XScs>UA@hUrjU=#YvScdt-?=QRq$cS%(;{W)%0bbzhM5CJY z_IXWo{U32p8x;tJWsIfJJbsG{3gA}faf5#)1=rNTb{fn?J0H3CDYOU;Mwuew|LfN1 zbd5#@#gew^x7+S*BkIuRouY+>bN|_>+wAD5&@m1T&v?b#*zd#jY7;eoUYu zC>Nz@d1D%9;MT&>>~|Qpo_2WM4wNEv)=KPSXI=<~f8+*R5gdaYI}S3s;#LQ@RP_6Z zMkS1tt$tDBpW@u2mR0_wyQGzs(Su*Spu6de^e-J$tO(#$6f5^A-CrfWP z=@+|tV1_&?hu*LCAln(n`H+P%o%ol_$fzUgi5FqvpNgTwB_w`EmgCW4%C3LlA_(1a zOvEGKou)9NW%>Nux7Ww#g#l2@S6{O1*yjkfDWx`%ArVb98!x|J_)V6TnR!GExyxx? zLMZtDzVs@y7@(>ld4Eb6*!=}1Cfv*ZHQzYL@Ym?R)a0+8BK zxgJK7#cN@ zm$03=KZI|2d3Cbs@J{!_&HegMVz5v}H15&w>jv>)HPX8VtapKiqzkpu_$7}J{u1b4 zHJz4K4!cjIG%`V>Hg;{#gXZ6CQl21eN~KxYCeBJ85qF-Q5sZ(~g}5t+m&6*1nxi%X zGc!%b59Ft#=dNpbj@w?jr# zQm{zc*}S$w$w;tuIN3eqOajIjwT4EL69kvifsx<&JGh(Pa>N9`ZWN?Rgvh&ki}zm2 zGo}?E{zfDfV-&|?{Qei47_C}rsujUO`o7CN~tNxwM-I$e^x!t2?8qVw2(s7#oAizsskRr-9L;8 z?lUxZEK?(j)>jD}$@=V@`Qqk4D=|vWUrnRskNA0&Nz}W2v?nJG5stCtU-M1tDf=Mx z)r)`ijOI;9e<*EyX_6|@u1I|q)EC2QGNvwi^r&y4fx<&-{va_W2rTTpj!{>?Bu0m) z4Z(GqjFy<9vWk$xj_}^R+CtbWHV}U6{^SC_HY$e9J+^zlH1RlaM!hJEmd0&$h?6`j1+cEyDye%)Yqho2cWrI;M#59|>H<%|Q_an7x0j7x zk79G2mh$y!G7;29LnkqPzai$neubE4|GF4`4dyaW=Y0(b49dAWAq>m|ZJmize2G`7 zGRP&61%Wi>&KoTPEs%wA>}-P+CEc73Q1L<@weO``O}eVlX(I!4juh^gkAh72fb2cD z(RkKM=sfTUbe-*_#@1guyYu^&9VnP3Agbf<)l3IIo<}}9gPwFEpO{6kf)`23cG@r`=R})@7Z(mcT2XY+ z#*E*-T#g=!Uw6*SdbW5@NlFS74eZ_wl`q~U*B!Zsr&S)h^_$8fb&$adi?~a%PLhNo zlEqlUe10lgq>tiHsE2c9y4QD#^~_!cx=E)Tk!&Kt?zw507?D>8*3;)C{LrCtQLK`8 zZXgFk7A~e5F0Qz}&Ap4U^%Abx(NU#+mpq}9yj&Hz@pfAVEy=9xZO>~I_a`ufPoVf< z6`lL@31mB8LxVs0CA#nncwd7I87gwyqEIE%lMX4XB{-7f0+psJ+ZtsHF!+>7IG7#l4<90rS{1}m>?hwa1VzxMmsrbhgQ5##Omzl|%Mwj-HbiwU(_+0j1iDDC8 ziOv?=s?)0}*rY8{{VEwM)W`aLOXad`@Tb@qPp?{O>BhM0HEn43T6zoq zZ^|dw%BRn-vz*CZ=D~VrWMx^rr-)D0V|4VsAn5wxx0{I=b!D_#Z}T}%*XPq-qsQ8c zYkXjKrJ4C~=I5DXL4t=Z55iFWswn)znE(s1RJtNE z0@{PP)Y5+67AxPtPgu|PD>Jj0IjlyixMHZ7>F0BaiquS6jnXU7OCj(&h`ZbnFfLE{ zKP;29>y`k~pec%API5q@OP+9& z1Xr&PciOTf9^nxqL6#+yHG*N#Q&JB~qlfIb^mTS_?xot5^fU86T5dsYjO#aiIgPne zc{9_yqub5L(weUHz&mstHm&V7k2gK=4J$V1yc9mbLx_p;g8&Lq?I2Hq*%M3*4`^7) z7>188f~?td-P3RchgiA58Z z`$*Gb>(I(ytd@xSz~ty+DW7nl(bc9YUP6wH@8S2F43|t|tWIEg!m{OMVtD7WFshVIV3c~hFS_MZ+uW^wZk z*WL7WD>Ih6Ws_MK)%#S;AniJ%*-;hx!!p8TrnAfsNVt`%dFZDnRoRw?`_r-2o)(GUff^6U*9Lh#n+4Cg%HA_e1c}Q#KlVgYMr}>>%5WL*W`=0rdSa)09Smy z*JZr?idsmy+3sgZQySN(gsbznc?Q|5)+@_dFE2)G)9OisKC!H%Ez@-5#ewI`uhJMk{ed-^ z$3-a>FROFn5XD9BJ9&z#q~!ZUH2tMo*j*su_DEpgi{LklSg8f(HSiU{Amlz`WZns- zFnIzdjPWQ=g+s4<@fP-Qzkq!ULBA(3R6dOt>&XpCB6d62- zeG^R>10&bQWqnNR~NY3HubHt87_+k6>pvc$#>}kom&kYi0zJ^OB1h`&* z?q`@xeAP|mctl%XluXzHWhUuK6JGqlCaHvgAfS!9quk#EnulxMxBbFmXvaGBVls5wzK{EF}OLAqI&xKJKX2i-Jukg6B4cd|*DtoG8MI$^at+K|9H zidJJSXrPM&MN&BB`LwR$FSG}p21IVuCwPeE@0D@_Y^C`vhY;^ZrO0rQDd)$DAXVOM z?RRQ>*fe3ob?`pZF(lwGb;XM!GMtVs`9p zaN-w~iLVn3S=H6cdft(7_@)Y;E!fYGH^aG*8S|ToFd@o@KSdaZv%Wwgf^zafq68%Y zE%$?(T>KZ_*S}3*Q0Dq!IxN;pj{VjN#s>*6j@Z^oy(p-98Z0xnH&@+CD$N(i!!kT> zY6K=zA8iyA0H0R`5w3{FAEJVwV844l@yVA}d!+Om7i5~?T7WGxmd7+HW z%ocSha1b&akTs4pe;ucvf+%Tz45*;Yj+2RmNFOa&ThWCdX~EXUKsixJk8-A|sp$?% zyR+K+sVXMDdyn5q?4q2X;fAA~yJgMpn7D8WHP z76)qcqAn8nCfgGleQ?Y-cIw;l@k*JqZu_}U6n)w4f4xspF*6&4-Y=PVof~QS#YA!V zM^8yfDm2R)`<~W>#Q>MQnamZkgm4XokNb9YcTf9EDCkzy39D!=Za%Tt^#)+pX&=Oc5=6{*=P<3=Lu4d4i>`Gfh?he%Q8rPuDy4{UEEFk`A zTbRhhB}+tOZN`v#xb+1Z# zK0oJ23+pt^mF?YGxR^-HrA+L-N+r|-AG8==0QX)Xqut{_)b3fpt>8OAD=8_F%2{=w zU?fn(b)f1G#TcG6vFW(YI&OHpmB*_|qditE*ARCeS%Xg!cRk=40 zM1%pXCGQke6ex&TcoHv^m)5@0G>SkIg$9_PR4$LSA2uaSPm=8Yt1n&4*?iwdlsK0! zEE*E$cK&jG`MZF0<+@Lzu0D5GgLvqBuTs7T0ry-q3VR6QP2NKK05SBXRAH;M4ma_f6kj zM!y~r{oSQOHUH6W7h2evc(uB&)i&(b`CyB0|95*rwD#8~G5heFA414>VAX=eT%dht zdvg-3XRBPOI=C2<%$2)b@of1yU-w^*eYtAG@w1Y^pS+h8tty}G0A5}Km> z8})fhqiD6_!hLmK6)xAZ81^M#G#rxaJb;=ioNfoaNiX3&RGf?O6S&))$hl=&JS)|& z9iRKgHP5m5-8|skx9(WOdBrD#%8BX90QSt;w$lTjvfH9RR=x~;| zAQ&hcuHNAE%JNdU7Hit>O zaol9p3*0NWi1q6PM2R=4oGuyPCqvO6c!3dS%>I?Ah#rjh{YB;zLygzD;n`4Z*y41` znW{$HeA6`G=XRnQ=S)a>^}%E0fb++jot#d+bjObK>y-J%Ik&Uf+O(Bm&Qn#xtV9R< zp3Vji+q*d|L-u&YZoC1GyF`a;jNd}H0t}n7gj^5mCIm%SSos4L^n*5LhnDjDGjD=t zSSG%+YnZdg$$nJ6=?&#Q+D4pG>`AlcrZkaGh=6FK##&$rcq&XEBS9!t%$HvZGchp2 zN;jBU)%PY1lR9IO)U~vB6I{pCwAN}A72pYA&0#Xg1KQIia)6d#$d&vc2RxhB674~F z2=7-D%IfIcW%LMF*oCH(_+rp$ZlIZjz<0f>v|_*~m17r`u76 zTMD3u#uT%2c3JR_s^pgna29fkXzO;xEatf!5PC0lQ+s3KhR~Ch=x0F_D2AD9345=4 zP&A+eJN(T?f8EQVtr%fsb)OiS%pNeU9N&32QY9f-({_+^ZRu#U?QLO`9cY{)X+BD# zE^DpVCh6O$T9(8994hf57U$tb@1aJ0lrYhu56$QFS08L(tZS2Nd(O|>Crc7T(?mFc zp7~jfGN%*c_CQs7-aF?CBZ=6?&vIReod^$Gc?;f(to~an2n$36H+mxTR!UUWDOKYV z#|~?l;Sy0gI|x?ftFvejt9WW)GyLT5m6DqCcPNk3;s{h7x;w3|uGURtTV0g(r`SaO zA+X1D(N%q2+?@c_{C0`iG4f0xs)A~d!=m>#$&+ckop`#4DKL0Y{r^1NzB}yswkaVY zDaG^q9myhk_${|3#!Hg9>GV`tv5OLH^2JOIFmNGN+h%$x*TiSaabw!sbMGA-UI7!p znGAXY0+Mq3RTPuCU^0FNWoo#2y-WZVHq;MGOzRjMZ!9769lLskz0JaviXEj&<68Uk z`W{G7vQeNVY4bz;MWi6y&_P;cJDR)w{ABw~;$+J-?i=&mJM6)O`b`20+6*n5Bj$?g zOK7RxZS-$iC1??DF^7K|l3dr;m@jS>C zD;U4ybA?|)erSWzL#@Ps#b|G!|C^IG&5(qJ%$+L5a20AesB-BkTWIz^_j}Wy>GFkF z;gv=exm6d~jstfL=1%DOKW)$6pgBXsK@7$x&eAPAz-UtgA|*+|zN{u?F~ESCxQJy*EgS_kjm(;N z*)#=%826Vj5DFl8F!uz+QuTl*8Ho507&g_5{>#ZGz8?KoVf{6z!PR?uh_Ub!n*FRy z6fjf_RmCN`P}8vtF?_#GsiE(fF;VKQFZlJnb%m0R2B=M{jLgCNC=MrSiqfq1sOXZL zZ5*M<3rU$_HW4cH^sbT3VT;f`Hna%#EkDh(7b;qIqnL6kX-pR^r1lwG#ny=7W`vT4 z!*xt_e}wL%2vpv{PQ`PKj=zH;%YzP1GAFM_lED9NgHi4ea-3_X;h#|ob?38Tnf}*a z;{kny(B#JAA7@v5d>TagN9<6o0GD%~ne;r^u8TyRTtY==ouV@^|DHFYl3{f_4&i7f z1tFH!3T$N#I(1)2DsfbOge3j2OxdsAE=1PWqN`>VujnRCp$d@S*|7et^S{>KazIYN_A{r2nO+UDcE6YEaz_;aK;rH)m=Qm zwj!rTuJ{Z0+Xo4ggqGnx86p3+Up7wcr+4@bu05xd8>7|CWzmE|v^zAqKjuIaZS_oO ztv%WKu)t!k?#y}BMNqKmC!=SNLS`_syp$Airk2ZzuRs)zPqAY3-Q`;S)u|lm9>H@* zaaynV50Xh!1C~lTN2GiYnl1v+bpF=6Z@D1+e=fM-N1p7gL(ncmrgr_ry`GEgxC0om1UfbUbFY8iA#B=WjI@)0{u*oqX5jd99<3 zU4yGuWTg=05v_wZqhNoiPW}<8sHtc|Wc<5T2t)8Q!!eXG#GUwzKn}ma1m(g%M@~G} zbl7y{*Z=+^ysne>f`{jt^6g=jaeDW@y5^Z)&=>XB@AdU&zt&a#K8Qa#Ik^k`bxj(< zQKq}tJRCWHL)ud^qc%IAsgOJ4Da-pH(xzausX!#;1w>#3g>KhR8EWV3m zL&Lmtlrj%*a9=@B)Kho4={=0K6COc~Vg!;&#lNlYx()jRSC?RT>L`GY+~ExxHEYkU zgT+sbh`n=wqr3G@4dpSw)!-%FlyB%iyiV^Z43 zF|Pg1OjAXN27dK(Ki@pN^VP1!)^yETa2#W`i(G8P1qoKF#m!1L{m+KOI1}Y4H8lT6 z^DfGL$^_>As-M8Xzh$u6nJ8I>xwUp7L8c>d2{Af`y3SB$tFhcV-W-QfGf(K^yjTg( zE1&qfoSYNvMpoCnj?-&5FF}gB&Zt$oo!7Tzb@Z_%(`2eCyHLSrJ9`bK&)H$I`8T%T zC@NiN$b()$p#vMe5Mwn+(6awsyr1P?vt%NKBNFi zxv1r41iFdx>dZCxi#J@{h)&tA@yz<>Q(;PZx8KI{)dEK-i{$C>`EHp<7w;54JMepC zMUcjdOwcOa+43Aw;3VL$IXlimPTmBLpnR&DvYaW;;=AV6l=tldf{>FY!v_cWv0>!XN)8qGiR=EScmYoqz5_bw$NNWBa?-h*;!H0uH)WN zB$Ty+fj3uF!No#**kZ(w#*R?pE2OPy2MsKm^5OO!A4Vs{qK5C=r*^OXBK_G6`@4_j zZ$BJZd=c)8XFs8Pb?sgpdSG3Is4-3Y+RuzdW`~+;Ebp_F*iJ^ZRw_FvxUBAjNIu(~ zM(sImf%N#BkgsUrzV5TpPp^(SwC(IO_qtoec~~X_BdfFaC5+zrWaKH&cJU-;q5gP? z5}*kH9Q$g3{XUU#uWEQ?VCw#FuJGFHoJHkL1gE(-hBBa~S5 zbay;&JeWmEX3V&e~)H$OJ;w)EepOfpsk)oxw$X6{{iv(ho1*IhS zu4sqM!u3(V4#>i67s<)hX@4Mn+kB4<_37)v>4sg7>77CsH`i3dU5!&DsZG3U=ia#S z;{>y=WTxLA-&!7I%i)mb<~hjLIojoO&ZHN(=$WOvUTUN@*y3z5jo!p7x6}6af@Erz z{Ml?Jvrq(u39SY<2B(#jR4hPFGty_<fAHIN~N| z^D0?A3011?utbEck8ZOi%rW#lubRS&w@j2 zpWa$jxwO${gE{xFuc2g=1Ll%r* zmk}5$I?0n~-wS(#q~?n_Z>x|~#p$-^pP5->(3eoK-^sBfBZ zFst9*>4OF6%Dz(FP-tha%t<+MO7!=rS#|W1i^^HS)=khE2ED5Z-~$E?4iq1z*M3>) z0Fhmt@<_!c=dAz5cSRYnD^hgqHxkPz3}0M+6`3mGy};%nw%j)Pg*tD1_@rmHC;CwH zjAwNJrPHYnTUBb4Qw*FwA^%k_;(!ZPm_vb#u1lBwQYBDzX6cjUF+XZECSno6y@7S* zKh-nNK}*XfUBBdyEUx_o%lemQyA?ZrEVXzbt4L}f_q=f(3}9c{e!FMJ-}$6@HsWVw*4 z460T|9t^4$dN-9Vtzj$0ZGvGsyJ$0iwczE;;Djbre7vsunRBw{Y!S<@_I+qZzB0bd zm-F2jjPb;87ss1N5i;+21_D;rwv8~gESuK+rl!Q4c$3pSovzeX+k14BSMLmfh_((| zuiZeXl-Ma*FhK)o>%`EBjzB965ux{w-M*~%t&_3K&1>%@!RjU0fqJT7jW_*ES~zX$ zo64Dg{s6Bz9<(`K7q3#O$dQOnQ6rdV+uC>AV5h(vapstWtr2j!N=p6AH|Wsy*V)L~ z&qiw-t$xbLG@(tgYzVbHCq>$9_x+_gkIZh`ZANe1(adqd6+PZf!E*~u9ZCfsVzZ8F z%bu9o+`QaA#f-#E1pSu2yz&j=pz6;3qB*~d0E}6`#k4QMJe-5hYo_mPH^7my%&n8J zTInuM5du(tN}%NJXEzO(bxA){q1_|dJHLm^>?yFAPFNkTT4ru7XgE2lL{`G$_#f2= zsBYb=~ZX@N@IHqfW zHwGBzZk>i$8y8lWZ8E%O!CSkq?t0Z;Y^2kgrtCN_Qh`s8&vp8t%!_{5#(tgAICRLy zUOG2tvwgU*_HdRFc=Xrn*X_YP5()?OqZNGy`ihoiT}fr8CtDJr>aAS*E(+0=09H4< zr@*8|MgPDNoe;bVyh$UN8cjw`PP@xv6FdH7p@Wy9%z8NvOR8AWu9?19a~?`T+pg)< zi-$l^CC*>H%0}*H#Y_QXjDY)GQ!66e(>Z&a^d>A&y}{^eKuMIZi5~iOACJR_UU#U^ zN)4Zt+MHY?!xKS!vo93;8^Q*y%}?K*N=P)?%+(*Xt>;;tQm=AnmsVjW$8X)?W3h_L z#PZHM<-@*5k?lW7X}Y<*5vS=Nzp7YiTPG48N}I+p`!*U)t$eM?6C&Z?>18v9n&MIx z^**BFD?pu7I$Rdx;jO7Dr?PNq#2}2g`t-H~(41E37wp8#ZEfl;iiwQsYNt%=%eCrt z04DhZX!^xoxH(4zdx#Z?(OuSyi+^_MzQ2>5KD{0b<)0q$9&~zgElh9DCo+ak zm3kq5m61s_tGEG|P95kj^~&xAVx=%aLz+^%$IFsl;#qDx`dc8D`{D?f*ccBET;fT6 zQB)&#QoGJ+u-d)J=#)Rmbd5TCw_1;evMjm!=f)C?9Hfx;F^wTN$4M(6zk_KNXLpXF z3)4RKi;j1l4}ADf2eXd}&2i$cMSY_V(q2g=<)~U4o=GL3PWsIp?9Gn>`6x~w8aXe^ zXY|5#)VWA#5(OryvJ;tAx>b`3V-X1q2tM;gyI^qvJ?Po{);oI7cwxvTOKX^l=BM-K$M-SREfEcjNpx2Ga#j}_nI_`Fcv3-lb4whwd z#YtR2Hv@sq;@wd@vx8<`Aj}yt3VzwH)<5XdV;j^XkA6^r_T$_py8<@vV7 z=c2vZu{IzeT_j_7(kpKDWj#mGaphL2x0k#R2w@vhWFYv-mVyN3Uu{!7-=DIBQC%Be zm9Z|-_WQ$kTyRvz7%-H!G%9_2Hi{MR3;1I~BlqK-Xrls(JTcvGE+? zVu#9gnHxpadt9Y4MJY4*Vb?-1&tN|xWw3>`ZAspG?bH5cL}+TXONX34o&GskcAFY)Rp@LdlZs)G=e0E@QPvAoRo1D- zU>kaQ=icjGxN=F&@35T_lX<1!>E*_m5kM(x^y-fQW!}NlSNk zj_%PRt2T}DA`K|6(5vzHRFhtcoHcBU zs#YPLF8@*4XyUb`hxk|k>2BxWs8Z)On&ou-r$UT~n4(G`J&jIt{2bR;{9Gc>8umtL3RaXzY zCIKc2cmGsjwcz@4^l;SoK}18%x_dd*CL_S4BS+e z_Q`nLYQ)HkfhVzA?P}z)ZybJ~Cq4WW-aa#Hx064NPrfFCEjO3!5}Yio<-YncKI_Sq zt=#-iiBK)7vF5K9Dg5Kh|J|rZ(>wkXOB6nGXd|Y~{H3Ss6f@08T9O($b_rmS=!{!% zgDq#|O9Ght_a*cL@oO)?s&JSyo?n24yjrc}G)SXeSBk|#!Xm7{%uFD;Lh7LT?mlJ;3*R@;)XwV!;RMevbZrD4V)V8zxw ztfl3)BKrXVmh>_{XVxa1Ui9SP4YZnqQ8YQuf))n{vl#6@;u++OKacf}3L~z>uk}QS z`CZCcpMY9Sj0g;$V~~H&x7{%YyN!t&!j6?%oo~9{kn%Y9((kWPYbMFB06Rf4MvuDzt zDx=-ph;yjjlm;QzLANIvH8=#>;}UtMvG)%oo$`2uEG25_@0XQ1OklE57&ySZvOqQN zpF&9`j7nk>_thdur`;yy^BeyBAE9IN@6k|7rwgh;UNI&K@TZ#hkmQ_S#b?V}2M0$d zjF$0YOs^P@5N7c7{b|Ta)`5RZd|xQNWA(oK+D!QKOdJ#9jlW!$-sKe)ewtp( zth+chbC~Hnb}7T8mY~v78bsyQ3^#IVe;#w=Y0#g{?>kP#J_p@wV3Hyx8079mL4euP zM?d>gJdF$4Wm&2Zk{owvLIyT1`Dh*GU-kZ8Z^rD!L@{>L_;_73pPN?sL&Di5U`L!{ zZK2+1-D=}EwH8C_Y}-kvY3xw`M(4BJL}h`8cd^FTfE^lPhE(EdzV`1%T4zkvE4n*` z-N$==Cku5we4avMv^VWl;$K|@uN>*gUf#^k-0Crs)y0%h6li_O@-cm%CdIMoAU_;= zaf8EYK~6DxP+p%iTi+b`v#gXRSMsJ}U{KQcZy2d@EgN!4U00=B(jZemwl5tkmuM$6 zs&`^-b~a7UAk4z*(pdBTtFDi`D=%^yZt{Ze*nj4&h`wr78CamK6ZzQY-RamO7do8V zQWYzB!5KRVMfaXs9;-d!`D#Z_NLi<;J9lsYTih1SfR>8EPtKW|LgujvEN-WvU-k;m z-HN=gsMw8^sJeRz+q#!~&7^$g+~L^ZkN6Nn)0q?_Y}uwp9{7G z-DlZPH8XuykY(Bs4Vt+rw$OD}ZaE4bY}Pys=q#?0m>%_1Mh@J~gG}1P3rlPlV_562 zf%y^F)*4TBV>;SC%a&=7Q_@PVa!o`$FuMt;myp~2++gHqW9kGjcO3v5bUw05y6_Ex zI{y8@rEmY`zziD7IBNSYoOD?X0%hBqyR}<8CX~)Di)ag{2jlVlmV&c@7%2I;3^E%^y}&*=APqvrH0=xjM^qH$9+B>xjBynnrL4j z{PPc7J6q;0Y3}A6r$xu}_vLg9Zxs1Zm7l>im~+E}DK9>6Hd^y88Q~AL`Y5Mfcm>aN z={T|9`6&F4yD86PbLtxuPsXic>$O#H^y(&7NfPWW&fsI*eC*laiorpVnqm5~tPSeI z%zNR-^D3>;ltpy@TElFi>pSfs&+jw^f{U+G6}E0mFk`q&eKzlnRx9W6R=eDMa8~mv zOy))9IxB8GBde0B=kI)r%QC7n8h#Q~p3Jh?)2n1}Je+@z zm-nJlj;6Z}z3kn8!;8rlzs|pvVl&1>aRU@Qomz@;R4H2DUzICP+e!q4* z%>^5}c*@ zG;KY}tj~--bQTBOR~lWJsJ3F>OukW?XMnQFP3*v>nDY~TNG?}S4}=pxzq4C2XHgqR zT=7jkYmpsyFqwPW(<>xzpzLEwWR)(FtW%C)o!x`EIRG$^jZNp1uKzTKN}j;}rG#k` z8RmPh>NzrGA{!Tw!BeM(Il&kXk&`~&ew>db9L(%jrC)KEMLC zT;!5KkZ}$NJZ~UBNj84%EA<#5qTFvchum=E$s6T)^yTKig>?+q`b3&^sbEIzr*yl( zgihI#?$Ls9W7FFhv)Q2ohX&&Thc?Car6nG($xGbl=AV@&dt6$mENS_RK}R{RiY?BX zL+187)on?!BVO@fMqf$_iZ!U%o8~*QPCo-R_jjydyYuf2Fq=$4BVcC}kKM$((gzGP z`flFfw2ySmHaGa_)BV4vdjJ=Rfod;GvP(PIz531FJ0=vWgWYJtlhQVtt=aRrp{QOn zzZ52~pN%1OgwOWIeJJLuUMllj=KrO6QS~Jkryy|Wd#udOPoL@o?&nCurk7mqWh{O9 z!_^@Etv}jG_ShkDa#07qdUW!;S=e-Ge8UC*@@FZ?DGAc$*sRre=3hRBpAw=CK2JPb zYexzp+4YHvay+M@M8v$Dg9r zvn|NUO74@`&ko!vKSmb+_azY$u^jFFmbQaJ@Tvws$H?0uhlIuhgZzi$F0Yy(z`=vs z3h{fB%V%9km;*U4O8nm=+lLSW_vd(I6O2 znt+ENv}o+C(&x{a;&59=P@9M3?rZy#W3?)0gfILJV!@Q4POxa_IwkOv(|h1Bvi^1? z7p23xTGotN1;KNLM^O1LN2V;FwGW!+YT`)r#~rq}{B6Rz;Z!8-?N;>6F5UzSzyAlr6R=v0=FmiPg zH|s{%?N>E+zd@M24hU>ILm9b{xGO45@3RO?lgq9pFotA_R?f3BXVF;M;5U!O=%=bw z$7DW^xQL00Ngl^Cb{_hPTOVkRTp8tG?|_E;fGy^ZxTQRa=nfE-?wyX+&e!J%INt2p z*E@XveN?>c2#=SW$qi48rTeEO`9u?ajis8QIVAsn_{+q5(y-uCaw-f;Nyy%3pb z9KquE_UDKAhZ!7Ee|))LDn=|V8SagEjJbuoEZLDUV`qOkV$3yRrv>mp6&z0%iAHnLdF+4AQIJxu3>cP!*dH&h*_xMW?A9w zEU0BAR>2D2KmuIjbiU2Cj#iETxZD`26pX^$-CTL(IK<8XEHp?(uRwR(i-3yjui({$ z6m`4Y|AVfN1C?d2O)}-FR!9akX@phRd4v&~w-kmPB9~cbdz8)}i{;U$6-Qb|{@(~z zQjlhEwq|^32HR(35B23t)qbo_uM2PCl{yb6|0^kGd}U-J;&&c&JqM@~r$lGZG>9jz zfdPTJFfhN*WR#U3fOrku$NWBPcXw{xIZqCX5kP(RpDxjvmUv$Az?lPj_sKE6r%7=kktaX?>C8SJLc89Cq&{R2dkO_ePrJ?!{!fq4& zD(*4B(|_D6vONIytL>=#8?X8 zAmCw7{EQmKraCU@7&<^lrO(cI*t)v%ohPC=utn)8-5yz?z$MrGr`51|3hs{E*B_LOvPh8G$hM*6sb-{b96t4$ zR50Xurpo!~-Q_rQkL(m%z(b&mr(bZZ^#X!&{rL8$&4-YJ}5#w?jonXz&HOTNyjqypqF%+eZ#cBN#4D%j99JZ z&#JEpmm{T+-7nx|YPhuX)J>2O*g|2vE3}3fY{@)fC$;TU`yVe4gvmjGFm#+sa+wI4 z6SuwpNnCuh(5(9?YVGwv?6SfJm(@Rw)?JMklO*(H?MrlFLAkSfe8xT!=hYsxC_ zpB-P36@{cBJ~IlxGv%J17*FAy1j7y1>3aj?rD#VE!Ja=G)T8p#Ir{cX)6FtA(45Zo zAm{I}&RZTUdvQR_A^i&>Pk!qeAs2w3d39;XUXE`+dc$`Qmbx!*x8F~R?J$Uwq4oyK z!;tEAWc8d!`F>|S*t?2`?f2tpA=v1C3VD@@Q+CJP2Bq}Gg*IQA3n25M1!aL-@Q)^$ zIFb(jN$_W?vj4>wP{A)6P77&MhE$VxyXdYi(9isrKF0&sV7x0>_-qs(I%df4@7 zr9*3St_fSHwDt)@h2JGVdm^9JB8!qAt#kV70-O4smm&&?AKg5Q!xK{7XvN?)OdS(d z$86@6Q#8dm@@TSBug2{YzVux^{{2k<5j$E~a95as!@;A6l0BD#qD^Av-a$XYc_h>YFo;HT|^y2;nQ z%nkZPP9=2>1gzVj^Jti<_Bc>Q^k5{?`ofw)EQ612rsR7jE4Ea#&>s>R{Llk)f0Em2 zZwAS^2tP+J@7Sul70>z@kwXjhdl-WwKI3X{vDzTJxW9Pz*f`(}cR6Lf`)C+UGWBBP zy;*qKp_wy@6Jz^`8Nph$$AoNyZTOK5lXZ!;FxivEerDF$r9buzsfd~hoU!Kni<-56 zRLg4E{t&0uS>5mC^;O25ubb!9tSRf~;OoIH|9qUfOB{=(yHJliJaPm#X&n~5JqVnj ze#`hl8Ml=IfdkaS$qt>GHah`Z7xTisH=Tugdjvsg8$S0GZ*MP}R2~H@@szG#(;PP^ zyxIYAP*yJMlhqf=na!884JME~k(>LQXNLH+s{!?awm}W2oyR<9EIVKjn$C?|cehsI zeSm;f`g)fCQ5$RN{z&Aw4if!CbR7By)&6zlx6j4K7CAM=Xl(*8a&Tonq84o>Uz#?e zAhYkaa7}!OcIE7m&V0aDnircb0A7cswXt=oRM-As%RN8GC0FRU^US&aa*1M#O#>`L z=n+zZ48`yT60%3~nQ@I!P`mfXq40@i;Y%VFVh$h94@Lx(U|Gn9--n;Ksd!^Th5Y`{ z%rnRH#bBNWv=oLw&cNQAl%0wm2x7)cxyep^;cZ%Go2bk?N}HlK#GFz4C+OSV+8fcq zJRy_i2`Hyxk@dvM`R)>+&w60D2&$UIk=rB~?hU1qbV(YRJhnZ6J^as?5G~9Pa8f)j zaX)=9|29@Ah09^}W3_lT05@IC2A5%n^29k?A#|UpR;Kz;G*NJPwuID%vQD`$PxeSU z!W7Ne6!-n`*dYgN*eNxNtuaxwkMo!u19jb8e&LVLIV7D8nMr!`30U8@|1`=-h0;M1fI2G;rUGxvR0 z_i`TxN3|}y+bg|M&JA*wB|L1K7In_(%F8|S4@_E2GbVGPZ zJ|f_3Hi3rD%v!%qSt=~WlHu8ub@?_bkQJ(g^m1r+_J|1Qag5=?V!DE|RqsV^`nxn!nunCQ%WJWQ7`#PfD%F;MI2UB~MWT5}?eMvzk+DBT^oW?i zR>xeDldFV3fvI-HU6m!wzkuUYs7lO~xO?h?iB1pfgH>UjLQ*qwB_QwNa7XAoN=KHBY$6&H40(7EYANlib}C zR=e!Bb;0|ud#MjM;(V*TV%l`;je(WRmv28E$DMIdJ##|I=ZYa#4H1&n$=xi%`l}g< zzU?($=g$+ziBbcdnJ;GxJ~`Q+Xue$v>3G6r_3{Uj_HX;}q=`4DlpIR4+h(CU=Tkxi(knBy=V0td>==3=+eZjI^^>pvuifCUla2PI{#ZDZ+k9ND9god# zbIJVKguKtoTu(!bXFI2yBlkyK6YU3&PhF_V)-wQ(G$=+m!e8s%5*~SKbDHT+`UZV= z2?9EwscY``LGAkYaJ^?AM?_(g|Eojuds=SoV!+tq9_ZKWUcDKQ#2RAfPHl@Lkh<)|jkVnvu=059ZJtv}}~Wc(gcT1~fZMIlnY=K8exy zM>MGIn!7AR63dpUK3T`wjbwQJdix=FnL*elZoNSY)szs}v3(QO`|a1B!C$-(F00m~ z+74PZMr|wk93A12@2-$z&}IX^fz1ZH)WXr`%h%2`dhLM*e$!tLn^&==jEr|9afR8p zq#gZ~GMkXuH8p?upN0lzg7}mh$vH%%er_Uulk+ag1yseJ$^QO2fVhnzrm`WkPm}8> zO_^4LJ$XqeewBBo*6AreF@YMPYx@3Xtw&ND3wuAKIi+@vf__O>OMj;cvmYdo4gDk~ z1>T^y?GkNRi6yXZqDF1j4<8fkL_yhEn?t7tJZ*Xv(`M4Uhi?%?1#*8%st#E!BWSc$ zQ)C6w$5Tg}SEkN}eyL^NZ0q6X(x3-JImQAksC~~Tsh>H{ZL;{Rc^hH88JJYszZXtb z%yo+la@ClaM8M0F_pblCvG;TiC*^2{DAlY!ztG>Sjs*)J{I+y|#=W&IBYy9u+99)0 z^_<6@_^-^LmC}X%xx?8^VBUqoi z5IKJk*9WsW1+&FiA>=cctnTX%?=lcQ+`@#Y9)&-$7Ql9sqwSYG-V1mnk}WSqiV}Z4 zZTk4L+FMV)R>L^B?WpZbmo08$G;j5@s=FlM;F4;?Ux>%wmt!3Rv_4f0F8@^pY~F8E z3Q}S!F39f?b5Q#iS*w>{Kq=*++D^YsP!95`cL%DvoB9Q_`j|6Q3P}+iYc5_d24u^A zU7O-7fOUW{=x@7AR>YpVJyzegDJ-&G41qaVQz zVUlppL4q4<*Kd}=t60@eD<;3DXna;@i$`l4TfKfyYA;pI@0Jh}0`?F)l(E*uH5!&I zfc+}Hp{!bB%>VEBRV__)K(}8Ku0a#idTVb=+85jLEvNFszF)^{rD4EO5iqC(01aOS`dn7;I@ePuT-8I6L9r0#l@sS zZQR=bD`vb?L$8Qlkrfey1q4}*aw_ZrUa(fZPIO9{3?US4Oe&-Jx)IEDsgoJwI!p7010FJ7t4Z^|=%`4kHJurZP1||2qT5$5BQ%98 zyghA3$+xeHKJq!Ere}ZujDH5FpdDE!hizYFdWQbCpAeb7K+MSmW`YN;N(ZIC*myUg z6y9&qBj!iAJR>E^`(oim{CVTLa#XJ0se((`{>W!=kAhjLiMQJrwcwP;k!e{dc=L>K zTwL5`l{5nzc1vdljuH&MZ)mVUpBCV73J5=rP^YZ_k#4x(26eyvf@O@G-si>7))!Dq z^xuy|yx^A!%(84+afO(PC9Rp%zFVi;r2q2g*7LV`#NqJ;wYO`W=6C@bXOLhy_zpe> zK4m`Mh1b~9T8KY;=B?c$+}^Vv$i|S}+2#td|7!#@ZT1A0g;c9kpu$8YzX_`o|2%QA zp`GH-*gG9c%1-^JmxljFRT`%f_BX-$G85gyZ8>ko){z)UyL{iwJ9V_Q*uYQ#-1%wG z;EtL)@LudbxQdda9gVXQ4}CV$l`bkg8t-AlDX#dxf-9ejmat}F?x?|6?*-3>QIRe~ z!VNuMN|nXSb@gShCF?Z70VZG3$xAH=*!6Ndj!>{3hT&QXwKGdW_g3m*ZS!OB<09li*N1%mtrxt9aCYF{NQ@%s>(`^WU=aEr|%g$-7D@a{@8np<1F7FVp; zHub{`L1xj~jzFU|lmE(5ix8g6QxpU!7C^p#YTPVgCd zoy~a0P6vZjL>T2P@l|RTD%W*NVXfh_R_Gm}(BR9d1jbN~eU}U?d06Mf7!*aap-ZmD z#e390y_IW|p$sn7qhW?25T(*Dg|rr(944j*5u z*tzzAnfBisGP^R0#3(%xG5F)6*S!Yd+jH;@1%d3KmMez?tr$&ADc2dOx?oZ>b|jD@t#?E*ZAR6|1q23WA@+T>s%54 zB52*DvFU()Y&@T_KS$>qJmJkWm*}#WlB_f@82xB|VlNdcmS8l!(6^MjhDU-*ffqYQ zLr2D=n+f6I`0eu`Oc|=t=8-+0Q)BT79wqG7Xln)R{%c5j^Ye}d*sMQ(Ot+P_FzIrj z@A64}-Pa~<9p4VeCZHRI_4aUGQZw+zCNg1?PsitC7WJpD4Oiv&XXll*iY?zD94oKS z#?hQs*hXjpV6P&r|7jFc2W;8jHug`$EJ5|%%Hp^9b2Q_P%KM{SLqM?9&?zoI1JA-U zo55l2(Gp6VF3QpHIH;O<{qF z*kdSor#Errb*HgMoLd*PL6^cz`*h%qcOh?N^BM^7_LFnJb*d>5KLKQyzQK%QrO~~- zT=%c>xbAxJCwS@ch*n#D>&7FU(R8xLc1FFGxk;+2-CNu-R0fXOkAcQ*IkNFc*D(7& zfxmf(fSU&-qWNr?+wRzGZ(8j~x*NS^|4WP^#d(}nUY>!k%`zX#q1*-y@j7Jq zdM}Jjj>v$E@fAbv!%p9rE@@`IjuLQC%CuH>hLxnMUsz>d(W23%3r}rdZ6i zutr~`AgWe(u`^SIgcpuG5C7OzInf_V-cN|elv z>&`FgI@na&I>5aA7k^I`)w(8DeiCT0I#q-*0gSFgOLX^@_Ta-lC1bcMFJ%0Oy=roe z0peo3>NrHw{qZJV)Il}hir~rbbCb+(7Dh>hGP{Y&dd%nXFCw(Xoc(k~O5!)QPN{L} zkNyxdoW9lSpVU{4-V#aGD|;b3H$NXNXpcFH>I|SMKQc}*ufH*aqF4cU6_5%Km#Bct zic$UAat8@4-;6jX>deC+N+#Uu2w?N_nBaD8kNYq2hZPT1NL*xAXz@?iRXv0uhmLp9 z_UlMGM-?R~<*YjjX3L3Pv?#R*oDB~!Z(&b3R1X&{U8Kj%-+K}HrK#l8LdS7HrLn;l zn(!3g3{v+3@vMW;9?=veZ>!u?OZ@b0O}{QY!pCoYiUoAnvofV`+#iV*NJXfZ$x$|^N$+R=0Mv_t!$l)$LSLx#tl}Ncp*rKQC>hiXx%QyVlmNmmC zZhUfX_TTy4vQ|a0_?R`LNX`D0%kR%R2lg*b?O^_HOE)*6BJ-rSmwh zS*7c^#Ps7@381CZztn+(vZ)k!2iu-GSTfY})n5f=@j0e0*~b;e?>s%PyR8M@knD=0 zexLm+`K{2!9!-|N(@U5@7(a3h4hX!3UBmG;T?>z1MbWB(D*fMU#g#b$T)VMq&MT|& zQ|MUNpWyfN40@;L01_$5^ZakTh7dQ!my>d|JIUtv&}+wGGcYlC?suqAQYstUAVOJH zP)3?p>~2cwEc$azN9p@lg!13&$?Cy#!w~e68p`>6 zoG(TbE?OauXZTZ}CC669liXOQ<;vKCJX+qG4-(L_nNt0}!9UT*C}71KtRsgZLmM{BJ;qm``9{?b&tW4zM9W&U|A4~`JJ41YT#^3VXKYaX9C5uJ$j_A!}WHE?PZ}qjG zY9j@42jM?(ps2hD9&YLw9-+-Q`P^yeNW17Wg3>cBpQ@mK% zGz=*H9USp-RqXmgRG(o@*KUzzyyIAQl&(v5`ehI2D>-ApukZil(iz^rNt=ouNN5&n zn5jX3lfMbBy#|6ns5m1E+}YiylFuX0gAf^fHl6aVPoMuLW|+0@!x5OBNp>*k6w(o} z9b;K%eOLHMv;nCTxb6MYy2v1HwDG$lUN)i&#fPk!xOH*}t*#=mnhGAr)tpeC8|#~z2rjq(&fc-v#!C9h@Vtl?@5dldBudASkjG&` zUh(GJfm4MdK;@x3BcJeGcCj_Su#nZ|dhpdmq*8)vH{LlCJrkjRs8K z_qHBAy|b8yJh4u2I(*yIPCy&+mWrMmyVakq9N6yD+ZkFcIaCz?^MW}6X5(; z=K52%_%C<{z^P??7tveDGY`(|YL{SPCL}V~x5VQNaKCx+%#g6}gem8DQa{BgSQ67| z;js13{4@~;Cx5$y|57Ng(zlwf8#Veb!MvhSRL7eXabj^4VNmq<@T|^R4cGo}Tk9R1ox7|5mnI*%v-+ zu~bd}H9!eV6f>jG*m$0056BC4$`)R^_a=*u;2qRf=x?>%f)r}TrNvfTlZc%)Ag^3$j_bB-&Ar*KuR%?dRW^3~g_bs-4;Cyt<1HNtGsmke=sMToseIw$C{5#j&Jz!na#wn zOW1CL#iTG0M-d>6Id64LlM6Z|3m7upoPRgO8@d<5wK;DQUeM`ufh(uJ=*uL4P}HB2 zSDwZ~hOKNWHP?KNYQJ7&cd_Iwu|8D^kA&S)LuXrbj=ajnT^bvxNA-$uOAz!@bD+c zSRBQ=WR&-U$4An6(n@^_?j0GvZ{wQf#H3(fS4XQb!9Oi%Z;X}TmX33EedTw6UM47t z{_`idW;at|x!4mMDq<@1XjNm3cPP`;Dz)uy$X)oEc-U5 zZwJ}9z+~@_XiKuKi3-135_@^wIs=N)=ZS7TlGQ>fsF|CEdmQ}#Iu75-bNMvU5<}M6 zUlVa8Ivs&CTMgqPNj%l_CE)*A6S<8ln8OI4&8KP#IC!o%9iTf^rz?YJ87E%R9*zj4 zjvBsn6|#%d#n=Gnccf)SEKX_fYn9iX5COf@I`klq^j-+{OST)hrMVo+q2yF#4Y<{)U=Tg z$4Ug5e@|~JYf!RYm?JpohiGZd^v9~}axLiQHlTB{&LOnxW+TF<%vl`y)0b#qgd>!1 zhP#Ip5Rljkhl9B|-$LHL`m!t0SR=w$e^8-5n-g@Zu!kjBj?YqN%3xF~F?7E#MM%OI zc8Th`V;h`ABnHj5si+9-qvuW@?`^4=u{I&EV_mk{==_K6)}+N`aJrNDB}YpSp_xFI z9slKj<-TWG<(TY*<$YpC8<+B8UYyZA@*xWvbO%=@ojiH^8&CX!wDAU4{G5|onN<8# zb%WS%kG@!=vqnlm{u99NMRLLIsgPbn)hZ7y(}&j%{B9Cunh*m z@O<{4oK%x8umpmsBy!p0ChZ?s(N+ori|U=?n3#>Km^d|zH|X}D+NS5?{y=VRXYeeY z)U?HaeAW9#->dz5?hdq4eR2_dF4c8auGG}6@3sI79~L!Qskg2_T{`|CF9L{NUnS>l z>v=sfINUWj*ia&Du<2^dKxtFid_vacS!WBrTU3X~h7))_hmMD+_|%!tDW!fo(Ou?> zD3!Qi*`3xJk0UKn!6?ummKw2VC8Tk*!JP-*#)4k8&#yfwh=I?YC>0#1yFvnJ;nxuM z=hHaZ@0Rquvlm1clgy^m54WH~g2-GDWM{K!8KX!8t~NSP1<^UCW|`>n zr0PSb=M`P+?$H8X%K;V!{zFG5JdpwA1n+nf76J|9CRV0SZ`_mNa_J?}Z_9+2<2$B( z$2u=f2kuAGnybg08wRTIt-P+HZo8JwTC2Lf)*Bq#tGM6jx75%UFLLV_atUK1$NWCQ zb2@s0{8SAMW)O-hpTD}|xb>4O>}t~C@FwW;Xt=;mzt_WxO1+m@hq{(rG@m?HQ%rk~ zbYgDFubP4b5X3KWVSLo5D%ou}v#_0}6g1rM+~`sF<(~c{p*Py0CF090fi)z_U#VZE zKR(4Il0*Pu<8~YP9*Q^Djx~a`j$YO76m`msD$CqYoe%#Wq^6c@R>1RJAKL*h99fGO z8`Hk655!g)8kS(?S-g{ZHVNVGDI_m$^Z4v|VaHJG^yYiu*J>zF=fE-j8U*LS#L*bI zkqqT%AE~o-w$1*6GIwGfHWZ>XAa#wrZ|6_JIl9a51}p-t;8Y!#N9|8R;HJLvyIOf? zoB}|+qs~EXaU4a)CnW@(}l7_2K#uJ3zWi zG4|fr#l6$cCnM&i5=`6t@_RAkMzy)ADnNt_!{FV6Q~>_`o3kaL6>oU;*fpiozgVJL za(w>3mM0OkeqFFeiTnN?6Jg)$bL{Q&Rk719n1HxP(rIl;4C-hWs^FmAkSd1KB}I(L z!yAIqOR^)1f+pLC=0%RgrdqKg=&owX#`1~;lfYihE_c&KJFLeJ8Cv-o}iQ9th z9^(#Vuq>6o#-ay6_(K8T*vEZF;y*VyEOAfnejE*N&TNpPEZ0$GNToR#-|zG8qP-PpfvkIk>*Q=8ng{i2spV_7Ht=Mg5={DLvK|8=B1cMw50>0Jap= z8EPQ=ftAnd-so=$J%cMD7I4mvr!$GgBE#te1qN{$kBPqaoGUSw|-?CHO)g(xF;`Cexk;eeOgl zX;RMNNa=8Mgdy%-Mg~5Nx#=RKQd1`}oO`abU%Gffc}g7!iP7%*%tTWyG)4wwL0>Ut zi>^X7TY|%;AV1|OLw$f9YfUJPDpU{K{VIB6L@-6(__O0&75CS2f}Dr|EI>Yg4{LXt zG2~UTOSCMk9}Ki>OOM-Opb8lB#$Rs2y!54!wa`J0hPhHISWUO(bI}Fptfbgcs7(rpuEF zq0d#=n(x={PX)pDO89wiG1=JB8tX#1Y1tmi79HQusw-PHq*ba`6S<~i##|8Qa6X(Yn;sKLI(2QEuGCAmWvfwj|VPI?ww2*52M~adeLx&jOzSzpk{L zx=o;pqup11FRIMh8*VS?;#`GyM*cCa;0agsv1c-fORJK{E68@<)fT&l0`OKUb+l94 z(Op?T|LXlbt=D&v1Fg0EA@8La@|qz9(?GjtIA4fHV{<)cb@WnZ)1@CdfJyT;!kUNk z+~oYFM+6SH^q?m>9DJ5=*75|FdRoEA;S*mqiZE_T{1arB=S3R3^ zmXo3d1r+yw$CWrHTOE~GHP-kke(Hev&WATU|4dZIjhKPoxf^lq$sSO}+CXkG5676~ z5yn@#;qh(`v|WY;hmz^Bpp6erQEIbzVT}22YC|Q{<1l!Z@n5H&v=q={Nf_=xm|E=- zBTF zXNPr~+a&!W$^z3|G4&~iAC~lrKNv!8zs{$|chWKna2R=~Qp6$Ai9YhD9X5(mQhiNP z(}$x>`h{CrRVX*7(nJT{el3HSSO}B?kT=NYko#pd@E=ht=HJ#9-*sJFz?X*zo;5ObF8|$!gJ!39_Vtm!3 zYQPM4<7?J0<3Dr)uER)!O4_;_{=KIEr5+x~N8#@CD`ys$f!5156EKg!$5=?&$2Ej@iBBJkj(W!DXD~Mx@8GrD6jm4+;2ZE;sa0NO(|@hw z`?~-4A-05jg>n|RNWYZ{0~j+rUF+-1q5Xa)^0Zi``RBJPNTgky$i;~`G;O3Op&ZVh zmK&i}(1-^lS{Na#wd(tsq;skEOvChxb&=H{G^8X*giPHx|5JaCts&&@MO~!YKr{x+ zWI-6H+^{4!>uX4!fY@-1?9`^@PCWdAX*eElogoU#6;4U~m9^!(lCLe&bpgQ*r@U!z zPF{li=cmWTgTZg6N`ZY?dWbcT8U8j_n~YqJ;M!(sgVK76db})hk@GL{^P_9tGW)7s zftb2S8W^Fw5}#$MrnlPf5$VR_rNBt>v4O)PR+pkwC~npBJ#40+xKOP|Tbyw5BCFG- zXOB;2ldP{REAW%UO@*Ula&`@jC^$CbFlZ2Nau(IAF)U1Q&yi~9d90D*M>`EU-6CLC z%js~0_N>-u&f0S~%VaYRcP-X%{}|Tem_TE;L~&K`0d--uvu8f33%6AXjpk~Wh}#+4 zT%DP+-9sUb_U0iBUUF!uvC@peOD8`L=P-Nd?5ehcX>$dTXqTgQmn2zRYD0GNfRC4M zY$t(-PSvNoQfrAr^cC*dsOc<{w)b{@#6Ccmi;P+cgD=Y1PSYHGKJDGfN6 zS62uLCCWRg4+?6?7n08UI@sMadbcZhb#)yCHMkGevF}vmWS;w! z_zl*Wqy=nxA6cI52G%0i{MXC(P$%5a@FRiKw%n8m@XE0jcuO5etPxJqWVHm7i(CXXmazB0zch%UD%8p)kpdok$q+O zH<6z)r|R}VC1K8)@)u-=o(U8hc7e%?bs`}m-X1r?U+hQTC#;Shb^4rj@uVMO4BA=9 zTZn(xSvIm`$=d48*QUDV+CRK8sneW_P~uR0C^>WwgI>KxKYd9Xy_ z(DU|L;Y-$)kD1F>LWMUuqI%a24PAXVtMkB96M34f1|iQt4hB|0>x38ZVr945NSu<} zZo)8kJs7*Kb4H2E&KObRro&lNP%x+D&ZMM^)*GVFT=LYJFG=-baqk&B8tXzW#ip(Y z)81?8vYa|qi=(lgIfGN2#?XnAx6fWrg!q z1|Ic{^UYz7V3+lv3<(MjFZk4s<9=h;z;M9N)dAX~*t3p-ZD(C$y-xM>CpETKskD}2 zRR&S3!4?fKE$kx^4p~Q-7Bsay&ch`_ zbkR?~Bad&a@yC64c&_>6UOpFN^JCWR3xtA9h$)6SHp;jtr@6tDua8c9ocIpUR)x9> z3Puk*UdPMwyDWR}w{?f4ZGANUj(~9I@M;Fd18ZcOeHuQ@b!p}_NAn~H?^x{gzRNgR zA~W;do)W;c)2s&h<~!s$9bb6a5pqPTSbi0gsH(F`f6OrmZ;W}?utuGg+eLF1w9G&a zDJ5&-!3w@|<9XL@ALI;O=j=uXhD~~7Pr}#+_bR?BYIWGP9LbdW9M(zqM{I&SP*sioh){Jys**}{Zb&5!tw2FtT6HFex|N*01wz7OClcR-1i+sy7i58 z=yAM?l$Mg>&#yImu6j03J|%|-TKnKE;)Z^oiAlW2XuZ*ICkx{hj-n;CZzCN8wpH^d zJ{^oRv$d?0D-m2Dzz6C&`h`lL9lJyJKa)~($PQe#f~mlr*l5{wzPBc-Nh-ab`9WPy5#Eva+k-u5i#_OYTbm9`BZ zSw9`_5k4n9btY6ZC}G2_gw9p*(jUgFK|wWGY0YS*Z9wq=LtY!d==nm+n~q$8sgf%} zZ&XG9Ue;|~wuyv`1UV~5z-|#0EWyXu9wxuke0BvtNGX!M;0Fg`oH$B^`8lb4L>C8A&Qb5aw=+5 za!5~((<5?@3CppRk<$}%tT~lKP95fa7NHoAa~n1+hRwucSUI)WoGE5D>-GK*@5lH4 zU7xPs{kuNgU#?Hrbsu|>-~0Ldm+V^v5rdOQw@zL@#oCNph1JYFo9?-+I}J%q6%;zc zC)pGJQ+bq@|5hu6$7Mgc4=S$L6{t$Wvm{9_p9pU466FiLs~sB|g*e~Q*ss6}=N~|k zeeMo{Q&H8P}}_R??jAjRGV zRGfuRiz4E--%b?dK*ItlZk=3z6BCn74DSFhAQf{%wg!oO*kczh1T0MY>%|@vgK!GfQOX)@QEW$*3F+?ych)7t6B)L(hYuMe{)A_TL-Ul{ z(B-f4>#qS01l=HDno;J@&0q5v4BDsT4t3y%i3vke=$Ig2 z4%(s~o|PCkfr`P!>Wy^&>zE@hiAXW1UA8T)_tKmmf#gTH4y=$Iw{A0(hW5QzSyTwr z2hLGq58qE^I7~5~4-j#d!lh4woZMH=y0=uFV_X$dcqCD*3GvN~d3Tk9b-6n^)xMbs zyHbF+R?!JOD{rCbrFSZ?!BcF7unE;Wr>>B0X)RP49El5!-h|JFB zc0zQpGPS~r@|cqbF;aNEbd)1uK?JdSr)16llEbRwn@Vm&XT@YMwGfBsroms<9>l97;XEufJAwKyTEN z$uKf*_^`ZYN}(JKOO_#M#>a&Xtik>|8UbTDmc7Q)CTEG6rFyM(sIaf9gyXsml;1_ z)n;bz5&P^L!-P8ycATm}P>$uP%a;gyZEO+wtfOhDIT2_B<>iVN&{66lv zB=DSVv`P@6L~IGlDE7kmVCH0{=^0pG_;_=6c88?3T|2>|`>zFP&)gB6wxGV8(`7WP z@7Bw!fo%uZyS@|(dmL<~-Fgt_8v0q{{%OMScEdv4Vy~+s6?6L{>Vic4QiD%{m{PbE zo;=h2I}>m|m{wZ!-WY+M)gIcp6Zrhi@nI)4y7S{6(5%Tg&Lc_k%aEGAU|?VD+!1OB z%WUik%7>7-Q>Yu5`l+;FJv}=vA86p)9Y@=Y+Ms(>P_T_vqm1Zg^sv(yZD8B1cFECc zJphg!ewrA6?d5iFFA)mgP5uil?vPT6qV!n(KFXKrT(`e}vl#@s7KzMhuPkwJGsxO$ zKAU)OgrTeNH%8lqNhh4Pb)5)JC$nA0w(WZ}050nAsNC5$!hGDfzQN}}M*oXz`#e5< zTi%eu3xjJNnElcWGP71hILoHwD{+WKBJ}Ti6Y$tcno-JlJ`CT!*25^?=*D4p^VRYX|7TbNb-Xa4MN%elt-ku}V zP}=%U_k4VW^ri;(oUojfSlehk|Gh7-U5G9=T}zb z4?OG-tJN9pTAtRiuS`|?FQxoX30O~{iF~^M>6Ns_qnG@pkLt^!tJLyFz5$-+)r8?+ zD_HZXMI*wOdpX>OcYIura}rUIuI{8tj+pjZe4lf@d9JF9pIJ~|37~oJ;bAfv=VH*9 zPH_v(@}e7&i(hzY17W8{>N@LN8x$AD@Ycy6JI!Cliz4MouaXdq;DOkY32F%N@9*^*d9B*B+XFL;5i919x zpweA& Date: Mon, 3 May 2021 14:07:57 -0400 Subject: [PATCH 18/18] changed how runtime inputs are parsed inside program --- runtime/qka_runtime_outer.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/runtime/qka_runtime_outer.py b/runtime/qka_runtime_outer.py index a94e6141f..3ab3471e9 100644 --- a/runtime/qka_runtime_outer.py +++ b/runtime/qka_runtime_outer.py @@ -12,6 +12,8 @@ import warnings warnings.simplefilter("ignore") +import sys + class FeatureMapACME: """Mapping data with the feature map. @@ -337,7 +339,7 @@ def spsa_step_two(self, cost_plus, cost_minus, lambdas, spsa_params, delta, coun return cost_final, lambdas_new - def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=10, C=1): + def align_kernel(self, data, labels, initial_kernel_parameters=None, maxiters=1, C=1): """Align the quantum kernel. Uses SPSA for minimization over kernel parameters (lambdas) and @@ -412,10 +414,17 @@ def main(backend, user_messenger, **kwargs): """Entry function.""" # Reconstruct the feature map object. - feature_map = kwargs.pop('feature_map') + feature_map = kwargs.get('feature_map') fm = FeatureMapACME.from_json(**feature_map) - initial_layout = kwargs.pop('initial_layout') + + data = kwargs.get('data') + labels = kwargs.get('labels') + initial_kernel_parameters = kwargs.get('initial_kernel_parameters', None) + maxiters = kwargs.get('maxiters', 1) + C = kwargs.get('C', 1) + initial_layout = kwargs.get('initial_layout', None) + qka = QKA(feature_map=fm, backend=backend, initial_layout=initial_layout, user_messenger=user_messenger) - qka_results = qka.align_kernel(**kwargs) + qka_results = qka.align_kernel(data=data, labels=labels, initial_kernel_parameters=initial_kernel_parameters, maxiters=maxiters, C=C) - user_messenger.publish(qka_result, final=True) + user_messenger.publish(qka_results, final=True)