diff --git a/examples/qibolab_v017_1Q_emulator_test_QuTiP.ipynb b/examples/qibolab_v017_1Q_emulator_test_QuTiP.ipynb deleted file mode 100644 index fda85d07bb..0000000000 --- a/examples/qibolab_v017_1Q_emulator_test_QuTiP.ipynb +++ /dev/null @@ -1,964 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1472864f-98c4-422a-99ec-d0fd67d4bf9e", - "metadata": {}, - "source": [ - "# Qibolab v0.1.7 1Q emulator demo for QuTiP engine" - ] - }, - { - "cell_type": "markdown", - "id": "e2fcc40a", - "metadata": {}, - "source": [ - "Results updated on: 18 June 2024" - ] - }, - { - "cell_type": "markdown", - "id": "c281a2bf-dc45-441a-8869-4a0a7d3c35bc", - "metadata": { - "tags": [] - }, - "source": [ - "## Setting up and using the emulator platform" - ] - }, - { - "cell_type": "markdown", - "id": "2720e9bb-ed10-46a9-bb46-cfc1f487ab77", - "metadata": {}, - "source": [ - "The emulator is instantiated like any other device platform in Qibolab, by first adding the path to the emulator runcard to the `QIBOLAB_PLATFORMS` environment variable and then using `qibolab.create_platform`. In this tutorial, we will be using the test emulator `default_q0` that can be found in ``/qibolab/tests/emulators/``:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "4406fccb-60aa-415b-b264-d27c8a5b4eb7", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Qibo 0.2.6|INFO|2024-06-18 02:01:41]: Loading platform default_q0\n", - "INFO:qibo.config:Loading platform default_q0\n" - ] - } - ], - "source": [ - "# add directory of emulator platform to QIBOLAB_PLATFORMS environment variable\n", - "import pathlib, os\n", - "emulator_path = pathlib.Path(os.path.abspath('')).parent/'tests/emulators/'\n", - "os.environ[\"QIBOLAB_PLATFORMS\"] = emulator_path.as_posix() \n", - "\n", - "# create emulator platform as per any other device platform\n", - "from qibolab import create_platform\n", - "emulator_platform = create_platform(\"default_q0\")" - ] - }, - { - "cell_type": "markdown", - "id": "7f1c6458-1276-4250-b67a-87a7ff0a7ac4", - "metadata": {}, - "source": [ - "Similarly, the emulator plays pulse sequences in the same way as any other device platforms. In this tutorial, we will play a simple RX pulse followed by a readout pulse as defined in the runcard on the 'default_q0' single-qubit emulator that we have just initialized:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "02588224-329c-4466-8486-29b8752faddc", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Qibo 0.2.6|INFO|2024-06-18 02:01:41]: Minimal execution time (sequence): 0.30500777777777777\n", - "INFO:qibo.config:Minimal execution time (sequence): 0.30500777777777777\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Total run time: 1.19s*] Elapsed 1.19s / Remaining 00:00:00:00[*********72%***** ] Elapsed 0.91s / Remaining 00:00:00:00\n" - ] - } - ], - "source": [ - "from qibolab.pulses import PulseSequence\n", - "\n", - "# Extract preset pulses from runcard\n", - "pulse_x0 = emulator_platform.create_RX_pulse(qubit=0, start=0)\n", - "pulse_r0 = emulator_platform.create_qubit_readout_pulse(qubit=0, start=int(pulse_x0.duration + 5))\n", - "\n", - "# Add pulses to PulseSequence\n", - "sequence = PulseSequence()\n", - "sequence.add(pulse_x0)\n", - "sequence.add(pulse_r0)\n", - "\n", - "from qibolab.execution_parameters import ExecutionParameters\n", - "\n", - "# Execute the pulse sequence and save the output\n", - "options = ExecutionParameters(nshots=1000)\n", - "results = emulator_platform.execute_pulse_sequence(sequence, options=options)" - ] - }, - { - "cell_type": "markdown", - "id": "dfdf69bd-fd58-4eb7-a99a-764c22d18334", - "metadata": { - "tags": [] - }, - "source": [ - "## Pulse simulator and simulation engine" - ] - }, - { - "cell_type": "markdown", - "id": "af73d5f8-a126-4791-826b-a537c2610618", - "metadata": {}, - "source": [ - "The only instrument used by the emulator is the :class:`qibolab.instruments.emulator.pulse_simulator.PulseSimulator`" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ef46ee8e-c1a2-4fc1-bd1f-c0d75cb6959f", - "metadata": {}, - "outputs": [], - "source": [ - "pulse_simulator = emulator_platform.instruments['pulse_simulator']" - ] - }, - { - "cell_type": "markdown", - "id": "9c1da6a3-2738-43c0-bf97-dd7664249ad9", - "metadata": {}, - "source": [ - "The information from the runcard used to initialized the `PulseSimulator` can be found under `'instruments'`, and is further grouped under `'model_params'` and `'simulations_config'`. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "3b72c4ef-d03c-43ea-93b5-41846281b39e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'pulse_simulator': {'model_params': {'model_name': 'general_no_coupler_model',\n", - " 'topology': [],\n", - " 'nqubits': 1,\n", - " 'ncouplers': 0,\n", - " 'qubits_list': ['0'],\n", - " 'couplers_list': [],\n", - " 'nlevels_q': [3],\n", - " 'nlevels_c': [],\n", - " 'readout_error': {'0': [0.01, 0.02]},\n", - " 'drive_freq': {'0': 5.090167234445013},\n", - " 'T1': {'0': 88578.48970762537},\n", - " 'T2': {'0': 106797.94866226273},\n", - " 'lo_freq': {'0': 5.090167234445013},\n", - " 'rabi_freq': {'0': 0.333},\n", - " 'anharmonicity': {'0': -0.3361230051821652},\n", - " 'coupling_strength': {}},\n", - " 'simulation_config': {'simulation_engine_name': 'Qutip',\n", - " 'sampling_rate': 4.5,\n", - " 'sim_sampling_boost': 10,\n", - " 'runcard_duration_in_dt_units': False,\n", - " 'instant_measurement': True,\n", - " 'simulate_dissipation': True,\n", - " 'output_state_history': True},\n", - " 'sim_opts': None,\n", - " 'bounds': {'waveforms': 1, 'readout': 1, 'instructions': 1}}}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qibolab.serialize import load_runcard\n", - "\n", - "load_runcard(emulator_path/\"default_q0\")['instruments']" - ] - }, - { - "cell_type": "markdown", - "id": "290cc6ae-372a-4596-abb5-1d7313365385", - "metadata": {}, - "source": [ - "As indicated from 'model_params', this emulator simulates a single qubit as a 3-level quantum system with no couplers. All frequencies given are in units of GHz and all times in ns." - ] - }, - { - "cell_type": "markdown", - "id": "8e089478-44b0-4ad2-9ab2-2162414e94b0", - "metadata": {}, - "source": [ - "The PulseSimulator contains a `simulation_engine`, which in turn contains methods to simulate the dynamics of the pulse-device system, as well as process the results, using a specific quantum dynamics simulation library, which in this case is `QuTiP`:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "f8b38586-d48f-4ca3-b76f-feac1f332904", - "metadata": {}, - "outputs": [], - "source": [ - "simulation_engine = pulse_simulator.simulation_engine" - ] - }, - { - "cell_type": "markdown", - "id": "a3692ac5-2e5c-4806-b674-ed2720a12ed3", - "metadata": {}, - "source": [ - "To help visualize the model, we can use the `print_hamiltonian` function from `qibolab_visualization.emulator`:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "d70d80ac-21de-40db-82aa-f669372e7c06", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dictionary\n" - ] - }, - { - "data": { - "text/latex": [ - "$O_i = b^{\\dagger}_i b_i$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$X_i = b^{\\dagger}_i + b_i$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "---------------------\n", - "One-body drift terms:\n", - "---------------------\n" - ] - }, - { - "data": { - "text/latex": [ - "$O_0$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$5.090167234445013~\\text{GHz}$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$O_0O_0-O_0$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$-0.1680615025910826~\\text{GHz}$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------\n", - "Two-body drift terms:\n", - "---------------------\n", - "None\n", - "---------------------\n", - "One-body drive terms:\n", - "---------------------\n" - ] - }, - { - "data": { - "text/latex": [ - "$X_0$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$0.333~\\text{GHz}$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------\n", - "Dissipative terms:\n", - "---------------------\n", - ">> t1 Linblad operators:\n" - ] - }, - { - "data": { - "text/latex": [ - "$\\sigma^+_0$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$0.0023758601136844794~\\sqrt{{ \\text{GHz} }}$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">> t2 Linblad operators:\n" - ] - }, - { - "data": { - "text/latex": [ - "$\\sigma^Z_0$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/latex": [ - "$0.002163732391848669~\\sqrt{{ \\text{GHz} }}$" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------------\n" - ] - } - ], - "source": [ - "from qibolab_visualization.emulator import print_hamiltonian\n", - "print_hamiltonian(simulation_engine.model_config)" - ] - }, - { - "cell_type": "markdown", - "id": "e779a202-96bd-4a40-a9a6-64c110fd51dd", - "metadata": { - "tags": [] - }, - "source": [ - "## Simulation results" - ] - }, - { - "cell_type": "markdown", - "id": "08e1c8ee-8076-47ee-a05a-bcc068d681d0", - "metadata": {}, - "source": [ - "The simulation results generated by the simulation engine are returned together with the usual outputs of `execute_pulse_sequence` for device platforms and are grouped under 'simulation'. \n", - "\n", - "Let us retrieve the simulation results obtained previously:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9e45c3b1-1313-4fba-8dda-5810293369a7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['sequence_duration', 'simulation_dt', 'simulation_time', 'output_states'])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "simulation_results = results['simulation']\n", - "simulation_results.keys()" - ] - }, - { - "cell_type": "markdown", - "id": "d1a09410-20f2-4797-9540-636f427a76cb", - "metadata": {}, - "source": [ - "The time taken to complete the simulation is:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "abfff213-828e-434c-b4c5-2de8c07d8ae5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.192088042" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "simulation_results['simulation_time']" - ] - }, - { - "cell_type": "markdown", - "id": "f499f704-f3da-4031-92c9-a9ef92d171ba", - "metadata": {}, - "source": [ - "In addition, one can generate the list of discretized times used in the simulation:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b6a08d7f-bd83-44b1-868f-9346e8cd21e2", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "sequence_duration = simulation_results['sequence_duration']\n", - "simulation_dt = simulation_results['simulation_dt']\n", - "sim_time_list = np.linspace(0,sequence_duration,num=int(sequence_duration/simulation_dt)+1)" - ] - }, - { - "cell_type": "markdown", - "id": "79574a8f-d831-48d5-a47c-848392773fda", - "metadata": {}, - "source": [ - "When 'output_state_history' in `'simulation_config'` is set to 'True', the corresponding device quantum states obtained from simulation at each of these times are stored in 'output_states' as objects native to the simulation engine library. In this case, these are :class:`qutip.Qobj`. As an example, we see that the initial state is indeed the density matrix for a 3 level system corresponding to $\\ket{0}$:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "757e3e62-86d4-46c5-8ff4-8d0b62d3ca85", - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True $ \\\\ \\left(\\begin{matrix}1.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0\\\\\\end{matrix}\\right)$" - ], - "text/plain": [ - "Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True\n", - "Qobj data =\n", - "[[1. 0. 0.]\n", - " [0. 0. 0.]\n", - " [0. 0. 0.]]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "simulated_states = simulation_results['output_states']\n", - "simulated_states[0]" - ] - }, - { - "cell_type": "markdown", - "id": "d8df8936-bd2c-4794-a392-2ff6816391c7", - "metadata": {}, - "source": [ - "One can call the `compute_overlaps` method in the simulation engine to compute the overlaps of the state with the different computational basis states for the entire simulation history. We can then visualize this with the plot_overlaps function from `qibolab_visualization.emulator`:" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "d912711f-4618-421b-92c7-f5b61c4b853b", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Overlap of final state with basis states:\n", - "[0] 0.0016351326811553345\n", - "[1] 0.9982829949142029\n", - "[2] 8.187240463464329e-05\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "overlaps = simulation_engine.compute_overlaps(simulated_states)\n", - "\n", - "from qibolab_visualization.emulator import plot_overlaps\n", - "plot_overlaps(overlaps,sim_time_list,time_label='Time / ns');" - ] - }, - { - "cell_type": "markdown", - "id": "8e369387-8913-4e8d-8a21-b8970f358407", - "metadata": { - "tags": [] - }, - "source": [ - "## Sampling and applying readout noise" - ] - }, - { - "cell_type": "markdown", - "id": "5688f522-e408-4759-b951-74fa003b6be3", - "metadata": {}, - "source": [ - "By default, the 'readout_error' from the `'model_params'` dictionary is applied when generating the samples from simulation without noise:" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "bce5d664-de80-45cc-9611-71a138b3fbbf", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 983)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "samples = results[0].samples\n", - "samples[:20].tolist(), np.sum(samples)" - ] - }, - { - "cell_type": "markdown", - "id": "24a8bb55-23ce-4c3d-a73c-bcced2ddaa6e", - "metadata": {}, - "source": [ - "Samples can be obtained from the final state of the simulation without applying readout error manually by the `get_samples` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "286e6c12-b87b-47cf-9d73-541194f5c185", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 999)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "final_state = simulated_states[-1]\n", - "\n", - "from qibolab.instruments.emulator.pulse_simulator import get_samples\n", - "ro_qubit_list = [pulse_r0.qubit]\n", - "ro_reduced_dm, rdm_qubit_list = pulse_simulator.simulation_engine.qobj_to_reduced_dm(final_state, ro_qubit_list)\n", - "noiseless_samples = get_samples(1000, ro_reduced_dm, rdm_qubit_list, pulse_simulator.simulation_engine.qid_nlevels_map)\n", - "\n", - "noiseless_samples[0][:20], np.sum(noiseless_samples[0])" - ] - }, - { - "cell_type": "markdown", - "id": "97b760c6-01d4-43a1-96af-37e810247fa2", - "metadata": {}, - "source": [ - "The `readout_error` can be applied subsequently as well with the `apply_readout_noise` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "4e6a91b6-3d27-4505-9f10-718b19fb6c0d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 905)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qibolab.instruments.emulator.pulse_simulator import apply_readout_noise\n", - "\n", - "readout_error = {0: [0.1, 0.1], 1: [0.1, 0.1]}\n", - "noisy_samples = apply_readout_noise(noiseless_samples, readout_error)\n", - "noisy_samples[0][:20], np.sum(noisy_samples[0])" - ] - }, - { - "cell_type": "markdown", - "id": "24a9f3fe-93e3-4daa-87f7-272a8a016119", - "metadata": {}, - "source": [ - "## Returning only the final state of simulations" - ] - }, - { - "cell_type": "markdown", - "id": "7a877c1f-e780-4289-9351-0821593997b5", - "metadata": {}, - "source": [ - "In some cases, the entire history of the simulated states is not needed. One can save memory by setting `'output_state_history' = 'False'`in `'simulations_config'`. This is useful for instance when running sweepers:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "e0690c99-11a0-45a0-87c2-f81ba39f3bf6", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from qibolab.sweeper import Sweeper, Parameter\n", - "\n", - "parameter = Parameter.duration\n", - "parameter2 = Parameter.amplitude\n", - "parameter_range = np.linspace(pulse_x0.duration*.5, pulse_x0.duration*1.0, num=2)\n", - "parameter2_range = np.linspace(pulse_x0.amplitude*.95, pulse_x0.amplitude*1.05, num=3)\n", - "sweeper = Sweeper(parameter, parameter_range, [pulse_x0])\n", - "sweeper2 = Sweeper(parameter2, parameter2_range, [pulse_x0])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "9012c9b0-74a2-420f-8c4c-2c1addb16803", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Qibo 0.2.6|INFO|2024-06-18 02:01:43]: Minimal execution time (sweep): 7.4958711466666665\n", - "INFO:qibo.config:Minimal execution time (sweep): 7.4958711466666665\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Total run time: 0.89s*] Elapsed 0.89s / Remaining 00:00:00:00[****** 26% ] Elapsed 0.28s / Remaining 00:00:00:00\n", - " Total run time: 0.99s*] Elapsed 0.99s / Remaining 00:00:00:00[* 6% ] Elapsed 0.11s / Remaining 00:00:00:01\n", - " [ 1% ] Elapsed 0.01s / Remaining 00:00:00:01" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "IOPub message rate exceeded.\n", - "The Jupyter server will temporarily stop sending output\n", - "to the client in order to avoid crashing it.\n", - "To change this limit, set the config variable\n", - "`--ServerApp.iopub_msg_rate_limit`.\n", - "\n", - "Current values:\n", - "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", - "ServerApp.rate_limit_window=3.0 (secs)\n", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Total run time: 1.10s*] Elapsed 1.10s / Remaining 00:00:00:00\n", - " Total run time: 1.14s*] Elapsed 1.14s / Remaining 00:00:00:00[**** 18% ] Elapsed 0.25s / Remaining 00:00:00:01[*********75%***** ] Elapsed 0.88s / Remaining 00:00:00:00[*********98%***********] Elapsed 1.08s / Remaining 00:00:00:00\n", - " [*********48% ] Elapsed 0.55s / Remaining 00:00:00:00[* 3% ] Elapsed 0.05s / Remaining 00:00:00:01[* 4% ] Elapsed 0.06s / Remaining 00:00:00:01" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "IOPub message rate exceeded.\n", - "The Jupyter server will temporarily stop sending output\n", - "to the client in order to avoid crashing it.\n", - "To change this limit, set the config variable\n", - "`--ServerApp.iopub_msg_rate_limit`.\n", - "\n", - "Current values:\n", - "ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n", - "ServerApp.rate_limit_window=3.0 (secs)\n", - "\n" - ] - } - ], - "source": [ - "# output only final state\n", - "emulator_platform.instruments['pulse_simulator'].output_state_history = False\n", - "sweep_results = emulator_platform.sweep(sequence, ExecutionParameters(), sweeper, sweeper2)" - ] - }, - { - "cell_type": "markdown", - "id": "a1fe5e3d-7619-480e-b3a8-e4b60e037092", - "metadata": {}, - "source": [ - "To help visualize the simulation results, we can once again look at its overlap with the basis states of the system. We use `make_array_index_list` function to generate a list of all possible index combinations of an array with arbitrary shape, in this case corresponding to all possible combinations of different sweeper parameters:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "37ac5613-2c25-4344-b5bf-4604ed2859d1", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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vpyIiIgUY4aCiIhILVbRWJT24QYYUBAREalF5pMum+3DDTCgICIiUokEF6yhcMlI1Mc1FERERKQYMxRERERq6aAnZXYEBhREREQq4W2jRERERDIwQ0FERKQW3uVBRERESklCQFK4BkLp9u2FUx5ERESkGDMUREREarH+WpT24QYYUBAREamEUx5EREREMjBDQUREpBbe5UFERESK8UmZREREpBSflElEREQkAzMUREREauGUBxERESklWRuL0j7cAac8iIiISDFmKIiIiNTCKQ8iIiJSrBs9h4JTHkRERKQYMxREREQq6U7v8mBAQUREpJZutIaCUx5ERESkGDMUREREahEAlD5Hwj0SFAwoiIiI1MI1FERERKScgAvWULhkJKrjGgoiIiJSjBkKIiIitXSjuzwYUBAREanFCkByQR9ugFMeREREpFibAootW7YgODgYWq0WEREROHLkSLNtd+/ejWnTpuHaa6+Fr68voqOj8dFHH9m1ycrKgiRJDqW2trYtwyMiIuoUmu7yUFrcgeyAIjs7GytWrMDKlStRVFSE2NhYJCQkoLS01Gn7/Px8TJs2Dbm5uThx4gSmTJmCWbNmoaioyK6dr68vTCaTXdFqtW07KiIios6gaQ2F0uIGZK+hWL9+PZKTk7F48WIAQHp6Oj766CNkZGQgLS3NoX16errd5xdeeAH79u3Du+++i/DwcFu9JEnw9/eXOxwiIiLqBGRlKOrq6nDixAnEx8fb1cfHx+PYsWOt6sNqteL8+fPw8/Ozq79w4QICAwMxaNAgzJw50yGDcSWLxQKz2WxXiIiIOpVulKGQFVBUVVWhoaEBer3erl6v16OioqJVfbz88suoqanB3LlzbXXDhw9HVlYW9u/fj507d0Kr1WLixIn45ptvmu0nLS0NOp3OVgICAuQcChERkfoYULRMkuzvgRFCONQ5s3PnTqxevRrZ2dkYMGCArT4qKgrz5s1DWFgYYmNj8dZbb+GGG27AK6+80mxfqampqK6utpWysrK2HAoRERG5gKw1FP3794enp6dDNqKystIha3Gl7OxsJCcn4+2338bUqVNbbOvh4YFx48a1mKHQaDTQaDStHzwREVF743MonPP29kZERASMRqNdvdFoRExMTLPb7dy5EwsWLMDf/vY33HbbbVfdjxACxcXFMBgMcoZHRETUqXSn20Zl3+WR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pyteC0p15euhuroaAFp8i2R3uCZacx6adOXroaGhAbt27UJNTQ2io6OdtukO10N7cIuAoqqqCg0NDQ5vH9Xr9Q5vKW1SUVHhtH19fT2qqqpUG6ua2nIeDAYDtm7dipycHOzevRshISGIi4tDfn5+ewy5U+iK10JbdfXrQQiBlJQU3HTTTQgNDW22XVe/Jlp7Hrry9fDPf/4T11xzDTQaDZYsWYI9e/Zg5MiRTtt29euhvch+l0dHkiTJ7rMQwqHuau2d1bsbOechJCQEISEhts/R0dEoKyvDSy+9hEmTJqk6zs6kq14LcnX16+Hhhx/GF1980aoXC3bla6K156ErXw8hISEoLi7GuXPnkJOTg/nz5yMvL6/ZoKIrXw/txS0yFP3794enp6fDX+GVlZUOUWUTf39/p+179OiBfv36qTZWNbXlPDgTFRWFb775xtXD67S64rXgSl3lenjkkUewf/9+HDp0CIMGDWqxbVe+JuScB2e6yvXg7e2N66+/HpGRkUhLS0NYWBg2bNjgtG1Xvh7ak1sEFN7e3oiIiIDRaLSrNxqNiImJcbpNdHS0Q/sDBw4gMjISXl5eqo1VTW05D84UFRXBYDC4enidVle8FlzJ3a8HIQQefvhh7N69G5988gmCg4Ovuk1XvCbach6ccffroTlCCFgsFqc/64rXQ4fooMWgsu3atUt4eXmJzMxMcerUKbFixQrRq1cv8d133wkhhHjqqadEUlKSrf23334revbsKR577DFx6tQpkZmZKby8vMQ777zTUYfgEnLPw5/+9CexZ88e8fXXX4t//etf4qmnnhIARE5OTkcdgmLnz58XRUVFoqioSAAQ69evF0VFReL7778XQnSfa0EI+eeiK14PDz30kNDpdOLw4cPCZDLZysWLF21tusM10Zbz0BWvByGESE1NFfn5+aKkpER88cUX4umnnxYeHh7iwIEDQojucT10BLcJKIQQYvPmzSIwMFB4e3uLsWPH2t0ONX/+fHHzzTfbtT98+LAIDw8X3t7eIigoSGRkZLTziNUh5zysW7dODB06VGi1WtG3b19x0003iffff78DRu06Tbe6XVnmz58vhOhe14Lcc9EVrwdnxw9AbN++3damO1wTbTkPXfF6EEKIRYsW2X5HXnvttSIuLs4WTAjRPa6HjiAJ8evKEyIiIqI2cos1FERERNS5MaAgIiIixRhQEBERkWIMKIiIiEgxBhRERESkGAMKIiIiUowBBRERESnGgIKIiIgUY0BBREREijGgICIiIsUYUBAREZFi/w+/x+NQp2SlcwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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1qwxxhhz9uxZExISYu666y5LuUcffdT4+/ubEydOGGOMycnJMZLMiy++aClXUFBg2rdvbx599FFX3qhRo4wk8+GHH9Zo16hRo8yoUaPqbHf1723JkiWmS5cult9vRESEcTgcJi8vz3LOuHHjTFBQkCktLa2z3qNHjxpJZv369cYYY/bs2WMkmUcffdRERkZa6oqLi3Md79q1y0gyu3btcuXNmzfP1PXPniQTEhJinE6nK6+4uNi0a9fOpKSk1Nk+Y/7z30d+fn695Ywxxul0mr59+5ru3bub77//vs62zJs374J1AXZhWAFuWb9+vfbv329JF+o5+MlPfmI5vvbaa1VWVqbjx4+78nJzc/WTn/xEXbp0kY+Pj/z8/HTPPfeosrJSf/vb39xq49VXX61OnTrpscce02uvvabPP//crfMl6bXXXtPgwYMVGBgoX19f+fn56cMPP9Rf//rXC55bVlamDz/8ULfddpsuueQSVVRUuNKECRNUVlamvXv31nn+Rx99JEmWIQrpXPd6hw4d9OGHH0o612Mzffp0bdq0yTVMU1lZqd/85jeaPHmyunTpIkn63e9+J4fDoenTp1vaEhoaqkGDBtVYbdGpUyfddNNNDbpP1b0WwcHBrt/bM888o5MnT1p+v5LUv39/DRo0yJJ31113yel06s9//nOdn9GrVy/17NlTO3fulCRlZmZq4MCBmj59uvLz8/Xll1+qvLxce/bssfSgNMaYMWPUsWNH13FISIi6deumr7/+2qN6q5WVlen//b//p6+//lq//e1vdemll3qlXnhXdna2Jk2apPDwcDkcDo9WNTVE9RDs+Sk0NNTWz7wQggO4pW/fvho6dKglXUj1l1S1gIAASdK//vUvSdKxY8c0YsQIFRYWasWKFfr444+1f/9+1/hwdbmGCg4OVlZWlq677jo98cQT6t+/v8LDw7Vw4cIGzWFYvny5HnjgAQ0bNkwZGRnau3ev9u/fr1tuuaVBbTl58qQqKir0yiuvyM/Pz5ImTJggSZalbrWd7+vr6xqiqFb9D8bJkyddebNnz1ZZWZk2btwoSfrggw9UVFSkWbNmucr885//lDFGISEhNdqzd+/eGm05v5u9Pn/6058UHx8vSXrjjTf0xz/+Ufv379eTTz4pqebvrbZ/7Krzzr+m2owdO9YVFO3cuVPjxo3TwIEDFRISop07d+qPf/yj/vWvf3kcHPz4WZXOPa/uPoO1KS8v12233aY9e/Zo27ZtGjZsmMd1wh6lpaUaNGiQVq5c2WSf2b9/fxUVFbnSX/7ylyb77Now5wDNbsuWLSotLdWmTZsUERHhys/Ly2t0nQMHDtTGjRtljNGnn36qtLQ0LVmyRO3bt9fjjz9e77lvvfWWRo8erdWrV1vyq+crXEinTp3k4+OjxMREzZs3r9YykZGRdZ7fpUsXVVRU6JtvvrEECMYYFRcX6/rrr3fl9evXTzfccIPWrVun+++/X+vWrVN4eLjrS1uSLr/8cjkcDn388ceuwOx8P85zOBwNus6NGzfKz89Pv/vd7xQYGOjKr+uvrOLi4jrzavtSPt/YsWO1du1a/elPf9K+fftcM/xvuukmZWZm6uuvv9all17aYlfMlJeXa8qUKdq1a5e2bt2qsWPHNneTUI+EhAQlJCTU+fMzZ87oqaee0v/+7//q1KlTGjBggJYtW+bRkmZfX99m7y04Hz0HaHbVX0bnf0kZY/TGG294pe5BgwbppZde0mWXXWbpvq7rL0KHw1HjC/PTTz+1TGI7v70/ruOSSy7RmDFjlJubq2uvvbZGT8vQoUPr/TKs/uJ46623LPkZGRkqLS2t8cUya9Ys7du3T3v27NF7772nGTNmyMfHx/XziRMnyhijwsLCWtsycODAOttSH4fDIV9fX8tn/etf/9JvfvObWst/9tlnOnTokCXv7bffVseOHS0rK2ozduxYORwOPf3002rXrp1Gjhwp6dxkxV27dikzM1MjR46Un59fvfXU9TuzU3WPwUcffaSMjAyNHz++yT4b9pg1a5b++Mc/auPGjfr00091xx136JZbbtGRI0caXeeRI0cUHh6uyMhI/exnP6uxkqip0XOAZjdu3Dj5+/vrzjvv1KOPPqqysjKtXr1a3333XaPq+93vfqdXX31VU6ZM0VVXXSVjjDZt2qRTp05p3LhxrnIDBw7U7t279d577yksLEwdO3ZUVFSUJk6cqGeffVYLFy7UqFGjdPjwYS1ZskSRkZGWlRodO3ZURESE6y/Bzp076/LLL1fPnj21YsUK3XjjjRoxYoQeeOAB9ezZU99//72OHj2q9957zzWvoK77MX78eD322GNyOp0aPny4a7VCdHS0EhMTLeXvvPNOJSUl6c4771R5eXmNuQrDhw/Xfffdp1mzZunAgQMaOXKkOnTooKKiIu3Zs0cDBw7UAw884PZ9vvXWW7V8+XLddddduu+++3Ty5Em98MILtfZOSOc2y/rJT36iRYsWKSwsTG+99ZYyMzO1bNmyC+6j0K1bNw0YMEA7duzQmDFjXOVvvvlmffvtt/r222+1fPnyC7a5OhBatmyZEhIS5OPjo2uvvVb+/v5uXn3D3X777Xr//ff15JNPqkuXLpb5JkFBQZZNmtDyffnll9qwYYP+8Y9/KDw8XJL0yCOP6A9/+IPWrVunpUuXul3nsGHDtH79el1zzTX65z//qeeee05xcXH67LPPLtirZpvmnA2J1qN6Nvb+/ftr/Xl9qxW++eabWus6f2b3e++9ZwYNGmQCAwPNFVdcYf7rv/7LvP/++zVmmzdktcIXX3xh7rzzTtOrVy/Tvn17ExwcbG644QaTlpZmKZeXl2eGDx9uLrnkEiPJNRO/vLzcPPLII+aKK64wgYGBZvDgwWbLli21fvbOnTtNdHS0CQgIMJIsqx/y8/PN7NmzzRVXXGH8/PxM165dTVxcnHnuuefqbb8xxvzrX/8yjz32mImIiDB+fn4mLCzMPPDAA+a7776rtfxdd91lJJnhw4fXWeebb75phg0bZjp06GDat29vevXqZe655x5z4MABV5lRo0aZ/v3713p+basV3nzzTRMVFWUCAgLMVVddZVJSUszatWtr/H4jIiLMrbfeat59913Tv39/4+/vb3r27GmWL19+wXtR7eGHHzaSzPPPP2/J7927t5FkPv30U0t+basVysvLzb333mu6du1qHA6HpZ2qY4VARETEBVe11LdaQXWs8jn/mavtHFYrtAySzObNm13H77zzjpFkOnToYEm+vr5m6tSpxpj//HtYX6rv93v69GkTEhJSY4VRU3IY86PdSgDAy3r27KkBAwZ4vKFQS5WWlqZZs2bp6NGjioiIuOAKnrpUVlbKGCM/Pz/NmzevSSfEoXYOh0ObN292bbOenp6uu+++W5999pllSE2SLr30UoWGhurs2bP68ssv6623U6dOlv1FfmzcuHG6+uqra8x9aioMKwCAl1x99dWSzu2yefnll7t9fpcuXWrsHoqWJTo6WpWVlTp+/LhGjBhRaxk/P78a76BxR3l5uf7617/WWX9TIDgAAA9NmjRJ+/fvdx2f/+Ild+zevds1r6W2bZfR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1/GpU6cUERGhY8eO2fKLbi2cTqe6d++ugoKCJut+aom4D+dwH87hPpzDffiPkpIS9ejRQ5072zPcFBgYqPz8fJ05c8Yr9fn7+yswMNArdTWEW8HB5ZdfLh8fnxp/0R8/frzGX/7VQkNDay3v6+urLl261FumrjolKSAgQAEBATXyg4ODL/qHXpKCgoK4D+I+VOM+nMN9OIf78B/t2tm33U9gYGCTfqF7k1t3xd/fX0OGDFFmZqYlPzMzU3FxcbWeExsbW6P8jh07NHToUPn5+dVbpq46AQCAfdweVkhKSlJiYqKGDh2q2NhYrVmzRseOHdPcuXMlnevuLyws1Pr16yWdW5mwcuVKJSUl6ec//7lycnK0du1ayyqE+fPna+TIkVq2bJkmT56srVu3aufOndqzZ4+XLhMAADSU28HBtGnTdPLkSS1ZskRFRUUaMGCAtm/froiICElSUVGRZc+DyMhIbd++XQ8//LBWrVql8PBwvfzyy/rpT3/qKhMXF6eNGzfqqaee0tNPP61evXopPT1dw4YNa3C7AgICtHDhwlqHGi4m3IdzuA/ncB/O4T6cw334D+5F/dze5wAAALRtvHgJAABYEBwAAAALggMAAGBBcAAAACwIDgAAgEWrCg5effVVRUZGKjAwUEOGDNHHH39cb/msrCwNGTJEgYGBuuqqq/Taa681UUvt5c592L17txwOR430xRdfNGGLvSs7O1uTJk1SeHi4HA6HtmzZcsFz2uqz4O69aIvPQ0pKiq6//np17NhR3bp105QpU3T48OELntfWnonG3Ie2+DxI0urVq3Xttde6doKMjY21vPW3Nm3tefBUqwkO0tPTtWDBAj355JPKzc3ViBEjlJCQYNlT4Xz5+fmaMGGCRowYodzcXD3xxBN66KGHlJGR0cQt9y5370O1w4cPq6ioyJV69+7dRC32vtLSUg0aNEgrV65sUPm2+ixI7t+Lam3pecjKytK8efO0d+9eZWZmqqKiQvHx8SotLa3znLb4TDTmPlRrS8+DJF155ZX67//+bx04cEAHDhzQTTfdpMmTJ+uzzz6rtXxbfB48ZlqJG264wcydO9eS16dPH/P444/XWv7RRx81ffr0seTdf//9JiYmxrY2NgV378OuXbuMJPPdd981QeuaniSzefPmesu01WfhxxpyL9r682CMMcePHzeSTFZWVp1lLoZnoiH34WJ4Hqp16tTJ/M///E+tP7sYngd3tYqegzNnzujgwYOKj4+35MfHx+uTTz6p9ZycnJwa5cePH68DBw7o7Nmmfze2NzTmPlSLjo5WWFiYxo4dq127dtnZzBanLT4LnmrLz0NJSYkk1fu2vYvhmWjIfajWlp+HyspKbdy4UaWlpYqNja21zMXwPLirVQQHJ06cUGVlZY23NIaEhNR4m2O14uLiWstXVFToxIkTtrXVTo25D2FhYVqzZo0yMjK0adMmRUVFaezYscrOzm6KJrcIbfFZaKy2/jwYY5SUlKQbb7xRAwYMqLNcW38mGnof2vLz8Je//EWXXnqpAgICNHfuXG3evFn9+vWrtWxbfx4aw+13KzQnh8NhOTbG1Mi7UPna8lsbd+5DVFSUoqKiXMexsbEqKCjQCy+8oJEjR9razpakrT4L7mrrz8ODDz6oTz/9tEEvbWvLz0RD70Nbfh6ioqKUl5enU6dOKSMjQzNmzFBWVladAUJbfh4ao1X0HFx++eXy8fGp8dfx8ePHa0R71UJDQ2st7+vrqy5dutjWVjs15j7UJiYmRkeOHPF281qstvgseFNbeR5++ctfatu2bdq1a5euvPLKesu25WfCnftQm7byPPj7++vqq6/W0KFDlZKSokGDBmnFihW1lm3Lz0NjtYrgwN/fX0OGDFFmZqYlPzMzU3FxcbWeExsbW6P8jh07NHToUPn5+dnWVjs15j7UJjc3V2FhYd5uXovVFp8Fb2rtz4MxRg8++KA2bdqkjz76SJGRkRc8py0+E425D7Vp7c9DXYwxKi8vr/VnbfF58FgzTYR028aNG42fn59Zu3at+fzzz82CBQtMhw4dzFdffWWMMebxxx83iYmJrvJ///vfzSWXXGIefvhh8/nnn5u1a9caPz8/8+677zbXJXiFu/fhpZdeMps3bzZ/+9vfzP/93/+Zxx9/3EgyGRkZzXUJHvv+++9Nbm6uyc3NNZLM8uXLTW5urvn666+NMRfPs2CM+/eiLT4PDzzwgAkODja7d+82RUVFrvTDDz+4ylwMz0Rj7kNbfB6MMSY5OdlkZ2eb/Px88+mnn5onnnjCtGvXzuzYscMYc3E8D55qNcGBMcasWrXKREREGH9/fzN48GDLEp0ZM2aYUaNGWcrv3r3bREdHG39/f9OzZ0+zevXqJm6xPdy5D8uWLTO9evUygYGBplOnTubGG280v//975uh1d5Tvfzqx2nGjBnGmIvrWXD3XrTF56G265dk1q1b5ypzMTwTjbkPbfF5MMaY2bNnu/6N7Nq1qxk7dqwrMDDm4ngePOUw5t+zLgAAANRK5hwAAICmQ3AAAAAsCA4AAIAFwQEAALAgOAAAABYEBwAAwILgAAAAWBAcAAAAC4IDAABgQXAAAAAsCA4AAIDF/wdZzTbu/IOwTgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from qibolab.instruments.emulator.pulse_simulator import make_array_index_list\n", - "\n", - "final_states_array = sweep_results['simulation']['output_states']\n", - "shape = final_states_array.shape\n", - "index_list = make_array_index_list(shape)\n", - "overlaps = {}\n", - "for index in index_list:\n", - " pulse_simulator.merge_sweep_results(overlaps, simulation_engine.compute_overlaps(final_states_array[tuple(index)]))\n", - "\n", - "import matplotlib.pyplot as plt\n", - "for label in overlaps.keys():\n", - " plt.figure()\n", - " plt.pcolormesh(np.array(overlaps[label]).reshape(shape))\n", - " plt.colorbar()\n", - " plt.title(f'Final state overlap with {label}')\n", - " plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "ed868b1f", - "metadata": {}, - "source": [ - "## --- Version information for major packages used in the current Qibolab emulator example ---" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "f78416d6-33a7-4350-86c1-c64fb3fe80ab", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext watermark" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "38340640-9e0b-40b3-9952-d4cabef2e277", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Python implementation: CPython\n", - "Python version : 3.9.18\n", - "IPython version : 8.15.0\n", - "\n", - "qibolab : 0.1.7\n", - "qibo : 0.2.6\n", - "qutip : 4.7.5\n", - "matplotlib: 3.8.0\n", - "numpy : 1.26.4\n", - "scipy : 1.12.0\n", - "\n" - ] - } - ], - "source": [ - "%watermark -v -p qibolab,qibo,qutip,matplotlib,numpy,scipy" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/qibolab_v019_emulator_test_QuTiP.ipynb b/examples/qibolab_v019_emulator_test_QuTiP.ipynb new file mode 100644 index 0000000000..3ac728de52 --- /dev/null +++ b/examples/qibolab_v019_emulator_test_QuTiP.ipynb @@ -0,0 +1,1469 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1472864f-98c4-422a-99ec-d0fd67d4bf9e", + "metadata": {}, + "source": [ + "# Qibolab v0.1.9 1Q emulator demo for QuTiP engine" + ] + }, + { + "cell_type": "markdown", + "id": "e2fcc40a", + "metadata": {}, + "source": [ + "Results updated on: 08 September 2024" + ] + }, + { + "cell_type": "markdown", + "id": "c281a2bf-dc45-441a-8869-4a0a7d3c35bc", + "metadata": { + "tags": [] + }, + "source": [ + "## Setting up and using the emulator platform" + ] + }, + { + "cell_type": "markdown", + "id": "2720e9bb-ed10-46a9-bb46-cfc1f487ab77", + "metadata": {}, + "source": [ + "The emulator is instantiated like any other device platform in Qibolab, by first adding the path to the emulator runcard to the `QIBOLAB_PLATFORMS` environment variable and then using `qibolab.create_platform`. In this tutorial, we will be using the test emulator `default_q0` that can be found in ``/qibolab/tests/emulators/``:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "4406fccb-60aa-415b-b264-d27c8a5b4eb7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:18:42]: Loading platform default_q0\n", + "INFO:qibo.config:Loading platform default_q0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'model_name': 'general_no_coupler_model', 'topology': [], 'qubits_list': ['0'], 'nlevels_q': [3], 'couplers_list': [], 'nlevels_c': [], 'drift': {'one_body': [(31.982463978551852, 'O_0', ['0']), (-1.0559615637828141, 'O_0 * O_0 - O_0', ['0'])], 'two_body': []}, 'drive': {'D-0': [(2.092300707290802, 'X_0', ['0'])]}, 'flux': {'F-0': [(6.283185307179586, 'O_0', ['0'])]}, 'flux_params': {}, 'dissipation': {'t1': [(0.005955398137529539, 'sp01_0', ['0'])], 't2': [(0.0054236727921428375, 'Z01_0', ['0'])]}, 'method': 'master_equation', 'readout_error': {'0': [0.01, 0.02]}, 'platform_to_simulator_channels': {'drive-0': 'D-0', 'readout-0': 'R-0', 'flux-0': 'F-0'}}\n" + ] + } + ], + "source": [ + "# add directory of emulator platform to QIBOLAB_PLATFORMS environment variable\n", + "import pathlib, os\n", + "emulator_path = pathlib.Path(os.path.abspath('')).parent/'tests/emulators/'\n", + "os.environ[\"QIBOLAB_PLATFORMS\"] = emulator_path.as_posix() \n", + "\n", + "# create emulator platform as per any other device platform\n", + "from qibolab import create_platform\n", + "emulator_platform = create_platform(\"default_q0\")" + ] + }, + { + "cell_type": "markdown", + "id": "7f1c6458-1276-4250-b67a-87a7ff0a7ac4", + "metadata": {}, + "source": [ + "Similarly, the emulator plays pulse sequences in the same way as any other device platforms. In this tutorial, we will play a simple RX pulse followed by a readout pulse as defined in the runcard on the 'default_q0' single-qubit emulator that we have just initialized:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "02588224-329c-4466-8486-29b8752faddc", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:18:42]: Minimal execution time (sequence): 0.30500777777777777\n", + "INFO:qibo.config:Minimal execution time (sequence): 0.30500777777777777\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Total run time: 1.24s*] Elapsed 1.24s / Remaining 00:00:00:00[*********71%**** ] Elapsed 0.78s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.85s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.88s / Remaining 00:00:00:00[*********77%****** ] Elapsed 0.95s / Remaining 00:00:00:00\n" + ] + } + ], + "source": [ + "from qibolab.pulses import PulseSequence\n", + "\n", + "# Extract preset pulses from runcard\n", + "pulse_x0 = emulator_platform.create_RX_pulse(qubit=0, start=0)\n", + "pulse_r0 = emulator_platform.create_qubit_readout_pulse(qubit=0, start=int(pulse_x0.duration + 5))\n", + "\n", + "# Add pulses to PulseSequence\n", + "sequence = PulseSequence()\n", + "sequence.add(pulse_x0)\n", + "sequence.add(pulse_r0)\n", + "\n", + "from qibolab.execution_parameters import ExecutionParameters\n", + "\n", + "# Execute the pulse sequence and save the output\n", + "options = ExecutionParameters(nshots=1000)\n", + "results = emulator_platform.execute_pulse_sequence(sequence, options=options)" + ] + }, + { + "cell_type": "markdown", + "id": "dfdf69bd-fd58-4eb7-a99a-764c22d18334", + "metadata": { + "tags": [] + }, + "source": [ + "## Pulse simulator and simulation engine" + ] + }, + { + "cell_type": "markdown", + "id": "af73d5f8-a126-4791-826b-a537c2610618", + "metadata": {}, + "source": [ + "The only instrument used by the emulator is the :class:`qibolab.instruments.emulator.pulse_simulator.PulseSimulator`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ef46ee8e-c1a2-4fc1-bd1f-c0d75cb6959f", + "metadata": {}, + "outputs": [], + "source": [ + "pulse_simulator = emulator_platform.instruments['pulse_simulator']" + ] + }, + { + "cell_type": "markdown", + "id": "9c1da6a3-2738-43c0-bf97-dd7664249ad9", + "metadata": {}, + "source": [ + "The information from the runcard used to initialized the `PulseSimulator` can be found under `'instruments'`, and is further grouped under `'model_params'` and `'simulations_config'`. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3b72c4ef-d03c-43ea-93b5-41846281b39e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'pulse_simulator': {'model_params': {'model_name': 'general_no_coupler_model',\n", + " 'topology': [],\n", + " 'nqubits': 1,\n", + " 'ncouplers': 0,\n", + " 'qubits_list': ['0'],\n", + " 'couplers_list': [],\n", + " 'nlevels_q': [3],\n", + " 'nlevels_c': [],\n", + " 'readout_error': {'0': [0.01, 0.02]},\n", + " 'drive_freq': {'0': 5.090167234445013},\n", + " 'T1': {'0': 88578.48970762537},\n", + " 'T2': {'0': 106797.94866226273},\n", + " 'max_lo_freq': {'0': 5.090167234445013},\n", + " 'rabi_freq': {'0': 0.333},\n", + " 'anharmonicity': {'0': -0.3361230051821652},\n", + " 'coupling_strength': {}},\n", + " 'simulation_config': {'simulation_engine_name': 'Qutip',\n", + " 'sampling_rate': 4.5,\n", + " 'sim_sampling_boost': 10,\n", + " 'runcard_duration_in_dt_units': False,\n", + " 'instant_measurement': True,\n", + " 'simulate_dissipation': True,\n", + " 'output_state_history': True},\n", + " 'sim_opts': None,\n", + " 'bounds': {'waveforms': 1, 'readout': 1, 'instructions': 1}}}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qibolab.serialize import load_runcard\n", + "\n", + "load_runcard(emulator_path/\"default_q0\")['instruments']" + ] + }, + { + "cell_type": "markdown", + "id": "290cc6ae-372a-4596-abb5-1d7313365385", + "metadata": {}, + "source": [ + "As indicated from 'model_params', this emulator simulates a single qubit as a 3-level quantum system with no couplers. All frequencies given are in units of GHz and all times in ns." + ] + }, + { + "cell_type": "markdown", + "id": "8e089478-44b0-4ad2-9ab2-2162414e94b0", + "metadata": {}, + "source": [ + "The PulseSimulator contains a `simulation_engine`, which in turn contains methods to simulate the dynamics of the pulse-device system, as well as process the results, using a specific quantum dynamics simulation library, which in this case is `QuTiP`:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f8b38586-d48f-4ca3-b76f-feac1f332904", + "metadata": {}, + "outputs": [], + "source": [ + "simulation_engine = pulse_simulator.simulation_engine" + ] + }, + { + "cell_type": "markdown", + "id": "a3692ac5-2e5c-4806-b674-ed2720a12ed3", + "metadata": {}, + "source": [ + "To help visualize the model, we can use the `print_hamiltonian` function from `qibolab_visualization.emulator`:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d70d80ac-21de-40db-82aa-f669372e7c06", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dictionary\n" + ] + }, + { + "data": { + "text/latex": [ + "$O_i = b^{\\dagger}_i b_i$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$X_i = b^{\\dagger}_i + b_i$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "---------------------\n", + "One-body drift terms:\n", + "---------------------\n" + ] + }, + { + "data": { + "text/latex": [ + "$O_0$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$5.090167234445013~\\text{GHz}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$O_0O_0-O_0$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$-0.1680615025910826~\\text{GHz}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------------\n", + "Two-body drift terms:\n", + "---------------------\n", + "None\n", + "---------------------\n", + "One-body drive terms:\n", + "---------------------\n" + ] + }, + { + "data": { + "text/latex": [ + "$X_0$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$0.333~\\text{GHz}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------------\n", + "Dissipative terms:\n", + "---------------------\n", + ">> t1 Linblad operators:\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\sigma^+_0$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$0.0023758601136844794~\\sqrt{{ \\text{GHz} }}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + ">> t2 Linblad operators:\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\sigma^Z_0$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$0.002163732391848669~\\sqrt{{ \\text{GHz} }}$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------------\n" + ] + } + ], + "source": [ + "from qibolab_visualization.emulator import print_hamiltonian\n", + "print_hamiltonian(simulation_engine.model_config)" + ] + }, + { + "cell_type": "markdown", + "id": "e779a202-96bd-4a40-a9a6-64c110fd51dd", + "metadata": { + "tags": [] + }, + "source": [ + "## Simulation results" + ] + }, + { + "cell_type": "markdown", + "id": "08e1c8ee-8076-47ee-a05a-bcc068d681d0", + "metadata": {}, + "source": [ + "The simulation results generated by the simulation engine are returned together with the usual outputs of `execute_pulse_sequence` for device platforms and are grouped under 'simulation'. \n", + "\n", + "Let us retrieve the simulation results obtained previously:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9e45c3b1-1313-4fba-8dda-5810293369a7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['sequence_duration', 'simulation_dt', 'simulation_time', 'output_states'])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation_results = results['simulation']\n", + "simulation_results.keys()" + ] + }, + { + "cell_type": "markdown", + "id": "d1a09410-20f2-4797-9540-636f427a76cb", + "metadata": {}, + "source": [ + "The time taken to complete the simulation is:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "abfff213-828e-434c-b4c5-2de8c07d8ae5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.246244167" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation_results['simulation_time']" + ] + }, + { + "cell_type": "markdown", + "id": "f499f704-f3da-4031-92c9-a9ef92d171ba", + "metadata": {}, + "source": [ + "In addition, one can generate the list of discretized times used in the simulation:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b6a08d7f-bd83-44b1-868f-9346e8cd21e2", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "sequence_duration = simulation_results['sequence_duration']\n", + "simulation_dt = simulation_results['simulation_dt']\n", + "sim_time_list = np.linspace(0,sequence_duration,num=int(sequence_duration/simulation_dt)+1)" + ] + }, + { + "cell_type": "markdown", + "id": "79574a8f-d831-48d5-a47c-848392773fda", + "metadata": {}, + "source": [ + "When 'output_state_history' in `'simulation_config'` is set to 'True', the corresponding device quantum states obtained from simulation at each of these times are stored in 'output_states' as objects native to the simulation engine library. In this case, these are :class:`qutip.Qobj`. As an example, we see that the initial state is indeed the density matrix for a 3 level system corresponding to $\\ket{0}$:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "757e3e62-86d4-46c5-8ff4-8d0b62d3ca85", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True $ \\\\ \\left(\\begin{matrix}1.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0\\\\\\end{matrix}\\right)$" + ], + "text/plain": [ + "Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True\n", + "Qobj data =\n", + "[[1. 0. 0.]\n", + " [0. 0. 0.]\n", + " [0. 0. 0.]]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulated_states = simulation_results['output_states']\n", + "simulated_states[0]" + ] + }, + { + "cell_type": "markdown", + "id": "d8df8936-bd2c-4794-a392-2ff6816391c7", + "metadata": {}, + "source": [ + "One can call the `compute_overlaps` method in the simulation engine to compute the overlaps of the state with the different computational basis states for the entire simulation history. We can then visualize this with the plot_overlaps function from `qibolab_visualization.emulator`:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d912711f-4618-421b-92c7-f5b61c4b853b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overlap of final state with basis states:\n", + "[0] 0.0016351326811553345\n", + "[1] 0.9982829949142029\n", + "[2] 8.187240463464329e-05\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "overlaps = simulation_engine.compute_overlaps(simulated_states)\n", + "\n", + "from qibolab_visualization.emulator import plot_overlaps\n", + "plot_overlaps(overlaps,sim_time_list,time_label='Time / ns');" + ] + }, + { + "cell_type": "markdown", + "id": "8e369387-8913-4e8d-8a21-b8970f358407", + "metadata": { + "tags": [] + }, + "source": [ + "## Sampling and applying readout noise" + ] + }, + { + "cell_type": "markdown", + "id": "5688f522-e408-4759-b951-74fa003b6be3", + "metadata": {}, + "source": [ + "By default, the 'readout_error' from the `'model_params'` dictionary is applied when generating the samples from simulation without noise:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "bce5d664-de80-45cc-9611-71a138b3fbbf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 984)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples = results[0].samples\n", + "samples[:20].tolist(), np.sum(samples)" + ] + }, + { + "cell_type": "markdown", + "id": "24a8bb55-23ce-4c3d-a73c-bcced2ddaa6e", + "metadata": {}, + "source": [ + "Samples can be obtained from the final state of the simulation without applying readout error manually by the `get_samples` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "286e6c12-b87b-47cf-9d73-541194f5c185", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 997)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_state = simulated_states[-1]\n", + "\n", + "from qibolab.instruments.emulator.pulse_simulator import get_samples\n", + "ro_qubit_list = [pulse_r0.qubit]\n", + "ro_reduced_dm, rdm_qubit_list = pulse_simulator.simulation_engine.qobj_to_reduced_dm(final_state, ro_qubit_list)\n", + "noiseless_samples = get_samples(1000, ro_reduced_dm, rdm_qubit_list, pulse_simulator.simulation_engine.qid_nlevels_map)\n", + "\n", + "noiseless_samples[0][:20], np.sum(noiseless_samples[0])" + ] + }, + { + "cell_type": "markdown", + "id": "97b760c6-01d4-43a1-96af-37e810247fa2", + "metadata": {}, + "source": [ + "The `readout_error` can be applied subsequently as well with the `apply_readout_noise` function:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4e6a91b6-3d27-4505-9f10-718b19fb6c0d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1], 895)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qibolab.instruments.emulator.pulse_simulator import apply_readout_noise\n", + "\n", + "readout_error = {0: [0.1, 0.1], 1: [0.1, 0.1]}\n", + "noisy_samples = apply_readout_noise(noiseless_samples, readout_error)\n", + "noisy_samples[0][:20], np.sum(noisy_samples[0])" + ] + }, + { + "cell_type": "markdown", + "id": "24a9f3fe-93e3-4daa-87f7-272a8a016119", + "metadata": {}, + "source": [ + "## Returning only the final state of simulations" + ] + }, + { + "cell_type": "markdown", + "id": "7a877c1f-e780-4289-9351-0821593997b5", + "metadata": {}, + "source": [ + "In some cases, the entire history of the simulated states is not needed. One can save memory by setting `'output_state_history' = 'False'`in `'simulations_config'`. This is useful for instance when running sweepers:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e0690c99-11a0-45a0-87c2-f81ba39f3bf6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from qibolab.sweeper import Sweeper, Parameter\n", + "\n", + "parameter = Parameter.duration\n", + "parameter2 = Parameter.amplitude\n", + "parameter_range = np.linspace(pulse_x0.duration*.5, pulse_x0.duration*1.0, num=2)\n", + "parameter2_range = np.linspace(pulse_x0.amplitude*.95, pulse_x0.amplitude*1.05, num=3)\n", + "sweeper = Sweeper(parameter, parameter_range, [pulse_x0])\n", + "sweeper2 = Sweeper(parameter2, parameter2_range, [pulse_x0])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9012c9b0-74a2-420f-8c4c-2c1addb16803", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:18:44]: Minimal execution time (sweep): 7.4958711466666665\n", + "INFO:qibo.config:Minimal execution time (sweep): 7.4958711466666665\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Total run time: 0.85s*] Elapsed 0.84s / Remaining 00:00:00:00\n", + " Total run time: 0.97s*] Elapsed 0.97s / Remaining 00:00:00:00[*********81%******* ] Elapsed 0.86s / Remaining 00:00:00:00\n", + " Total run time: 1.05s*] Elapsed 1.05s / Remaining 00:00:00:00[*********49% ] Elapsed 0.51s / Remaining 00:00:00:00\n", + " Total run time: 1.68s*] Elapsed 1.68s / Remaining 00:00:00:00[***** 20% ] Elapsed 0.52s / Remaining 00:00:00:02\n", + " Total run time: 1.21s*] Elapsed 1.21s / Remaining 00:00:00:00[*********55%* ] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 1.02s*] Elapsed 1.02s / Remaining 00:00:00:00\n" + ] + } + ], + "source": [ + "# output only final state\n", + "emulator_platform.instruments['pulse_simulator'].output_state_history = False\n", + "sweep_results = emulator_platform.sweep(sequence, ExecutionParameters(), sweeper, sweeper2)" + ] + }, + { + "cell_type": "markdown", + "id": "a1fe5e3d-7619-480e-b3a8-e4b60e037092", + "metadata": {}, + "source": [ + "To help visualize the simulation results, we can once again look at its overlap with the basis states of the system. We use `make_array_index_list` function to generate a list of all possible index combinations of an array with arbitrary shape, in this case corresponding to all possible combinations of different sweeper parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "37ac5613-2c25-4344-b5bf-4604ed2859d1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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vpyIiIgUY4aCiIhILVbRWJT24QYYUBAREalF5pMum+3DDTCgICIiUokEF6yhcMlI1Mc1FERERKQYMxRERERq6aAnZXYEBhREREQq4W2jRERERDIwQ0FERKQW3uVBRERESklCQFK4BkLp9u2FUx5ERESkGDMUREREarH+WpT24QYYUBAREamEUx5EREREMjBDQUREpBbe5UFERESK8UmZREREpBSflElEREQkAzMUREREauGUBxERESklWRuL0j7cAac8iIiISDFmKIiIiNTCKQ8iIiJSrBs9h4JTHkRERKQYMxREREQq6U7v8mBAQUREpJZutIaCUx5ERESkGDMUREREahEAlD5Hwj0SFAwoiIiI1MI1FERERKScgAvWULhkJKrjGgoiIiJSjBkKIiIitXSjuzwYUBAREanFCkByQR9ugFMeREREpFibAootW7YgODgYWq0WEREROHLkSLNtd+/ejWnTpuHaa6+Fr68voqOj8dFHH9m1ycrKgiRJDqW2trYtwyMiIuoUmu7yUFrcgeyAIjs7GytWrMDKlStRVFSE2NhYJCQkoLS01Gn7/Px8TJs2Dbm5uThx4gSmTJmCWbNmoaioyK6dr68vTCaTXdFqtW07KiIios6gaQ2F0uIGZK+hWL9+PZKTk7F48WIAQHp6Oj766CNkZGQgLS3NoX16errd5xdeeAH79u3Du+++i/DwcFu9JEnw9/eXOxwiIiLqBGRlKOrq6nDixAnEx8fb1cfHx+PYsWOt6sNqteL8+fPw8/Ozq79w4QICAwMxaNAgzJw50yGDcSWLxQKz2WxXiIiIOpVulKGQFVBUVVWhoaEBer3erl6v16OioqJVfbz88suoqanB3LlzbXXDhw9HVlYW9u/fj507d0Kr1WLixIn45ptvmu0nLS0NOp3OVgICAuQcChERkfoYULRMkuzvgRFCONQ5s3PnTqxevRrZ2dkYMGCArT4qKgrz5s1DWFgYYmNj8dZbb+GGG27AK6+80mxfqampqK6utpWysrK2HAoRERG5gKw1FP3794enp6dDNqKystIha3Gl7OxsJCcn4+2338bUqVNbbOvh4YFx48a1mKHQaDTQaDStHzwREVF743MonPP29kZERASMRqNdvdFoRExMTLPb7dy5EwsWLMDf/vY33HbbbVfdjxACxcXFMBgMcoZHRETUqXSn20Zl3+WR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pyteC0p15euhuroaAFp8i2R3uCZacx6adOXroaGhAbt27UJNTQ2io6OdtukO10N7cIuAoqqqCg0NDQ5vH9Xr9Q5vKW1SUVHhtH19fT2qqqpUG6ua2nIeDAYDtm7dipycHOzevRshISGIi4tDfn5+ewy5U+iK10JbdfXrQQiBlJQU3HTTTQgNDW22XVe/Jlp7Hrry9fDPf/4T11xzDTQaDZYsWYI9e/Zg5MiRTtt29euhvch+l0dHkiTJ7rMQwqHuau2d1bsbOechJCQEISEhts/R0dEoKyvDSy+9hEmTJqk6zs6kq14LcnX16+Hhhx/GF1980aoXC3bla6K156ErXw8hISEoLi7GuXPnkJOTg/nz5yMvL6/ZoKIrXw/txS0yFP3794enp6fDX+GVlZUOUWUTf39/p+179OiBfv36qTZWNbXlPDgTFRWFb775xtXD67S64rXgSl3lenjkkUewf/9+HDp0CIMGDWqxbVe+JuScB2e6yvXg7e2N66+/HpGRkUhLS0NYWBg2bNjgtG1Xvh7ak1sEFN7e3oiIiIDRaLSrNxqNiImJcbpNdHS0Q/sDBw4gMjISXl5eqo1VTW05D84UFRXBYDC4enidVle8FlzJ3a8HIQQefvhh7N69G5988gmCg4Ovuk1XvCbach6ccffroTlCCFgsFqc/64rXQ4fooMWgsu3atUt4eXmJzMxMcerUKbFixQrRq1cv8d133wkhhHjqqadEUlKSrf23334revbsKR577DFx6tQpkZmZKby8vMQ777zTUYfgEnLPw5/+9CexZ88e8fXXX4t//etf4qmnnhIARE5OTkcdgmLnz58XRUVFoqioSAAQ69evF0VFReL7778XQnSfa0EI+eeiK14PDz30kNDpdOLw4cPCZDLZysWLF21tusM10Zbz0BWvByGESE1NFfn5+aKkpER88cUX4umnnxYeHh7iwIEDQojucT10BLcJKIQQYvPmzSIwMFB4e3uLsWPH2t0ONX/+fHHzzTfbtT98+LAIDw8X3t7eIigoSGRkZLTziNUh5zysW7dODB06VGi1WtG3b19x0003iffff78DRu06Tbe6XVnmz58vhOhe14Lcc9EVrwdnxw9AbN++3damO1wTbTkPXfF6EEKIRYsW2X5HXnvttSIuLs4WTAjRPa6HjiAJ8evKEyIiIqI2cos1FERERNS5MaAgIiIixRhQEBERkWIMKIiIiEgxBhRERESkGAMKIiIiUowBBRERESnGgIKIiIgUY0BBREREijGgICIiIsUYUBAREZFi/w+/x+NQp2SlcwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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1qwxxhhz9uxZExISYu666y5LuUcffdT4+/ubEydOGGOMycnJMZLMiy++aClXUFBg2rdvbx599FFX3qhRo4wk8+GHH9Zo16hRo8yoUaPqbHf1723JkiWmS5cult9vRESEcTgcJi8vz3LOuHHjTFBQkCktLa2z3qNHjxpJZv369cYYY/bs2WMkmUcffdRERkZa6oqLi3Md79q1y0gyu3btcuXNmzfP1PXPniQTEhJinE6nK6+4uNi0a9fOpKSk1Nk+Y/7z30d+fn695Ywxxul0mr59+5ru3bub77//vs62zJs374J1AXZhWAFuWb9+vfbv329JF+o5+MlPfmI5vvbaa1VWVqbjx4+78nJzc/WTn/xEXbp0kY+Pj/z8/HTPPfeosrJSf/vb39xq49VXX61OnTrpscce02uvvabPP//crfMl6bXXXtPgwYMVGBgoX19f+fn56cMPP9Rf//rXC55bVlamDz/8ULfddpsuueQSVVRUuNKECRNUVlamvXv31nn+Rx99JEmWIQrpXPd6hw4d9OGHH0o612Mzffp0bdq0yTVMU1lZqd/85jeaPHmyunTpIkn63e9+J4fDoenTp1vaEhoaqkGDBtVYbdGpUyfddNNNDbpP1b0WwcHBrt/bM888o5MnT1p+v5LUv39/DRo0yJJ31113yel06s9//nOdn9GrVy/17NlTO3fulCRlZmZq4MCBmj59uvLz8/Xll1+qvLxce/bssfSgNMaYMWPUsWNH13FISIi6deumr7/+2qN6q5WVlen//b//p6+//lq//e1vdemll3qlXnhXdna2Jk2apPDwcDkcDo9WNTVE9RDs+Sk0NNTWz7wQggO4pW/fvho6dKglXUj1l1S1gIAASdK//vUvSdKxY8c0YsQIFRYWasWKFfr444+1f/9+1/hwdbmGCg4OVlZWlq677jo98cQT6t+/v8LDw7Vw4cIGzWFYvny5HnjgAQ0bNkwZGRnau3ev9u/fr1tuuaVBbTl58qQqKir0yiuvyM/Pz5ImTJggSZalbrWd7+vr6xqiqFb9D8bJkyddebNnz1ZZWZk2btwoSfrggw9UVFSkWbNmucr885//lDFGISEhNdqzd+/eGm05v5u9Pn/6058UHx8vSXrjjTf0xz/+Ufv379eTTz4pqebvrbZ/7Krzzr+m2owdO9YVFO3cuVPjxo3TwIEDFRISop07d+qPf/yj/vWvf3kcHPz4WZXOPa/uPoO1KS8v12233aY9e/Zo27ZtGjZsmMd1wh6lpaUaNGiQVq5c2WSf2b9/fxUVFbnSX/7ylyb77Now5wDNbsuWLSotLdWmTZsUERHhys/Ly2t0nQMHDtTGjRtljNGnn36qtLQ0LVmyRO3bt9fjjz9e77lvvfWWRo8erdWrV1vyq+crXEinTp3k4+OjxMREzZs3r9YykZGRdZ7fpUsXVVRU6JtvvrEECMYYFRcX6/rrr3fl9evXTzfccIPWrVun+++/X+vWrVN4eLjrS1uSLr/8cjkcDn388ceuwOx8P85zOBwNus6NGzfKz89Pv/vd7xQYGOjKr+uvrOLi4jrzavtSPt/YsWO1du1a/elPf9K+fftcM/xvuukmZWZm6uuvv9all17aYlfMlJeXa8qUKdq1a5e2bt2qsWPHNneTUI+EhAQlJCTU+fMzZ87oqaee0v/+7//q1KlTGjBggJYtW+bRkmZfX99m7y04Hz0HaHbVX0bnf0kZY/TGG294pe5BgwbppZde0mWXXWbpvq7rL0KHw1HjC/PTTz+1TGI7v70/ruOSSy7RmDFjlJubq2uvvbZGT8vQoUPr/TKs/uJ46623LPkZGRkqLS2t8cUya9Ys7du3T3v27NF7772nGTNmyMfHx/XziRMnyhijwsLCWtsycODAOttSH4fDIV9fX8tn/etf/9JvfvObWst/9tlnOnTokCXv7bffVseOHS0rK2ozduxYORwOPf3002rXrp1Gjhwp6dxkxV27dikzM1MjR46Un59fvfXU9TuzU3WPwUcffaSMjAyNHz++yT4b9pg1a5b++Mc/auPGjfr00091xx136JZbbtGRI0caXeeRI0cUHh6uyMhI/exnP6uxkqip0XOAZjdu3Dj5+/vrzjvv1KOPPqqysjKtXr1a3333XaPq+93vfqdXX31VU6ZM0VVXXSVjjDZt2qRTp05p3LhxrnIDBw7U7t279d577yksLEwdO3ZUVFSUJk6cqGeffVYLFy7UqFGjdPjwYS1ZskSRkZGWlRodO3ZURESE6y/Bzp076/LLL1fPnj21YsUK3XjjjRoxYoQeeOAB9ezZU99//72OHj2q9957zzWvoK77MX78eD322GNyOp0aPny4a7VCdHS0EhMTLeXvvPNOJSUl6c4771R5eXmNuQrDhw/Xfffdp1mzZunAgQMaOXKkOnTooKKiIu3Zs0cDBw7UAw884PZ9vvXWW7V8+XLddddduu+++3Ty5Em98MILtfZOSOc2y/rJT36iRYsWKSwsTG+99ZYyMzO1bNmyC+6j0K1bNw0YMEA7duzQmDFjXOVvvvlmffvtt/r222+1fPnyC7a5OhBatmyZEhIS5OPjo2uvvVb+/v5uXn3D3X777Xr//ff15JNPqkuXLpb5JkFBQZZNmtDyffnll9qwYYP+8Y9/KDw8XJL0yCOP6A9/+IPWrVunpUuXul3nsGHDtH79el1zzTX65z//qeeee05xcXH67LPPLtirZpvmnA2J1qN6Nvb+/ftr/Xl9qxW++eabWus6f2b3e++9ZwYNGmQCAwPNFVdcYf7rv/7LvP/++zVmmzdktcIXX3xh7rzzTtOrVy/Tvn17ExwcbG644QaTlpZmKZeXl2eGDx9uLrnkEiPJNRO/vLzcPPLII+aKK64wgYGBZvDgwWbLli21fvbOnTtNdHS0CQgIMJIsqx/y8/PN7NmzzRVXXGH8/PxM165dTVxcnHnuuefqbb8xxvzrX/8yjz32mImIiDB+fn4mLCzMPPDAA+a7776rtfxdd91lJJnhw4fXWeebb75phg0bZjp06GDat29vevXqZe655x5z4MABV5lRo0aZ/v3713p+basV3nzzTRMVFWUCAgLMVVddZVJSUszatWtr/H4jIiLMrbfeat59913Tv39/4+/vb3r27GmWL19+wXtR7eGHHzaSzPPPP2/J7927t5FkPv30U0t+basVysvLzb333mu6du1qHA6HpZ2qY4VARETEBVe11LdaQXWs8jn/mavtHFYrtAySzObNm13H77zzjpFkOnToYEm+vr5m6tSpxpj//HtYX6rv93v69GkTEhJSY4VRU3IY86PdSgDAy3r27KkBAwZ4vKFQS5WWlqZZs2bp6NGjioiIuOAKnrpUVlbKGCM/Pz/NmzevSSfEoXYOh0ObN292bbOenp6uu+++W5999pllSE2SLr30UoWGhurs2bP68ssv6623U6dOlv1FfmzcuHG6+uqra8x9aioMKwCAl1x99dWSzu2yefnll7t9fpcuXWrsHoqWJTo6WpWVlTp+/LhGjBhRaxk/P78a76BxR3l5uf7617/WWX9TIDgAAA9NmjRJ+/fvdx2f/+Ild+zevds1r6W2bZfR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1/GpU6cUERGhY8eO2fKLbi2cTqe6d++ugoKCJut+aom4D+dwH87hPpzDffiPkpIS9ejRQ5072zPcFBgYqPz8fJ05c8Yr9fn7+yswMNArdTWEW8HB5ZdfLh8fnxp/0R8/frzGX/7VQkNDay3v6+urLl261FumrjolKSAgQAEBATXyg4ODL/qHXpKCgoK4D+I+VOM+nMN9OIf78B/t2tm33U9gYGCTfqF7k1t3xd/fX0OGDFFmZqYlPzMzU3FxcbWeExsbW6P8jh07NHToUPn5+dVbpq46AQCAfdweVkhKSlJiYqKGDh2q2NhYrVmzRseOHdPcuXMlnevuLyws1Pr16yWdW5mwcuVKJSUl6ec//7lycnK0du1ayyqE+fPna+TIkVq2bJkmT56srVu3aufOndqzZ4+XLhMAADSU28HBtGnTdPLkSS1ZskRFRUUaMGCAtm/froiICElSUVGRZc+DyMhIbd++XQ8//LBWrVql8PBwvfzyy/rpT3/qKhMXF6eNGzfqqaee0tNPP61evXopPT1dw4YNa3C7AgICtHDhwlqHGi4m3IdzuA/ncB/O4T6cw334D+5F/dze5wAAALRtvHgJAABYEBwAAAALggMAAGBBcAAAACwIDgAAgEWrCg5effVVRUZGKjAwUEOGDNHHH39cb/msrCwNGTJEgYGBuuqqq/Taa681UUvt5c592L17txwOR430xRdfNGGLvSs7O1uTJk1SeHi4HA6HtmzZcsFz2uqz4O69aIvPQ0pKiq6//np17NhR3bp105QpU3T48OELntfWnonG3Ie2+DxI0urVq3Xttde6doKMjY21vPW3Nm3tefBUqwkO0tPTtWDBAj355JPKzc3ViBEjlJCQYNlT4Xz5+fmaMGGCRowYodzcXD3xxBN66KGHlJGR0cQt9y5370O1w4cPq6ioyJV69+7dRC32vtLSUg0aNEgrV65sUPm2+ixI7t+Lam3pecjKytK8efO0d+9eZWZmqqKiQvHx8SotLa3znLb4TDTmPlRrS8+DJF155ZX67//+bx04cEAHDhzQTTfdpMmTJ+uzzz6rtXxbfB48ZlqJG264wcydO9eS16dPH/P444/XWv7RRx81ffr0seTdf//9JiYmxrY2NgV378OuXbuMJPPdd981QeuaniSzefPmesu01WfhxxpyL9r682CMMcePHzeSTFZWVp1lLoZnoiH34WJ4Hqp16tTJ/M///E+tP7sYngd3tYqegzNnzujgwYOKj4+35MfHx+uTTz6p9ZycnJwa5cePH68DBw7o7Nmmfze2NzTmPlSLjo5WWFiYxo4dq127dtnZzBanLT4LnmrLz0NJSYkk1fu2vYvhmWjIfajWlp+HyspKbdy4UaWlpYqNja21zMXwPLirVQQHJ06cUGVlZY23NIaEhNR4m2O14uLiWstXVFToxIkTtrXVTo25D2FhYVqzZo0yMjK0adMmRUVFaezYscrOzm6KJrcIbfFZaKy2/jwYY5SUlKQbb7xRAwYMqLNcW38mGnof2vLz8Je//EWXXnqpAgICNHfuXG3evFn9+vWrtWxbfx4aw+13KzQnh8NhOTbG1Mi7UPna8lsbd+5DVFSUoqKiXMexsbEqKCjQCy+8oJEjR9razpakrT4L7mrrz8ODDz6oTz/9tEEvbWvLz0RD70Nbfh6ioqKUl5enU6dOKSMjQzNmzFBWVladAUJbfh4ao1X0HFx++eXy8fGp8dfx8ePHa0R71UJDQ2st7+vrqy5dutjWVjs15j7UJiYmRkeOHPF281qstvgseFNbeR5++ctfatu2bdq1a5euvPLKesu25WfCnftQm7byPPj7++vqq6/W0KFDlZKSokGDBmnFihW1lm3Lz0NjtYrgwN/fX0OGDFFmZqYlPzMzU3FxcbWeExsbW6P8jh07NHToUPn5+dnWVjs15j7UJjc3V2FhYd5uXovVFp8Fb2rtz4MxRg8++KA2bdqkjz76SJGRkRc8py0+E425D7Vp7c9DXYwxKi8vr/VnbfF58FgzTYR028aNG42fn59Zu3at+fzzz82CBQtMhw4dzFdffWWMMebxxx83iYmJrvJ///vfzSWXXGIefvhh8/nnn5u1a9caPz8/8+677zbXJXiFu/fhpZdeMps3bzZ/+9vfzP/93/+Zxx9/3EgyGRkZzXUJHvv+++9Nbm6uyc3NNZLM8uXLTW5urvn666+NMRfPs2CM+/eiLT4PDzzwgAkODja7d+82RUVFrvTDDz+4ylwMz0Rj7kNbfB6MMSY5OdlkZ2eb/Px88+mnn5onnnjCtGvXzuzYscMYc3E8D55qNcGBMcasWrXKREREGH9/fzN48GDLEp0ZM2aYUaNGWcrv3r3bREdHG39/f9OzZ0+zevXqJm6xPdy5D8uWLTO9evUygYGBplOnTubGG280v//975uh1d5Tvfzqx2nGjBnGmIvrWXD3XrTF56G265dk1q1b5ypzMTwTjbkPbfF5MMaY2bNnu/6N7Nq1qxk7dqwrMDDm4ngePOUw5t+zLgAAANRK5hwAAICmQ3AAAAAsCA4AAIAFwQEAALAgOAAAABYEBwAAwILgAAAAWBAcAAAAC4IDAABgQXAAAAAsCA4AAIDF/wdZzTbu/IOwTgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qibolab.instruments.emulator.pulse_simulator import make_array_index_list\n", + "\n", + "final_states_array = sweep_results['simulation']['output_states']\n", + "shape = final_states_array.shape\n", + "index_list = make_array_index_list(shape)\n", + "overlaps = {}\n", + "for index in index_list:\n", + " pulse_simulator.merge_sweep_results(overlaps, simulation_engine.compute_overlaps(final_states_array[tuple(index)]))\n", + "\n", + "import matplotlib.pyplot as plt\n", + "for label in overlaps.keys():\n", + " plt.figure()\n", + " plt.pcolormesh(np.array(overlaps[label]).reshape(shape))\n", + " plt.colorbar()\n", + " plt.title(f'Final state overlap with {label}')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "071e08d8", + "metadata": {}, + "source": [ + "## Flux-pulse-based 2-qubit gates" + ] + }, + { + "cell_type": "markdown", + "id": "519b34d3", + "metadata": {}, + "source": [ + "In the following, we demonstrate the emulator's support for flux-pulse-based two-qubit gates by using the two-qubit test emulator `default_q01_flux` that can be found in ``/qibolab/tests/emulators/``. For this purpose, we will simulate each qubit as a two-level system:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "2515ae02", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:18:51]: Loading platform default_q01_flux\n", + "INFO:qibo.config:Loading platform default_q01_flux\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'model_name': 'general_no_coupler_model', 'topology': [[0, 1]], 'qubits_list': ['0', '1'], 'nlevels_q': [2, 2], 'couplers_list': [], 'nlevels_c': [], 'drift': {'one_body': [(28.274333882308138, 'O_0', ['0']), (-0.9424777960769379, 'O_0 * O_0 - O_0', ['0']), (27.01769682087222, 'O_1', ['1']), (-0.9738937226128359, 'O_1 * O_1 - O_1', ['1'])], 'two_body': [(0.03769911184307752, 'bdag_1 ^ b_0 + b_1 ^ bdag_0', ['1', '0'])]}, 'drive': {'D-0': [(2.098583892597982, 'X_0', ['0'])], 'D-1': [(2.098583892597982, 'X_1', ['1'])]}, 'flux': {'F-0': [(6.283185307179586, 'O_0', ['0'])], 'F-1': [(6.283185307179586, 'O_1', ['1'])]}, 'flux_params': {'0': {'flux_quanta': 0.3183098861837907, 'max_frequency': 4.5, 'current_frequency': 4.5}, '1': {'flux_quanta': 0.3183098861837907, 'max_frequency': 4.3, 'current_frequency': 4.3}}, 'dissipation': {'t1': [(0.0, 'sp01_0', ['0']), (0.0, 'sp01_1', ['1'])], 't2': [(0.0, 'Z01_0', ['0']), (0.0, 'Z01_1', ['1'])]}, 'method': 'master_equation', 'readout_error': {'0': [0.01, 0.02], '1': [0.01, 0.02]}, 'platform_to_simulator_channels': {'drive-0': 'D-0', 'readout-0': 'R-0', 'flux-0': 'F-0', 'drive-1': 'D-1', 'readout-1': 'R-1', 'flux-1': 'F-1'}}\n" + ] + } + ], + "source": [ + "# create two-qubit emulator platform as per any other device platform\n", + "\n", + "emulator_platform = create_platform(\"default_q01_flux\")\n", + "simulation_engine = emulator_platform.instruments['pulse_simulator'].simulation_engine" + ] + }, + { + "cell_type": "markdown", + "id": "51870517", + "metadata": {}, + "source": [ + "In this demonstration, we first apply an RX pulse on qubit 0, but in addition we also apply an iSWAP pulse on both qubits right after before finally applying readout pulses on both qubits:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "08811aa1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:18:51]: Minimal execution time (sequence): 0.32246600000000003\n", + "INFO:qibo.config:Minimal execution time (sequence): 0.32246600000000003\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Total run time: 3.68s*] Elapsed 3.68s / Remaining 00:00:00:00[*********84%******* ] Elapsed 3.24s / Remaining 00:00:00:00[*********85%******** ] Elapsed 3.25s / Remaining 00:00:00:00[*********99%***********] Elapsed 3.64s / Remaining 00:00:00:00[*********99%***********] Elapsed 3.65s / Remaining 00:00:00:00\n" + ] + } + ], + "source": [ + "from qibolab.pulses import FluxPulse\n", + "\n", + "# Extract preset pulses from runcard\n", + "duration = 0\n", + "pulse_x0 = emulator_platform.create_RX_pulse(qubit=0, start=0)\n", + "duration += pulse_x0.duration\n", + "pulse_iswap01 = emulator_platform.create_iSWAP_pulse_sequence(qubits=[0,1],start=int(duration))[0]\n", + "duration += pulse_iswap01.duration\n", + "pulse_r0 = emulator_platform.create_qubit_readout_pulse(qubit=0, start=int(duration))\n", + "pulse_r1 = emulator_platform.create_qubit_readout_pulse(qubit=1, start=int(duration))\n", + "\n", + "# Add pulses to PulseSequence\n", + "sequence = PulseSequence()\n", + "sequence.add(pulse_x0)\n", + "sequence.add(pulse_iswap01)\n", + "sequence.add(pulse_r0)\n", + "sequence.add(pulse_r1)\n", + "\n", + "# Execute the pulse sequence and save the output\n", + "results = emulator_platform.execute_pulse_sequence(sequence, options=options)" + ] + }, + { + "cell_type": "markdown", + "id": "e5e0b838", + "metadata": {}, + "source": [ + "Following the same steps as before, we extract the simulation results and plot the overlap of the two-qubit state with the various computational basis states as it evolves in time under the above pulse sequence:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "c38e25b9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overlap of final state with basis states:\n", + "[0, 0] 2.3806684324678472e-05\n", + "[0, 1] 0.9980132409681193\n", + "[1, 0] 0.0019625117159143535\n", + "[1, 1] 4.4063163784844247e-07\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAGwCAYAAABCV9SaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACMK0lEQVR4nOzdd3gU9drG8e/sbnolPYFAEnonhI40aSJiPYL6KjZQVAREVLBXsCKggoooR0XBBgcVqdKrAqF3AgkkIaT3tjvvH0uCkZaym8nuPp/ryjmT2dmZO2NInsyvKaqqqgghhBBC2Dmd1gGEEEIIIWqDFD1CCCGEcAhS9AghhBDCIUjRI4QQQgiHIEWPEEIIIRyCFD1CCCGEcAhS9AghhBDCIRi0DlDbTCYTiYmJeHl5oSiK1nGEEEIIUQmqqpKTk0NYWBg6XfWe2Thc0ZOYmEh4eLjWMYQQQghRDQkJCTRo0KBa73W4osfLywsw3zRvb2+N0wghhBCiMrKzswkPDy//PV4dDlf0lDVpeXt7S9EjhBBC2JiadE2RjsxCCCGEcAhS9AghhBDCIUjRI4QQQgiH4HB9eirLaDRSUlKidQy74eTkhF6v1zqGEEIIByZFz7+oqkpycjKZmZlaR7E7vr6+hISEyPxIQgghNCFFz7+UFTxBQUG4u7vLL2gLUFWV/Px8UlJSAAgNDdU4kRBCCEckRc8/GI3G8oLH399f6zh2xc3NDYCUlBSCgoKkqUsIIUStk47M/1DWh8fd3V3jJPap7L5KXykhhBBakKLnMqRJyzrkvgohhNCSFD1CCCGEcAiaFj0bNmxg2LBhhIWFoSgKS5YsueZ71q9fT0xMDK6urkRFRfHpp59aP6gQQgghbJ6mRU9eXh7t27fn448/rtTxcXFx3HjjjfTq1Yvdu3fz/PPPM27cOH7++WcrJ637+vbti6IoKIpCbGxsrV//gQceKL9+ZYpXIYQQorZpWvQMGTKEN998k9tvv71Sx3/66ac0bNiQGTNm0LJlS0aNGsVDDz3E+++/b+Wk16aqKsWlRopLTZQYTZRe+DCaVEwmFZOqoqqqVTOMHj2apKQk2rRpU74vPj6eYcOG4eHhQUBAAOPGjaO4uLjK5/75559p1aoVLi4utGrVisWLF1d4febMmSQlJdX4axBCCCGsxaaGrG/dupVBgwZV2Dd48GDmzZtHSUkJTk5Ol7ynqKiIoqKi8s+zs7Otkq3UpHI4Oeeqxygo6HUXPwz/2jboFZz1epwNOpz0SpU7/rq7uxMSElL+udFoZOjQoQQGBrJp0ybS0tK4//77UVWVjz76qNLn3bp1KyNGjOCNN97gtttuY/HixQwfPpxNmzbRtWtXAHx8fPDx8alSXlF1JtVEakEqKfkppOSnkFqQSmZRJllFWeQU51BQWkChsZCi0iJK1VJMqqm82FYxF94qKs56Z3xdfPF29sbP1Y9wr3DCvcJp5N2IALcA6XQuhKjIZILMU5ByGNJPQk4S5CRD3nkwlYJqAhdv8AgE71Dwi4J2d4GubnUdtqmiJzk5meDg4Ar7goODKS0tJTU19bKT3k2bNo3XXnut2tdUVZWCEuM1jysxmiguNaGa30RNn+nodQq+bk54uDjh4aLH3dmAXle1X0QrV67k4MGDJCQkEBYWBsAHH3zAAw88wFtvvYW3t3elzjNjxgwGDhzIlClTAJgyZQrr169nxowZfP/991X7wkSlFRmLOJh2kMPphzmYdpAj6Uc4mXWSImPRtd9cA/6u/rQNaEvrgNbEBMfQIbADTvpL/6AQQtixggyI3want0D8Vjh3AEryK/9+Nz/ocI/18lWTTRU9cOmw57K/Yq/0l+mUKVOYOHFi+efZ2dmEh4dX+noFJUZavbyiGklr7odHu5FXbIQc89fn4azH280JHzcnnPTXrp63bt1KmzZtygseMD8ZKyoqYufOnfTr169SObZu3cpTTz1VYd/gwYOZMWNGlb4ecW0JOQn8Gf8nG89sZFfKLkpMl85ppFf0+Lv5E+QWRIB7AH6ufvg4++Dl7IWbwQ0XgwuuelecdE7mflYoF/8fBRQoNhaTVZRFZlEmqQWpJOQkEJ8dT2JeImmFaaw7s451Z9YB4G5wp0tIF3o16MWARgPwc/Wr5bsihKgVaSfg8O9wZBkkbDc/vfknvQsENIOApuAdBl6h4BkEeidAgaJsyE2B7LOgq5t/KNlU0RMSEkJycnKFfSkpKRgMhivOoOzi4oKLi0ttxLO4MB83VCCvqJRio4ncolJyi0pJyizEy9WAv6czni6GKxZ8l3syVq9ePZydnS+5j1dzpSdsVTmHuLKC0gJ+O/kbS44vYe/5vRVeC3ALoIVfC1r5t6KVXyua1GtCfc/6GHTW+adbWFrI4fTD7E/dz97UvWxP2k56YXp5ETR1+1S6hXZjSOQQBjYaiLuTTOQphE3LT4d9P8LubyG54s8f/JtCo+7QsAfUjzE3Weltqmy4hE2l7969O7/++muFfStXrqRTp06X7c9jCW5Oeg6+Ptgq567MtRVFQVVVikpN5BSWklVQQn5xKdmFJWQXluDqpCfI68pF3eUKIlVVq9xn43JP2KTfR81kFWXx3wP/5cejP5JZlAmATtHRKbgT/cL70bN+TyK8I2r1PrsaXOkQ1IEOQR0Acx+iI+lH2Jy4mVWnV3Ew7SCbEzezOXEz7+x4h1ua3MLw5sOJ9ImstYxCCAuI3w7bZpuf7JQ9UdYZIKIXNL8Rmg8B38q3itgKTYue3Nxcjh8/Xv55XFwcsbGx+Pn50bBhQ6ZMmcLZs2f5+uuvARgzZgwff/wxEydOZPTo0WzdupV58+ZZtV+Joii4O2tbGyqKgquTHlcnPYFeLhSWGEnPKyY9r5jCEiPx6fkUFBspMVZ8FBkSEsL27dsr7MvIyKCkpOSSJzdXc6UnbFU5h7govySf+Qfm898D/yW/1NxGXt+zPnc1v4sbo24kyD1I44QX6RQdLf1b0tK/JaPajuJU1imWn1rO0hNLSchJ4NtD3/LtoW/pWb8nj7Z7lOigaK0jCyGuxGSEw7/Blo/hzI6L+0PbQ4d7oe1/wN2+m681/W3+999/V+hXUtb35v7772f+/PkkJSURHx9f/npkZCTLli3jqaee4pNPPiEsLIxZs2Zxxx131Hp2Lbk66QnzdSPIy4XU3GJSc4swqSpZBSWcSc8n1NcVvU5H9+7deeutt0hKSirv5L1y5UpcXFyIiYmp9PW6d+/OqlWrKvTrWblyJT169LD412bv/kr+i5c3v8yZ3DMANPFtwqPtHmVAowFWa7KypAifCMa0H8Mj7R5hS+IWFh5eyIYzG9h8djObz26mS0gXHm33KF1Cu2gdVQhRRlXh0FL48y1IPWLep3eGdsOh6xgIaattvlqk6U/Zvn37XnXumvnz51+yr0+fPuzatcuKqWyHQa8jxMcVfw9nDBc6NqfnF5NbVEq4nzuDBg2iVatW3Hfffbz33nukp6czadIkRo8eXemRWwDjx4+nd+/evPPOO9xyyy3873//Y/Xq1WzatMlaX5rdKSwt5P2/32fRkUWAua/OhI4TGNZ4GDqlbg3prAydouO6+tdxXf3rSMhOYN7+efzvxP/YkbyDHck76BnWk4mdJtKsXjOtowrh2I6vhjWvQ9Ie8+euvtBlNHQeDV6O97Te9n7aiks4GXS4GHR4u5pHdRUbTZw8n0dGQSm//fYbrq6u9OzZk+HDh3PrrbdeMpmjoiiXLTDL9OjRg4ULF/LVV1/Rrl075s+fz6JFi8rn6BFXdybnDPcuu7e84Lm58c0svXUptzS5xSYLnn8L9w7n1R6vsuy2ZdzV/C4MOgObEzdz56938sqWVziff17riEI4nrQTsGA4fHuHueBx9oQ+z8GEvXD9iw5Z8ICNdWQWV+ds0NE0yJOEjAJyCktIzCzA3yeIX3/99YqdYU+dOoXBYKBnz55XPfd//vMf/vOf/1gjtl3bc34Pj616jJySHLycvHi95+sMaDRA61hWEeoZygvdXmBkq5F8uOtDVp1exS/HfmHlqZWM7zie4c2H20WRJ0SdVpwHG6fDlllgLDYPHe/6KFz3FHgEaJ1Oc/ITyI7Mnj0bXx9vchJPEOztCkBabhHx6flXbEZcvnw5jzzyCE2bNq3RtceMGYOnp2eNzmFvtpzdwiMrHyGnJIconygW3bTIbguefwr3Dmd63+l8M+Qb2vi3Ibckl7e2v8V9f9zH0YyjWscTwn7FbYDZ3WDj++aCp/H18PhWGPyWFDwXKKq1F4SqY7Kzs/Hx8SErK+uSfi2FhYXExcURGRmJq6urRgmr5+zZsxQUFADQsGFDnJ2dSc8r5mxGPirg4+ZEuJ87OisNf05JSSlf4iM0NBQPD49LjrHl+1tVG85sYPza8ZSaSokJjuHj6z/G09nxikKjyciiI4uYtXsWeSV5GBQDj7R7hNHtRttEx20hbEJRLqx+Bf76wvy5TzjcMA1a3AR2NLXI1X5/V5YUPf9gj7+UswtKOJWWB0A9d2ca1HPTbH4de7y/l7PxzEbGrx1PiamEHmE9mNlvJq4G+/16KyM5L5m3d7zNmvg1ALQLaMfUXlNp5N1I42RC2LjTW2Dxo5B5YaRzp4dg4Ovg4qVtLiuwRNEjzVt2zvvCEx4FhYz8YlJyrLtuk6PbdW4Xj695vLzg+fj6jx2+4AEI8QhhRr8ZvN3rbbycvNibupc7f72Tn47+dNURnEKIKzAZYf17MH+oueDxaQgj/wc3fWiXBY+lSNHjAOq5OxPiY561+Vx2IdkFl67nJGouISeBCWsnANAhsAMf9v1QFur8l6FRQ/n55p/pHNKZgtICXtv6GlM2TSG/KgsZCuHocs7BN7fB2jfN62O1uwse3wJRfbVOVudJ0eMgAr1c8XI1/wJOSM+nsBIrx4vKM5qMvLDpBTKKMghyD+KTAZ/IulRXEOoZyheDvmBizET0ip7fT/7O/y37P+Ky4rSOJkTdd2oTfNoT4taDkzvcOgdu/0ye7lSSFD0OpJGfOy4GPUZV5VRaHkaT6dpvEpXySewn7E7ZjZvBjbmD5uLtXL32ZkehU3Q82OZB5g2eR6BbIMczj3P373ez6vQqraMJUTepKuyYC1/fAnnnIbgNPLIeOtyjdTKbIkWPA9HpFCIC3NHrFIpLTSRmFmodyS5sSdzC3H1zAXip20tE+URpnMh2xATH8MOwH+gU3Im8kjwmrpvIZ3s+k34+QvxTaTH8Oh6WTQJTKbS9E0athkCZ8byqpOhxMC4GPY38zM0uGfnF0r+nhs7lnWPyhskA3NrkVoY1HqZxItsT4BbA3EFzubflvQB8HPsxz296nmJjscbJhKgD8lLh65th138BBQa8BrfPBSc3rZPZJCl67ETfvn1RFAVFUYiNjb3qsZ6uTvi6OwOQkJF/yers1fHAAw+UX3/JkiU1Pp8tUFWVFze/SEZRBg08GzClyxStI9ksg87Ac12e46VuL6FX9Px28jdGrRxFemG61tGE0E76SZg3EOK3gos33PMDXDfBrubeqW1S9NiR0aNHk5SURJs2bcr3xcfHM2zYMDw8PAgICGDcuHEUFxdT39cNJ70Oo0klKbPgquc9cOAAd9xxBxERESiKwowZMy45ZubMmSQlJVn6S6rTlp9azrakbSgovNfnPem4bAHDmw9nzoA5eDl7sTtlN/cuu5eEnAStYwlR+87ugnmDzIWPT0Nzc1azQVqnsnlS9NgRd3d3QkJCMBjMM90ajUaGDh1KXl4emzZtYuHChfz88888/fTT6HUKDS80c2UWlJBTeOVmrvz8fKKionj77bcJCQm57DE+Pj5XfM0eZRZm8sqWVwC4p+U9tAloc413iMrqHtadb2/8lgaeDUjISWDkHyM5kn5E61hC1J5jq2D+TeYOyyFtYdQqCGyudSq7IPPAX4uqglZziDi51+gx5sqVKzl48CAJCQmEhYUB8MEHH/DAAw/w1ltv4e3tjb+nC2m5RSRlFZYPaf+3zp0707lzZwAmT55c7Tz2ZPrO6RSUFhDmEcb4juO1jmN3onyi+HrI14xZPYajGUd5cPmDfNz/YzoGd9Q6mhDWtfdH8wzLqhGi+sHwr8FVRoNaihQ911KSD1PDtLn284ngfOkaVpW1detW2rRpU17wAAwePJiioiJ27txJv379CPJyIT2vmMISI+l5Rfh5uFgiuV3bn7qfxccXAzC5y2TcDNKh0BoC3QP56oaveHLNk+xK2cUjqx7hgz4f0Ce8j9bRhLCOXd/A0icBFdqNgJs/BoOz1qnsijRv2bHk5GSCg4Mr7KtXrx7Ozs4kJycD4KTX4e9h/keVnF0kc/dcg6qqvL71dQC6hnalX8N+Gieyb97O3nw68FP6NOhDkbGICWsnsOb0Gq1jCWF5O+bC0rGACp0ehls/lYLHCuRJz7U4uZufuGh17Rq63OKiqqpW2B/s7UJGXjGlRhOpucUEe8taUVey4tQKDqUfQqfoeKnbS1rHcQhuBjc+7PchL2x6gT/i/mDS+km81+c9BjQaoHU0ISxjy0ew8kXzdrcnYPBbMkLLSqTouRZFqVETk5ZCQkLYvn17hX0ZGRmUlJRUeAKk1+kI9nElMbOA8zlF+Hk446SXh4D/VmIs4b2/3wPgzmZ3ygrhtchJ58TU66aioLAsbhmT1k/i3d7vMihCRrMIG7fpQ1j9qnm71yS4/kUpeKxIfrPZse7du7N///4KQ8lXrlyJi4sLMTExFY7183DG1aDHpKqkZMtK7Jez7sw6UvJTcNG78Ei7R7SO43AMOgNTr5vKTVE3YVSNPLvhWVacWqF1LCGqb9uciwVPvxeh/0tS8FiZFD12bNCgQbRq1Yr77ruP3bt3s2bNGiZNmsTo0aPx9q44GkCnKAR5mzsxZ+Sbm7rKFBcXExsbS2xsLMXFxZw9e5bY2FiOHz9eq1+P1r45+A1gfsoT5B6kcRrHpNfpebPnmwyLGoZRNfLchudYl7BO61hCVN3fX8HyC6Nh+0yGPs9om8dBSNFjx/R6Pb///juurq707NmT4cOHc+utt/L+++9XOE5RFObPn4+PmxPOep35aU/Oxac9iYmJREdHEx0dTVJSEu+//z7R0dGMGjWqtr8kzaw8tZLdKbsxKAbub32/1nEcml6n542eb5Q/8Xl63dPsSNqhdSwhKm/PQvjtKfN2j3HQV6YCqS3Sp8fONWzYkN9+++2Kr586dQqDwUDPnj1RFIUQH1fi0/NJyysmyMsFg15HRESEQy8AaTQZ+XL/lwDc0uQWQjwcZxLGuqqs8MkryWNtwlqe/PNJ5g2eJ5NEirrvwGJY8higQpdHYODr0qRVi+RJjx2ZPXs2np6e7Nu3r9LvWb58OY888ghNmzYFMD/tMehQVZWM/MovRjpmzBg8PT2rnNkWrEtYx4G0AzjpnKQvTx1i0Bl4r897dA3pSn5pPmNWj+F4hmM1uQobc3Id/DwaVBNE3wc3vCMFTy1TVAf7Ez47OxsfHx+ysrIu6ddSWFhIXFwckZGRuLra1rDts2fPUlBgXkOrYcOGODtXf36H8zlFJGUV4KzX0SzYC53u2v8oU1JSyM7OBiA0NBQPj0tHvNnq/R2zagybEzdzT4t7mNJVFhWta/JK8hi9cjT7UvcR6BbI10O+poFXA61jCVFR0l746kYozoFWt8J/vgSdXutUNuVqv78rS5702In69evTpEkTmjRpUqOCB6CeuxMGnY5io4mMguJKvScoKKj8+pcreGzVmZwzbEncAsDtTW/XOI24HA8nD+YMmEMT3yacLzjP42seJ6soS+tYQlyUcQoW/Mdc8ET0gts+k4JHI1L0iEsY9Dp83c3rcKXmVK7osVczd81ERaVjUEea+8mCf3WVj4sPnw74lGD3YOKy4hi/djzFRsf+3hV1RF4afHsH5J6DoNZw1wJwsp0n3fZGih5xWQGe5uHrRaVG8otLNU6jjbySPJafWg7Ao+0f1TiNuJZgj2BmD5iNp5MnO8/t5MVNL2JSZVkVoaHifPhuOKQdB59wuPcncPXROpVDk6JHXJazQVe+6nparmP+xbzoyCIA6nvWp3tod43TiMpoVq8ZH/b7EINi4I9TfzBz10ytIwlHZTLB4kfg7N/g6gv3/gzeGi1eLcpJ0SOuqGwh0qyCkgqTFToCo8nI/47/D4D/NPvPZdcwE3VTt9BuvNbzNQC+3P8liw4v0jiRcEhr34RDv4LeGe7+HgKlebwukKJHXJGnqwHDhckKMwsqP3zdHqw7s46TWSdx1jlzS+NbtI4jqujmxjfzRIcnAJi2YxrbkrZpnEg4lD0LYeMH5u1hs6BRD23ziHJS9Igr0ikKAZ7mpz2puUUONUHhkmNLALit6W0EugdqG0ZUy6PtHi1fruLpdU8Tnx2vdSThCOK3wdInzdvXPQUd7tY2j6hAih470bdvXxRFQVEUYmNjLXbeeu7moqe41ERhifGKxz3wwAPl11+yZInFrq+F1IJU1p1ZB8ANETdoG0ZUm6IovNLjFdoGtCW7OJsn/3yS3OJcrWMJe5ZxGhb+HxiLocVNcP3LWicS/yJFjx0ZPXo0SUlJtGlzcSr+8ePHExMTg4uLCx06dKjyOZ30OrxdnVi9bCnt2rbFxcWFVq1asXjx4grHzZw5s8Jq7rZsyfElADTxbUKnkE7ahhE14qJ3YWa/mQS5BXEy6yTPbXwOo+nKxbsQ1VaUC9/fBfmpENIObv8cdPIrtq6R/yJ2xN3dnZCQEAyGi0uqqarKQw89xIgRI6p93mP7dvLs4w8x9PbhxMbGct999zF8+HC2b99efoyPjw8hIfaxJtUvx34BYFDEII2TCEsIdA9k5vUzcdG7sOHMBmbtnqV1JGFvVBWWjoWUg+AZDHcvBGf7maTVnsiCo9egqioFpQWaXNvN4FbjUUOzZpl/wJ8/f569e/dW6xxffPoJ3Xv146EnniLUz50pU6awfv16ZsyYwffff1+jfHXNsYxjJOQkAHBvy3s1TiMspU1AG17r8RqTN07my/1f0rxec26MulHrWMJebP3YvJCozgDDvwaf+lonElcgRc81FJQW0PW7rppce/s923F3ctfk2v+0detWHhozFoCM/BJ83Z0ZPHgwM2bM0DaYFZQ95YkOisbL2UvjNMKShkYN5VjGMebtn8erW1+lWb1mNKnXROtYwtadXA+rLvTdueFtaNhN2zziqqR5S1xTcnIyEQ3Mk2rlFJZQYjQRHBxMcnKyxsksq9RUytITSwEY3ny4xmmENTwZ/STdQrtRUFrAU+ueko7NomayzsBPD5pXTW9/N3QepXUicQ3ypOca3AxubL9n+7UPtNK16wpngw5nvXkR0uyCElRVtbsJ+3Yk7SC72LxSvMzAbJ/0Oj3v9H6H4b8O51T2KV7e8jIf9PnA7r6XRS0oKYRF90F+GoS0hZs+BPk+qvOk6LkGRVHqRBOTlkJCQjh37hy+7s6k5BSSVVBCSkoKwcHBWkezqM2JmwG4Pvx6/N38NU4jrMXP1Y/pfadz//L7WXV6FV8f/Jr7W9+vdSxha5Y/B4m7wK0ejPgWnOrOH6niyqR5S1xT9+7dWbVqFT5u5ho5t6iU5StW0KOH/cwyalJNLItbBsD1Da/XOI2wtnaB7Xiu83MAfLjzQ/5O/lvjRMKm7P0Rds4HFLjjC6gXoXEgUVlS9Ni548ePExsbS3JyMgUFBcTGxhIbG0txceUXER0/fjwrV65k1ocfkBx/gi9nz+DPNWuYMGGC9YLXsoNpB0ktSEWn6BgSOUTrOKIWjGg+gqFRQzGqRp7Z8AypBalaRxK2IPU4/DbBvN3nWWgyQNM4omqk6LFzo0aNIjo6ms8++4yjR48SHR1NdHQ0iYmJ5ccoisL8+fOveI4ePXqwcOFCvvrqK27q252lP37Ph5/Np2tXbUa1WcP8A/MB6N2gN856Z23DiFqhKAovd3uZJr5NSC1IZcrGKZhUx1pYV1RRSSH8+AAU50JEL+jznNaJRBVJ0WPn1q1bh6qql3xEREQAcOrUKQwGAz179rzqef7zn/9w+PBh8goKWbJ2O70HDbWblddVVWVr4lYA7m4u6+Q4Encndz7o8wFuBje2JW3jq/1faR1J1GUrpsC5feAeALfPBZ1e60SiiqTosSOzZ8/G09OTffv2Vfo9y5cv55FHHqFp06aVOt5Jr8PFYP6Hnp53sYlszJgxeHp6Vi1wHbE3dS/Zxdm46F3oHNJZ6ziilkX5RjG5y2QAPtr9EbEpsdoGEnXT/l/g7y/N27d/Bt6h2uYR1SKjt+zEggULKCgwzxzdsGHDSr9vzJgxVb6Wt5uB8zlGcotKCbqw7/XXX2fSpEkAhIba1g+DtfFrAega2hUnvZPGaYQWbmtyG9sSt/HHqT94bsNz/Hjzj3g7e2sdS9QV6Sdh6Tjz9nUTpR+PDZOix07Ur1970577ujlxPqeI3KJSSo0mDHodQUFBBAUFXfvNdYzRZOTPhD8BGBwxWOM0QiuKovBS95fYl7qPM7lneG3La7zf532Zv0dAaTH8+CAU50B4N+j3gtaJRA1I85aoMlcnPXqd+ZdBdmGJxmlqZkfyDuKy4nDSOdEjzH6G4Iuq83L24t3e72JQDKw8vZKfjv2kdSRRF6ybCkmx4OoL/5kHenlWYMuk6BFVpigKfh7mEU65hUaN09TM7pTdAAxoNIAAtwCN0wittQ1sy/iO4wF4Z8c7HM84rnEioalTm2DTDPP2zbPAp4GmcUTNSdEjqsXD2fzXTnZhCUaTqnGa6lFVlf8d/x8A7QLaaZxG1BUjW4+kZ/2eFBmLmLJpCiVG236aKaqpIBMWjwFU6HAvtLpF60TCAqToEdXi5WpAryiYVJXCEtt82pOQk0Binnm+opuibtI4jagrdIqON3q8ga+LL4fTDzN7z2ytIwktLJsEWQlQLxKGvK11GmEhUvSIalEUBQ8X89OezPzKz+5cl2w8uxGAtgFt8XX11TaMqFMC3QN5pfsrAHy5/0t2ndulcSJRq/b+CPt+BEVvno/HxUvrRMJCpOixE3379kVRFBRFITY2tlau6e1mHt6dU1jKAw88UH79JUuW1Mr1a2p53HIAYoJjNE4i6qIBjQZwS+NbMKkmnt/0PLnFuVpHErUhMx5+f9q83fsZCJe5u+yJFD12ZPTo0SQlJdGmTZvyfePHjycmJgYXFxc6dOhQrfMeOHCAO+64g4iICBRFYcaMGYB5vh6AYqOJ9z74kKSkpJp+CbWmxFTCgbQDANza5FZtw4g6a3KXyYR5hHE29yzv/vWu1nGEtZmM5n48RVnQoLO56BF2RYoeO+Lu7k5ISAgGw8Uhlaqq8tBDDzFixIhqnzc/P5+oqCjefvttQkJCyvcbdDpcncyzM6tObhVeq+vWxK+hxFSCh5MHkT6RWscRdZSnsydTe01FQWHx8cWsiV+jdSRhTdtmw+nN4OQBt38uw9PtkBQ9dm7WrFk88cQTREVFVfscnTt35r333uOuu+7CxcWlwmu+F5q48ottqzPz+oT1AAyJHIJOkX8G4spigmN4sM2DALy25TVZjd1enT8Ka94wb98wDfyq/zNT1F1Sxl6DqqqoF5Z3qG2Km1udnxG2rDNzTlEpJhsaur7n/B4A+jToo3ESYQue6PAEm89u5kjGEV7b+hqz+s2q8/82RRUYS2HJGDAWmZeY6DhS60TCSjQvembPns17771HUlISrVu3ZsaMGfTq1euKxy9YsIB3332XY8eO4ePjww033MD777+Pv7+/VfKpBQUc6ahNR9fmu3aiuLtrcu3KcnPSo1cUjKpKjo3Mznw4/TAJOQkAtPRrqXEaYQuc9c5M7TWVEb+NYF3COpbFLWNo1FCtYwlL2foRnN0JLj4wbBZIQWu3NH2uv2jRIiZMmMALL7zA7t276dWrF0OGDCE+Pv6yx2/atImRI0fy8MMPc+DAAX788Uf++usvRo0aVcvJRRmdTsHnQhNXQYlJ4zSVs/f8XsDcbBHsEaxxGmErmtVrxph25gV6p+2YJs1c9iLlMKydat6+YRr41N46hqL2afqkZ/r06Tz88MPlRcuMGTNYsWIFc+bMYdq0aZccv23bNiIiIhg3zrzabWRkJI8++ijvvnvlURVFRUUUFRWVf56dnV2ljIqbG8137azSeyxFcXPT5LpV5eqsh3zIKrCNJz3LT5mHqrcLlFmYRdU81PYh1sSv4VD6Id7Y+gYz+s2QZi5bVt6sVQxNB0OHe7ROJKxMsyc9xcXF7Ny5k0GDBlXYP2jQILZs2XLZ9/To0YMzZ86wbNkyVFXl3Llz/PTTTwwdeuXHzNOmTcPHx6f8Izw8vEo5FUVB5+6uyYet/DD1cXNCURSKSut+Z+YiY1H5RHO96l+5GVWIy3HSOfFGzzcwKAb+TPizvIAWNmrzDEjcDa4+MGymNGs5AM2KntTUVIxGI8HBFZsXgoODSU5Ovux7evTowYIFCxgxYgTOzs6EhITg6+vLRx99dMXrTJkyhaysrPKPhIQEi34ddd3x48eJjY0lOTmZgoICYmNjiY2Npbi48rMoFxcXV3jf2bNniY2N5fhx82KMTnod7s56a30JFnU88zhG1Yi7wZ1OwZ20jiNsUHO/5jzS/hEApm6fKs1cturcAVh3YXmJIe+Cd6i2eUSt0Hys7r+fZqiqesUnHAcPHmTcuHG8/PLL7Ny5k+XLlxMXF8eYMWOueH4XFxe8vb0rfDiSUaNGER0dzWeffcbRo0eJjo4mOjqaxMTE8mMURWH+/PlXPEdiYmL5+5KSknj//feJjo6u0JeqbAHSum7z2c2AeTVtW3mSJuqeUW1H0bxeczKLMnlr21uoqu2MXBRcaNZ6DEwl0PxGaFf9ecyEbdHsN1VAQAB6vf6SpzopKSmXPP0pM23aNHr27Mkzz5hnyWzXrh0eHh706tWLN998k9BQqdT/bd26dVd9/dSpUxgMBnr27HnFYyIiIq75Q93L1UBKjnm7Lv8C2Jq4FYBuod00TiJsmZPOiTeve5O7f7ub1fGrWXF6BTdE3KB1LFFZ2z6BpD3g6gs3fSjNWg5Esyc9zs7OxMTEsGrVqgr7V61aRY8ePS77nvz8fHS6ipH1+gszAtfhX7S1Zfbs2Xh6erJv375Kv2f58uU88sgjNG3atEbXnjjuCbo1bwBAibFu/rcwmozlS0/I/Dyiplr4tWBUO/PTzqnbppJemK5xIlEpaScujtYaPBW8bGcmeVFzmrZJTJw4kfvuu49OnTrRvXt3Pv/8c+Lj48ubq6ZMmcLZs2f5+uuvARg2bBijR49mzpw5DB48mKSkJCZMmECXLl0ICwvT8kvR3IIFCyi4MIliw4YNK/2+qzUNVsUbb7zB8Icep6DYSKvGjSxyTktbeXolBaUFeDp5EuUjs62Kmnuk7SOsiV/DsYxjvP/X+0ztNVXrSOJqVBV+mwClhRDZR0ZrOSBNi54RI0aQlpbG66+/Xr5Q5rJly2jUyPxLMykpqcKcPQ888AA5OTl8/PHHPP300/j6+nL99dfzzjvvaPUl1Bn162s7t0RQUBDt3HxIyipAcXbSNMuVbE/aDsBNUTeh19lGx2tRtznpnXi1+6vcu+xefj35Kzc1vokeYZd/Ui3qgNgFELcBDG4wbIY0azkgRXWwdqHs7Gx8fHzIysq6pFNzYWEhcXFxREZG4urqqlFC25VXVMqJ87koKLSp731JR2Gt7+89v9/DvtR9vNv7XYZEDqn16wv79faOt1lwaAENPBvwyy2/4GawjTm2HErOOfikCxRmwsA3oOc4rROJKrra7+/K0nz0Vl3kYHWgxZSvuI5KblHpJa9reV+zirLYn7ofMA85FsKSnox+khCPEM7knmHOnjlaxxGXs/w5c8ET2h66Pa51GqERKXr+wcnpworh+fkaJ7FNep2Ct2vZkhSXTlRYdl/L7nNt2pe6DxWVEI8Q6c8jLM7DyYMXur4AwNcHvuZQ2iGNE4kKDi+DA4tB0cPNH4HeNqbYEJYn/+X/Qa/X4+vrS0pKCgDuNjQrcl3hRClqaTGZOUa8L9Q2qqqSn59PSkoKvr6+5SPualPZquoyIaGwlr7hfRnUaBArT6/k1a2v8t2N30nfsbqgMBt+f9q83eNJ85Me4bCk6PmXkBDz8MWywkdUTVGJkfO5xShASaYrun8Ujb6+vuX3tzapqsovx34BIDooutavLxzH5C6T2Zq4lYNpB1lwaAEjW4/UOpJY8xrkJEK9SOg7Wes0QmNS9PyLoiiEhoYSFBRESYltLKBZ10z+ZBM5haXMujua1mE+gLlJS4snPADn8s+Rkp+CXtFzU9RNmmQQjiHQPZCJnSby2tbX+Dj2Y/o36k99T1m1WzMJf8Ff88zbw2aCk3Qwd3RS9FyBXq/X7Je0rQvw8eLw+VRiE/OJibr87Nq16XD6YQAivCNwd3LXOI2wd7c3vZ1fT/zKrpRdvLntTWb3ny3N5FowlsJvTwEqtL8HomRCUiEdmYUVtA83P91Zvj9J4yRmK06tAKBpvZrNOi1EZegUHa/0eAUnnRObzm5idfxqrSM5pr/mwrl95qUmBr2hdRpRR0jRIyxuSBvzGmhHz+XWieH/+1LNy3L0b9Rf4yTCUUT5RPFQm4cA8xw+eSV5GidyMNlJ8Odb5u0Br4JHgKZxRN0hRY+wuCZBnuh1ClkFJcSlavvDvshYxOns04CM3BK1a1TbUdT3rE9Kfgqf7vlU6ziOZcUUKM6BBp2h4/1apxF1iBQ9wuJcnfS0CjXPlrlsn7ZNXGtOrwHAx8UHf1d/TbMIx+JqcOX5rs8D8M3BbziWcUzjRA7i+JoLc/LoYOh00MmvOXGRfDcIq7ihjXlo+qGkHE1z7ErZBUD/hv2lM6modb0b9KZ/w/4YVSNvbnuzTjT32rWSQlg2ybzddQyEttM2j6hzpOgRVlH2pGff2SxNc5zIPAFI05bQznOdn8PN4MaulF0sPbFU6zj2bdOHkH4SvEKh3/NapxF1kBQ9wipah3mjKBCfns/BxGxNMmQXZ7M7ZTcAkT6RmmQQItQzlDHtxwAwfed0soq0/UPAbqWdgE3Tzds3TAMXL23ziDpJih5hFUHernRsWA+A/Ro97dmTsgejasTP1Y+Wfi01ySAEwH0t76OxT2PSC9P5aPdHWsexP6pqbtYyFkPj/tDqVq0TiTpKih5hNW3rm+frOXpOm349cVlxAMQEx8gaSEJTTnonXuhmXpD0hyM/sD91v8aJ7MyBxXDiT9C7wI3vgfTfE1cgRY+wmuYh5sfLv+9L0qQD55p488gtadoSdUHnkM4MixqGisob297AaDJqHck+FOfByhfN270mgn9jbfOIOk2KHmE1Qy6M4ErKKuR8TlGtXrvEVMLe1L0AdA/tXqvXFuJKJnaaiJeTFwfTDvLT0Z+0jmMfNn4A2WfBtxH0nKB1GlHHSdEjrMbX3ZlG/ua1rk6cr91JCs/mnKXUVIqzzpmOwR1r9dpCXEmAWwBjo8cC8FHsR2QWZmobyNalnYAtF/pI3TANnFy1zSPqPCl6hFU1DvQE4K9T6bV63R3JO8zX922MTpFvc1F3DG8+nKb1mpJVlMXHsR9rHce2rXj+Qufl66H5jVqnETZAfhsIq+rXIgiAX/ck1up1N53dBEAr/1a1el0hrsWgMzClyxQAfjz6I0fSj2icyEYdXQlHl4POADe8I52XRaVI0SOsamDLYABOnM+lsKT2Om6ezDoJQL/wfrV2TSEqq3NIZwZHDMakmpi2Y5rM1FxVpUWwfLJ5u9tjENhM2zzCZkjRI6wq2NsFPw9nTGrtzc5cYiwpX2S0pb/MzyPqpqdjnsZV78rOcztZcWqF1nFsy7bZkH4CPIOh97NapxE2RIoeYVWKotC+gXm+nk3HUmvlmuvPrAfMi4wGugXWyjWFqKpQz1AebvswAO///T75JfkaJ7IR2Ymw/j3z9oDXwNVb2zzCpkjRI6yuZ5MAAI4k184khXvO7wHMQ9VlkVFRlz3Q+gHqe9bnXP455u2fp3Uc27DqZSjJgwZdoN0IrdMIGyNFj7C6psHmSQoPJtXOGlxlMzHLIqOirnM1uPJMp2cAmL9/Pgk5CRonquNOb4V9PwIK3Pgu6ORXmKga+Y4RVtcs2DxsPT49n/g06z7CLzGV8Pe5vwGI8o2y6rWEsITrG15Pt9BuFJuKee+v97SOU3eZjPCHuUCk40gIi9Y2j7BJUvQIqwv1caPFhSUprD1fz4HUA+SV5KFTdLT2b23VawlhCYqiMKXLFAyKgbUJa9l8drPWkeqmnV9B8j5w9YH+L2udRtgoKXpErejYyLzi+snUXKtep6xpq0tIF9yd3K16LSEsJco3irtb3g3A2zvepsRYonGiOqYgA/58y7zd7wXwCNA2j7BZUvSIWlE2M7O1R3AdzTgKQJSPNG0J2/JY+8fwc/XjVPYpFh5ZqHWcumXD+1CQDoEtoNPDWqcRNkyKHlErejU1/2W292wWeUWlVrvO9uTtALTwa2G1awhhDV7OXoyLHgfAnD1zZF2uMmknYPtn5u3Bb4HeoG0eYdOk6BG1olmwF/4ezqgqxKVaZ/HRImMRJzPNMzF3De1qlWsIYU23NrmV5vWak1Ocw+w9s7WOUzesfAlMJdBkIDQZoHUaYeOk6BG1JirQA7DezMwnM09iVI34uPgQ6hFqlWsIYU16nZ5nOptHKP1w5IfyIt5hnVwPR34HRW9+yiNEDUnRI2pNWb+etYdTrHL+P079AUBT36YyKaGwWV1Du9I3vC9G1cj7f7+vdRztmIzmVdQBOj8Mgc21zSPsghQ9otb0bW5ecd1akxSWrVbd2LexVc4vRG15OuZpDIqBjWc3suXsFq3jaGP3N3Buv3mIet8pWqcRdkKKHlFrYi4MW0/MLKCo1PIrrpcNVx8aNdTi5xaiNkX4RJQPYX/v7/coNVmv83+dVJgNf75p3u4zGdz9tM0j7IYUPaLWBHg64+liwKTCrtOZFj13dnE2SXlJAER6R1r03EJo4dF2j+Lr4svxzOP8cuwXrePUro0fQN558G8CnUdpnUbYESl6RK1RFKV8SYr1R89b9NxrTq8BwM/VD19XX4ueWwgt+Lj48Fj7xwD4ePfHZBfXztp1mss4BdsujFwb9CYYnDWNI+yLFD2iVt3WsQEAx85ZdsX1sqatlv4tLXpeIbR0Z/M7ifSJJKMog7l752odp3asegWMxRDVF5rdoHUaYWek6BG1qsmFEVw74zMset6yoqdvg74WPa8QWnLSOTGp0yQAvj30LQnZdr4K++ktcHAJKDoYPBVkFKawMCl6RK1qeqF5KzO/hFMWmqSw1FTKujPrAIj0kf48wr70qt+LHmE9KDWVMn3ndK3jWI/JBMsvjNLqeD8Ey4LBwvKk6BG1KsDThQb13ADYnWCZpz3HMo6Vb7cNaGuRcwpRVyiKwqROk9ApOlbHr+av5L+0jmQdexdCUiy4eJsXFRXCCqToEbWuV9NAAE6et8yTnrKmrXaB7WRldWGXmtZryp3N7gTgvb/ew6SaNE5kYcX5sOZ183avp8EzUNs8wm5J0SNqXeMLy1H8sT/ZIuc7nH4YMM/ELIS9erzD43g6eXIo/RC/n/xd6ziWte0TyEkC34bQ7TGt0wg7JkWPqHWtwrwBiE/Lp7i05n+xrk1YC0AT3yY1PpcQdZWfqx8Pt30YgFm7Z1FYWqhxIgvJPQ+bZpq3+78CBhdt8wi7JkWPqHXdo/zR6xSKjSbi02vWxFViKuFMzhkAOod0tkQ8Ieqse1veS4hHCMl5ySw4tEDrOJax/m0ozoGwaGh9u9ZphJ2TokfUOkVRaBVqftpzPKVmRc+ZnDOUqqW4GdxoWk+at4R9czW48mT0kwB8se8LMgotO/VDrUs9Bn9/Zd4e9Cbo5FeSsC75DhOaiLrQr2fJ7rM1Os/2pO0ARHhHoFPk21nYv5uibqKFXwtyS3L5bO9nWsepmdWvgmqEZkMg4jqt0wgHIL8lhCba1vcBID49v0bn2Za0DYBW/q1qnEkIW6BTdEyMmQjAosOLiM+O1zhRNZ3eAod/M09EOPA1rdMIByFFj9DE9S2CAIhLzUNV1Wqf53T2aQB6NehlkVxC2ILuYd3pWb8npWopM3bN0DpO1akqrHzJvN1xJAQ21zaPcBjVKnqOHDnC2LFj6d+/PwMGDGDs2LEcOXLE0tmEHQv3c0evUygoMXImo6Ba51BVtbwTczPfZpaMJ0SdNzFmIjpFx6rTq4hNidU6TtUcWAxn/wYnD+j7vNZphAOpctHz008/0aZNG3bu3En79u1p164du3btok2bNvz444/WyCjskJNeRyN/80SCKw5Ub76eIxlHKDQWYtAZCPEMsWQ8Ieq8ZvWacUvjWwD44O8PavTEtFaVFsGaC81ZPceBV7C2eYRDqXLR8+yzzzJlyhS2bt3K9OnTmT59Olu2bOH555/nueees0ZGYac6hPsCcLSaK65vOrsJgFZ+rXDSOVkqlhA244kOT+CqdyX2fCxr4tdoHady/poHGafAMxi6j9U6jXAwVS56kpOTGTly5CX77733XpKTLTPDrnAMZf16jqXkVuv9ZR04r2sgoz6EYwr2CGZka/PP4xm7ZlBiKtE40TUUZMKGd83b/Z4HF09N4wjHU+Wip2/fvmzcuPGS/Zs2baJXL+lMKiqvWbAXAAcTszGZqv5ovmzNrYZeDS2aSwhb8lCbh/Bz9eN09ml+PFLHuxhs/AAKMiCwBXS4V+s0wgEZqvqGm2++meeee46dO3fSrVs3ALZt28aPP/7Ia6+9xtKlSyscK8SVRPh74Oakp6DESOyZTDo2rFfp92YVZbHn/B4AIn0irRVRiDrPw8mDx9s/zpvb3+TTPZ8yrPEwvJy9tI51qcx42H5hXqGBr4O+yr9+hKgxRa1i7zddJWfMVBQFo9FYrVDWlJ2djY+PD1lZWXh7e2sdx+Hd+8V2Nh1P5d072jG8c3il37cjaQcPr3wYLycvNt+9GUVRrJhSiLqtxFTC7f+7nVPZpxjVdhTjO47XOtKlfh4N+36AiF5w/68g/2ZFFVni93eVm7dMJlOlPipb8MyePZvIyEhcXV2JiYm5bNPZPxUVFfHCCy/QqFEjXFxcaNy4MV9++WVVvwxRR0QGmGdmjkur2nIU8Tnm/jztg9pLwSMcnpPOiadingLgm4PfkJxXx/pXJu42FzwAg96QgkdoRtPJCRctWsSECRN44YUX2L17N7169WLIkCHEx195htHhw4ezZs0a5s2bx5EjR/j+++9p0aJFLaYWlhRxoejZfjKtSu87nH4YkP48QpTpF96PjkEdKTIW8dHuj7SOc9E/JyJsO9y8sKgQGqlWo2peXh7r168nPj6e4uLiCq+NGzeu0ueZPn06Dz/8MKNGjQJgxowZrFixgjlz5jBt2rRLjl++fDnr16/n5MmT+Pn5ARAREXHVaxQVFVFUVFT+eXZ2dqXzCevrFmX+77jnTBaFJUZcnfSVet/ms5sB81wlQghzl4JJnSZxz7J7+PXEr4xsNZLmfnVgpuNjK+HURtC7QP+XtE4jHFyVi57du3dz4403kp+fT15eHn5+fqSmpuLu7k5QUFCli57i4mJ27tzJ5MmTK+wfNGgQW7Zsuex7li5dSqdOnXj33Xf55ptv8PDw4Oabb+aNN97Azc3tsu+ZNm0ar70m67rUVa1CvfFyMZBTVMqZjHyaBF27A2ZBaQFncs0zMfcN72vlhELYjraBbRnUaBArT69k1u5ZfNL/E20DmYyw+sLP366PgK88mRXaqnLz1lNPPcWwYcNIT0/Hzc2Nbdu2cfr0aWJiYnj//fcrfZ7U1FSMRiPBwRVn4wwODr7ifD8nT55k06ZN7N+/n8WLFzNjxgx++uknnnjiiSteZ8qUKWRlZZV/JCQkVDqjsD5FUWh4YWbmk+cr168nIcf839Db2Rt/N3+rZRPCFo3rOA69omfDmQ38lfyXtmH2/gApB8DVB66bqG0WIahG0RMbG8vTTz+NXq9Hr9dTVFREeHg47777Ls8/X/U1VP7dCVVV1St2TDWZTCiKwoIFC+jSpQs33ngj06dPZ/78+RQUXH79JhcXF7y9vSt8iLolwt/cr2fd0fOVOv5oxlEAGnk3slomIWxVI+9G3NH0DgBm7Jyh3fIUpUWwdqp5u+cEcPfTJocQ/1DlosfJyam8KAkODi7vdOzj43PVDsj/FhAQgF6vv+SpTkpKyiVPf8qEhoZSv359fHx8yve1bNnSvPDkmTNV/VJEHdGzSQAA+85kVer4ned2AtDCTzqwC3E5Y9qPwc3gxt7UvdotT/HXPMiKB69Q6DpGmwxC/EuVi57o6Gj+/vtvAPr168fLL7/MggULmDBhAm3btq30eZydnYmJiWHVqlUV9q9atYoePXpc9j09e/YkMTGR3NyLyxYcPXoUnU5HgwYNqvqliDqiU4R5UsJTaXmV+qv0ROYJ8/uCO1k1lxC2KtA9kPta3QfAzF0zKTWV1m6AwmzYeKG7Q9/J4Oxeu9cX4gqqXPRMnTqV0NBQAN544w38/f157LHHSElJ4fPPP6/SuSZOnMgXX3zBl19+yaFDh3jqqaeIj49nzBjzXwVTpkypsM7XPffcg7+/Pw8++CAHDx5kw4YNPPPMMzz00ENX7Mgs6r6GfuYfiDmFpWTmX33tIFVVy4uexr6NrZ5NCFv1YOsH8XXx5VT2KZYcX1K7F9/yEeSngX9TWW5C1ClVHr3VqdPFv64DAwNZtmxZtS8+YsQI0tLSeP3110lKSqJNmzYsW7aMRo3MfTWSkpIqNJl5enqyatUqnnzySTp16oS/vz/Dhw/nzTffrHYGoT1XJz31fd04m1nA6kPnuLPTlWdmPpJxhOzibHSKTvr0CHEVns6ePNLuEd79611mx85maNRQ3Ay18MdhzjnY+rF5u/9LstyEqFM0/258/PHHefzxxy/72vz58y/Z16JFi0uaxITt690sgO93JLD/bNZVi56/k81Nq74uvrgaXGsrnhA2aUTzEXx78FsS8xJZcGgBo9qOsv5FN7wLJflQPwZayvqLom6pVNETHR1d6an+d+3aVaNAwjG1a+DL9zsSiE/Pv+pxZctPDI0aWhuxhLBpznpnxkaP5flNz/Plvi/5T9P/4Ovqa70Lpp2AnfPN2wNek+UmRJ1TqaLn1ltvtXIM4ejK+vXsT7z6jNmns08D0MS3idUzCWEPhkYN5b8H/suRjCN8se8LJnWeZL2LrX0LTKXQZABE9rLedYSopkoVPa+88goARqORTZs20a5dO+rVq2fVYMKxRAWa5+o5n1PE8ZRcmgR5XnJMkbGILYnm2bqlP48QlaNTdIzvOJ7H1zzOd4e/4/9a/h+hnqGWv1Dibtj/s3m7/yuWP78QFlCl0Vt6vZ7BgweTmZlppTjCUYX6uNE82LwExYHEy8/XczzzePl224DKT48ghKO7rv51dA7pTImphE9irbQ0RdlyE22HQ2g761xDiBqq8pD1tm3bcvLkSWtkEQ4uuqEvcOXlKOKzzf15OgZ1xFnvXFuxhLB5iqLwVMenAFh6Ymn5rOYWc3IdnFwLOie4/gXLnlsIC6py0fPWW28xadIkfvvtN5KSksjOzq7wIUR1RQaYm7g2Hrv8chRlT3rCva48uksIcXltA9sysNFAVFRm7ZpluROrKqx+1bzd6SGoF2G5cwthYVUesn7DDTcAcPPNN1cY0VW2ZpbRaLRcOuFQyvrxHE7OwWhS0esqjvxYc9o8nX6Ub1StZxPCHoyLHsef8X+y/sx6dp7bSUxwTM1PenCJuT+Psyf0fqbm5xPCiqpc9Kxdu9YaOYSgT7NAAPKLjSRlFdCg3sWp602qibO5ZwHoENhBi3hC2LwInwhub3o7Px79kQ93fsg3Q76p9HQkl2UsgTWvm7e7jwXPQMsEFcJKqlz09OnTxxo5hMCg19E40IMT5/OIS82rUPSk5KdQaCxEr+hpGyidmIWorsfaP8ZvJ39jz/k9/JnwJ/0b9q/+yXZ9DeknwT0Aeoy1XEghrKTKfXoANm7cyL333kuPHj04e9b81/c333zDpk2bLBpOOJ6yfj1rDqVU2H8s4xgADbwa4KRzqvVcQtiLQPdA7m1pXg+rRouRFufB+nfM232eBRcvCyUUwnqqXPT8/PPPDB48GDc3N3bt2kVRUREAOTk5TJ061eIBhWNp6Gcuek6cz62wf/2Z9QBE+kTWeiYh7M2DbcyLkcZlxbH0xNLqnWTbHMg9B76NIOZBywYUwkqqXPS8+eabfPrpp8ydOxcnp4t/cffo0UOWoBA1NrSdedK04ykVi56EnAQAWvm1qvVMQtgbL2cvRrcdDcAnsZ9QUFpQtRPkp8Pmmebt618Eg0whIWxDlYueI0eO0Lt370v2e3t7y6SFosbKmreSsgopLLk4ErBs+YmuoV01ySWEvbmrxV2EeYSRkp/Cd4e+q9qbN34ARdkQ3Bba/Mc6AYWwgioXPaGhoRw/fvyS/Zs2bSIqSoYSi5qp5+6Et6u5f/3Wk2kA5JXklY/ckuUnhLCMssVIAebtn0dW0eVnQr9EZgLs+Ny8PeBV0FWra6gQmqjyd+ujjz7K+PHj2b59O4qikJiYyIIFC5g0aRKPP/64NTIKB6IoCuEXFh/dk5AJwIpTKwDwd/XHz9VPq2hC2J0bI2+kab2m5BTnMG/fvMq9ad00MBZDRC9oUoORX0JooMpFz7PPPsutt95Kv379yM3NpXfv3owaNYpHH32UsWNlyKKoubJ+PXGp5uUoypaf6BbWrWZzigghKtDr9EzoOAGA7w5/R3Je8tXfcO4g7PnevD3gVZB/j8LGVOu55FtvvUVqaio7duxg27ZtnD9/njfeeMPS2YSDigowz8xctgZXWdNWS7+WmmUSwl71qt+LjkEdKTIWMWfPnKsfvOZ1UE3Q8mZo0Kl2AgphQVUuev773/+Sl5eHu7s7nTp1okuXLnh6elojm3BQEQHm5q19Z7PILy7lcPphABp4NtAylhB2SVEUnooxL0a65PgSTmSeuPyBp7fC0T9A0UP/l2sxoRCWU+WiZ9KkSQQFBXHXXXfx22+/UVpazYmthLiCxoEXi+iVRw5xKvsUAK38Zbi6ENbQIagD14dfj0k1XX4x0n8uKhp9LwQ0rdV8QlhKlYuepKQkFi1ahF6v56677iI0NJTHH3+cLVu2WCOfcEBOeh2DWwcDsCvpCGB+yhPqGaplLCHs2viO49EpOv5M+JPYlNiKLx5dDgnbwOAKfSdrkk8IS6hy0WMwGLjppptYsGABKSkpzJgxg9OnT9OvXz8aN25sjYzCAZU97TmeYZ6fp1m9ZlrGEcLuRflGcUvjWwD4cOeHqKpqfsFkhNWvmbe7PQbeYRolFKLmajTBgru7O4MHD2bIkCE0bdqUU6dOWSiWcHRNgsxFz4nsC/15vKQ/jxDW9niHx3HRu7ArZRcbz24079yzEM4fAldf6DlBy3hC1Fi1ip78/HwWLFjAjTfeSFhYGB9++CG33nor+/fvt3Q+4aA6R5jn48lVDgLSn0eI2hDiEcI9Le4BYMauGRiL8mDthTUVe00EN1/twglhAYaqvuHuu+/m119/xd3dnTvvvJN169bRo0cPa2QTDqxBPTe8XI3glA1Arwa9NE4khGN4uO3D/HTsJ45lHGPZ2ikMyz4D3vWhyyNaRxOixqr8pEdRFBYtWkRiYiKffPKJFDzCKhRFITTQPE+Pu94Lb2dvjRMJ4Rh8XHx4uM3DAHycuIZigL5TwMlN01xCWEKVi57vvvuOoUOHYjBU+SGREFXi6ZMEgLMaqHESIRzLPS3vIUjnRqJex6LQxtD+bq0jCWER1erTs379eoYNG0aTJk1o2rQpN998Mxs3brR0NuHgDO7mhW2NhfU1TiKEY3EryOKxtBQA5no6k2ss1DiREJZR5aLn22+/ZcCAAbi7uzNu3DjGjh2Lm5sb/fv357vvvrNGRuGgCjH/0M3LbKJxEiEczPp3uTUzgwhVT0ZpHvMPzNc6kRAWUeWi56233uLdd99l0aJFjBs3jvHjx7No0SLefvttWX9LWIyqqqQUmtfcysnxJaugRONEQjiItBOw678YgPGtzX17vj74NakFqdrmEsICqlz0nDx5kmHDhl2y/+abbyYuLs4ioYQ4m3uWvJJcUBVMJX6sO5KidSQhHMPat8BUCk0G0r/TWNoFtKOgtIBP93yqdTIhaqzKRU94eDhr1qy5ZP+aNWsIDw+3SCghdqfsBsBLFw6qE/vOZGmcSAgHkBgL+38GFBjwCoqiMCFmAgA/H/2Z+Ox4LdMJUWNVHoL19NNPM27cOGJjY+nRoweKorBp0ybmz5/PzJkzrZFROKCTWScBiPJuTSIQn56vbSAhHMGaC8tNtL0TQtoC0DmkM9fVv45NZzfx8e6PebfPuxoGFKJmqlz0PPbYY4SEhPDBBx/www8/ANCyZUsWLVrELbfcYvGAwjGdzDQXPU18o9gEHE7O0TaQEPbu5Ho48SfonKDf8xVemtBxApvPbuaPU39wf5v7ae3fWqOQQtRMtYas33bbbWzatIm0tDTS0tLYtGmTFDzCYkpMJfyZ8CcA0aHNAfOTnrOZBVrGEsJ+qSqsftW83elB8Ius8HJzv+bcGHUjADN3yhN9YbtqtOCoENYQl3WxQ/zAqK5EBngASL8eIazl4P8gcRc4eUDvZy57yNgOYzHoDGxN2srWxK21HFAIy5CiR9Q5ZZ0lW/u3xt3JnVZh5iUozmRIvx4hLM5YCn9emG6kx1jwDLrsYQ28GjCi+QjAvBipSTXVVkIhLEaKHlHnnMo+BUAj70YANPRzB+BAYrZWkYSwX7HfQtpxcPeH7mOveujotqNxN7hzMO0gK0+vrKWAQliOFD2izllxagUAEd4RADS6UPRsOp6KqqpaxRLC/hTnw7q3zdu9nwHXqy/s6+/mzwOtHwDgo10fUWKSSUOFbal20VNcXMyRI0coLS21ZB7h4FRV5WyOeSbmtoHmIbND24UCcD6niPS8Ys2yCWF3dnwGOUng0xA6PVSpt4xsPRI/Vz/ic+JZfGyxlQMKYVlVLnry8/N5+OGHcXd3p3Xr1sTHm/tfjBs3jrffftviAYVjySzKJKfEPDy9U3AnALxcnajv6wZAXGqeZtmEsCsFGbDpQ/N2v+fB4FKpt3k4efBou0cBmLNnDvkl0tdO2I4qFz1Tpkxhz549rFu3DldX1/L9AwYMYNGiRRYNJxzP6ezTAIR4hOBquPj9FRVoHsG1+XiaJrmEsDubZkBhFgS1gnbDq/TWO5vdSQPPBqQWpPLtoW+tk08IK6hy0bNkyRI+/vhjrrvuOhRFKd/fqlUrTpw4YdFwwvGU9eeJ9K44T0gjf3O/nv2JMmxdiBrLToTtF9bS6v8K6PRVeruT3omx0eZOz1/t/4qMwgxLJxTCKqpc9Jw/f56goEuHNObl5VUogoSojjM5ZwBo7Nu4wv7rW5i/546n5NZ6JiHszrq3obQQGnaHZoOrdYohkUNo4deC3JJc5u6ba+GAQlhHlYuezp078/vvv5d/XlbozJ07l+7du1sumXBIZcPVezfoXWF/ixDzqJKE9HxKjDI/iBDVlnoMdl9okhrwGlTzj1WdomNCxwkALDy8kMTcRAsFFMJ6qrz21rRp07jhhhs4ePAgpaWlzJw5kwMHDrB161bWr19vjYzCQZSaSi+Zo6dMiLcrrk46CktM7EnIpFOEnwYJhbADa14H1QjNb4SGXWt0qh5hPegS0oUdyTv4JPYT3rruLQuFFMI6qvykp0ePHmzevJn8/HwaN27MypUrCQ4OZuvWrcTExFgjo3AQm85uAsDd4E6IR0iF13Q6hQb1zP16dp6W/gNCVMuZnXBoKaDA9S/V+HSKovBUzFMA/HriV45mHK3xOYWwpio/6QFo27Yt//3vfy2dRTi4sjW3mtZrik65tB4f3DqY4ym50q9HiOpQVVj9inm7/d0Q3Moip20T0IaBjQay6vQqZu2axcf9P7bIeYWwhio/6dHr9aSkpFyyPy0tDb2+aiMAhPinsqatHmE9Lvt6s2Av83FpMlePEFV24k84tRH0ztBvikVPPS56HHpFz/oz69l1bpdFzy2EJVW56LnSMgBFRUU4OzvXOJBwXLEpscDF5Sf+rWy19b9OZVBcKp2Zhag0kwlWv2re7jwafBta9PQRPhHc1vQ2AD7c+aEsFyPqrEo3b82aNQswt+F+8cUXeHp6lr9mNBrZsGEDLVq0sHxC4RCS85I5mXUSgJb+LS97TNmTHoC9Z6QzsxCVduAXSN4LLt7Q62mrXOKx9o/x24nfiD0fy9qEtVzf8HqrXEeImqh00fPhh+bpylVV5dNPP63QlOXs7ExERASffvqp5RMKh1DWnyfQLZBIn8jLHuPqpOe6JgFsOp7KyfN5UvQIURmlxfDnm+btHuPAw98qlwlyD+LeVvfyxb4vmLVrFn0a9EFfxUkPhbC2Shc9cXHmX0r9+vXjl19+oV69elYLJRzPmVzzpIRXespTJirQg03HUzl+XjozC1Epu7+GjDjwCIJuj1n1Ug+2eZAfjvzAiawTLD2xtLzJS4i6osp9etauXSsFj7C4A6kHAGjg2eCqxzXyN/fr+WXXWatnEsLmFeXCunfM232eBRfPqx9fQ97O3oxuOxqAT2I/obC00KrXE6KqqjVk/cyZMyxdupT4+HiKi4srvDZ9+nSLBBOOZXPiZgBaB7S+6nFdI81NWul5RRSWGHF1ksfnQlzR1o8hLwX8oqDj/bVyybtb3s2CwwtIzktm4eGFPNDmgVq5rhCVUeWiZ82aNdx8881ERkZy5MgR2rRpw6lTp1BVlY4dO1ojo7BzBaUFJOclA9CnQZ+rHts6zBtvVwPZhaXEpebRMtS7NiIKYXtyzsFm8wAU+r8MhtoZXeuid+Hx9o/z8paXmbtvLrc3ux1vZ/l3KuqGKjdvTZkyhaeffpr9+/fj6urKzz//TEJCAn369OHOO++0RkZh58oWGfVy9sLHxeeqxyqKQtMLo7iOySSFQlzZ+negJA/qx0CrW2v10jc3vpnGPo3JLs7mq/1f1eq1hbiaKhc9hw4d4v77zY9JDQYDBQUFeHp68vrrr/POO+9UOcDs2bOJjIzE1dWVmJgYNm7cWKn3bd68GYPBQIcOHap8TVG3lE1m1tCrcnOHNA0y90vYEZdmtUxC2LTUY7Bzvnl74BvVXlS0uvQ6PeM7jgfg24PfkpJ/6YS2QmihykWPh4cHRUVFAISFhXHixIny11JTU6t0rkWLFjFhwgReeOEFdu/eTa9evRgyZAjx8fFXfV9WVhYjR46kf//+VY0v6qDtydsB83T2ldHlQr+e/WezrZZJCJu25jXzoqLNhkBET00i9A3vS3RQNIXGQubsmaNJBiH+rcpFT7du3di82dzpdOjQoTz99NO89dZbPPTQQ3Tr1q1K55o+fToPP/wwo0aNomXLlsyYMYPw8HDmzLn6P5BHH32Ue+65h+7du1c1vqiDEnISALiu/nWVOr5FiLl/gCxHIcRlxG+HQ7+CooMBr2oWQ1EUJnScAMDiY4vL5+ISQktVLnqmT59O165dAXj11VcZOHAgixYtolGjRsybN6/S5ykuLmbnzp0MGjSowv5BgwaxZcuWK77vq6++4sSJE7zyyiuVuk5RURHZ2dkVPkTdoapqedHT0LtyzVsRAebV1jPzS0jPK77G0UI4EFWFVS+bt6PvhSBtZ8nvGNyRPg36YFSNfLT7I02zCAHVGL0VFRVVvu3u7s7s2bOrdeHU1FSMRiPBwcEV9gcHB5OcnHzZ9xw7dozJkyezceNGDIbKRZ82bRqvvfZatTIK6zuYfpC8kjz0iv6ac/SUcXc20KCeG2cyClh96BzDO4VbOaUQNuLw75CwDQxu0Pd5rdMAML7jeDac2cCq06vYd34fbQPbah1JOLAqP+mJiooiLe3SDqSZmZkVCqLKUv7VwU5V1Uv2gXl9r3vuuYfXXnuNZs2aVfr8U6ZMISsrq/wjISGhyhmF9fyd/DcA7QPb46yv/JDaPs0CATiYKE/uhADAWHpxUdHuT4B3qKZxyjSt15RhjYcBMGPXDFmMVGiqyk96Tp06hdFovGR/UVERZ89WfpbcgIAA9Hr9JU91UlJSLnn6A5CTk8Pff//N7t27GTt2LAAmkwlVVTEYDKxcuZLrr790gTsXFxdcXFwqnUvUrrKmrZjgmCq9r1WYuV9PfHq+xTMJYZN2fw1px8DdH3qO1zpNBU90eII/4v5gR/IOtiRuoWd9bTpXC1Hpomfp0qXl2ytWrMDH5+J8KkajkTVr1hAREVHpCzs7OxMTE8OqVau47baL67OsWrWKW2655ZLjvb292bdvX4V9s2fP5s8//+Snn34iMvLyi1SKuu1U1ikAwr2q1kQVeWE5il3xGVd8OiiEwyjKhbXTzNt9ngPXujUZYJhnGHe3uJuvD37Nhzs/pHtYd3RKlRsahKixShc9t956K2Bujiqbp6eMk5MTERERfPDBB1W6+MSJE7nvvvvo1KkT3bt35/PPPyc+Pp4xY8YA5qaps2fP8vXXX6PT6WjTpuKQ5qCgIFxdXS/ZL2xDsbGY2POxgPkReFWUzcScmV/CoaSc8ic/QjikrZ+Yl5uoFwkxD2qd5rJGtx3NL8d+4UjGEf6I+4OhUUO1jiQcUKWLHpPJBEBkZCR//fUXAQEBNb74iBEjSEtL4/XXXycpKYk2bdqwbNkyGjVqBEBSUtI15+wRtutU9imKjEW4Gdxo7X/1Nbf+rZ6HM9ENfdkdn8nx87lS9AjHlZsCm2eat2txuYmq8nX15cE2D/LR7o/4aPdHDGw0sEr9+ISwhCo/X4yLi7NIwVPm8ccf59SpUxQVFbFz50569+5d/tr8+fNZt27dFd/76quvEhsba7EsonadyDRPbNmsXrNqNU81DjTPzHw6VebrEQ6sbLmJsI7Q+rZrH6+he1veS5BbEGdzz/Ldoe+0jiMcUKWLnu3bt/PHH39U2Pf1118TGRlJUFAQjzzySPlMzUJUxrqEdQA08W1SrfdH+Jvn61l/9LyFEglhY1KPw98X1rYa+HqtLzdRVe5O7oyNNg9E+Xzv52QWZmobSDicShc9r776Knv37i3/fN++fTz88MMMGDCAyZMn8+uvvzJt2jSrhBT26UDaAQAa+zau1vt7Xxi2vvdMFqVGk8VyCWEzypabaDoYIntpnaZSbm58M83rNSenJIfP9n6mdRzhYCpd9MTGxlZY62rhwoV07dqVuXPnMnHiRGbNmsUPP/xglZDC/pQYS8qHqw9oOKBa52gT5oOLQUex0URiZqEl4wlR9yXsgENLNV9uoqr0Oj1Pd3oagIWHF3I6+7TGiYQjqXTRk5GRUWH+nPXr13PDDTeUf965c2eZ+E9UWkJuAibVhLvBnRCPkGqdQ6dTaOhnbuI6lpJjyXhC1G2qCiteMG93uAeCW2mbp4q6h3XnuvrXUaqWMnPXTK3jCAdS6aInODiYuDjzgnHFxcXs2rWrwoKfOTk5ODk5WT6hsEtl/XkaeTeq0Rw7EQHm+XrWHE6xQCohbMTBJXBmBzi5Q78XtU5TLRNjJqJTdKw6vYpd53ZpHUc4iEoXPTfccEP5uldTpkzB3d2dXr0utiHv3buXxo2r1zdDOJ7D6YcBaOBVufW2rqRHY38A9p/NqnEmIWxCaRGsurDgco9xdWa5iapqWq8ptzUxjzZ7/+/3ZXkKUSsqXfS8+eab6PV6+vTpw9y5c5k7dy7OzhfnWPjyyy8vWTFdiCspm4n5pqibanSeXk3N0yecSMmVH5rCMWz/DDJPg2cI9ByndZoaGRs9FjeDG/tS97Hi1Aqt4wgHUOnJCQMDA9m4cSNZWVl4enqi1+srvP7jjz/i6elp8YDC/qiqyqH0QwBE+tRs+ZCGfh7odQp5xUaOpeTSLNjLEhGFqJvy0mDD++bt/i+Bs4e2eWoowC2Ah9o8xCexnzBj1wyub3i9TFgorKrKkxP6+PhcUvAA+Pn5VXjyI8SVbE3aCoCzzrnGzVvOBl15Z+Ytx1NrnE2IOm39O1CUBcFtof3dWqexiJGtRpZPWPj94e+1jiPsnKz4JmrdsYxjADTyaYSTruad3/s1DwLgyLncGp9LiDor9Rj8Pc+8PfhN0F36x6ct+ueEhZ/t/UwmLBRWJUWPqHVxWeZRgP0b9r/GkZXTroEPAMdl2LqwZ6teBlMpNLsBovpqncaiyicsLJYJC4V1SdEjat3GsxsBiPCOsMj5ytbg+utUBgXFRoucU4g6JW4jHFkGih4GvqF1GouTCQtFbZGiR9Sq1IJUUvLNc+q0D2xvkXM2D7nYeTk2IdMi5xSizjCZYMXz5u1OD0JgM23zWIlMWChqgxQ9olaVrazu7+pf407MZZwNOq5vYe7Xc+K89OsRdmbvQkjeCy7e0HeK1mmsSiYsFNYmRY+oVcczjwPQNrCtRc/bONA8dHfdEVlxXdiR4nxYc6E5q9fT4BGgbR4r++eEhe/99R4mVRYSFpYlRY+oVb+d+A2AJr5NLHreJkHmfj3SvCXsytaPIScRfBpC1zFap6kVY6PH4m5wZ3/afn4/+bvWcYSdkaJH1BpVVTmRZW7e6lW/1zWOrpoBLc2L4abmFpGVX2LRcwuhiZxk2DTDvD3wVXBy1TJNrQlwC2B0u9EAzNg5g/ySfI0TCXsiRY+oNakFqRSUFqBTdLQNsGzzlr+nC6E+5l8Kx6Vfj7AHf74BJXnQoDO0vl3rNLXqvlb3Ud+zPikFKczbP0/rOMKOSNEjas3f5/4GIMwjDCd9zScl/Leyoeu/7U20+LmFqFWJu2H3AvP24KmgKNrmqWUuehcmdZoEwH8P/JfEXPk3LSxDih5Ra7YkbgGgpX9Lq5y/bN2to+dkkkJhw1QV/pgMqNB2OIR30TqRJvo37E/nkM4UGYuYvnO61nGEnZCiR9SaspmYLd2fp8yt0WEAHErKkRXXhe3a/zMkbAMndxjwqtZpNKMoCs91fg6domPFqRXsPLdT60jCDkjRI2pNWdFjrSc9TYO8UBRIzyvmXHaRVa4hhFUV55uXmwC4biL41Nc2j8aa+zXn9qbm/kzv7HhHhrCLGpOiR9SKQ2mHyC7ORqfoaOTdyCrXcHPWl/fr2SQrrgtbtHkmZJ81D1HvMVbrNHXC2A5j8XTy5FD6If53/H9axxE2TooeUSt2JO8AoF1AO9wMbla7Ts/G/gAcSMyy2jWEsIrMBNg8w7w96A1wst6/E1vi7+bPmPbmOYpm7ppJbrGMzhTVJ0WPqBVlTVtdQ7ta9TotQr0BOHE+z6rXEcLiVr0MpYXQ6DpodYvWaeqUe1rcQ0OvhqQVpjF331yt4wgbJkWPqBW7U3YDEOETYdXrlDVvbT2RSmGJrLgubMTpLXDgF1B0cMM0hxuifi1OeqfyIezfHPyGhOwEjRMJWyVFj7C6xNxETmadBKBTcCerXqt9uA+uTjpKjCp7z0gTl7ABJiP88Zx5u+P9ENpO2zx1VN/wvnQL7UaJqUSGsItqk6JHWF3ZyuoR3hGEeIRY9VouBj3dosz9eo6nSNu/sAG7v72wiroPXP+i1mnqLEVReLbzs+gUHavjV7MjaYfWkYQNkqJHWF3ZyupN6zWtleuVNXH9dSq9Vq4nRLUVZsGa183bfSfb/SrqNdW0XlPubHYnANN2TKPEJOvsiaqRokdY3bakbQA0r9e8Vq7XroEPABuPnZdJCkXdtv5dyE+FgGbQZbTWaWzCk9FP4uviy/HM4yw8vFDrOMLGSNEjrEpVVfan7gegW1i3Wrnm4NbmJrTU3GJSc4tr5ZpCVFnKYdj+qXl78FSwwnp09sjHxYfxHccDMDt2NqkFMieXqDwpeoRVJeclk12cjUEx0NLPOjMx/5urk56Gfu4AHErKrpVrClElqgrLJoGpFJrfCE0Hap3IptzW5DZa+7cmtySXD3d+qHUcYUOk6BFWtTp+NQBRvlE4651r7bpNg8z9elYcSK61awpRaQd+gVMbweBqHqIuqkSv0/NC1xdQUFh6Ymn5lBhCXIsUPcKqylZWvzHyxlq97nVNzR1C952VYeuijinKgRUvmLevmwj1IjSNY6vaBrYtX5dr6vapGE0yL5e4Nil6hFWVzcTcPrB9rV6314Wi53hKrnRmFnXL+nchJ8lc7PQcr3Uamzau4zi8nL04nH6YH4/+qHUcYQOk6BFWk1qQytncs4C5eas2NfTzQK9TyC82EpuQWavXFuKKzh+BbbPN2ze8A06u2uaxcX6ufoyLHgfArN2zSC+UaSrE1UnRI6xmzek1ANT3rE89l3q1em1ng442YeZ1uNYdOV+r1xbislQVlj1j7rzcbAg0v0HrRHbhzmZ30sKvBTnFOczaNUvrOKKOk6JHWM2xzGMADIoYhKLBWkJD24UCcOK8zMws6oADiyFuPehdpPOyBel1ep7v+jwAvxz7hX3n92mcSNRlUvQIqymbn6exT2NNrl82M/PfpzKkX4/QVlHuxc7LvSaCX6S2eexMdFA0Nze+GRWVqdunYlJNWkcSdZQUPcIqkvOSOZB2AIC2AW01yRDd0NyklpxdyIFEma9HaGjDe5CTCL6NpPOylTwV8xSeTp7sT9vPz8d+1jqOqKOk6BFWcTj9MABRPlG13om5jJ+HM50jzIWPNHEJzZw/Cls/MW8PeQec3LTNY6cC3AIYGz0WgA93fkhaQZrGiURdJEWPsIqDaQcBaO5XO+ttXUmTIC/A3MQlRK1TVfh9IphKoOlgaD5E60R2bUTzEbT0a0lOcQ7v//2+1nFEHSRFj7CKspmYW/i10DRHx4a+APyxX2ZmFhrY8/2FmZfd4Mb3tE5j9ww6Ay93fxkFhd9O/la+2LEQZaToERZXUFrA8YzjANwQoe2w3LIRXKm5RaTnyeKjohblpV3svNx3MtRrpG0eB9EmoA13tbgLgDe3vUmRsUjjRKIukaJHWNzRjKOoqNRzqUeYZ5imWdydDYT7mftQ/H1KJi4TtWjVy1CQDkGtofsTWqdxKE9GP0mgWyCns08zb988reOIOkSKHmFxZZMSNqvXTOMkZu0b+AKwXJq4RG2J2wix3wIKDJsBeietEzkUL2cvnuvyHABf7PuCU1mntA0k6gwpeoTFlQ1VH9BogMZJzIa2NTdxHUySYeuiFpQWwW9Pmbc7PQjhXbTN46AGNRpEz/o9KTGV8Oa2N2WuLgFI0SMsTFVV9qWaZ0TVan6ef2tT3wcwD1svKpWVmIWVbZ4JacfAIwj6v6J1GoelKAovdH0BF70L25O389vJ37SOJOoAKXqERW06u4mC0gIMikGz+Xn+rb6vG34ezpQYVf4Xm6h1HGHPUo/DhgtDpYe8DW6+msZxdOFe4YxpPwaA9/9+n6yiLI0TCa1J0SMsqqxpq3NIZ9wMdWMSNp1OYXincAB2xElnZmElqgq/PwXGImjcH1rfrnUiAdzf6n4a+zQmvTCdD3d+qHUcoTEpeoRF7U7ZDUCPsB4aJ6moUyPzzMwygktYzd5FELcBDK4w9APQYJFdcSknvRMvdX8JgJ+P/cyOpB0aJxJakqJHWExOcQ5bErcA0DqgtcZpKoq+MEnhqbR8TqflaRtG2J/cFFg+2bzd5zlZULSOiQmOYUTzEQC8uvVVCkoLNE4ktCJFj7CYI+lHAHAzuNEpuJPGaSry93ShdZg3gCw+Kixv2TNQkAEh7aDHk1qnEZcxoeMEgt2DSchJYHbsbK3jCI1I0SMspqxpq2tIV5Q6+Gi/Zai56NkdL+twCQs69CscXAKKHm75WObkqaM8nT15ufvLAHx98Gv2p+7XOJHQghQ9wmJWnV4FmKeBr4u6RPgB8NPOM5hMMmeHsICCDPj9afP2dRMgtL2mccTV9W7Qm6FRQzGpJl7e8jIlxhKtI4laJkWPsIjC0kKOZhwF4MaoGzVOc3m3RtfHxaAjI7+EOOnXIyxhxYuQew4CmkHvZ7VOIyrhuc7PUc+lHscyjvHF/i+0jiNqmeZFz+zZs4mMjMTV1ZWYmBg2btx4xWN/+eUXBg4cSGBgIN7e3nTv3p0VK1bUYlpxJftT92NUjdRzqUcDzwZax7ksZ4OOthcmKlx35LzGaYTNO77m4lITN38MTq5aJxKVUM+1HpO7mDudf7738/LFkYVj0LToWbRoERMmTOCFF15g9+7d9OrViyFDhhAfH3/Z4zds2MDAgQNZtmwZO3fupF+/fgwbNozdu3fXcnLxbxvObACgQ1CHOtmfp0z3xv4AbDgqRY+ogaJc+HWCebvro9Cwq6ZxRNUMiRxCnwZ9KDWV8sqWVzCaZKZ2R6Fp0TN9+nQefvhhRo0aRcuWLZkxYwbh4eHMmTPnssfPmDGDZ599ls6dO9O0aVOmTp1K06ZN+fXXX2s5ufi3sk7M/cL7aZzk6vq1CAJg75lMbYMI27bmdciKB9+GcP1LWqcRVaQoCi92exEPJw/2pu5lwaEFWkcStUSzoqe4uJidO3cyaNCgCvsHDRrEli1bKnUOk8lETk4Ofn5+VzymqKiI7OzsCh/CshJzE9mbuheA6KBojdNcXcsQb3QKZOSXEJuQqXUcYYtOb4Edn5u3h80EF09t84hqCfEIYWLMRABm7Z5FXFacxolEbdCs6ElNTcVoNBIcHFxhf3BwMMnJyZU6xwcffEBeXh7Dhw+/4jHTpk3Dx8en/CM8PLxGucWlVp9ejUk10cq/FY28G2kd56rcnPW0beALwOqD57QNI2xPUQ4sHgOoEH0vNL5e60SiBu5sdifdQ7tTZCzixU0vUmoq1TqSsDLNOzL/u/+HqqqV6hPy/fff8+qrr7Jo0SKCgoKueNyUKVPIysoq/0hISKhxZlHRwfSDAPQN71un+/OUuT26PgB7pIlLVNXKFyHzNPg0hMHTtE4jakhRFF7v+TpeTl7sTd3L/APztY4krEyzoicgIAC9Xn/JU52UlJRLnv7826JFi3j44Yf54YcfGDBgwFWPdXFxwdvbu8KHsJz8knzWnF4DQIt6LTROUzntGphHcG0+nkpqbpHGaYTNOLYads43b9/6CbjKzxJ7EOIRwuSu5tFcn8R+Uj6zvLBPmhU9zs7OxMTEsGrVqgr7V61aRY8eV16s8vvvv+eBBx7gu+++Y+jQodaOKa7hQNoBCo2FuBncuK7BdVrHqZQO4b6EeLtiUmHf2Syt4whbUJABS8eat7uOgcje2uYRFjUsahj9wvtRairlhU0vyKSFdkzT5q2JEyfyxRdf8OWXX3Lo0CGeeuop4uPjGTNmDGBumho5cmT58d9//z0jR47kgw8+oFu3biQnJ5OcnExWlvzi0sr2pO0AdA/tjpPONqbfVxSFThHmVdc3Hk3VOI2wCcuegZwk8G8C/V/ROo2wMEVReLn7y/i6+HIk4wif7v1U60jCSjQtekaMGMGMGTN4/fXX6dChAxs2bGDZsmU0amTuDJuUlFRhzp7PPvuM0tJSnnjiCUJDQ8s/xo8fr9WX4PD+iPsDqPujtv6td7NAABbvPoOqypIU4ioOLIF9P4Kig9s+A2d3rRMJKwhwC+ClbubpB+btm8e+8/s0TiSsQVEd7Cd+dnY2Pj4+ZGVlSf+eGsoozKD3IvNj/g0jNlDPtZ7GiSqvqNRIy5eWY1Jh47P9CPeTX2TiMnJT4JOuUJAOvZ6G/i9rnUhY2bMbnuWPuD+I9Inkh5t+wNUgM23XFZb4/a356C1hu5afWg5AI+9GNlXwALgY9LS5sCTFD3/LiD5xGaoK/xtrLniC20KfyVonErXgha4vEOgWSFxWHB/8/YHWcYSFSdEjqq1s6Ym6PgvzldzYNhSArSfSNE4i6qQdc+HYCtC7wO2fgcFZ60SiFvi4+PBmzzcBWHhkIesS1mmaR1iWFD2iWowmIzuSdgAwOGKwxmmqZ0BL8/xOf5/OILdIJiUT/3DuoHlOHoCBr0Nwa23ziFrVo34P7mt1HwAvb36Z8/myVp+9kKJHVMufCX9SbCrG3eBO03pNtY5TLVEBngR6uQCwZPdZjdOIOqOkAH5+GIxF0GSgeUFR4XAmdJxA83rNySjK4MXNL2JSTVpHEhYgRY+oll3ndgHmpzwueheN01SPTqdwe0fz7MyyDpcot+plSDkIHoFw6xywgVnGheU56515t/e7uOpd2ZK4hW8OfqN1JGEBUvSIKisxlvDj0R8B6BTSSeM0NdM10rxY7R/7ksjKlwnJHN7RFRcXE731U/AM1DaP0FSUbxTPdH4GgBm7ZnAo7ZDGiURNSdEjquxw+mGKjOblG64Pt+0FF69rEkiDem7kFRvZcEza7R1aTjIsecy83e1xaHr1JW6EY7iz2Z3lszU/t/E5CkoLtI4kakCKHlFl/zvxPwB6N+iNp7OnxmlqxtmgY3DrEACWH0i+xtHCbpmMsPhRyE+D4DYy67IopygKr/V4rXwY+7TtstCsLZOiR1TZ+jPrAegRduU10mxJ/wujuNYdTqHUKJ0VHdKG9+HkOjC4wR3zwEkmpBMX1XOtx7Re01BQWHx8MUtPLNU6kqgmKXpElZzJOUNynvmJyG1NbtM4jWV0jfTH08VAXrFROjQ7opPrYN2Fv95vmg5BLTSNI+qmrqFdeayDufnzzW1vcjzjuMaJRHVI0SOq5PeTvwPQLqAd7k72sXSDXqeUd2iev+WUtmFE7cpJhp9HASpE3wcd7tE6kajDHmn7CN1Du1NQWsDT658mvyRf60iiiqToEVVS1rR1Y9SNGiexrFG9ogBYfegcRpNDLUfnuIyl8NPDkHfe3I/nxve0TiTqOL1Oz7Re0whyC+Jk1kne2PaGLFhsY6ToEZW269wu9qWaVx629VFb/9Y5oh4+bk4UlphYIR2aHcO6qXB6Ezh7wp3/BSc3rRMJG+Dv5s87vd9Br+j57eRv/HLsF60jiSqQokdUWtkaNNeHX0+oZ6imWSzNoNcxrL35a1opRY/9O7YKNl5YTPLmWRDQRNs8wqZ0CunEk9FPAjB1+1QOpx/WOJGoLCl6RKUYTcbyEQv9GtrmAqPX0reZeRTXr3uTyCqQiQrtVtoJ8zITAJ1HQZs7tM0jbNKDbR6kV/1eFJuKmbB2ApmFmVpHEpUgRY+olINpB0krNK9GPqChfU7a1qtZAC4GHUaTytYTqVrHEdZQlAsL/w8Ks6BBFxg8VetEwkbpFB3Tek2jgWcDzuae5ZkNz1BqkoWL6zopekSlfH/4e8DctGXrExJeiYtBz52dGgCwYHu8xmmExamqecbl84fAMwSGfw0G21w3TtQNPi4+zLx+Jm4GN7YlbWPmrplaRxLXIEWPuKZiYzGrTq8C4M7md2qcxrpuizYXPVtPpFFYYtQ4jbCojR/AoaWgc4IR34C3ffVLE9poVq8Zb/R8A4D5B+az7OQyjROJq5GiR1zT7yd/p9BYiJ+rHz3Demodx6o6NvQlxNuVUpMqT3vsydGV8Oeb5u2h70N4F23zCLsyOGIwD7cx9xN7Zcsr0rG5DpOiR1zT73HmCQkHNhqIoigap7EuRVG4rWN9AH7dk6hxGmERqccvTkAY8yDEPKB1ImGHnox+kp71e1JoLGT8n+NJL0zXOpK4DCl6xFUlZCewPWk7APe0cIzZav+va0MAYhMy2X82S+M0okby0mDBf6AoC8K7wpB3tU4k7JRep+edXu8Q7hVOYl4iE9ZOoMhYpHUs8S9S9IirWnx8MQAt/VoS6ROpcZra0aCee/myFEvlaY/tKi2CRfdCRhz4NoQR34LBWetUwo75uPjw8fUf4+Xkxe6U3by8+WWZsbmOkaJHXFFBaQELDy8EYETzEXbftPVP91x42vP99niy8mXOHpujqrB0HMRvARdvuOdH8AzSOpVwAFG+UUzvNx2DYmBZ3DLm7JmjdSTxD1L0iCtaG7+WnJIcfFx8GBI5ROs4tWpw6xDq+7qRU1TK//ac1TqOqKoN78PehaDoYfh/ZeV0Uau6hXbjpe4vATBnzxx+PfGrxolEGSl6xBUtOrIIgMGNBtvNiuqV5eqk5z8x5uHr32w9rXEaUSX7foK1ZSO1PoDG9rVOnLANtze9nYfaPASYR3TtPLdT40QCpOgRV3Ai8wS7UnYB8H8t/0/jNNoY2b0RAMdSctmTkKltGFE5J9ebJyAE6D4WOj2obR7h0MZ3HM/ARgMpMZUw7s9xnMg8oXUkhydFj7isbw99C0Br/9ZE+UZpnEYb/p4u9GseCMDMNcc0TiOuKTEWFt4DxmJodQsMfF3rRMLB6RQdU6+bSrvAdmQXZ/PoqkdJyk3SOpZDk6JHXCI5L7l8VtEH2zj2X8rPDDb3BfnzcAqn0/I0TiOuKO2EeWh6cS5E9obb54JOr3UqIXA1uPLJ9Z8Q5RPFufxzPLr6UTIKM7SO5bCk6BGXWHxsMfml+TTxbcL1DR27P0SrMG86NvQFYNFfCdqGEZeXkwzf3AZ55yG0PYxYIGtqiTrF19WXzwZ+RohHCHFZcTyx5gnyS/K1juWQpOgRFZSYSvjh6A+AuS+Pk85J40Tau+9C356vt54mNVcmG6tTCjLg2/9A5mmoFwn/9xO4emudSohLhHiE8NnAz/B18WVf6j6eWvcUJUaZDqO2SdEjKvjl6C+kFqTi6eTJ0KihWsepE25sG0pUoAe5RaV8sTFO6ziiTGEWfHM7nNsHnsFw32KZi0fUaVE+UczuPxs3gxtbErfwzIZnKDFJ4VObpOgR5YwmIzN3zwTgnpb34GZw0zhR3eBi0DPqOnNn7vlb4sjML9Y4kaAoBxbcCYm7wM3PXPD4OcaM4cK2tQ1sy4x+M3DWObMmfg2TN0ym1FSqdSyHIUWPKPfT0Z/IKc7By9mLR9s9qnWcOuXuLuE0DfKksMTEvE3ytEdTxXnw3QhI2A6uvjDyfxDcWutUQlRaj7AefNjvQ5x0Tqw8vZLnNz2P0WTUOpZDkKJHAJBXksfcfXMBuLvF3TjrZY2if1IUhUd6m5/2fL31NNmF8khaEyUF8P1dcHqzeXmJ+xZDaDutUwlRZb0b9GZ63+kYdAb+iPuDlza/JIVPLZCiRwAw/8B8zuWfw8fFh/tb3691nDppaLtQfNycyCoo4dN1MslYrSvKMXdajtsAzp5w7y9Qv6PWqYSotr7hfXm/9/voFT2/nvyVlza/JE1dViZFjyC1IJUv930JwNgOY/F2ltEvl+PubODpQc0AmLcpjnPZhRonciAFGfD1rXB6Ezh7mUdphXfWOpUQNda/UX/e6f1OeeEzaf0kio3Sb9BapOgRvLvjXYpNxTTybsQdze7QOk6ddk+XhjTyd6eo1MRbvx/SOo5jyE2B+TfB2b/BrR7cvxQaddc6lRAWMzhiMNP7TsdJ58Sa+DU8+eeTMo+PlUjR4+ASshP449QfAEzqNEnm5bkGg17H67e0AWDpnkT+PpWucSI7l3UGvroRzu03D0t/YJk0aQm7dH3D65k94OJw9jGrx5BdnK11LLsjRY+DKxui3im4E33D+2obxkb0aRbI4NbBALy4ZD9Gk6pxIjuVtBe+GABpx8C7ATz4BwS30jqVEFbTLbQbnw/8HC9nL3an7ObB5Q+SnJesdSy7IkWPA1sTv4YVp1YAMKnzJI3T2JYXh5p/+R5OzuGTtcc1TmOHjq8xP+HJSYLAlvDQcvBvrHUqIayuQ1AHvhr8Ff6u/hzNOMr/Lfs/jqQf0TqW3ZCix0GlFqTy0uaXAPNyE639ZZ6Tqgj3c+flm8yFz8drj8tipJa0ewF8NxyKcyCil7ng8Q3XOpUQtaa5X3O+vfFbonyiSMlPYeQfI9l0dpPWseyCFD0OavLGyeQU51Dfsz7josdpHccm3d8jgjb1vSkuNfHEd7soNZq0jmTbTEZY9Qr873EwlULb4XDvz+Dmq3UyIWpdA68GfD3ka7qEdCG/NJ+xa8byw5EftI5l86TocUC/nviV7UnbMSgGPujzAe5O7lpHskl6ncL04R1wddKx/2w2M1Yf0zqS7SrIMC8rsXmG+fNeT8Ptn8tq6cKh+bj48OmAT7m58c0YVSNvbHuDV7e8KkPaa0CKHgez9/xeXtnyCgD3tb6P1gHSrFUTzYK9mHZ7W8DczLXx2HmNE9mglEPweT84sQYMbnDHPOj/MiiK1smE0JyT3ok3e77JuOhxKCj8fOxnHlj+gHRwriYpehxIemE6T6x5ghJTCe0C2vFkhye1jmQXbotuwO0d6wPw1KJYzucUaZzIhuxZCHP7Q0Yc+DSEh1dC2/9onUqIOkVRFEa3G82cAXPwdvZmX+o+Rvw2gr+S/9I6ms2RosdBGE1GHl7xMJlFmQS5B/FB3w9w0sucPJYy9ba2NA3yJDW3mPvmbae4VPr3XFVRDvzyKCx+FEryILI3PLJO1tES4ip61u/JwpsW0rxec9IL03l4xcN8tPsjSkyyFmBlSdHjIN756x2OZx7HoDMwo+8MQjxCtI5kV1yd9HwwvD0uBh2Hk3MYv3C3zN9zJYmx8Fkf2LsQFB30fR7uWwIe/lonE6LOC/cK55sbv+HWJreiovL53s954I8HSMhJ0DqaTZCixwHM2TOH7w9/D8Cr3V+lbWBbjRPZp3YNfJkxogMAf+xPZsove1FVKXzKlRbDn2/BF/0h/QR414cHfoe+z4FOr3U6IWyGm8GNN3q+wXt93sPLyYu9qXu589c7+eXYL/Iz5xqk6LFz3xz8htmxswEY3XY0tzS5ReNE9m1I21DevNW8TMUPf5/h+cX75IcQwNld8Hkf2PCueTh6y5thzCZo1EPrZELYrBsibuCnm3+iY1BH8kryeGXLK4xeOZqEbHnqcyWK6mA/kbOzs/Hx8SErKwtvb/tdTVxVVWbtnsUX+74A4P5W9/N0p6dRZERMrfh222leXLIfgFs6hPH+ne1x0jvg3xiFWbDuHdj+KahGcA+Aoe9D69u0TiaE3TCajHx76Fs+3v0xhcZCXPWuPNHhCf6v1f/Z1XqKlvj9LUWPHSooLeDVLa+yLG4ZYH7C82T0k1Lw1LKFO+J5fvE+TCpc1ySAT+7piI+7/fwAuiqTCfZ8D6tfhbwU8742d8CQd8EjQNNoQtirhOwEXtv6GtuTtwMQ6RPJM52eoVeDXhonswwpeqrB3ouek1kneXrd0xzPPI5O0fFs52f5v5b/p3Ush7V8fxJjv9tNqUkl3M+NOf8XQ5v6PlrHsh5Vhbj1sOZ1OLvTvM+/KQx5G5oM0DabEA5AVVWWHF/CjF0zSC9MB8yjvibFTKJJvSYap6sZKXqqwV6LHpNq4ocjP/DB3x9QaCzEy9mLd3u/y3X1r9M6msP7+1Q6jy/YRUpOEXqdwlMDmvJY3ybodXb25C1+G/z5JpzaaP7c2RP6PAddx4DBWdtsQjiYnOIcPt/7Od8e+pZSUykKCjdE3MCj7R+lsa9tLt4rRU812GPRs+f8Ht7d8S57U/cC0CGwA+/0focwzzCNk4kyKTmFPP3DHjYeSwWgdZg3r93cmk4RfhonqyGTCY6vgi0fXSx29M7Q6SG4biJ4BWubTwgHF58dz4xdM1h1ehUACgqDIwbzQOsHbG5Gfil6qsGeip6jGUf5dM+n5d/MbgY3xrQfw8hWIzHoDBqnE/+mqiqL/krgrWWHyCksBWBAy2AmDGhqe01eBZmw/yfY/hmkHjXvU/QQfS/0eRZ8GmgaTwhR0ZH0I3y651NWx68u39c+sD33tLiHgY0G2sRktVL0VIOtFz0lphI2ntnID0d/YPPZzeX7b4i4gQkxE6jvWV/DdKIykrIKeOePw/xvTyJl//q6R/nzYM8I+jYPwtlQR0d5GUvN/XViv4PDv0FpoXm/iw/E3A9dH5ViR4g67kj6EeYfmM/yU8spNZn/+KrnUo/BEYO5qfFNtAtoV2cHvdhF0TN79mzee+89kpKSaN26NTNmzKBXryv3NF+/fj0TJ07kwIEDhIWF8eyzzzJmzJhKX88Wi568kjx2JO1g49mNrD69moyiDMD8mLJ/w/6MbjeaVv6tNE4pqupIcg4z1xxlxYFz5bM313N34oY2oQxqFUzXKD/cnTV+YleQASfXweFlcGwlFGZefC2oFXQcaX664+KlVUIhRDWkFqTy45Ef+eHoD6QWpJbvb+DZgD7hfehVvxedQjrhonfRMGVFNl/0LFq0iPvuu4/Zs2fTs2dPPvvsM7744gsOHjxIw4YNLzk+Li6ONm3aMHr0aB599FE2b97M448/zvfff88dd9xRqWvW9aKnxFhCQm4Ch9MOsy91H7tTdnMk/Qilamn5MX6uftwUdRMjmo+gofel90nYljMZ+Xy99TS/7DpDam5x+X5ng472DXxoHeZD2/o+tKnvQ1Sgh/Xm+ykpNDdVpRyCM3/B6S2QchD4x48Id3/zHDsd/g/ComUldCFsXKmplG1J2/j95O+siV9DQWlB+WuuelfaBralXUA72gW2o6VfS4I9gtEp2jyNtvmip2vXrnTs2JE5c+aU72vZsiW33nor06ZNu+T45557jqVLl3Lo0KHyfWPGjGHPnj1s3bq1Ute0VtFTWlTAuYMbMKpGjKZSTKpKqWrEpBoxqSZK1VKKjMVkl+SRU5xLTmke2SW55BTnkV2aR05JHmlFGZwrTEfl0v8koW4BdKrXih4BHWhfrxmGsmn7y//z/eM9l/tPWmGfeuV9VzrnZTJV3HWN91/1+uqFXeq/9qn/OIf6j+P+9Z7yc13l/erl9qkXz1vhnFR8/Yrn/Pd5rnTOy9yHy7zHaDJxJiOfk+dzOZ2aR05hCcqFYxRAQUWvgJerHg8XA57OetxddLgadLga9DgbFJx1CnodGHSgUxQUVBRFvfB+KpxLMZWiL0xDl5+KPi8FQ+4ZlMt875T4NKQwvDeF4b0oCWpv7rsjhLA7hcYCDqTFsjdtJ3vTdpJRlH7JMU46Z4LdwghyD8bLyRtPJ2/cDG4YVSPFxmIyi9JJLzyPk7MbM+/6yqL5LPH7W7Nn58XFxezcuZPJkydX2D9o0CC2bNly2fds3bqVQYMGVdg3ePBg5s2bR0lJCU5Ol3bEKioqoqioqPzz7OxsC6S/VOrJnWTfPeGyr+kA5wsf1W8EOHfhYy2nqn0OYQvCL3xUlQoUXfOoqwm6wv4iYNWFDyGEPWt54WPEFY8oAE5c+LiydE8F7rJkMsvQrOhJTU3FaDQSHFxxSGtwcDDJycmXfU9ycvJljy8tLSU1NZXQ0NBL3jNt2jRee+01ywW/Ap2ip/gqd7O8EUBVK/zFXfb/l9uufXbSVHHFL6Ouf32Vy6eW/e+/HkxdfK1yyp4hqYCqKqgVnisJIcS/qRd+PPzzaXbZ5//8uaFgVDxRVbXOdYrWfFzzv2/ItW7S5Y6/3P4yU6ZMYeLEieWfZ2dnEx5enb+jry6oRXeC9h+69oFCCCGE0IRmRU9AQAB6vf6SpzopKSmXPM0pExISctnjDQYD/v7+l32Pi4sLLi51p/e5EEIIIbSh2YQgzs7OxMTEsGpVxX4Cq1atokePHpd9T/fu3S85fuXKlXTq1Omy/XmEEEIIIcpoOgvaxIkT+eKLL/jyyy85dOgQTz31FPHx8eXz7kyZMoWRI0eWHz9mzBhOnz7NxIkTOXToEF9++SXz5s1j0qRJWn0JQgghhLARmvbpGTFiBGlpabz++uskJSXRpk0bli1bRqNGjQBISkoiPj6+/PjIyEiWLVvGU089xSeffEJYWBizZs2q9Bw9QgghhHBcms/IXNvq+uSEQgghhLiUJX5/19FFfoQQQgghLEuKHiGEEEI4BCl6hBBCCOEQpOgRQgghhEOQokcIIYQQDkGKHiGEEEI4BCl6hBBCCOEQpOgRQgghhEOQokcIIYQQDkHTZSi0UDYBdXZ2tsZJhBBCCFFZZb+3a7KQhMMVPTk5OQCEh4drnEQIIYQQVZWTk4OPj0+13utwa2+ZTCYSExPx8vJCURSLnjs7O5vw8HASEhIcfl0vuRcVyf24SO7FRXIvLpJ7UZHcj4vK7kV8fDyKohAWFoZOV73eOQ73pEen09GgQQOrXsPb29vhv0nLyL2oSO7HRXIvLpJ7cZHci4rkflzk4+NT43shHZmFEEII4RCk6BFCCCGEQ5Cix4JcXFx45ZVXcHFx0TqK5uReVCT34yK5FxfJvbhI7kVFcj8usuS9cLiOzEIIIYRwTPKkRwghhBAOQYoeIYQQQjgEKXqEEEII4RCk6BFCCCGEQ5Cix0Jmz55NZGQkrq6uxMTEsHHjRq0j1YoNGzYwbNgwwsLCUBSFJUuWVHhdVVVeffVVwsLCcHNzo2/fvhw4cECbsFY2bdo0OnfujJeXF0FBQdx6660cOXKkwjGOcj/mzJlDu3btyidW6969O3/88Uf5645yHy5n2rRpKIrChAkTyvc50v149dVXURSlwkdISEj56450LwDOnj3Lvffei7+/P+7u7nTo0IGdO3eWv+4o9yMiIuKS7wtFUXjiiScAC94HVdTYwoULVScnJ3Xu3LnqwYMH1fHjx6seHh7q6dOntY5mdcuWLVNfeOEF9eeff1YBdfHixRVef/vtt1UvLy/1559/Vvft26eOGDFCDQ0NVbOzs7UJbEWDBw9Wv/rqK3X//v1qbGysOnToULVhw4Zqbm5u+TGOcj+WLl2q/v777+qRI0fUI0eOqM8//7zq5OSk7t+/X1VVx7kP/7Zjxw41IiJCbdeunTp+/Pjy/Y50P1555RW1devWalJSUvlHSkpK+euOdC/S09PVRo0aqQ888IC6fft2NS4uTl29erV6/Pjx8mMc5X6kpKRU+J5YtWqVCqhr165VVdVy90GKHgvo0qWLOmbMmAr7WrRooU6ePFmjRNr4d9FjMpnUkJAQ9e233y7fV1hYqPr4+KiffvqpBglrV0pKigqo69evV1VV7ke9evXUL774wmHvQ05Ojtq0aVN11apVap8+fcqLHke7H6+88oravn37y77maPfiueeeU6+77rorvu5o9+Ofxo8frzZu3Fg1mUwWvQ/SvFVDxcXF7Ny5k0GDBlXYP2jQILZs2aJRqrohLi6O5OTkCvfGxcWFPn36OMS9ycrKAsDPzw9w3PthNBpZuHAheXl5dO/e3WHvwxNPPMHQoUMZMGBAhf2OeD+OHTtGWFgYkZGR3HXXXZw8eRJwvHuxdOlSOnXqxJ133klQUBDR0dHMnTu3/HVHux9liouL+fbbb3nooYdQFMWi90GKnhpKTU3FaDQSHBxcYX9wcDDJyckapaobyr5+R7w3qqoyceJErrvuOtq0aQM43v3Yt28fnp6euLi4MGbMGBYvXkyrVq0c7j4ALFy4kF27djFt2rRLXnO0+9G1a1e+/vprVqxYwdy5c0lOTqZHjx6kpaU53L04efIkc+bMoWnTpqxYsYIxY8Ywbtw4vv76a8DxvjfKLFmyhMzMTB544AHAsvfB4VZZtxZFUSp8rqrqJfsclSPem7Fjx7J37142bdp0yWuOcj+aN29ObGwsmZmZ/Pzzz9x///2sX7++/HVHuQ8JCQmMHz+elStX4urqesXjHOV+DBkypHy7bdu2dO/encaNG/Pf//6Xbt26AY5zL0wmE506dWLq1KkAREdHc+DAAebMmcPIkSPLj3OU+1Fm3rx5DBkyhLCwsAr7LXEf5ElPDQUEBKDX6y+pNlNSUi6pSh1N2YgMR7s3Tz75JEuXLmXt2rU0aNCgfL+j3Q9nZ2eaNGlCp06dmDZtGu3bt2fmzJkOdx927txJSkoKMTExGAwGDAYD69evZ9asWRgMhvKv2VHux795eHjQtm1bjh075nDfG6GhobRq1arCvpYtWxIfHw843s8MgNOnT7N69WpGjRpVvs+S90GKnhpydnYmJiaGVatWVdi/atUqevTooVGquiEyMpKQkJAK96a4+P/bu7eQqLo3DODPeKRpxtEZ81CWFDgeairUq4LK9CJQmhqIsIGMoQsDoRPhIajxwvAmLzrcRDU3BXljaBAVpOOYUamNNVhkBw+dKAkCwZwy3+/ij/P/PH59X2Na6/nBhnGv7V7LF9087LXX9iuam5v/yNqICEpKSlBXV4fGxkYsX758XLtq9ZhIROD3+5WrQ25uLnw+Hzo7OwNbdnY27HY7Ojs7sWLFCqXqMZHf78fTp0+RmJio3O/G+vXrJ73Woru7G8nJyQDUvGa4XC7ExcUhPz8/sC+odQjKY9aKG1uyfuHCBXny5IkcOHBAFi5cKL29vXM9tFk3ODgoXq9XvF6vAJCamhrxer2B5frV1dViMBikrq5OfD6fFBYW/pHLLUVE9u3bJwaDQdxu97ill0NDQ4FjVKlHeXm5eDwe6enpkcePH0tFRYWEhITIrVu3RESdOkzn76u3RNSqx+HDh8XtdsurV6/k3r17UlBQIHq9PnC9VKkWDx48kLCwMKmqqpLnz5/L5cuXRavVyqVLlwLHqFSP79+/y7Jly6S0tHRSW7DqwNATJGfPnpXk5GSJiIiQzMzMwDLlP11TU5MAmLQVFRWJyP+WXB4/flwSEhIkMjJSNmzYID6fb24HPUumqgMAcblcgWNUqYfD4Qj8PSxatEhyc3MDgUdEnTpMZ2LoUakeY+9XCQ8Pl8WLF4vNZpOurq5Au0q1EBG5du2arFq1SiIjIyUtLU3OnTs3rl2lety8eVMAyLNnzya1BasOGhGRn7gTRURERPRb4DM9REREpASGHiIiIlICQw8REREpgaGHiIiIlMDQQ0REREpg6CEiIiIlMPQQERGREhh6iIiISAkMPUQ0J5xOJ9auXTvXwyAihfCNzEQUdBqNZsb2oqIinDlzBn6/HyaT6ReNary+vj6YzWYMDAwgKipqTsZARL9W2FwPgIj+PO/fvw98rq2txbFjx8b9N+kFCxZAp9NBp9PNxfAAAPX19di0aRMDD5FCOL1FREGXkJAQ2AwGAzQazaR9E6e39uzZg23btuHEiROIj49HdHQ0KisrMTIygiNHjsBoNCIpKQkXL14c19fbt2+xc+dOxMTEwGQywWq1ore39x/HWF9fj61bt07Z5na7odFocPv2bWRnZ0Or1WLdunXjgtujR4+Qk5MDvV6PqKgoZGVlob29/T/Vi4h+DYYeIpo3Ghsb8e7dO3g8HtTU1MDpdKKgoAAxMTG4f/8+iouLUVxcjNevXwMAhoaGkJOTA51OB4/Hgzt37kCn02HLli34+vXrtP18/vwZLS0t04aeMUePHsXJkyfR3t6OsLAwOByOQJvdbkdSUhLa2trQ0dGBsrIyhIeHB6cQRDQrGHqIaN4wGo04deoUUlNT4XA4kJqaiqGhIVRUVCAlJQXl5eWIiIhAa2srAODKlSsICQnB+fPnYbFYkJ6eDpfLhf7+frjd7mn7uX79OiwWC5YuXTrjeKqqqrBx40ZkZGSgrKwMd+/exfDwMACgv78feXl5SEtLQ0pKCnbs2IE1a9YErRZEFHwMPUQ0b6xcuRIhIf+/LMXHx8NisQS+Dg0NhclkwsePHwEAHR0dePHiBfR6feAZIaPRiOHhYbx8+XLafmaa2vq71atXBz4nJiYCQKDvQ4cOYe/evcjLy0N1dfWM/RHR/MDQQ0TzxsTpIY1GM+W+0dFRAMDo6CiysrLQ2dk5buvu7sauXbum7OPbt2+4ceMGrFbrvxrP2Iq0sb6dTie6urqQn5+PxsZGZGRk4OrVqz/+wxLRL8fVW0T028rMzERtbS3i4uJ+eBVWU1MToqOjg/KOILPZDLPZjIMHD6KwsBAulwvbt2//6fMS0ezgnR4i+m3Z7XbExsbCarWipaUFPT09aG5uxv79+/HmzZspv6ehoeGHprZm8uXLF5SUlMDtdqOvrw+tra1oa2tDenr6T52XiGYX7/QQ0W9Lq9XC4/GgtLQUNpsNg4ODWLJkCXJzc6e989PQ0DBp2fu/FRoaik+fPmH37t348OEDYmNjYbPZUFlZ+VPnJaLZxTcyE5EyHj58iM2bN2NgYIDLy4kUxOktIlLGyMgITp8+zcBDpCje6SEiIiIl8E4PERERKYGhh4iIiJTA0ENERERKYOghIiIiJTD0EBERkRIYeoiIiEgJDD1ERESkBIYeIiIiUgJDDxERESnhL0pAbG1G39+lAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "simulation_results = results['simulation']\n", + "simulated_states = simulation_results['output_states']\n", + "\n", + "sequence_duration = simulation_results['sequence_duration']\n", + "simulation_dt = simulation_results['simulation_dt']\n", + "sim_time_list = np.linspace(0,sequence_duration,num=int(sequence_duration/simulation_dt)+1)\n", + "\n", + "overlaps = simulation_engine.compute_overlaps(simulated_states)\n", + "plot_overlaps(overlaps,sim_time_list,time_label='Time / ns');" + ] + }, + { + "cell_type": "markdown", + "id": "20e15c8e", + "metadata": {}, + "source": [ + "## iSWAP sweep for 2-qubit 1-coupler system (temporary)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "44d0bb14", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:21:21]: Loading platform default_q01c0_flux\n", + "INFO:qibo.config:Loading platform default_q01c0_flux\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'model_name': 'general_coupler_model', 'topology': [[0, 1]], 'qubits_list': ['0', '1'], 'nlevels_q': [2, 2], 'couplers_list': ['c0'], 'nlevels_c': [2], 'drift': {'one_body': [(28.616767481549424, 'O_0', ['0']), (-0.9424777960769379, 'O_0 * O_0 - O_0', ['0']), (29.05225505519004, 'O_1', ['1']), (-0.9738937226128359, 'O_1 * O_1 - O_1', ['1']), (40.21238596594935, 'O_c0', ['c0']), (0.0, 'O_c0 * O_c0 - O_c0', ['c0'])], 'two_body': [(0.04146902302738527, 'bdag_1 ^ b_0 + b_1 ^ bdag_0', ['1', '0']), (0.5372123437638546, 'bdag_1 ^ b_c0 + b_1 ^ bdag_c0', ['1', 'c0']), (0.5636017220540089, 'bdag_0 ^ b_c0 + b_0 ^ bdag_c0', ['0', 'c0'])]}, 'drive': {'D-0': [(2.098583892597982, 'X_0', ['0'])], 'D-1': [(2.098583892597982, 'X_1', ['1'])], 'D-c0': [(0.0, 'X_c0', ['c0'])]}, 'flux': {'F-0': [(6.283185307179586, 'O_0', ['0'])], 'F-1': [(6.283185307179586, 'O_1', ['1'])], 'F-c0': [(6.283185307179586, 'O_c0', ['c0'])]}, 'flux_params': {'0': {'flux_quanta': 0.3183098861837907, 'max_frequency': 4.5545, 'current_frequency': 4.5545}, '1': {'flux_quanta': 0.3183098861837907, 'max_frequency': 4.62381, 'current_frequency': 4.62381}, 'c0': {'flux_quanta': 0.3183098861837907, 'max_frequency': 6.4, 'current_frequency': 6.4}}, 'dissipation': {'t1': [(0.0, 'sp01_0', ['0']), (0.0, 'sp01_1', ['1']), (0.0, 'sp01_c0', ['c0'])], 't2': [(0.0, 'Z01_0', ['0']), (0.0, 'Z01_1', ['1']), (0.0, 'Z01_c0', ['c0'])]}, 'method': 'master_equation', 'readout_error': {'0': [0.01, 0.02], '1': [0.01, 0.02]}, 'platform_to_simulator_channels': {'drive-0': 'D-0', 'readout-0': 'R-0', 'flux-0': 'F-0', 'drive-1': 'D-1', 'readout-1': 'R-1', 'flux-1': 'F-1', 'drive-c0': 'D-c0', 'flux-c0': 'F-c0'}}\n" + ] + } + ], + "source": [ + "# create two-qubit one-coupler emulator platform as per any other device platform\n", + "\n", + "emulator_platform = create_platform(\"default_q01c0_flux\")\n", + "pulse_simulator = emulator_platform.instruments['pulse_simulator']\n", + "simulation_engine = pulse_simulator.simulation_engine" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "af65a393", + "metadata": {}, + "outputs": [], + "source": [ + "from qibolab.serialize import load_runcard\n", + "from qibolab.instruments.emulator.models.methods import flux_pulse_amp_from_detuning\n", + "\n", + "emu_runcard = load_runcard(emulator_path/\"default_q01c0_flux\")\n", + "emu_model_params = emu_runcard['instruments']['pulse_simulator']['model_params']\n", + "w0 = emu_model_params['max_lo_freq']['0']\n", + "w1 =emu_model_params['max_lo_freq']['1']\n", + "wc = emu_model_params['max_lo_freq']['c0']\n", + "fluxquanta1 = emu_model_params['flux_quanta']['1']\n", + "fluxquantac = emu_model_params['flux_quanta']['c0']\n", + "\n", + "q1fluxH_coeff = w0 - w1\n", + "q1flux_amp = flux_pulse_amp_from_detuning(q1fluxH_coeff, fluxquanta1, w1, w1)\n", + "\n", + "import numpy as np\n", + "\n", + "anglelist = np.linspace(-np.pi/2, np.pi/2, 200)\n", + "c_flux_amp_list = anglelist*fluxquantac" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "123ce4d0", + "metadata": {}, + "outputs": [], + "source": [ + "from qibolab.pulses import PulseSequence, FluxPulse, CouplerFluxPulse\n", + "from qibolab.pulses import Rectangular\n", + "\n", + "t = 200\n", + "\n", + "q1_flux_pulse = FluxPulse(\n", + " start=0, \n", + " duration=t,\n", + " amplitude=q1flux_amp, \n", + " shape=Rectangular(), \n", + " channel='flux-1',\n", + " qubit=1)\n", + "\n", + "c0_flux_pulse = CouplerFluxPulse(\n", + " start=0, \n", + " duration=t,\n", + " amplitude=c_flux_amp_list[-1], \n", + " shape=Rectangular(), \n", + " channel='flux-c0',\n", + " qubit=0)\n", + "\n", + "# Extract readout pulses from runcard\n", + "pulse_r0 = emulator_platform.create_qubit_readout_pulse(qubit=0, start=t)\n", + "#pulse_r1 = emulator_platform.create_qubit_readout_pulse(qubit=1, start=t)\n", + "\n", + "# Add pulses to PulseSequence\n", + "sequence = PulseSequence()\n", + "sequence.add(q1_flux_pulse)\n", + "sequence.add(c0_flux_pulse)\n", + "sequence.add(pulse_r0)\n", + "#sequence.add(pulse_r1)\n", + "\n", + "# Set specific initial state\n", + "simulation_engine.psi0 = simulation_engine.state_from_basis_vector([1,0])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "eb49d4ec", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Qibo 0.2.6|INFO|2024-09-08 17:21:25]: Minimal execution time (sweep): 264.27392000000003\n", + "INFO:qibo.config:Minimal execution time (sweep): 264.27392000000003\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Total run time: 2.21s*] Elapsed 2.21s / Remaining 00:00:00:00[*********70%**** ] Elapsed 1.33s / Remaining 00:00:00:00\n", + " Total run time: 1.62s*] Elapsed 1.62s / Remaining 00:00:00:00\n", + " Total run time: 1.63s*] Elapsed 1.63s / Remaining 00:00:00:00[*********92%********* ] Elapsed 1.53s / Remaining 00:00:00:00\n", + " Total run time: 0.86s*] Elapsed 0.86s / Remaining 00:00:00:00[*********62%** ] Elapsed 0.54s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.85s / Remaining 00:00:00:00\n", + " Total run time: 0.76s*] Elapsed 0.76s / Remaining 00:00:00:00\n", + " Total run time: 0.84s*] Elapsed 0.84s / Remaining 00:00:00:00\n", + " Total run time: 1.28s*] Elapsed 1.28s / Remaining 00:00:00:00[****** 25% ] Elapsed 0.20s / Remaining 00:00:00:00\n", + " Total run time: 0.67s*] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 0.74s*] Elapsed 0.74s / Remaining 00:00:00:00\n", + " Total run time: 0.80s*] Elapsed 0.80s / Remaining 00:00:00:00[** 7% ] Elapsed 0.10s / Remaining 00:00:00:01\n", + " Total run time: 0.69s*] Elapsed 0.69s / Remaining 00:00:00:00\n", + " Total run time: 0.91s*] Elapsed 0.91s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00\n", + " Total run time: 0.64s*] Elapsed 0.64s / Remaining 00:00:00:00\n", + " Total run time: 0.65s*] Elapsed 0.65s / Remaining 00:00:00:00[**** 17% ] Elapsed 0.09s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.42s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.92s / Remaining 00:00:00:00[*********73%***** ] Elapsed 0.48s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.58s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.59s / Remaining 00:00:00:00\n", + " Total run time: 0.57s*] Elapsed 0.57s / Remaining 00:00:00:00\n", + " Total run time: 0.62s*] Elapsed 0.62s / Remaining 00:00:00:00[*********84%******* ] Elapsed 0.52s / Remaining 00:00:00:00\n", + " Total run time: 0.51s*] Elapsed 0.51s / Remaining 00:00:00:00\n", + " Total run time: 0.56s*] Elapsed 0.56s / Remaining 00:00:00:00\n", + " Total run time: 0.55s*] Elapsed 0.51s / Remaining 00:00:00:00\n", + " Total run time: 0.51s*] Elapsed 0.51s / Remaining 00:00:00:00[** 9% ] Elapsed 0.07s / Remaining 00:00:00:00\n", + " Total run time: 0.49s*] Elapsed 0.49s / Remaining 00:00:00:00[*********83%******* ] Elapsed 0.39s / Remaining 00:00:00:00\n", + " Total run time: 0.76s*] Elapsed 0.76s / Remaining 00:00:00:00[*********42% ] Elapsed 0.23s / Remaining 00:00:00:00[*********56%* ] Elapsed 0.43s / Remaining 00:00:00:00\n", + " Total run time: 0.47s*] Elapsed 0.47s / Remaining 00:00:00:00\n", + " Total run time: 0.47s*] Elapsed 0.47s / Remaining 00:00:00:00\n", + " Total run time: 0.46s*] Elapsed 0.45s / Remaining 00:00:00:00[*********55%* ] Elapsed 0.23s / Remaining 00:00:00:00\n", + " Total run time: 0.56s*] Elapsed 0.56s / Remaining 00:00:00:00\n", + " Total run time: 0.49s*] Elapsed 0.49s / Remaining 00:00:00:00\n", + " Total run time: 0.39s*] Elapsed 0.39s / Remaining 00:00:00:00\n", + " Total run time: 0.75s*] Elapsed 0.75s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.45s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.49s / Remaining 00:00:00:00\n", + " Total run time: 0.43s*] Elapsed 0.43s / Remaining 00:00:00:00[*********86%******** ] Elapsed 0.34s / Remaining 00:00:00:00[*********87%******** ] Elapsed 0.35s / Remaining 00:00:00:00\n", + " Total run time: 0.33s*] Elapsed 0.33s / Remaining 00:00:00:00\n", + " Total run time: 0.49s*] Elapsed 0.49s / Remaining 00:00:00:00[** 10% ] Elapsed 0.03s / Remaining 00:00:00:00[*********68%**** ] Elapsed 0.33s / Remaining 00:00:00:00\n", + " Total run time: 0.36s*] Elapsed 0.36s / Remaining 00:00:00:00\n", + " Total run time: 0.50s*] Elapsed 0.50s / Remaining 00:00:00:00\n", + " Total run time: 0.67s*] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 0.46s*] Elapsed 0.46s / Remaining 00:00:00:00\n", + " Total run time: 0.51s*] Elapsed 0.51s / Remaining 00:00:00:00[ 1% ] Elapsed 0.00s / Remaining 00:00:00:00\n", + " Total run time: 0.46s*] Elapsed 0.46s / Remaining 00:00:00:00\n", + " Total run time: 0.48s*] Elapsed 0.48s / Remaining 00:00:00:00\n", + " Total run time: 0.84s*] Elapsed 0.84s / Remaining 00:00:00:00[****** 25% ] Elapsed 0.09s / Remaining 00:00:00:00\n", + " Total run time: 0.52s*] Elapsed 0.52s / Remaining 00:00:00:00\n", + " Total run time: 0.48s*] Elapsed 0.48s / Remaining 00:00:00:00[*********51% ] Elapsed 0.24s / Remaining 00:00:00:00\n", + " Total run time: 0.54s*] Elapsed 0.54s / Remaining 00:00:00:00\n", + " Total run time: 0.98s*] Elapsed 0.98s / Remaining 00:00:00:00\n", + " Total run time: 1.39s*] Elapsed 1.39s / Remaining 00:00:00:00[*********59%** ] Elapsed 0.47s / Remaining 00:00:00:00\n", + " Total run time: 0.58s*] Elapsed 0.58s / Remaining 00:00:00:00[*********49% ] Elapsed 0.25s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.85s / Remaining 00:00:00:00\n", + " Total run time: 0.60s*] Elapsed 0.60s / Remaining 00:00:00:00\n", + " Total run time: 0.61s*] Elapsed 0.61s / Remaining 00:00:00:00\n", + " Total run time: 0.56s*] Elapsed 0.56s / Remaining 00:00:00:00\n", + " Total run time: 0.57s*] Elapsed 0.57s / Remaining 00:00:00:00[* 3% ] Elapsed 0.01s / Remaining 00:00:00:00\n", + " Total run time: 0.98s*] Elapsed 0.98s / Remaining 00:00:00:00\n", + " Total run time: 0.54s*] Elapsed 0.54s / Remaining 00:00:00:00[** 8% ] Elapsed 0.08s / Remaining 00:00:00:00\n", + " Total run time: 0.56s*] Elapsed 0.56s / Remaining 00:00:00:00\n", + " Total run time: 0.66s*] Elapsed 0.66s / Remaining 00:00:00:00[*********98%***********] Elapsed 0.62s / Remaining 00:00:00:00\n", + " Total run time: 0.63s*] Elapsed 0.63s / Remaining 00:00:00:00[*********82%******* ] Elapsed 0.55s / Remaining 00:00:00:00\n", + " Total run time: 0.66s*] Elapsed 0.66s / Remaining 00:00:00:00[*********99%***********] Elapsed 0.64s / Remaining 00:00:00:00\n", + " Total run time: 0.60s*] Elapsed 0.60s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.85s / Remaining 00:00:00:00[*********50% ] Elapsed 0.36s / Remaining 00:00:00:00[*********51% ] Elapsed 0.50s / Remaining 00:00:00:00\n", + " Total run time: 0.69s*] Elapsed 0.69s / Remaining 00:00:00:00\n", + " Total run time: 0.63s*] Elapsed 0.63s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.91s / Remaining 00:00:00:00[*********95%********** ] Elapsed 0.76s / Remaining 00:00:00:00\n", + " Total run time: 1.00s*] Elapsed 1.00s / Remaining 00:00:00:00\n", + " Total run time: 0.65s*] Elapsed 0.65s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.22s / Remaining 00:00:00:00\n", + " Total run time: 0.62s*] Elapsed 0.62s / Remaining 00:00:00:00\n", + " Total run time: 0.95s*] Elapsed 0.95s / Remaining 00:00:00:00[***** 23% ] Elapsed 0.34s / Remaining 00:00:00:01\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.31s / Remaining 00:00:00:00\n", + " Total run time: 0.70s*] Elapsed 0.70s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.92s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.26s / Remaining 00:00:00:00[******* 32% ] Elapsed 0.35s / Remaining 00:00:00:00\n", + " Total run time: 0.67s*] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 0.74s*] Elapsed 0.74s / Remaining 00:00:00:00\n", + " Total run time: 1.04s*] Elapsed 1.04s / Remaining 00:00:00:00\n", + " Total run time: 0.73s*] Elapsed 0.73s / Remaining 00:00:00:00[*********86%******** ] Elapsed 0.62s / Remaining 00:00:00:00\n", + " Total run time: 0.79s*] Elapsed 0.79s / Remaining 00:00:00:00\n", + " Total run time: 1.01s*] Elapsed 1.01s / Remaining 00:00:00:00[* 4% ] Elapsed 0.06s / Remaining 00:00:00:01[* 5% ] Elapsed 0.26s / Remaining 00:00:00:04\n", + " Total run time: 0.73s*] Elapsed 0.73s / Remaining 00:00:00:00\n", + " Total run time: 0.94s*] Elapsed 0.94s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.39s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.46s / Remaining 00:00:00:00\n", + " Total run time: 0.83s*] Elapsed 0.83s / Remaining 00:00:00:00\n", + " Total run time: 0.78s*] Elapsed 0.78s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.42s / Remaining 00:00:00:00\n", + " Total run time: 1.76s*] Elapsed 1.76s / Remaining 00:00:00:00[****** 27% ] Elapsed 0.31s / Remaining 00:00:00:00[*********42% ] Elapsed 0.87s / Remaining 00:00:00:01[*********93%********* ] Elapsed 1.64s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.85s / Remaining 00:00:00:00[*********91%********* ] Elapsed 0.79s / Remaining 00:00:00:00\n", + " Total run time: 1.69s*] Elapsed 1.69s / Remaining 00:00:00:00[******** 33% ] Elapsed 0.27s / Remaining 00:00:00:00\n", + " Total run time: 0.89s*] Elapsed 0.89s / Remaining 00:00:00:00\n", + " Total run time: 1.30s*] Elapsed 1.30s / Remaining 00:00:00:00[*** 14% ] Elapsed 0.21s / Remaining 00:00:00:01[*********74%***** ] Elapsed 0.72s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.77s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.88s / Remaining 00:00:00:00[*********74%***** ] Elapsed 0.90s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00[*********45% ] Elapsed 0.36s / Remaining 00:00:00:00\n", + " Total run time: 0.74s*] Elapsed 0.74s / Remaining 00:00:00:00\n", + " Total run time: 1.11s*] Elapsed 1.11s / Remaining 00:00:00:00[***** 22% ] Elapsed 0.25s / Remaining 00:00:00:00[***** 22% ] Elapsed 0.29s / Remaining 00:00:00:01[***** 23% ] Elapsed 0.36s / Remaining 00:00:00:01[*********75%***** ] Elapsed 0.89s / Remaining 00:00:00:00[*********79%****** ] Elapsed 0.95s / Remaining 00:00:00:00\n", + " Total run time: 1.13s*] Elapsed 1.13s / Remaining 00:00:00:00\n", + " Total run time: 1.08s*] Elapsed 1.08s / Remaining 00:00:00:00[*********47% ] Elapsed 0.32s / Remaining 00:00:00:00[*********49% ] Elapsed 0.47s / Remaining 00:00:00:00[*********50% ] Elapsed 0.54s / Remaining 00:00:00:00\n", + " Total run time: 0.67s*] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 1.36s*] Elapsed 1.36s / Remaining 00:00:00:00[*********52% ] Elapsed 0.51s / Remaining 00:00:00:00[*********52% ] Elapsed 0.55s / Remaining 00:00:00:00[*********52% ] Elapsed 0.57s / Remaining 00:00:00:00[*********92%********* ] Elapsed 1.19s / Remaining 00:00:00:00\n", + " Total run time: 0.93s*] Elapsed 0.93s / Remaining 00:00:00:00[*********93%********* ] Elapsed 0.88s / Remaining 00:00:00:00\n", + " Total run time: 1.10s*] Elapsed 1.10s / Remaining 00:00:00:00[*********75%***** ] Elapsed 0.55s / Remaining 00:00:00:00[*********77%****** ] Elapsed 0.75s / Remaining 00:00:00:00[*********89%******** ] Elapsed 1.01s / Remaining 00:00:00:00\n", + " Total run time: 0.73s*] Elapsed 0.73s / Remaining 00:00:00:00\n", + " Total run time: 1.03s*] Elapsed 1.03s / Remaining 00:00:00:00[*********69%**** ] Elapsed 0.53s / Remaining 00:00:00:00[*********69%**** ] Elapsed 0.61s / Remaining 00:00:00:00\n", + " Total run time: 0.81s*] Elapsed 0.81s / Remaining 00:00:00:00[*********49% ] Elapsed 0.41s / Remaining 00:00:00:00\n", + " Total run time: 1.06s*] Elapsed 1.06s / Remaining 00:00:00:00[*********76%***** ] Elapsed 0.61s / Remaining 00:00:00:00\n", + " Total run time: 0.70s*] Elapsed 0.70s / Remaining 00:00:00:00\n", + " Total run time: 0.98s*] Elapsed 0.98s / Remaining 00:00:00:00[*********64%*** ] Elapsed 0.43s / Remaining 00:00:00:00[*********83%******* ] Elapsed 0.65s / Remaining 00:00:00:00[*********83%******* ] Elapsed 0.70s / Remaining 00:00:00:00[*********83%******* ] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 0.72s*] Elapsed 0.72s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.92s / Remaining 00:00:00:00\n", + " Total run time: 0.82s*] Elapsed 0.82s / Remaining 00:00:00:00[*********64%*** ] Elapsed 0.53s / Remaining 00:00:00:00\n", + " Total run time: 1.12s*] Elapsed 1.12s / Remaining 00:00:00:00[*** 13% ] Elapsed 0.10s / Remaining 00:00:00:00[******* 32% ] Elapsed 0.30s / Remaining 00:00:00:00[******* 32% ] Elapsed 0.35s / Remaining 00:00:00:00[******* 32% ] Elapsed 0.37s / Remaining 00:00:00:00\n", + " Total run time: 0.65s*] Elapsed 0.65s / Remaining 00:00:00:00\n", + " Total run time: 1.45s*] Elapsed 1.45s / Remaining 00:00:00:00[*********85%******** ] Elapsed 1.26s / Remaining 00:00:00:00[*********93%********* ] Elapsed 1.40s / Remaining 00:00:00:00\n", + " Total run time: 0.89s*] Elapsed 0.89s / Remaining 00:00:00:00\n", + " Total run time: 0.68s*] Elapsed 0.68s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00\n", + " Total run time: 0.81s*] Elapsed 0.81s / Remaining 00:00:00:00[******** 35% ] Elapsed 0.25s / Remaining 00:00:00:00\n", + " Total run time: 0.95s*] Elapsed 0.95s / Remaining 00:00:00:00\n", + " Total run time: 0.93s*] Elapsed 0.93s / Remaining 00:00:00:00\n", + " Total run time: 0.79s*] Elapsed 0.79s / Remaining 00:00:00:00[*********93%********* ] Elapsed 0.70s / Remaining 00:00:00:00\n", + " Total run time: 0.80s*] Elapsed 0.80s / Remaining 00:00:00:00\n", + " Total run time: 0.78s*] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 0.72s*] Elapsed 0.72s / Remaining 00:00:00:00[*********72%***** ] Elapsed 0.53s / Remaining 00:00:00:00\n", + " Total run time: 1.62s*] Elapsed 1.62s / Remaining 00:00:00:00[*********95%********** ] Elapsed 1.55s / Remaining 00:00:00:00\n", + " Total run time: 0.91s*] Elapsed 0.91s / Remaining 00:00:00:00[*********81%******* ] Elapsed 0.65s / Remaining 00:00:00:00[*********92%********* ] Elapsed 0.85s / Remaining 00:00:00:00\n", + " Total run time: 0.75s*] Elapsed 0.75s / Remaining 00:00:00:00\n", + " Total run time: 0.83s*] Elapsed 0.83s / Remaining 00:00:00:00[*********49% ] Elapsed 0.44s / Remaining 00:00:00:00\n", + " Total run time: 0.74s*] Elapsed 0.74s / Remaining 00:00:00:00\n", + " Total run time: 1.93s*] Elapsed 1.93s / Remaining 00:00:00:00\n", + " Total run time: 3.38s*] Elapsed 3.38s / Remaining 00:00:00:00[****** 26% ] Elapsed 0.34s / Remaining 00:00:00:00[*********55%* ] Elapsed 1.72s / Remaining 00:00:00:01[*********55%* ] Elapsed 1.73s / Remaining 00:00:00:01[*********62%** ] Elapsed 1.91s / Remaining 00:00:00:01[*********72%***** ] Elapsed 2.46s / Remaining 00:00:00:00[*********78%****** ] Elapsed 2.76s / Remaining 00:00:00:00\n", + " Total run time: 4.02s*] Elapsed 4.02s / Remaining 00:00:00:00[*********66%*** ] Elapsed 1.64s / Remaining 00:00:00:00[*********68%**** ] Elapsed 1.87s / Remaining 00:00:00:00\n", + " Total run time: 0.94s*] Elapsed 0.94s / Remaining 00:00:00:00[*********92%********* ] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 0.75s*] Elapsed 0.75s / Remaining 00:00:00:00\n", + " Total run time: 0.80s*] Elapsed 0.80s / Remaining 00:00:00:00[***** 20% ] Elapsed 0.13s / Remaining 00:00:00:00\n", + " Total run time: 0.67s*] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 0.62s*] Elapsed 0.62s / Remaining 00:00:00:00\n", + " Total run time: 0.93s*] Elapsed 0.92s / Remaining 00:00:00:00\n", + " Total run time: 2.74s*] Elapsed 2.74s / Remaining 00:00:00:00[***** 21% ] Elapsed 0.65s / Remaining 00:00:00:02[*********44% ] Elapsed 1.33s / Remaining 00:00:00:01\n", + " Total run time: 1.61s*] Elapsed 1.61s / Remaining 00:00:00:00[ 1% ] Elapsed 0.03s / Remaining 00:00:00:02\n", + " Total run time: 0.99s*] Elapsed 0.99s / Remaining 00:00:00:00[*********93%********* ] Elapsed 0.75s / Remaining 00:00:00:00[*********94%********** ] Elapsed 0.80s / Remaining 00:00:00:00\n", + " Total run time: 0.78s*] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 1.04s*] Elapsed 1.04s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.31s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.33s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.38s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.42s / Remaining 00:00:00:00\n", + " Total run time: 1.03s*] Elapsed 1.03s / Remaining 00:00:00:00[*** 11% ] Elapsed 0.10s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00\n", + " Total run time: 0.96s*] Elapsed 0.96s / Remaining 00:00:00:00[****** 25% ] Elapsed 0.24s / Remaining 00:00:00:00[****** 25% ] Elapsed 0.26s / Remaining 00:00:00:00\n", + " Total run time: 0.93s*] Elapsed 0.93s / Remaining 00:00:00:00[*********73%***** ] Elapsed 0.66s / Remaining 00:00:00:00\n", + " Total run time: 0.66s*] Elapsed 0.66s / Remaining 00:00:00:00\n", + " Total run time: 0.99s*] Elapsed 0.99s / Remaining 00:00:00:00[*** 15% ] Elapsed 0.12s / Remaining 00:00:00:00\n", + " Total run time: 0.94s*] Elapsed 0.94s / Remaining 00:00:00:00[*********60%** ] Elapsed 0.40s / Remaining 00:00:00:00[*********60%** ] Elapsed 0.48s / Remaining 00:00:00:00[*********60%** ] Elapsed 0.51s / Remaining 00:00:00:00\n", + " Total run time: 0.71s*] Elapsed 0.71s / Remaining 00:00:00:00[*********64%*** ] Elapsed 0.40s / Remaining 00:00:00:00[*********79%****** ] Elapsed 0.49s / Remaining 00:00:00:00\n", + " Total run time: 0.66s*] Elapsed 0.66s / Remaining 00:00:00:00[*********67%*** ] Elapsed 0.44s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.92s / Remaining 00:00:00:00\n", + " Total run time: 1.08s*] Elapsed 1.08s / Remaining 00:00:00:00[*** 13% ] Elapsed 0.14s / Remaining 00:00:00:00[*********66%*** ] Elapsed 0.57s / Remaining 00:00:00:00[*********66%*** ] Elapsed 0.59s / Remaining 00:00:00:00[*********73%***** ] Elapsed 0.80s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.85s / Remaining 00:00:00:00[*********66%*** ] Elapsed 0.49s / Remaining 00:00:00:00\n", + " Total run time: 0.66s*] Elapsed 0.66s / Remaining 00:00:00:00\n", + " Total run time: 1.03s*] Elapsed 1.03s / Remaining 00:00:00:00\n", + " Total run time: 1.66s*] Elapsed 1.66s / Remaining 00:00:00:00[*********50% ] Elapsed 0.33s / Remaining 00:00:00:00[*********51% ] Elapsed 0.39s / Remaining 00:00:00:00\n", + " Total run time: 1.00s*] Elapsed 1.00s / Remaining 00:00:00:00[*********94%********** ] Elapsed 0.62s / Remaining 00:00:00:00[*********94%********** ] Elapsed 0.67s / Remaining 00:00:00:00\n", + " Total run time: 0.63s*] Elapsed 0.63s / Remaining 00:00:00:00\n", + " Total run time: 0.89s*] Elapsed 0.89s / Remaining 00:00:00:00[*********46% ] Elapsed 0.38s / Remaining 00:00:00:00\n", + " Total run time: 0.86s*] Elapsed 0.86s / Remaining 00:00:00:00[*********59%** ] Elapsed 0.33s / Remaining 00:00:00:00[*********82%******* ] Elapsed 0.50s / Remaining 00:00:00:00\n", + " Total run time: 0.60s*] Elapsed 0.60s / Remaining 00:00:00:00\n", + " Total run time: 1.02s*] Elapsed 1.02s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.21s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.23s / Remaining 00:00:00:00[*********87%******** ] Elapsed 0.86s / Remaining 00:00:00:00\n", + " Total run time: 0.77s*] Elapsed 0.77s / Remaining 00:00:00:00[*********53% ] Elapsed 0.22s / Remaining 00:00:00:00\n", + " Total run time: 0.57s*] Elapsed 0.57s / Remaining 00:00:00:00\n", + " Total run time: 0.60s*] Elapsed 0.60s / Remaining 00:00:00:00\n", + " Total run time: 0.77s*] Elapsed 0.77s / Remaining 00:00:00:00[*** 15% ] Elapsed 0.05s / Remaining 00:00:00:00\n", + " Total run time: 0.81s*] Elapsed 0.81s / Remaining 00:00:00:00[*********67%*** ] Elapsed 0.35s / Remaining 00:00:00:00[*********68%**** ] Elapsed 0.40s / Remaining 00:00:00:00[*********68%**** ] Elapsed 0.49s / Remaining 00:00:00:00[*********70%**** ] Elapsed 0.52s / Remaining 00:00:00:00\n", + " Total run time: 0.85s*] Elapsed 0.84s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.43s / Remaining 00:00:00:00[*********98%***********] Elapsed 0.68s / Remaining 00:00:00:00[*********98%***********] Elapsed 0.73s / Remaining 00:00:00:00\n", + " Total run time: 0.62s*] Elapsed 0.62s / Remaining 00:00:00:00[*********51% ] Elapsed 0.36s / Remaining 00:00:00:00\n", + " Total run time: 1.06s*] Elapsed 1.06s / Remaining 00:00:00:00[****** 28% ] Elapsed 0.23s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.40s / Remaining 00:00:00:00\n", + " Total run time: 0.77s*] Elapsed 0.77s / Remaining 00:00:00:00[*********64%*** ] Elapsed 0.36s / Remaining 00:00:00:00[*********65%*** ] Elapsed 0.41s / Remaining 00:00:00:00\n", + " Total run time: 0.52s*] Elapsed 0.52s / Remaining 00:00:00:00\n", + " Total run time: 0.81s*] Elapsed 0.81s / Remaining 00:00:00:00\n", + " Total run time: 0.94s*] Elapsed 0.94s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.23s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.24s / Remaining 00:00:00:00[******* 31% ] Elapsed 0.36s / Remaining 00:00:00:00[******* 32% ] Elapsed 0.40s / Remaining 00:00:00:00\n", + " Total run time: 0.99s*] Elapsed 0.99s / Remaining 00:00:00:00[****** 27% ] Elapsed 0.20s / Remaining 00:00:00:00[*********57%* ] Elapsed 0.39s / Remaining 00:00:00:00[*********57%* ] Elapsed 0.44s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.45s / Remaining 00:00:00:00[*********58%* ] Elapsed 0.46s / Remaining 00:00:00:00\n", + " Total run time: 0.92s*] Elapsed 0.92s / Remaining 00:00:00:00[*********80%****** ] Elapsed 0.63s / Remaining 00:00:00:00[*********81%******* ] Elapsed 0.69s / Remaining 00:00:00:00[*********81%******* ] Elapsed 0.73s / Remaining 00:00:00:00\n", + " Total run time: 0.90s*] Elapsed 0.90s / Remaining 00:00:00:00[*********99%***********] Elapsed 0.78s / Remaining 00:00:00:00\n", + " Total run time: 0.63s*] Elapsed 0.63s / Remaining 00:00:00:00\n", + " Total run time: 0.97s*] Elapsed 0.97s / Remaining 00:00:00:00[***** 21% ] Elapsed 0.27s / Remaining 00:00:00:01\n", + " Total run time: 1.03s*] Elapsed 1.03s / Remaining 00:00:00:00[****** 27% ] Elapsed 0.34s / Remaining 00:00:00:00\n", + " Total run time: 1.02s*] Elapsed 1.02s / Remaining 00:00:00:00[*********49% ] Elapsed 0.38s / Remaining 00:00:00:00[*********49% ] Elapsed 0.43s / Remaining 00:00:00:00[*********49% ] Elapsed 0.46s / Remaining 00:00:00:00\n", + " Total run time: 1.14s*] Elapsed 1.14s / Remaining 00:00:00:00[*********72%***** ] Elapsed 0.65s / Remaining 00:00:00:00[*********73%***** ] Elapsed 0.69s / Remaining 00:00:00:00[*********73%***** ] Elapsed 0.75s / Remaining 00:00:00:00[*********88%******** ] Elapsed 1.05s / Remaining 00:00:00:00\n", + " Total run time: 1.01s*] Elapsed 1.01s / Remaining 00:00:00:00[*********86%******** ] Elapsed 0.74s / Remaining 00:00:00:00[*********87%******** ] Elapsed 0.79s / Remaining 00:00:00:00\n", + " Total run time: 1.94s*] Elapsed 1.94s / Remaining 00:00:00:00[*********50% ] Elapsed 0.44s / Remaining 00:00:00:00[*********57%* ] Elapsed 0.62s / Remaining 00:00:00:00[*********71%**** ] Elapsed 0.93s / Remaining 00:00:00:00\n", + " Total run time: 0.93s*] Elapsed 0.92s / Remaining 00:00:00:00[********100%***********] Elapsed 0.91s / Remaining 00:00:00:00\n", + " Total run time: 1.08s*] Elapsed 1.08s / Remaining 00:00:00:00\n", + " Total run time: 1.37s*] Elapsed 1.37s / Remaining 00:00:00:00[* 4% ] Elapsed 0.09s / Remaining 00:00:00:02\n", + " Total run time: 1.45s*] Elapsed 1.45s / Remaining 00:00:00:00[*** 11% ] Elapsed 0.12s / Remaining 00:00:00:00[*** 13% ] Elapsed 0.28s / Remaining 00:00:00:01[*** 13% ] Elapsed 0.31s / Remaining 00:00:00:02[*** 14% ] Elapsed 0.41s / Remaining 00:00:00:02\n", + " Total run time: 1.44s*] Elapsed 1.44s / Remaining 00:00:00:00[** 7% ] Elapsed 0.14s / Remaining 00:00:00:01[** 8% ] Elapsed 0.25s / Remaining 00:00:00:02[*********92%********* ] Elapsed 1.33s / Remaining 00:00:00:00\n", + " Total run time: 1.42s*] Elapsed 1.42s / Remaining 00:00:00:00[*** 11% ] Elapsed 0.32s / Remaining 00:00:00:02\n", + " Total run time: 1.62s*] Elapsed 1.62s / Remaining 00:00:00:00[** 10% ] Elapsed 0.35s / Remaining 00:00:00:03[** 10% ] Elapsed 0.40s / Remaining 00:00:00:03[*** 12% ] Elapsed 0.47s / Remaining 00:00:00:03[*********76%***** ] Elapsed 1.19s / Remaining 00:00:00:00\n", + " Total run time: 1.19s*] Elapsed 1.19s / Remaining 00:00:00:00[*********77%****** ] Elapsed 0.71s / Remaining 00:00:00:00[*********77%****** ] Elapsed 0.79s / Remaining 00:00:00:00\n", + " Total run time: 2.10s*] Elapsed 2.10s / Remaining 00:00:00:00[*********49% ] Elapsed 0.47s / Remaining 00:00:00:00[*********52% ] Elapsed 0.54s / Remaining 00:00:00:00[*********76%***** ] Elapsed 0.84s / Remaining 00:00:00:00[*********76%***** ] Elapsed 0.90s / Remaining 00:00:00:00\n", + " Total run time: 1.44s*] Elapsed 1.44s / Remaining 00:00:00:00[*********62%** ] Elapsed 0.86s / Remaining 00:00:00:00\n", + " Total run time: 1.27s*] Elapsed 1.27s / Remaining 00:00:00:00[*********45% ] Elapsed 0.50s / Remaining 00:00:00:00\n", + " Total run time: 1.32s*] Elapsed 1.32s / Remaining 00:00:00:00\n", + " Total run time: 1.44s*] Elapsed 1.44s / Remaining 00:00:00:00\n", + " Total run time: 1.59s*] Elapsed 1.59s / Remaining 00:00:00:00[******** 35% ] Elapsed 0.38s / Remaining 00:00:00:00[******** 35% ] Elapsed 0.39s / Remaining 00:00:00:00[******** 36% ] Elapsed 0.40s / Remaining 00:00:00:00\n", + " Total run time: 1.34s*] Elapsed 1.34s / Remaining 00:00:00:00[*********87%******** ] Elapsed 1.08s / Remaining 00:00:00:00\n", + " Total run time: 1.30s*] Elapsed 1.30s / Remaining 00:00:00:00[*********46% ] Elapsed 0.55s / Remaining 00:00:00:00\n", + " Total run time: 1.55s*] Elapsed 1.55s / Remaining 00:00:00:00[****** 28% ] Elapsed 0.36s / Remaining 00:00:00:00[****** 28% ] Elapsed 0.39s / Remaining 00:00:00:01\n", + " Total run time: 1.78s*] Elapsed 1.78s / Remaining 00:00:00:00[*********41% ] Elapsed 0.79s / Remaining 00:00:00:01[*********97%********** ] Elapsed 1.56s / Remaining 00:00:00:00[*********97%********** ] Elapsed 1.68s / Remaining 00:00:00:00\n", + " Total run time: 2.03s*] Elapsed 2.03s / Remaining 00:00:00:00[*********65%*** ] Elapsed 1.01s / Remaining 00:00:00:00[*********78%****** ] Elapsed 1.23s / Remaining 00:00:00:00[*********83%******* ] Elapsed 1.38s / Remaining 00:00:00:00[*********83%******* ] Elapsed 1.53s / Remaining 00:00:00:00\n" + ] + } + ], + "source": [ + "from qibolab.sweeper import Sweeper, Parameter\n", + "\n", + "parameter = Parameter.amplitude\n", + "parameter_range = c_flux_amp_list\n", + "sweeper = Sweeper(parameter, parameter_range, [c0_flux_pulse])\n", + "\n", + "sweep_results = emulator_platform.sweep(sequence, ExecutionParameters(), sweeper)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "13a6fc52", + "metadata": {}, + "outputs": [], + "source": [ + "from qibolab.instruments.emulator.pulse_simulator import make_array_index_list\n", + "\n", + "final_states_array = sweep_results['simulation']['output_states']\n", + "shape = final_states_array.shape\n", + "index_list = make_array_index_list(shape)\n", + "overlaps = {}\n", + "for index in index_list:\n", + " pulse_simulator.merge_sweep_results(overlaps, simulation_engine.compute_overlaps(final_states_array[tuple(index)]))\n", + "\n", + "new_shape = [shape[0],len(final_states_array[0])]\n", + "res_array = -np.array(overlaps['[1, 0, 0]']).reshape(*new_shape) + np.array(overlaps['[0, 1, 0]']).reshape(*new_shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "d433bf8e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib.colors import BoundaryNorm\n", + "from matplotlib.ticker import MaxNLocator\n", + "\n", + "plt.figure()\n", + "levels = MaxNLocator(nbins=50).tick_values(-1, 1)\n", + "cmap = plt.get_cmap('inferno_r')\n", + "norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)\n", + "im = plt.imshow(res_array, cmap, norm, extent=(0, t, anglelist[-1]/np.pi, anglelist[0]/np.pi), aspect=\"auto\", origin=\"upper\", interpolation='None')\n", + "clb = plt.colorbar()\n", + "clb.ax.set_title(r\"$\\langle\\sigma_z\\rangle$\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ed868b1f", + "metadata": {}, + "source": [ + "## --- Version information for major packages used in the current Qibolab emulator example ---" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "f78416d6-33a7-4350-86c1-c64fb3fe80ab", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext watermark" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "38340640-9e0b-40b3-9952-d4cabef2e277", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python implementation: CPython\n", + "Python version : 3.9.18\n", + "IPython version : 8.15.0\n", + "\n", + "qibolab : 0.1.9\n", + "qibo : 0.2.6\n", + "qutip : 4.7.5\n", + "matplotlib: 3.8.0\n", + "numpy : 1.26.4\n", + "scipy : 1.12.0\n", + "\n" + ] + } + ], + "source": [ + "%watermark -v -p qibolab,qibo,qutip,matplotlib,numpy,scipy" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/qibolab/instruments/emulator/engines/qutip_engine.py b/src/qibolab/instruments/emulator/engines/qutip_engine.py index f290d43e26..9c98f240a4 100644 --- a/src/qibolab/instruments/emulator/engines/qutip_engine.py +++ b/src/qibolab/instruments/emulator/engines/qutip_engine.py @@ -176,6 +176,16 @@ def update(self): channel_op += self.make_operator(op_instruction) self.operators.update({channel_name: channel_op}) + ### flux ### + try: + for channel_name, op_instruction_list in self.model_config["flux"].items(): + channel_op = Qobj(dims=[self.nlevels_HS, self.nlevels_HS]) + for op_instruction in op_instruction_list: + channel_op += self.make_operator(op_instruction) + self.operators.update({channel_name: channel_op}) + except: + pass + ### dissipation ### for op_instruction in self.model_config["dissipation"]["t1"]: self.static_dissipators += [self.make_operator(op_instruction)] @@ -397,16 +407,17 @@ def state_from_basis_vector( ) basis_list = self.op_dict["basis"] - fullstate = Qobj(1) - combined_basis_vector = cbasis_vector + basis_vector combined_list = self.couplers_list + self.qubits_list + for ind, coeff in enumerate(combined_basis_vector): qind = combined_list[ind] - fullstate = tensor( - basis_list[qind][coeff], fullstate - ) # constructs little endian HS, qubits first then couplers, as per evolution - + if ind == 0: + fullstate = basis_list[qind][coeff] + else: + fullstate = tensor( + basis_list[qind][coeff], fullstate + ) # constructs little endian HS, qubits first then couplers, as per evolution return fullstate def compute_overlaps( diff --git a/src/qibolab/instruments/emulator/models/general_coupler_model.py b/src/qibolab/instruments/emulator/models/general_coupler_model.py new file mode 100644 index 0000000000..4e5158cbf6 --- /dev/null +++ b/src/qibolab/instruments/emulator/models/general_coupler_model.py @@ -0,0 +1,413 @@ +from typing import List, Optional, Union + +import numpy as np + +from qibolab.instruments.emulator.models.methods import ( + default_platform_to_simulator_channels, + default_platform_to_simulator_qubits, +) + +GHZ = 1e9 + + +# model template for 0-1 system +def generate_default_params(): + # all time in ns and frequency in GHz + """Returns template model parameters dictionary.""" + model_params = { + "model_name": "general_coupler_model", + "topology": [[0, 1]], + "nqubits": 2, + "ncouplers": 1, + "qubits_list": ["0", "1"], + "couplers_list": ["c0"], + "nlevels_q": [2, 2], + "nlevels_c": [2], + "readout_error": { + # same key datatype as per runcard + 0: [0.01, 0.02], + 1: [0.01, 0.02], + }, + "drive_freq": { + "0": 5.0, + "1": 5.1, + "c0": 6.4, + }, + "T1": { + "0": 0.0, + "1": 0.0, + "c0": 0.0, + }, + "T2": { + "0": 0.0, + "1": 0.0, + "c0": 0.0, + }, + "max_lo_freq": { + "0": 5.0, + "1": 5.1, + "c0": 6.4, + }, + "flux_quanta": { + "0": 0.3183098861837907, + "1": 0.3183098861837907, + "c0": 0.3183098861837907, + }, + "rabi_freq": { + "0": 0.2, + "1": 0.2, + "c0": 0.0, + }, + "anharmonicity": { + "0": -0.20, + "1": -0.21, + "c0": 0.0, + }, + "coupling_strength": { + "1_0": -0.005, + "1_c0": 0.1, + "0_c0": 0.1, + }, + } + return model_params + + +# to add relabel_qubits +""" +emulator_qubits_list = [] + for i,q in enumerate(qubits_list): + if relabel_qubits: + i = str(i) + else: + i = q + emulator_qubits_list.append(int(i)) + """ + + +def get_model_params( + platform_data_dict: dict, + nlevels_q: Union[int, List[int]], + nlevels_c: Union[int, List[int]], + relabel_qubits: bool = False, +) -> dict: + """Generates the model paramters for the general coupler model. + + Args: + platform_data_dict(dict): Dictionary containing the device data extracted from a device platform. + nlevels_q(int, list): Number of levels for each qubit. If int, the same value gets assigned to all qubits. + nlevels_c(int, list): Number of levels for each coupler. If int, the same value gets assigned to all couplers. + relabel_qubits(bool): Flag to relabel qubits to ascending integers. False by default. + + Returns: + dict: Model parameters dictionary with all frequencies in GHz and times in ns that is required as an input to emulator runcards. + + Raises: + ValueError: If length of nlevels_q does not match number of qubits when nlevels_q is a list. + """ + model_params_dict = {"model_name": "general_coupler_model"} + model_params_dict |= {"topology": platform_data_dict["topology"]} + qubits_list = platform_data_dict["qubits_list"] + couplers_list = platform_data_dict["couplers_list"] + characterization_dict = platform_data_dict["characterization"] + qubit_characterization_dict = characterization_dict["qubits"] + + drive_freq_dict = {} + T1_dict = {} + T2_dict = {} + max_lo_freq_dict = {} + flux_quanta_dict = {} + rabi_freq_dict = {} + anharmonicity_dict = {} + readout_error_dict = {} + + relabelled_qubits_list = [] + for i, q in enumerate(qubits_list): + if relabel_qubits: + i = str(i) + else: + i = str(q) + relabelled_qubits_list.append(i) + + af = qubit_characterization_dict[q]["assignment_fidelity"] + if af == 0: + readout_error_dict |= {i: [0.0, 0.0]} + else: + if type(af) is float: + p0m1 = p1m0 = 1 - af + else: + p0m1, p1m0 = 1 - np.array(af) + readout_error_dict |= {i: [p0m1, p1m0]} + drive_freq_dict |= {i: qubit_characterization_dict[q]["drive_frequency"] / GHZ} + T1_dict |= {i: qubit_characterization_dict[q]["T1"]} + T2_dict |= {i: qubit_characterization_dict[q]["T2"]} + max_lo_freq_dict |= {i: qubit_characterization_dict[q]["max_lo_freq"] / GHZ} + rabi_freq_dict |= {i: qubit_characterization_dict[q]["rabi_frequency"] / GHZ} + anharmonicity_dict |= {i: qubit_characterization_dict[q]["anharmonicity"] / GHZ} + # flux_quanta_dict |= {i: 0.1} # to be updated + + """ + # TODO + for c in couplers_list: + drive_freq_dict |= {str(c): qubit_characterization_dict[c]['drive_frequency']/GHZ} + T1_dict |= {str(c): qubit_characterization_dict[c]['T1']} + T2_dict |= {str(c): qubit_characterization_dict[c]['T2']} + max_lo_freq_dict |= {str(c): qubit_characterization_dict[c]['max_lo_freq']/GHZ} + rabi_freq_dict |= {str(c): qubit_characterization_dict[c]['rabi_frequency']/GHZ} + anharmonicity_dict |= {str(c): qubit_characterization_dict[c]['anharmonicity']/GHZ} + #flux_quanta_dict |= {str(c): 0.1} # to be updated + """ + + model_params_dict |= {"nqubits": len(qubits_list)} + model_params_dict |= {"ncouplers": len(couplers_list)} + model_params_dict |= {"qubits_list": relabelled_qubits_list} + model_params_dict |= {"couplers_list": [str(c) for c in couplers_list]} + + if type(nlevels_q) == int: + model_params_dict |= {"nlevels_q": [nlevels_q for q in qubits_list]} + elif type(nlevels_q) == list: + if len(nlevels_q) == len(qubits_list): + model_params_dict |= {"nlevels_q": nlevels_q} + else: + raise ValueError( + "Length of nlevels_q does not match number of qubits", len(qubits_list) + ) + if type(nlevels_c) == int: + model_params_dict |= {"nlevels_c": [nlevels_c for c in couplers_list]} + elif type(nlevels_c) == list: + if len(nlevels_c) == len(couplers_list): + model_params_dict |= {"nlevels_c": nlevels_c} + else: + raise ValueError( + "Length of nlevels_c does not match number of couplers", + len(couplers_list), + ) + + model_params_dict |= {"readout_error": readout_error_dict} + model_params_dict |= {"drive_freq": drive_freq_dict} + model_params_dict |= {"T1": T1_dict} + model_params_dict |= {"T2": T2_dict} + model_params_dict |= {"max_lo_freq": max_lo_freq_dict} + model_params_dict |= {"flux_quanta": flux_quanta_dict} + model_params_dict |= {"rabi_freq": rabi_freq_dict} + model_params_dict |= {"anharmonicity": anharmonicity_dict} + model_params_dict |= {"coupling_strength": {}} + + return model_params_dict + + +def generate_model_config( + model_params: dict = None, + nlevels_q: Optional[list] = None, + nlevels_c: Optional[list] = None, + topology: Optional[list] = None, +) -> dict: + """Generates the model configuration dictionary. + + Args: + model_params(dict): Dictionary containing the model parameters. + nlevels_q(list, optional): List of the dimensions of each qubit to be simulated, in big endian order. Defaults to None, in which case it will use the values of model_params['nlevels_q'] will be used. + nlevels_c(list, optional): List of the dimensions of each coupler to be simulated, in big endian order. Defaults to None, in which case it will use the values of model_params['nlevels_c'] will be used. + topology(list, optional): List containing all pairs of qubit indices that are nearest neighbours. Defaults to none, in which case the value of model_params['topology'] will be used. + + Returns: + dict: Model configuration dictionary with all frequencies in GHz and times in ns. + """ + if model_params is None: + model_params = generate_default_params() + + # allows for user to overwrite topology in model_params for quick test + if topology is None: + topology = model_params["topology"] + + model_name = model_params["model_name"] + readout_error = model_params["readout_error"] + # qubits_list = model_params["qubits_list"] + device_qubits_list = model_params["qubits_list"] + # couplers_list = model_params["couplers_list"] + device_couplers_list = model_params["couplers_list"] + + platform_to_simulator_qubits = default_platform_to_simulator_qubits( + device_qubits_list, device_couplers_list + ) + qubits_list = [platform_to_simulator_qubits[q] for q in device_qubits_list] + couplers_list = [platform_to_simulator_qubits[c] for c in device_couplers_list] + + if nlevels_q is None: + nlevels_q = model_params["nlevels_q"] + if nlevels_c is None: + nlevels_c = model_params["nlevels_c"] + + drift_hamiltonian_dict = {"one_body": [], "two_body": []} + drive_hamiltonian_dict = {} + flux_hamiltonian_dict = {} + flux_params_dict = {} + + dissipation_dict = {"t1": [], "t2": []} + + # generate instructions + # single qubit terms + # for i, q in enumerate(qubits_list): + for q in device_qubits_list: + ind = platform_to_simulator_qubits[q] + # drift Hamiltonian terms (constant in time) + drift_hamiltonian_dict["one_body"].append( + # (2 * np.pi * model_params["drive_freq"][q], f"O_{q}", [q]) + (2 * np.pi * model_params["drive_freq"][q], f"O_{ind}", [ind]) + ) + drift_hamiltonian_dict["one_body"].append( + ( + np.pi * model_params["anharmonicity"][q], + # f"O_{q} * O_{q} - O_{q}", + f"O_{ind} * O_{ind} - O_{ind}", + # [q], + [ind], + ) + ) + + # drive Hamiltonian terms (amplitude determined by pulse sequence) + # drive_hamiltonian_dict.update({f"D-{qubits_list[i]}": []}) + drive_hamiltonian_dict.update({f"D-{ind}": []}) + # drive_hamiltonian_dict[f"D-{qubits_list[i]}"].append( + # (2 * np.pi * model_params["rabi_freq"][q], f"X_{q}", [q]) + # ) + drive_hamiltonian_dict[f"D-{ind}"].append( + (2 * np.pi * model_params["rabi_freq"][q], f"X_{ind}", [ind]) + ) + + # flux Hamiltonian terms (amplitude determined by processed pulse sequence) + # flux_hamiltonian_dict.update({f"F-{qubits_list[i]}": []}) + flux_hamiltonian_dict.update({f"F-{ind}": []}) + # flux_hamiltonian_dict[f"F-{qubits_list[i]}"].append((2 * np.pi, f"O_{q}", [q])) + flux_hamiltonian_dict[f"F-{ind}"].append((2 * np.pi, f"O_{ind}", [ind])) + + # flux detuning parameters: + try: + flux_params_dict |= { + # q: { + ind: { + "flux_quanta": model_params["flux_quanta"][q], + "max_frequency": model_params["max_lo_freq"][q], + "current_frequency": model_params["drive_freq"][q], + } + } + except: + pass + + # dissipation terms (one qubit, constant in time) + t1 = model_params["T1"][q] + g1 = 0 if t1 == 0 else 1.0 / t1 # * 2 * np.pi + t2 = model_params["T2"][q] + g2 = 0 if t2 == 0 else 1.0 / t2 # * 2 * np.pi + + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{q}", [q])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{q}", [q])) + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{ind}", [ind])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{ind}", [ind])) + dissipation_dict["t1"].append((np.sqrt(g1), f"sp01_{ind}", [ind])) + dissipation_dict["t2"].append((np.sqrt(g2), f"Z01_{ind}", [ind])) + + # single coupler terms + # for i, c in enumerate(couplers_list): + for c in couplers_list: + ind = platform_to_simulator_qubits[c] + # drift Hamiltonian terms (constant in time) + drift_hamiltonian_dict["one_body"].append( + # (2 * np.pi * model_params["drive_freq"][c], f"O_{c}", [c]) + (2 * np.pi * model_params["drive_freq"][c], f"O_{ind}", [ind]) + ) + drift_hamiltonian_dict["one_body"].append( + ( + np.pi * model_params["anharmonicity"][c], + # f"O_{c} * O_{c} - O_{c}", + # [c], + f"O_{ind} * O_{ind} - O_{ind}", + [ind], + ) + ) + + # drive Hamiltonian terms (amplitude determined by pulse sequence) + # drive_hamiltonian_dict.update({f"D-{couplers_list[i]}": []}) + drive_hamiltonian_dict.update({f"D-{ind}": []}) + # drive_hamiltonian_dict[f"D-{couplers_list[i]}"].append( + drive_hamiltonian_dict[f"D-{ind}"].append( + # (2 * np.pi * model_params["rabi_freq"][c], f"X_{c}", [c]) + (2 * np.pi * model_params["rabi_freq"][c], f"X_{ind}", [ind]) + ) + + # flux Hamiltonian terms (amplitude determined by processed pulse sequence) + # flux_hamiltonian_dict.update({f"F-{couplers_list[i]}": []}) + flux_hamiltonian_dict.update({f"F-{ind}": []}) + # flux_hamiltonian_dict[f"F-{couplers_list[i]}"].append( + flux_hamiltonian_dict[f"F-{ind}"].append( + # (2 * np.pi, f"O_{c}", [c]) + (2 * np.pi, f"O_{ind}", [ind]) + ) + + # flux detuning parameters: + try: + flux_params_dict |= { + c: { + "flux_quanta": model_params["flux_quanta"][c], + "max_frequency": model_params["max_lo_freq"][c], + "current_frequency": model_params["drive_freq"][c], + } + } + except: + pass + + # dissipation terms for couplers + t1 = model_params["T1"][c] + g1 = 0 if t1 == 0 else 1.0 / t1 # * 2 * np.pi + t2 = model_params["T2"][c] + g2 = 0 if t2 == 0 else 1.0 / t2 # * 2 * np.pi + + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{c}", [c])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{c}", [c])) + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{ind}", [ind])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{ind}", [ind])) + dissipation_dict["t1"].append((np.sqrt(g1), f"sp01_{ind}", [ind])) + dissipation_dict["t2"].append((np.sqrt(g2), f"Z01_{ind}", [ind])) + + # two-body terms (couplings) + for key in list( + model_params["coupling_strength"].keys() + ): # consistent with device_qubits_list + ind2, ind1 = key.split( + "_" + ) # ind2 > ind1 with ind_qubit > ind_coupler as per Hilbert space ordering + ind1 = platform_to_simulator_qubits[ind1] + ind2 = platform_to_simulator_qubits[ind2] + + coupling = model_params["coupling_strength"][key] + drift_hamiltonian_dict["two_body"].append( + ( + 2 * np.pi * coupling, + f"bdag_{ind2} ^ b_{ind1} + b_{ind2} ^ bdag_{ind1}", + [ind2, ind1], + ) + ) + + model_config = { + "model_name": model_name, + "topology": topology, + "device_qubits_list": device_qubits_list, + "device_couplers_list": device_couplers_list, + "qubits_list": qubits_list, + "nlevels_q": nlevels_q, + "couplers_list": couplers_list, + "nlevels_c": nlevels_c, + "drift": drift_hamiltonian_dict, + "drive": drive_hamiltonian_dict, + "flux": flux_hamiltonian_dict, + "flux_params": flux_params_dict, + "dissipation": dissipation_dict, + "method": "master_equation", + "readout_error": readout_error, + "platform_to_simulator_qubits": platform_to_simulator_qubits, + # "platform_to_simulator_channels": default_noflux_platform_to_simulator_channels( + "platform_to_simulator_channels": default_platform_to_simulator_channels( + device_qubits_list, device_couplers_list + ), + } + + return model_config diff --git a/src/qibolab/instruments/emulator/models/general_no_coupler_model.py b/src/qibolab/instruments/emulator/models/general_no_coupler_model.py index c7b37aa1d9..fd0a9cd2da 100644 --- a/src/qibolab/instruments/emulator/models/general_no_coupler_model.py +++ b/src/qibolab/instruments/emulator/models/general_no_coupler_model.py @@ -1,11 +1,14 @@ -from typing import Optional +from typing import List, Optional, Union import numpy as np from qibolab.instruments.emulator.models.methods import ( - default_noflux_platform_to_simulator_channels, + default_platform_to_simulator_channels, + default_platform_to_simulator_qubits, ) +GHZ = 1e9 + # model template for 0-1 system def generate_default_params(): @@ -37,10 +40,14 @@ def generate_default_params(): "0": 0.0, "1": 0.0, }, - "lo_freq": { + "max_lo_freq": { "0": 5.0, "1": 5.1, }, + "flux_quanta": { + "0": 0.0, + "1": 0.0, + }, "rabi_freq": { "0": 0.2, "1": 0.2, @@ -56,6 +63,94 @@ def generate_default_params(): return model_params +def get_model_params( + platform_data_dict: dict, + nlevels_q: Union[int, List[int]], + relabel_qubits: bool = False, +) -> dict: + """Generates the model paramters for the general no coupler model. + + Args: + platform_data_dict(dict): Dictionary containing the device data extracted from a device platform. + nlevels_q(int, list): Number of levels for each qubit. If int, the same value gets assigned to all qubits. + relabel_qubits(bool): Flag to relabel qubits to ascending integers. False by default. + + Returns: + dict: Model parameters dictionary with all frequencies in GHz and times in ns that is required as an input to emulator runcards. + + Raises: + ValueError: If length of nlevels_q does not match number of qubits when nlevels_q is a list. + """ + model_params_dict = {"model_name": "general_no_coupler_model"} + model_params_dict |= {"topology": platform_data_dict["topology"]} + qubits_list = platform_data_dict["qubits_list"] + couplers_list = [] # platform_data_dict['couplers_list'] + characterization_dict = platform_data_dict["characterization"] + qubit_characterization_dict = characterization_dict["qubits"] + + drive_freq_dict = {} + T1_dict = {} + T2_dict = {} + max_lo_freq_dict = {} + flux_quanta_dict = {} + rabi_freq_dict = {} + anharmonicity_dict = {} + readout_error_dict = {} + + relabelled_qubits_list = [] + for i, q in enumerate(qubits_list): + if relabel_qubits: + i = str(i) + else: + i = str(q) + relabelled_qubits_list.append(i) + + af = qubit_characterization_dict[q]["assignment_fidelity"] + if af == 0: + readout_error_dict |= {i: [0.0, 0.0]} + else: + if type(af) is float: + p0m1 = p1m0 = 1 - af + else: + p0m1, p1m0 = 1 - np.array(af) + readout_error_dict |= {i: [p0m1, p1m0]} + drive_freq_dict |= {i: qubit_characterization_dict[q]["drive_frequency"] / GHZ} + T1_dict |= {i: qubit_characterization_dict[q]["T1"]} + T2_dict |= {i: qubit_characterization_dict[q]["T2"]} + max_lo_freq_dict |= {i: qubit_characterization_dict[q]["drive_frequency"] / GHZ} + rabi_freq_dict |= {i: qubit_characterization_dict[q]["rabi_frequency"] / GHZ} + anharmonicity_dict |= {i: qubit_characterization_dict[q]["anharmonicity"] / GHZ} + # flux_quanta_dict |= {i: 0.1} # to be updated + + model_params_dict |= {"nqubits": len(qubits_list)} + model_params_dict |= {"ncouplers": len(couplers_list)} + model_params_dict |= {"qubits_list": relabelled_qubits_list} + model_params_dict |= {"couplers_list": []} + + if type(nlevels_q) == int: + model_params_dict |= {"nlevels_q": [nlevels_q for q in qubits_list]} + elif type(nlevels_q) == list: + if len(nlevels_q) == len(qubits_list): + model_params_dict |= {"nlevels_q": nlevels_q} + else: + raise ValueError( + "Length of nlevels_q does not match number of qubits", len(qubits_list) + ) + model_params_dict |= {"nlevels_c": []} + + model_params_dict |= {"readout_error": readout_error_dict} + model_params_dict |= {"drive_freq": drive_freq_dict} + model_params_dict |= {"T1": T1_dict} + model_params_dict |= {"T2": T2_dict} + model_params_dict |= {"max_lo_freq": max_lo_freq_dict} + model_params_dict |= {"flux_quanta": flux_quanta_dict} + model_params_dict |= {"rabi_freq": rabi_freq_dict} + model_params_dict |= {"anharmonicity": anharmonicity_dict} + model_params_dict |= {"coupling_strength": {}} + + return model_params_dict + + def generate_model_config( model_params: dict = None, nlevels_q: Optional[list] = None, @@ -80,53 +175,96 @@ def generate_model_config( model_name = model_params["model_name"] readout_error = model_params["readout_error"] - qubits_list = model_params["qubits_list"] + # qubits_list = model_params["qubits_list"] + device_qubits_list = model_params["qubits_list"] - rabi_freq_dict = model_params["rabi_freq"] + platform_to_simulator_qubits = default_platform_to_simulator_qubits( + device_qubits_list, couplers_list=[] + ) + qubits_list = [platform_to_simulator_qubits[q] for q in device_qubits_list] if nlevels_q is None: nlevels_q = model_params["nlevels_q"] drift_hamiltonian_dict = {"one_body": [], "two_body": []} drive_hamiltonian_dict = {} + flux_hamiltonian_dict = {} + flux_params_dict = {} dissipation_dict = {"t1": [], "t2": []} # generate instructions # single qubit terms - for i, q in enumerate(qubits_list): + # for i, q in enumerate(qubits_list): + for q in device_qubits_list: + ind = platform_to_simulator_qubits[q] # drift Hamiltonian terms (constant in time) drift_hamiltonian_dict["one_body"].append( - (2 * np.pi * model_params["lo_freq"][q], f"O_{q}", [q]) + # (2 * np.pi * model_params["drive_freq"][q], f"O_{q}", [q]) + (2 * np.pi * model_params["drive_freq"][q], f"O_{ind}", [ind]) ) drift_hamiltonian_dict["one_body"].append( ( np.pi * model_params["anharmonicity"][q], - f"O_{q} * O_{q} - O_{q}", - [q], + # f"O_{q} * O_{q} - O_{q}", + f"O_{ind} * O_{ind} - O_{ind}", + # [q], + [ind], ) ) # drive Hamiltonian terms (amplitude determined by pulse sequence) - drive_hamiltonian_dict.update({f"D-{qubits_list[i]}": []}) - drive_hamiltonian_dict[f"D-{qubits_list[i]}"].append( - (2 * np.pi * model_params["rabi_freq"][q], f"X_{q}", [q]) + # drive_hamiltonian_dict.update({f"D-{qubits_list[i]}": []}) + drive_hamiltonian_dict.update({f"D-{ind}": []}) + # drive_hamiltonian_dict[f"D-{qubits_list[i]}"].append( + # (2 * np.pi * model_params["rabi_freq"][q], f"X_{q}", [q]) + # ) + drive_hamiltonian_dict[f"D-{ind}"].append( + (2 * np.pi * model_params["rabi_freq"][q], f"X_{ind}", [ind]) ) + # flux Hamiltonian terms (amplitude determined by processed pulse sequence) + # flux_hamiltonian_dict.update({f"F-{qubits_list[i]}": []}) + flux_hamiltonian_dict.update({f"F-{ind}": []}) + # flux_hamiltonian_dict[f"F-{qubits_list[i]}"].append((2 * np.pi, f"O_{q}", [q])) + flux_hamiltonian_dict[f"F-{ind}"].append((2 * np.pi, f"O_{ind}", [ind])) + + # flux detuning parameters: + try: + flux_params_dict |= { + # q: { + ind: { + "flux_quanta": model_params["flux_quanta"][q], + "max_frequency": model_params["max_lo_freq"][q], + "current_frequency": model_params["drive_freq"][q], + } + } + except: + pass + # dissipation terms (one qubit, constant in time) t1 = model_params["T1"][q] - g1 = 0 if t1 == 0 else 1.0 / t1 * 2 * np.pi + g1 = 0 if t1 == 0 else 1.0 / t1 # * 2 * np.pi t2 = model_params["T2"][q] - g2 = 0 if t1 == 0 else 1.0 / t2 * 2 * np.pi + g2 = 0 if t2 == 0 else 1.0 / t2 # * 2 * np.pi - dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{q}", [q])) - dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{q}", [q])) + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{q}", [q])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{q}", [q])) + # dissipation_dict["t1"].append((np.sqrt(g1 / 2), f"sp01_{ind}", [ind])) + # dissipation_dict["t2"].append((np.sqrt(g2 / 2), f"Z01_{ind}", [ind])) + dissipation_dict["t1"].append((np.sqrt(g1), f"sp01_{ind}", [ind])) + dissipation_dict["t2"].append((np.sqrt(g2), f"Z01_{ind}", [ind])) # two-body terms (couplings) - for key in list(model_params["coupling_strength"].keys()): + for key in list( + model_params["coupling_strength"].keys() + ): # consistent with device_qubits_list ind2, ind1 = key.split( "_" ) # ind2 > ind1 with ind_qubit > ind_coupler as per Hilbert space ordering + ind1 = platform_to_simulator_qubits[ind1] + ind2 = platform_to_simulator_qubits[ind2] + coupling = model_params["coupling_strength"][key] drift_hamiltonian_dict["two_body"].append( ( @@ -139,17 +277,23 @@ def generate_model_config( model_config = { "model_name": model_name, "topology": topology, + "device_qubits_list": device_qubits_list, + "device_couplers_list": [], "qubits_list": qubits_list, "nlevels_q": nlevels_q, "couplers_list": [], "nlevels_c": [], "drift": drift_hamiltonian_dict, "drive": drive_hamiltonian_dict, + "flux": flux_hamiltonian_dict, + "flux_params": flux_params_dict, "dissipation": dissipation_dict, "method": "master_equation", "readout_error": readout_error, - "platform_to_simulator_channels": default_noflux_platform_to_simulator_channels( - qubits_list, couplers_list=[] + "platform_to_simulator_qubits": platform_to_simulator_qubits, + # "platform_to_simulator_channels": default_noflux_platform_to_simulator_channels( + "platform_to_simulator_channels": default_platform_to_simulator_channels( + device_qubits_list, couplers_list=[] ), } diff --git a/src/qibolab/instruments/emulator/models/methods.py b/src/qibolab/instruments/emulator/models/methods.py index 1ab27f4d1d..3e24189088 100644 --- a/src/qibolab/instruments/emulator/models/methods.py +++ b/src/qibolab/instruments/emulator/models/methods.py @@ -1,6 +1,27 @@ import operator from functools import reduce +import numpy as np + + +def default_platform_to_simulator_qubits( + qubits_list: list, couplers_list: list +) -> dict: + """Returns the default dictionary that maps platform qubit names to simulator qubit names. + Args: + qubits_list (list): List of qubit names to be included in the simulation. + couplers_list (list): List of coupler names to be included in the simulation. + + Returns: + dict: Mapping between platform qubit/coupler names to simulator qubit/coupler names. + """ + + return reduce( + operator.or_, + [{f"{q}": f"{i}"} for i, q in enumerate(qubits_list)] + + [{f"{c}": f"c{j}"} for j, c in enumerate(couplers_list)], + ) + def default_noflux_platform_to_simulator_channels( qubits_list: list, couplers_list: list @@ -10,11 +31,70 @@ def default_noflux_platform_to_simulator_channels( qubits_list (list): List of qubit names to be included in the simulation. couplers_list (list): List of coupler names to be included in the simulation. + Returns: + dict: Mapping between platform channel names to simulator channel names. + """ + return reduce( + operator.or_, + # [{f"drive-{q}": f"D-{q}", f"readout-{q}": f"R-{q}"} for q in qubits_list] + # + [{f"drive-{c}": f"D-{c}"} for c in couplers_list], + [ + {f"drive-{q}": f"D-{i}", f"readout-{q}": f"R-{i}"} + for i, q in enumerate(qubits_list) + ] + + [{f"drive-{c}": f"D-c{j}"} for j, c in enumerate(couplers_list)], + ) + + +def default_platform_to_simulator_channels( + qubits_list: list, couplers_list: list +) -> dict: + """Returns the default dictionary that maps platform channel names to simulator channel names. + Args: + qubits_list (list): List of qubit names to be included in the simulation. + couplers_list (list): List of coupler names to be included in the simulation. + Returns: dict: Mapping between platform channel names to simulator chanel names. """ return reduce( operator.or_, - [{f"drive-{q}": f"D-{q}", f"readout-{q}": f"R-{q}"} for q in qubits_list] - + [{f"drive-{c}": f"D-{c}"} for c in couplers_list], + [ + # {f"drive-{q}": f"D-{q}", f"readout-{q}": f"R-{q}", f"flux-{q}": f"F-{q}"} + # for q in qubits_list + {f"drive-{q}": f"D-{i}", f"readout-{q}": f"R-{i}", f"flux-{q}": f"F-{i}"} + for i, q in enumerate(qubits_list) + ] + # + [{f"drive-{c}": f"D-{c}", f"flux-{c}": f"F-{c}"} for c in couplers_list], + + [ + {f"drive-{c}": f"D-c{j}", f"flux-{c}": f"F-c{j}"} + for j, c in enumerate(couplers_list) + ], ) + + +def flux_detuning( + flux_pulse_amplitude: np.ndarray, + flux_quanta: float, + max_frequency: float, + current_frequency: float, +) -> np.ndarray: + """Function that returns detuned qubit frequency due to flux pulse.""" + phase = flux_pulse_amplitude / flux_quanta + + return max_frequency * np.sqrt(np.abs(np.cos(phase))) - current_frequency + + +def flux_pulse_amp_from_detuning( + flux_detuning: np.ndarray, + flux_quanta: float, + max_frequency: float, + current_frequency: float, +) -> np.ndarray: + """Function that returns flux pulse amplitude required to achieve desired + detuning.""" + + abs_cos_phase = ((flux_detuning + current_frequency) / max_frequency) ** 2 + phase = np.arccos(abs_cos_phase) + + return phase * flux_quanta diff --git a/src/qibolab/instruments/emulator/models/models_template.py b/src/qibolab/instruments/emulator/models/models_template.py index 2efed9b8da..cae2a226d6 100644 --- a/src/qibolab/instruments/emulator/models/models_template.py +++ b/src/qibolab/instruments/emulator/models/models_template.py @@ -34,7 +34,7 @@ def generate_default_params(): "0": 0.0, "1": 0.0, }, - "lo_freq": { + "max_lo_freq": { "0": 5.0, "1": 5.1, "c1": 6.5, @@ -105,7 +105,7 @@ def generate_model_config( for i, q in enumerate(qubits_list): # drift Hamiltonian terms (constant in time) drift_hamiltonian_dict["one_body"].append( - (2 * np.pi * model_params["lo_freq"][q], f"O_{q}", [q]) + (2 * np.pi * model_params["max_lo_freq"][q], f"O_{q}", [q]) ) drift_hamiltonian_dict["one_body"].append( ( @@ -134,7 +134,7 @@ def generate_model_config( for i, c in enumerate(couplers_list): # drift Hamiltonian terms (constant in time) drift_hamiltonian_dict["one_body"].append( - (2 * np.pi * model_params["lo_freq"][c], f"O_{c}", [c]) + (2 * np.pi * model_params["max_lo_freq"][c], f"O_{c}", [c]) ) drift_hamiltonian_dict["one_body"].append( ( diff --git a/src/qibolab/instruments/emulator/pulse_simulator.py b/src/qibolab/instruments/emulator/pulse_simulator.py index 07e40aceb7..2160b37071 100644 --- a/src/qibolab/instruments/emulator/pulse_simulator.py +++ b/src/qibolab/instruments/emulator/pulse_simulator.py @@ -2,17 +2,24 @@ device.""" import copy +import json import operator -from typing import Dict, List, Union +from typing import Dict, List, Optional, Union import numpy as np +from sklearn.metrics import auc from qibolab import AcquisitionType, AveragingMode, ExecutionParameters from qibolab.couplers import Coupler from qibolab.instruments.abstract import Controller from qibolab.instruments.emulator.engines.qutip_engine import QutipSimulator -from qibolab.instruments.emulator.models import general_no_coupler_model -from qibolab.pulses import PulseSequence, PulseType, ReadoutPulse +from qibolab.instruments.emulator.models import ( + general_coupler_model, + general_no_coupler_model, +) +from qibolab.instruments.emulator.models.methods import flux_detuning +from qibolab.platform import Platform +from qibolab.pulses import DrivePulse, FluxPulse, PulseSequence, PulseType, ReadoutPulse from qibolab.qubits import Qubit, QubitId from qibolab.result import IntegratedResults, SampleResults from qibolab.sweeper import Parameter, Sweeper, SweeperType @@ -31,6 +38,17 @@ MODELS = { "general_no_coupler_model": general_no_coupler_model, + "general_coupler_model": general_coupler_model, +} + +DEFAULT_SIM_CONFIG = { + "simulation_engine_name": "Qutip", + "sampling_rate": 4.5, + "sim_sampling_boost": 10, + "runcard_duration_in_dt_units": False, + "instant_measurement": True, + "simulate_dissipation": True, + "output_state_history": True, } GHZ = 1e9 @@ -65,6 +83,7 @@ def setup(self, **kwargs): model_name = model_params["model_name"] model_config = MODELS[model_name].generate_model_config(model_params) + self.flux_params_dict = model_config["flux_params"] simulation_engine_name = simulation_config["simulation_engine_name"] self.simulation_engine = SIMULATION_ENGINES[simulation_engine_name]( model_config, sim_opts @@ -77,6 +96,11 @@ def setup(self, **kwargs): "runcard_duration_in_dt_units" ] self.instant_measurement = simulation_config["instant_measurement"] + self.platform_to_simulator_qubits = model_config["platform_to_simulator_qubits"] + self.simulator_to_platform_qubits = { + v: int(k) for k, v in self.platform_to_simulator_qubits.items() + } + self.platform_to_simulator_channels = model_config[ "platform_to_simulator_channels" ] @@ -84,6 +108,8 @@ def setup(self, **kwargs): self.readout_error = { int(k): v for k, v in model_config["readout_error"].items() } + # self.readout_error = model_config["readout_error"] + self.simulate_dissipation = simulation_config["simulate_dissipation"] self.output_state_history = simulation_config["output_state_history"] @@ -123,6 +149,18 @@ def run_pulse_simulation( self.runcard_duration_in_dt_units, ) + # convert flux pulse signals into flux detuning + for channel_name, waveform in channel_waveforms["channels"].items(): + if channel_name[:2] == "F-": + ##flux_quanta = self.flux_params_dict['flux_quanta'] + ##max_frequency = current_frequency = self.flux_params_dict['current_frequency'] + ##flux_op_coeffs = flux_detuning(pulse_signal, flux_quanta, max_frequency, current_frequency) + q = channel_name.split("-")[1] + flux_op_coeffs = flux_detuning(waveform, **self.flux_params_dict[q]) + ##print('flux_op_coeffs:', flux_op_coeffs) + ##self.flux_op_coeffs = flux_op_coeffs + channel_waveforms["channels"].update({channel_name: flux_op_coeffs}) + # execute pulse simulation in emulator simulation_results = self.simulation_engine.qevolve( channel_waveforms, self.simulate_dissipation @@ -154,6 +192,7 @@ def play( dict: A dictionary mapping the readout pulses serial and respective qubits to Qibolab results object, as well as simulation-related time and states data. """ + print(sequence) nshots = execution_parameters.nshots ro_pulse_list = sequence.ro_pulses times_dict, output_states, ro_reduced_dm, rdm_qubit_list = ( @@ -167,6 +206,7 @@ def play( ro_reduced_dm, rdm_qubit_list, self.simulation_engine.qid_nlevels_map, + self.simulator_to_platform_qubits, ) # apply default readout noise if self.readout_error is not None: @@ -362,6 +402,7 @@ def _sweep_play( ro_pulse_list = sequence.ro_pulses # run pulse simulation + print(sequence) times_dict, state_history, ro_reduced_dm, rdm_qubit_list = ( self.run_pulse_simulation(sequence, self.instant_measurement) ) @@ -371,6 +412,7 @@ def _sweep_play( ro_reduced_dm, rdm_qubit_list, self.simulation_engine.qid_nlevels_map, + self.simulator_to_platform_qubits, ) # apply default readout noise if self.readout_error is not None: @@ -433,12 +475,15 @@ def ps_to_waveform_dict( times_list = [] signals_list = [] emulator_channel_name_list = [] + sequence_couplers = sequence.cf_pulses def channel_translator(platform_channel_name, frequency): """Option to add frequency specific channel operators.""" try: # frequency dependent channel operation - return platform_to_simulator_channels[platform_channel_name + frequency] + return platform_to_simulator_channels[ + platform_channel_name + "-" + frequency + ] except: # frequency independent channel operation (default) return platform_to_simulator_channels[platform_channel_name] @@ -457,47 +502,48 @@ def channel_translator(platform_channel_name, frequency): for channel in qubit_pulses.channels: channel_pulses = qubit_pulses.get_channel_pulses(channel) for i, pulse in enumerate(channel_pulses): - start = int(pulse.start * sim_sampling_boost) - actual_pulse_frequency = ( - pulse.frequency - ) # store actual pulse frequency for channel_translator - # rescale frequency to be compatible with sampling_rate = 1 - pulse.frequency = pulse.frequency / sampling_rate - # need to first set pulse._if in GHz to use modulated_waveform_i method - pulse._if = pulse.frequency / GHZ - - i_env = pulse.envelope_waveform_i(sim_sampling_boost).data - q_env = pulse.envelope_waveform_q(sim_sampling_boost).data - - # Qubit drive microwave signals - end = start + len(i_env) - t = np.arange(start, end) / sampling_rate / sim_sampling_boost - cosalpha = np.cos( - 2 * np.pi * pulse._if * sampling_rate * t + pulse.relative_phase + t, pulse_signal = get_pulse_signal( + pulse, sampling_rate, sim_sampling_boost ) - sinalpha = np.sin( - 2 * np.pi * pulse._if * sampling_rate * t + pulse.relative_phase + times_list.append(t) + """If pulse.type.value == "qd": + + platform_channel_name = f"drive-{qubit}" elif + pulse.type.value == "ro": platform_channel_name + = f"readout-{qubit}" elif pulse.type.value == "qf": + platform_channel_name = f"flux-{qubit}" + """ + + signals_list.append(pulse_signal) + + emulator_channel_name_list.append( + # channel_translator(platform_channel_name, pulse._if) + channel_translator(channel, pulse._if) ) - pulse_signal = i_env * sinalpha + q_env * cosalpha - # pulse_signal = pulse_signal/np.sqrt(2) # uncomment for ibm runcard + for coupler in sequence_couplers.qubits: + # only has coupler flux pulses; couplers only has flux pulses in qibolab 0.1 + # coupler indices must be integers in runcard + coupler_pulses = sequence.coupler_pulses(coupler) + for channel in coupler_pulses.channels: + channel_pulses = coupler_pulses.get_channel_pulses(channel) + for i, pulse in enumerate(channel_pulses): + t, pulse_signal = get_pulse_signal( + pulse, sampling_rate, sim_sampling_boost + ) times_list.append(t) signals_list.append(pulse_signal) + """If pulse.type.value == "cf": platform_channel_name = + f"flux-c{coupler}" elif ( - if pulse.type.value == "qd": - platform_channel_name = f"drive-{qubit}" - # TODO: to add during flux pulse update - # elif pulse.type.value == "qf": - # platform_channel_name = f"flux-{qubit}" - elif pulse.type.value == "ro": - platform_channel_name = f"readout-{qubit}" - - # restore pulse frequency values - pulse.frequency = actual_pulse_frequency - pulse._if = pulse.frequency / GHZ + pulse.type.value == "cd" ): # when drive pulse + for couplers are available platform_channel_name + = f"drive-{coupler}" + """ emulator_channel_name_list.append( - channel_translator(platform_channel_name, pulse._if) + # channel_translator(platform_channel_name, pulse._if) + channel_translator(channel_name, pulse._if) ) tmin, tmax = [], [] @@ -517,36 +563,47 @@ def channel_translator(platform_channel_name, frequency): for channel in qubit_pulses.channels: channel_pulses = qubit_pulses.get_channel_pulses(channel) for i, pulse in enumerate(channel_pulses): - sim_sampling_rate = sampling_rate * sim_sampling_boost - - start = int(pulse.start * sim_sampling_rate) - # need to first set pulse._if in GHz to use modulated_waveform_i method - pulse._if = pulse.frequency / GHZ + t, pulse_signal = get_pulse_signal_ns( + pulse, sampling_rate, sim_sampling_boost + ) + times_list.append(t) + signals_list.append(pulse_signal) + """If pulse.type.value == "qd": - i_env = pulse.envelope_waveform_i(sim_sampling_rate).data - q_env = pulse.envelope_waveform_q(sim_sampling_rate).data + platform_channel_name = f"drive-{qubit}" elif + pulse.type.value == "ro": platform_channel_name + = f"readout-{qubit}" elif pulse.type.value == "qf": + platform_channel_name = f"flux-{qubit}" + """ - # Qubit drive microwave signals - end = start + len(i_env) - t = np.arange(start, end) / sim_sampling_rate - cosalpha = np.cos(2 * np.pi * pulse._if * t + pulse.relative_phase) - sinalpha = np.sin(2 * np.pi * pulse._if * t + pulse.relative_phase) - pulse_signal = i_env * sinalpha + q_env * cosalpha - # pulse_signal = pulse_signal/np.sqrt(2) # uncomment for ibm runcard + emulator_channel_name_list.append( + # channel_translator(platform_channel_name, pulse._if) + channel_translator(channel, pulse._if) + ) + for coupler in sequence_couplers.qubits: + # only has coupler flux pulses; couplers only has flux pulses in qibolab 0.1 + # coupler indices must be integers in runcard + coupler_pulses = sequence.coupler_pulses(coupler) + for channel in coupler_pulses.channels: + channel_pulses = coupler_pulses.get_channel_pulses(channel) + for i, pulse in enumerate(channel_pulses): + t, pulse_signal = get_pulse_signal_ns( + pulse, sampling_rate, sim_sampling_boost + ) times_list.append(t) signals_list.append(pulse_signal) + """If pulse.type.value == "cf": platform_channel_name = + f"flux-c{coupler}" elif ( - if pulse.type.value == "qd": - platform_channel_name = f"drive-{qubit}" - # TODO: add during flux pulse update - # elif pulse.type.value == "qf": - # platform_channel_name = f"flux-{qubit}" - elif pulse.type.value == "ro": - platform_channel_name = f"readout-{qubit}" + pulse.type.value == "cd" ): # when drive pulse + for couplers are available platform_channel_name + = f"drive-c{coupler}" + """ emulator_channel_name_list.append( - channel_translator(platform_channel_name, pulse._if) + # channel_translator(platform_channel_name, pulse._if) + channel_translator(channel, pulse._if) ) tmin, tmax = [], [] @@ -578,6 +635,86 @@ def channel_translator(platform_channel_name, frequency): return channel_waveforms +def get_pulse_signal( + pulse: Union[ReadoutPulse, DrivePulse, FluxPulse], + sampling_rate: float = 1.0, + sim_sampling_boost: int = 1, +) -> tuple: + """Converts pulse to a list of times and a list of corresponding pulse + signal values assuming pulse duration in runcard is in units of + dt=1/sampling_rate, i.e. time interval between samples. + + Args: + pulse (`qibolab.pulses.ReadoutPulse`, `qibolab.pulses.DrivePulse`, `qibolab.pulses.FluxPulse`): Input pulse. + sampling_rate (float): Sampling rate in units of samples/ns. Defaults to 1. + sim_sampling_boost (int): Additional factor multiplied to sampling_rate for improving numerical accuracy in simulation. Defaults to 1. + + Returns: + tuple: list of times and corresponding pulse signal values. + """ + start = int(pulse.start * sim_sampling_boost) + actual_pulse_frequency = ( + pulse.frequency + ) # store actual pulse frequency for channel_translator + # rescale frequency to be compatible with sampling_rate = 1 + pulse.frequency = pulse.frequency / sampling_rate + # need to first set pulse._if in GHz to use modulated_waveform_i method + pulse._if = pulse.frequency / GHZ + + i_env = pulse.envelope_waveform_i(sim_sampling_boost).data + q_env = pulse.envelope_waveform_q(sim_sampling_boost).data + + # Qubit drive microwave signals + end = start + len(i_env) + t = np.arange(start, end) / sampling_rate / sim_sampling_boost + cosalpha = np.cos(2 * np.pi * pulse._if * sampling_rate * t + pulse.relative_phase) + sinalpha = np.sin(2 * np.pi * pulse._if * sampling_rate * t + pulse.relative_phase) + pulse_signal = i_env * sinalpha + q_env * cosalpha + # pulse_signal = pulse_signal/np.sqrt(2) # uncomment for ibm runcard + + # restore pulse frequency values + pulse.frequency = actual_pulse_frequency + pulse._if = pulse.frequency / GHZ + + return t, pulse_signal + + +def get_pulse_signal_ns( + pulse: Union[ReadoutPulse, DrivePulse], + sampling_rate: float = 1.0, + sim_sampling_boost: int = 1, +) -> tuple: + """Converts pulse to a list of times and a list of corresponding pulse + signal values assuming pulse duration in runcard is in ns. + + Args: + pulse (`qibolab.pulses.ReadoutPulse`, `qibolab.pulses.DrivePulse`, `qibolab.pulses.FluxPulse`): Input pulse. + sampling_rate (float): Sampling rate in units of samples/ns. Defaults to 1. + sim_sampling_boost (int): Additional factor multiplied to sampling_rate for improving numerical accuracy in simulation. Defaults to 1. + + Returns: + tuple: list of times and corresponding pulse signal values. + """ + # need to first set pulse._if in GHz to use modulated_waveform_i method + pulse._if = pulse.frequency / GHZ + + sim_sampling_rate = sampling_rate * sim_sampling_boost + + i_env = pulse.envelope_waveform_i(sim_sampling_rate).data + q_env = pulse.envelope_waveform_q(sim_sampling_rate).data + + # Qubit drive microwave signals + start = int(pulse.start * sim_sampling_rate) + end = start + len(i_env) + t = np.arange(start, end) / sim_sampling_rate + cosalpha = np.cos(2 * np.pi * pulse._if * t + pulse.relative_phase) + sinalpha = np.sin(2 * np.pi * pulse._if * t + pulse.relative_phase) + pulse_signal = i_env * sinalpha + q_env * cosalpha + # pulse_signal = pulse_signal/np.sqrt(2) # uncomment for ibm runcard + + return t, pulse_signal + + def apply_readout_noise( samples: dict[Union[str, int], list], readout_error: dict[Union[int, str], list], @@ -698,6 +835,7 @@ def get_samples( ro_reduced_dm: np.ndarray, ro_qubit_list: list, qid_nlevels_map: dict[Union[int, str], int], + simulator_to_platform_qubits: dict = None, ) -> dict[Union[str, int], list]: """Gets samples from the density matrix corresponding to the system or subsystem specified by the ordered qubit indices. @@ -736,6 +874,8 @@ def get_samples( outcomes = [ reduced_computation_basis[outcome][ind] for outcome in sample_all_ro_list ] + if simulator_to_platform_qubits: + ro_qubit = simulator_to_platform_qubits[str(ro_qubit)] samples[ro_qubit] = outcomes return samples @@ -759,3 +899,187 @@ def truncate_ro_pulses( sequence[i].duration = 1 return sequence + + +def extract_platform_data(platform: Platform, target_qubits: list = None) -> dict: + """Extracts platform data relevant for generating model parameters. + Estimates rabi frequency from drive pulse for each qubit if not provided in + qubit characterization. + + Args: + platform (`qibolab.platform.Platform`): Initialized device platform. + target_qubits (list): List of qubit names to extract. + Returns: + dict: Selected device platform data. + """ + if target_qubits: + qubits = { + qubit_name: platform.qubits[qubit_name] for qubit_name in target_qubits + } + couplers = platform.couplers + ordered_pairs = [ + pair + for pair in platform.ordered_pairs + if (pair[0] in target_qubits and pair[1] in target_qubits) + ] + else: + qubits = platform.qubits + couplers = platform.couplers + ordered_pairs = platform.ordered_pairs + + qubits_list = list(qubits.keys()) + couplers_list = list(couplers.keys()) + + platform_data_dict = {"platform_name": platform.name} + platform_data_dict |= {"topology": ordered_pairs} + platform_data_dict |= {"qubits_list": qubits_list} + platform_data_dict |= {"couplers_list": couplers_list} + + qubit_characterization_dict = {} + pairs_characterization_dict = {} + + for q in qubits_list: + qubit_characterization_dict |= {q: qubits[q].characterization} + try: + qubit_characterization_dict[q]["rabi_frequency"] + except: + rx_pulse = platform.create_RX_pulse(qubit=q, start=0) + rabi_frequency = est_rabi(rx_pulse) + qubit_characterization_dict[q] |= {"rabi_frequency": rabi_frequency} + for p in ordered_pairs: + pairs_characterization_dict |= {p: platform.pairs[p].characterization} + + characterization_dict = { + "qubits": qubit_characterization_dict, + "pairs": pairs_characterization_dict, + } + platform_data_dict |= {"characterization": characterization_dict} + + return platform_data_dict + + +def est_rabi(rx_pulse: DrivePulse, sampling_rate: int = 100) -> float: + """Estimates the rabi frequency for a given RX pulse by calculating area + under curve. + + Args: + rx_pulse (`qibolab.pulses.DrivePulse`): Drive pulse. + sampling_rate (int): Sampling rate to approximate area under curve of envelope waveform. Defaults to 100. + + Returns: + float: Rabi frequency in Hz + """ + yyI = rx_pulse.envelope_waveform_i(sampling_rate).data + yyQ = rx_pulse.envelope_waveform_q(sampling_rate).data + num_samples = int(np.rint(rx_pulse.duration * sampling_rate)) + xx = np.arange(num_samples) / sampling_rate + + aucIQ = auc(xx, yyI) + auc(xx, yyQ) + rabi_freq = np.pi / (2 * np.pi * aucIQ) + + return rabi_freq * GHZ + + +def make_emulator_runcard( + platform: Platform, + nlevels_q: Union[int, List[int]] = 3, + target_qubits: list = None, + relabel_qubits: bool = False, + model_name: str = "general_no_coupler_model", + output_folder: Optional[str] = None, +) -> dict: + """Constructs emulator runcard from an initialized device platform. #TODO + add flux-pulse and coupler related parts. + + Args: + platform (`qibolab.platform.Platform`): Initialized device platform. + nlevels_q(int, list): Number of levels for each qubit. If int, the same value gets assigned to all qubits. + target_qubits (list): List of qubit names to emulate. + relabel_qubits (bool): if true, relabels qubit names from 0 to nqubits-1. + model_name (str): Name of model to use for emulation. Defaults to 'general_no_coupler_model'. + output_folder (str): Directory to output the generated emulator runcard 'parameters.json'. Defaults to None, in which case only the runcard dictionary is returned. + + Returns: + dict: Emulator runcard + """ + + settings_dict = { + "nshots": platform.settings.nshots, + "relaxation_time": platform.settings.relaxation_time, + } + + platform_data_dict = extract_platform_data(platform, target_qubits) + model_params_dict = MODELS[model_name].get_model_params( + platform_data_dict, nlevels_q, relabel_qubits + ) + + if target_qubits: + qubits_list = platform_data_dict["qubits_list"] + couplers_list = platform_data_dict["couplers_list"] + else: + qubits_list = list(platform.qubits.keys()) + couplers_list = list(platform.couplers.keys()) + + characterization = {} + single_qubit_characterization = {} + # two_qubit_characterization = {} + # coupler_characterization = {} + + native_gates = {} + single_qubit_native_gates = {} + # two_qubit_native_gates = {} + # coupler_native_gates = {} + + emulator_qubits_list = [] + for i, q in enumerate(qubits_list): + if relabel_qubits: + i = str(i) + else: + i = q + emulator_qubits_list.append(int(i)) + + single_qubit_characterization |= {i: platform.qubits[q].characterization} + single_qubit_native_gates |= {i: platform.qubits[q].native_gates.raw} + + characterization |= {"single_qubit": single_qubit_characterization} + # characterization |= {'two_qubit': two_qubit_characterization} + # characterization |= {'coupler': coupler_characterization} + + native_gates |= {"single_qubit": single_qubit_native_gates} + # native_gates |= {'coupler': coupler_native_gates} + # native_gates |= {'two_qubit': two_qubit_native_gates} + + # pulse simulator + instruments = { + "pulse_simulator": { + "model_params": model_params_dict, + "simulation_config": DEFAULT_SIM_CONFIG, + "sim_opts": None, + "bounds": {"waveforms": 1, "readout": 1, "instructions": 1}, + } + } + + # Construct runcard dictionary in order + runcard = {} + runcard |= {"device_name": platform.name + "_emulator"} + runcard |= {"nqubits": len(qubits_list)} + runcard |= {"ncouplers": 0} # runcard |= {'ncouplers': len(couplers_list)} + if relabel_qubits: + runcard |= { + "description": f"Emulator for {platform.name} qubits {qubits_list} using {model_name}" + } + else: + runcard |= {"description": f"Emulator for {platform.name} using {model_name}"} + runcard |= {"settings": settings_dict} + runcard |= {"instruments": instruments} + runcard |= {"qubits": emulator_qubits_list} + runcard |= {"couplers": []} # runcard |= {'couplers': couplers_list} + runcard |= {"topology": []} # runcard |= {'topology': platform.ordered_pairs} + runcard |= {"native_gates": native_gates} + runcard |= {"characterization": characterization} + + if output_folder: + with open(f"{output_folder}/parameters.json", "w") as outfile: + outfile.write(json.dumps(runcard, indent=4)) + + return runcard diff --git a/tests/emulators/default_q0/parameters.json b/tests/emulators/default_q0/parameters.json index 319e727c58..614c0f308f 100644 --- a/tests/emulators/default_q0/parameters.json +++ b/tests/emulators/default_q0/parameters.json @@ -22,7 +22,7 @@ "drive_freq": {"0": 5.090167234445013}, "T1": {"0": 88578.48970762537}, "T2": {"0": 106797.94866226273}, - "lo_freq": {"0": 5.090167234445013}, + "max_lo_freq": {"0": 5.090167234445013}, "rabi_freq": {"0": 0.333}, "anharmonicity": {"0": -0.3361230051821652}, "coupling_strength": {} @@ -76,19 +76,36 @@ "characterization": { "single_qubit": { "0": { + "bare_resonator_frequency": 0, "readout_frequency": 7301661824.000001, "drive_frequency": 5090167234.445013, "anharmonicity": -336123005.1821652, + "sweetspot": 0, + "asymmetry": 0.0, + "crosstalk_matrix": {}, "Ec": 0, "Ej": 0, "g": 0, + "assignment_fidelity": [0.99,0.98], + "readout_fidelity": 0.0, + "gate_fidelity": 0.0, + "effective_temperature": 0.0, + "peak_voltage": 0, + "pi_pulse_amplitude": 0, + "resonator_depletion_time": 0, "T1": 88578.48970762537, "T2": 106797.94866226273, - "sweetspot": 0, + "T2_spin_echo": 0, + "state0_voltage": 0, + "state1_voltage": 0, "mean_gnd_states": "1.5417+0.1817j", "mean_exc_states": "2.5332-0.5914j", "threshold": 1.5435, - "iq_angle": 2.602 + "iq_angle": 2.602, + "mixer_drive_g": 0.0, + "mixer_drive_phi": 0.0, + "mixer_readout_g": 0.0, + "mixer_readout_phi": 0.0 } } } diff --git a/tests/emulators/default_q01_flux/parameters.json b/tests/emulators/default_q01_flux/parameters.json new file mode 100644 index 0000000000..f7085d3cbd --- /dev/null +++ b/tests/emulators/default_q01_flux/parameters.json @@ -0,0 +1,171 @@ +{ + "device_name": "default_q01_flux", + "nqubits": 2, + "ncouplers": 0, + "description": "2 qubit test device with flux pulses and iSWAP", + "settings": { + "nshots": 4096, + "relaxation_time": 300000 + }, + "instruments": { + "pulse_simulator": { + "model_params": { + "model_name": "general_no_coupler_model", + "topology": [ + [0, 1] + ], + "nqubits": 2, + "ncouplers": 0, + "qubits_list": ["0", "1"], + "couplers_list": [], + "nlevels_q": [2, 2], + "nlevels_c": [], + "readout_error": { + "0": [0.01, 0.02], + "1": [0.01, 0.02] + }, + "drive_freq": { + "0": 4.5, + "1": 4.3 + }, + "T1": { + "0": 0.0, + "1": 0.0 + }, + "T2": { + "0": 0.0, + "1": 0.0 + }, + "max_lo_freq": { + "0": 4.5, + "1": 4.3 + }, + "flux_quanta": { + "0": 0.3183098861837907, + "1": 0.3183098861837907 + }, + "rabi_freq": { + "0": 0.334, + "1": 0.334 + }, + "anharmonicity": { + "0": -0.3, + "1": -0.31 + }, + "coupling_strength": { + "1_0": 0.006 + } + }, + "simulation_config": { + "simulation_engine_name": "Qutip", + "sampling_rate": 5.0, + "sim_sampling_boost": 20, + "runcard_duration_in_dt_units": false, + "instant_measurement": true, + "simulate_dissipation": true, + "output_state_history": true + }, + "sim_opts": null, + "bounds": { + "waveforms": 1, + "readout": 1, + "instructions": 1 + } + } + }, + "qubits": [0, 1], + "couplers": [], + "topology": [ + [0, 1] + ], + "native_gates": { + "single_qubit": { + "0": { + "RX": { + "duration": 25.139, + "amplitude": 0.1, + "frequency": 4500000000.0, + "shape": "Drag(4, -2.4305800297101414)", + "type": "qd", + "start": 0, + "phase": 0 + }, + "MZ": { + "duration": 22400, + "amplitude": 0.03, + "frequency": 7301661824.000001, + "shape": "Rectangular()", + "type": "ro", + "start": 0, + "phase": 1.5636758979377372 + } + }, + "1": { + "RX": { + "duration": 25.079, + "amplitude": 0.1, + "frequency": 4300000000.0, + "shape": "Drag(4, 0.6571522139248822)", + "type": "qd", + "start": 0, + "phase": 0 + }, + "MZ": { + "duration": 22400, + "amplitude": 0.056500000000000015, + "frequency": 7393428047.0, + "shape": "Rectangular()", + "type": "ro", + "start": 0, + "phase": -3.022547221302854 + } + } + }, + "two_qubit": { + "0-1": { + "iSWAP": [ + { + "duration": 41.131, + "amplitude": 0.1337, + "shape": "Rectangular()", + "qubit": 0, + "type": "qf", + "start": 0 + } + ] + } + } + }, + "characterization": { + "single_qubit": { + "0": { + "readout_frequency": 7301661824.000001, + "drive_frequency": 4500000000.0, + "anharmonicity": -300000000.0, + "Ec": 0, + "Ej": 0, + "g": 0, + "T1": 0.0, + "T2": 0.0, + "sweetspot": 0, + "mean_gnd_states": "1.5417+0.1817j", + "mean_exc_states": "2.5332-0.5914j", + "threshold": 1.5435, + "iq_angle": 2.602 + }, + "1": { + "readout_frequency": 7393428047.0, + "drive_frequency": 4300000000.0, + "anharmonicity": -310000000.0, + "Ec": 0, + "Ej": 0, + "g": 0, + "T1": 0.0, + "T2": 0.0, + "sweetspot": 0, + "mean_gnd_states": "(0+0j)", + "mean_exc_states": "(0+0j)" + } + } + } +} diff --git a/tests/emulators/default_q01_flux/platform.py b/tests/emulators/default_q01_flux/platform.py new file mode 100644 index 0000000000..b76a31e2fc --- /dev/null +++ b/tests/emulators/default_q01_flux/platform.py @@ -0,0 +1,55 @@ +import pathlib + +from qibolab.channels import ChannelMap +from qibolab.instruments.emulator.pulse_simulator import PulseSimulator +from qibolab.platform import Platform +from qibolab.serialize import ( + load_instrument_settings, + load_qubits, + load_runcard, + load_settings, +) + +FOLDER = pathlib.Path(__file__).parent + + +def create(): + """Create a multi-qubit emulator platform with flux pulses.""" + + # load runcard and model params + runcard = load_runcard(FOLDER) + device_name = runcard["device_name"] + + # Specify emulator controller + pulse_simulator = PulseSimulator() + instruments = {"pulse_simulator": pulse_simulator} + instruments = load_instrument_settings(runcard, instruments) + + # extract quantities from runcard for platform declaration + qubits, couplers, pairs = load_qubits(runcard) + settings = load_settings(runcard) + + # Create channel object + channels = ChannelMap() + channels |= (f"readout-{q}" for q in qubits) + channels |= (f"drive-{q}" for q in qubits) + channels |= (f"flux-{q}" for q in qubits) + + # map channels to qubits + for q, qubit in qubits.items(): + qubit.readout = channels[f"readout-{q}"] + qubit.drive = channels[f"drive-{q}"] + qubit.flux = channels[f"flux-{q}"] + + channels[f"drive-{q}"].qubit = qubit + channels[f"flux-{q}"].qubit = qubit + qubit.sweetspot = 0 # not used + + return Platform( + device_name, + qubits, + pairs, + instruments, + settings, + resonator_type="2D", + ) diff --git a/tests/emulators/default_q01c0_flux/parameters.json b/tests/emulators/default_q01c0_flux/parameters.json new file mode 100644 index 0000000000..ac12531c3a --- /dev/null +++ b/tests/emulators/default_q01c0_flux/parameters.json @@ -0,0 +1,197 @@ +{ + "device_name": "default_q01c0_flux", + "nqubits": 2, + "ncouplers": 1, + "description": "2 qubit 1 coupler test device with flux pulses and iSWAP", + "settings": { + "nshots": 4096, + "relaxation_time": 300000 + }, + "instruments": { + "pulse_simulator": { + "model_params": { + "model_name": "general_coupler_model", + "topology": [ + [0, 1] + ], + "nqubits": 2, + "ncouplers": 1, + "qubits_list": ["0", "1"], + "couplers_list": ["c0"], + "nlevels_q": [2, 2], + "nlevels_c": [2], + "readout_error": { + "0": [0.01, 0.02], + "1": [0.01, 0.02] + }, + "drive_freq": { + "0": 4.5545, + "1": 4.62381, + "c0": 6.4 + }, + "T1": { + "0": 0.0, + "1": 0.0, + "c0": 0.0 + }, + "T2": { + "0": 0.0, + "1": 0.0, + "c0": 0.0 + }, + "max_lo_freq": { + "0": 4.5545, + "1": 4.62381, + "c0": 6.4 + }, + "flux_quanta": { + "0": 0.3183098861837907, + "1": 0.3183098861837907, + "c0": 0.3183098861837907 + }, + "rabi_freq": { + "0": 0.334, + "1": 0.334, + "c0": 0.0 + }, + "anharmonicity": { + "0": -0.3, + "1": -0.31, + "c0": 0.0 + }, + "coupling_strength": { + "1_0": 0.0066, + "1_c0": 0.0855, + "0_c0": 0.0897 + } + }, + "simulation_config": { + "simulation_engine_name": "Qutip", + "sampling_rate": 5.0, + "sim_sampling_boost": 1, + "runcard_duration_in_dt_units": false, + "instant_measurement": true, + "simulate_dissipation": true, + "output_state_history": true + }, + "sim_opts": null, + "bounds": { + "waveforms": 1, + "readout": 1, + "instructions": 1 + } + } + }, + "qubits": [0, 1], + "couplers": [0], + "topology": { + "0": [0, 1] + }, + "native_gates": { + "single_qubit": { + "0": { + "RX": { + "duration": 24.967, + "amplitude": 0.1, + "frequency": 4554500000.0, + "shape": "Drag(4, -2.4305800297101414)", + "type": "qd", + "start": 0, + "phase": 0 + }, + "MZ": { + "duration": 22400, + "amplitude": 0.03, + "frequency": 7301661824.000001, + "shape": "Rectangular()", + "type": "ro", + "start": 0, + "phase": 1.5636758979377372 + } + }, + "1": { + "RX": { + "duration": 25.078, + "amplitude": 0.1, + "frequency": 4623810000.0, + "shape": "Drag(4, 0.6571522139248822)", + "type": "qd", + "start": 0, + "phase": 0 + }, + "MZ": { + "duration": 22400, + "amplitude": 0.056500000000000015, + "frequency": 7393428047.0, + "shape": "Rectangular()", + "type": "ro", + "start": 0, + "phase": -3.022547221302854 + } + } + }, + "coupler": { + "0": { + "CP": { + "type": "coupler", + "duration": 0, + "amplitude": 0, + "shape": "Rectangular()", + "coupler": 0, + "relative_start": 0 + } + } + }, + "two_qubit": { + "0-1": { + "iSWAP": [ + { + "duration": 41.131, + "amplitude": 0.1337, + "shape": "Rectangular()", + "qubit": 0, + "type": "qf", + "start": 0 + } + ] + } + } + }, + "characterization": { + "single_qubit": { + "0": { + "readout_frequency": 7301661824.000001, + "drive_frequency": 4554500000.0, + "anharmonicity": -300000000.0, + "Ec": 0, + "Ej": 0, + "g": 0, + "T1": 0.0, + "T2": 0.0, + "sweetspot": 0, + "mean_gnd_states": "1.5417+0.1817j", + "mean_exc_states": "2.5332-0.5914j", + "threshold": 1.5435, + "iq_angle": 2.602 + }, + "1": { + "readout_frequency": 7393428047.0, + "drive_frequency": 4623810000.0, + "anharmonicity": -310000000.0, + "Ec": 0, + "Ej": 0, + "g": 0, + "T1": 0.0, + "T2": 0.0, + "sweetspot": 0, + "mean_gnd_states": "(0+0j)", + "mean_exc_states": "(0+0j)" + } + }, + "coupler": { + "0": { + "sweetspot": 0.0 + } + } + } +} diff --git a/tests/emulators/default_q01c0_flux/platform.py b/tests/emulators/default_q01c0_flux/platform.py new file mode 100644 index 0000000000..e31fac2df1 --- /dev/null +++ b/tests/emulators/default_q01c0_flux/platform.py @@ -0,0 +1,66 @@ +import pathlib + +from qibolab.channels import ChannelMap +from qibolab.instruments.emulator.pulse_simulator import PulseSimulator +from qibolab.platform import Platform +from qibolab.serialize import ( + load_instrument_settings, + load_qubits, + load_runcard, + load_settings, +) + +FOLDER = pathlib.Path(__file__).parent + + +def create(): + """Create a multi-qubit emulator platform with flux pulses.""" + + # load runcard and model params + runcard = load_runcard(FOLDER) + device_name = runcard["device_name"] + + # Specify emulator controller + pulse_simulator = PulseSimulator() + instruments = {"pulse_simulator": pulse_simulator} + instruments = load_instrument_settings(runcard, instruments) + + # extract quantities from runcard for platform declaration + qubits, couplers, pairs = load_qubits(runcard) + settings = load_settings(runcard) + + # Create channel object + channels = ChannelMap() + channels |= (f"readout-{q}" for q in qubits) + channels |= (f"drive-{q}" for q in qubits) + channels |= (f"flux-{q}" for q in qubits) + channels |= (f"flux-c{c}" for c in couplers) + + # map channels to qubits + for q, qubit in qubits.items(): + qubit.readout = channels[f"readout-{q}"] + qubit.drive = channels[f"drive-{q}"] + qubit.flux = channels[f"flux-{q}"] + + channels[f"drive-{q}"].qubit = qubit + channels[f"flux-{q}"].qubit = qubit + qubit.sweetspot = 0 # not used + + # map channels to couplers + for c, coupler in couplers.items(): + ##coupler.drive = channels[f"drive-{c}"] + coupler.flux = channels[f"flux-c{c}"] + + ##channels[f"drive-{c}"].coupler = coupler + channels[f"flux-c{c}"].coupler = coupler + coupler.sweetspot = 0 # not used + + return Platform( + device_name, + qubits, + pairs, + instruments, + settings, + resonator_type="2D", + couplers=couplers, + ) diff --git a/tests/emulators/ibmfakebelem_q01/parameters.json b/tests/emulators/ibmfakebelem_q01/parameters.json index 39ef172066..5854a50fa9 100644 --- a/tests/emulators/ibmfakebelem_q01/parameters.json +++ b/tests/emulators/ibmfakebelem_q01/parameters.json @@ -36,7 +36,7 @@ "0": 106797.94866226273, "1": 63765.78004446571 }, - "lo_freq": { + "max_lo_freq": { "0": 5.090167234445013, "1": 5.245306068285918 }, diff --git a/tests/test_emulator.py b/tests/test_emulator.py index f87a6e014d..07339c89be 100644 --- a/tests/test_emulator.py +++ b/tests/test_emulator.py @@ -16,7 +16,10 @@ general_no_coupler_model, models_template, ) -from qibolab.instruments.emulator.pulse_simulator import AVAILABLE_SWEEP_PARAMETERS +from qibolab.instruments.emulator.pulse_simulator import ( + AVAILABLE_SWEEP_PARAMETERS, + make_emulator_runcard, +) from qibolab.platform.load import PLATFORMS from qibolab.pulses import PulseSequence from qibolab.sweeper import Parameter, QubitParameter, Sweeper @@ -350,3 +353,8 @@ def test_extend_op_dim_exceptions(): with pytest.raises(Exception) as excinfo: extend_op_dim(op_qobj, *index_list) assert "mismatch" in str(excinfo.value) + + +def test_make_emulator_runcard(): + platform = create_platform("dummy_couplers") + make_emulator_runcard(platform)