Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ORNL Quantum Computing Institute
exatn
Commits
8e55d91d
Commit
8e55d91d
authored
Nov 02, 2021
by
Dmitry I. Lyakh
Browse files
Added some missing gates to exatn::quantum
Signed-off-by:
Dmitry I. Lyakh
<
quant4me@gmail.com
>
parent
9a2ebd03
Pipeline
#172484
failed with stage
in 5 minutes and 49 seconds
Changes
2
Pipelines
3
Hide whitespace changes
Inline
Side-by-side
src/exatn/quantum.cpp
View file @
8e55d91d
/** ExaTN: Quantum computing related
REVISION: 2021/1
0/26
REVISION: 2021/1
1/02
Copyright (C) 2018-2021 Dmitry I. Lyakh (Liakh)
Copyright (C) 2018-2021 Oak Ridge National Laboratory (UT-Battelle) **/
#include
<iostream>
#include
<fstream>
#include
<cmath>
#include
"quantum.hpp"
...
...
@@ -13,6 +14,7 @@ namespace exatn{
namespace
quantum
{
//Constant gates:
const
std
::
vector
<
std
::
complex
<
double
>>
GATE_0
{{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
}};
const
std
::
vector
<
std
::
complex
<
double
>>
GATE_I
{{
1.0
,
0.0
},
{
0.0
,
0.0
},
...
...
@@ -50,6 +52,32 @@ const std::vector<std::complex<double>> GATE_ISWAP {{1.0, 0.0}, {0.0, 0.0}, {0.0
{
0.0
,
0.0
},
{
0.0
,
1.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
1.0
,
0.0
}};
//Single-parameter gates:
auto
GATE_RX
=
[]
(
double
theta
)
->
const
std
::
vector
<
std
::
complex
<
double
>>
{
auto
th
=
theta
*
0.5
;
return
std
::
vector
<
std
::
complex
<
double
>>
{{
std
::
cos
(
th
),
0.0
},
{
0.0
,
-
std
::
sin
(
th
)},
{
0.0
,
-
std
::
sin
(
th
)},
{
std
::
cos
(
th
),
0.0
}};
};
auto
GATE_RY
=
[]
(
double
theta
)
->
const
std
::
vector
<
std
::
complex
<
double
>>
{
auto
th
=
theta
*
0.5
;
return
std
::
vector
<
std
::
complex
<
double
>>
{{
std
::
cos
(
th
),
0.0
},
{
-
std
::
sin
(
th
),
0.0
},
{
std
::
sin
(
th
),
0.0
},
{
std
::
cos
(
th
),
0.0
}};
};
auto
GATE_RZ
=
[]
(
double
theta
)
->
const
std
::
vector
<
std
::
complex
<
double
>>
{
auto
th
=
theta
*
0.5
;
return
std
::
vector
<
std
::
complex
<
double
>>
{{
std
::
cos
(
th
),
-
std
::
sin
(
th
)},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
std
::
cos
(
th
),
std
::
sin
(
th
)}};
};
auto
GATE_CR
=
[]
(
double
theta
)
->
const
std
::
vector
<
std
::
complex
<
double
>>
{
return
std
::
vector
<
std
::
complex
<
double
>>
{{
1.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
1.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
1.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
0.0
,
0.0
},
{
std
::
cos
(
theta
),
std
::
sin
(
theta
)}};
};
std
::
vector
<
std
::
complex
<
double
>>
getGateData
(
const
Gate
gate_name
,
std
::
initializer_list
<
double
>
angles
)
...
...
@@ -64,11 +92,27 @@ std::vector<std::complex<double>> getGateData(const Gate gate_name,
case
(
Gate
::
gate_H
):
gate_data
=
GATE_H
;
break
;
case
(
Gate
::
gate_S
):
gate_data
=
GATE_S
;
break
;
case
(
Gate
::
gate_T
):
gate_data
=
GATE_T
;
break
;
case
(
Gate
::
gate_Rx
):
assert
(
angles
.
size
()
==
1
);
gate_data
=
GATE_RX
(
*
(
angles
.
begin
()));
break
;
case
(
Gate
::
gate_Ry
):
assert
(
angles
.
size
()
==
1
);
gate_data
=
GATE_RY
(
*
(
angles
.
begin
()));
break
;
case
(
Gate
::
gate_Rz
):
assert
(
angles
.
size
()
==
1
);
gate_data
=
GATE_RZ
(
*
(
angles
.
begin
()));
break
;
case
(
Gate
::
gate_CX
):
gate_data
=
GATE_CX
;
break
;
case
(
Gate
::
gate_CY
):
gate_data
=
GATE_CY
;
break
;
case
(
Gate
::
gate_CZ
):
gate_data
=
GATE_CZ
;
break
;
case
(
Gate
::
gate_SWAP
):
gate_data
=
GATE_SWAP
;
break
;
case
(
Gate
::
gate_ISWAP
):
gate_data
=
GATE_ISWAP
;
break
;
case
(
Gate
::
gate_CR
):
assert
(
angles
.
size
()
==
1
);
gate_data
=
GATE_CR
(
*
(
angles
.
begin
()));
break
;
default:
std
::
cout
<<
"#ERROR(exatn::quantum::getGateData): Unknown quantum gate!"
<<
std
::
endl
;
assert
(
false
);
...
...
src/exatn/quantum.hpp
View file @
8e55d91d
/** ExaTN: Quantum computing related
REVISION: 2021/1
0/26
REVISION: 2021/1
1/02
Copyright (C) 2018-2021 Dmitry I. Lyakh (Liakh)
Copyright (C) 2018-2021 Oak Ridge National Laboratory (UT-Battelle) **/
...
...
@@ -49,11 +49,15 @@ enum class Gate{
gate_H
,
gate_S
,
gate_T
,
gate_Rx
,
gate_Ry
,
gate_Rz
,
gate_CX
,
gate_CY
,
gate_CZ
,
gate_SWAP
,
gate_ISWAP
gate_ISWAP
,
gate_CR
};
//Pauli gate acting on a specific qubit:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment