GithubHelp home page GithubHelp logo

00mjk / qrand Goto Github PK

View Code? Open in Web Editor NEW

This project forked from pedrorrivero/qrand

0.0 0.0 0.0 592 KB

A multiprotocol and multiplatform quantum random number generation framework

Home Page: https://pypi.org/project/qrand/

License: Apache License 2.0

Python 99.83% TeX 0.17%

qrand's Introduction

Unitary Fund YouTube PyPI Coverage Apache-2.0 License DOI

qrand

A multiprotocol and multiplatform quantum random number generation framework

Random numbers are everywhere.

Computer algorithms, data encryption, physical simulations, and even the arts use them all the time. There is one problem though: it turns out that they are actually very difficult to produce in large amounts. Classical computers can only implement mathematical tricks to emulate randomness, while measuring it out of physical processes turns out to be too slow. Luckily, the probabilistic nature of quantum computers makes these devices particularly useful for the task.

QRAND is a free and open-source framework for quantum random number generation. Thanks to its loosely coupled design, it offers seamlessly compatibility between different quantum computing platforms and QRNG protocols. Not only that, but it also enables the creation of custom cross-compatible protocols, and a wide range of output formats (e.g. bitstring, int, float, complex, hex, base64).

To boost its efficiency, QRAND makes use of a concurrent cache to reduce the number of internet connections needed for random number generation; and for quality checks, it incorporates a suite of classical entropy validation tests which can be easily plugged into any base protocol.

Additionally, QRAND introduces an interface layer for NumPy that enables the efficient production of quantum random numbers (QRN) adhering to a wide variety of probability distributions. This is ultimately accomplished by transforming uniform probability distributions produced in cloud-based real quantum hardware, through NumPy's random module.

from qrand import QuantumBitGenerator
from qrand.platforms import QiskitPlatform
from qrand.protocols import HadamardProtocol
from numpy.random import Generator
from qiskit import IBMQ

provider = IBMQ.load_account()
platform = QiskitPlatform(provider)
protocol = HadamardProtocol()
bitgen = QuantumBitGenerator(platform, protocol)
gen = Generator(bitgen)

print(f"Random Raw: {bitgen.random_raw()}")
print(f"Random Bitstring: {bitgen.random_bitstring()}")
print(f"Random Unsigned Int: {bitgen.random_uint()}")
print(f"Random Double: {bitgen.random_double()}")

print(f"Random Binomial: {gen.binomial(4, 1/4)}")
print(f"Random Exponential: {gen.exponential()}")
print(f"Random Logistic: {gen.logistic()}")
print(f"Random Poisson: {gen.poisson()}")
print(f"Random Std. Normal: {gen.standard_normal()}")
print(f"Random Triangular: {gen.triangular(-1, 0, 1)}")
# ...

Supported quantum platforms

As of June 2021, QRAND supports Qiskit and Q#. However, support for Cirq is under active development.

Implemented QRNG protocols

As of June 2021, both the basic HadamardProtocol, and the more sophisticated EntanglementProtocol are available. We are also working on implementing a version of Google's Sycamore routine (patent permitting).

Authors and citation

QRAND is the work of many people who contribute to the project at different levels. If you use QRAND, please cite as per the included BibTeX file.

Contribution guidelines

If you'd like to contribute to QRAND, please take a look at the contribution guidelines. This project adheres to the following code of conduct. By participating, you are expected to uphold this code.

We use GitHub issues for tracking requests and bugs. Please use Unitary Fund's Discord for discussion and simple questions.

Acknowledgements

Parts of this software's source code have been inspired or borrowed from the qRNG project, which is licensed under the GNU GPLv3 license. Copyright notice and specific changes can be found as a docstring wherever this applies.

License

Apache License 2.0


(c) Copyright 2021 Pedro Rivero

qrand's People

Contributors

pedrorrivero avatar avhijit-codeboy avatar charmerdark avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.