Is your feature request related to a problem? Please describe.
Users need to go through several steps in order to instantiate a Qrng object:
Instantiate a QuantumPlatform.
Instantiate a QuantumProtocol.
Instantiate a QuantumBitGenerator from the previous two objects.
Instantiate a Qrng from the bit generator.
Describe the solution you'd like
By transforming Qrng from a QuantumBitGenerator object wrapper to a class wrapper (i.e. through inheritance), the user can disregard QuantumBitGenerator altogether (i.e. step 3) and jump straight to using Qrng. Furtheremore, Qrng will then also be able to interface with NumPy.
Describe alternatives you've considered
Build facades to simplify the four-step process described above.
Additional context
This is a breaking change.
While instantiating a Qrng we can set a default protocol (e.g. Hadamard) to further simplify the process, or we can set the default on the QuantumBirGenerator class directly.
The reason to keep a distinction between QantumBitGenerator and Qrng is to segregate/isolate responsibilities. All the critical functionality will be implemented in QuantumBitGenerator (e.g. NumPy interface, caching), while the Qrng child will simply add extra functionality.
Is your feature request related to a problem? Please describe.
Users need to go through several steps in order to instantiate a Qrng object:
QuantumPlatform
.QuantumProtocol
.QuantumBitGenerator
from the previous two objects.Qrng
from the bit generator.Describe the solution you'd like
By transforming
Qrng
from aQuantumBitGenerator
object wrapper to a class wrapper (i.e. through inheritance), the user can disregardQuantumBitGenerator
altogether (i.e. step 3) and jump straight to usingQrng
. Furtheremore,Qrng
will then also be able to interface with NumPy.Describe alternatives you've considered
Build facades to simplify the four-step process described above.
Additional context
Qrng
we can set a default protocol (e.g. Hadamard) to further simplify the process, or we can set the default on theQuantumBirGenerator
class directly.QantumBitGenerator
andQrng
is to segregate/isolate responsibilities. All the critical functionality will be implemented inQuantumBitGenerator
(e.g. NumPy interface, caching), while theQrng
child will simply add extra functionality.