Maestro 0.3.11
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
30#pragma once
31
32#ifndef _CONTROLLER_INTERFACE_H_
33#define _CONTROLLER_INTERFACE_H_
34
35#include "../Circuit/Circuit.h"
37#include "Host.h"
38
39namespace Distribution
40{
41template <typename Time> class IRemapper;
42}
43
44namespace Graphs
45{
46template <typename Time> class IOptimiser;
47
48enum class OptimiserType;
49} // namespace Graphs
50
51namespace Schedulers
52{
53template <typename Time> class IScheduler;
54
60template <typename Time = Types::time_type> struct ExecuteCircuit
61{
62 ExecuteCircuit() = default;
63
65 {
66 }
67
68 virtual ~ExecuteCircuit() = default;
69
70 bool operator==(const ExecuteCircuit<Time> &other) const
71 {
72 return circuit == other.circuit && shots == other.shots;
73 }
74
75 std::shared_ptr<Circuits::Circuit<Time>> circuit;
76 size_t shots = 1000;
77};
78} // namespace Schedulers
79
80namespace Network
81{
82
93
94template <typename Time> class INetwork;
95
107template <typename Time = Types::time_type> class IController : public IHost<Time>
108{
109 public:
120 virtual std::shared_ptr<Circuits::Circuit<Time>> DistributeCircuit(const std::shared_ptr<INetwork<Time>> &network,
121 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
122
139 virtual std::shared_ptr<Circuits::Circuit<Time>> SplitCompositeOperations(const std::shared_ptr<INetwork<Time>> &network,
140 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
141
151 virtual void SetRemapper(const std::shared_ptr<Distribution::IRemapper<Time>> &remapper) = 0;
152
162 virtual std::shared_ptr<Distribution::IRemapper<Time>> GetRemapper() const = 0;
163
177 virtual std::shared_ptr<Circuits::Circuit<Time>> DoNetworkSpecificConversionsForDistribution(const std::shared_ptr<INetwork<Time>> &network,
178 const std::shared_ptr<Circuits::Circuit<Time>> &circuit) = 0;
179
187 virtual std::shared_ptr<Graphs::IOptimiser<Time>> GetOptimiser() const = 0;
188
196 virtual void CreateOptimiser(Graphs::OptimiserType type) = 0;
197
210 virtual void CreateScheduler(const std::shared_ptr<INetwork<Time>> &network, SchedulerType schType = SchedulerType::kNoEntanglementQubitsParallel) = 0;
211
220 virtual std::shared_ptr<Schedulers::IScheduler<Time>> GetScheduler() const = 0;
221
230 virtual void SetOptimizeCircuit(bool optimize = true) = 0;
231
239 virtual bool GetOptimizeCircuit() const = 0;
240
241 virtual bool GetOptimizeRotationGates() const = 0;
242
243 virtual void SetOptimizeRotationGates(bool val = true) = 0;
244};
245
246} // namespace Network
247
248#endif // !_CONTROLLER_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:51
Remapper abstract class.
Definition Remapper.h:49
The controller host interface.
Definition Controller.h:108
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:53
The network interface.
Definition Network.h:60
The scheduler interface.
Definition Scheduler.h:117
SchedulerType
The type of the network scheduler for scheduling execution of multiple circuits.
Definition Controller.h:89
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:75