diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2438b57..a63ff90 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -94,3 +94,29 @@ jobs: with: name: html_docs path: docs/_build/html + ffsim: + name: tests-ffsim-python${{ matrix.python-version }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: [3.8, 3.11] + os: ["ubuntu-latest", "macOS-latest"] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Pip cache + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-${{ matrix.python-version }}-pip-tests-${{ hashFiles('setup.py','requirements-dev.txt','constraints.txt') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.python-version }}-pip-tests- + ${{ runner.os }}-${{ matrix.python-version }}-pip- + ${{ runner.os }}-${{ matrix.python-version }} + - name: Install Deps + run: python -m pip install -U tox setuptools virtualenv wheel + - name: Run ffsim tests + run: tox -e ffsim \ No newline at end of file diff --git a/README.md b/README.md index 9acd63d..51974e8 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Here, we extend this concept and allow wires to represent individual internal st This currently covers two settings, one for fermionic modes and one for spin modes, demonstrating that a broad range of hardware can be accommodated in Qiskit. -We encourage new users to familiarize themselves with the basic functionalities through the tutorial-style python notebooks in `/docs/tutorials`. +We encourage new users to familiarize themselves with the basic functionalities through the tutorial-style python notebooks in [`docs/tutorials`](docs/tutorials). These require an environment to execute `.ipynb` notebooks such as jupyter lab. ## Installation @@ -30,6 +30,10 @@ or Pypi ```bash pip install qiskit-cold-atom ``` +To install Qiskit Cold Atom with the [ffsim fermion simulator backend](#cold-atomic-circuits) (not supported on Windows), specify the `ffsim` extra in the `pip` install command, e.g. +```bash +pip install "qiskit-cold-atom[ffsim]" +``` ## Setting up the Cold Atom Provider Qiskit Cold Atom includes local simulator backends to explore the cold atomic hardware. In order to access @@ -59,10 +63,20 @@ spin_simulator_backend = provider.get_backend("collective_spin_simulator") ## Cold atomic circuits -The circuits that can be run on the cold atomic hardware explored in this project use different gates -from the qubit circuits typically employed in Qiskit, because their systems are described by different -Hilbert spaces. -To see how to define and run gates through quantum circuits in this setting, please refer to the tutorials (in `/docs/tutorials`). +The circuits that can be run on the cold atomic hardware explored in this project use different gates +from the circuits typically employed in Qiskit, because these hardware are not built from qubits, +but from fermions or spins. +Qiskit Cold Atom includes basic simulators for both the fermion and spin settings that can be used +to simulate small circuits. See [Introduction & Fermionic Circuits](docs/tutorials/01_introduction_and_fermionic_circuits.ipynb) +and [Spin circuits](docs/tutorials/02_spin_circuits.ipynb) for tutorials on how to define and run gates through +quantum circuits in these settings. + +Qiskit Cold Atom also includes a high-performance simulator for fermionic circuits based on +[ffsim](https://github.com/qiskit-community/ffsim), which can handle much larger circuits than the basic simulator mentioned before. The ffsim simulator is not supported on Windows, and in order +for it to be available, Qiskit Cold Atom must be installed with the `ffsim` extra, e.g. +```bash +pip install "qiskit-cold-atom[ffsim]" +``` ## Documentation diff --git a/docs/tutorials/01_introduction_and_fermionic_circuits.ipynb b/docs/tutorials/01_introduction_and_fermionic_circuits.ipynb index f9c9eeb..924d715 100644 --- a/docs/tutorials/01_introduction_and_fermionic_circuits.ipynb +++ b/docs/tutorials/01_introduction_and_fermionic_circuits.ipynb @@ -59,7 +59,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -76,7 +76,7 @@ "\n", "circ1.fload([1, 2]) # Load fermions into modes 1 and 2.\n", "\n", - "circ1.draw(output='mpl', style=\"clifford\")" + "circ1.draw(output=\"mpl\", style=\"clifford\")" ] }, { @@ -129,7 +129,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -142,7 +142,7 @@ "source": [ "circ2 = backend.initialize_circuit([1, 0, 1])\n", "\n", - "circ2.draw(output='mpl', style=\"clifford\")" + "circ2.draw(output=\"mpl\", style=\"clifford\")" ] }, { @@ -207,7 +207,7 @@ "import numpy as np\n", "\n", "# define the Hamiltonian as a FermionicOp\n", - "H_swap = np.pi/2 * FermionicOp({\"+_0 -_1\": 1, \"-_0 +_1\": -1}, num_spin_orbitals=2)" + "H_swap = np.pi / 2 * FermionicOp({\"+_0 -_1\": 1, \"-_0 +_1\": -1}, num_spin_orbitals=2)" ] }, { @@ -311,7 +311,7 @@ "outputs": [], "source": [ "# define a gate which will create superposition in the circuit\n", - "split_fermions = FermionicGate(name=\"split_fermion\", num_modes=2, generator=H_swap/2)" + "split_fermions = FermionicGate(name=\"split_fermion\", num_modes=2, generator=H_swap / 2)" ] }, { @@ -324,7 +324,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAD2CAYAAAAKwzsuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABM10lEQVR4nO3daUBV1d7H8e+Bw4xMiiCIA5A4Dzhk6XU2x8zM1FKcMkszKzPLubpdZy1vV21wSstSb2lq3ZxLMzMHnDOHFFFxRFAmGZ8XPJw8gTLI4YD+Pq9gn7X2/u/NUX6ss/bahoyMjAxERERERMRibKxdgIiIiIjI/U6hW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMKM1i5ARERESoZjx47l2iY5OZlPPvmEwYMHY29vf9e2VatWLazSRIo9jXSLiIhIoUlOTmbOnDkkJydbuxSRYkWhW0RERETEwhS6RUREREQsTKFbRERECo3RaOSpp57CaNRtYyK3M2RkZGRYuwgREREp/vJyI2V+6EZKeZBopFtEREQKTVJSEuPGjSMpKcnapYgUKwrdIiIiUmhSU1P5+uuvSU1NtXYpIsWKJlxJkdm/ChJjrF1Fdk4eUPfJojlWcb0Gkj9F+Z4RkYLr0qULp06dsnYZBAUFsWbNGmuXIVam0C1FJjEG4q9Zuwrr0jUQESk6p06d4ujRo9YuQwTQ9BIREREpRPb29rz00ku5Po1S5EGjkW4REREpNPb29gwbNszaZYgUOxrpFhERkUKTkJDAoEGDSEhIsHYpIsWKQreIiIgUmvT0dHbs2EF6erq1SxEpVhS6RUREREQsTKFbRERERMTCFLpFRESk0Njb2/Puu+9q9RKRvynRoXvLli00a9YMLy8vDAYDEyZMsHZJVrNr1y4MBgMff/yxtUsREZEHmL29PU8//XSJD92lS5cmNDSURo0aUaNGjTydT8OGDWnZsmURVCcl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L7GUtLQ0rly5kms7Ly+v+2b6RUREBB9++CEODg6mp1oC/OMf/+B///ufFSsTERERubOkpCRrl5AvCt23iYyMNAued7J161ZatGhh+YKKQMWKFXNchlBERKQgXFxc2L17t+nBbiKSSaH7Nr6+vmzcuDHXdlnrSIqIiIi59PR0oqKiCAwMzHXJQJEHiUL3bRwdHfP0YB0RERHJWWJiIl26dNHqJSJ/oxspRUREREQsTKFbRERERMTCFLpFRESkUOkmSpHsNKdbRERECo2rqyt79uyxdhkixY5GukVERKTQpKam8vPPP5OammrtUkSKFY10i4jcB5w8rF2BWFpJ+RknJSXx/PPPa/USuaugoKAC9UtPT+dKdCwAXh5uRMfcAMDbyx0bm/yPJRe0joJQ6BYRuQ/UfdLaFYiI5N2aNWsK1C/2RhyT5y0D4KWwrsxZuhqA0UOexd2teP+Rp+klIiIiIiIWptAtIiIihcZgMBAUFITBYLB2KSLFiqaXiIiISKFxcXFh3bp11i5DpNjRSLeIiIgUmuTkZFauXElycrK1SxEpVhS6RUREpNAkJyczYcIEhW6Rv1HoFhERERGxMIVuEREREREL042UIiIikidVq1bNtc2tW7eYOHEitWrVwsHBoQiqEikZFLpFRESk0Dg4OPD2229buwyRYkfTS0RERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6pUgMGTKEcuXK4ebmRq1atVi3bp21SxIREbGoy5cv0759e5ydnalZsya//vqrtUsqsIkTJ1K9enVsbGz46quvrF3OPbl16xYDBgygfPnyuLu707JlS44cOWLx4yp0S5F45ZVXOH36NDdu3GDRokX06dOH69evW7ssERERi3nxxRcJDAzk2rVrvPHGGzz11FPcunXL2mUVyEMPPcTs2bNp1KiRtUu5Z6mpqQQGBvLrr78SHR3N448/TteuXS1+XIVuKRJVq1bF0dHR9P2tW7eIioqyYkUiIiKWc/PmTdatW8fEiRNxcnKiX79+lCpVih9//NHapRVInz59aNu2rdnv8pLKxcWF8ePHU758eWxtbRk2bBinTp3i2rVrFj2uQrcUmaFDh+Lk5ETDhg1p06YN1apVs3ZJIiIiFnHixAk8PDzw8fEx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bt26tG7dmqeffpqGDfO2uHxBJCTdYu/h4wA0bVBbgVtERETuewrdRcjWNufF9O+0PUvWDKDp06dTt27dHNv4+fmZ2j722GP8/vvvvPLKKzRo0AB3d3dsbW1ZtGgRy5YtM3uC1HvvvcfAgQP57rvv2L59O/Pnz2f69OmMGjWKqVOn5npOcXEJ9zS95Osfim5hfREREZF7pekl97GHHnoIyJw20qZNm7u2PXjwIAcOHGDChAm88847Zq/d6cbIwMBAXn75ZV5++WWSkpJo164d06ZN4/XXXy/QlBMRERERMafQXQK0a9eOsmXLMmXKFHr27ImXl5fZ64mJiaSmplKqVCnTqPnf7489fPgwq1atMtsWGxuLs7MzdnZ2pm2Ojo5Uq1aNbdu2cf369VxDd37ndGsut4iIiJRkmtN9H3NxcWHJkiV07dqVkJAQBg4cSHBwMDExMRw7doxvvvmGVatW0aJFC6pVq0aNGjWYNm0aCQkJhISEcPz4cT7++GNq1arF3r17TfvdunUrgwcP5qmnniIkJARXV1f27t3L/PnzefjhhwkJCcm1Nlsbmzx/xBKfkMS+IycAaNesER5upQp2QURERERKGIXuEqJdu3bs3r2bKVOm8Pnnn3PlyhU8PT0JCgpixIgR1K6d+WhaW1tbvvvuO0aOHMlnn31GfHw8NWvW5LPPPuPAgQNmobtOnTp069aNH3/8kS+++IK0tDQqVKjAmDFjeP311wv9HA78fpLk5BT8fEpTLbhioe9fREREpLjSOt1SZDIyMjhx+hxGOyOBAeWsXY6IiIhIkVHoFhERERGxsPw/OF5ERERERPJFoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELOz/AFMAzKloRUlkAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt0AAAD2CAYAAAAKwzsuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABM10lEQVR4nO3daUBV1d7H8e+Bw4xMiiCIA5A4Dzhk6XU2x8zM1FKcMkszKzPLubpdZy1vV21wSstSb2lq3ZxLMzMHnDOHFFFxRFAmGZ8XPJw8gTLI4YD+Pq9gn7X2/u/NUX6ss/bahoyMjAxERERERMRibKxdgIiIiIjI/U6hW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMKM1i5ARERESoZjx47l2iY5OZlPPvmEwYMHY29vf9e2VatWLazSRIo9jXSLiIhIoUlOTmbOnDkkJydbuxSRYkWhW0RERETEwhS6RUREREQsTKFbRERECo3RaOSpp57CaNRtYyK3M2RkZGRYuwgREREp/vJyI2V+6EZKeZBopFtEREQKTVJSEuPGjSMpKcnapYgUKwrdIiIiUmhSU1P5+uuvSU1NtXYpIsWKJlxJkdm/ChJjrF1Fdk4eUPfJojlWcb0Gkj9F+Z4RkYLr0qULp06dsnYZBAUFsWbNGmuXIVam0C1FJjEG4q9Zuwrr0jUQESk6p06d4ujRo9YuQwTQ9BIREREpRPb29rz00ku5Po1S5EGjkW4REREpNPb29gwbNszaZYgUOxrpFhERkUKTkJDAoEGDSEhIsHYpIsWKQreIiIgUmvT0dHbs2EF6erq1SxEpVhS6RUREREQsTKFbRERERMTCFLpFRESk0Njb2/Puu+9q9RKRvynRoXvLli00a9YMLy8vDAYDEyZMsHZJVrNr1y4MBgMff/yxtUsREZEHmL29PU8//XSJD92lS5cmNDSURo0aUaNGjTydT8OGDWnZsmURVCcl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L7GUtLQ0rly5kms7Ly+v+2b6RUREBB9++CEODg6mp1oC/OMf/+B///ufFSsTERERubOkpCRrl5AvCt23iYyMNAued7J161ZatGhh+YKKQMWKFXNchlBERKQgXFxc2L17t+nBbiKSSaH7Nr6+vmzcuDHXdlnrSIqIiIi59PR0oqKiCAwMzHXJQJEHiUL3bRwdHfP0YB0RERHJWWJiIl26dNHqJSJ/oxspRUREREQsTKFbRERERMTCFLpFRESkUOkmSpHsNKdbRERECo2rqyt79uyxdhkixY5GukVERKTQpKam8vPPP5OammrtUkSKFY10i4jcB5w8rF2BWFpJ+RknJSXx/PPPa/USuaugoKAC9UtPT+dKdCwAXh5uRMfcAMDbyx0bm/yPJRe0joJQ6BYRuQ/UfdLaFYiI5N2aNWsK1C/2RhyT5y0D4KWwrsxZuhqA0UOexd2teP+Rp+klIiIiIiIWptAtIiIihcZgMBAUFITBYLB2KSLFiqaXiIiISKFxcXFh3bp11i5DpNjRSLeIiIgUmuTkZFauXElycrK1SxEpVhS6RUREpNAkJyczYcIEhW6Rv1HoFhERERGxMIVuEREREREL042UIiIikidVq1bNtc2tW7eYOHEitWrVwsHBoQiqEikZFLpFRESk0Dg4OPD2229buwyRYkfTS0RERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6pUgMGTKEcuXK4ebmRq1atVi3bp21SxIREbGoy5cv0759e5ydnalZsya//vqrtUsqsIkTJ1K9enVsbGz46quvrF3OPbl16xYDBgygfPnyuLu707JlS44cOWLx4yp0S5F45ZVXOH36NDdu3GDRokX06dOH69evW7ssERERi3nxxRcJDAzk2rVrvPHGGzz11FPcunXL2mUVyEMPPcTs2bNp1KiRtUu5Z6mpqQQGBvLrr78SHR3N448/TteuXS1+XIVuKRJVq1bF0dHR9P2tW7eIioqyYkUiIiKWc/PmTdatW8fEiRNxcnKiX79+lCpVih9//NHapRVInz59aNu2rdnv8pLKxcWF8ePHU758eWxtbRk2bBinTp3i2rVrFj2uQrcUmaFDh+Lk5ETDhg1p06YN1apVs3ZJIiIiFnHixAk8PDzw8fEx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bt26tG7dmqeffpqGDfO2uHxBJCTdYu/h4wA0bVBbgVtERETuewrdRcjWNufF9O+0PUvWDKDp06dTt27dHNv4+fmZ2j722GP8/vvvvPLKKzRo0AB3d3dsbW1ZtGgRy5YtM3uC1HvvvcfAgQP57rvv2L59O/Pnz2f69OmMGjWKqVOn5npOcXEJ9zS95Osfim5hfREREZF7pekl97GHHnoIyJw20qZNm7u2PXjwIAcOHGDChAm88847Zq/d6cbIwMBAXn75ZV5++WWSkpJo164d06ZN4/XXXy/QlBMRERERMafQXQK0a9eOsmXLMmXKFHr27ImXl5fZ64mJiaSmplKqVCnTqPnf7489fPgwq1atMtsWGxuLs7MzdnZ2pm2Ojo5Uq1aNbdu2cf369VxDd37ndGsut4iIiJRkmtN9H3NxcWHJkiV07dqVkJAQBg4cSHBwMDExMRw7doxvvvmGVatW0aJFC6pVq0aNGjWYNm0aCQkJhISEcPz4cT7++GNq1arF3r17TfvdunUrgwcP5qmnniIkJARXV1f27t3L/PnzefjhhwkJCcm1Nlsbmzx/xBKfkMS+IycAaNesER5upQp2QURERERKGIXuEqJdu3bs3r2bKVOm8Pnnn3PlyhU8PT0JCgpixIgR1K6d+WhaW1tbvvvuO0aOHMlnn31GfHw8NWvW5LPPPuPAgQNmobtOnTp069aNH3/8kS+++IK0tDQqVKjAmDFjeP311wv9HA78fpLk5BT8fEpTLbhioe9fREREpLjSOt1SZDIyMjhx+hxGOyOBAeWsXY6IiIhIkVHoFhERERGxsPw/OF5ERERERPJFoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELEyhW0RERETEwhS6RUREREQsTKFbRERERMTCFLpFRERERCxMoVtERERExMIUukVERERELOz/AFMAzKloRUlkAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -341,7 +341,7 @@ "qc_sup.append(swap_fermions, qargs=[1, 2])\n", "\n", "qc_sup.measure_all()\n", - "qc_sup.draw(output='mpl', style=\"clifford\", scale=0.8)" + "qc_sup.draw(output=\"mpl\", style=\"clifford\", scale=0.8)" ] }, { @@ -354,7 +354,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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enp6Ii8vTwzu2n5Dn/7NSxeLmpgt87jHa4jLxG3V8GydX/c93pKSEjg4OKCgoEDMg8o0qj1elUqFKVOmoHv37vj444/rNK8hQ4agXbt2uHz5MgoLC8V/BM2ebkFBAZycnLTeozlsXNnesIa5uTnMzc116qampjqHoBQKRaV77M8HPhkumUxW5aHJyupyubzS0w5V1atax2q67lVVr0nvVdUNcZnIMNV13avuKcNGdWKxuLgY6enpSE1NhZmZmdaDMHbs2AHg2eEimUyGAwcOvHR+zs7OAIAnT56ItRedx33R+V8iIqL60Kh2vczNzfHBBx9UOi0xMRHp6ekYPXo0XFxcKn1Yxp+VlJTg999/h5WVlRjAADBo0CD84x//QGxsrM4h62PHjoljiIiIGkKjCl5LS0tERkZWOi0kJATp6elYsmSJGJhFRUW4d+8eOnTooDW2tLQU06dPR1FREaZOnap1OCA4OBihoaHYtGkT3n//ffFe3qysLERERMDZ2RljxoxpoCUkIiJj16iCt6YePnwIb29v9OrVC506dYKrqyvu37+PX3/9FVlZWejWrRvWrl2r9R4HBwdERERg0qRJ8PPzw/jx4wE8e2Tkw4cPsXfvXj61ioiIGkyTDl5HR0fMnDkT586dQ0xMDPLz82FpaYlOnTph7ty5mD17NiwtLXXeN3HiRDg7O2PVqlWIioqCTCZDjx498OmnnyIgIEAPS0JERMai0d1O1NQUFhbCzs7upZePVwdvUTA8W+fruwNqCNxWDU99bKvVzYNGdVUzERGRoWPwEhERSYjBS0REJCEGLxERkYQYvERERBJi8BIREUmIwUtERCQhBi8REZGEGLxEREQSYvASERFJiMFLREQkIQYvERGRhBi8REREEmLwEhERSYjBS0REJCEGLxERkYQYvERERBJi8BIREUmIwUtERCQhBi8REZGEGLxEREQSYvASERFJiMFLREQkIQYvERGRhBi8REREEmLwEhERSYjBS0REJCEGLxERkYQYvERERBJi8BIREUmIwUtERCQhBi8REZGEGLxEREQSYvASERFJiMFLREQkIQYvERGRhGodvImJibhz584Lx2RmZiIxMbG2H0FERGRwah28/v7+2L59+wvH/Pjjj/D396/tRxARERmcWgevIAgvHaNWqyGTyWr7EURERAanQc/xpqenw87OriE/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", "text/plain": [ "
" ] @@ -402,7 +402,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "counts : {'0011': 1, '1010': 1, '1100': 5, '0101': 3}\n", + "counts : {'1010': 1, '0011': 1, '1100': 5, '0101': 3}\n", "\n", "memory : ['0011', '1010', '0101', '1100', '1100', '0101', '0101', '1100', '1100', '1100']\n", "\n", @@ -419,7 +419,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABJEAAAFvCAYAAAD67lp8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAACWf0lEQVR4nOzdd1hT1xsH8G+YIewlICLIUlERt4gDLdQ9i6NWraN11FW1KtqlrVbRTqtVOxxtVax7VGtVnLhlqIAKiCIIgiIoeyS/P/glJRIMxGAAv5/n6VNzzz3nvvf2HktezhBIJBIJiIiIiIiIiIiIXkBL0wEQEREREREREVHNxyQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREppaPpAIiIiIiIiGqDmzdvVvrctLQ0/PXXXxg2bBjq1atX6XpNmjRRJTQioleCI5GIiIiIiIjULD09HWvWrEF6erqmQyEiUhsmkYiIiIiIiIiISCkmkYiIiIiIiIiISCkmkYiIiIiIiIiISCkmkYiIiIiIiNTM1NQU/fv3h6mpqaZDISJSG4FEIpFoOggiIiIiIqKariq7s6mKu7MRUU3GkUhERERERERqVlBQgHv37qGgoEDToRARqQ2TSERERERERGoWFxeHXr16IS4uTtOhEBGpjY6mAyDSBIkEEBdpOoqXp6ULCASauXZdeYakOZp8f1XBd55ehZrcL9gH6FWoyX2gLpNIJMjNzdV0GJUmEokg4ItCpBFMItFrSVwEnFil6SheXvcZgLaeZq5dV54haY4m319V8J2nV6Em9wv2AXoV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gt27d2s6DCIiteJIJCIiIiIiIiIiUopJJCIiIiIiIjWLjo6Gp6cnoqOjNR0KEZHaMIlERERERESkZhKJBEVFRZBIJJoOhYhIbbgmEhGpREsX6D5D01FQbaalq+kIqobvPL0Kta1fEBHVBSKRCNnZ2Wprb+X6YDzNyYWJoQhzJ40o91kdRCKRWtohqiomkYhIJQIBoK2n6SiIXh2+80RERHWTQCCAoaGh2trT0xdCr6gEevpCGBoalvtMVJtxOhsRERERERERESnFkUhERERERERq5uLigv3798PBwUHToRARqQ2TSERERERERGomFArh5uam6TCIiNSK09mIiIiIiIjULDk5GZ988gmSk5M1HQoRkdowiURERERERKRmmZmZ2LVrFzIzMzUdChGR2jCJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJREREREREpGZaWlpo164dtLT4lYuI6g7+jUZERERERKRmYrEYly9fhlgs1nQoRERqwyQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSERERERGRmpmamqJ///4wNTXVdChERGqjo+kAiIiIiIiI6poGDRpgxYoVmg6DiEitOBKJiIiIiIhIzQoKCnDv3j0UFBRoOhQiIrVhEomIiIiIiEjN4uLi0KtXL8TFxWk6FCIitWESiYiIiIiIiIiIlOKaSERUKRIJIC7SdBRUl2npAgKBpqOoGvYLehm18Z0nIqK6RyKRIDc3V9NhVIlIJIKA/xPVCCaRiKhSxEXAiVWajoLqsu4zAG09TUdRNewX9DJq4ztPRER1T25uLoyMjDQdRpVkZ2fD0NBQ02G8ljidjYiIiIiIiIiIlOJIJCIiIiIiIjVr1qwZYmJiNB0GEZFacSQSEREREREREREpxSQSERERERGRmiUkJGDEiBFISEjQdChERGrDJBIREREREZGa5ebmIjIystbtekVE9CJMIhERERERERERkVJMIhERERERERERkVJMIhERERERERERkVJMIhEREREREamZvb09goKCYG9vr+lQiIjURkfTARAREREREdU1ZmZmGDBggKbDICJSq9diJFJKSgomTpwIJycn6OnpQSAQoGfPnpoOq1YbOnQoBAIBNm3apOlQiIiIiIhqnIyMDGzZsgUZGRmaDoXolTM2Noaj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kxvVLrXxnSd63d28WfF6iurSpEmTar9GdfpqzRY8zc6BiZEhFk59p8Jjddnz98v7f73uv67jmkhERERERERqVlBQgHv37qGgoEDToRARqQ2nsxERqaCgKA85eVlKz7MwsX0F0RBVv4ynqUrPMTQwhb6uwSuIhoio5ouLi0NAQAB27tyJZs2aaTocIiK1YBKJXksSCSAuUn5eTaelCwiqZzduUuJkxHZ8/dc4pecdXckZw1Q3DP/STuk5Hw3biJ7txlZ/MERERERqJJFIkJtb8aY7NZFIJIJAA18GmUSi15K4qG6s78P1NNTP1sKpUomfto17Iuj9o68gIqKKvcokZWXed0db/qadiIiIap/c3FwYGRlpOowqyc7OhqGh4Su/LpNIREQqsDSxg6WJ8pEZRHVFa3c/TYdARERERBrGhbWJiIiIiIiIiEgpjkQiIiIiIiJSs2bNmiEmJkbTYRARqRVHIhERERERERERkVJMIhEREREREalZQkICRowYgYSEBE2HQkSkNkwiERERERERqVlubi4iIyNr3bbhREQvwiQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSERERERGRmtnb2yMoKAj29vaaDoWISG3qfBIpJSUFEydOhJOTE/T09CAQCNCzZ09Nh1WrDR06FAKBAJs2bdJ0KERERERENZKZmRkGDBgAMzMzTYdCRLVQw4YNNR2CQjqaDqA65eTkoEuXLoiPj4eFhQVat24NHR0d9OnTR9Oh1WqRkZEAAC8vL80GQkRERERUQ2VkZODw4cPo3bs3LCwsNB0OEVUzbW1teHl5oU2bNmjbti0aNWoEfX19FBcX49GjRwgPD8fVq1dx8eJFZGVlvbCtL7/8EjNmzECvXr1w/vz5V3QHlVOnk0jr169HfHw8fH19cfjwYQiFQk2HVOvl5OQgPj4eurq68PDw0HQ4REREREQ1UkpKCpYsWQIvLy8mkYjqMBsbG0yYMAGTJk164eihoUOHAgDy8/Oxfft2/PTTT7h06VK587788kt88sknAIDDhw/Dzc0N6enp1RO8Cur0dLY9e/YAAD788EMmkNTkxo0bEIvF8PDwgJ6enqbDeS2kZtyF/1wBfv93kaZDISIiIiIiIgC6urr4/PPPkZiYiKVLl1Z6+plQKMS7776Lixcv4t9//5WrVzaBBAAL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uLq6wsvLC2ZmZoiNjcV3330HHR0dzJo1S9PhEREREREREans1q1baNKkiWwn9LqCSSTSiI4dO+L333/HDz/8gPz8fDg4OKB79+5YuHAhHB0dNR0eERERERER0UupawkkgEkktQgPD8f06dMrff748eMxfvz4aoyo5ps2bRqmTZum6TCIiIiIiKqFjY0N5s+fDxsbG02HQkSkNkwiqUFWVhZCQ0Mrfb6fn181RkNERERERJpmZWX1wrVaiYhqIyaR1MDX11fti28TEREREVHtlZWVhfPnz8Pb2xumpqaaDoeISC20NB0AERERERFRXZOUlIRZs2YhKSlJ06EQEakNk0hERERERERERKQUk0hERERERERERKQUk0hERERERERERKQUk0hERERERERqJhQK0bRpUwiFQk2HQkSkNtydjYiIiIiISM1cXFywe/duTYdBRKRWHIlERERERERERERKMYlERERERESkZtHR0fD09ER0dLSmQyEiUhsmkYiIiIiIiNRMIpGgqKgIEolE06EQEakN10Si15KWLtB9hqajeHlauq/2WnXhmVHN9SrfZ3Vhv6CXURvfeSIiorpIJBIhOztbbe2tXB+Mpzm5MDEUYe6kEeU+q4NIJFJLO1XFJBK9lgQCQFtP01HULnxmROWxXxARERHVfgKBAIaGhmprT09fCL2iEujpC2FoaFjuc23G6WxERERERERERKQURyIRERERERGpmYuLC/bv3w8HBwdNh0JEpDZMIhEREREREamZUCiEm5ubpsMgIlIrTmcjIiIiIiJSs+TkZHzyySdITk7WdChERGrDJBIREREREZGaZWZmYteuXcjMzNR0KEREasMkEhERERERERERKcUkEhERERERERERKcUkEhERERERERERKcXd2YiIiIiIiCqhSZMmlT7X1NQUn3/+OTp16gQ7O7tqjIqI6NVhEomIiIiIiEjN7OzssGjRIk2HQUSkVpzORkRERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRK+1kJAQaGtrw9XVVdOhEBER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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJEAAAFvCAYAAAD67lp8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACWf0lEQVR4nOzdd1hT1xsH8G+YIewlICLIUlERt4gDLdQ9i6NWraN11FW1KtqlrVbRTqtVOxxtVax7VGtVnLhlqIAKiCIIgiIoeyS/P/glJRIMxGAAv5/n6VNzzz3nvvf2HktezhBIJBIJiIiIiIiIiIiIXkBL0wEQEREREREREVHNxyQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREppaPpAIiIiIiIiGqDmzdvVvrctLQ0/PXXXxg2bBjq1atX6XpNmjRRJTQioleCI5GIiIiIiIjULD09HWvWrEF6erqmQyEiUhsmkYiIiIiIiIiISCkmkYiIiIiIiIiISCkmkYiIiIiIiIiISCkmkYiIiIiIiNTM1NQU/fv3h6mpqaZDISJSG4FEIpFoOggiIiIiIqKariq7s6mKu7MRUU3GkUhERERERERqVlBQgHv37qGgoEDToRARqQ2TSERERERERGoWFxeHXr16IS4uTtOhEBGpjY6mAyDSBIkEEBdpOoqXp6ULCASauXZdeYakOZp8f1XBd55ehZrcL9gH6FWoyX2gLpNIJMjNzdV0GJUmEokg4ItCpBFMItFrSVwEnFil6SheXvcZgLaeZq5dV54haY4m319V8J2nV6Em9wv2AXoV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gt27d2s6DCIiteJIJCIiIiIiIiIiUopJJCIiIiIiIjWLjo6Gp6cnoqOjNR0KEZHaMIlERERERESkZhKJBEVFRZBIJJoOhYhIbbgmEhGpREsX6D5D01FQbaalq+kIqobvPL0Kta1fEBHVBSKRCNnZ2Wprb+X6YDzNyYWJoQhzJ40o91kdRCKRWtohqiomkYhIJQIBoK2n6SiIXh2+80RERHWTQCCAoaGh2trT0xdCr6gEevpCGBoalvtMVJtxOhsRERERERERESnFkUhERERERERq5uLigv3798PBwUHToRARqQ2TSERERERERGomFArh5uam6TCIiNSK09mIiIiIiIjULDk5GZ988gmSk5M1HQoRkdowiURERERERKRmmZmZ2LVrFzIzMzUdChGR2jCJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJREREREREpGZaWlpo164dtLT4lYuI6g7+jUZERERERKRmYrEYly9fhlgs1nQoRERqwyQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSERERERGRmpmamqJ///4wNTXVdChERGqjo+kAiIiIiIiI6poGDRpgxYoVmg6DiEitOBKJiIiIiIhIzQoKCnDv3j0UFBRoOhQiIrVhEomIiIiIiEjN4uLi0KtXL8TFxWk6FCIitWESiYiIiIiIiIiIlOKaSERUKRIJIC7SdBRUl2npAgKBpqOoGvYLehm18Z0nIqK6RyKRIDc3V9NhVIlIJIKA/xPVCCaRiKhSxEXAiVWajoLqsu4zAG09TUdRNewX9DJq4ztPRER1T25uLoyMjDQdRpVkZ2fD0NBQ02G8ljidjYiIiIiIiIiIlOJIJCIiIiIiIjVr1qwZYmJiNB0GEZFacSQSEREREREREREpxSQSERERERGRmiUkJGDEiBFISEjQdChERGrDJBIREREREZGa5ebmIjIystbtekVE9CJMIhERERERERERkVJMIhERERERERERkVJMIhERERERERERkVJMIhEREREREamZvb09goKCYG9vr+lQiIjURkfTARAREREREdU1ZmZmGDBggKbDICJSq9diJFJKSgomTpwIJycn6OnpQSAQoGfPnpoOq1YbOnQoBAIBNm3apOlQiIiIiIhqnIyMDGzZsgUZGRmaDoXolTM2Noaj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kxvVLrXxnSd63d28WfF6iurSpEmTar9GdfpqzRY8zc6BiZEhFk59p8Jjddnz98v7f73uv67jmkhERERERERqVlBQgHv37qGgoEDToRARqQ2nsxERqaCgKA85eVlKz7MwsX0F0RBVv4ynqUrPMTQwhb6uwSuIhoio5ouLi0NAQAB27tyJZs2aaTocIiK1YBKJXksSCSAuUn5eTaelCwiqZzduUuJkxHZ8/dc4pecdXckZw1Q3DP/STuk5Hw3biJ7txlZ/MERERERqJJFIkJtb8aY7NZFIJIJAA18GmUSi15K4qG6s78P1NNTP1sKpUomfto17Iuj9o68gIqKKvcokZWXed0db/qadiIiIap/c3FwYGRlpOowqyc7OhqGh4Su/LpNIREQqsDSxg6WJ8pEZRHVFa3c/TYdARERERBrGhbWJiIiIiIiIiEgpjkQiIiIiIiJSs2bNmiEmJkbTYRARqRVHIhERERERERERkVJMIhEREREREalZQkICRowYgYSEBE2HQkSkNkwiERERERERqVlubi4iIyNr3bbhREQvwiQSEREREREREREpxSQSEREREREREREpxSQSEREREREREREpxSQSERERERGRmtnb2yMoKAj29vaaDoWISG3qfBIpJSUFEydOhJOTE/T09CAQCNCzZ09Nh1WrDR06FAKBAJs2bdJ0KERERERENZKZmRkGDBgAMzMzTYdCRLVQw4YNNR2CQjqaDqA65eTkoEuXLoiPj4eFhQVat24NHR0d9OnTR9Oh1WqRkZEAAC8vL80GQkRERERUQ2VkZODw4cPo3bs3LCwsNB0OEVUzbW1teHl5oU2bNmjbti0aNWoEfX19FBcX49GjRwgPD8fVq1dx8eJFZGVlvbCtL7/8EjNmzECvXr1w/vz5V3QHlVOnk0jr169HfHw8fH19cfjwYQiFQk2HVOvl5OQgPj4eurq68PDw0HQ4REREREQ1UkpKCpYsWQIvLy8mkYjqMBsbG0yYMAGTJk164eihoUOHAgDy8/Oxfft2/PTTT7h06VK587788kt88sknAIDDhw/Dzc0N6enp1RO8Cur0dLY9e/YAAD788EMmkNTkxo0bEIvF8PDwgJ6enqbDeS2kZtyF/1wBfv93kaZDISIiIiIiIgC6urr4/PPPkZiYiKVLl1Z6+plQKMS7776Lixcv4t9//5WrVzaBBAAL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uLq6wsvLC2ZmZoiNjcV3330HHR0dzJo1S9PhEREREREREans1q1baNKkiWwn9LqCSSTSiI4dO+L333/HDz/8gPz8fDg4OKB79+5YuHAhHB0dNR0eERERERER0UupawkkgEkktQgPD8f06dMrff748eMxfvz4aoyo5ps2bRqmTZum6TCIiIiIiKqFjY0N5s+fDxsbG02HQkSkNkwiqUFWVhZCQ0Mrfb6fn181RkNERERERJpmZWX1wrVaiYhqIyaR1MDX11fti28TEREREVHtlZWVhfPnz8Pb2xumpqaaDoeISC20NB0AERERERFRXZOUlIRZs2YhKSlJ06EQEakNk0hERERERERERKQUk0hERERERERERKQUk0hERERERERERKQUk0hERERERERqJhQK0bRpUwiFQk2HQkSkNtydjYiIiIiISM1cXFywe/duTYdBRKRWHIlERERERERERERKMYlERERERESkZtHR0fD09ER0dLSmQyEiUhsmkYiIiIiIiNRMIpGgqKgIEolE06EQEakN10Si15KWLtB9hqajeHlauq/2WnXhmVHN9SrfZ3Vhv6CXURvfeSIiorpIJBIhOztbbe2tXB+Mpzm5MDEUYe6kEeU+q4NIJFJLO1XFJBK9lgQCQFtP01HULnxmROWxXxARERHVfgKBAIaGhmprT09fCL2iEujpC2FoaFjuc23G6WxERERERERERKQURyIRERERERGpmYuLC/bv3w8HBwdNh0JEpDZMIhEREREREamZUCiEm5ubpsMgIlIrTmcjIiIiIiJSs+TkZHzyySdITk7WdChERGrDJBIREREREZGaZWZmYteuXcjMzNR0KEREasMkEhERERERERERKcUkEhERERERERERKcUkEhERERERERERKcXd2YiIiIiIiCqhSZMmlT7X1NQUn3/+OTp16gQ7O7tqjIqI6NVhEomIiIiIiEjN7OzssGjRIk2HQUSkVpzORkRERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRERERERERERESjGJRK+1kJAQaGtrw9XVVdOhEBER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", "text/plain": [ "
" ] @@ -440,7 +440,7 @@ "\n", "qc.measure_all()\n", "\n", - "job = backend.run(qc, shots = 10, seed=1234)\n", + "job = backend.run(qc, shots=10, seed=1234)\n", "\n", "# access the counts\n", "print(\"counts :\", job.result().get_counts())\n", @@ -448,13 +448,13 @@ "# access the memory of individual outcomes\n", "print(\"\\nmemory :\", job.result().get_memory())\n", "\n", - "# access the statevector \n", + "# access the statevector\n", "print(\"\\nstatevector :\", job.result().get_statevector())\n", "\n", "# accedd the unitary\n", "print(\"\\ncircuit unitary : \\n\", job.result().get_unitary())\n", "\n", - "qc.draw(output='mpl', style=\"clifford\")" + "qc.draw(output=\"mpl\", style=\"clifford\")" ] }, { @@ -521,7 +521,9 @@ } ], "source": [ - "corr = FermionicOp({\"+_0 -_0 +_2 -_2\": 1}, num_spin_orbitals=4) + FermionicOp({\"-_0 +_0 -_2 +_2\": 1}, num_spin_orbitals=4)\n", + "corr = FermionicOp({\"+_0 -_0 +_2 -_2\": 1}, num_spin_orbitals=4) + FermionicOp(\n", + " {\"-_0 +_0 -_2 +_2\": 1}, num_spin_orbitals=4\n", + ")\n", "\n", "exp_val = backend.measure_observable_expectation(qc, observable=corr, shots=1000)\n", "\n", @@ -540,6 +542,90 @@ "To see how fermionic circuits can describe a concrete experimental system of ultracold fermionic atoms with the gateset and coupling map of a real device please see the [fermionic tweezer hardware tutorial](./03_fermionic_tweezer_hardware.ipynb)." ] }, + { + "cell_type": "markdown", + "id": "aecfd238", + "metadata": {}, + "source": [ + "## The ffsim backend\n", + "\n", + "Qiskit Cold Atom includes a fermion simulator backend based on [ffsim](https://github.com/qiskit-community/ffsim), a software library for fast simulations of fermionic circuits. This backend is implemented as `FfsimBackend`, and it can be used instead of the `FermionSimulator` backend for significantly improved performance.\n", + "\n", + "The ffsim simulator is not supported on Windows, and in order\n", + "for it to be available, Qiskit Cold Atom must be installed with the `ffsim` extra, e.g.\n", + "```\n", + "pip install \"qiskit-cold-atom[ffsim]\"\n", + "```\n", + "\n", + "Unlike the `FermionSimulator` backend, the ffsim backend does not compute the full unitary of the circuit, since doing so is exceedingly expensive at modest system sizes.\n", + "\n", + "The ffsim backend can be used to simulate the circuits we created earlier in this tutorial, which were constructed from fermionic gates defined directly in terms of their generators. However, the efficiency advantage of the ffsim backend is most apparent when simulating specific gates from the gate library, such as the `Hop`, `Interaction`, `Phase` gates. The following code cell shows how to use the ffsim backend to simulate a circuit with these gates. Because these gates individually conserve the numbers of spin up and spin down electrons, we set `num_species=2` when running the circuit so that the simulator exploits this symmetry. In this example, our circuit simulates a system with 8 spatial orbitals, with 2 particles of spin up and 2 particles of spin down. The total dimension of the Hilbert space is ${8 \\choose 2}^2 = 784.$" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d0336727", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "counts : {'1100000011000000': 3, '1010000010100000': 1, '1001000011000000': 3, '1010000001100000': 2, '0110000010100000': 1}\n", + "\n", + "memory : ['1100000011000000', '1010000010100000', '1100000011000000', '1001000011000000', '1010000001100000', '0110000010100000', '1001000011000000', '1010000001100000', '1100000011000000', '1001000011000000']\n", + "\n", + "statevector length : 784\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "from qiskit_cold_atom.fermions import (\n", + " FfsimBackend,\n", + " Hop,\n", + " Interaction,\n", + " Phase,\n", + ")\n", + "\n", + "# initialize the ffsim backend\n", + "backend = FfsimBackend()\n", + "\n", + "# set the number of orbitals and occupancies\n", + "norb = 8\n", + "nocc = norb // 4\n", + "nvrt = norb - nocc\n", + "occ_a = [1] * nocc + [0] * nvrt\n", + "occ_b = [1] * nocc + [0] * nvrt\n", + "occupations = [occ_a, occ_b]\n", + "\n", + "# set parameters for fermionic gates\n", + "hopping = np.ones(norb - 1)\n", + "interaction = 1.0\n", + "mu = np.ones(norb)\n", + "\n", + "# construct a circuit with some fermionic gates\n", + "circuit = backend.initialize_circuit(occupations)\n", + "circuit.append(Hop(2 * norb, hopping), list(range(2 * norb)))\n", + "circuit.append(Interaction(2 * norb, interaction), list(range(2 * norb)))\n", + "circuit.append(Phase(2 * norb, mu), list(range(2 * norb)))\n", + "circuit.measure_all()\n", + "\n", + "# run the circuit and retrieve the measurement counts\n", + "job = backend.run(circuit, shots=10, seed=1234, num_species=2)\n", + "\n", + "# access the counts\n", + "print(\"counts :\", job.result().get_counts())\n", + "\n", + "# access the memory of individual outcomes\n", + "print(\"\\nmemory :\", job.result().get_memory())\n", + "\n", + "# print the length of the statevector\n", + "print(\"\\nstatevector length :\", len(job.result().get_statevector()))" + ] + }, { "cell_type": "markdown", "id": "ed9a2bfc", @@ -551,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "0e22aa30", "metadata": { "tags": [] @@ -560,7 +646,7 @@ { "data": { "text/html": [ - "

Version Information

SoftwareVersion
qiskit0.45.1
qiskit_cold_atom0.1.0
qiskit_aer0.12.0
qiskit_algorithms0.2.1
qiskit_nature0.7.1
System information
Python version3.9.16
Python compilerMSC v.1916 64 bit (AMD64)
Python buildmain, Jan 11 2023 16:16:36
OSWindows
CPUs8
Memory (Gb)63.724937438964844
Tue Jan 09 11:09:39 2024 W. Europe Standard Time
" + "

Version Information

SoftwareVersion
qiskit0.45.1
qiskit_nature0.7.1
qiskit_algorithms0.2.1
qiskit_cold_atom0.1.0
qiskit_aer0.12.2
System information
Python version3.10.12
Python compilerGCC 13.1.1 20230429
Python buildmain, Jun 11 2023 18:49:26
OSLinux
CPUs8
Memory (Gb)29.104999542236328
Mon Jan 29 16:19:47 2024 EST
" ], "text/plain": [ "" @@ -584,6 +670,7 @@ ], "source": [ "import qiskit.tools.jupyter\n", + "\n", "%qiskit_version_table\n", "%qiskit_copyright" ] diff --git a/docs/tutorials/10_fermions_spin_charge_sep.ipynb b/docs/tutorials/10_fermions_spin_charge_sep.ipynb new file mode 100644 index 0000000..608af57 --- /dev/null +++ b/docs/tutorials/10_fermions_spin_charge_sep.ipynb @@ -0,0 +1,874 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Spin-charge separation for fermions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this notebook we take a look at the separation of spin and charge dynamics for fermionic atoms in a 1D system. It is based on the paper by \"Time-Resolved Observation of Spin-Charge Deconfinement in Fermionic Hubbard\n", + "Chains\" the Munich group [[1]](#References). In these experiments, fermions evolve in a one dimensional optical lattice. The experiment allows for site resolved observation of spin and charge, such that the famous spin charge separation is directly observable. It is therefore a very pedagogical example for microscopic observables in an extended system.\n", + "\n", + "Here, the physical dynamics of the 1-D tweezer array are governed by a Fermi-Hubbard Hamiltonian in second quantization: \n", + "\n", + "$$ \n", + " H_{\\text{FH}}(\\boldsymbol{J},U,\\boldsymbol{\\mu}) = -J \\underbrace{\\sum_{i=1,\\sigma}^{L-1} (f^\\dagger_{i,\\sigma} f_{i+1,\\sigma} + f^\\dagger_{i+1,\\sigma} f_{i,\\sigma} )}_{\\text{Tunneling/Hopping}} + \\underbrace{U \\sum_{i=1}^{L} n_{i,\\uparrow}n_{i,\\downarrow}}_{\\text{interaction}} + \\underbrace{\\sum_{i=1,\\sigma}^{L} \\mu_i n_{i,\\sigma}}_{\\text{potential offset}} \n", + "$$\n", + "\n", + "Here, $f_{i,\\sigma}, f^\\dagger_{i,\\sigma}$ are annihilation/creation operators for atoms in tweezers at site $i$ with spin $\\sigma$ and $n_{i,\\sigma} = f^\\dagger_{i,\\sigma} f_{i,\\sigma}$ is the number operator. \n", + "\n", + "The dynamics depend on the parameters $\\{ \\boldsymbol{J}, U, \\boldsymbol{\\mu} \\}$ that determine the strength of the different contributions:\n", + "\n", + "- The first term describes hopping between the site $i$ and its neighboring site $i+1$ (for both spin species) through the tunnel effect. The parameter $J$ determines the strength of this hopping and can be tuned by adjusting the depth of the optical lattice.\n", + " \n", + "- The second term describes an interaction between two atoms when they occupy the same site. It is controlled globally by the parameter $U$ set by an external magnetic field exploiting a Feshbach resonance.\n", + "\n", + "- The third term describes local offsets in the potential which can locally imprint a phase by tuning $\\mu_i$. Throughout this tutorial we will set $\\mu_i = 0$ for all sites $i$." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial state preparation\n", + "\n", + "As described in the paper, the initial state is a system of alternating spin-up and spin-down fermions in the lattice. To initialize the system only the site in the middle is left empty." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit_cold_atom.fermions import FermionSimulator, FfsimBackend\n", + "\n", + "from qiskit_cold_atom.fermions.fermion_gate_library import FermiHubbard\n", + "from qiskit_nature.operators.second_quantization import FermionicOp\n", + "from qiskit.circuit import Parameter\n", + "\n", + "backend = FermionSimulator()\n", + "backend_ffsim = FfsimBackend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will attempt to obverve propagations of up to `d` sites. Let us initialize a system with `2d+1` sites. And in the middle of the lattice we will leave one site empty." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def prep_init_states(dmax: int, with_hole: bool) -> tuple[list, list]:\n", + " \"\"\"\n", + " Prepares a list of initial states for the Fermi-Hubbard model.\n", + "\n", + " Args:\n", + " dmax: the maximum distance from the center\n", + " with_hole: whether to include a hole in the initial state\n", + "\n", + " Returns:\n", + " two lists of initial states starting with spin-up and spin-down, respectively\n", + " \"\"\"\n", + " Nsites = 2 * dmax + 1\n", + "\n", + " # the up state\n", + " state_up = [i % 2 for i in range(Nsites)]\n", + " state_down = [(i + 1) % 2 for i in range(Nsites)]\n", + "\n", + " if with_hole:\n", + " state_up[dmax] = 0\n", + " state_down[dmax] = 0\n", + "\n", + " init_state_1 = [state_up, state_down]\n", + " init_state_2 = [state_down, state_up]\n", + "\n", + " return init_state_1, init_state_2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "dmax = 3\n", + "Nsites = 2 * dmax + 1\n", + "\n", + "init_state_1, init_state_2 = prep_init_states(dmax, with_hole=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "hop_param = Parameter(\"hop_param\")\n", + "int_param = Parameter(\"int_param\")\n", + "# initialize one spin-up and one spin-down atom in the left tweezer\n", + "qc_1 = backend.initialize_circuit(init_state_1)\n", + "\n", + "# apply a global Fermi-Hubbard gate with interaction\n", + "qc_1.fhubbard(j=hop_param * np.ones(Nsites - 1), u=int_param, mu=np.zeros(Nsites), modes=range(2*Nsites))\n", + "qc_1.measure_all()\n", + "\n", + "# qc_1.draw(output=\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, this is not the only configuration that exists. Actually the total spin is on average zero. The only thing that is known is that we start out with an anti-ferromagnetic configuration." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "hop_param_down = Parameter(\"hop_param\")\n", + "int_param_down = Parameter(\"int_param\")\n", + "\n", + "# initialize one spin-up and one spin-down atom in the left tweezer\n", + "qc_2 = backend.initialize_circuit(init_state_2)\n", + "\n", + "# apply a global Fermi-Hubbard gate with interaction\n", + "qc_2.fhubbard(\n", + " j=hop_param_down * np.ones(Nsites - 1),\n", + " u=int_param_down,\n", + " mu=np.zeros(Nsites),\n", + " modes=range(2 * Nsites),\n", + ")\n", + "qc_2.measure_all()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "circuit_up_init = qc_1.bind_parameters({hop_param: 0, int_param: 0})\n", + "job_up_init = backend.run(circuit_up_init, shots=5, num_species=2)\n", + "\n", + "circuit_down_init = qc_2.bind_parameters({hop_param_down: 0, int_param_down: 0})\n", + "job_down_init = backend.run(circuit_down_init, shots=5, num_species=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let us plot up the density and charge density of the different states." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def nocc_from_counts(counts: dict[str, int], Nsites: int) -> np.ndarray:\n", + " \"\"\"\n", + " The calculates the occupation from all observed configurations.\n", + "\n", + " Args:\n", + " counts: the counts of the observed configurations\n", + " Nsites: the number of sites in the system\n", + "\n", + " Returns:\n", + " 1D array The occupation for each site\n", + " \"\"\"\n", + " nocc_t = np.zeros(Nsites)\n", + " Nobs = 0\n", + " for occ_string, observations in counts.items():\n", + " # get the occupation of each site in the observed configuration\n", + " nocc = np.zeros(Nsites)\n", + "\n", + " for site_index in range(Nsites):\n", + " nocc[site_index] = int(occ_string[site_index]) + int(occ_string[site_index + Nsites])\n", + "\n", + " # now add the value to the correct time step and with it by the number of observations\n", + " Nobs = Nobs + observations\n", + " nocc_t = nocc_t + nocc * observations\n", + " return nocc_t / Nobs\n", + "\n", + "\n", + "def squeezed_spin_corr_from_counts(counts: dict[str, int], Nsites: int) -> np.ndarray:\n", + " \"\"\"\n", + " The calculates the spin projection from all observed configurations.\n", + " However, we filter out situations with a hole and a doublon in the system.\n", + "\n", + " Args:\n", + " counts: the counts of the observed configurations\n", + " Nsites: the number of sites in the system\n", + "\n", + " Returns:\n", + " 1D array The occupation for each site\n", + " \"\"\"\n", + " sz_squeeze = np.zeros(Nsites)\n", + " szvar = np.zeros(Nsites)\n", + " Nobs = 0\n", + " Nobs_var = np.zeros(Nsites)\n", + " Nobs = np.zeros(Nsites)\n", + "\n", + " for occ_string, observations in counts.items():\n", + " occ_int = [int(occ) for occ in occ_string]\n", + " # get the spin of each site in the observed configuration\n", + " sz = np.zeros(Nsites)\n", + " nocc = np.zeros(Nsites)\n", + " for site_index in range(Nsites):\n", + " sz[site_index] = 1 / 2 * (occ_int[site_index] - occ_int[site_index + Nsites])\n", + " nocc[site_index] = occ_int[site_index] + occ_int[site_index + Nsites]\n", + "\n", + " # now obtain the symmetrized variance\n", + " # first for the first site\n", + " site_index = 0\n", + " if nocc[site_index] == 1 and nocc[site_index + 1] == 1:\n", + " szvar[site_index] = (\n", + " szvar[site_index] + sz[site_index] * sz[site_index + 1] * observations\n", + " )\n", + " Nobs_var[site_index] = Nobs_var[site_index] + observations\n", + " \n", + " # then for the last site\n", + " site_index = Nsites - 1\n", + " if nocc[site_index] == 1 and nocc[site_index - 1] == 1:\n", + " szvar[site_index] = (\n", + " szvar[site_index] + sz[site_index] * sz[site_index - 1] * observations\n", + " )\n", + " Nobs_var[site_index] = Nobs_var[site_index] + observations\n", + " \n", + " # and finally for all the other sites\n", + " for site_index in range(1,Nsites-1):\n", + " if (\n", + " nocc[site_index] == 1\n", + " and nocc[site_index + 1] == 1\n", + " and nocc[site_index - 1] == 1\n", + " ):\n", + " szvar[site_index] = (\n", + " szvar[site_index]\n", + " + 1\n", + " / 2\n", + " * sz[site_index]\n", + " * (sz[site_index + 1] + sz[site_index - 1])\n", + " * observations\n", + " )\n", + " Nobs_var[site_index] = Nobs_var[site_index] + observations\n", + " elif (\n", + " nocc[site_index] == 1\n", + " and nocc[site_index + 1] == 1\n", + " and nocc[site_index - 1] == 0\n", + " ):\n", + " szvar[site_index] = (\n", + " szvar[site_index] + sz[site_index] * sz[site_index + 1] * observations\n", + " )\n", + " Nobs_var[site_index] = Nobs_var[site_index] + observations\n", + " elif (\n", + " nocc[site_index] == 1\n", + " and nocc[site_index + 1] == 0\n", + " and nocc[site_index - 1] == 1\n", + " ):\n", + " szvar[site_index] = (\n", + " szvar[site_index] + sz[site_index] * sz[site_index - 1] * observations\n", + " )\n", + " Nobs_var[site_index] = Nobs_var[site_index] + observations\n", + "\n", + " sz_squeeze += sz * (nocc == 1) * observations\n", + " Nobs += (nocc == 1) * observations\n", + "\n", + " # regularize the observations\n", + " var_weight = 1 / Nobs_var\n", + " var_weight[np.isinf(var_weight)] = 0\n", + "\n", + " mean_weight = 1 / Nobs\n", + " mean_weight[np.isinf(mean_weight)] = 0\n", + " # now that we have gone through all observations, we can average\n", + " fluc = np.zeros(Nsites)\n", + " for site_index in range(Nsites):\n", + " if site_index == 0:\n", + " fluc[site_index] = 4 * (\n", + " szvar[site_index] * var_weight[site_index]\n", + " - sz_squeeze[site_index]\n", + " * mean_weight[site_index]\n", + " * sz_squeeze[site_index + 1]\n", + " * mean_weight[site_index + 1]\n", + " )\n", + " elif site_index == Nsites - 1:\n", + " fluc[site_index] = 4 * (\n", + " szvar[site_index] * var_weight[site_index]\n", + " - sz_squeeze[site_index]\n", + " * mean_weight[site_index]\n", + " * sz_squeeze[site_index - 1]\n", + " * mean_weight[site_index - 1]\n", + " )\n", + " else:\n", + " fluc[site_index] = 4 * (\n", + " szvar[site_index] * var_weight[site_index]\n", + " - sz_squeeze[site_index]\n", + " * mean_weight[site_index]\n", + " * (\n", + " sz_squeeze[site_index + 1] * mean_weight[site_index + 1]\n", + " + sz_squeeze[site_index - 1] * mean_weight[site_index - 1]\n", + " )\n", + " / 2\n", + " )\n", + " return fluc, Nobs_var, Nobs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us just visualize the initial state:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_v/vw5sh5fd4lv4x0cnk8cxz__w0000gn/T/ipykernel_82435/3602395813.py:110: RuntimeWarning: divide by zero encountered in divide\n", + " var_weight = 1 / Nobs_var\n", + "/var/folders/_v/vw5sh5fd4lv4x0cnk8cxz__w0000gn/T/ipykernel_82435/3602395813.py:113: RuntimeWarning: divide by zero encountered in divide\n", + " mean_weight = 1 / Nobs\n" + ] + } + ], + "source": [ + "noccs_init = np.zeros( Nsites)\n", + "corrs_init = np.zeros(Nsites)\n", + "\n", + "counts_1 = job_up_init.result().get_counts()\n", + "counts_2 = job_down_init.result().get_counts()\n", + "total_counts = counts_1\n", + "total_counts.update(counts_2)\n", + "\n", + "nocc = nocc_from_counts(total_counts, Nsites)\n", + "corr, _, _ = squeezed_spin_corr_from_counts(total_counts, Nsites)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'site index')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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XY5X+uqrr9SsWTMFBAToscce04YNGxQbG+uRWgg49TR9+nRZLJZLLvv27XO0nzp1qnbu3KnNmzfL19dXaWlpMq6TyaPrO1aSdPz4caWkpOiBBx7QmDFjPFT5tXclYwXg2ho/frx2796ttWvXeroUr9W5c2ft2rVLubm5GjdunEaMGKG9e/d6pBZ+qqGeTp48qW+//faSbTp06CB/f/8L1h87dkxWq1WfffaZxy7ZXUv1HasTJ06oX79+uuWWW7RixQr5+Fw/+ftK3lcrVqzQpEmTVFZW5ubqGofq6moFBQXp3XffVWpqqmP9iBEjVFZWxtXTi7BYLNqwYYPTmOFCEyZM0KZNm/TJJ5+offv2ni6n0UhKSlLHjh31xhtvXPNjN7nmR2zkWrVqpVatWl3Rvna7XZJUVVXVkCV5rfqM1fHjx3XnnXcqPj5ey5cvv67CjXR17yvU8vf3V3x8vLKyshwf1na7XVlZWZowYYJni0OjZRiGJk6cqA0bNig7O5twU092u91jn3kEHDfJzc3V9u3b1bdvX7Vo0UIHDx7UzJkz1bFjx+vi6k19HD9+XP369VO7du300ksv6eTJk45tkZGRHqzMOxUUFKi0tFQFBQWqqanRrl27JEmdOnVSs2bNPFuch02ePFkjRoxQr1691KdPHy1YsECVlZUaNWqUp0vzKhUVFTpw4IDj9aFDh7Rr1y61bNlSbdu29WBl3mf8+PFas2aNNm3apObNmzvu5woNDVXTpk09XJ13mTFjhgYNGqS2bdvq9OnTWrNmjbKzs/XRRx95piCPPLt1Hfjyyy+NO++802jZsqUREBBgxMTEGI899phx7NgxT5fmdZYvX25IqnPBhUaMGFHnWG3ZssXTpXmF1157zWjbtq3h7+9v9OnTx/j88889XZLX2bJlS53voREjRni6NK9zsf82LV++3NOleZ1HHnnEaNeuneHv72+0atXKGDBggLF582aP1cM9OAAAwHSurxsdAADAdYGAAwAATIeAAwAATIeAAwAATIeAAwAATIeAAwAATIeAAwAATIeAAwAATIeAA+CaGTlypFt+1HHFihUKCwu76n769eunSZMmXXU/ADyP36ICcM28+uqr+uHk6f369VOPHj20YMGCq+p36NChGjx48FVWB8BMCDgArpnQ0FC39Nu0aVN++BCAE76iAtCg3n33XcXFxalp06a64YYblJSUpMrKSknOX1GNHDlSW7du1auvviqLxSKLxaLDhw9Lknbv3q1BgwapWbNmioiI0MMPP6xTp05d9Jj/+RXVM888ox49euh//ud/FBMTo9DQUA0bNkynT592tKmsrFRaWpqaNWumqKgovfzyyxf0W1VVpSeffFI33nijgoODlZCQoOzsbEnS2bNn9aMf/Uhjx451tD948KCaN2+uZcuWXeHoAWgoBBwADaawsFAPPvigHnnkEeXn5ys7O1v33nuv6vpN31dffVWJiYkaM2aMCgsLVVhYKKvVqrKyMvXv3189e/bUF198oYyMDBUXF+uXv/xlvWo5ePCgNm7cqA8++EAffPCBtm7dqhdffNGxferUqdq6das2bdqkzZs3Kzs7Wzt27HDqY8KECcrJydHatWv15Zdf6oEHHlBKSoq++eYbBQYGavXq1Vq5cqU2bdqkmpoaPfTQQ/rZz36mRx555MoGEECD4SsqAA2msLBQ58+f17333qt27dpJkuLi4upsGxoaKn9/fwUFBSkyMtKxftGiRerZs6deeOEFx7ply5bJarXq66+/1s033+xSLXa7XStWrFDz5s0lSQ8//LCysrL0/PPPq6KiQkuXLtXbb7+tAQMGSJJWrlypNm3aOPYvKCjQ8uXLVVBQoOjoaEnSk08+qYyMDC1fvlwvvPCCevTood/97nd69NFHNWzYMB05ckQffPBBPUYMgLsQcAA0mO7du2vAgAGKi4tTcnKyBg4cqPvvv18tWrRwuY9//OMf2rJli5o1a3bBtoMHD7occGJiYhzhRpKioqJUUlLi6Ke6uloJCQmO7S1btlTnzp0dr7/66ivV1NRccLyqqirdcMMNjtdTpkzRxo0btWjRIv3tb39z2gbAcwg4ABqMr6+vMjMz9dlnn2nz5s167bXX9Nvf/la5ublq3769S31UVFTo7rvv1ty5cy/YFhUV5XItfn5+Tq8tFovsdrvL+1dUVMjX11d5eXny9fV12vbD8FVSUqKvv/5avr6++uabb5SSkuLyMQC4D/fgAGhQFotFt912m5599lnt3LlT/v7+2rBhQ51t/f39VVNT47TuJz/5ifbs2aOYmBh16tTJaQkODm6QGjt27Cg/Pz/l5uY61v3rX//S119/7Xjds2dP1dTUqKSk5II6fviV2iOPPKK4uDitXLlS06ZNU35+foPUCODqEHAANJjc3Fy98MIL+uKLL1RQUKD169fr5MmT6tq1a53tY2JilJubq8OHD+vUqVOy2+0aP368SktL9eCDD2r79u06ePCgPvroI40aNeqCMHSlmjVrptGjR2vq1Kn6+OOPtXv3bo0cOVI+Pt//J/Hmm2/W8OHDlZaWpvXr1+vQoUPatm2b0tPT9eGHH0qSFi9erJycHK1cuVLDhw9Xamqqhg8frurq6gapE8CVI+AAaDAhISH65JNPNHjwYN188816+umn9fLLL2vQoEF1tn/yySfl6+ur2NhYtWrVynFD79///nfV1NRo4MCBiouL06RJkxQWFuYUQK7W/Pnzdfvtt+vuu+9WUlKS+vbtq/j4eKc2y5cvV1pamqZMmaLOnTsrNTVV27dvV9u2bbVv3z5NnTpVf/jDH2S1WiVJf/jDH3Tq1CnNnDmzweoEcGUsRl3PbwIAADRiXMEBAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACmQ8ABAACm8/8AVbfNFraGRcEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f, ax = plt.subplots()\n", + "\n", + "ax.plot(np.arange(Nsites) - dmax, nocc, \"bo\", label=\"nocc\")\n", + "ax.plot(np.arange(Nsites) - dmax, corr, \"ro\", label=\"corr\", alpha = 0.5)\n", + "ax.legend()\n", + "ax.set_xlabel(\"site index\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, we have created a state with alternating spins. However, in the middle we have created a hole. This is the state that we will use as the initial state for the propagation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Time evolution\n", + "\n", + "To directly simulate the experiment, we run a list of circuits with different evolution times on the simulator backend. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# the experimental parameters\n", + "J = 2 * np.pi * 250 # hopping parameter in units of hbar\n", + "U = 15 * J # interaction parameter\n", + "\n", + "Ntimes = 8\n", + "tmax = 1.5\n", + "times = np.linspace(0, tmax, Ntimes) * 1e-3" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "Nshots = 500\n", + "# create list of circuits with interaction\n", + "circuits_1 = [qc_1.bind_parameters({hop_param: J * t, int_param: U * t}) for t in times]\n", + "# measure the observable from simulated shots\n", + "jobs_1 = backend.run(circuits_1, shots=Nshots, num_species=2)\n", + "\n", + "# create list of circuits with interaction\n", + "circuits_2 = [qc_2.bind_parameters({hop_param_down: J * t, int_param_down: U * t}) for t in times]\n", + "# measure the observable from simulated shots\n", + "jobs_2 = backend.run(circuits_2, shots=Nshots, num_species=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Put it together" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duration for of the two jobs: 54.99120879173279 seconds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_v/vw5sh5fd4lv4x0cnk8cxz__w0000gn/T/ipykernel_82435/3602395813.py:110: RuntimeWarning: divide by zero encountered in divide\n", + " var_weight = 1 / Nobs_var\n", + "/var/folders/_v/vw5sh5fd4lv4x0cnk8cxz__w0000gn/T/ipykernel_82435/3602395813.py:113: RuntimeWarning: divide by zero encountered in divide\n", + " mean_weight = 1 / Nobs\n" + ] + } + ], + "source": [ + "noccs = np.zeros((Ntimes, Nsites))\n", + "corrs = np.zeros((Ntimes, Nsites))\n", + "\n", + "start_time = time.time()\n", + "count_list_1 = jobs_1.result().get_counts()\n", + "count_list_2 = jobs_2.result().get_counts()\n", + "end_time = time.time()\n", + "print(f\"Duration for of the two jobs: {end_time - start_time} seconds\")\n", + "\n", + "for ii in range(Ntimes):\n", + " counts_1 = count_list_1[ii]\n", + " counts_2 = count_list_2[ii]\n", + "\n", + " total_counts = counts_1\n", + " total_counts.update(counts_2)\n", + "\n", + " nocc = nocc_from_counts(total_counts, Nsites)\n", + " corr, _,_ = squeezed_spin_corr_from_counts(total_counts, Nsites)\n", + "\n", + " noccs[ii, :] = nocc\n", + " corrs[ii, :] = corr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can directly visualize them." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Density')" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAHHCAYAAABtF1i4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwhUlEQVR4nO3de1iUdd7H8c8wyAyeUFNAXRSsNE1DQiU6rLqhZC1lPZarJoZluyVtRllSKZpP0UnTNV23NqWTaXbloXI1F0O3xAwMt1rNI0EmIKac2sCGef5onR5WUEaBn8O8X9d1X1dzz+833+9M8PPDPfc9Y3E6nU4BAAAY4mO6AQAA4N0IIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMwIi0tTRaLRbm5uaZbAdCMWCwWzZw503QbcBNhBPX2xRdfaNSoUerevbvsdru6du2qYcOGacGCBaZbA9DITv4BcXKz2+3q0qWLYmNj9ac//UllZWWmW6zV1q1bNXPmTB0/ftx0KzgNC99Ng/rYunWrhg4dqm7dumnChAkKDg5Wfn6+tm3bpv3792vfvn1uPZ7D4dCJEydks9lksVgaqWsADSUtLU0JCQl64oknFBYWphMnTqigoEAZGRnauHGjunXrprVr1+qyyy4z2uePP/4oX19f+fr6SpKef/55TZ06VQcPHlRoaKjR3lA3X9MNwDM8+eSTCggI0GeffaZ27drVuK+oqMjtx7NarbJarQ3UHYCmMmLECA0YMMB1Ozk5WZs2bdJvf/tb3Xjjjdq1a5f8/f2N9We3243VxtnjbRrUy/79+3XppZeeEkQkKTAw0PXfFotFiYmJevPNN9WrVy/Z7XZFRkZqy5YtNebUds5IaGiofvvb3+rjjz/WoEGDZLfb1aNHD7322muN9bQANIDf/OY3mj59ur755hu98cYbrv27d+/WqFGj1KFDB9ntdg0YMEBr166tMffkWvDJJ58oKSlJnTp1UqtWrXTzzTfryJEjNcZmZWUpNjZWHTt2lL+/v8LCwjRx4sQaY/7/OSMzZ87U1KlTJUlhYWGut5hyc3M1ePBghYeH1/p8evXqpdjY2HN9WeAGwgjqpXv37srOztaXX355xrGbN2/WlClTdPvtt+uJJ57Q0aNHdd1119Vr7r59+zRq1CgNGzZMc+bMUfv27XXHHXfoq6++aoinAaCRjB8/XpL04YcfSpK++uorXXHFFdq1a5emTZumOXPmqFWrVho5cqRWrVp1yvz77rtPO3fuVEpKiu655x699957SkxMdN1fVFSk4cOHKzc3V9OmTdOCBQs0btw4bdu2rc6ebrnlFo0ZM0aS9MILL+j111/X66+/rk6dOmn8+PH65z//ecq69Nlnn2nPnj26/fbbz/k1gRucQD18+OGHTqvV6rRarc7o6Gjnww8/7NywYYOzqqqqxjhJTknOrKws175vvvnGabfbnTfffLNr39KlS52SnAcPHnTt6969u1OSc8uWLa59RUVFTpvN5nzwwQcb78kBOKOTv7OfffZZnWMCAgKcERERTqfT6bz22mud/fr1c/7444+u+6urq51XXnml8+KLLz7lcWNiYpzV1dWu/Q888IDTarU6jx8/7nQ6nc5Vq1adsb7T+fMalJKS4rr93HPPnbLWOJ1O5/Hjx512u935yCOP1Nj/xz/+0dmqVStneXn5aeugYXFkBPUybNgwZWZm6sYbb9TOnTv17LPPKjY2Vl27dj3lsGt0dLQiIyNdt7t166abbrpJGzZskMPhOG2dPn366JprrnHd7tSpk3r16qUDBw407BMC0OBat26tsrIyff/999q0aZNuu+02lZWVqbi4WMXFxTp69KhiY2O1d+9eHTp0qMbcu+++u8bJ7Ndcc40cDoe++eYbSXK9Rfz+++/rxIkT59xrQECAbrrpJr311lty/uc6DofDoRUrVmjkyJFq1arVOddA/RFGUG8DBw7Uu+++q2PHjmn79u1KTk5WWVmZRo0apX/961+ucRdffPEpc3v27KkffvjhlPeA/1u3bt1O2de+fXsdO3bs3J8AgEZVXl6uNm3aaN++fXI6nZo+fbo6depUY0tJSZF06onv//273759e0ly/e4PHjxY//M//6NZs2apY8eOuummm7R06VJVVlaedb/x8fHKy8vTP/7xD0nS3//+dxUWFrreckLT4WoauM3Pz08DBw7UwIED1bNnTyUkJGjlypWuReZc1HWFjZMr0IHz2rfffquSkhJddNFFqq6uliQ99NBDdZ4IetFFF9W4fabffYvFonfeeUfbtm3Te++9pw0bNmjixImaM2eOtm3bptatW7vdc2xsrIKCgvTGG2/o17/+td544w0FBwcrJibG7cfC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8HhuhxFJSkxMVGJiYq33ZWRk1Lidm5t7NiUAAICX4LtpAACAUYQRAABgFGEEAAAYRRgBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABglK/pBlA/llYBRusvmHSl0fqmn7/Xs1hMd+CZHCfM1v/2X2brS7r0V23NNnAevAY4M46MAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjziqMLFy4UKGhobLb7YqKitL27dtPO37lypW65JJLZLfb1a9fP61bt+6smgUAAM2P22FkxYoVSkpKUkpKinbs2KHw8HDFxsaqqKio1vFbt27VmDFjdOedd+rzzz/XyJEjNXLkSH355Zfn3DwAAPB8boeRuXPnatKkSUpISFCfPn20ePFitWzZUkuWLKl1/Pz583Xddddp6tSp6t27t2bPnq3LL79cL7744jk3DwAAPJ9bYaSqqkrZ2dmKiYn55QF8fBQTE6PMzMxa52RmZtYYL0mxsbF1jgcAAN7F153BxcXFcjgcCgoKqrE/KChIu3fvrnVOQUFBreMLCgrqrFNZWanKykrX7dLSUnfaBOCFWDcAz3VeXk2TmpqqgIAA1xYSEmK6JQDnOdYNwHO5FUY6duwoq9WqwsLCGvsLCwsVHBxc65zg4GC3xktScnKySkpKXFt+fr47bQLwQqwbgOdyK4z4+fkpMjJS6enprn3V1dVKT09XdHR0rXOio6NrjJekjRs31jlekmw2m9q2bVtjA4DTYd0APJdb54xIUlJSkiZMmKABAwZo0KBBmjdvnioqKpSQkCBJio+PV9euXZWamipJuv/++zV48GDNmTNHN9xwg5YvX66srCy99NJLDftMAACAR3I7jIwePVpHjhzRjBkzVFBQoP79+2v9+vWuk1Tz8vLk4/PLAZcrr7xSy5Yt0+OPP65HH31UF198sVavXq2+ffs23LMAAAAey+0wIkmJiYlKTEys9b6MjIxT9t1666269dZbz6YUAABo5s7Lq2kAAID3IIwAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADDK13QD9eF0OiVJpWVlhjvxXieqfjJav0VpqdH63u7k797J30VPcLJXp6PKcCferdTw7y7//806+fqfae2wOD1gdfn2228VEhJiug3A6+Xn5+tXv/qV6TbqhXUDOH+cae3wiDBSXV2t7777Tm3atJHFYjHdjttKS0sVEhKi/Px8tW3b1nQ7Rnj7a+Dpz9/pdKqsrExdunSRj49nvLvr6euG5Pk/N+fK25+/5PmvQX3XDo94m8bHx8dj/ho7nbZt23rkD1ND8vbXwJOff0BAgOkW3NJc1g3Js39uGoK3P3/Js1+D+qwdnvEnDgAAaLYIIwAAwCjCSBOw2WxKSUmRzWYz3Yox3v4aePvzx9nx9p8bb3/+kve8Bh5xAisAAGi+ODICAACMIowAAACjCCMAAMAowggAADCKMNKEcnNzdeeddyosLEz+/v668MILlZKSoqqq5v3dCQsXLlRoaKjsdruioqK0fft20y01mdTUVA0cOFBt2rRRYGCgRo4cqa+//tp0W/AwrB3etXZ447pBGGlCu3fvVnV1tf7yl7/oq6++0gsvvKDFixfr0UcfNd1ao1mxYoWSkpKUkpKiHTt2KDw8XLGxsSoqKjLdWpPYvHmzJk+erG3btmnjxo06ceKEhg8froqKCtOtwYOwdnjX2uGN6waX9hr23HPP6c9//rMOHDhgupVGERUVpYEDB+rFF1+U9PP3hYSEhOi+++7TtGnTDHfX9I4cOaLAwEBt3rxZv/71r023Aw/G2uE9vGHd4MiIYSUlJerQoYPpNhpFVVWVsrOzFRMT49rn4+OjmJgYZWZmGuzMnJKSEklqtv/P0XRYO7yHN6wbhBGD9u3bpwULFuj3v/+96VYaRXFxsRwOh4KCgmrsDwoKUkFBgaGuzKmurtaUKVN01VVXqW/fvqbbgQdj7fAe3rJuEEYawLRp02SxWE677d69u8acQ4cO6brrrtOtt96qSZMmGeocTWny5Mn68ssvtXz5ctOt4DzB2oEz8ZZ1w9d0A83Bgw8+qDvuuOO0Y3r06OH67++++05Dhw7VlVdeqZdeeqmRuzOnY8eOslqtKiwsrLG/sLBQwcHBhroyIzExUe+//762bNnSbL7WHueOtaN2rB0/86Z1gzDSADp16qROnTrVa+yhQ4c0dOhQRUZGaunSpfLxab4Hp/z8/BQZGan09HSNHDlS0s+HHNPT05WYmGi2uSbidDp13333adWqVcrIyFBYWJjplnAeYe2onbevHd64bhBGmtChQ4c0ZMgQde/eXc8//7yOHDniuq+5pv2kpCRNmDBBAwYM0KBBgzRv3jxVVFQoISHBdGtNYvLkyVq2bJnWrFmjNm3auN7vDggIkL+/v+Hu4ClYO7xr7fDKdcOJJrN06VKnpFq35mzBggXObt26Of38/JyDBg1ybtu2zXRLTaau/99Lly413Ro8CGuHd60d3rhu8DkjAADAqOb7piMAAPAIhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYge644w7XRy43pLS0NLVr1+6cH2fIkCGaMmXKOT8OgIbDuoGGxMfBQ/Pnz9f//+y7IUOGqH///po3b945Pe7o0aN1/fXXn2N3AM5HrBtoSIQRKCAgoFEe19/fv/l+jwLg5Vg30JB4m8ZLvPPOO+rXr5/8/f11wQUXKCYmRhUVFZJqHm694447tHnzZs2fP18Wi0UWi0W5ubmSpC+//FIjRoxQ69atFRQUpPHjx6u4uLjOmv99uHXmzJnq37+/Xn/9dYWGhiogIEC/+93vVFZW5hpTUVGh+Ph4tW7dWp07d9acOXNOedzKyko99NBD6tq1q1q1aqWoqChlZGRIkn788Uddeumluvvuu13j9+/frzZt2mjJkiVn+eoB3ol1g3WjqRBGvMDhw4c1ZswYTZw4Ubt27VJGRoZuueUW1fa1RPPnz1d0dLQmTZqkw4cP6/DhwwoJCdHx48f1m9/8RhEREcrKytL69etVWFio2267za1e9u/fr9WrV+v999/X+++/r82bN+vpp5923T916lRt3rxZa9as0YcffqiMjAzt2LGjxmMkJiYqMzNTy5cv1z//+U/deuutuu6667R3717Z7Xa9+eabevXVV7VmzRo5HA7dfvvtGjZsmCZOnHh2LyDghVg3WDealMlv6UPTyM7Odkpy5ubm1nr/hAkTnDfddJPr9uDBg533339/jTGzZ892Dh8+vMa+/Px8pyTn119/XevjLl261BkQEOC6nZKS4mzZsqWztLTUtW/q1KnOqKgop9PpdJaVlTn9/Pycb7/9tuv+o0ePOv39/V39fPPNN06r1eo8dOhQjVrXXnutMzk52XX72WefdXbs2NGZmJjo7Ny5s7O4uLjWHgHUjnWDdaMpcc6IFwgPD9e1116rfv36KTY2VsOHD9eoUaPUvn37ej/Gzp079dFHH6l169an3Ld//3717NmzXo8TGhqqNm3auG537txZRUVFrsepqqpSVFSU6/4OHTqoV69erttffPGFHA7HKfUqKyt1wQUXuG4/+OCDWr16tV588UX97W9/q3EfgDNj3WDdaEqEES9gtVq1ceNGbd26VR9++KEWLFigxx57TJ9++qnCwsLq9Rjl5eWKi4vTM888c8p9nTt3rncvLVq0qHHbYrGourq63vPLy8tltVqVnZ0tq9Va477/v+AVFRVpz549slqt2rt3r6677rp61wDAusG60bQ4Z8RLWCwWXXXVVZo1a5Y+//xz+fn5adWqVbWO9fPzk8PhqLHv8ssv11dffaXQ0FBddNFFNbZWrVo1SI8XXnihWrRooU8//dS179ixY9qzZ4/rdkREhBwOh4qKik7pIzg42DVu4sSJ6tevn1599VU98sgj2rVrV4P0CHgT1g3WjaZCGPECn376qZ566illZWUpLy9P7777ro4cOaLevXvXOj40NFSffvqpcnNzVVxcrOrqak2ePFnff/+9xowZo88++0z79+/Xhg0blJCQcMoCdLZat26tO++8U1OnTtWmTZv05Zdf6o477pCPzy8/pj179tS4ceMUHx+vd999VwcPHtT27duVmpqqDz74QJK0cOFCZWZm6tVXX9W4ceM0cuRIjRs3TlVVVQ3SJ+ANWDdYN5oSYcQLtG3bVlu2bNH111+vnj176vHHH9ecOXM0YsSIWsc/9NBDslqt6tOnjzp16qS8vDx16dJFn3zyiRwOh4YPH65+/fppypQpateuXY1f+nP13HPP6ZprrlFcXJxiYmJ09dVXKzIyssaYpUuXKj4+Xg8++KB69eqlkSNH6rPPPlO3bt20e/duTZ06VYsWLVJISIgkadGiRSouLtb06dMbrE+guWPdYN1oShans5brtAAAAJoIR0YAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAYRRgBAABG/R+2UCv64tU2OAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f, [ax1, ax2] = plt.subplots(1, 2, sharey=True)\n", + "# color plot of the occupation in a heatmap\n", + "velo = J\n", + "ax1.pcolor(np.arange(Nsites) - dmax, times * 1e3, corrs, cmap=\"Reds\")\n", + "\n", + "ax1.set_xlabel(\"time [ms]\")\n", + "ax1.set_xlabel(\"site index\")\n", + "ax1.set_title(\"Spin\")\n", + "\n", + "ax2.pcolor(np.arange(Nsites) - dmax, times * 1e3, noccs, cmap=\"Blues\")\n", + "ax2.set_xlabel(\"site index\")\n", + "ax2.set_title(\"Density\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can nicely observe a much slower spread in the spin than in the charge density. This is the spin-charge separation. Now it is time to quantify the difference in the speed of the spread" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "stds_spin = np.zeros(Ntimes)\n", + "for ii, corr in enumerate(corrs):\n", + " mass_func = corr + 1\n", + " mean_position = np.average(np.arange(len(mass_func)), weights=mass_func)\n", + " # Calculate the standard deviation of the position\n", + " std_position = np.sqrt(\n", + " np.average((np.arange(len(mass_func)) - mean_position) ** 2, weights=mass_func)\n", + " )\n", + " stds_spin[ii] = std_position\n", + "\n", + "stds_density = np.zeros(Ntimes)\n", + "for ii, nocc in enumerate(noccs):\n", + " # print(nocc)\n", + " mass_func = 1 - nocc\n", + " mean_position = np.average(np.arange(len(mass_func)), weights=mass_func)\n", + " # Calculate the standard deviation of the position\n", + " std_position = np.sqrt(\n", + " np.average((np.arange(len(mass_func)) - mean_position) ** 2, weights=mass_func)\n", + " )\n", + " stds_density[ii] = std_position" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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pHbt2qlfv36WFwcAAGAWi/gBAIBqz/JF/F544QXdc889Cg0N1QsvvHDJvlwODgAAAqlCIzcJCQnavn27mjRpooSEhItvzOHQgQMHLC3QaozcAABQ81g+cpOVlVXunwEAAKob01dLPfnkkyopKbmg/fvvv9eTTz5pSVEAAACVZXpCsdPpVF5enqKiorzav/nmG0VFRcnlcllaoNU4LQUAQM3j0xWKDcOQw+G4oP3TTz9V48aNzW4OAADAUhVe56ZRo0ZyOBxyOBxq06aNV8BxuVw6efKk7r33Xp8UCQAAUFEVDjezZs2SYRi66667NH36dEVGRnreCw4OVnx8vJKSknxSJAAAQEVVONzceeedktyXhffu3bvcm2cCAAAEmunbL1x33XWeP//www86ffq01/tM0gUAAIFkekJxSUmJxo8fr6ioKNWvX1+NGjXyegAAAASS6XDz8MMP68MPP9TLL7+skJAQzZ8/X9OnT1ezZs306quv+qJGAACACjN9Wupf//qXXn31VaWkpGjUqFFKTk5W69at1bJlS73++uu6/fbbfVEnAABAhZgeufn22291xRVXSHLPr/n2228lSddee602btxobXUAAAAmmQ43V1xxhef+UldddZXefPNNSe4RnYYNG1paHAAAgFmmw82oUaP06aefSpIeffRRzZkzR6GhoXrwwQf18MMPW14gAACAGabvLXW+Q4cOaceOHWrdurU6depkVV0+w72lAACoecx8f5ueUHy+li1bqmXLllXdDAAAgCUqFG5eeOEF3XPPPQoNDdULL7xwyb4PPPCAJYUBAABURoVOSyUkJGj79u1q0qSJEhISLr4xh0MHDhywtECrcVoKAICax/LTUmVXR53/ZwAAgOrG9NVS//73v31RBwAAgCVMh5vrr79eCQkJ+t3vfqfPPvvMFzUBAABUmulwc+TIET300EPasGGDEhMT1aVLFz377LM6fPiwL+oDAAAwpUrr3GRlZWnJkiVaunSpPv/8c/3sZz/Thx9+aGV9lmNCMQAANY+Z72/TIzfnSkhI0KOPPqpnnnlGiYmJ2rBhg6nPb9y4UYMGDVKzZs3kcDj09ttvX7J/RkaGHA7HBY/8/PwqHAUAALCTSoebzZs3a+zYsYqJidHw4cPVsWNHrVy50tQ2iouL1blzZ82ZM8fU5/bt26e8vDzPIyoqytTnAQCA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AABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABshXADAABspU6gC7AL12mXNr20W3n7SxTTKkzJYxPlDHYGuiwAAGqdajFyM2fOHMXHxys0NFQ9e/bUxx9/fMn+b731lq666iqFhoYqMTFRq1at8lOl5Ut/ZJviw46q74NdNPwvvdX3wS6KDzuq9Ee2BbQuAABqo4CHmzfeeEOTJk3S1KlTlZmZqc6dO2vAgAEqKCgot/+WLVs0bNgwjR49Wjt37lRqaqpSU1O1Z88eP1fulv7INg159hoddkV7tee6ojXk2WsIOAAA+JnDMAwjkAX07NlTV199tf7yl79IkkpLSxUXF6f7779fjz766AX9hw4dquLiYr377ruetl69eqlLly6aO3fuT+6vqKhIkZGRKiwsVERERJVqd512KT7s6P+CzYU50aFSxTrzlFUSzSkqAACqwMz3d0BHbk6fPq0dO3aoX79+nragoCD169dPW7duLfczW7du9eovSQMGDLho/1OnTqmoqMjrYZVNL+3WYVczXeyv0VCQclzNteml3ZbtEwAAXFpAw83XX38tl8ulpk2berU3bdpU+fn55X4mPz/fVP8ZM2YoMjLS84iLi7OmeEl5+0ss7QcAAKou4HNufG3KlCkqLCz0PHJycizbdkyrMEv7AQCAqgtouLnsssvkdDp19OhRr/ajR48qOjq63M9ER0eb6h8SEqKIiAivh1WSxyYq1nlEDpWW+75DpYpz5ip5bKJl+wQAAJcW0HATHBys7t27a926dZ620tJSrVu3TklJSeV+Jikpyau/JK1du/ai/X3JGezU7EnZknRBwCl7PWtSDpOJAQDwo4Cflpo0aZLmzZunxYsXa+/evbrvvvtUXFysUaNGSZJGjBihKVOmePpPmDBBq1ev1syZM/X5559r2rRp2r59u8aPHx+Q+tP+1EvLH/5YzZ3ec35inXla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VnR0dMD237BhQ0VFRfl0H40bN1ZRUZFP9wGgYhi5AWCZkSNHasOGDZo9e7bnFM3BgwcvOC21aNEiNWzYUO+++67atm2rsLAwDRkyRCUlJVq8eLHi4+PVqFEjPfDAA3K5XJ7tnzp1SpMnT1bz5s1Vv3599ezZUxkZGabrnDZtmrp06aIFCxaoRYsWatCggcaOHSuXy6U//elPio6OVlRUlP74xz96PmMYhqZNm6YWLVooJCREzZo10wMPPFDVvzIAPsDIDQDLzJ49W1988YU6duyoJ598UpJ0+eWX6+DBgxf0LSkp0QsvvKBly5bpxIkTSktL06233qqGDRtq1apVOnDggH75y1+qT58+Gjp0qCRp/Pjx+u9//6tly5apWbNmWrFihW666Sbt3r1bV155pala9+/fr/fee0+rV6/W/v37NWTIEB04cEBt2rTRhg0btGXLFt11113q16+fevbsqX/84x/685//rGXLlqlDhw7Kz8/Xp59+WuW/MwDWI9wAsExkZKSCg4MVFhb2k6ehzpw5o5dfflmtWrWSJA0ZMkSvvfaajh49qgYNGqh9+/bq27ev1q9fr6FDhyo7O1sLFy5Udna2mjVrJkmaPHmyVq9erYULF+rpp582VWtpaakWLFig8PBwz7727dunVatWKSgoSG3bttX//d//af369erZs6eys7MVHR2tfv36qW7dumrRooWuueaayv1FAfApwg2AgAgLC/MEG0lq2rSp4uPj1aBBA6+2goICSdLu3bvlcrnUpk0br+2cOnVKTZo0Mb3/+Ph4hYeHe+3L6XQqKCjIq61s/7/61a80a9YsXXHFFbrpppt0yy23aNCgQapTh1+jQHXD/5UAAqJu3bperx0OR7ltpaWlkqSTJ0/K6XRqx44dcjqdXv3ODUS+2n9cXJz27dunDz74QGvXrtXYsWP17LPPasOGDRd8DkBgEW4AWCo4ONhrErBVunbtKpfLpYKCAiUnJ1u+/YqoV6+eBg0apEGDBmncuHG66qqrtHv3bnXr1i0g9QAoH+EGgKXi4+P10Ucf6eDBg2rQoIEaN25syXbbtGmj22+/XSNGjNDMmTPVtWtXHTt2TOvWrVOnTp00cOBAS/ZzMYsWLZLL5VLPnj0VFhamv//976pXr55atmzp0/0CMI9LwQFYavLkyXI6nWrfvr0uv/xyZWdnW7bthQsXasSIEXrooYfUtm1bpaam6pNPPlGLFi0s28fFNGzYUPPmzVOfPn3UqVMnffDBB/rXv/5Vqfk+AHzLYRiGEegiAMBXHA6HVqxYodTUVJ/v6+DBg0pISNDOnTvVpUsXn+8PQPkYuQFge8OGDVNsbKxP93HzzTerQ4cOPt0HgIph5AaArX311VeSJKfTqYSEBJ/tJzc3V99//70kqUWLFgoODvbZvgBcGuEGAADYCqelAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAACArRBuAACArfx/LtKCYJgb4zAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f, ax = plt.subplots()\n", + "ax.plot(times * 1e3, stds_spin, \"ro\", label=\"spin\")\n", + "ax.plot(times * 1e3, stds_density, \"bo\", label=\"density\")\n", + "ax.set_xlabel(\"time [ms]\")\n", + "ax.set_ylabel(\"standard deviation\")\n", + "ax.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the expected behavior for the decoupling of spin and density. The density spreads much faster than the spin. This is the spin-charge separation." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The ffsim backend\n", + "\n", + "As we can see the time of the simulation scales exponentially with the number of sites. To increase the possible we can also run the simulations with the `ffsim` backend, which is exactly optimized for such tasks." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duration for of the two jobs: 62.67665886878967 seconds\n" + ] + } + ], + "source": [ + "# prepare the jobs\n", + "jobs_1_ffsim = backend_ffsim.run(circuits_1, shots=Nshots, num_species=2)\n", + "jobs_2_ffsim = backend_ffsim.run(circuits_2, shots=Nshots, num_species=2)\n", + "\n", + "# run them and time it\n", + "start_time = time.time()\n", + "count_list_1 = jobs_1_ffsim.result().get_counts()\n", + "count_list_2 = jobs_2_ffsim.result().get_counts()\n", + "end_time = time.time()\n", + "print(f\"Duration for of the two jobs: {end_time - start_time} seconds\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observe here that the code might not run quite as fast as we might like it. This is because the `ffsim` backend is optimized for trotterized approaches. Let us therefore try it out. Most important is to find time steps that are small compared to the large energy scale in the system, which is $U$ in this case. So let us run one long time evolution in two different ways:\n", + "\n", + "1. With the full Fermi Hubbard Hamiltonian applied as a single gate.\n", + "2. With the trotterized version of the Fermi Hubbard Hamiltonian." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "hop_long = Parameter(\"hop_long\")\n", + "int_long = Parameter(\"int_long\")\n", + "# initialize one spin-up and one spin-down atom in the left tweezer\n", + "qc_long = backend_ffsim.initialize_circuit(init_state_1)\n", + "\n", + "# apply a global Fermi-Hubbard gate with interaction\n", + "qc_long.fhubbard(\n", + " j=hop_long * np.ones(Nsites - 1), u=int_long, mu=np.zeros(Nsites), modes=range(2 * Nsites)\n", + ")\n", + "qc_long.measure_all()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duration for of the two jobs: 1.97 seconds\n" + ] + } + ], + "source": [ + "tmax = 1 / U\n", + "\n", + "circuit_long = qc_long.bind_parameters({hop_long: J * tmax, int_long: U * tmax})\n", + "job_long = backend.run(circuit_long, shots=5, num_species=2)\n", + "start_time = time.time()\n", + "count_long = job_long.result().get_counts()\n", + "end_time = time.time()\n", + "print(f\"Duration for of the two jobs: {end_time - start_time:.2f} seconds\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we will trotterize the circuit to make it more efficient." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time step = 0.01 ms\n", + "Number of trotter steps: 4\n" + ] + } + ], + "source": [ + "time_step = 1/(4*U)\n", + "print(f\"time step = {time_step*1e3:.2f} ms\")\n", + "\n", + "Ntrott = int(tmax / time_step)\n", + "print(f\"Number of trotter steps: {Ntrott}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "trott_hop = Parameter(\"trott_hop\")\n", + "trott_int = Parameter(\"trott_int\")\n", + "# initialize one spin-up and one spin-down atom in the left tweezer\n", + "qc_trott = backend_ffsim.initialize_circuit(init_state_1)\n", + "\n", + "for ii in range(Ntrott):\n", + " # apply a global Fermi-Hubbard gate with interaction\n", + " qc_trott.fhop(\n", + " j=trott_hop * np.ones(Nsites - 1),\n", + " modes=range(2 * Nsites),\n", + " )\n", + " qc_trott.fint(u=trott_int, modes=range(2 * Nsites))\n", + "# apply a global Fermi-Hubbard gate with interaction\n", + "qc_trott.measure_all()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duration for of the two jobs: 0.52 ms\n" + ] + } + ], + "source": [ + "circuit_trott = qc_trott.bind_parameters({trott_hop: J * time_step, trott_int: U * time_step})\n", + "job_trott = backend_ffsim.run(circuit_trott, shots=5, num_species=2)\n", + "start_time = time.time()\n", + "count_long = job_long.result().get_counts()\n", + "end_time = time.time()\n", + "print(f\"Duration for of the two jobs: {(end_time - start_time)*1e3:.2f} ms\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So as you can see nicely here the trotterized version is much faster and will enable us to simulate much larger systems in the future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusion\n", + "\n", + "In this notebook we have seen how to simulate the dynamics of a fermionic system in a 1D lattice. We have seen how to initialize the system in an anti-ferromagnetic configuration and how to measure the spin and density dynamics. We have seen how the spin and density dynamics decouple and how this can be quantified.\n", + "\n", + "Finally, we have seen that the `ffsim` backend is much faster for trotterized approaches and how it might potentially be used for larger systems in the future." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "[1] [Jayadev Vijayan et al.](https://arxiv.org/abs/1905.13638) *Time-Resolved Observation of Spin-Charge Deconfinement in Fermionic Hubbard Chains*. Science 367, 186 (2020)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

Version Information

Qiskit SoftwareVersion
qiskit-terra0.24.0
qiskit-aer0.12.2
qiskit-nature0.6.2
System information
Python version3.10.0
Python compilerClang 12.0.0
Python builddefault, Mar 3 2022 03:54:28
OSDarwin
CPUs8
Memory (Gb)8.0
Fri Jan 12 11:17:23 2024 CET
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "\n", + "%qiskit_version_table" + ] + } + ], + "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.10.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/qiskit_cold_atom/fermions/__init__.py b/qiskit_cold_atom/fermions/__init__.py index e6bbefc..858e74e 100644 --- a/qiskit_cold_atom/fermions/__init__.py +++ b/qiskit_cold_atom/fermions/__init__.py @@ -22,6 +22,15 @@ The :class:`FermionSimulator` backend is a general purpose simulator backend that simulates fermionic circuits similar to the QasmSimulator for qubits. +For higher-performance simulation, you can use :class:`FfsimBackend`, +which is much more efficient than :class:`FermionSimulator` and can handle larger circuits. +:class:`FfsimBackend` is not supported on Windows, and a special ``pip`` command is +needed to install it: + +.. code:: + + pip install "qiskit-cold-atom[ffsim]" + Fermionic backends ------------------- .. autosummary:: @@ -29,6 +38,7 @@ BaseFermionBackend FermionSimulator + FfsimBackend The fermions might also come in several distinguishable species, as is the case when they carry a spin degree of freedom. In this case, each spatial mode of an experiment can be occupied by a particle @@ -89,18 +99,22 @@ """ -from qiskit_cold_atom.fermions.fermion_simulator_backend import FermionSimulator from qiskit_cold_atom.fermions.base_fermion_backend import BaseFermionBackend from qiskit_cold_atom.fermions.fermion_circuit_solver import FermionCircuitSolver - from qiskit_cold_atom.fermions.fermion_gate_library import ( - FermionicGate, - LoadFermions, - Phase, - Hop, - Interaction, FermiHubbard, + FermionicGate, FRXGate, FRYGate, FRZGate, + Hop, + Interaction, + LoadFermions, + Phase, ) +from qiskit_cold_atom.fermions.fermion_simulator_backend import FermionSimulator + +try: + from qiskit_cold_atom.fermions.ffsim_backend import FfsimBackend +except ImportError: + pass diff --git a/qiskit_cold_atom/fermions/fermionic_state.py b/qiskit_cold_atom/fermions/fermionic_state.py index fd35a0a..bfd15d8 100644 --- a/qiskit_cold_atom/fermions/fermionic_state.py +++ b/qiskit_cold_atom/fermions/fermionic_state.py @@ -41,7 +41,7 @@ def __init__(self, occupations: Union[List[int], List[List[int]]]): - If the occupations are not 0 or 1 """ - if isinstance(occupations[0], int): + if isinstance(occupations[0], (int, np.integer)): occupations = [occupations] self._sites = len(occupations[0]) diff --git a/qiskit_cold_atom/fermions/ffsim_backend.py b/qiskit_cold_atom/fermions/ffsim_backend.py new file mode 100644 index 0000000..0a2e197 --- /dev/null +++ b/qiskit_cold_atom/fermions/ffsim_backend.py @@ -0,0 +1,654 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2023. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +"""Fermionic simulator backend that uses ffsim.""" + +from __future__ import annotations + +import datetime +import time +import uuid +import warnings +from collections import Counter +from typing import Any, Dict, List, Optional, Union + +import ffsim # pylint: disable=import-error +import numpy as np +import scipy.linalg +from qiskit import QuantumCircuit +from qiskit.circuit.library import Barrier, Measure +from qiskit.providers import Options +from qiskit.providers.models import BackendConfiguration +from qiskit.result import Result +from qiskit_aer import AerJob +from qiskit_nature.second_q.operators import FermionicOp +from scipy.sparse.linalg import expm_multiply + +from qiskit_cold_atom.circuit_tools import CircuitTools +from qiskit_cold_atom.fermions.base_fermion_backend import BaseFermionBackend +from qiskit_cold_atom.fermions.fermion_gate_library import ( + FermionicGate, + FRXGate, + FRYGate, + FRZGate, + Hop, + Interaction, + LoadFermions, + Phase, +) + + +class FfsimBackend(BaseFermionBackend): + """Fermionic simulator backend that uses ffsim. + + This is a high-performance simulator backend for fermionic circuits that uses `ffsim`_. + It computes the state vector and simulate measurements with vastly improved efficiency + compared with the :class:`~.FermionSimulator` backend. Unlike :class:`~.FermionSimulator`, + it does not compute the full unitary of a circuit. + + Currently, this simulator only supports simulations with 1 or 2 species of fermions. + The number of fermions of each species is assumed to be preserved, so that the + dimension of the state vector can be determined from the number of species and the + number of particles of each species. In particular, when simulating 2 species of fermions, + gates that mix particles of different species, such as :class:`~.FRXGate` and + :class:`FRYGate`, are not supported. In this respect, the behavior of this simulator + differs from :class:`FermionSimulator`, which would automatically resort to a + single-species simulation in which particles of each species are not distinguished. + + This backend is not supported on Windows, and in order for it to be available, + Qiskit Cold Atom must be installed with the ``ffsim`` extra, e.g. + + .. code:: + + pip install "qiskit-cold-atom[ffsim]" + + .. _ffsim: https://github.com/qiskit-community/ffsim + """ + + _DEFAULT_CONFIGURATION = { + "backend_name": "ffsim_simulator", + "backend_version": "0.0.1", + "n_qubits": 100, + "basis_gates": None, + "gates": [], + "local": False, + "simulator": True, + "conditional": False, + "open_pulse": False, + "memory": True, + "max_shots": 1e6, + "coupling_map": None, + "description": "ffsim simulator for fermionic circuits. Instead of qubits, each wire represents" + " a single fermionic mode", + "supported_instructions": None, + } + + def __init__(self, config_dict: Dict[str, Any] = None, provider=None): + """Initializing the backend from a configuration dictionary""" + + if config_dict is None: + config_dict = self._DEFAULT_CONFIGURATION + + super().__init__( + configuration=BackendConfiguration.from_dict(config_dict), provider=provider + ) + + @classmethod + def _default_options(cls): + return Options(shots=1) + + def _execute(self, data: Dict[str, Any], job_id: str = ""): + """Helper function to execute a job. The circuit and all relevant parameters are given in the + data dict. Performs validation checks on the received circuits and utilizes + ffsim to perform the numerical simulations. + + Args: + data: Data dictionary that that contains the experiments to simulate, given in the shape: + data = { + "num_species": int, + "shots": int, + "seed": int, + "experiments": Dict[str, QuantumCircuit], + } + job_id: The job id assigned by the run method + + Returns: + result: A qiskit job result. + """ + # Start timer + start = time.time() + + output = {"results": []} + + num_species = data["num_species"] + shots = data["shots"] + seed = data["seed"] + + for exp_i, exp_name in enumerate(data["experiments"]): + experiment = data["experiments"][exp_name] + circuit = experiment["circuit"] + + # perform compatibility checks with the backend configuration in case gates and supported + # instructions are constrained by the backend's configuration + if self.configuration().gates and self.configuration().supported_instructions: + CircuitTools.validate_circuits(circuits=circuit, backend=self, shots=shots) + + # check whether all wires are measured + measured_wires = [] + + for inst in circuit.data: + name = inst[0].name + + if name == "measure": + for wire in inst[1]: + index = circuit.qubits.index(wire) + if index in measured_wires: + warnings.warn( + f"Wire {index} has already been measured, " + f"second measurement is ignored" + ) + else: + measured_wires.append(index) + + if measured_wires and len(measured_wires) != len(circuit.qubits): + warnings.warn( + f"Number of wires in circuit ({len(circuit.qubits)}) exceeds number of wires " + + f" with assigned measurement instructions ({len(measured_wires)}). " + + "This simulator backend only supports measurement of the entire quantum register " + "which will instead be performed." + ) + + # If there are no measurements, set shots to None + if not measured_wires: + shots = None + + simulation_result = _simulate_ffsim(circuit, num_species, shots, seed) + + output["results"].append( + { + "header": {"name": exp_name, "random_seed": seed}, + "shots": shots, + "status": "DONE", + "success": True, + } + ) + # add the simulation result at the correct place in the result dictionary + output["results"][exp_i]["data"] = simulation_result + + output["job_id"] = job_id + output["date"] = datetime.datetime.now().isoformat() + output["backend_name"] = self.name() + output["backend_version"] = self.configuration().backend_version + output["time_taken"] = time.time() - start + output["success"] = True + output["qobj_id"] = None + + return Result.from_dict(output) + + # pylint: disable=arguments-differ, unused-argument + def run( + self, + circuits: Union[QuantumCircuit, List[QuantumCircuit]], + shots: int = 1000, + seed: Optional[int] = None, + num_species: int = 1, + **run_kwargs, + ) -> AerJob: + """ + Method to run circuits on the backend. + + Args: + circuits: QuantumCircuit applying fermionic gates to run on the backend + shots: Number of measurement shots taken in case the circuit has measure instructions + seed: seed for the random number generator of the measurement simulation + num_species: number of different fermionic species described by the circuits + run_kwargs: Additional keyword arguments that might be passed down when calling + qiskit.execute() which will have no effect on this backend. + + Returns: + aer_job: a job object containing the result of the simulation + + Raises: + ValueError: FfsimBackend only supports num_species=1 or 2. + """ + if num_species not in (1, 2): + raise ValueError(f"FfsimBackend only supports num_species=1 or 2. Got {num_species}.") + + if isinstance(circuits, QuantumCircuit): + circuits = [circuits] + + data = { + "num_species": num_species, + "shots": shots, + "seed": seed, + "experiments": {}, + } + + for idx, circuit in enumerate(circuits): + data["experiments"][f"experiment_{idx}"] = { + "circuit": circuit, + } + + job_id = str(uuid.uuid4()) + aer_job = AerJob(self, job_id, self._execute, data) + aer_job.submit() + return aer_job + + +def _simulate_ffsim( + circuit: QuantumCircuit, num_species: int, shots: int | None = None, seed=None +) -> dict[str, Any]: + assert circuit.num_qubits % num_species == 0 + norb = circuit.num_qubits // num_species + occ_a, occ_b = _get_initial_occupations(circuit, num_species) + nelec = len(occ_a), len(occ_b) + vec = ffsim.slater_determinant(norb, (occ_a, occ_b)) + qubit_indices = {q: i for i, q in enumerate(circuit.qubits)} + for instruction in circuit.data: + op, qubits, _ = instruction.operation, instruction.qubits, instruction.clbits + if isinstance(op, Hop): + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species) + vec = _simulate_hop( + vec, + np.array(op.params), + spatial_orbs, + norb=norb, + nelec=nelec, + num_species=num_species, + copy=False, + ) + elif isinstance(op, Interaction): + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species) + (interaction,) = op.params + vec = _simulate_interaction( + vec, + interaction, + spatial_orbs, + norb=norb, + nelec=nelec, + num_species=num_species, + copy=False, + ) + elif isinstance(op, Phase): + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species) + vec = _simulate_phase( + vec, + np.array(op.params), + spatial_orbs, + norb=norb, + nelec=nelec, + num_species=num_species, + copy=False, + ) + elif isinstance(op, FRZGate): + orbs = [qubit_indices[q] for q in qubits] + # pass num_species=1 here due to the definition of FRZGate + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species=1) + (phi,) = op.params + vec = _simulate_frz( + vec, + phi, + spatial_orbs, + norb=norb, + nelec=nelec, + num_species=num_species, + copy=False, + ) + elif isinstance(op, FRXGate): + if num_species != 1: + raise RuntimeError( + f"Encountered FRXGate even though num_species={num_species}. " + "FRXGate is only supported for num_species=1." + ) + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species=1) + (phi,) = op.params + vec = ffsim.apply_tunneling_interaction( + vec, -phi, spatial_orbs, norb, nelec, copy=False + ) + elif isinstance(op, FRYGate): + if num_species != 1: + raise RuntimeError( + f"Encountered FRXGate even though num_species={num_species}. " + "FRXGate is only supported for num_species=1." + ) + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species=1) + (phi,) = op.params + vec = ffsim.apply_givens_rotation(vec, -phi, spatial_orbs, norb, nelec, copy=False) + elif isinstance(op, FermionicGate): + orbs = [qubit_indices[q] for q in qubits] + spatial_orbs = _get_spatial_orbitals(orbs, norb, num_species) + ferm_op = _fermionic_op_to_fermion_operator(op.generator, spatial_orbs) + linop = ffsim.linear_operator(ferm_op, norb, nelec) + # TODO use ferm_op.values once it's available + scale = sum(abs(ferm_op[k]) for k in ferm_op) + vec = expm_multiply(-1j * linop, vec, traceA=scale) + elif isinstance(op, (LoadFermions, Measure, Barrier)): + # these gates are handled separately or are no-ops + pass + else: + warnings.warn(f"Unrecognized gate type {type(op)}, skipping it...") + + result = {"statevector": vec} + + if shots is None: + result["memory"] = [] + result["counts"] = {} + else: + rng = np.random.default_rng(seed) + probs = np.abs(vec) ** 2 + samples = rng.choice(np.arange(len(vec)), size=shots, replace=True, p=probs) + bitstrings = ffsim.indices_to_strings(samples, norb, nelec) + # flip beta-alpha to alpha-beta ordering + bitstrings = [f"{b[len(b) // 2 :]}{b[: len(b) // 2]}" for b in bitstrings] + # remove bits from absent spins + bitstrings = [b[: num_species * norb] for b in bitstrings] + result["memory"] = bitstrings + result["counts"] = Counter(bitstrings) + + return result + + +def _get_initial_occupations(circuit: QuantumCircuit, num_species: int): + norb = circuit.num_qubits // num_species + occ_a, occ_b = set(), set() + occupations = [occ_a, occ_b] + active_qubits = set() + for instruction in circuit.data: + if isinstance(instruction.operation, LoadFermions): + for q in instruction.qubits: + if q in active_qubits: + raise ValueError( + f"Encountered Load instruction on qubit {q} after it has " + "already been operated on." + ) + spin, orb = divmod(circuit.qubits.index(q), norb) + # reverse index due to qiskit convention + occupations[spin].add(norb - 1 - orb) + else: + active_qubits |= set(instruction.qubits) + return tuple(occ_a), tuple(occ_b) + + +def _get_spatial_orbitals(orbs: list[int], norb: int, num_species: int) -> list[int]: + assert len(orbs) % num_species == 0 + alpha_orbs = orbs[: len(orbs) // num_species] + if num_species == 2: + beta_orbs = [orb - norb for orb in orbs[len(orbs) // 2 :]] + assert alpha_orbs == beta_orbs + # reverse orbitals due to qiskit convention + alpha_orbs = [norb - 1 - orb for orb in alpha_orbs] + return alpha_orbs + + +def _simulate_hop( + vec: np.ndarray, + coeffs: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + num_species: int, + copy: bool, +) -> np.ndarray: + if num_species == 1: + return _simulate_hop_spinless( + vec=vec, + coeffs=coeffs, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + else: # num_species == 2 + return _simulate_hop_spinful( + vec=vec, + coeffs=coeffs, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + + +def _simulate_hop_spinless( + vec: np.ndarray, + coeffs: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + assert norb % 2 == 0 + assert len(target_orbs) % 2 == 0 + mat = np.zeros((norb, norb)) + for i, val in zip(range(len(target_orbs) // 2 - 1), coeffs): + j, k = target_orbs[i], target_orbs[i + 1] + mat[j, k] = -val + mat[k, j] = -val + for i, val in zip(range(len(target_orbs) // 2, len(target_orbs) - 1), coeffs): + j, k = target_orbs[i], target_orbs[i + 1] + mat[j, k] = -val + mat[k, j] = -val + coeffs, orbital_rotation = scipy.linalg.eigh(mat) + return ffsim.apply_num_op_sum_evolution( + vec, + coeffs, + 1.0, + norb=norb, + nelec=nelec, + orbital_rotation=orbital_rotation, + copy=copy, + ) + + +def _simulate_hop_spinful( + vec: np.ndarray, + coeffs: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + mat = np.zeros((norb, norb)) + for i, val in zip(range(len(target_orbs) - 1), coeffs): + j, k = target_orbs[i], target_orbs[i + 1] + mat[j, k] = -val + mat[k, j] = -val + coeffs, orbital_rotation = scipy.linalg.eigh(mat) + return ffsim.apply_num_op_sum_evolution( + vec, + coeffs, + 1.0, + norb=norb, + nelec=nelec, + orbital_rotation=orbital_rotation, + copy=copy, + ) + + +def _simulate_interaction( + vec: np.ndarray, + interaction: float, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + num_species: int, + copy: bool, +) -> np.ndarray: + if num_species == 1: + return _simulate_interaction_spinless( + vec=vec, + interaction=interaction, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + else: # num_species == 2 + return _simulate_interaction_spinful( + vec=vec, + interaction=interaction, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + + +def _simulate_interaction_spinless( + vec: np.ndarray, + interaction: float, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + assert len(target_orbs) % 2 == 0 + n_spatial_orbs = len(target_orbs) // 2 + mat = np.zeros((norb, norb)) + mat[target_orbs[:n_spatial_orbs], target_orbs[n_spatial_orbs:]] = interaction + mat[target_orbs[n_spatial_orbs:], target_orbs[:n_spatial_orbs]] = interaction + return ffsim.apply_diag_coulomb_evolution( + vec, + mat=mat, + time=1.0, + norb=norb, + nelec=nelec, + copy=copy, + ) + + +def _simulate_interaction_spinful( + vec: np.ndarray, + interaction: float, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + mat_alpha_beta = np.zeros((norb, norb)) + mat_alpha_beta[target_orbs, target_orbs] = interaction + return ffsim.apply_diag_coulomb_evolution( + vec, + mat=np.zeros((norb, norb)), + mat_alpha_beta=mat_alpha_beta, + time=1.0, + norb=norb, + nelec=nelec, + copy=copy, + ) + + +def _simulate_phase( + vec: np.ndarray, + mu: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + num_species: int, + copy: bool, +) -> np.ndarray: + if num_species == 1: + return _simulate_phase_spinless( + vec=vec, + mu=mu, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + else: # num_species == 2 + return _simulate_phase_spinful( + vec=vec, + mu=mu, + target_orbs=target_orbs, + norb=norb, + nelec=nelec, + copy=copy, + ) + + +def _simulate_phase_spinless( + vec: np.ndarray, + mu: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + assert len(target_orbs) % 2 == 0 + n_spatial_orbs = len(target_orbs) // 2 + coeffs = np.zeros(norb) + coeffs[target_orbs[:n_spatial_orbs]] = mu + coeffs[target_orbs[n_spatial_orbs:]] = mu + return ffsim.apply_num_op_sum_evolution( + vec, coeffs, time=1.0, norb=norb, nelec=nelec, copy=copy + ) + + +def _simulate_phase_spinful( + vec: np.ndarray, + mu: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + copy: bool, +) -> np.ndarray: + coeffs = np.zeros(norb) + coeffs[target_orbs] = mu + return ffsim.apply_num_op_sum_evolution( + vec, coeffs, time=1.0, norb=norb, nelec=nelec, copy=copy + ) + + +def _simulate_frz( + vec: np.ndarray, + phi: np.ndarray, + target_orbs: list[int], + norb: int, + nelec: tuple[int, int], + num_species: int, + copy: bool, +) -> np.ndarray: + if num_species == 1: + a, b = target_orbs + vec = ffsim.apply_num_interaction(vec, -phi, a, norb, nelec, copy=copy) + vec = ffsim.apply_num_interaction(vec, phi, b, norb, nelec, copy=False) + return vec + else: # num_species == 2 + a, b = target_orbs + spin_a, orb_a = divmod(a, norb) + spin_b, orb_b = divmod(b, norb) + spins = (ffsim.Spin.ALPHA, ffsim.Spin.BETA) + vec = ffsim.apply_num_interaction(vec, -phi, orb_a, norb, nelec, spins[spin_a], copy=copy) + vec = ffsim.apply_num_interaction(vec, phi, orb_b, norb, nelec, spins[spin_b], copy=False) + return vec + + +def _fermionic_op_to_fermion_operator( # pylint: disable=invalid-name + op: FermionicOp, target_orbs: list[int] +) -> ffsim.FermionOperator: + """Convert a Qiskit Nature FermionicOp to an ffsim FermionOperator.""" + norb_small = len(target_orbs) + coeffs = {} + for term, coeff in op.terms(): + fermion_actions = [] + for action_str, index in term: + action = action_str == "+" + spin, orb = divmod(index, norb_small) + fermion_actions.append((action, bool(spin), target_orbs[orb])) + coeffs[tuple(fermion_actions)] = coeff + return ffsim.FermionOperator(coeffs) diff --git a/qiskit_cold_atom/providers/cold_atom_provider.py b/qiskit_cold_atom/providers/cold_atom_provider.py index af5d433..f51cc56 100644 --- a/qiskit_cold_atom/providers/cold_atom_provider.py +++ b/qiskit_cold_atom/providers/cold_atom_provider.py @@ -39,6 +39,13 @@ ) from qiskit_cold_atom.providers.collective_spin_backend import CollectiveSpinSimulator +try: + from qiskit_cold_atom.fermions import FfsimBackend + + HAVE_FFSIM = True +except ImportError: + HAVE_FFSIM = False + # Default location of the credentials file _DEFAULT_COLDATOM_FILE = os.path.join( os.path.expanduser("~"), ".qiskit", "cold_atom_credentials.conf" @@ -86,6 +93,8 @@ def __init__(self, credentials: Optional[Dict[str, Union[str, List[str]]]] = Non FermionicTweezerSimulator(provider=self), CollectiveSpinSimulator(provider=self), ] + if HAVE_FFSIM: + backends.append(FfsimBackend(provider=self)) if credentials is not None: try: diff --git a/releasenotes/notes/ffsim-backend-d4e557a368af5808.yaml b/releasenotes/notes/ffsim-backend-d4e557a368af5808.yaml new file mode 100644 index 0000000..1427d7a --- /dev/null +++ b/releasenotes/notes/ffsim-backend-d4e557a368af5808.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Adds a simulator backend based on `ffsim`_. + For supported circuits, the simulator is orders of magnitude faster than the existing + :class:`~.FermionSimulator` backend. This backend is not supported on Windows. + For more details, see https://github.com/qiskit-community/qiskit-cold-atom/pull/90. + .. _ffsim: https://github.com/qiskit-community/ffsim \ No newline at end of file diff --git a/setup.py b/setup.py index 221e12e..4813539 100644 --- a/setup.py +++ b/setup.py @@ -52,6 +52,7 @@ keywords="qiskit sdk quantum cold atoms", packages=setuptools.find_packages(include=["qiskit_cold_atom", "qiskit_cold_atom.*"]), install_requires=REQUIREMENTS, + extras_require={"ffsim": ["ffsim==0.0.21"]}, include_package_data=True, python_requires=">=3.8", zip_safe=False, diff --git a/test/test_ffsim_backend.py b/test/test_ffsim_backend.py new file mode 100644 index 0000000..1fec577 --- /dev/null +++ b/test/test_ffsim_backend.py @@ -0,0 +1,511 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2021. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +"""ffsim backend tests.""" + +from __future__ import annotations + +import math +import unittest + +import numpy as np +from qiskit.test import QiskitTestCase + +from qiskit_cold_atom.fermions import ( + FermiHubbard, + FermionSimulator, + Hop, + Interaction, + Phase, + FRXGate, + FRYGate, + FRZGate, +) + +try: + from qiskit_cold_atom.fermions.ffsim_backend import FfsimBackend + + HAVE_FFSIM = True +except ImportError: + HAVE_FFSIM = False + + +def _random_occupations(norb: int, nelec: tuple[int, int], seed=None): + rng = np.random.default_rng(seed) + n_alpha, n_beta = nelec + alpha_bits = np.zeros(norb, dtype=int) + alpha_bits[:n_alpha] = 1 + beta_bits = np.zeros(norb, dtype=int) + beta_bits[:n_beta] = 1 + rng.shuffle(alpha_bits) + rng.shuffle(beta_bits) + return [list(alpha_bits), list(beta_bits)] + + +def _fidelity(counts1: dict[str, int], counts2: dict[str, int]) -> float: + result = 0 + shots = sum(counts1.values()) + assert sum(counts2.values()) == shots + for bitstring in counts1.keys() | counts2.keys(): + prob1 = counts1.get(bitstring, 0) / shots + prob2 = counts2.get(bitstring, 0) / shots + result += math.sqrt(prob1 * prob2) + return result**2 + + +@unittest.skipUnless(HAVE_FFSIM, "requires ffsim") +class TestFfsimBackend(QiskitTestCase): + """Test FfsimBackend.""" + + def test_hop_gate_spinless(self): + """Test hop gate, spinless.""" + norb = 6 + nelec = 3 + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, (nelec, 0), seed=rng)[0] + hopping = rng.standard_normal(norb // 2 - 1) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Hop(norb, hopping), list(range(norb))) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + qubits = rng.choice(np.arange(norb), norb - 2, replace=False) + qc.append(Hop(norb - 2, hopping[: (norb - 2) // 2 - 1]), list(qubits)) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_hop_gate(self): + """Test hop gate.""" + norb = 5 + nelec = (3, 2) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, nelec, seed=rng) + hopping = rng.standard_normal(norb - 1) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Hop(2 * norb, hopping), list(range(2 * norb))) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + orbs = rng.choice(np.arange(norb), norb - 1, replace=False) + qubits = np.concatenate([orbs, orbs + norb]) + qc.append(Hop(2 * (norb - 1), hopping[: norb - 2]), list(qubits)) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_hop_gate_sign(self): + """Test hop gate correctly handles fermionic sign.""" + norb = 4 + + occupations = [[1, 0, 1, 0], [1, 0, 1, 0]] + hopping = [1.0] + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + qc = sim_backend.initialize_circuit(occupations) + orbs = np.array([1, 0]) + qubits = np.concatenate([orbs, orbs + norb]) + qc.append(Hop(4, hopping), list(qubits)) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_interaction_gate_spinless(self): + """Test interaction gate, spinless.""" + norb = 6 + nelec = 3 + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, (nelec, 0), seed=rng)[0] + interaction = rng.standard_normal() + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Interaction(norb, interaction), list(range(norb))) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + qubits = rng.choice(np.arange(norb), norb - 2, replace=False) + qc.append(Interaction(norb - 2, interaction), list(qubits)) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_interaction_gate(self): + """Test interaction gate.""" + norb = 5 + nelec = (3, 2) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, nelec, seed=rng) + interaction = rng.standard_normal() + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Interaction(2 * norb, interaction), list(range(2 * norb))) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + orbs = rng.choice(np.arange(norb), norb - 1, replace=False) + qubits = np.concatenate([orbs, orbs + norb]) + qc.append(Interaction(2 * (norb - 1), interaction), list(qubits)) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_phase_gate_spinless(self): + """Test phase gate.""" + norb = 6 + nelec = 3 + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, (nelec, 0), seed=rng)[0] + mu = rng.standard_normal(norb // 2) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Phase(norb, mu), list(range(norb))) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + qubits = rng.choice(np.arange(norb), norb - 2, replace=False) + qc.append(Phase(norb - 2, mu[: (norb - 2) // 2]), list(qubits)) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_phase_gate(self): + """Test phase gate.""" + norb = 5 + nelec = (3, 2) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, nelec, seed=rng) + mu = rng.standard_normal(norb) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Phase(2 * norb, mu), list(range(2 * norb))) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + orbs = rng.choice(np.arange(norb), norb - 1, replace=False) + qubits = np.concatenate([orbs, orbs + norb]) + qc.append(Phase(2 * (norb - 1), mu[: norb - 1]), list(qubits)) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_frz_gate(self): + """Test FRZGate.""" + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + occupations = [1, 0, 0, 1, 0, 1, 0, 1] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRZGate(0.25), [0, 4]) + qc.append(FRZGate(0.5), [1, 5]) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + occupations = [[1, 0, 0, 1], [0, 1, 0, 1]] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRZGate(0.25), [0, 4]) + qc.append(FRZGate(0.5), [1, 5]) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_frx_gate(self): + """Test FRXGate.""" + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + occupations = [1, 0, 0, 1, 0, 1, 0, 1] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRXGate(0.25), [0, 4]) + qc.append(FRXGate(0.5), [1, 5]) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + occupations = [[1, 0, 0, 1], [0, 1, 0, 1]] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRXGate(0.25), [0, 4]) + qc.append(FRXGate(0.5), [1, 5]) + with self.assertRaisesRegex(RuntimeError, "num_species"): + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + + def test_fry_gate(self): + """Test FRYGate.""" + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + occupations = [1, 0, 0, 1, 0, 1, 0, 1] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRYGate(0.25), [0, 4]) + qc.append(FRYGate(0.5), [1, 5]) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + occupations = [[1, 0, 0, 1], [0, 1, 0, 1]] + qc = sim_backend.initialize_circuit(occupations) + qc.append(FRYGate(0.25), [0, 4]) + qc.append(FRYGate(0.5), [1, 5]) + with self.assertRaisesRegex(RuntimeError, "num_species"): + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + + def test_fermi_hubbard_gate_spinless(self): + """Test Fermi-Hubbard gate.""" + norb = 6 + nelec = 3 + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, (nelec, 0), seed=rng)[0] + hopping = rng.standard_normal(norb // 2 - 1) + interaction = rng.standard_normal() + mu = rng.standard_normal(norb // 2) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(FermiHubbard(norb, hopping, interaction, mu), list(range(norb))) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + qubits = rng.choice(np.arange(norb), norb - 2, replace=False) + qc.append( + FermiHubbard( + norb - 2, + hopping[: (norb - 2) // 2 - 1], + interaction, + mu[: (norb - 2) // 2], + ), + list(qubits), + ) + job = sim_backend.run(qc) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_fermi_hubbard_gate(self): + """Test Fermi-Hubbard gate.""" + norb = 5 + nelec = (3, 2) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng() + for _ in range(3): + occupations = _random_occupations(norb, nelec, seed=rng) + hopping = rng.standard_normal(norb - 1) + interaction = rng.standard_normal() + mu = rng.standard_normal(norb) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(FermiHubbard(2 * norb, hopping, interaction, mu), list(range(2 * norb))) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + # test acting on subset of orbitals + qc = sim_backend.initialize_circuit(occupations) + orbs = rng.choice(np.arange(norb), norb - 1, replace=False) + qubits = np.concatenate([orbs, orbs + norb]) + qc.append( + FermiHubbard(2 * (norb - 1), hopping[: norb - 2], interaction, mu[: norb - 1]), + list(qubits), + ) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_fermi_hubbard_gate_simple(self): + """Test a simple Fermi-Hubbard gate.""" + norb = 4 + + occupations = [[1, 1, 0, 0], [1, 1, 0, 0]] + hopping = np.arange(norb - 1) + interaction = 1.0 + mu = np.arange(norb) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + qc = sim_backend.initialize_circuit(occupations) + qc.append(FermiHubbard(2 * norb, hopping, interaction, mu), list(range(2 * norb))) + job = sim_backend.run(qc, num_species=2) + expected_vec = job.result().get_statevector() + job = ffsim_backend.run(qc, num_species=2) + ffsim_vec = job.result().get_statevector() + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + + def test_simulate(self): + """Test simulating and measuring a statevector.""" + norb = 5 + nelec = (3, 2) + + rng = np.random.default_rng(1234) + occupations = _random_occupations(norb, nelec, seed=rng) + hopping = rng.standard_normal(norb - 1) + interaction = rng.standard_normal() + mu = rng.standard_normal(norb) + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Hop(2 * norb, hopping), list(range(2 * norb))) + qc.append(Interaction(2 * norb, interaction), list(range(2 * norb))) + qc.append(Phase(2 * norb, mu), list(range(2 * norb))) + qc.measure_all() + + job = sim_backend.run(qc, shots=10000, seed=1234, num_species=2) + result = job.result() + expected_vec = result.get_statevector() + expected_counts = result.get_counts() + + job = ffsim_backend.run(qc, shots=10000, seed=1234, num_species=2) + result = job.result() + ffsim_vec = result.get_statevector() + ffsim_counts = result.get_counts() + + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + assert _fidelity(ffsim_counts, expected_counts) > 0.99 + + def test_simulate_spinless(self): + """Test simulating and measuring a statevector.""" + norb = 6 + nelec = 3 + + sim_backend = FermionSimulator() + ffsim_backend = FfsimBackend() + + rng = np.random.default_rng(1234) + occupations = _random_occupations(norb, (nelec, 0), seed=rng)[0] + hopping = rng.standard_normal(norb // 2 - 1) + interaction = rng.standard_normal() + mu = rng.standard_normal(norb // 2) + + qc = sim_backend.initialize_circuit(occupations) + qc.append(Hop(norb, hopping), list(range(norb))) + qc.append(Interaction(norb, interaction), list(range(norb))) + qc.append(Phase(norb, mu), list(range(norb))) + qc.measure_all() + + job = sim_backend.run(qc, shots=10000, seed=1234) + result = job.result() + expected_vec = result.get_statevector() + expected_counts = result.get_counts() + + job = ffsim_backend.run(qc, shots=10000, seed=1234) + result = job.result() + ffsim_vec = result.get_statevector() + ffsim_counts = result.get_counts() + + np.testing.assert_allclose(ffsim_vec, expected_vec, atol=1e-12) + assert _fidelity(ffsim_counts, expected_counts) > 0.99 diff --git a/tox.ini b/tox.ini index d4a3685..dcbc071 100644 --- a/tox.ini +++ b/tox.ini @@ -25,6 +25,10 @@ commands = commands = black {posargs} qiskit_cold_atom test [testenv:docs] +deps = + -r{toxinidir}/requirements.txt + -r{toxinidir}/requirements-dev.txt + .[ffsim] commands = sphinx-build -j auto -b html -W {posargs} docs/ docs/_build/html @@ -33,3 +37,7 @@ skip_install = true deps = allowlist_externals = rm commands = rm -rf {toxinidir}/docs/stubs/ {toxinidir}/docs/_build + +[testenv:ffsim] +deps = .[ffsim] +commands = python -m unittest test/test_ffsim_backend.py \ No newline at end of file