Maestro 0.2.5
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
Controller.h
Go to the documentation of this file.
1/*******************************************************
2
3Copyright (C) 2023 2639731 ONTARIO INC. <joe.diadamo.dryrock@gmail.com>
4
5The files in this repository make up the Codebase.
6
7All files in this Codebase are owned by 2639731 ONTARIO INC..
8
9Any files within this Codebase can not be copied and/or distributed without the
10express permission of 2639731 ONTARIO INC.
11
12*******************************************************/
13
30#pragma once
31
32#ifndef _CONTROLLER_INTERFACE_H_
33#define _CONTROLLER_INTERFACE_H_
34
35#include "../Circuit/Circuit.h"
36#include "../Simulators/Simulator.h"
37#include "Host.h"
38
39namespace Distribution {
40template <typename Time>
41class IRemapper;
42}
43
44namespace Graphs {
45template <typename Time>
47
48enum class OptimiserType;
49} // namespace Graphs
50
51namespace Schedulers {
52template <typename Time>
53class IScheduler;
54
60template <typename Time = Types::time_type>
62 ExecuteCircuit() = default;
63
65 size_t shots)
67
68 virtual ~ExecuteCircuit() = default;
69
70 bool operator==(const ExecuteCircuit<Time> &other) const {
71 return circuit == other.circuit && shots == other.shots;
72 }
73
74 std::shared_ptr<Circuits::Circuit<Time>> circuit;
75 size_t shots = 1000;
76};
77} // namespace Schedulers
78
79namespace Network {
80
90
91template <typename Time>
92class INetwork;
93
105template <typename Time = Types::time_type>
106class IController : public IHost<Time> {
107 public:
118 virtual std::shared_ptr<Circuits::Circuit<Time>> DistributeCircuit(
119 const std::shared_ptr<INetwork<Time>> &network,
120 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
121
138 virtual std::shared_ptr<Circuits::Circuit<Time>> SplitCompositeOperations(
139 const std::shared_ptr<INetwork<Time>> &network,
140 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
141
151 virtual void SetRemapper(
152 const std::shared_ptr<Distribution::IRemapper<Time>> &remapper) = 0;
153
163 virtual std::shared_ptr<Distribution::IRemapper<Time>> GetRemapper()
164 const = 0;
165
179 virtual std::shared_ptr<Circuits::Circuit<Time>>
181 const std::shared_ptr<INetwork<Time>> &network,
182 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
183
191 virtual std::shared_ptr<Graphs::IOptimiser<Time>> GetOptimiser() const = 0;
192
200 virtual void CreateOptimiser(Graphs::OptimiserType type) = 0;
201
214 virtual void CreateScheduler(
215 const std::shared_ptr<INetwork<Time>> &network,
217
226 virtual std::shared_ptr<Schedulers::IScheduler<Time>> GetScheduler()
227 const = 0;
228
237 virtual void SetOptimizeCircuit(bool optimize = true) = 0;
238
246 virtual bool GetOptimizeCircuit() const = 0;
247
248 virtual bool GetOptimizeRotationGates() const = 0;
249
250 virtual void SetOptimizeRotationGates(bool val = true) = 0;
251};
252
253} // namespace Network
254
255#endif // !_CONTROLLER_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:46
Remapper abstract class.
Definition Remapper.h:47
The controller host interface.
Definition Controller.h:106
virtual std::shared_ptr< Circuits::Circuit< Time > > DistributeCircuit(const std::shared_ptr< INetwork< Time > > &network, const std::shared_ptr< Circuits::Circuit< Time > > &circuit)=0
Distributes the circuit on the hosts.
virtual bool GetOptimizeCircuit() const =0
Get circuit optimization.
virtual bool GetOptimizeRotationGates() const =0
virtual std::shared_ptr< Circuits::Circuit< Time > > DoNetworkSpecificConversionsForDistribution(const std::shared_ptr< INetwork< Time > > &network, const std::shared_ptr< Circuits::Circuit< Time > > &circuit)=0
Convert the circuit for distribution for specific networks.
virtual std::shared_ptr< Graphs::IOptimiser< Time > > GetOptimiser() const =0
Returns the optimiser used.
virtual void SetRemapper(const std::shared_ptr< Distribution::IRemapper< Time > > &remapper)=0
Changes the remapper that is used for remapping a circuit to a distributed one.
virtual void SetOptimizeRotationGates(bool val=true)=0
virtual void CreateOptimiser(Graphs::OptimiserType type)=0
Creates an optimiser.
virtual void SetOptimizeCircuit(bool optimize=true)=0
Set circuit optimization.
virtual void CreateScheduler(const std::shared_ptr< INetwork< Time > > &network, SchedulerType schType=SchedulerType::kNoEntanglementQubitsParallel)=0
Create the scheduler for the network.
virtual std::shared_ptr< Circuits::Circuit< Time > > SplitCompositeOperations(const std::shared_ptr< INetwork< Time > > &network, const std::shared_ptr< Circuits::Circuit< Time > > &circuit)=0
Splits the composite operations from the circuit.
virtual std::shared_ptr< Schedulers::IScheduler< Time > > GetScheduler() const =0
Get the scheduler for the network.
virtual std::shared_ptr< Distribution::IRemapper< Time > > GetRemapper() const =0
Gets the remapper that is used for remapping a circuit to a distributed one.
The host interface.
Definition Host.h:52
The network interface.
Definition Network.h:58
The scheduler interface.
Definition Scheduler.h:115
SchedulerType
The type of the network scheduler for scheduling execution of multiple circuits.
Definition Controller.h:86
A way to pack together a circuit and the number of shots for its execution.
Definition Controller.h:61
ExecuteCircuit(const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t shots)
Definition Controller.h:64
bool operator==(const ExecuteCircuit< Time > &other) const
Definition Controller.h:70
virtual ~ExecuteCircuit()=default
std::shared_ptr< Circuits::Circuit< Time > > circuit
Definition Controller.h:74