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
29#pragma once
30
31#ifndef _CONTROLLER_INTERFACE_H_
32#define _CONTROLLER_INTERFACE_H_
33
34#include "../Circuit/Circuit.h"
35#include "../Simulators/Simulator.h"
36#include "Host.h"
37
38namespace Distribution {
39template <typename Time>
40class IRemapper;
41}
42
43namespace Graphs {
44template <typename Time>
46
47enum class OptimiserType;
48} // namespace Graphs
49
50namespace Schedulers {
51template <typename Time>
52class IScheduler;
53
59template <typename Time = Types::time_type>
61 ExecuteCircuit() = default;
62
64 size_t shots)
66
67 virtual ~ExecuteCircuit() = default;
68
69 bool operator==(const ExecuteCircuit<Time> &other) const {
70 return circuit == other.circuit && shots == other.shots;
71 }
72
73 std::shared_ptr<Circuits::Circuit<Time>> circuit;
74 size_t shots = 1000;
75};
76} // namespace Schedulers
77
78namespace Network {
79
89
90template <typename Time>
91class INetwork;
92
104template <typename Time = Types::time_type>
105class IController : public IHost<Time> {
106 public:
117 virtual std::shared_ptr<Circuits::Circuit<Time>> DistributeCircuit(
118 const std::shared_ptr<INetwork<Time>> &network,
119 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
120
137 virtual std::shared_ptr<Circuits::Circuit<Time>> SplitCompositeOperations(
138 const std::shared_ptr<INetwork<Time>> &network,
139 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
140
150 virtual void SetRemapper(
151 const std::shared_ptr<Distribution::IRemapper<Time>> &remapper) = 0;
152
162 virtual std::shared_ptr<Distribution::IRemapper<Time>> GetRemapper()
163 const = 0;
164
178 virtual std::shared_ptr<Circuits::Circuit<Time>>
180 const std::shared_ptr<INetwork<Time>> &network,
181 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
182
190 virtual std::shared_ptr<Graphs::IOptimiser<Time>> GetOptimiser() const = 0;
191
199 virtual void CreateOptimiser(Graphs::OptimiserType type) = 0;
200
213 virtual void CreateScheduler(
214 const std::shared_ptr<INetwork<Time>> &network,
216
225 virtual std::shared_ptr<Schedulers::IScheduler<Time>> GetScheduler()
226 const = 0;
227
236 virtual void SetOptimizeCircuit(bool optimize = true) = 0;
237
245 virtual bool GetOptimizeCircuit() const = 0;
246
247 virtual bool GetOptimizeRotationGates() const = 0;
248
249 virtual void SetOptimizeRotationGates(bool val = true) = 0;
250};
251
252} // namespace Network
253
254#endif // !_CONTROLLER_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:45
Remapper abstract class.
Definition Remapper.h:47
The controller host interface.
Definition Controller.h:105
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:114
SchedulerType
The type of the network scheduler for scheduling execution of multiple circuits.
Definition Controller.h:85
A way to pack together a circuit and the number of shots for its execution.
Definition Controller.h:60
ExecuteCircuit(const std::shared_ptr< Circuits::Circuit< Time > > &circuit, size_t shots)
Definition Controller.h:63
bool operator==(const ExecuteCircuit< Time > &other) const
Definition Controller.h:69
virtual ~ExecuteCircuit()=default
std::shared_ptr< Circuits::Circuit< Time > > circuit
Definition Controller.h:73