The Quantum Exact Simulation Toolkit v4.2.0
Loading...
Searching...
No Matches
Constructors

Functions for creating and initialising Pauli data structures. More...

Functions

PauliStrSum createInlinePauliStrSum (const char *str)
 
PauliStrSum createInlinePauliStrSum (std::string str)
 
PauliStrSum createPauliStrSum (PauliStr *strings, qcomp *coeffs, qindex numTerms)
 
PauliStrSum createPauliStrSum (std::vector< PauliStr > strings, std::vector< qcomp > coeffs)
 
PauliStrSum createPauliStrSumFromFile (const char *fn)
 
PauliStrSum createPauliStrSumFromFile (std::string fn)
 
PauliStrSum createPauliStrSumFromReversedFile (const char *fn)
 
PauliStrSum createPauliStrSumFromReversedFile (std::string fn)
 
PauliStr getInlinePauliStr (const char *paulis, { list })
 
PauliStr getPauliStr (const char *paulis, int *indices, int numPaulis)
 
PauliStr getPauliStr (int *paulis, int *indices, int numPaulis)
 
PauliStr getPauliStr (std::string paulis)
 
PauliStr getPauliStr (std::string paulis, int *indices, int numPaulis)
 
PauliStr getPauliStr (std::string paulis, std::vector< int > indices)
 

Detailed Description

Functions for creating and initialising Pauli data structures.

Function Documentation

◆ createInlinePauliStrSum() [1/2]

PauliStrSum createInlinePauliStrSum ( const char * str)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 198 of file paulis.cpp.

198 {
199
200 // str must be null-terminated
201 return createInlinePauliStrSum(string(str));
202}
PauliStrSum createInlinePauliStrSum(const char *str)
Definition paulis.cpp:198

Referenced by createInlinePauliStrSum().

◆ createInlinePauliStrSum() [2/2]

PauliStrSum createInlinePauliStrSum ( std::string str)
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ createPauliStrSum() [1/2]

PauliStrSum createPauliStrSum ( PauliStr * strings,
qcomp * coeffs,
qindex numTerms )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 166 of file paulis.cpp.

166 {
167
168 // note we do not require nor impose the strings to be unique
169 validate_newPauliStrSumParams(numTerms, __func__);
170
171 // prepare output PauliStrSum (avoiding C++20 designated initialiser)
172 PauliStrSum out;
173 out.numTerms = numTerms;
174 out.strings = cpu_allocPauliStrings(numTerms); // nullptr if failed
175 out.coeffs = cpu_allocArray(numTerms); // nullptr if failed
176 out.isApproxHermitian = util_allocEpsilonSensitiveHeapFlag(); // nullptr if failed
177
178 // if either alloc failed, clear both before validation to avoid leak
179 freeAllMemoryIfAnyAllocsFailed(out);
180 validate_newPauliStrSumAllocs(out, numTerms*sizeof(PauliStr), numTerms*sizeof(qcomp), __func__);
181
182 // otherwise copy given data into new heap structure, and set initial flags
183 cpu_copyPauliStrSum(out, strings, coeffs);
184 util_setFlagToUnknown(out.isApproxHermitian);
185
186 return out;
187}

◆ createPauliStrSum() [2/2]

PauliStrSum createPauliStrSum ( std::vector< PauliStr > strings,
std::vector< qcomp > coeffs )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ createPauliStrSumFromFile() [1/2]

PauliStrSum createPauliStrSumFromFile ( const char * fn)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 211 of file paulis.cpp.

211 {
212
213 // fn must be null-terminated
214 return createPauliStrSumFromFile(string(fn));
215}
PauliStrSum createPauliStrSumFromFile(const char *fn)
Definition paulis.cpp:211

Referenced by createPauliStrSumFromFile().

◆ createPauliStrSumFromFile() [2/2]

PauliStrSum createPauliStrSumFromFile ( std::string fn)
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ createPauliStrSumFromReversedFile() [1/2]

PauliStrSum createPauliStrSumFromReversedFile ( const char * fn)
Note
Documentation for this function or struct is under construction!
See also

Definition at line 228 of file paulis.cpp.

228 {
229
230 // fn must be null-terminated
231 return createPauliStrSumFromReversedFile(string(fn));
232}
PauliStrSum createPauliStrSumFromReversedFile(const char *fn)
Definition paulis.cpp:228

Referenced by createPauliStrSumFromReversedFile(), and TEST_CASE().

◆ createPauliStrSumFromReversedFile() [2/2]

PauliStrSum createPauliStrSumFromReversedFile ( std::string fn)
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ getInlinePauliStr()

PauliStr getInlinePauliStr ( const char * paulis,
{ list }  )
Note
Documentation for this function or struct is under construction!
This entity is actually a macro.
See also

◆ getPauliStr() [1/5]

PauliStr getPauliStr ( const char * paulis,
int * indices,
int numPaulis )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 76 of file paulis.cpp.

76 {
77 validate_newPauliStrParams(paulis, indices, numPaulis, MAX_NUM_PAULIS_PER_STR, __func__);
78
79 // begin masks at all-identity 'I' = 0
80 PAULI_MASK_TYPE lowPaulis = 0;
81 PAULI_MASK_TYPE highPaulis = 0;
82
83 // change targeted indices to the given Paulis
84 for (int i=0; i<numPaulis; i++) {
85
86 // cast single Pauli to full precision mask to enable below shifts
87 auto pauli = (PAULI_MASK_TYPE) parser_getPauliIntFromChar(paulis[i]);
88
89 // add the Pauli to either the lower or upper pauli masks
90 if (indices[i] < MAX_NUM_PAULIS_PER_MASK)
91 lowPaulis |= pauli << (2*indices[i]);
92 else
93 highPaulis |= pauli << (2*(indices[i] - MAX_NUM_PAULIS_PER_MASK));
94 }
95
96 // return a new stack PauliStr instance (avoiding C++20 initialiser)
97 PauliStr out;
98 out.lowPaulis = lowPaulis;
99 out.highPaulis = highPaulis;
100 return out;
101}
long long unsigned int PAULI_MASK_TYPE
Definition precision.h:69

Referenced by applyMultiStateControlledMultiQubitNot(), getPauliStr(), leftapplyMultiQubitNot(), leftapplyPauliX(), leftapplyPauliY(), leftapplyPauliZ(), rightapplyMultiQubitNot(), rightapplyPauliX(), rightapplyPauliY(), rightapplyPauliZ(), and TEST_CASE().

◆ getPauliStr() [2/5]

PauliStr getPauliStr ( int * paulis,
int * indices,
int numPaulis )
Note
Documentation for this function or struct is under construction!
See also

Definition at line 104 of file paulis.cpp.

104 {
105 validate_newPauliStrParams(paulis, indices, numPaulis, MAX_NUM_PAULIS_PER_STR, __func__);
106
107 // validation ensures never causes stack overflow
108 char pauliChars[MAX_NUM_PAULIS_PER_STR + 1]; // +1 for null-terminal
109
110 // make a char array from the pauli codes, using an arbitrary
111 // choice of the Pauli characters accepted by the API (like IXYZ)
112 for (int i=0; i<numPaulis; i++)
113 pauliChars[i] = "IXYZ"[paulis[i]];
114
115 // including the trailing null char, used to infer string end/length
116 pauliChars[numPaulis] = '\0';
117
118 return getPauliStr(pauliChars, indices, numPaulis);
119}
PauliStr getPauliStr(const char *paulis, int *indices, int numPaulis)
Definition paulis.cpp:76

◆ getPauliStr() [3/5]

PauliStr getPauliStr ( std::string paulis)
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ getPauliStr() [4/5]

PauliStr getPauliStr ( std::string paulis,
int * indices,
int numPaulis )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also

◆ getPauliStr() [5/5]

PauliStr getPauliStr ( std::string paulis,
std::vector< int > indices )
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.
See also