The Quantum Exact Simulation Toolkit v4.1.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 428 of file paulis.cpp.

428 {
429
430 // str must be null-terminated
431 return createInlinePauliStrSum(string(str));
432}
PauliStrSum createInlinePauliStrSum(const char *str)
Definition paulis.cpp:428

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 396 of file paulis.cpp.

396 {
397
398 // note we do not require nor impose the strings to be unique
399 validate_newPauliStrSumParams(numTerms, __func__);
400
401 // prepare output PauliStrSum (avoiding C++20 designated initialiser)
402 PauliStrSum out;
403 out.numTerms = numTerms;
404 out.strings = cpu_allocPauliStrings(numTerms); // nullptr if failed
405 out.coeffs = cpu_allocArray(numTerms); // nullptr if failed
406 out.isApproxHermitian = util_allocEpsilonSensitiveHeapFlag(); // nullptr if failed
407
408 // if either alloc failed, clear both before validation to avoid leak
409 freeAllMemoryIfAnyAllocsFailed(out);
410 validate_newPauliStrSumAllocs(out, numTerms*sizeof(PauliStr), numTerms*sizeof(qcomp), __func__);
411
412 // otherwise copy given data into new heap structure, and set initial flags
413 cpu_copyPauliStrSum(out, strings, coeffs);
414 util_setFlagToUnknown(out.isApproxHermitian);
415
416 return out;
417}

◆ 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 441 of file paulis.cpp.

441 {
442
443 // fn must be null-terminated
444 return createPauliStrSumFromFile(string(fn));
445}
PauliStrSum createPauliStrSumFromFile(const char *fn)
Definition paulis.cpp:441

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 458 of file paulis.cpp.

458 {
459
460 // fn must be null-terminated
461 return createPauliStrSumFromReversedFile(string(fn));
462}
PauliStrSum createPauliStrSumFromReversedFile(const char *fn)
Definition paulis.cpp:458

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 306 of file paulis.cpp.

306 {
307 validate_newPauliStrParams(paulis, indices, numPaulis, MAX_NUM_PAULIS_PER_STR, __func__);
308
309 // begin masks at all-identity 'I' = 0
310 PAULI_MASK_TYPE lowPaulis = 0;
311 PAULI_MASK_TYPE highPaulis = 0;
312
313 // change targeted indices to the given Paulis
314 for (int i=0; i<numPaulis; i++) {
315
316 // cast single Pauli to full precision mask to enable below shifts
317 auto pauli = (PAULI_MASK_TYPE) parser_getPauliIntFromChar(paulis[i]);
318
319 // add the Pauli to either the lower or upper pauli masks
320 if (indices[i] < MAX_NUM_PAULIS_PER_MASK)
321 lowPaulis |= pauli << (2*indices[i]);
322 else
323 highPaulis |= pauli << (2*(indices[i] - MAX_NUM_PAULIS_PER_MASK));
324 }
325
326 // return a new stack PauliStr instance (avoiding C++20 initialiser)
327 PauliStr out;
328 out.lowPaulis = lowPaulis;
329 out.highPaulis = highPaulis;
330 return out;
331}
long long unsigned int PAULI_MASK_TYPE
Definition precision.h:69

Referenced by applyMultiStateControlledMultiQubitNot(), applyMultiStateControlledPauliX(), applyMultiStateControlledPauliY(), applyMultiStateControlledRotateX(), applyMultiStateControlledRotateY(), applyMultiStateControlledRotateZ(), getPauliStr(), multiplyMultiQubitNot(), 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 334 of file paulis.cpp.

334 {
335 validate_newPauliStrParams(paulis, indices, numPaulis, MAX_NUM_PAULIS_PER_STR, __func__);
336
337 // validation ensures never causes stack overflow
338 char pauliChars[MAX_NUM_PAULIS_PER_STR + 1]; // +1 for null-terminal
339
340 // make a char array from the pauli codes, using an arbitrary
341 // choice of the Pauli characters accepted by the API (like IXYZ)
342 for (int i=0; i<numPaulis; i++)
343 pauliChars[i] = "IXYZ"[paulis[i]];
344
345 // including the trailing null char, used to infer string end/length
346 pauliChars[numPaulis] = '\0';
347
348 return getPauliStr(pauliChars, indices, numPaulis);
349}
PauliStr getPauliStr(const char *paulis, int *indices, int numPaulis)
Definition paulis.cpp:306

◆ 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