codex/past-exam-of-the-computer-science-course-of-the-university-of-oxford/2020/quantum-information-quarter-marked-search.py

past-exam-of-the-computer-science-course-of-the-university-of-oxford/2020/quantum-information-quarter-marked-search.py
"""Original exact-search amplitude illustration for Oxford Quantum Information 2020.
Python 3.14.4, NumPy 2.3.5, Matplotlib 3.10.7, pinned in the root pyproject.
Run anywhere: writes the same-basename white opaque PNG in CWD.
"""
from pathlib import Path
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt


def main():
    size=8
    marked=np.zeros(size,dtype=bool)
    marked[[1,6]]=True
    uniform=np.ones(size)/np.sqrt(size)
    oracle=np.where(marked,-1.0,1.0)*uniform
    mean=oracle.mean()
    reflection=2*np.outer(uniform,uniform)-np.eye(size)
    final=reflection@oracle
    assert np.allclose(final[~marked],0)
    assert np.allclose(final[marked],2/np.sqrt(size))
    probabilities=abs(final)**2
    plt.rcParams.update({'font.size':10,'axes.spines.top':False,'axes.spines.right':False})
    fig,(ax,bx)=plt.subplots(1,2,figsize=(10,3.9),dpi=100,gridspec_kw={'width_ratios':[1.35,1]})
    fig.patch.set_facecolor('white')
    x=np.arange(size)
    ax.bar(x-.17,oracle,width=.34,color='#8d9ba4',label='After phase oracle')
    ax.bar(x+.17,final,width=.34,color='#21618c',label='After reflection')
    ax.axhline(0,color='#222222',linewidth=.8)
    ax.axhline(mean,color='#a86528',linestyle='--',linewidth=1,label='Oracle-state mean')
    ax.set(xlabel='Computational-basis label',ylabel='Real probability amplitude',xticks=x,ylim=(-.44,.86),title='Invert signed amplitudes about their mean')
    ax.legend(fontsize=8,loc='upper left')
    bx.bar(x,probabilities,color=['#21618c' if v else '#eeeeee' for v in marked],width=.65)
    bx.set(xlabel='Measured label',ylabel='Final Born probability',xticks=x,ylim=(0,.64),title='Uniform over the marked labels')
    for label in [1,6]:
        bx.text(label,.52,'1/2',ha='center',fontsize=10)
    fig.suptitle('One exact Grover iteration: 2 marked inputs out of 8 (illustrative labels 1 and 6)',fontsize=11)
    fig.tight_layout(rect=(0,0,1,.93))
    fig.savefig(Path.cwd()/(Path(__file__).stem+'.png'),facecolor='white',transparent=False,
                metadata={'Software':'NumPy/Matplotlib; original Oxford 2020 quantum-information solution'})
    plt.close(fig)


if __name__=='__main__':main()