I’m new to StrawberryFields. I’ve completed the X8 tutorial and am now working the Squeezer Characterization tutorial. Here is the code, should look familiar:
import numpy as np
from numpy.core.fromnumeric import swapaxes
import strawberryfields as sf
def run_job(
job_name="default_name",
n_spatial_modes=4,
unitary=None,
squeezing_amplitudes=None,
n_samples=500000, ):
prog = sf.Program(n_spatial_modes*2, name=job_name)
# If no unitary is provided, default to the identity
if unitary is None:
unitary = np.identity(n_spatial_modes)
# If no squeezing amplitudes are provided, default to all of them being off
if squeezing_amplitudes is None:
squeezing_amplitudes = [0]*n_spatial_modes
with prog.context as q:
for i in range(n_spatial_modes):
sf.ops.S2gate(squeezing_amplitudes[i]) | (q[i], q[i*n_spatial_modes])
for qumodes in (q[:n_spatial_modes], q[n_spatial_modes:]):
sf.ops.Interferometer(unitary) | qumodes
sf.ops.MeasureFock() | q
eng = sf.RemoteEngine("X8_01")
return eng.run(prog, shots=n_samples, disable_port_permutation=True)
# collect sample that allow us to characterize the squeezer
squeezer0 = run_job(job_name="squeezer0_char", squeezing_amplitudes=[1, 0, 0, 0])
# Analysis
# https://strawberryfields.ai/photonics/demos/squeezer_tests.html#analysis
# The samples span 4 spatial x 2 frequency = 8 detector channels.
# we calculate the mean photon number of each
n_means = np.mean(squeezer0.samples, axis=0)
print(f"The mean photon numbers <n> of each channel are: \n{n_means}")
Upon executing the code I get this Traceback:
(qenv) C:\Users\cfernandez37\Documents\Quantum\Xanadu>c:/Users/cfernandez37/Documents/Quantum/Xanadu/qenv/Scripts/python.exe c:/Users/cfernandez37/Documents/Quantum/Xanadu/SqueezerCharacterization/squeezer_char.py
Traceback (most recent call last):
File "c:/Users/cfernandez37/Documents/Quantum/Xanadu/SqueezerCharacterization/squeezer_char.py", line 34, in <module>
squeezer0 = run_job(job_name="squeezer0_char", squeezing_amplitudes=[1, 0, 0, 0])
File "c:/Users/cfernandez37/Documents/Quantum/Xanadu/SqueezerCharacterization/squeezer_char.py", line 24, in run_job
sf.ops.S2gate(squeezing_amplitudes[i]) | (q[i], q[i*n_spatial_modes])
File "c:\Users\cfernandez37\Documents\Quantum\Xanadu\qenv\lib\site-packages\strawberryfields\ops.py", line 142, in __or__
reg = pu.Program_current_context.append(self, reg)
File "c:\Users\cfernandez37\Documents\Quantum\Xanadu\qenv\lib\site-packages\strawberryfields\program.py", line 427, in append
reg = self._test_regrefs(reg)
File "c:\Users\cfernandez37\Documents\Quantum\Xanadu\qenv\lib\site-packages\strawberryfields\program.py", line 410, in _test_regrefs
raise RegRefError("Trying to act on the same subsystem more than once.")
strawberryfields.program_utils.RegRefError: Trying to act on the same subsystem more than once.
I’ve tried searching the internet, the Slack channel, and this forum, and all I can find is the Docs page forRegRefError.
Can someone help me debug what I did wrong? I was able to activate my API key and work through the X8 tutorial with minimal issues.