Maestro 0.2.5
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
Network::SimpleDisconnectedNetwork< Time, Controller > Class Template Reference

The simple network implementation. More...

#include <SimpleDisconnectedNetwork.h>

+ Inheritance diagram for Network::SimpleDisconnectedNetwork< Time, Controller >:
+ Collaboration diagram for Network::SimpleDisconnectedNetwork< Time, Controller >:

Public Types

using BaseClass = INetwork< Time >
 The base class type.
 
using ExecuteResults = typename BaseClass::ExecuteResults
 The execute results type.
 
using SimulatorPair = std::pair< Simulators::SimulatorType, Simulators::SimulationType >
 
using SimulatorsSet = std::unordered_set< SimulatorPair, boost::hash< SimulatorPair > >
 

Public Member Functions

 SimpleDisconnectedNetwork (const std::vector< Types::qubit_t > &qubits={}, const std::vector< size_t > &cbits={})
 The constructor.
 
void AddOptimizationSimulator (Simulators::SimulatorType type, Simulators::SimulationType kind) override
 Adds a simulator to the simulators optimization set.
 
bool AreClassicalBitsOnSameHost (size_t bitId1, size_t bitId2) const override
 Check if the specified classical bits are on the same host.
 
bool AreEntanglementQubitsBusy (size_t qubitId1, size_t qubitId2) const override
 Check if any of the two specified qubits used for entanglement between hosts are busy.
 
bool AreQubitAndClassicalBitOnSameHost (size_t qubitId, size_t bitId) const override
 Check if the specified qubit and classical bit are on the same host.
 
bool AreQubitsOnSameHost (size_t qubitId1, size_t qubitId2) const override
 Check if the specified qubits are on the same host.
 
std::shared_ptr< Simulators::ISimulatorChooseBestSimulator (std::shared_ptr< Circuits::Circuit< Time > > &dcirc, size_t &counts, size_t nrQubits, size_t nrCbits, size_t nrResultCbits, Simulators::SimulatorType &simType, Simulators::SimulationType &method, std::vector< bool > &executed, bool multithreading=false, bool dontRunCircuitStart=false) const override
 Choose the best simulator for the given circuit.
 
void ClearEntanglements () override
 Clear all entanglements between hosts in the network.
 
std::shared_ptr< INetwork< Time > > Clone () const override
 Clone the network.
 
void Configure (const char *key, const char *value) override
 Configures the network.
 
void CreateNetwork (const std::vector< Types::qubit_t > &qubits, const std::vector< size_t > &cbits)
 Creates the network hosts and controller.
 
void CreateScheduler (SchedulerType schType=SchedulerType::kNoEntanglementQubitsParallel) override
 Create the scheduler for the network.
 
void CreateSimulator (Simulators::SimulatorType simType=Simulators::SimulatorType::kQCSim, Simulators::SimulationType simExecType=Simulators::SimulationType::kMatrixProductState, size_t nrQubits=0) override
 Create the simulator for the network.
 
void Execute (const std::shared_ptr< Circuits::Circuit< Time > > &circuit) override
 Execute the circuit on the network.
 
std::vector< double > ExecuteExpectations (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, const std::vector< std::string > &paulis) override
 Execute the circuit on the network and return the expectation values for the specified Pauli strings.
 
void ExecuteOnHost (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId) override
 Execute the circuit on the specified host.
 
std::vector< std::complex< double > > ExecuteOnHostAmplitudes (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId) override
 Execute circuit on host and return full statevector amplitudes.
 
std::vector< double > ExecuteOnHostExpectations (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId, const std::vector< std::string > &paulis) override
 Execute the circuit on the specified host and return the expectation values for the specified Pauli strings.
 
std::complex< double > ExecuteOnHostProjectOnZero (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId) override
 Execute circuit on host and return the projection onto the zero state.
 
std::vector< ExecuteResultsExecuteScheduled (const std::vector< Schedulers::ExecuteCircuit< Time > > &circuits) override
 Schedule and execute circuits on the network.
 
