-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsagescript.sage
More file actions
58 lines (50 loc) · 1.91 KB
/
sagescript.sage
File metadata and controls
58 lines (50 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
load('QuantumCodeAnalysis/QuantumCodeAnalysis.sage')
MATX = readsparsematrix('PCMatrices/535_3420_X.sms')
MATZ = readsparsematrix('PCMatrices/535_3420_Z.sms')
MATXCOS = readsparsematrix('PCMatrices/535_3420_XCOS.sms')
MATZCOS = readsparsematrix('PCMatrices/535_3420_ZCOS.sms')
ROWSX, QUBITSX = MATX.dimensions()
ROWSZ, QUBITSZ = MATZ.dimensions()
RANKX = MATX.rank()
RANKZ = MATZ.rank()
NUMLOGICALS = QUBITSX - RANKX - RANKZ
MULTXZ = MATX * MATZ.transpose()
CSSCOND = sum(sum(matrix(ZZ, MULTXZ))) == 0
print('mx: {} - nx:{}'.format(ROWSX, QUBITSX))
print('mz: {} - nz:{}'.format(ROWSZ, QUBITSZ))
print('rankx:{}'.format(RANKX))
print('rankz:{}'.format(RANKZ))
print('[[n = {}, k = {}]]'.format(QUBITSX, NUMLOGICALS))
print('rate: k/n = {}'.format(float(NUMLOGICALS) / float(QUBITSX)))
print('csscond: MX * MZ^T = 0 ? {}'.format(CSSCOND))
ROWSXCOS, QUBITSXCOS = MATXCOS.dimensions()
ROWSZCOS, QUBITSZCOS = MATZCOS.dimensions()
RANKXCOS = MATXCOS.rank()
RANKZCOS = MATZCOS.rank()
NUMLOGICALSCOS = QUBITSXCOS - RANKXCOS - RANKZCOS
MULTXZCOS = MATXCOS * MATZCOS.transpose()
CSSCONDCOS = sum(sum(matrix(ZZ, MULTXZCOS))) == 0
print('mx: {} - nx:{}'.format(ROWSXCOS, QUBITSXCOS))
print('mz: {} - nz:{}'.format(ROWSZCOS, QUBITSZCOS))
print('rankx:{}'.format(RANKXCOS))
print('rankz:{}'.format(RANKZCOS))
print('[[n = {}, k = {}]]'.format(QUBITSXCOS, NUMLOGICALSCOS))
print('rate: k/n = {}'.format(float(NUMLOGICALSCOS) / float(QUBITSXCOS)))
print('csscond: MX * MZ^T = 0 ? {}'.format(CSSCONDCOS))
LOGX, LOGZ = logicals(MATX, MATZ)
LOGCIRC = logical_circuit(LOGX, 3)
# print(LOGCIRC)
for gate in LOGCIRC[0]:
if 1 in gate[0]:
print(gate)
for gate in LOGCIRC[1]:
if 1 in gate[0]:
print(gate)
for gate in LOGCIRC[2]:
if 1 in gate[0]:
print(gate)
# for j in range(NUMLOGICALS):
# print('logical X_{}: {}'.format(j, LOGX[j]))
# print('\n')
# for j in range(NUMLOGICALS):
# print('logical Z_{}: {}'.format(j, LOGZ[j]))