Skip to content

Commit

Permalink
remove letters and replace
Browse files Browse the repository at this point in the history
  • Loading branch information
wistaria committed Nov 3, 2023
1 parent 5a17a87 commit 1da302a
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 47 deletions.
12 changes: 6 additions & 6 deletions src/qailo/operator/multiply.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import numpy as np

from ..util.strops import letters, replace
from .type import is_operator, num_qubits


Expand All @@ -16,9 +15,10 @@ def multiply(pin, p, pos=None):
for i in pos:
assert i < n

ss_opi = ss_to = letters()[: 2 * n]
ss_op = letters()[2 * n : 2 * n + 2 * m]
ss_pin = list(range(2 * n))
ss_p = list(range(2 * n, 2 * n + 2 * m))
ss_to = list(range(2 * n))
for i in range(m):
ss_opi = replace(ss_opi, pos[i], ss_op[m + i])
ss_to = replace(ss_to, pos[i], ss_op[i])
return np.einsum("{},{}->{}".format(ss_opi, ss_op, ss_to), pin, p)
ss_pin[pos[i]] = ss_p[m + i]
ss_to[pos[i]] = ss_p[i]
return np.einsum(pin, ss_pin, p, ss_p, ss_to)
7 changes: 3 additions & 4 deletions src/qailo/operator/trace.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import numpy as np

from ..util.strops import letters, replace
from .type import is_density_matrix, is_operator, num_qubits


Expand All @@ -14,7 +13,7 @@ def trace(q, pos=None):
for i in pos:
assert i < n

ss = letters()[: 2 * n]
ss = list(range(2 * n))
for i in pos:
ss = replace(ss, n + i, ss[i])
return np.einsum(ss, q)
ss[n + i] = ss[i]
return np.einsum(q, ss)
12 changes: 6 additions & 6 deletions src/qailo/state_vector/apply.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import numpy as np

from ..operator import type as op
from ..util.strops import letters, replace
from . import type as sv


Expand All @@ -14,9 +13,10 @@ def apply(v, p, pos=None):
pos = range(n)
assert len(pos) == m

ss_op = letters()[: 2 * m]
ss_v = ss_to = letters()[2 * m : 2 * m + n + 1]
ss_v = list(range(2 * m, 2 * m + n + 1))
ss_op = list(range(2 * m))
ss_to = list(range(2 * m, 2 * m + n + 1))
for i in range(m):
ss_v = replace(ss_v, pos[i], ss_op[m + i])
ss_to = replace(ss_to, pos[i], ss_op[i])
return np.einsum("{},{}->{}".format(ss_v, ss_op, ss_to), v, p)
ss_v[pos[i]] = ss_op[m + i]
ss_to[pos[i]] = ss_op[i]
return np.einsum(v, ss_v, p, ss_op, ss_to)
16 changes: 5 additions & 11 deletions src/qailo/state_vector/pure_state.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
import numpy as np

from ..util.strops import letters
from . import type as sv


def pure_state(v):
assert sv.is_state_vector(v)
n = sv.num_qubits(v)
v = v / np.linalg.norm(v)
ss_from0 = letters()[: n + 1]
ss_from1 = letters()[n + 1 : 2 * n + 2]
ss_to = (
letters()[:n]
+ letters()[n + 1 : 2 * n + 1]
+ letters()[n]
+ letters()[2 * n + 1]
)
return np.einsum("{},{}->{}".format(ss_from0, ss_from1, ss_to), v, v.conj())
w = (v / np.linalg.norm(v)).reshape((2,) * n)
ss0 = list(range(n))
ss1 = list(range(n, 2 * n))
shape = (2,) * (2 * n) + (1, 1)
return np.einsum(w, ss0, w.conj(), ss1).reshape(shape)
14 changes: 0 additions & 14 deletions src/qailo/util/strops.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,7 @@
import string


def binary2str(n, i):
return bin(i)[2:].zfill(n)


def letters():
return string.ascii_lowercase + string.ascii_uppercase


def replace(s, i, c):
if i < 0:
i += len(s)

return s[:i] + c + s[i + 1 :]


def str2binary(s):
n = len(s)
c = 0
Expand Down
6 changes: 0 additions & 6 deletions test/util/test_replace.py

This file was deleted.

0 comments on commit 1da302a

Please sign in to comment.