Maestro 0.3.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
Circuits::Random< Time > Class Template Reference

Random operation. More...

#include <RandomOp.h>

Inheritance diagram for Circuits::Random< Time >:
Collaboration diagram for Circuits::Random< Time >:

Public Member Functions

 Random (const std::vector< size_t > &ind, size_t seed, Time delay=0)
 Construct a new Random object.
 Random (const std::vector< size_t > &ind={})
 Construct a generator with a fresh random seed.
std::vector< size_t > AffectedBits () const override
 Get the affected bits.
virtual Types::qubits_vector AffectedQubits () const
 Returns the affected qubits.
virtual bool CanAffectQuantumState () const
 Find if the operation can affect the quantum state.
std::shared_ptr< IOperation< Time > > Clone () const override
 Get a shared pointer to a clone of this object.
std::shared_ptr< Random< Time > > CloneForExecution (uint64_t stream, uint64_t defaultSeed=0) const
 Clone the generator for an independent execution stream.
void Execute (const std::shared_ptr< Simulators::ISimulator > &sim, OperationState &state) const override
 Execute the operation.
const std::vector< size_t > & GetBitsIndices () const
 Get the indices of the classical bits affected by this operation.
Types::time_type GetDelay () const
 Get the delay of the operation.
std::shared_ptr< IOperation< Types::time_type > > getptr ()
 Get a shared pointer to this object.
OperationType GetType () const override
 Get the type of the operation.
bool HasExplicitSeed () const
virtual bool IsBranching () const
 Checks if the operation is a branching one.
bool IsClifford () const override
 Checks if the operation is a Clifford one.
virtual bool IsConditional () const
 Find if the operation is a conditional operation.
bool IsNoiseless () const
 Whether noise models skip this operation.
virtual bool NeedsEntanglementForDistribution () const
 Find if the operation needs entanglement for distribution.
std::shared_ptr< IOperation< Time > > Remap (const std::unordered_map< Types::qubit_t, Types::qubit_t > &qubitsMap, const std::unordered_map< Types::qubit_t, Types::qubit_t > &bitsMap={}) const override
 Get a shared pointer to a remapped operation.
void Seed (size_t sd)
 Seeds the random generator.
void SetBitsIndices (const std::vector< size_t > &ind)
 Set the indices of the classical bits affected by this operation.
virtual void SetDelay (Types::time_type d)
 Set the delay of the operation.
void SetNoiseless (bool value=true)
 Mark the operation as exempt from injected gate noise.

Protected Member Functions

void SetBit (size_t index, Types::qubit_t bit)
 Set the classical bit to index.

Detailed Description

template<typename Time = Types::time_type>
class Circuits::Random< Time >

Random operation.

Implements an operation that can generate random classical bits that are stored in the classical state/register.

Template Parameters
TimeThe data type used for operation time.
See also
IOperation

Definition at line 34 of file RandomOp.h.

Constructor & Destructor Documentation

◆ Random() [1/2]

template<typename Time = Types::time_type>
Circuits::Random< Time >::Random ( const std::vector< size_t > & ind = {})
inline

Construct a generator with a fresh random seed.

An execution seed, when supplied, controls this generator in network jobs.

Definition at line 42 of file RandomOp.h.

◆ Random() [2/2]

template<typename Time = Types::time_type>
Circuits::Random< Time >::Random ( const std::vector< size_t > & ind,
size_t seed,
Time delay = 0 )
inline

Construct a new Random object.

Constructs a new Random object.

Parameters
indThe indices of the classical bits to be set by the generator.
seedThe seed used for the random number generator.
delayThe excution time.

Definition at line 55 of file RandomOp.h.

References Circuits::IOperation< Types::time_type >::IOperation(), and Seed().

Member Function Documentation

◆ AffectedBits()

template<typename Time = Types::time_type>
std::vector< size_t > Circuits::Random< Time >::AffectedBits ( ) const
inlineoverridevirtual

Get the affected bits.

Returns the indices of the classical bits affected by this operation.

Returns
The indices of the bits affected by this operation.

Reimplemented from Circuits::IOperation< Types::time_type >.

Definition at line 159 of file RandomOp.h.

References GetBitsIndices().