bool ExpectsClassicalBitFromOtherHost (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Checks if a gate expects a classical bit from another host.
 
std::vector< size_t > GetClassicalBitsIds (size_t hostId) const override
 Get the classical bit ids for the specified host.
 
const std::shared_ptr< IController< Time > > GetController () const override
 Get the controller for the network.
 
std::shared_ptr< Circuits::Circuit< Time > > GetDistributedCircuit () const override
 Get the distributed circuit.
 
std::vector< size_t > GetEntangledQubitMeasurementBitIds (size_t hostId) const override
 Get the classical bit ids used for measurement of entanglement qubits between the hosts for the specified host.
 
const std::shared_ptr< IHost< Time > > GetHost (size_t hostId) const override
 Get the host with the specified id.
 
size_t GetHostIdForAnyQubit (size_t qubitId) const override
 Get the host id for the specified qubit.
 
size_t GetHostIdForClassicalBit (size_t classicalBitId) const override
 Get the host id for the specified classical bit.
 
size_t GetHostIdForClassicalControl (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Get the host id where the classical control bit resides for a conditioned gate.
 
size_t GetHostIdForEntangledQubit (size_t qubitId) const override
 Get the host id for the specified qubit used for entanglement between hosts.
 
size_t GetHostIdForQubit (size_t qubitId) const override
 Get the host id for the specified qubit.
 
std::vector< std::shared_ptr< IHost< Time > > > & GetHosts ()
 Get the hosts in the network.
 
bool GetInitialQubitsMapOptimization () const override
 
Simulators::SimulationType GetLastSimulationType () const override
 Get the last used simulation type.
 
Simulators::SimulatorType GetLastSimulatorType () const override
 Get the last used simulator type.
 
size_t GetMaxSimulators () const override
 Get the maximum number of simulators that can be used in the network.
 
size_t GetMPSOptimizationBondDimensionThreshold () const override
 
size_t GetMPSOptimizationQubitsNumberThreshold () const override
 
std::vector< size_t > GetNetworkEntangledQubitsIds (size_t hostId) const override
 Get the qubit ids used for entanglement between hosts for the specified host.
 
size_t GetNumberOfGatesDistributedOrCut (const std::shared_ptr< Circuits::Circuit< Time > > &circuit) const override
 Get the number of gates that span more than one host.
 
size_t GetNumClassicalBits () const override
 Get the number of classical bits in the network.
 
size_t GetNumClassicalBitsForHost (size_t hostId) const override
 Get the number of classical bits in the network for the specified host.
 
size_t GetNumHosts () const override
 Get the number of hosts in the network.
 
size_t GetNumNetworkEntangledQubits () const override
 Get the number of qubits used for entanglement between hosts.
 
size_t GetNumNetworkEntangledQubitsForHost (size_t hostId) const override
 Get the number of qubits used for entanglement between hosts for the specified host.
 
size_t GetNumQubits () const override
 Get the number of qubits in the network.
 
size_t GetNumQubitsForHost (size_t hostId) const override
 Get the number of qubits in the network for the specified host.
 
bool GetOptimizeSimulator () const override
 Returns the 'optimize' flag.
 
std::shared_ptr< INetwork< Time > > getptr ()
 Get a shared pointer to this object.
 
std::vector< size_t > GetQubitsIds (size_t hostId) const override
 Get the qubit ids for the specified host.
 
std::shared_ptr< Schedulers::IScheduler< Time > > GetScheduler () const override
 Get the scheduler for the network.
 
std::shared_ptr< Simulators::ISimulatorGetSimulator () const override
 Get the simulator for the network.
 
const BaseClass::SimulatorsSetGetSimulatorsSet () const override
 Get the optimizations simulators set.
 
Circuits::OperationStateGetState () override
 Get the classical state of the network.
 
virtual std::vector< std::vector< std::string > > GetSubroutinesTextCode () const
 Get the text code that is executed on the hosts.
 
NetworkType GetType () const override
 Get the type of the network.
 
bool IsDistributedOperation (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Check if the circuit operation is distributed.
 
bool IsEntanglementQubitBusy (size_t qubitId) const override
 Check if the specified qubit used for entanglement between hosts is busy.
 
bool IsEntanglingGate (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Checks if a gate is an entangling gate.
 
bool IsLocalOperation (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Check if the circuit operation is local.
 
bool IsNetworkEntangledQubit (size_t qubitId) const override
 Check if the specified qubit id is for a qubit used for entanglement between hosts.
 
void MarkEntangledQubitFree (size_t qubitId) override
 Mark the specified qubit used for entanglement between hosts as free.
 
void MarkEntangledQubitsBusy (size_t qubitId1, size_t qubitId2) override
 Mark the pair of the specified qubits used for entanglement between hosts as busy.
 
bool OperatesWithNetworkEntangledQubit (const std::shared_ptr< Circuits::IOperation< Time > > &op) const override
 Check if the circuit operation operates on the entanglement qubits between hosts.
 
bool OptimizationSimulatorExists (Simulators::SimulatorType type, Simulators::SimulationType kind) const override
 Checks if a simulator exists in the optimization set.
 
void RemoveAllOptimizationSimulatorsAndAdd (Simulators::SimulatorType type, Simulators::SimulationType kind) override
 Removes all simulators from the simulators optimization set and adds the one specified.
 
void RemoveOptimizationSimulator (Simulators::SimulatorType type, Simulators::SimulationType kind) override
 Removes a simulator from the simulators optimization set.
 
ExecuteResults RepeatedExecute (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t shots=1000) override
 Execute the circuit on the network, repeatedly.
 
ExecuteResults RepeatedExecuteCircuit (const Schedulers::ExecuteCircuit< Time > &executeCircuit)
 Execute the circuit on the network, repeatedly.
 
ExecuteResults RepeatedExecuteCircuitOnHost (const Schedulers::ExecuteCircuit< Time > &executeCircuit, size_t hostId)
 Execute the circuit on the specified host, repeatedly.
 
ExecuteResults RepeatedExecuteOnHost (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId, size_t shots=1000) override
 Execute the circuit on the specified host, repeatedly.
 
bool SendPacket (size_t fromHostId, size_t toHostId, const std::vector< uint8_t > &packet) override
 Sends a packet between two hosts.
 
void SetController (const std::shared_ptr< IController< Time > > &cntrl)
 Set the network controller host.
 
void SetInitialQubitsMapOptimization (bool optimize=true) override
 
void SetMaxSimulators (size_t val) override
 Set the maximum number of simulators that can be used in the network.
 
void SetMPSOptimizationBondDimensionThreshold (size_t threshold) override
 
void SetMPSOptimizationQubitsNumberThreshold (size_t threshold) override
 
void SetOptimizeSimulator (bool optimize=true) override
 Allows using an optimized simulator.
 

Protected Member Functions

void ConvertBackResults (ExecuteResults &res)
 Converts back the results from the optimized network distribution mapping.
 
void ConvertBackResults (ExecuteResults &res, const std::unordered_map< Types::qubit_t, Types::qubit_t > &bitsMap) const
 Converts back the results using the passed qubits map.
 
void ConvertBackState ()
 Converts back the state from the optimized network distribution mapping.
 
void ConvertBackState (const std::unordered_map< Types::qubit_t, Types::qubit_t > &qubitsMap)
 Converts back the state using the passed qubits map.
 
std::unordered_map< Types::qubit_t, Types::qubit_tMapCircuitOnHost (const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t hostId, size_t &nrQubits, size_t &nrCbits, bool useSeparateSimForHosts=false)
 Map the circuit on the host.
 

Protected Attributes

Circuits::OperationState classicalState
 The classical state of the network.
 
std::shared_ptr< IController< Time > > controller
 The controller for the network.
 
std::shared_ptr< Circuits::Circuit< Time > > distCirc
 The distributed circuit.
 
std::vector< std::shared_ptr< IHost< Time > > > hosts
 The hosts in the network.
 
Simulators::SimulationType lastMethod
 The last simulation method used.
 
Simulators::SimulatorType lastSimulatorType
 The last simulator type used.
 
std::string maxBondDim
 
size_t maxSimulators
 The maximum number of simulators that can be used in the network.
 
std::string mpsSample
 
bool optimizeSimulator = true
 The flag to optimize the simulator.
 
std::shared_ptr< Simulators::ISimulatorsimulator
 The quantum computing simulator for the network.
 
std::unique_ptr< Estimators::SimulatorsEstimatorInterface< Time > > simulatorsEstimator
 The simulators estimator.
 
BaseClass::SimulatorsSet simulatorsForOptimizations
 
std::string singularValueThreshold
 
bool useDoublePrecision = false
 

Detailed Description

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
class Network::SimpleDisconnectedNetwork< Time, Controller >

The simple network implementation.

The simple network implementation. A simple network class, implementing a network containing a buch of hosts, no communication (classical or quantum) among them.

Template Parameters
TimeThe time type used for execution times.
See also
INetwork
SimpleController
SimpleHost

Definition at line 42 of file SimpleDisconnectedNetwork.h.

Member Typedef Documentation

◆ BaseClass

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
using Network::SimpleDisconnectedNetwork< Time, Controller >::BaseClass = INetwork<Time>

The base class type.

Definition at line 44 of file SimpleDisconnectedNetwork.h.

◆ ExecuteResults

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
using Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteResults = typename BaseClass::ExecuteResults

The execute results type.

Definition at line 45 of file SimpleDisconnectedNetwork.h.

◆ SimulatorPair

template<typename Time = Types::time_type>
using Network::INetwork< Time >::SimulatorPair = std::pair<Simulators::SimulatorType, Simulators::SimulationType>
inherited

Definition at line 61 of file Network.h.

◆ SimulatorsSet

template<typename Time = Types::time_type>
using Network::INetwork< Time >::SimulatorsSet = std::unordered_set<SimulatorPair, boost::hash<SimulatorPair> >
inherited

Definition at line 63 of file Network.h.

Constructor & Destructor Documentation

◆ SimpleDisconnectedNetwork()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Network::SimpleDisconnectedNetwork< Time, Controller >::SimpleDisconnectedNetwork ( const std::vector< Types::qubit_t > &  qubits = {},
const std::vector< size_t > &  cbits = {} 
)
inline

The constructor.

Constructs the simple network object, creating the network hosts and the controller.

Parameters
qubitsThe number of qubits for each host.
cbitsThe number of classical bits for each host.

Definition at line 57 of file SimpleDisconnectedNetwork.h.

Member Function Documentation

◆ AddOptimizationSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::AddOptimizationSimulator ( Simulators::SimulatorType  type,
Simulators::SimulationType  kind 
)
inlineoverridevirtual

Adds a simulator to the simulators optimization set.

Adds a simulator (if not already present) to the simulators optimization set.

Parameters
typeThe type of the simulator to add.
kindThe kind of the simulation to add.

Implements Network::INetwork< Time >.

Definition at line 1799 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations.

◆ AreClassicalBitsOnSameHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::AreClassicalBitsOnSameHost ( size_t  bitId1,
size_t  bitId2 
) const
inlineoverridevirtual

Check if the specified classical bits are on the same host.

Check if the specified classical are on the same host. This does not include the classical bits used for measuring the qubits used for entanglement between the hosts.

Returns
True if the specified qubits are on the same host, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1423 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ AreEntanglementQubitsBusy()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::AreEntanglementQubitsBusy ( size_t  qubitId1,
size_t  qubitId2 
) const
inlineoverridevirtual

Check if any of the two specified qubits used for entanglement between hosts are busy.

Check if any of the two specified qubits used for entanglement between hosts are busy. This is used to check if the qubits are free in order to use them for creating an entanglement between hosts. It's not used in the simple network, because it doesn't allow quantum communication between hosts.

Parameters
qubitId1The id of the first qubit to check.
qubitId2The id of the second qubit to check.
Returns
True if any of the two specified qubits used for entanglement between hosts are busy, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1636 of file SimpleDisconnectedNetwork.h.

◆ AreQubitAndClassicalBitOnSameHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitAndClassicalBitOnSameHost ( size_t  qubitId,
size_t  bitId 
) const
inlineoverridevirtual

Check if the specified qubit and classical bit are on the same host.

Check if the specified qubit and classical bit are on the same host. This does not include the qubits used for entanglement between the hosts and the classical bits used for their measurement.

Returns
True if the specified qubit and classical bit are on the same host, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1447 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ AreQubitsOnSameHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitsOnSameHost ( size_t  qubitId1,
size_t  qubitId2 
) const
inlineoverridevirtual

Check if the specified qubits are on the same host.

Check if the specified qubits are on the same host. This does not include the qubits used for entanglement between the hosts.

Returns
True if the specified qubits are on the same host, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1400 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::IsDistributedOperation(), and Network::SimpleDisconnectedNetwork< Time, Controller >::IsLocalOperation().

◆ ChooseBestSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr< Simulators::ISimulator > Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator ( std::shared_ptr< Circuits::Circuit< Time > > &  dcirc,
size_t &  counts,
size_t  nrQubits,
size_t  nrCbits,
size_t  nrResultCbits,
Simulators::SimulatorType simType,
Simulators::SimulationType method,
std::vector< bool > &  executed,
bool  multithreading = false,
bool  dontRunCircuitStart = false 
) const
inlineoverridevirtual

Choose the best simulator for the given circuit.

Choose the best simulator for the given circuit, based on the number of qubits, number of classical bits, number of result classical bits and number of shots. The choice is made from the optimization simulators set.

WARNING: the circuit might be modified, depending on the chosen simulator and some optimization settings

Parameters
dcircThe distributed circuit to choose the simulator for.
countsThe number of shots to be executed.
nrQubitsThe number of qubits in the circuit.
nrCbitsThe number of classical bits in the circuit.
nrResultCbitsThe number of result classical bits in the circuit.
simTypeThe type of the chosen simulator.
methodThe kind of simulation of the chosen simulator.
executedA vector of bools marking the executed gates from the circuit (some of them might be executed when picking up the simulator - usually the gates from the beginning up to the measurements/resets).
multithreadingIf true, allows simulators to support multithreading (default is false). Multithreading will be set to false if multithreading is implemented at a higher level (multiple simulators in parallel).
Returns
A shared pointer to the chosen simulator.

Implements Network::INetwork< Time >.

Definition at line 1888 of file SimpleDisconnectedNetwork.h.

References Simulators::SimulatorsFactory::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetMaxSimulators(), Simulators::SimulatorsFactory::IsGpuLibraryAvailable(), Simulators::kCompositeQCSim, Simulators::kCompositeQiskitAer, Simulators::kGpuSim, Simulators::kMatrixProductState, Simulators::kPauliPropagator, Simulators::kQCSim, Simulators::kQiskitAer, Simulators::kQuestSim, Simulators::kStabilizer, Simulators::kStatevector, Simulators::kTensorNetwork, Network::SimpleDisconnectedNetwork< Time, Controller >::maxBondDim, Network::SimpleDisconnectedNetwork< Time, Controller >::mpsSample, Network::SimpleDisconnectedNetwork< Time, Controller >::OptimizationSimulatorExists(), Network::SimpleDisconnectedNetwork< Time, Controller >::optimizeSimulator, Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsEstimator, Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations, and Network::SimpleDisconnectedNetwork< Time, Controller >::singularValueThreshold.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ ClearEntanglements()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ClearEntanglements ( )
inlineoverridevirtual

Clear all entanglements between hosts in the network.

Clear all entanglements between hosts in the network. This marks all qubits used for entanglement between hosts as free. If the entanglements are explicitely coordinated in the network, all pairs of entangled qubits are released. It's not used in the simple network, because it doesn't allow quantum communication between hosts.

Implements Network::INetwork< Time >.

Definition at line 1683 of file SimpleDisconnectedNetwork.h.

◆ Clone()

◆ Configure()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::Configure ( const char *  key,
const char *  value 
)
inlineoverridevirtual

◆ ConvertBackResults() [1/2]

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults ( ExecuteResults res)
inlineprotected

Converts back the results from the optimized network distribution mapping.

Converts back the results from the optimized network distribution mapping. It's used only if there is an optimiser set, that is, there was a rempapping/optimizing of the circuit to be distributed.

Parameters
resThe results to convert back.

Definition at line 2130 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller, and Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults(), Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ ConvertBackResults() [2/2]

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults ( ExecuteResults res,
const std::unordered_map< Types::qubit_t, Types::qubit_t > &  bitsMap 
) const
inlineprotected

Converts back the results using the passed qubits map.

Converts back the results using the passed qubits map It's used only if there is an optimiser set, that is, there was a rempapping/optimizing of the circuit to be distributed. Or if there is an execution on a single host and the passed circuit had a different mapping for qubits than the host qubits.

Parameters
resThe results to convert back.
bitsMapThe map with the bits mapping.

Definition at line 2152 of file SimpleDisconnectedNetwork.h.

References Circuits::OperationState::GetAllBits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBits(), and Circuits::OperationState::Remap().

◆ ConvertBackState() [1/2]

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackState ( )
inlineprotected

Converts back the state from the optimized network distribution mapping.

Converts back the state from the optimized network distribution mapping. It's used only if there is an optimiser set, that is, there was a rempapping/optimizing of the circuit to be distributed.

Definition at line 2091 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller, and Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackState().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackState().

◆ ConvertBackState() [2/2]

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackState ( const std::unordered_map< Types::qubit_t, Types::qubit_t > &  qubitsMap)
inlineprotected

Converts back the state using the passed qubits map.

Converts back the state using the passed qubits map. It's used only if there is an optimiser set, that is, there was a rempapping/optimizing of the circuit to be distributed. Or if there is an execution on a single host and the passed circuit had a different mapping for qubits than the host qubits.

Parameters
qubitsMapThe map with the qubits mapping.

Definition at line 2112 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), and Circuits::OperationState::Remap().

◆ CreateNetwork()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::CreateNetwork ( const std::vector< Types::qubit_t > &  qubits,
const std::vector< size_t > &  cbits 
)
inline

Creates the network hosts and controller.

Creates the network hosts and controller with the specified number of qubits and classical bits.

Parameters
qubitsThe number of qubits for each host.
cbitsThe number of classical bits for each host.

Definition at line 71 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller, and Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ CreateScheduler()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::CreateScheduler ( SchedulerType  schType = SchedulerType::kNoEntanglementQubitsParallel)
inlineoverridevirtual

Create the scheduler for the network.

Creates the scheduler for the network. Call this only after the network topology has been set up. Should create the scheduler and set the network for it and any other necessary parameters.

Parameters
simTypeThe type of the scheduler to create.
See also
SchedulerType

Implements Network::INetwork< Time >.

Definition at line 1023 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller, and Network::INetwork< Time >::getptr().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteScheduled().

◆ CreateSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator ( Simulators::SimulatorType  simType = Simulators::SimulatorType::kQCSim,
Simulators::SimulationType  simExecType = Simulators::SimulationType::kMatrixProductState,
size_t  nrQubits = 0 
)
inlineoverridevirtual

Create the simulator for the network.

Creates the simulator for the network. Call this only after the network topology has been set up. Should create the simulator with the proper number of qubits for the whole network and also set up a 'classical state' for the whole network and distribute the qubits and cbits to the hosts. The nrQubits parameter is used internally to allocate a simulator for a single host only - if a circuit is executed on a single host. Let it to the default value - 0 - to allocate the number of qubits for the whole network.

Parameters
simTypeThe type of the simulator to create.
simExecTypeThe type of the simulation - statevector, composite, matrix product state, stabilizer, tensor network...
nrQubitsThe number of qubits to allocate for the simulator. Default is 0 - allocate the number of qubits for the whole network.
See also
Simulators::SimulatorType

Implements Network::INetwork< Time >.

Definition at line 933 of file SimpleDisconnectedNetwork.h.

References Circuits::OperationState::AllocateBits(), Network::SimpleDisconnectedNetwork< Time, Controller >::classicalState, Circuits::OperationState::Clear(), Simulators::SimulatorsFactory::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::maxBondDim, Network::SimpleDisconnectedNetwork< Time, Controller >::mpsSample, Network::SimpleDisconnectedNetwork< Time, Controller >::simulator, Network::SimpleDisconnectedNetwork< Time, Controller >::singularValueThreshold, and Network::SimpleDisconnectedNetwork< Time, Controller >::useDoublePrecision.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Execute(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteExpectations(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostAmplitudes(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostExpectations(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostProjectOnZero(), Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ Execute()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::Execute ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit)
inlineoverridevirtual

Execute the circuit on the network.

Execute the circuit on the network, using the controller for distributing the operations to the hosts. Ensure the quantum computing simulator has been created before calling this.

Parameters
circuitThe circuit to execute.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 107 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteExpectations()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< double > Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteExpectations ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
const std::vector< std::string > &  paulis 
)
inlineoverridevirtual

Execute the circuit on the network and return the expectation values for the specified Pauli strings.

Execute the circuit on the network, using the controller for distributing the operations to the hosts and return the expectation values for the specified Pauli strings. The base class functionality is used for circuit distribution, but then the distributed circuit is converted to netqasm. Ensure the quantum computing simulator and the netqasm virtual machines have been created before calling this.

Parameters
circuitThe circuit to execute.
paulisThe Pauli strings to measure the expectations for.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 200 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller, Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteOnHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHost ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId 
)
inlineoverridevirtual

Execute the circuit on the specified host.

Execute the circuit on the specified host. The circuit must fit on the host, otherwise an exception is thrown. The circuit will be mapped on the specified host, if its qubits start with indexing from 0 (if already mapped, the qubits won't be altered).

Parameters
circuitThe circuit to execute.
hostIdThe id of the host to execute the circuit on.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 152 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteOnHostAmplitudes()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< std::complex< double > > Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostAmplitudes ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId 
)
inlineoverridevirtual

Execute circuit on host and return full statevector amplitudes.

Execute the circuit on the specified host and return the complex amplitudes of the resulting quantum state (one per basis state 0..2^n-1). Supported for Statevector and MPS simulation types.

Parameters
circuitThe circuit to execute.
hostIdThe id of the host to execute the circuit on.
Returns
A vector of complex<double> amplitudes of length 2^n.

Implements Network::INetwork< Time >.

Definition at line 372 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteOnHostExpectations()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< double > Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostExpectations ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId,
const std::vector< std::string > &  paulis 
)
inlineoverridevirtual

Execute the circuit on the specified host and return the expectation values for the specified Pauli strings.

Execute the circuit on the specified host and return the expectation values for the specified Pauli strings. The circuit must fit on the host, otherwise an exception is thrown. The circuit will be mapped on the specified host, if its qubits start with indexing from 0 (if already mapped, the qubits won't be altered).

Parameters
circuitThe circuit to execute.
hostIdThe id of the host to execute the circuit on.
paulisThe Pauli strings to measure the expectations for.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 280 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteOnHostProjectOnZero()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::complex< double > Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostProjectOnZero ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId 
)
inlineoverridevirtual

Execute circuit on host and return the projection onto the zero state.

Execute the circuit on the specified host and return <0|Psi>, the inner product of the resulting quantum state with the all-zeros basis state. This is equivalent to Amplitude(0) but can be faster for certain simulator back-ends (e.g. MPS).

Parameters
circuitThe circuit to execute.
hostIdThe id of the host to execute the circuit on.
Returns
The complex amplitude <0|Psi>.

Implements Network::INetwork< Time >.

Definition at line 463 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kMatrixProductState, Simulators::kQCSim, Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost(), Circuits::OperationState::SetResultsInOrder(), and Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

◆ ExecuteScheduled()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< ExecuteResults > Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteScheduled ( const std::vector< Schedulers::ExecuteCircuit< Time > > &  circuits)
inlineoverridevirtual

Schedule and execute circuits on the network.

Execute the circuits on the network, scheduling their execution and distributing the operations to the hosts. The way the circuits are distributed to the hosts depends on the specific interface implementations. The way they are scheduled depends on the network scheduler and parametrization.

Parameters
circuitsThe circuits to execute, along with the number of shots.
Returns
A vector of maps with the results of each circuit execution, where the key is the state as a vector of bools and the value is the number of times it was measured.
See also
Circuits::Circuit
ExecuteCircuit

Implements Network::INetwork< Time >.

Definition at line 902 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::CreateScheduler(), and Network::SimpleDisconnectedNetwork< Time, Controller >::GetScheduler().

◆ ExpectsClassicalBitFromOtherHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::ExpectsClassicalBitFromOtherHost ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Checks if a gate expects a classical bit from another host.

It must be a conditional gate, conditioned on a classical bit from another host. Use it on already distributed gates, not on the original circuit.

Parameters
opThe operation to check.
Returns
True if the specified circuit operation needs a classical bit from another host, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1341 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForAnyQubit(), and Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalBit().

◆ GetClassicalBitsIds()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< size_t > Network::SimpleDisconnectedNetwork< Time, Controller >::GetClassicalBitsIds ( size_t  hostId) const
inlineoverridevirtual

Get the classical bit ids for the specified host.

Get the classical bit ids for the specified host, excluding the one(s) used for measurement of entanglemen qubits between the hosts.

Parameters
hostIdThe id of the host to get the classical bit ids for.
Returns
A vector with the classical bit ids.

Implements Network::INetwork< Time >.

Definition at line 1569 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetController()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
const std::shared_ptr< IController< Time > > Network::SimpleDisconnectedNetwork< Time, Controller >::GetController ( ) const
inlineoverridevirtual

Get the controller for the network.

Gets a smart pointer to the controller for the network.

Returns
The controller for the network.
See also
IController

Implements Network::INetwork< Time >.

Definition at line 1068 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ GetDistributedCircuit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr< Circuits::Circuit< Time > > Network::SimpleDisconnectedNetwork< Time, Controller >::GetDistributedCircuit ( ) const
inlineoverridevirtual

Get the distributed circuit.

Get the distributed circuit. Execute() must be called first, otherwise the return would be nullptr.

Returns
The distributed circuit.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 1697 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::distCirc.

◆ GetEntangledQubitMeasurementBitIds()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< size_t > Network::SimpleDisconnectedNetwork< Time, Controller >::GetEntangledQubitMeasurementBitIds ( size_t  hostId) const
inlineoverridevirtual

Get the classical bit ids used for measurement of entanglement qubits between the hosts for the specified host.

Get the classical bit ids used for measurement of entanglement qubits between the hosts for the specified host.

Parameters
hostIdThe id of the host to get the classical bit ids for.
Returns
A vector with the classical bit ids.

Implements Network::INetwork< Time >.

Definition at line 1585 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
const std::shared_ptr< IHost< Time > > Network::SimpleDisconnectedNetwork< Time, Controller >::GetHost ( size_t  hostId) const
inlineoverridevirtual

Get the host with the specified id.

Get a smart pointer to the host that has the specified id.

Parameters
hostIdThe id of the host to get.
Returns
A smart pointer to the host that has the specified id.
See also
IHost

Implements Network::INetwork< Time >.

Definition at line 1054 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::MapCircuitOnHost().

◆ GetHostIdForAnyQubit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForAnyQubit ( size_t  qubitId) const
inlineoverridevirtual

Get the host id for the specified qubit.

Get the host id for the squbit, including the qubits used for entanglement between hosts.

Parameters
qubitIdThe id of the qubit to get the host id for.
Returns
The host id for the specified qubit.

Implements Network::INetwork< Time >.

Definition at line 1506 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForEntangledQubit(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForQubit(), and Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ExpectsClassicalBitFromOtherHost().

◆ GetHostIdForClassicalBit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalBit ( size_t  classicalBitId) const
inlineoverridevirtual

Get the host id for the specified classical bit.

Get the host id for the specified classical bit, excluding the one(s) used for measurement of entanglement qubits between the hosts.

Parameters
classicalBitIdThe id of the classical bit to get the host id for.
Returns
The host id for the specified classical bit.

Implements Network::INetwork< Time >.

Definition at line 1522 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ExpectsClassicalBitFromOtherHost(), and Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalControl().

◆ GetHostIdForClassicalControl()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalControl ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Get the host id where the classical control bit resides for a conditioned gate.

It must be a conditional gate, conditioned on a qubit from another host. Use it on already distributed gates, not on the original circuit.

Parameters
opThe operation to find the host of the control bit.
Returns
The host id.

Implements Network::INetwork< Time >.

Definition at line 1377 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalBit().

◆ GetHostIdForEntangledQubit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForEntangledQubit ( size_t  qubitId) const
inlineoverridevirtual

Get the host id for the specified qubit used for entanglement between hosts.

Get the host id for the specified qubit used for entanglement between hosts.

Parameters
qubitIdThe id of the qubit used for entanglement between hosts to get the host id for.
Returns
The host id for the specified qubit used for entanglement between hosts.

Implements Network::INetwork< Time >.

Definition at line 1490 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForAnyQubit().

◆ GetHostIdForQubit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForQubit ( size_t  qubitId) const
inlineoverridevirtual

Get the host id for the specified qubit.

Get the host id for the specified qubit, excluding the qubits used for entanglement between hosts.

Parameters
qubitIdThe id of the qubit to get the host id for.
Returns
The host id for the specified qubit.

Implements Network::INetwork< Time >.

Definition at line 1471 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForAnyQubit().

◆ GetHosts()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< std::shared_ptr< IHost< Time > > > & Network::SimpleDisconnectedNetwork< Time, Controller >::GetHosts ( )
inline

Get the hosts in the network.

Gets the hosts in the network.

Returns
A vector with the hosts in the network.
See also
IHost
SimpleHost

Definition at line 1188 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetInitialQubitsMapOptimization()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::GetInitialQubitsMapOptimization ( ) const
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2062 of file SimpleDisconnectedNetwork.h.

◆ GetLastSimulationType()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Simulators::SimulationType Network::SimpleDisconnectedNetwork< Time, Controller >::GetLastSimulationType ( ) const
inlineoverridevirtual

Get the last used simulation type.

Get the last used simulation type.

Returns
The simulation type that was used last time.

Implements Network::INetwork< Time >.

Definition at line 1720 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::lastMethod.

◆ GetLastSimulatorType()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Simulators::SimulatorType Network::SimpleDisconnectedNetwork< Time, Controller >::GetLastSimulatorType ( ) const
inlineoverridevirtual

Get the last used simulator type.

Get the last used simulator type.

Returns
The simulator type that was used last time.

Implements Network::INetwork< Time >.

Definition at line 1709 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::lastSimulatorType.

◆ GetMaxSimulators()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetMaxSimulators ( ) const
inlineoverridevirtual

Get the maximum number of simulators that can be used in the network.

Get the maximum number of simulators that can be used in the network. This is used to limit the number of simulators (and corresponding threads) that can be used in the network.

Returns
The maximum number of simulators that can be used in the network.

Implements Network::INetwork< Time >.

Definition at line 1734 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::maxSimulators.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ GetMPSOptimizationBondDimensionThreshold()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetMPSOptimizationBondDimensionThreshold ( ) const
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2070 of file SimpleDisconnectedNetwork.h.

◆ GetMPSOptimizationQubitsNumberThreshold()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetMPSOptimizationQubitsNumberThreshold ( ) const
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2078 of file SimpleDisconnectedNetwork.h.

◆ GetNetworkEntangledQubitsIds()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< size_t > Network::SimpleDisconnectedNetwork< Time, Controller >::GetNetworkEntangledQubitsIds ( size_t  hostId) const
inlineoverridevirtual

Get the qubit ids used for entanglement between hosts for the specified host.

Get the qubit ids used for entanglement between hosts for the specified host.

Parameters
hostIdThe id of the host to get the qubit ids for.
Returns
A vector with the qubit ids.

Implements Network::INetwork< Time >.

Definition at line 1553 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetNumberOfGatesDistributedOrCut()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumberOfGatesDistributedOrCut ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit) const
inlineoverridevirtual

Get the number of gates that span more than one host.

Get the number of gates that span more than one host for the given circuit.

Parameters
circuitThe circuit to check.
Returns
The number of gates that need distribution or cutting.

Implements Network::INetwork< Time >.

Definition at line 874 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::IsLocalOperation().

◆ GetNumClassicalBits()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBits ( ) const
inlineoverridevirtual

Get the number of classical bits in the network.

Get the number of classical bits in the network, excluding the classical bits used for measurement of entanglement qubits between the hosts.

Returns
The number of classical bits in the network.

Implements Network::INetwork< Time >.

Definition at line 1154 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults(), Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute().

◆ GetNumClassicalBitsForHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBitsForHost ( size_t  hostId) const
inlineoverridevirtual

Get the number of classical bits in the network for the specified host.

Get the number of classical bits in the network for the specified host, excluding the classical bits used for measurement of entanglement qubits between the hosts.

Parameters
hostIdThe id of the host to get the number of classical bits for.
Returns
The number of classical bits in the network for the specified host.

Implements Network::INetwork< Time >.

Definition at line 1173 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Clone().

◆ GetNumHosts()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumHosts ( ) const
inlineoverridevirtual

Get the number of hosts in the network.

Get the number of hosts in the network, excluding the controller.

Returns
The number of hosts in the network.

Implements Network::INetwork< Time >.

Definition at line 1079 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Clone(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ GetNumNetworkEntangledQubits()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubits ( ) const
inlineoverridevirtual

Get the number of qubits used for entanglement between hosts.

Get the number of qubits used for entanglement between hosts in the network. For the simple network it's one qubit per host.

Returns
The number of qubits used for entanglement between hosts.

Implements Network::INetwork< Time >.

Definition at line 1120 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute().

◆ GetNumNetworkEntangledQubitsForHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubitsForHost ( size_t  hostId) const
inlineoverridevirtual

Get the number of qubits used for entanglement between hosts for the specified host.

Get the number of qubits used for entanglement between hosts in the network for the specified host. For the simple network it's a single qubit.

Parameters
hostIdThe id of the host to get the number of qubits used for entanglement between hosts for.
Returns
The number of qubits used for entanglement between hosts for the specified host.

Implements Network::INetwork< Time >.

Definition at line 1140 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetNumQubits()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubits ( ) const
inlineoverridevirtual

Get the number of qubits in the network.

Get the number of qubits in the network, excluding the qubits used for entanglement between the hosts.

Returns
The number of qubits in the network.

Implements Network::INetwork< Time >.

Definition at line 1089 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute().

◆ GetNumQubitsForHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubitsForHost ( size_t  hostId) const
inlineoverridevirtual

Get the number of qubits in the network for the specified host.

Get the number of qubits in the network for the specified host, excluding the qubits used for entanglement between the hosts.

Parameters
hostIdThe id of the host to get the number of qubits for.
Returns
The number of qubits in the network for the specified host.

Implements Network::INetwork< Time >.

Definition at line 1106 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Clone().

◆ GetOptimizeSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::GetOptimizeSimulator ( ) const
inlineoverridevirtual

◆ getptr()

template<typename Time = Types::time_type>
std::shared_ptr< INetwork< Time > > Network::INetwork< Time >::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 772 of file Network.h.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::CreateScheduler(), and Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute().

◆ GetQubitsIds()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector< size_t > Network::SimpleDisconnectedNetwork< Time, Controller >::GetQubitsIds ( size_t  hostId) const
inlineoverridevirtual

Get the qubit ids for the specified host.

Get the qubit ids for the specified host.

Parameters
hostIdThe id of the host to get the qubit ids for.
Returns
A vector with the qubit ids.

Implements Network::INetwork< Time >.

Definition at line 1537 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::hosts.

◆ GetScheduler()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr< Schedulers::IScheduler< Time > > Network::SimpleDisconnectedNetwork< Time, Controller >::GetScheduler ( ) const
inlineoverridevirtual

Get the scheduler for the network.

Get the scheduler for the network.

Returns
The scheduler for the network.
See also
Schedulers::IScheduler

Implements Network::INetwork< Time >.

Definition at line 1039 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteScheduled().

◆ GetSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr< Simulators::ISimulator > Network::SimpleDisconnectedNetwork< Time, Controller >::GetSimulator ( ) const
inlineoverridevirtual

Get the simulator for the network.

Get the simulator for the network.

Returns
The simulator for the network.
See also
Simulators::ISimulator

Implements Network::INetwork< Time >.

Definition at line 998 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulator.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Clone().

◆ GetSimulatorsSet()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
const BaseClass::SimulatorsSet & Network::SimpleDisconnectedNetwork< Time, Controller >::GetSimulatorsSet ( ) const
inlineoverridevirtual

Get the optimizations simulators set.

Get the optimization simulators set. To be used internally, will not be exposed from the library.

Returns
The simulators set.

Implements Network::INetwork< Time >.

Definition at line 1786 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations.

◆ GetState()

◆ GetSubroutinesTextCode()

template<typename Time = Types::time_type>
virtual std::vector< std::vector< std::string > > Network::INetwork< Time >::GetSubroutinesTextCode ( ) const
inlinevirtualinherited

Get the text code that is executed on the hosts.

Get the text code that is executed on the hosts, if available. The circuit might be converted to code to be executed (example: netqasm). If that's the case, the text code is returned in an array, each element of the array being the code for a host. Each host might have multiple subroutines, so each element of the array is an array of strings, each string being a subroutine.

Returns
The text code that is executed on the hosts.

Definition at line 940 of file Network.h.

◆ GetType()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
NetworkType Network::SimpleDisconnectedNetwork< Time, Controller >::GetType ( ) const
inlineoverridevirtual

Get the type of the network.

Get the type of the network.

Returns
The type of the network.
See also
NetworkType

Implements Network::INetwork< Time >.

Definition at line 1226 of file SimpleDisconnectedNetwork.h.

References Network::kSimpleDisconnectedNetwork.

◆ IsDistributedOperation()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::IsDistributedOperation ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Check if the circuit operation is distributed.

Check if the specified circuit operation is distributed. A distributed operation is an operation that is executed on multiple hosts. This does not include the operations that also operate on the entanglement qubits between hosts.

Parameters
opThe operation to check.
Returns
True if the specified circuit operation is distributed, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1266 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitsOnSameHost(), and Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit().

◆ IsEntanglementQubitBusy()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::IsEntanglementQubitBusy ( size_t  qubitId) const
inlineoverridevirtual

Check if the specified qubit used for entanglement between hosts is busy.

Check if the specified qubit used for entanglement between hosts is busy. It's not used in the simple network, because it doesn't allow quantum communication between hosts.

Parameters
qubitIdThe id of the qubit to check.
Returns
True if the specified qubit used for entanglement between hosts is busy, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1619 of file SimpleDisconnectedNetwork.h.

◆ IsEntanglingGate()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::IsEntanglingGate ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Checks if a gate is an entangling gate.

An entangling gate is a gate that operates on two qubits that are used for entanglement between hosts.

Parameters
opThe operation to check.
Returns
True if the specified circuit operation is an entangling gate, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1321 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit(), and Circuits::kGate.

◆ IsLocalOperation()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::IsLocalOperation ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Check if the circuit operation is local.

Check if the specified circuit operation is local. A local operation is an operation that is executed on a single host. This does not include the operations that also operate on the entanglement qubits between hosts.

Parameters
opThe operation to check.
Returns
True if the specified circuit operation is local, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1240 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitsOnSameHost().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumberOfGatesDistributedOrCut().

◆ IsNetworkEntangledQubit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit ( size_t  qubitId) const
inlineoverridevirtual

Check if the specified qubit id is for a qubit used for entanglement between hosts.

Check if the specified qubit id is for a qubit used for entanglement between hosts.

Parameters
qubitIdThe id of the qubit to check.
Returns
True if the specified qubit id is for a qubit used for entanglement between hosts, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1603 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubits().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForAnyQubit(), Network::SimpleDisconnectedNetwork< Time, Controller >::IsDistributedOperation(), Network::SimpleDisconnectedNetwork< Time, Controller >::IsEntanglingGate(), and Network::SimpleDisconnectedNetwork< Time, Controller >::OperatesWithNetworkEntangledQubit().

◆ MapCircuitOnHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::unordered_map< Types::qubit_t, Types::qubit_t > Network::SimpleDisconnectedNetwork< Time, Controller >::MapCircuitOnHost ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId,
size_t &  nrQubits,
size_t &  nrCbits,
bool  useSeparateSimForHosts = false 
)
inlineprotected

Map the circuit on the host.

Map the circuit on the host. It's used only if there is an execution on a single host and the passed circuit had a different mapping for qubits than the host qubits.

Parameters
circuitThe circuit to map.
hostIdThe id of the host to map the circuit on.
Returns
The reverse qubits/cbits map.

Definition at line 2184 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::distCirc, and Network::SimpleDisconnectedNetwork< Time, Controller >::GetHost().

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost().

◆ MarkEntangledQubitFree()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::MarkEntangledQubitFree ( size_t  qubitId)
inlineoverridevirtual

Mark the specified qubit used for entanglement between hosts as free.

Mark the specified qubit used for entanglement between hosts as free. This is used to mark the qubits as free when they are not used anymore for an entanglement between hosts. It's not used in the simple network, because it doesn't allow quantum communication between hosts.

Parameters
qubitIdThe id of the qubit to mark as free.

Implements Network::INetwork< Time >.

Definition at line 1669 of file SimpleDisconnectedNetwork.h.

◆ MarkEntangledQubitsBusy()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::MarkEntangledQubitsBusy ( size_t  qubitId1,
size_t  qubitId2 
)
inlineoverridevirtual

Mark the pair of the specified qubits used for entanglement between hosts as busy.

Mark the pair of the specified qubits used for entanglement between hosts as busy. This is used to mark the qubits as busy when they are used for creating an entanglement between hosts. It's not used in the simple network, because it doesn't allow quantum communication between hosts.

Parameters
qubitId1The id of the first qubit to mark as busy.
qubitId2The id of the second qubit to mark as busy.

Implements Network::INetwork< Time >.

Definition at line 1653 of file SimpleDisconnectedNetwork.h.

◆ OperatesWithNetworkEntangledQubit()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::OperatesWithNetworkEntangledQubit ( const std::shared_ptr< Circuits::IOperation< Time > > &  op) const
inlineoverridevirtual

Check if the circuit operation operates on the entanglement qubits between hosts.

Check if the specified circuit operation operates on the entanglement qubits between hosts.

Parameters
opThe operation to check.
Returns
True if the specified circuit operation operates on the entanglement qubits between hosts, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1300 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::IsNetworkEntangledQubit().

◆ OptimizationSimulatorExists()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::OptimizationSimulatorExists ( Simulators::SimulatorType  type,
Simulators::SimulationType  kind 
) const
inlineoverridevirtual

Checks if a simulator exists in the optimization set.

Checks if a simulator exists in the optimization set.

Parameters
typeThe type of the simulator to check.
kindThe kind of the simulation to check.
Returns
True if the simulator exists in the optimization set, false otherwise.

Implements Network::INetwork< Time >.

Definition at line 1844 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator().

◆ RemoveAllOptimizationSimulatorsAndAdd()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::RemoveAllOptimizationSimulatorsAndAdd ( Simulators::SimulatorType  type,
Simulators::SimulationType  kind 
)
inlineoverridevirtual

Removes all simulators from the simulators optimization set and adds the one specified.

Removes all simulators from the simulators optimization set and adds the one specified.

Parameters
typeThe type of the simulator to add.
kindThe kind of the simulation to add.

Implements Network::INetwork< Time >.

Definition at line 1827 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations.

◆ RemoveOptimizationSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::RemoveOptimizationSimulator ( Simulators::SimulatorType  type,
Simulators::SimulationType  kind 
)
inlineoverridevirtual

Removes a simulator from the simulators optimization set.

Removes a simulator from the simulators optimization set, if it exists.

Parameters
typeThe type of the simulator to remove.
kindThe kind of the simulation to remove.

Implements Network::INetwork< Time >.

Definition at line 1812 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations.

◆ RepeatedExecute()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
ExecuteResults Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecute ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  shots = 1000 
)
inlineoverridevirtual

Execute the circuit on the network, repeatedly.

Execute the circuit on the network, distributing the operations to the hosts, repeating the execution 'shots' times. The way the circuit is distributed to the hosts depends on the specific interface implementations.

Parameters
circuitThe circuit to execute.
shotsThe number of times to repeat the execution.
Returns
A map with the results of the execution, where the key is the qubit id and the value is the number of times the qubit was measured to be 1.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 519 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator(), Circuits::OperationState::Clear(), Network::SimpleDisconnectedNetwork< Time, Controller >::controller, Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults(), Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::distCirc, Network::SimpleDisconnectedNetwork< Time, Controller >::GetMaxSimulators(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetOptimizeSimulator(), Network::INetwork< Time >::getptr(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kCompositeQCSim, Simulators::kCompositeQiskitAer, Simulators::kGpuSim, Simulators::kQCSim, Simulators::kQiskitAer, Simulators::kQuestSim, Simulators::kStabilizer, Simulators::kStatevector, Network::SimpleDisconnectedNetwork< Time, Controller >::lastMethod, Network::SimpleDisconnectedNetwork< Time, Controller >::lastSimulatorType, Network::SimpleDisconnectedNetwork< Time, Controller >::maxBondDim, Network::SimpleDisconnectedNetwork< Time, Controller >::mpsSample, Network::SimpleDisconnectedNetwork< Time, Controller >::optimizeSimulator, Network::SimpleDisconnectedNetwork< Time, Controller >::simulator, Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsEstimator, and Network::SimpleDisconnectedNetwork< Time, Controller >::singularValueThreshold.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Execute(), and Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteExpectations().

◆ RepeatedExecuteCircuit()

template<typename Time = Types::time_type>
ExecuteResults Network::INetwork< Time >::RepeatedExecuteCircuit ( const Schedulers::ExecuteCircuit< Time > &  executeCircuit)
inlineinherited

Execute the circuit on the network, repeatedly.

Execute the circuit on the network, distributing the operations to the hosts, repeating the execution 'shots' times. The way the circuit is distributed to the hosts depends on the specific interface implementations.

Parameters
executeCircuitThe circuit to execute, together with the number of shots.
Returns
A vector of maps with the results of each circuit execution, where the key is the state as a vector of bools and the value is the number of times it was measured.
See also
Circuits::Circuit
ExecuteCircuit

Definition at line 223 of file Network.h.

References Schedulers::ExecuteCircuit< Time >::circuit, Network::INetwork< Time >::RepeatedExecute(), and Schedulers::ExecuteCircuit< Time >::shots.

◆ RepeatedExecuteCircuitOnHost()

template<typename Time = Types::time_type>
ExecuteResults Network::INetwork< Time >::RepeatedExecuteCircuitOnHost ( const Schedulers::ExecuteCircuit< Time > &  executeCircuit,
size_t  hostId 
)
inlineinherited

Execute the circuit on the specified host, repeatedly.

Execute the circuit on the specified host, repeating the execution 'shots' times. The circuit must fit on the host, otherwise an exception is thrown. The circuit will be mapped on the specified host, if its qubits start with indexing from 0 (if already mapped, the qubits won't be altered).

Parameters
executeCircuitThe circuit to execute, together with the number of shots.
hostIdThe id of the host to execute the circuit on.
Returns
A vector of maps with the results of each circuit execution, where the key is the state as a vector of bools and the value is the number of times it was measured.
See also
Circuits::Circuit
ExecuteCircuit

Definition at line 265 of file Network.h.

References Schedulers::ExecuteCircuit< Time >::circuit, Network::INetwork< Time >::RepeatedExecuteOnHost(), and Schedulers::ExecuteCircuit< Time >::shots.

◆ RepeatedExecuteOnHost()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
ExecuteResults Network::SimpleDisconnectedNetwork< Time, Controller >::RepeatedExecuteOnHost ( const std::shared_ptr< Circuits::Circuit< Time > > &  circuit,
size_t  hostId,
size_t  shots = 1000 
)
inlineoverridevirtual

Execute the circuit on the specified host, repeatedly.

Execute the circuit on the specified host, repeating the execution 'shots' times. The circuit must fit on the host, otherwise an exception is thrown. The circuit will be mapped on the specified host, if its qubits start with indexing from 0 (if already mapped, the qubits won't be altered).

Parameters
circuitThe circuit to execute.
hostIdThe id of the host to execute the circuit on.
shotsThe number of times to repeat the execution.
Returns
A map with the results of the execution, where the key is the qubit id and the value is the number of times the qubit was measured to be 1.
See also
Circuits::Circuit

Implements Network::INetwork< Time >.

Definition at line 711 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator(), Circuits::OperationState::Clear(), Network::SimpleDisconnectedNetwork< Time, Controller >::ConvertBackResults(), Network::SimpleDisconnectedNetwork< Time, Controller >::CreateSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::distCirc, Network::SimpleDisconnectedNetwork< Time, Controller >::GetController(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetMaxSimulators(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumHosts(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetOptimizeSimulator(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetState(), Simulators::kCompositeQCSim, Simulators::kCompositeQiskitAer, Simulators::kGpuSim, Simulators::kQCSim, Simulators::kQiskitAer, Simulators::kQuestSim, Simulators::kStabilizer, Simulators::kStatevector, Network::SimpleDisconnectedNetwork< Time, Controller >::lastMethod, Network::SimpleDisconnectedNetwork< Time, Controller >::lastSimulatorType, Network::SimpleDisconnectedNetwork< Time, Controller >::MapCircuitOnHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::maxBondDim, Network::SimpleDisconnectedNetwork< Time, Controller >::mpsSample, Network::SimpleDisconnectedNetwork< Time, Controller >::simulator, and Network::SimpleDisconnectedNetwork< Time, Controller >::singularValueThreshold.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostAmplitudes(), Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostExpectations(), and Network::SimpleDisconnectedNetwork< Time, Controller >::ExecuteOnHostProjectOnZero().

◆ SendPacket()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::SendPacket ( size_t  fromHostId,
size_t  toHostId,
const std::vector< uint8_t > &  packet 
)
inlineoverridevirtual

Sends a packet between two hosts.

Sends a packet between the two specified hosts. It's not used in the simple network, because sending/receiving the classical information is done using a shared classical state for the simulator.

Parameters
fromHostIdThe id of the host to send the packet from.
toHostIdThe id of the host to send the packet to.
packetThe packet to send.
Returns
False.

Implements Network::INetwork< Time >.

Definition at line 1214 of file SimpleDisconnectedNetwork.h.

◆ SetController()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetController ( const std::shared_ptr< IController< Time > > &  cntrl)
inline

Set the network controller host.

Sets the network controller host.

Parameters
[in]cntrlThe controller host.
See also
IController

Definition at line 1197 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::controller.

◆ SetInitialQubitsMapOptimization()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetInitialQubitsMapOptimization ( bool  optimize = true)
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2058 of file SimpleDisconnectedNetwork.h.

◆ SetMaxSimulators()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetMaxSimulators ( size_t  val)
inlineoverridevirtual

Set the maximum number of simulators that can be used in the network.

Set the maximum number of simulators that can be used in the network. This is used to limit the number of simulators (and corresponding threads) that can be used in the network.

Parameters
maxSimulatorsThe maximum number of simulators that can be used in the network.

Implements Network::INetwork< Time >.

Definition at line 1747 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::maxSimulators.

◆ SetMPSOptimizationBondDimensionThreshold()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetMPSOptimizationBondDimensionThreshold ( size_t  threshold)
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2066 of file SimpleDisconnectedNetwork.h.

◆ SetMPSOptimizationQubitsNumberThreshold()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetMPSOptimizationQubitsNumberThreshold ( size_t  threshold)
inlineoverridevirtual

Implements Network::INetwork< Time >.

Definition at line 2074 of file SimpleDisconnectedNetwork.h.

◆ SetOptimizeSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
void Network::SimpleDisconnectedNetwork< Time, Controller >::SetOptimizeSimulator ( bool  optimize = true)
inlineoverridevirtual

Allows using an optimized simulator.

If set, allows changing the simulator with an optimized one. States/amplitudes are not available in such a case, disable if you need them.

Parameters
optimizeIf true, the simulator will be optimized if possible.

Implements Network::INetwork< Time >.

Definition at line 1765 of file SimpleDisconnectedNetwork.h.

References Network::SimpleDisconnectedNetwork< Time, Controller >::optimizeSimulator.

Member Data Documentation

◆ classicalState

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Circuits::OperationState Network::SimpleDisconnectedNetwork< Time, Controller >::classicalState
protected

◆ controller

◆ distCirc

◆ hosts

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::vector<std::shared_ptr<IHost<Time> > > Network::SimpleDisconnectedNetwork< Time, Controller >::hosts
protected

The hosts in the network.

Definition at line 2296 of file SimpleDisconnectedNetwork.h.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::AreClassicalBitsOnSameHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitAndClassicalBitOnSameHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::AreQubitsOnSameHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::CreateNetwork(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetClassicalBitsIds(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetEntangledQubitMeasurementBitIds(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForClassicalBit(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForEntangledQubit(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHostIdForQubit(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetHosts(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNetworkEntangledQubitsIds(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumClassicalBitsForHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumHosts(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumNetworkEntangledQubitsForHost(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubits(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetNumQubitsForHost(), and Network::SimpleDisconnectedNetwork< Time, Controller >::GetQubitsIds().

◆ lastMethod

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Simulators::SimulationType Network::SimpleDisconnectedNetwork< Time, Controller >::lastMethod
protected

◆ lastSimulatorType

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Simulators::SimulatorType Network::SimpleDisconnectedNetwork< Time, Controller >::lastSimulatorType
protected

◆ maxBondDim

◆ maxSimulators

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
size_t Network::SimpleDisconnectedNetwork< Time, Controller >::maxSimulators
protected
Initial value:
= QC::QubitRegisterCalculator<>::
GetNumberOfThreads()

The maximum number of simulators that can be used in the network.

Definition at line 2278 of file SimpleDisconnectedNetwork.h.

Referenced by Network::SimpleDisconnectedNetwork< Time, Controller >::Configure(), Network::SimpleDisconnectedNetwork< Time, Controller >::GetMaxSimulators(), and Network::SimpleDisconnectedNetwork< Time, Controller >::SetMaxSimulators().

◆ mpsSample

◆ optimizeSimulator

◆ simulator

◆ simulatorsEstimator

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::unique_ptr<Estimators::SimulatorsEstimatorInterface<Time> > Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsEstimator
protected

◆ simulatorsForOptimizations

◆ singularValueThreshold

◆ useDoublePrecision

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
bool Network::SimpleDisconnectedNetwork< Time, Controller >::useDoublePrecision = false
protected

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