{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "d30279ee", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:23.923991Z", "iopub.status.busy": "2024-04-26T18:21:23.923710Z", "iopub.status.idle": "2024-04-26T18:21:23.927292Z", "shell.execute_reply": "2024-04-26T18:21:23.926868Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "563d4e5c", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Introduction to the Simulator\n", "======================================\n", "\n", "|True-Q| offers a highly versatile :py:class:`~trueq.Simulator` that allows\n", "users to simulate arbitrary circuits with a wide variety of noise models and options\n", "for noise model customization. In particular, the simulator can be used to:\n", "\n", "#. Simulate the final quantum state of a circuit. This will be a pure state vector\n", " if the noise model is ideal or has only unitary noise, and will be a density\n", " matrix otherwise.\n", "#. Simulate the total effective operator of a circuit. This will be a unitary matrix\n", " if the noise model is ideal or has only unitary noise, and will be a superoperator\n", " otherwise.\n", "#. Sample a given number of bitstrings (or ditstrings if higher energy levels are\n", " defined) from the distribution defined by the final simulated quantum state of a\n", " circuit. These results can be returned, or can be automatically populated into\n", " the respective :py:attr:`~trueq.Circuit.results` attributes of the given circuits.\n", "\n", "In this example, we go through the basic features of the |True-Q| simulator.\n", "We begin by instantiating a circuit to play with:" ] }, { "cell_type": "code", "execution_count": 2, "id": "317991af", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:23.929287Z", "iopub.status.busy": "2024-04-26T18:21:23.928908Z", "iopub.status.idle": "2024-04-26T18:21:26.234080Z", "shell.execute_reply": "2024-04-26T18:21:26.233619Z" } }, "outputs": [ { "data": { "text/html": [ "
0 1 Key: Labels: (0,) Name: Gate.x Aliases: Gate.x Gate.cliff1 Generators: X: 180.00 1.00 1.00 X Labels: (1,) Name: Gate.y Aliases: Gate.y Gate.cliff2 Generators: Y: 180.00 -1.00j 1.00j Y Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M
" ], "text/plain": [ "DisplayWrapper(" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.plot_mat(sim.operator(circuit).mat())" ] }, { "cell_type": "raw", "id": "5b0a1838", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, we can use a simulator to populate the :py:attr:`~trueq.Circuit.results`\n", "attribute of the circuit. Currently, this attribute is just an empty dictionary:" ] }, { "cell_type": "code", "execution_count": 7, "id": "4e70ca71", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.331895Z", "iopub.status.busy": "2024-04-26T18:21:26.331502Z", "iopub.status.idle": "2024-04-26T18:21:26.334723Z", "shell.execute_reply": "2024-04-26T18:21:26.334299Z" } }, "outputs": [ { "data": { "text/plain": [ "Results({}, dim=None)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit.results" ] }, { "cell_type": "raw", "id": "dc49b654", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "But after calling the :py:meth:`~trueq.Simulator.run` method, it has\n", ":py:attr:`~trueq.Circuit.results` that are randomly sampled bitstrings from the final\n", "state of a state simulation:" ] }, { "cell_type": "code", "execution_count": 8, "id": "af212c37", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.336643Z", "iopub.status.busy": "2024-04-26T18:21:26.336339Z", "iopub.status.idle": "2024-04-26T18:21:26.340272Z", "shell.execute_reply": "2024-04-26T18:21:26.339860Z" } }, "outputs": [ { "data": { "text/plain": [ "Results({'11': 100})" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim.run(circuit, n_shots=100)\n", "circuit.results" ] }, { "cell_type": "raw", "id": "97bcd32d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In this case, all 100 shots end in the ``11`` state because the final state is a\n", "computational eigenstate.\n", "\n", "When re-running the simulation, it will overwrite the existing\n", ":py:attr:`~trueq.Circuit.results` unless\n", "otherwise specified. Another option is to call the simulator's\n", ":py:meth:`~trueq.Simulator.sample` method which returns a :py:class:`~trueq.Results`\n", "object directly without affecting the circuit's :py:attr:`~trueq.Circuit.results`\n", "attribute:" ] }, { "cell_type": "code", "execution_count": 9, "id": "49126a9f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.342215Z", "iopub.status.busy": "2024-04-26T18:21:26.341890Z", "iopub.status.idle": "2024-04-26T18:21:26.345684Z", "shell.execute_reply": "2024-04-26T18:21:26.345275Z" } }, "outputs": [ { "data": { "text/plain": [ "Results({'11': 100})" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = sim.sample(circuit, n_shots=100)\n", "results" ] }, { "cell_type": "raw", "id": "ce08aecc", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We can also specify infinite shots to get the expectation values of each bitstring:" ] }, { "cell_type": "code", "execution_count": 10, "id": "37285403", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.347650Z", "iopub.status.busy": "2024-04-26T18:21:26.347289Z", "iopub.status.idle": "2024-04-26T18:21:26.352941Z", "shell.execute_reply": "2024-04-26T18:21:26.351608Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "data": { "text/plain": [ "Results({'11': 1.0})" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim.run(circuit, n_shots=np.inf, overwrite=True)\n", "circuit.results" ] }, { "cell_type": "raw", "id": "324616d7", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Adding Noise Sources\n", "--------------------\n", "\n", "We construct a noisy simulator by appending noise sources to a noiseless simulator.\n", "The example below demonstrates this using two of |True-Q|\\'s built-in noise sources:" ] }, { "cell_type": "code", "execution_count": 11, "id": "9130d413", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.354874Z", "iopub.status.busy": "2024-04-26T18:21:26.354568Z", "iopub.status.idle": "2024-04-26T18:21:26.357253Z", "shell.execute_reply": "2024-04-26T18:21:26.356837Z" } }, "outputs": [], "source": [ "# Add an overrotation noise, which causes single qubit gates to be simulated as U^1.02\n", "sim.add_overrotation(single_sys=0.02)\n", "\n", "# Add a depolarizing noise source at a rate of 0.8% per acted-on qubit per cycle\n", "sim.add_depolarizing(p=0.008)\n", "\n", "# Note that noisy simulators can be constructed as one-liners\n", "other_sim = tq.Simulator().add_overrotation(single_sys=0.02).add_depolarizing(p=0.008)" ] }, { "cell_type": "raw", "id": "d4227cdd", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " Note that simulation is cycle-based.\n", " Each noise source is called to add noise to the quantum state (or to the\n", " superoperator if :py:meth:`~trueq.Simulator.operator` is called) for each cycle\n", " in a circuit. The order in which noise sources are applied is dictated by the\n", " order in which they were added to the simulator.\n", "\n", "Now, since the simulator applies a depolarizing noise source, we get a density\n", "operator rather than a pure state:" ] }, { "cell_type": "code", "execution_count": 12, "id": "18c604d7", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.359025Z", "iopub.status.busy": "2024-04-26T18:21:26.358775Z", "iopub.status.idle": "2024-04-26T18:21:26.432904Z", "shell.execute_reply": "2024-04-26T18:21:26.432457Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.plot_mat(sim.state(circuit).mat())" ] }, { "cell_type": "raw", "id": "10dda83d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "After calling the :py:meth:`~trueq.Simulator.run` method (overwriting the\n", ":py:attr:`~trueq.Circuit.results` from above), we end up with noisy outcomes:" ] }, { "cell_type": "code", "execution_count": 13, "id": "e869756c", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:26.434920Z", "iopub.status.busy": "2024-04-26T18:21:26.434595Z", "iopub.status.idle": "2024-04-26T18:21:26.438797Z", "shell.execute_reply": "2024-04-26T18:21:26.438380Z" } }, "outputs": [ { "data": { "text/plain": [ "Results({'11': 100})" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sim.run(circuit, n_shots=100, overwrite=True)\n", "circuit.results" ] }, { "cell_type": "raw", "id": "c7f9a06a", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "For more information on both built-in and custom noise sources, check out\n", ":doc:`simulator_advanced` next." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "nbsphinx,raw_mimetype,-all", "main_language": "python", "notebook_metadata_filter": "-all", "text_representation": { "extension": ".py", "format_name": "percent" } }, "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }