Maestro 0.1.0
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 >:
Network::INetwork< Types::time_type >

Public Types

using BaseClass = INetwork<Time>
 The base class type.
using ExecuteResults
 The execute results type.
Public Types inherited from Network::INetwork< Types::time_type >
using ExecuteResults
using SimulatorPair
using SimulatorsSet

Public Member Functions

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

Protected Member Functions

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.
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.
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

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

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
Initial value:
typename Circuits::Circuit< Time >::ExecuteResults ExecuteResults
Definition Network.h:58

The execute results type.

Definition at line 45 of file SimpleDisconnectedNetwork.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< Types::time_type >.

Definition at line 1669 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1286 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1506 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< Types::time_type >.

Definition at line 1310 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1263 of file SimpleDisconnectedNetwork.h.

◆ ChooseBestSimulator()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr< Simulators::ISimulator > Network::SimpleDisconnectedNetwork< Time, Controller >::ChooseBestSimulator ( const 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
inlineoverride

Definition at line 1760 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1553 of file SimpleDisconnectedNetwork.h.

◆ Clone()

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

Clone the network.

Clone the network in a pristine state.

Returns
A shared pointer to the cloned network.

Implements Network::INetwork< Types::time_type >.

Definition at line 1730 of file SimpleDisconnectedNetwork.h.

◆ Configure()

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

Configures the network.

This function is called to configure the network (for example the simulator(s) used by the network.

Parameters
keyThe key of the configuration option.
valueThe value of the configuration.

Implements Network::INetwork< Types::time_type >.

Definition at line 818 of file SimpleDisconnectedNetwork.h.

◆ 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 1955 of file SimpleDisconnectedNetwork.h.

◆ 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 1977 of file SimpleDisconnectedNetwork.h.

◆ 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 1916 of file SimpleDisconnectedNetwork.h.

◆ 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 1937 of file SimpleDisconnectedNetwork.h.

◆ 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 72 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 869 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 780 of file SimpleDisconnectedNetwork.h.

◆ 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)
inlineoverride

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

Definition at line 109 of file SimpleDisconnectedNetwork.h.

◆ 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 )
inlineoverride

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

Definition at line 202 of file SimpleDisconnectedNetwork.h.

◆ 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 )
inlineoverride

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

Definition at line 153 of file SimpleDisconnectedNetwork.h.

◆ 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 )
inline

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

Definition at line 281 of file SimpleDisconnectedNetwork.h.

◆ 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)
inlineoverride

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

Definition at line 748 of file SimpleDisconnectedNetwork.h.

◆ 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
inlineoverride

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.

Definition at line 1202 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1437 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 916 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1568 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1455 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 901 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1371 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1387 of file SimpleDisconnectedNetwork.h.

◆ 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
inlineoverride

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.

Definition at line 1240 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1354 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1334 of file SimpleDisconnectedNetwork.h.

◆ 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 1042 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< Types::time_type >.

Definition at line 1590 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1579 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1604 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< Types::time_type >.

Definition at line 1421 of file SimpleDisconnectedNetwork.h.

◆ 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
inlineoverride

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.

Definition at line 718 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1006 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1026 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 927 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 970 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 991 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 937 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 955 of file SimpleDisconnectedNetwork.h.

◆ GetOptimizeSimulator()

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

Returns the 'optimize' flag.

Returns the flag set by SetOptimizeSimulator().

Returns
The 'optimize' flag.

Implements Network::INetwork< Types::time_type >.

Definition at line 1646 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1403 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 885 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 843 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1656 of file SimpleDisconnectedNetwork.h.

◆ GetState()

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
Circuits::OperationState & Network::SimpleDisconnectedNetwork< Time, Controller >::GetState ( )
inlineoverridevirtual

Get the classical state of the network.

Gets a reference to the classical state of the network.

Returns
The classical state of the network.
See also
Circuits::ClassicalState

Implements Network::INetwork< Types::time_type >.

Definition at line 855 of file SimpleDisconnectedNetwork.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< Types::time_type >.

Definition at line 1080 of file SimpleDisconnectedNetwork.h.

◆ 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
inlineoverride

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.

Definition at line 1122 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1489 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
inlineoverride

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.

Definition at line 1180 of file SimpleDisconnectedNetwork.h.

◆ 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
inlineoverride

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.

Definition at line 1094 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1473 of file SimpleDisconnectedNetwork.h.

◆ 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 2011 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1539 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< Types::time_type >.

Definition at line 1523 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
inlineoverride

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.

Definition at line 1157 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1715 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1697 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1682 of file SimpleDisconnectedNetwork.h.

◆ 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 )
inlineoverride

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

Definition at line 363 of file SimpleDisconnectedNetwork.h.

◆ 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 )
inlineoverride

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

Definition at line 551 of file SimpleDisconnectedNetwork.h.

◆ 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< Types::time_type >.

Definition at line 1068 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 1051 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< Types::time_type >.

Definition at line 1617 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< Types::time_type >.

Definition at line 1635 of file SimpleDisconnectedNetwork.h.

Member Data Documentation

◆ classicalState

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

The classical state of the network.

Definition at line 2118 of file SimpleDisconnectedNetwork.h.

◆ controller

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr<IController<Time> > Network::SimpleDisconnectedNetwork< Time, Controller >::controller
protected

The controller for the network.

Definition at line 2126 of file SimpleDisconnectedNetwork.h.

◆ distCirc

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr<Circuits::Circuit<Time> > Network::SimpleDisconnectedNetwork< Time, Controller >::distCirc
protected

The distributed circuit.

Definition at line 2123 of file SimpleDisconnectedNetwork.h.

◆ 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 2131 of file SimpleDisconnectedNetwork.h.

◆ lastMethod

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

The last simulation method used.

Definition at line 2105 of file SimpleDisconnectedNetwork.h.

◆ lastSimulatorType

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

The last simulator type used.

Definition at line 2103 of file SimpleDisconnectedNetwork.h.

◆ maxBondDim

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::string Network::SimpleDisconnectedNetwork< Time, Controller >::maxBondDim
protected

Definition at line 2109 of file SimpleDisconnectedNetwork.h.

◆ 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 2113 of file SimpleDisconnectedNetwork.h.

◆ mpsSample

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::string Network::SimpleDisconnectedNetwork< Time, Controller >::mpsSample
protected

Definition at line 2111 of file SimpleDisconnectedNetwork.h.

◆ optimizeSimulator

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

The flag to optimize the simulator.

Definition at line 2100 of file SimpleDisconnectedNetwork.h.

◆ simulator

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::shared_ptr<Simulators::ISimulator> Network::SimpleDisconnectedNetwork< Time, Controller >::simulator
protected

The quantum computing simulator for the network.

Definition at line 2120 of file SimpleDisconnectedNetwork.h.

◆ simulatorsEstimator

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

The simulators estimator.

Definition at line 2134 of file SimpleDisconnectedNetwork.h.

◆ simulatorsForOptimizations

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
BaseClass::SimulatorsSet Network::SimpleDisconnectedNetwork< Time, Controller >::simulatorsForOptimizations
protected

Definition at line 2101 of file SimpleDisconnectedNetwork.h.

◆ singularValueThreshold

template<typename Time = Types::time_type, class Controller = SimpleController<Time>>
std::string Network::SimpleDisconnectedNetwork< Time, Controller >::singularValueThreshold
protected

Definition at line 2110 of file SimpleDisconnectedNetwork.h.


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