Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
591 commits
Select commit Hold shift + click to select a range
154b219
arbZ
nimalec Jul 14, 2022
02a8c36
arbZ
nimalec Jul 14, 2022
1c5b575
arbZ
nimalec Jul 14, 2022
ded4b2d
arbZ
nimalec Jul 14, 2022
ad7ac2e
arbZ
nimalec Jul 14, 2022
f2d4474
arbZ
nimalec Jul 14, 2022
b652b00
arbZ
nimalec Jul 14, 2022
049face
arbZ
nimalec Jul 14, 2022
cb4c12b
arbZ
nimalec Jul 14, 2022
6bfdc88
arbZ
nimalec Jul 14, 2022
3e76f76
arbZ
nimalec Jul 14, 2022
83b46e2
arbZ
nimalec Jul 14, 2022
e13e77f
arbZ
nimalec Jul 14, 2022
5827218
arbZ
nimalec Jul 14, 2022
b289760
awg
nimalec Jul 14, 2022
4d27b1f
awg
nimalec Jul 15, 2022
281e6d4
awg
nimalec Jul 15, 2022
0612b85
awg
nimalec Jul 15, 2022
62ae4be
arbZ
nimalec Jul 16, 2022
7801bd9
arbZ
nimalec Jul 16, 2022
0639f93
arbZ
nimalec Jul 16, 2022
1fd9e53
arbZ
nimalec Jul 16, 2022
baa0c70
arbZ
nimalec Jul 16, 2022
be668b9
Zarb test
nimalec Jul 25, 2022
b39519d
Zarb test
nimalec Jul 25, 2022
7e86661
zarb
nimalec Jul 25, 2022
c851929
zarb
nimalec Jul 25, 2022
c92ff20
zarb
nimalec Jul 25, 2022
8abdd07
zarb
nimalec Jul 25, 2022
13f37ab
zarb
nimalec Jul 25, 2022
8472a1f
zarb
nimalec Jul 25, 2022
061e896
zarb
nimalec Jul 25, 2022
290d808
zarb
nimalec Jul 25, 2022
277a865
zarb
nimalec Jul 25, 2022
5b1b900
zarb
nimalec Jul 25, 2022
9420c50
zarb
nimalec Jul 25, 2022
340b51e
zarb
nimalec Jul 25, 2022
545fa89
awg
nimalec Jul 26, 2022
a8aa1ef
awg
nimalec Jul 26, 2022
ecd8445
awg
nimalec Jul 26, 2022
c18201e
awg
nimalec Jul 26, 2022
bc72d8e
awg
nimalec Jul 26, 2022
ed07dd8
awg
nimalec Jul 26, 2022
79b44be
awg
nimalec Jul 26, 2022
a2d76c8
awg
nimalec Jul 26, 2022
1795727
awg
nimalec Jul 26, 2022
d09bda5
awg
nimalec Jul 26, 2022
68a201e
awg
nimalec Jul 26, 2022
daade92
awg
nimalec Jul 26, 2022
812bbf2
awg
nimalec Jul 26, 2022
61bfc5d
awg
nimalec Jul 27, 2022
a01b175
awg
nimalec Jul 27, 2022
d881633
aw
nimalec Jul 27, 2022
abc814d
aw
nimalec Jul 27, 2022
2b73d77
aw
nimalec Jul 27, 2022
c744f76
aw
nimalec Jul 27, 2022
a0a2cc2
aw
nimalec Jul 27, 2022
605e71c
aw
nimalec Jul 27, 2022
eb2f9fc
aw
nimalec Jul 27, 2022
8d40d30
awg
nimalec Jul 28, 2022
8b219c2
awg
nimalec Jul 28, 2022
e396608
awg
nimalec Jul 28, 2022
c09376b
awg
nimalec Jul 29, 2022
6243928
awg
nimalec Jul 29, 2022
19ce29e
awg
nimalec Jul 29, 2022
894fac2
awg
nimalec Jul 29, 2022
1fdd5f9
awg
nimalec Jul 29, 2022
d59e94f
awg
nimalec Jul 29, 2022
e463502
awg
nimalec Jul 29, 2022
b1c5679
awg
nimalec Jul 29, 2022
bd24ef4
awg
nimalec Jul 29, 2022
e642c1b
awg
nimalec Jul 29, 2022
ae9096d
awg
nimalec Jul 29, 2022
b54bc42
awg
nimalec Jul 29, 2022
18b4ae5
awg
nimalec Jul 29, 2022
f865557
awg
nimalec Jul 29, 2022
30a6ddd
awg
nimalec Jul 29, 2022
a4eaa5a
awg
nimalec Jul 29, 2022
f81f244
awg
nimalec Jul 29, 2022
bb5d088
awg
nimalec Jul 29, 2022
8c8c418
awg
nimalec Jul 29, 2022
4d95451
awg
nimalec Jul 29, 2022
e9571a4
awg
nimalec Jul 29, 2022
807cb38
awg
nimalec Jul 29, 2022
a4cf2ee
awg
nimalec Jul 29, 2022
d19f2ed
awg
nimalec Jul 29, 2022
b2fb1ea
awg
nimalec Jul 29, 2022
475bdc2
awg
nimalec Jul 29, 2022
8d447a6
awg
nimalec Jul 29, 2022
2e0b2b1
awg
nimalec Jul 29, 2022
dc04c75
awg
nimalec Jul 29, 2022
5282de1
awg
nimalec Jul 29, 2022
e78db4e
awg
nimalec Jul 29, 2022
b4eee7d
awg
nimalec Jul 29, 2022
6757ef0
awg
nimalec Jul 29, 2022
caf290b
awg
nimalec Jul 29, 2022
c7e0758
awg
nimalec Jul 29, 2022
35db994
awg
nimalec Jul 29, 2022
f398441
awg
nimalec Jul 29, 2022
ec1eaec
awg
nimalec Jul 29, 2022
74154be
awg
nimalec Jul 29, 2022
36a5327
awg
nimalec Jul 29, 2022
2a4a386
awg
nimalec Jul 29, 2022
6396c94
awg
nimalec Jul 29, 2022
f3f0002
awg
nimalec Jul 29, 2022
103f716
awg
nimalec Jul 29, 2022
bd9e7fa
awg
nimalec Jul 29, 2022
4121663
awg
nimalec Jul 29, 2022
5299bd2
awg
nimalec Jul 29, 2022
b0d0135
awg
nimalec Jul 29, 2022
d53ca3a
awg
nimalec Jul 29, 2022
c57121c
awg
nimalec Jul 29, 2022
8fe8fcb
li
nimalec Aug 1, 2022
dbcf3e0
li
nimalec Aug 1, 2022
50c86ff
li
nimalec Aug 1, 2022
17b2b83
li
nimalec Aug 1, 2022
39d3f86
li
nimalec Aug 1, 2022
f61941e
li
nimalec Aug 1, 2022
06b6f99
li
nimalec Aug 1, 2022
32e4ff1
li
nimalec Aug 1, 2022
6a5ce6c
li
nimalec Aug 1, 2022
50804e7
li
nimalec Aug 1, 2022
8074b01
li
nimalec Aug 1, 2022
aaaabc0
li
nimalec Aug 1, 2022
e190eff
li
nimalec Aug 1, 2022
f4ebde7
li
nimalec Aug 1, 2022
bc748fe
li
nimalec Aug 1, 2022
bbf58e8
li
nimalec Aug 1, 2022
0f36d80
li
nimalec Aug 1, 2022
a0caf5d
li
nimalec Aug 1, 2022
69d87d7
li
nimalec Aug 1, 2022
d350023
li
nimalec Aug 1, 2022
9537a8f
li
nimalec Aug 1, 2022
44a830e
li
nimalec Aug 1, 2022
0846b47
li
nimalec Aug 1, 2022
749e220
li
nimalec Aug 1, 2022
be2e23e
li
nimalec Aug 3, 2022
d5ec726
li
nimalec Aug 3, 2022
527a1ac
li
nimalec Aug 3, 2022
cc236d0
li
nimalec Aug 3, 2022
868d448
li
nimalec Aug 3, 2022
2a6b60d
li
nimalec Aug 3, 2022
d98e717
li
nimalec Aug 3, 2022
1342acc
li
nimalec Aug 3, 2022
d43bcc0
li
nimalec Aug 3, 2022
900426b
li
nimalec Aug 3, 2022
ff1e927
li
nimalec Aug 3, 2022
a0ba95d
li
nimalec Aug 3, 2022
268449b
li
nimalec Aug 3, 2022
e09c0ea
li
nimalec Aug 3, 2022
da97089
li
nimalec Aug 3, 2022
b243b59
li
nimalec Aug 3, 2022
86454b8
li
nimalec Aug 3, 2022
20c952e
li
nimalec Aug 3, 2022
21ff669
li
nimalec Aug 3, 2022
a974a9e
li
nimalec Aug 4, 2022
116fd6b
li
nimalec Aug 4, 2022
ec395c7
li
nimalec Aug 4, 2022
c505226
li
nimalec Aug 4, 2022
d545f78
...
nimalec Aug 4, 2022
da7bac8
...
nimalec Aug 4, 2022
85c16c1
driver
nimalec Aug 4, 2022
976ebc8
driver
nimalec Aug 4, 2022
fb1b8f6
driver
nimalec Aug 4, 2022
f79e8e4
driver
nimalec Aug 5, 2022
76e137b
driver
nimalec Aug 5, 2022
079d045
driver
nimalec Aug 5, 2022
26764c3
driver
nimalec Aug 5, 2022
ff9ccdb
driver
nimalec Aug 5, 2022
45834c9
driver
nimalec Aug 5, 2022
84bbe52
driver
nimalec Aug 5, 2022
dece86a
driver
nimalec Aug 5, 2022
33162e6
driver
nimalec Aug 5, 2022
046b2a5
driver
nimalec Aug 5, 2022
7d4bd0e
driver
nimalec Aug 5, 2022
a3ced5e
driver
nimalec Aug 5, 2022
8d3a2e1
driver
nimalec Aug 5, 2022
970e523
driver
nimalec Aug 5, 2022
e9f1806
awg
nimalec Aug 7, 2022
4fdb05c
awg
nimalec Aug 7, 2022
ff60788
awg
nimalec Aug 7, 2022
cc1ef07
awg
nimalec Aug 7, 2022
daf626e
awg
nimalec Aug 7, 2022
108d533
awg
nimalec Aug 7, 2022
68ce539
awg
nimalec Aug 7, 2022
e457953
awg
nimalec Aug 7, 2022
4ec6623
awg
nimalec Aug 7, 2022
469c9d9
awg
nimalec Aug 7, 2022
a7a8f64
awg
nimalec Aug 7, 2022
5cc8cc1
awg
nimalec Aug 7, 2022
88cfe40
awg
nimalec Aug 7, 2022
f0d4f32
awg
nimalec Aug 7, 2022
58f234b
awg
nimalec Aug 7, 2022
c05f002
awg
nimalec Aug 7, 2022
7efc37e
awg
nimalec Aug 7, 2022
9713ead
awg
nimalec Aug 7, 2022
eb2fa23
awg
nimalec Aug 7, 2022
db11477
awg
nimalec Aug 7, 2022
08b446f
awg
nimalec Aug 7, 2022
54a6cd8
awg
nimalec Aug 7, 2022
d5a786a
awg
nimalec Aug 7, 2022
c23beb9
awg
nimalec Aug 7, 2022
83671cc
awg
nimalec Aug 7, 2022
1ac03fa
awg
nimalec Aug 7, 2022
a9629d8
awg
nimalec Aug 8, 2022
d2fef78
awg
nimalec Aug 8, 2022
1016a8a
awg
nimalec Aug 8, 2022
332dc37
awg
nimalec Aug 8, 2022
f1174ba
awg
nimalec Aug 8, 2022
24385d7
awg
nimalec Aug 8, 2022
3d24af6
awg
nimalec Aug 8, 2022
ec5754d
awg
nimalec Aug 8, 2022
c8642e5
awg
nimalec Aug 8, 2022
d1edd5a
experiment
nimalec Aug 8, 2022
f976070
exp
nimalec Aug 8, 2022
59ed2b5
exp
nimalec Aug 8, 2022
e9e5825
arbZ file read
nimalec Aug 8, 2022
07656d0
arbZ file read
nimalec Aug 8, 2022
28d1041
gst
nimalec Aug 8, 2022
1a73f49
daq
nimalec Aug 9, 2022
9aec61d
added install instructions
nimalec Aug 10, 2022
da289fc
install instructions
nimalec Aug 10, 2022
302501d
images
nimalec Aug 10, 2022
1d10979
images
nimalec Aug 10, 2022
af0d425
images
nimalec Aug 10, 2022
e38ee2c
images
nimalec Aug 10, 2022
85f05c7
images
nimalec Aug 10, 2022
e4abce3
images
nimalec Aug 10, 2022
f738cb6
images
nimalec Aug 10, 2022
dc13be6
images
nimalec Aug 10, 2022
527c979
images
nimalec Aug 10, 2022
5b34c93
images
nimalec Aug 10, 2022
0c64385
images
nimalec Aug 10, 2022
9f53cd9
images
nimalec Aug 10, 2022
297ee32
li
nimalec Aug 11, 2022
3e4a01b
li
nimalec Aug 11, 2022
b85c750
li
nimalec Aug 11, 2022
428cf69
li
nimalec Aug 11, 2022
b036a6c
li
nimalec Aug 11, 2022
6325732
daq
nimalec Aug 11, 2022
5690747
daq
nimalec Aug 11, 2022
f0bbcb3
daq
nimalec Aug 11, 2022
dd6758c
daq
nimalec Aug 11, 2022
c0d432f
daq
nimalec Aug 11, 2022
5117d55
daq
nimalec Aug 11, 2022
c7a15d0
daq
nimalec Aug 11, 2022
a0937b4
daq
nimalec Aug 12, 2022
b79126f
daq
nimalec Aug 12, 2022
63aedac
daq
nimalec Aug 12, 2022
80e1036
daq
nimalec Aug 12, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Installation Instructions

## General Dependencies
Silospin requires Python 3.7 or newer. Python can be installed from the Python webpage (https://www.python.org/downloads/) or through Anaconda (https://www.anaconda.com/products/distribution). The package also requries NumPy (https://numpy.org/), SciPy (https://scipy.org/), and Matplotlib (https://matplotlib.org/). Install these as,

```bash
$ pip install numpy
$ pip install scipy
$ pip install matplotlib
```
### Zurich Instrument Modules

Silospin interfaces with physical instruments from Zurich Instruments and therefore requires software used by Zurich including zhinst and zhinst-toolkit. These can be installed as,

```bash
$ pip install zhinst
$ pip install zhinst-toolkit
```

## Silospin

```bash
$ git clone git@github.com:nimalec/Silospin.git
$ cd silospin/
$ pip install -e .
```

If an old branch is being used (e.g. branch 'new_branch_6_5')
```bash
$ git switch new_branch_6_5
```
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,23 @@
# Silospin
Silospin is a package responsible for the calibration, control , and benchmarking of quantum dot processors. This is the primary codebase used by the Sigillito Group at the University of Pennsylvania.
Silospin is a package responsible for the calibration, control , and benchmarking of quantum dot processors. This is the primary codebase used by the Sigillito Group at the University of Pennsylvania. Check out our group's latest work here:
[Sigillito Group Page](https://pennqubit.com/).



Silospin interfaces with the following hardware for quantum control experiments.

![](https://github.com/nimalec/Silospin/blob/new_branch_6_5/images/waveform.png)
![](https://github.com/nimalec/Silospin/blob/new_branch_6_5/images/pulses.png)For details on installation instructions, please click [INSTALL.md](https://github.com/nimalec/Silospin/blob/new_branch_6_5/INSTALL.md).

## Citing
```
@software{silospin,
author = {Nima Leclerc, Dr. Anthony Sigillito},
title = {Silospin: silospin},
month = aug,
year = 2022,
version = {0.0.1},
doi = {10.5281/zenodo.6459381},
url = {https://github.com/nimalec/Silospin}
}
```
Binary file added images/pulses.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/waveform.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file.
788 changes: 321 additions & 467 deletions silospin/drivers/zi_hdawg_driver.py

Large diffs are not rendered by default.

363 changes: 363 additions & 0 deletions silospin/drivers/zi_mfli2.py

Large diffs are not rendered by default.

Empty file added silospin/experiment/__init__.py
Empty file.
2 changes: 2 additions & 0 deletions silospin/experiment/example_gst.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from silospin.experiment import setup_experiment
awg = setup_experiment.awg_driver
6 changes: 6 additions & 0 deletions silospin/experiment/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from silospin.experiment import setup_experiment

setup_experiment.init()
print(setup_experiment.awg_driver)
print(setup_experiment.mfli_driver)
print(setup_experiment.qubit_parameters)
14 changes: 14 additions & 0 deletions silospin/experiment/setup_experiment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from silospin.drivers.zi_hdawg_driver import HdawgDriver
from silospin.drivers.zi_mfli2 import MfliDriver

def init(awg_id="dev8446", mfli_id="dev5759"):
global awg_driver
global mfli_driver
global qubit_parameters
awg_driver = HdawgDriver(awg_id)
mfli_driver = MfliDriver(mfli_id)
qubit_parameters = {
0: {"i_amp_pi": 1.0, "q_amp_pi": 1.0 , "i_amp_pi_2": 1.0, "q_amp_pi_2": 1.0, "tau_pi" : 100e-9, "tau_pi_2" : 50e-9, "delta_iq" : 0 , "mod_freq": 60e6},
1: {"i_amp_pi": 1.0, "q_amp_pi": 1.0 , "i_amp_pi_2": 1.0, "q_amp_pi_2": 1.0, "tau_pi" : 100e-9, "tau_pi_2" : 50e-9, "delta_iq" : 0 , "mod_freq": 60e6},
2: {"i_amp_pi": 1.0, "q_amp_pi": 1.0 , "i_amp_pi_2": 1.0, "q_amp_pi_2": 1.0, "tau_pi" : 120e-9, "tau_pi_2" : 60e-9, "delta_iq" : 0 , "mod_freq": 60e6},
3: {"i_amp_pi": 1.0, "q_amp_pi": 1.0 , "i_amp_pi_2": 1.0, "q_amp_pi_2": 1.0, "tau_pi" : 160e-9, "tau_pi_2" : 80e-9, "delta_iq" : 0 , "mod_freq": 60e6}}
250 changes: 250 additions & 0 deletions silospin/io/qc_io.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
import pandas as pd
import re

def read_qubit_paramater_file(file_path):
qubit_parameters = pd.read_csv(file_path)
return qubit_parameters.to_dict

def write_qubit_parameter_file(qubit_parameters, file_path):
param_df = pd.DataFrame.from_dict(qubit_parameters)
param_df.to_csv(file_path)

def quantum_protocol_parser(file_path, qubit_lengths, qubit_set = {1,2,3,4}):
sequence_table = {}
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
df = pd.read_csv(file_path, header = None, skiprows=1)
df = df[0:100]

for idx in range(len(df)):
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
seq_line = {"0": [], "1": [], "2": [] , "3":[]} ##refer as seq_line[idx].append(new_gate)
for elem in line:
element = re.split('\(| \)', elem)
idx_set = set()
length_set = []
for item in element:
if len(item)>2:
seq_line[str(int(item[0])-1)].append(item[2:len(item)])
#sequence_line[int(item[0])-1] = item[2:len(item)]
idx_set.add(int(item[0]))
if item[2] == "t":
length_set.append(int(item[2:len(item)]))
else:
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
else:
pass
max_gt_len = max(length_set)
diff_set = qubit_set.difference(idx_set)
for item in diff_set:
#sequence_line[item-1] = "t"+str(max_gt_len)
seq_line[str(item-1)].append("t"+str(max_gt_len) )

#sequence_table[idx] = sequence_line
sequence_table[idx] = seq_line
return sequence_table

def quantum_protocol_parser_csv_v2(file_path, qubit_lengths, qubit_cores, plunger_channels):
qubit_sequence_table = {} ## qubit_sequence_table[line][qubit_core] w/ qubit_core = {0,1,2,3}
plunger_sequence_table = {} ## plunger_sequence_table[line][plunger_channel] w/ qubit_core = {0,1,2,3,4,5,6,7}
q_seq_line = {} ##qubit sequence line
p_seq_line = {} ##qubit sequence line
##Possible non-Z/non-plunger gates
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
## Read through CSV file ==> convert to data frame
df = pd.read_csv(file_path, header = None, skiprows=1)

##Loop through qubit cores
for q_idx in qubit_cores:
#q_seq_line[q_idx-1] = []
q_seq_line[q_idx] = []
##Loop through plunger channels
# for p_idx in plunger_channels:
# p_seq_line[p_idx] = []

for idx in range(len(df)):
##Single line obtained from Pandas data frame
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
##Each gate in line
for elem in line:
element = re.split('\(| \)', elem)
p_idx_set = set()
q_idx_set = set()
length_set = []

for item in element:
if len(item)>2:
if item[2] == "p":
p_seq_line[int(item[0])].append(item[2:len(item)])
p_idx_set.add(int(item[0]))
#pulse_length = plunger_lengths[item[2:len(item)]]
#length_set.append(pulse_length)
else:
q_seq_line[int(item[0])-1].append(item[2:len(item)])
#q_seq_line[int(item[0])].append(item[2:len(item)])
if item[2] == "t":
length_set.append(int(item[2:len(item)]))
q_idx_set.add(int(item[0]))
elif item[2] == "z":
pass
else:
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
q_idx_set.add(int(item[0])-1)
else:
pass

if len(length_set) == 0:
pass
else:
max_gt_len = max(length_set)
q_diff_set = qubit_cores.difference(q_idx_set)
p_diff_set = plunger_channels.difference(p_idx_set)
for item in q_diff_set:
q_seq_line[item].append("t"+str(max_gt_len))
#q_seq_line[item].append("t"+str(max_gt_len))
# for item in p_diff_set:
# p_seq_line[item].append("t"+str(max_gt_len))
# qubit_line = {}
# for q in q_seq_line:
# qubit_line[q] = q_seq_line[q][0:len(q_seq_line[q])/2]
# qubit_sequence_table[idx] = qubit_line
qubit_sequence_table[idx] = q_seq_line
print(qubit_sequence_table[idx])

#plunger_sequence_table[idx] = p_seq_line
return qubit_sequence_table, plunger_sequence_table

def quantum_protocol_parser_Zarb(file_path, qubit_lengths, qubit_set = {1,2,3,4}):
sequence_table = {}
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
df = pd.read_csv(file_path, header = None, skiprows=1)
for idx in range(len(df)):
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
seq_line = {"0": [], "1": [], "2": [] , "3":[]}
for elem in line:
element = re.split('\(| \)', elem)
idx_set = set()
length_set = []
for item in element:
if len(item)>2:
seq_line[str(int(item[0])-1)].append(item[2:len(item)])
idx_set.add(int(item[0]))
if item[2] == "t":
length_set.append(int(item[3:len(item)]))
elif item[2] == "z":
length_set.append(32)
pass
else:
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
else:
pass
max_gt_len = max(length_set)
diff_set = qubit_set.difference(idx_set)
for item in diff_set:
seq_line[str(item-1)].append("t"+str(max_gt_len) )
sequence_table[idx] = seq_line
return sequence_table


def quantum_protocol_parser_Zarb_v2(file_path, qubit_lengths, qubit_set = {1,2,3,4}):
sequence_table = {}
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
df = pd.read_csv(file_path, header = None, skiprows=1)
for idx in range(len(df)):
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
seq_line = {"0": [], "1": [], "2": [] , "3":[]}
for elem in line:
element = re.split('\(| \)', elem)
idx_set = set()
length_set = []
for item in element:
if len(item)>2:
seq_line[str(int(item[0])-1)].append(item[2:len(item)])
idx_set.add(int(item[0]))
if item[2] == "t":
length_set.append(int(item[3:len(item)]))
elif item[2] == "z":
channel_set = {"0", "1", "2", "3"}
z_idx = {str(int(item[0])-1)}
diff_set_z = channel_set.difference(z_idx)
for itm in diff_set_z:
seq_line[itm].append("z0z")
else:
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
else:
pass
if len(length_set) == 0:
pass
else:
max_gt_len = max(length_set)
diff_set = qubit_set.difference(idx_set)
for item in diff_set:
seq_line[str(item-1)].append("t"+str(max_gt_len))
sequence_table[idx] = seq_line
return sequence_table

def quantum_protocol_parser_str(file_path, qubit_lengths, qubit_set = {1,2,3,4}):
sequence_table = {}
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
df = pd.read_csv(file_path, header = None, skiprows=1)
df = df[0:100]

for idx in range(len(df)):
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
seq_line = {"0": [], "1": [], "2": [] , "3":[]} ##refer as seq_line[idx].append(new_gate)
for elem in line:
element = re.split('\(| \)', elem)
idx_set = set()
length_set = []
for item in element:
if len(item)>2:
seq_line[str(int(item[0])-1)].append(item[2:len(item)])
#sequence_line[int(item[0])-1] = item[2:len(item)]
idx_set.add(int(item[0]))
if item[2] == "t":
length_set.append(int(item[2:len(item)]))
else:
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
else:
pass
max_gt_len = max(length_set)
diff_set = qubit_set.difference(idx_set)
for item in diff_set:
#sequence_line[item-1] = "t"+str(max_gt_len)
seq_line[str(item-1)].append("t"+str(max_gt_len) )

#sequence_table[idx] = sequence_line
sequence_table[idx] = seq_line
return sequence_table


def gst_parser(file_path, qubit_lengths, qubit_set = {0,1,2,3}):
sequence_table = {}
gates = {"x": "pi_2", "y": "pi_2", "xxx": "pi_2", "yyy": "pi_2", "xx": "pi", "yy": "pi", "mxxm": "pi", "myym": "pi"}
df = pd.read_csv(file_path, header = None, skiprows=1)

for idx in range(len(df)):
line = df.values[idx][0].split(";")[0:len(df.values[idx][0].split(";"))-1]
seq_line = {0: [], 1: [], 2: [] , 3: []}

for elem in line:
element = re.split('\(| \)', elem)
idx_set = set()
length_set = []
for item in element:
if len(item)>2:
seq_line[int(item[0])].append(item[2:len(item)])
qubit_length = qubit_lengths[int(item[0])][gates[item[2:len(item)]]]
length_set.append(qubit_length)
else:
pass
max_gt_len = max(length_set)
diff_set = qubit_set.difference(idx_set)
for item in diff_set:
seq_line[item].append("t"+str(max_gt_len) )
sequence_table[idx] = seq_line
return sequence_table
30 changes: 22 additions & 8 deletions silospin/math/math_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,28 @@
def gauss(x, amp, mu, sig):
return amp*np.exp(-(x-mu)**2/(2*sig**2))

def rectangular(npoints, amp):
def rectangular(npoints, amp, min_points = 48):
array = amp*np.ones(npoints)
array[0] = 0
array[1] = 0
array[npoints-1] = 0
array[npoints-2] = 0
return array
if npoints < min_points:
npoints_pad = min_points - npoints
if npoints_pad%2 == 0:
zero_pad_l = np.zeros(int(npoints_pad/2))
zero_pad_r = np.zeros(int(npoints_pad/2))
elif 2*int(npoints_pad/2) + npoints < min_points:
zero_pad_l = np.zeros(int(npoints_pad/2))
zero_pad_r = np.zeros(int(npoints_pad/2) + 1)
else:
zero_pad_l = np.zeros(int(npoints_pad/2))
zero_pad_r = np.zeros(int(npoints_pad/2)-1)
array = np.concatenate((zero_pad_l, array,zero_pad_r), axis=None)
else:
array = amp*np.ones(npoints)

return array

##def chirped():
##def adiabatic():
def compute_accumulated_phase(gt, phi_l):
phi_d_gt = {"x": 0, "y": 90, "xx": 0, "yy": 90 , "xxx": 180, "yyy": -90, "mxxm": 180, "myym": -90}
phi_d = phi_d_gt[gt]
phi_a = phi_d - phi_l
phi_l = phi_l + phi_a
return phi_l, phi_a
Loading