c.add_gate("displacement", n_params=0, fn=cav_zy) # ZZ rotation c.add_gate("snap", n_params=1, fn=snap_zz) # arbitrary one-qubit rotations c.add_gate("rotation") c.add_gate("displacement", n_params=1, fn=cav_xrot) c.add_gate("displacement", n_params=1, fn=cav_yrot) c.add_gate("displacement", n_params=1, fn=cav_xrot) np.set_printoptions(precision=3) np.set_printoptions(suppress=True) c.assemble() print() print("num free params: {}".format(c.n_params)) print() rng = np.random.default_rng() params = rng.uniform(high=2*np.pi, size=c.n_params) print("param vector:\n{}".format(params)) print() u = c.evaluate(params) print("resulting unitary:\n{}".format(u)) print() tensor = c.get_tensor(params) print("resulting tensor:\n{}".format(tensor))