import matplotlib.pyplot as plt from viznet import DynamicShow, QuantumCircuit from viznet import parsecircuit as _ def qft(): num_bit = 5 with DynamicShow((10, 3.5), '_qft.png') as ds: handler = QuantumCircuit(num_bit=num_bit, y0=2.) handler.x += 0.7 for i in range(num_bit): if i ==1: context = handler.block(slice(i, num_bit-1), pad_y=0.1, pad_x=0.2) boxes = context.__enter__() for k in range(i, num_bit): if i==k: handler.gate(_.GATE, i, 'H') else: if i ==0 and k==1+2: context = handler.block(slice(i, k), pad_y=0.1, pad_x = 0.15) boxes = context.__enter__() handler.gate((_.C, _.WIDE), (k, i), ['',r'R${}_%d$'%(k-i+1)]) if i ==0 and k==1+2: context.__exit__(None, None, None) boxes[0].text("A", "top") if i==1 and k==num_bit-1: context.__exit__(None, None, None) boxes[0].text("B", "top") handler.x+=1.0 handler.x+=0.2 for i in range(num_bit): handler.gate(_.END, i) # text |0>s for i in range(num_bit): plt.text(*handler.get_position(i, x=-0.5), r'$\left\vert ?\right\rangle_{Q_%d}$' % (i+1), va='center', ha='center', fontsize=16) plt.text(8.5, -3, "Quantum Fourier Transformation circuit of size 5", ha='center') if __name__ == '__main__': qft()