◆ AffectedQubits()

◆ CanAffectQuantumState()

virtual bool Circuits::IOperation< Types::time_type >::CanAffectQuantumState ( ) const
inlinevirtualinherited

Find if the operation can affect the quantum state.

Returns true if the operation can affect the quantum state, false otherwise.

Returns
True if the operation can affect the quantum state, false otherwise.

Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, Circuits::Delay< Time >, and Circuits::QuantumChannelOperation< Time >.

Definition at line 473 of file Operations.h.

◆ Clone()

template<typename Time = Types::time_type>
std::shared_ptr< IOperation< Time > > Circuits::Random< Time >::Clone ( ) const
inlineoverridevirtual

Get a shared pointer to a clone of this object.

Returns a shared pointer to a copy of this object.

Returns
A shared pointer to this object.

Implements Circuits::IOperation< Types::time_type >.

Definition at line 131 of file RandomOp.h.

References GetBitsIndices(), and Circuits::IOperation< Time >::GetDelay().

Referenced by CloneForExecution().

◆ CloneForExecution()

template<typename Time = Types::time_type>
std::shared_ptr< Random< Time > > Circuits::Random< Time >::CloneForExecution ( uint64_t stream,
uint64_t defaultSeed = 0 ) const
inline

Clone the generator for an independent execution stream.

Combine an explicit instruction seed (including zero) with the stream ID. For an unseeded instruction, use defaultSeed instead: zero when the stream comes from an execution seed, or fresh entropy for an unseeded execution. Ordinary Clone() and Seed() retain their original seed semantics.

Definition at line 146 of file RandomOp.h.

References Clone(), and Simulators::IState::DeriveSeed().

Referenced by Circuits::Circuit< Time >::CloneForExecution().

◆ Execute()

template<typename Time = Types::time_type>
void Circuits::Random< Time >::Execute ( const std::shared_ptr< Simulators::ISimulator > & sim,
OperationState & state ) const
inlineoverridevirtual

Execute the operation.

Executes the operation.

Parameters
simThe simulator to be used for the execution.
stateThe state of the simulator.

Implements Circuits::IOperation< Types::time_type >.

Definition at line 67 of file RandomOp.h.

References Circuits::OperationState::SetBit().

◆ GetBitsIndices()

template<typename Time = Types::time_type>
const std::vector< size_t > & Circuits::Random< Time >::GetBitsIndices ( ) const
inline

Get the indices of the classical bits affected by this operation.

Returns the indices of the classical bits affected by this operation.

Returns
The indices of the classical bits affected by this operation.

Definition at line 90 of file RandomOp.h.

Referenced by AffectedBits(), and Clone().

◆ GetDelay()

Types::time_type Circuits::IOperation< Types::time_type >::GetDelay ( ) const
inlineinherited

Get the delay of the operation.

Returns the delay due of the execution time of the operation.

Returns
The delay of the operation.

Definition at line 546 of file Operations.h.

Referenced by Circuits::NoOperation< Time >::Clone().

◆ getptr()

std::shared_ptr< IOperation< Types::time_type > > Circuits::IOperation< Types::time_type >::getptr ( )
inlineinherited

Get a shared pointer to this object.

Returns a shared pointer to this object. The object needs to be already wrapped in a shared pointer.

Returns
A shared pointer to this object.

Definition at line 535 of file Operations.h.

◆ GetType()

template<typename Time = Types::time_type>
OperationType Circuits::Random< Time >::GetType ( ) const
inlineoverridevirtual

Get the type of the operation.

Returns the type of the operation, in this case, random.

Returns
The type of the operation.

Reimplemented from Circuits::IOperation< Types::time_type >.

Definition at line 79 of file RandomOp.h.

References Circuits::kRandomGen.

◆ HasExplicitSeed()

template<typename Time = Types::time_type>
bool Circuits::Random< Time >::HasExplicitSeed ( ) const
inline

Definition at line 120 of file RandomOp.h.

Referenced by Circuits::Circuit< Time >::HasUnseededRandomOperations().

◆ IsBranching()

virtual bool Circuits::IOperation< Types::time_type >::IsBranching ( ) const
inlinevirtualinherited

◆ IsClifford()

