Utilities

Overview

Detailed Documentation

Typedefs

Apply Quantum Gate on a series of Qubit.

Parameters:

QVec

qubit vector

std::function<QGate(Qubit*)>

QGate function

Returns:

QCircuit

Global Functions

OriginIR Transform To Quantum Program.

Parameters:

std::string

OriginIR file path

QuantumMachine*

quantum machine pointer

QVec

qubit pointer

std::vector<ClassicalCondition>

classical register vector

Returns:

QProg quantum program

Convert OriginIR To Quantum Program.

Parameters:

std::string

OriginIR file path

QuantumMachine*

quantum machine pointer

Returns:

QProg quantum program

Convert OriginIR To Quantum Program.

Parameters:

std::string

OriginIR file path

QuantumMachine*

quantum machine pointer

QVec

qubit pointer vector

std::vector<ClassicalCondition>

classical register vector

Returns:

QProg quantum program

Convert OriginIR String To Quantum Program.

Parameters:

std::string

OriginIR String

QuantumMachine*

quantum machine pointer

Returns:

QProg quantum program

Convert OriginIR String To Quantum Program.

Parameters:

std::string

OriginIR String

QuantumMachine*

quantum machine pointer

QVec

qubit pointer

std::vector<ClassicalCondition>

classical register vector

Returns:

QProg quantum program

QASM Transform To Quantum Program.

Parameters:

std::string

QASM file path

QuantumMachine*

quantum machine pointer

Returns:

QProg quantum program

QASM Transform To Quantum Program.

Parameters:

std::string

QASM file path

QuantumMachine*

quantum machine pointer

QVec

qubit pointer vector

std::vector<ClassicalCondition>

classical register vector

Returns:

QProg quantum program

QASM Transform To Quantum Program.

Parameters:

std::string

QASM string

QuantumMachine*

quantum machine pointer

Returns:

QProg quantum program

QASM Transform To Quantum Program.

Parameters:

std::string

QASM string

QuantumMachine*

quantum machine pointer

QVec

qubit pointer vector

std::vector<ClassicalCondition>

classical register vector @retur

Parse quantum program interface for binary data vector.

Parameters:

QuantumMachine*

quantum machine pointer

std::vector<uint8_t>&

data binary data vector

QVec&

qubits

std::vector<ClassicalCondition>&

cbits

QProg&

Quantum program

Returns:

bool

Parse quantum program interface for binary file.

Parameters:

QuantumMachine*

quantum machine pointer

std::string&

binary file name

QVec&

qubits

std::vector<ClassicalCondition>&

cbits

QProg&

Quantum program

Returns:

bool

Parse quantum program interface for binary data vector.

Parameters:

QuantumMachine*

quantum machine pointer

std::vector<uint8_t>&

data binary data vector

QVec&

qubits

std::vector<ClassicalCondition>&

cbits

QProg&

Quantum program

Returns:

bool

Parse quantum program interface for binary file.

Parameters:

QuantumMachine*

quantum machine pointer

std::string&

binary file name

QVec&

qubits

std::vector<ClassicalCondition>&

cbits

QProg&

Quantum program

Returns:

bool

Get quantum program binary data.

Parameters:

QProg&

quantum program

QuantumMachine&

quantum

Returns:

std::vector<uint8_t> quantum program binary data

Store quantum program in binary file.

Parameters:

QProg&

quantum program

QuantumMachine*

quantum machine

std::string&

binary filename

Returns:

void

Get quantum program binary data.

Parameters:

QProg&

quantum program

QuantumMachine&

quantum

Returns:

std::vector<uint8_t> quantum program binary data

Store quantum program in binary file.

Parameters:

QProg&

quantum program

QuantumMachine*

quantum machine

std::string&

binary filename

Returns:

void

Quantum Program Transform To OriginIR

Parameters:

_Ty&

quantum program, quantum circuit, quantum while or quantum if

Returns:

std::string OriginIR instruction set

See also:

Convert Quantum Program To OriginIR.

Parameters:

_Ty&

quantum program, quantum circuit, quantum while or quantum if

QuantumMachine*

quantum machine

Returns:

std::string OriginIR instruction set

write prog to originir file

Parameters:

QProg&

Quantum Program

QuantumMachine*

quantum machine pointer

const

std::string originir file name

Returns:

Convert Quantum program to QASM instruction set.

Parameters:

QProg&

Quantum Program

QuantumMachine*

quantum machine pointer

IBMQBackends

ibmBackend = IBMQ_QASM_SIMULATOR

Returns:

std::string QASM instruction set

write prog to qasm file

Parameters:

QProg&

Quantum Program

QuantumMachine*

quantum machine pointer

const

std::string qasm file name

Returns:

Quantum program transform to quil instruction set interface.

Parameters:

QProg&

quantum program

QuantumMachine*

quantum machine pointer

Returns:

std::string instruction set

See also:

Quantum program transform to quil instruction set interface.

Parameters:

QProg&

quantum program

QuantumMachine*

quantum machine pointer

Returns:

std::string instruction set

QRunes instruction set transform to quantum program interface.

Parameters:

QProg&

empty quantum program

Returns:

void

Quantum chip adaptive conversion.

Parameters:

QProg&

Quantum Program

QuantumMachine*

quantum machine pointer

QVec&

Quantum bits after mapping. Note: if b_mapping is false, the input QVec will be misoperated.

bool

whether or not perform the mapping operation.

const

std::string It can be configuration file or configuration data, which can be distinguished by file suffix, so the configuration file must be end with “.json”, default is CONFIG_PATH

Returns:

Judge if the metadata’s type is arbitrary rotation.

Parameters:

std::vector<std::string>&

the gates is judged

std::vector<std::string>&

output the valid gates

Returns:

Return the style of metadata validity

Judge if the metadata’s type is double continuous.

Parameters:

std::vector<std::string>&

the gates is judged

std::vector<std::string>&

output the valid gates

Returns:

Return the style of metadata validity

Judge if the metadata’s type is single continuous and discrete.

Parameters:

std::vector<std::string>&

the gates is judged

std::vector<std::string>&

output the valid gates

Returns:

Return the style of metadata validity

Judge if the metadata’s type is double discrete.

Parameters:

std::vector<std::string>&

the gates is judged

std::vector<std::string>&

output the valid gates

Returns:

Return the style of metadata validity

Judge double gate type.

Parameters:

std::vector<std::string>&

the gates is judged

std::vector<std::string>&

output the valid gates

Returns:

Return the style of metadata validity

Verify the validity of single quantum gates.

Parameters:

std::vector<std::string>&

gates vertor

std::vector<std::string>&

output the valid gates

Returns:

int single quantum gate type

judge the Qgate if match the target topologic structure of quantum circuit

Parameters:

vector<vector<double>>&

the target topologic structure of quantum circuit

Returns:

if the Qgate match the target topologic structure return true, or else return false

See also:

JsonConfigParam::readAdjacentMatrix(TiXmlElement *, int&, std::vector<std::vector<int>>&)

get the adjacent quantum gates’s(the front one and the back one) type

Parameters:

nodeItr

the specialed NodeIter

std::vector<NodeInfo>&

adjacentNodes the front node and the back node

Returns:

result string.

See also:

judge the specialed two NodeIters whether can be exchanged

If the two input nodeIters are in different sub-prog, they are unswappable.

Parameters:

nodeItr1

the first NodeIter

nodeItr2

the second NodeIter

Returns:

if the two NodeIters can be exchanged, return true, otherwise retuen false.

judge if the target node is a base QGate type

Parameters:

nodeItr

the target NodeIter

Returns:

if the target node is a base QGate type, return true, otherwise retuen false.

See also:

get the target matrix between the input two Nodeiters

Parameters:

const

bool Qubit order mark of output matrix, true for positive sequence(Bid Endian), false for inverted order(Little Endian), default is false

nodeItrStart

the start NodeIter

nodeItrEnd

the end NodeIter

Returns:

the target matrix include all the QGate ‘s matrix (multiply).

See also:

pick up the nodes of srcProg between nodeItrStart and nodeItrEnd to outPutProg

Parameters:

outPutProg

the output prog

srcProg

The source prog

nodeItrStart

The start pos of source prog

nodeItrEnd

The end pos of source prog

reject_node_types

vector of the reject node types.

bDagger

daggger flag @ Note: If there are any Qif/Qwhile nodes between nodeItrStart and nodeItrEnd, Or the nodeItrStart and the nodeItrEnd are in different sub-circuit, an exception will be throw.

Get all the used quantum bits in the input prog.

Parameters:

prog

the input prog

vecQuBitsInUse

The vector of used quantum bits, sorted from small to large;

Returns:

return the size of used qubits,sorted by physical address, in descending order

Get all the used class bits in the input prog.

Parameters:

prog

the input prog

vecClBitsInUse

The vector of used class bits, sorted from small to large;

Returns:

return the size of used class bits

Get all the measure-info in the input prog.

Parameters:

prog

the input prog

std::vector<std::pair<uint32_t

uint32_t>>

The vector of measure-info: std::pair<measured-qubit, target-cbit>

Returns:

return the size of measure-info

output all the node type of the target prog

Parameters:

the

target prog

Returns:

return the output string

get gate parameter

Parameters:

pGate

the target gate pointer

para_str

parameter string

Returns:

Check if it is a valid dagger.

Parameters:

bool

Returns:

bool true for valid dagger

Count quantum gate num under quantum program, quantum circuit, quantum while, quantum if.

Parameters:

_Ty&

quantum program, quantum circuit, quantum while or quantum if

Returns:

size_t Quantum gate num

See also:

Get quantum program clock cycle.

Parameters:

QProg

& quantum program

QuantumMachine*

quantum machine pointer

See also:

Get quantum program clock cycle.

Parameters:

QProg

& quantum program

QuantumMachine*

quantum machine pointer

output a quantum prog/circuit to console by text-pic(UTF-8 code), and will save the text-pic in file named QCircuitTextPic.txt in the same time in current path.

All the output characters are UTF-8 encoded.

Parameters:

prog

the source prog

itr_start

The start pos, default is the first node of the prog

itr_end

The end pos, default is the end node of the prog

Returns:

the output string

output a quantum prog/circuit by time sequence to console by text-pic(UTF-8 code), and will save the text-pic in file named QCircuitTextPic.txt in the same time in current path.

All the output characters are GBK encoded on windows, UTF-8 encoded on other OS.

Parameters:

prog

the source prog

const

std::string It can be configuration file or configuration data, which can be distinguished by file suffix, so the configuration file must be end with “.json”, default is CONFIG_PATH

itr_start

The start pos, default is the first node of the prog

itr_end

The end pos, default is the end node of the prog

Returns:

the output string

Overload operator <<.

Parameters:

std::ostream&

ostream

QProg

quantum program

Returns:

std::ostream

A Contextual Duration-Aware Qubit Mapping for V arious NISQ Devices.

QCodarGridDevice : SIMPLE_TYPE It’s a simple undirected topology graph, build a topology based on the values of m and n 0 = 1 = 2 = 3

eg: m = 2, n = 4

Parameters:

QProg

quantum program

QVec

qubit vector

QuantumMachine*

quantum machine

size_t

m : the length of the topology

size_t

n : the width of the topology

size_t

run_times : the number of times run the remapping, better parameters get better results

Returns:

QProg mapped quantum program