Maestro 0.1.0
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
28
29#pragma once
30
31#ifndef _CONTROLLER_INTERFACE_H_
32#define _CONTROLLER_INTERFACE_H_
33
34#include "../Circuit/Circuit.h"
36#include "Host.h"
37
38namespace Distribution {
39template <typename Time> class IRemapper;
40}
41
42namespace Graphs {
43template <typename Time> class IOptimiser;
44
45enum class OptimiserType;
46} // namespace Graphs
47
48namespace Schedulers {
49template <typename Time> class IScheduler;
50
56template <typename Time = Types::time_type> struct ExecuteCircuit {
57 ExecuteCircuit() = default;
58
60 size_t shots)
62
63 virtual ~ExecuteCircuit() = default;
64
65 bool operator==(const ExecuteCircuit<Time> &other) const {
66 return circuit == other.circuit && shots == other.shots;
67 }
68
69 std::shared_ptr<Circuits::Circuit<Time>> circuit;
70 size_t shots = 1000;
71};
72} // namespace Schedulers
73
74namespace Network {
75
85
86template <typename Time> class INetwork;
87
99template <typename Time = Types::time_type>
100class IController : public IHost<Time> {
101public:
112 virtual std::shared_ptr<Circuits::Circuit<Time>> DistributeCircuit(
113 const std::shared_ptr<INetwork<Time>> &network,
114 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
115
132 virtual std::shared_ptr<Circuits::Circuit<Time>> SplitCompositeOperations(
133 const std::shared_ptr<INetwork<Time>> &network,
134 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
135
145 virtual void SetRemapper(
146 const std::shared_ptr<Distribution::IRemapper<Time>> &remapper) = 0;
147
157 virtual std::shared_ptr<Distribution::IRemapper<Time>>
158 GetRemapper() const = 0;
159
173 virtual std::shared_ptr<Circuits::Circuit<Time>>
175 const std::shared_ptr<INetwork<Time>> &network,
176 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
177
185 virtual std::shared_ptr<Graphs::IOptimiser<Time>> GetOptimiser() const = 0;
186
195
208 virtual void CreateScheduler(
209 const std::shared_ptr<INetwork<Time>> &network,
211
220 virtual std::shared_ptr<Schedulers::IScheduler<Time>>
221 GetScheduler() const = 0;
222
231 virtual void SetOptimizeCircuit(bool optimize = true) = 0;
232
240 virtual bool GetOptimizeCircuit() const = 0;
241
242 virtual bool GetOptimizeRotationGates() const = 0;
243
244 virtual void SetOptimizeRotationGates(bool val = true) = 0;
245};
246
247} // namespace Network
248
249#endif // !_CONTROLLER_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:45
Remapper abstract class.
Definition Remapper.h:47
Interface for optimiser classes.
Definition Optimiser.h:39
The controller host interface.
Definition Controller.h:100
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:51
The network interface.
Definition Network.h:56
The scheduler interface.
Definition Scheduler.h:111
OptimiserType
The type of optimiser.
Definition Optimiser.h:26
SchedulerType
The type of the network scheduler for scheduling execution of multiple circuits.
Definition Controller.h:81
ExecuteCircuit(const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t shots)
Definition Controller.h:59
bool operator==(const ExecuteCircuit< Time > &other) const
Definition Controller.h:65
virtual ~ExecuteCircuit()=default
std::shared_ptr< Circuits::Circuit< Time > > circuit
Definition Controller.h:69