template<typename Time = Types::time_type>
bool Circuits::Random< Time >::IsClifford ( ) const
inlineoverridevirtual

Checks if the operation is a Clifford one.

Checks if the operation is a Clifford one, allowing to be simulated in a stabilizers simulator.

Returns
True if it can be applied in a stabilizers simulator, false otherwise.

Reimplemented from Circuits::IOperation< Types::time_type >.

Definition at line 198 of file RandomOp.h.

◆ IsConditional()

virtual bool Circuits::IOperation< Types::time_type >::IsConditional ( ) const
inlinevirtualinherited

Find if the operation is a conditional operation.

Returns true if the operation is conditional, false otherwise.

Returns
True if the operation is conditional, false otherwise.

Definition at line 500 of file Operations.h.

◆ IsNoiseless()

bool Circuits::IOperation< Types::time_type >::IsNoiseless ( ) const
inlineinherited

Whether noise models skip this operation.

Returns
True if no gate noise is injected after this operation.

Definition at line 580 of file Operations.h.

◆ NeedsEntanglementForDistribution()

virtual bool Circuits::IOperation< Types::time_type >::NeedsEntanglementForDistribution ( ) const
inlinevirtualinherited

Find if the operation needs entanglement for distribution.

Returns true if the operation needs entanglement for distribution, false otherwise.

Returns
True if the operation needs entanglement for distribution, false otherwise.

Reimplemented in Circuits::Circuit< Time >, Circuits::Circuit< Types::time_type >, and Circuits::QuantumChannelOperation< Time >.

Definition at line 488 of file Operations.h.

◆ Remap()

template<typename Time = Types::time_type>
std::shared_ptr< IOperation< Time > > Circuits::Random< Time >::Remap ( const std::unordered_map< Types::qubit_t, Types::qubit_t > & qubitsMap,
const std::unordered_map< Types::qubit_t, Types::qubit_t > & bitsMap = {} ) const
inlineoverridevirtual

Get a shared pointer to a remapped operation.

Returns a shared pointer to a copy of the operation with qubits and classical bits changed according to the provided maps.

Parameters
qubitsMapThe map of qubits to remap.
bitsMapThe map of classical bits to remap.
Returns
A shared pointer to the remapped object.

Implements Circuits::IOperation< Types::time_type >.

Definition at line 174 of file RandomOp.h.

◆ Seed()

template<typename Time = Types::time_type>
void Circuits::Random< Time >::Seed ( size_t sd)
inline

Seeds the random generator.

Seeds the random generator using the specified seed.

Parameters
sdThe seed to be used.

Definition at line 112 of file RandomOp.h.

Referenced by Random().

◆ SetBit()

template<typename Time = Types::time_type>
void Circuits::Random< Time >::SetBit ( size_t index,
Types::qubit_t bit )
inlineprotected

Set the classical bit to index.

This method sets the classical bit index at the specified index.

Parameters
indexThe index of the classical bit index.
bitThe classical bit index to set.

Definition at line 211 of file RandomOp.h.

◆ SetBitsIndices()

template<typename Time = Types::time_type>
void Circuits::Random< Time >::SetBitsIndices ( const std::vector< size_t > & ind)
inline

Set the indices of the classical bits affected by this operation.

Sets the indices of the classical bits affected by this operation.

Parameters
indThe indices of the classical bits affected by this operation.

Definition at line 101 of file RandomOp.h.

◆ SetDelay()

virtual void Circuits::IOperation< Types::time_type >::SetDelay ( Types::time_type d)
inlinevirtualinherited

Set the delay of the operation.

Sets the delay due of the execution time of the operation.

Parameters
dThe delay of the operation.

Definition at line 557 of file Operations.h.

◆ SetNoiseless()

void Circuits::IOperation< Types::time_type >::SetNoiseless ( bool value = true)
inlineinherited

Mark the operation as exempt from injected gate noise.

Noise models add no noise after a noiseless operation. This is for basis changes that belong to a non-Z measurement or reset rather than being gates in their own right. Gate copies (Clone, Remap) keep the mark.

Parameters
valueTrue to exempt the operation from gate noise.

Definition at line 570 of file Operations.h.


The documentation for this class was generated from the following file: