@@ -30,12 +30,12 @@ struct Mod <: PrimitiveBlock{2}
30
30
end
31
31
Yao. nqudits (m:: Mod ) = m. n
32
32
33
- function _apply ! (reg:: AbstractArrayReg , m:: Mod )
33
+ function Yao . unsafe_apply ! (reg:: AbstractArrayReg , m:: Mod )
34
34
nstate = zero (reg. state)
35
35
for i in basis (reg)
36
- _i = i >= m. L ? i + 1 : mod (i * m. a, m. L)+ 1
37
- for j in 1 : B
38
- @inbounds nstate[_i,j] = reg. state[i + 1 ,j]
36
+ _i = buffer (i) >= m. L ? buffer (i) + 1 : mod (buffer (i) * m. a, m. L)+ 1
37
+ for j in 1 : size (nstate, 2 )
38
+ @inbounds nstate[_i,j] = reg. state[buffer (i) + 1 ,j]
39
39
end
40
40
end
41
41
reg. state = nstate
@@ -82,16 +82,16 @@ function bint2_reader(T, k::Int)
82
82
return b -> (b& mask, b>> k)
83
83
end
84
84
85
- function _apply ! (reg:: ArrayReg , m:: KMod )
85
+ function Yao . unsafe_apply ! (reg:: ArrayReg , m:: KMod )
86
86
nstate = zero (reg. state)
87
87
88
88
reader = bint2_reader (Int, m. k)
89
89
for b in basis (reg)
90
- k, i = reader (b )
91
- _i = i >= m. L ? i : mod (i* powermod (m. a, m . k, m. L), m. L)
90
+ k, i = reader (buffer (b) )
91
+ _i = i >= m. L ? i : mod (i* powermod (m. a, k, m. L), m. L)
92
92
_b = k + _i<< m. k + 1
93
- for j in 1 : YaoArrayRegister . _asint ( nbatch (reg) )
94
- @inbounds nstate[_b,j] = reg. state[b + 1 ,j]
93
+ for j in 1 : size (nstate, 2 )
94
+ @inbounds nstate[_b,j] = reg. state[buffer (b) + 1 ,j]
95
95
end
96
96
end
97
97
reg. state = nstate
101
101
function Yao. mat (:: Type{T} , m:: KMod ) where {T}
102
102
perm = Vector {Int} (undef, 1 << m. n)
103
103
reader = bint2_reader (Int, m. k)
104
- for b in basis ( m. n)
104
+ for b in 0 : 1 << m. n- 1
105
105
k, i = reader (b)
106
106
_i = i >= m. L ? i : mod (i* powermod (m. a, k, m. L), m. L)
107
107
_b = k + _i<< m. k + 1
0 commit comments