qreservoir
Qreserveoir is a Python package for quantum reservoir engineering and quantum extreme learning built on top of qulacs.
Installation
The easiest way to install qreservoir is using pip:
$ pip install qreservoir
qreservoir requires Python version 3.10 or 3.11.
Modules
There are four main modules in qreservoir: encoders, reservoirs, models and datasets. Each of these
gives access to a variety of classes to build and train reservoir and extreme learning models.
The general composition of a model is as follows:
- An encoder, which encodes the input data into a quantum state
- A reservoir, which evolves the quantum state to which we pass an encoder
- A model, which is a wrapper around reservoirs allowing for prediction and training
Models take a scikit-learn estimator as an argument, which is used to train the model and make predictions. The model also takes a list of qulacs observables as an argument, which are used to calculate the expectation values and translate the quantum dynamics model to a classical value.
Example
from qulacs import Observable
from sklearn.linear_model import LinearRegression
from qreservoir.datasets import Complex_Fourrier
from qreservoir.encoders import ExpEncoder
from qreservoir.models import QELModel
from qreservoir.reservoirs import RotationReservoir
dataset = Complex_Fourrier(complexity=1, size=1000, noise=0.0)
encoder = ExpEncoder(1, 1, 3) # 1 feature, 1 layer, 1 qubit per feature
reservoir = RotationReservoir(encoder, 0, 10) # 0 ancilla qubits, 10 depth
observables = [Observable(3) for _ in range(9)] # create observable set
for i, ob in enumerate(observables[:3]):
ob.add_operator(1.0, f"X {i}")
for i, ob in enumerate(observables[3:6]):
ob.add_operator(1.0, f"Z {i}")
for i, ob in enumerate(observables[6:]):
ob.add_operator(1.0, f"Y {i}")
model = QELModel(reservoir, observables, LinearRegression()) # observable is a qulacs Observable object
X, _, y, _ = dataset.get_train_test()
model.fit(X, y)
print(model.score(X, y))
1""" 2 3Qreserveoir is a Python package for quantum reservoir engineering and quantum extreme learning built on top of qulacs. 4 5Installation 6===== 7The easiest way to install `qreservoir` is using pip: 8 9 $ pip install qreservoir 10 11`qreservoir` requires Python version 3.10 or 3.11. 12 13Modules 14===== 15There are four main modules in `qreservoir`: `encoders`, `reservoirs`, `models` and `datasets`. Each of these 16gives access to a variety of classes to build and train reservoir and extreme learning models. 17 18The general composition of a model is as follows: 19 201. An *encoder*, which encodes the input data into a quantum state 212. A *reservoir*, which evolves the quantum state to which we pass an encoder 223. A *model*, which is a wrapper around reservoirs allowing for prediction and training 23 24Models take a scikit-learn estimator as an argument, which is used to train the model and make predictions. 25The model also takes a list of qulacs observables as an argument, which are used to calculate the expectation 26values and translate the quantum dynamics model to a classical value. 27 28Example 29====== 30 from qulacs import Observable 31 from sklearn.linear_model import LinearRegression 32 33 from qreservoir.datasets import Complex_Fourrier 34 from qreservoir.encoders import ExpEncoder 35 from qreservoir.models import QELModel 36 from qreservoir.reservoirs import RotationReservoir 37 38 39 dataset = Complex_Fourrier(complexity=1, size=1000, noise=0.0) 40 41 encoder = ExpEncoder(1, 1, 3) # 1 feature, 1 layer, 1 qubit per feature 42 reservoir = RotationReservoir(encoder, 0, 10) # 0 ancilla qubits, 10 depth 43 44 observables = [Observable(3) for _ in range(9)] # create observable set 45 for i, ob in enumerate(observables[:3]): 46 ob.add_operator(1.0, f"X {i}") 47 for i, ob in enumerate(observables[3:6]): 48 ob.add_operator(1.0, f"Z {i}") 49 for i, ob in enumerate(observables[6:]): 50 ob.add_operator(1.0, f"Y {i}") 51 52 model = QELModel(reservoir, observables, LinearRegression()) # observable is a qulacs Observable object 53 X, _, y, _ = dataset.get_train_test() 54 model.fit(X, y) 55 print(model.score(X, y)) 56 57"""