From 22cc3e969fa7f2eba1d549535284c6aeeee4c754 Mon Sep 17 00:00:00 2001 From: ozaner <56015962+ozaner@users.noreply.github.com> Date: Wed, 19 Oct 2022 00:27:45 -0400 Subject: [PATCH] Add documentation and gitignore - Added documentation to all public functions in qrng. - Added .gitignore file. - Updated setup.py fix --- .gitignore | 4 + build/lib/qrng/__init__.py | 122 ---------------------- dist/qrng-0.1.0-py3-none-any.whl | Bin 16571 -> 0 bytes dist/qrng-0.1.0.tar.gz | Bin 3940 -> 0 bytes dist/qrng-0.1.1-py3-none-any.whl | Bin 16571 -> 0 bytes dist/qrng-0.1.1.1-py3-none-any.whl | Bin 16435 -> 0 bytes dist/qrng-0.1.1.1.tar.gz | Bin 3902 -> 0 bytes dist/qrng-0.1.1.tar.gz | Bin 3932 -> 0 bytes dist/qrng-0.1.2-py3-none-any.whl | Bin 16902 -> 0 bytes dist/qrng-0.1.2.tar.gz | Bin 4421 -> 0 bytes qrng.egg-info/PKG-INFO | 72 ------------- qrng.egg-info/SOURCES.txt | 7 -- qrng.egg-info/dependency_links.txt | 1 - qrng.egg-info/top_level.txt | 1 - qrng/__init__.py | 127 ++++++++++++++++------- qrng/__pycache__/__init__.cpython-37.pyc | Bin 3619 -> 0 bytes setup.py | 4 +- 17 files changed, 94 insertions(+), 244 deletions(-) create mode 100644 .gitignore delete mode 100644 build/lib/qrng/__init__.py delete mode 100644 dist/qrng-0.1.0-py3-none-any.whl delete mode 100644 dist/qrng-0.1.0.tar.gz delete mode 100644 dist/qrng-0.1.1-py3-none-any.whl delete mode 100644 dist/qrng-0.1.1.1-py3-none-any.whl delete mode 100644 dist/qrng-0.1.1.1.tar.gz delete mode 100644 dist/qrng-0.1.1.tar.gz delete mode 100644 dist/qrng-0.1.2-py3-none-any.whl delete mode 100644 dist/qrng-0.1.2.tar.gz delete mode 100644 qrng.egg-info/PKG-INFO delete mode 100644 qrng.egg-info/SOURCES.txt delete mode 100644 qrng.egg-info/dependency_links.txt delete mode 100644 qrng.egg-info/top_level.txt delete mode 100644 qrng/__pycache__/__init__.cpython-37.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ebdc17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +dist/ +build/ +*.egg-info/ diff --git a/build/lib/qrng/__init__.py b/build/lib/qrng/__init__.py deleted file mode 100644 index 4383601..0000000 --- a/build/lib/qrng/__init__.py +++ /dev/null @@ -1,122 +0,0 @@ -name = "qrng" - -import qiskit -from qiskit import IBMQ -import math -import struct - -_circuit = None -_bitCache = '' -def set_provider_as_IBMQ(token): - global provider - if token == '': - provider = qiskit.BasicAer - else: - IBMQ.save_account(token) - IBMQ.load_account() - provider = IBMQ.get_provider('ibm-q') - -def _set_qubits(n): - global _circuit - qr = qiskit.QuantumRegister(n) - cr = qiskit.ClassicalRegister(n) - _circuit = qiskit.QuantumCircuit(qr, cr) - _circuit.h(qr) # Apply Hadamard gate to qubits - _circuit.measure(qr,cr) # Collapses qubit to either 1 or 0 w/ equal prob. - -_set_qubits(8) # Default Circuit is 8 Qubits - -def set_backend(b = 'qasm_simulator'): - global _backend - global provider - if b == 'ibmq_london' or b == 'ibmq_burlington' or b == 'ibmq_essex'\ - or b == 'ibmq_ourense' or b == 'ibmq_vigo' or b == 'ibmqx2' : - _backend = provider.get_backend(b) - _set_qubits(5) - elif b == 'ibmq_16_melbourne': - _backend = provider.get_backend(b) - _set_qubits(15) - elif b == 'ibmq_armonk': - _backend = provider.get_backend(b) - _set_qubits(1) - elif b == 'ibmq_qasm_simulator': - _backend = provider.get_backend(b) - _set_qubits(32) - else: - _backend = qiskit.BasicAer.get_backend('qasm_simulator') - _set_qubits(8) - -# Strips QISKit output to just a bitstring. -def _bit_from_counts(counts): - return [k for k, v in counts.items() if v == 1][0] - -# Populates the bitCache with at least n more bits. -def _request_bits(n): - global _bitCache - iterations = math.ceil(n/_circuit.width()*2) - for _ in range(iterations): - # Create new job and run the quantum circuit - job = qiskit.execute(_circuit, _backend, shots=1) - _bitCache += _bit_from_counts(job.result().get_counts()) - -# Returns a random n-bit string by popping n bits from bitCache. -def get_bit_string(n): - global _bitCache - if len(_bitCache) < n: - _request_bits(n-len(_bitCache)) - bitString = _bitCache[0:n] - _bitCache = _bitCache[n:] - return bitString - -# Returns a random integer between and including [min, max]. -# Running time is probabalistic but complexity is still O(n) -def get_random_int(min,max): - delta = max-min - n = math.floor(math.log(delta,2))+1 - result = int(get_bit_string(n),2) - while(result > delta): - result = int(get_bit_string(n),2) - return result+min - -# def getRandomIntEntaglement(min,max): - -# Returns a random 32 bit integer -def get_random_int32(): - return int(get_bit_string(32),2) - -# Returns a random 64 bit integer -def get_random_int64(): - return int(get_bit_string(64),2) - -# Returns a random float from a uniform distribution in the range [min, max). -def get_random_float(min,max): - # Get random float from [0,1) - unpacked = 0x3F800000 | get_random_int32() >> 9 - packed = struct.pack('I',unpacked) - value = struct.unpack('f',packed)[0] - 1.0 - return (max-min)*value+min # Scale float to given range - -# Returns a random double from a uniform distribution in the range [min, max). -def get_random_double(min,max): - # Get random double from [0,1) - unpacked = 0x3FF0000000000000 | get_random_int64() >> 12 - packed = struct.pack('Q',unpacked) - value = struct.unpack('d',packed)[0] - 1.0 - return (max-min)*value+min # Scale double to given range - -# Returns a random complex with both real and imaginary parts -# from the given ranges. If no imaginary range specified, real range used. -def get_random_complex_rect(r1,r2,i1=None,i2=None): - re = get_random_float(r1,r2) - if i1 == None or i2 == None: - im = get_random_float(r1,r2) - else: - im = get_random_float(i1,i2) - return re+im*1j - -# Returns a random complex in rectangular form from a given polar range. -# If no max angle given, [0,2pi) used. -def get_random_complex_polar(r,theta=2*math.pi): - r0 = r * math.sqrt(get_random_float(0,1)) - theta0 = get_random_float(0,theta) - return r0*math.cos(theta0)+r0*math.sin(theta0)*1j diff --git a/dist/qrng-0.1.0-py3-none-any.whl b/dist/qrng-0.1.0-py3-none-any.whl deleted file mode 100644 index 5d4f0f8549b7aaad567567c0f06283d4f05cd5f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16571 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 diff --git a/dist/qrng-0.1.1.1-py3-none-any.whl b/dist/qrng-0.1.1.1-py3-none-any.whl deleted file mode 100644 index 540f6723f21cf4adcbd0c1b883edae8225d33bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16435 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 M4}TQ#+yHn005aXEQ2+n{ diff --git a/dist/qrng-0.1.1.tar.gz b/dist/qrng-0.1.1.tar.gz deleted file mode 100644 index 975ca0e4d31dfc78f6dcde4cecb2e68d898e93a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3932 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 Sb%yw7Z~Dg(cm@CK>VE;bT;Y=d diff --git a/dist/qrng-0.1.2.tar.gz b/dist/qrng-0.1.2.tar.gz deleted file mode 100644 index 38f238ce0f2e7f055165df8c6b783fba3666590d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4421 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 - -

- - ----------------- - - **qRNG** is an open-source quantum random number generator written in python. It achieves this by using IBM's [QISKit](https://qiskit.org/) API to communicate with any one of their 3 publicly accessible quantum computers: - - - `ibmqx4` - - `ibmqx5` - - `ibmqx_16_melborne` - - ## Installation - You can use the pip package manager to install the [current release](https://pypi.org/project/qrng/) of qRNG (along with its dependencies): - ``` - pip install qrng - ``` - - Upgrading is as simple as: - ``` - pip install qrng -U - ``` - ## Tutorial - Now you can try generating your first random number. First open python in the shell or use an IDE: - ```shell - $ python - ``` - Now try generating a random 32-bit integer (note that until a particular quantum computer has been specified, qRNG uses a simulator rather than a real QPC): - ```python - >>> import qrng - >>> qrng.get_random_int32() - 3408681298 - ``` - - - - ## What is Random Number Generation? - There are a variety of applications that require a source of random data in order to work effectively (e.g. simulations and cryptography). To that end, we make use of random number generators (RNGs) to generate sequences of numbers that are, ideally, indistinguishable from random noise. - - There are two types of RNGs: Pseudo-RNGs (PRNGs) and True RNGs (TRNGs). Pseudo-RNGs, while not truly and statistically random, are used in a variety of applications as their output is 'random enough' for many purposes. - - For a True RNG, however, an actual piece of hardware is required to measure some random process in the real world as no computer program could suffice due to being deterministic in nature. These devices vary from apparatuses that measure atmospheric noise to pieces of radioactive material connected via USB. - - ## Why Quantum? - Modern physics has shown us that there are really only two types of events that can happen in the universe: the unitary transformation of a quantum system, and quantum wavefunction collapse (i.e. **measurement**). The former being a totally deterministic process and the latter being a random one. - - Indeed, all randomness in the universe (as far we know) is the result of the collapse of quantum systems upon measurement. In a sense, this is randomness in its purest form and the underlying source of it in any TRNG. - - The point of this package then, besides it being a fun side project, is to cut out the middle man entirely, whether it be a radioactive isotope or the thermal noise in your PC, and simply measure an actual quantum system. For example, we can prepare the following state in a quantum computer: - -

- -

- - There is a 50-50 chance of measuring the above state as a 0 or 1 and we can continually iterate this process for as many random bits as we require. Note that while such a simple algorithm doesn't require a full-blown quantum computer, there are some random algorithms that do. - - ## Practicality - Of course, while the numbers generated from a quantum computer are amongst the most random, the practicality of connecting to one of IBM's quantum computers to generate a large amount of these numbers is nonexistent. For most real world use cases that require such high-caliber random numbers, an off the shelf hardware RNG would suffice. The purpose of this package is thus to provide a working example of how a real cloud based quantum random number generator may operate. - -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 3 -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Description-Content-Type: text/markdown diff --git a/qrng.egg-info/SOURCES.txt b/qrng.egg-info/SOURCES.txt deleted file mode 100644 index 9b753ae..0000000 --- a/qrng.egg-info/SOURCES.txt +++ /dev/null @@ -1,7 +0,0 @@ -README.md -setup.py -qrng/__init__.py -qrng.egg-info/PKG-INFO -qrng.egg-info/SOURCES.txt -qrng.egg-info/dependency_links.txt -qrng.egg-info/top_level.txt \ No newline at end of file diff --git a/qrng.egg-info/dependency_links.txt b/qrng.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/qrng.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/qrng.egg-info/top_level.txt b/qrng.egg-info/top_level.txt deleted file mode 100644 index a3eb737..0000000 --- a/qrng.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -qrng diff --git a/qrng/__init__.py b/qrng/__init__.py index 835bdeb..331747b 100644 --- a/qrng/__init__.py +++ b/qrng/__init__.py @@ -1,5 +1,3 @@ -name = "qrng" - import qiskit from qiskit import IBMQ import math @@ -7,14 +5,20 @@ _circuit = None _bitCache = '' -def set_provider_as_IBMQ(token): - global provider - if token == '': - provider = qiskit.BasicAer - else: - IBMQ.save_account(token) - IBMQ.load_account() - provider = IBMQ.get_provider('ibm-q') +def set_provider_as_IBMQ(token: str = None): + """ + Sets the backend provider to IBMQ with the given account token. Will fall back to a local (simulated) provider if no token is given. + + Parameters: + token (string): Account token on IBMQ. If no token is given, will fall back to a local provider. + """ + global provider + if token == None or '': + provider = qiskit.BasicAer + else: + IBMQ.save_account(token) + IBMQ.load_account() + provider = IBMQ.get_provider('ibm-q') def _set_qubits(n): global _circuit @@ -26,14 +30,20 @@ def _set_qubits(n): _set_qubits(8) # Default Circuit is 8 Qubits -def set_backend(b = 'qasm_simulator'): +def set_backend(backend: str = 'qasm_simulator'): + """ + Sets the backend to one of the provider's available backends (quantum computers/simulators). + + Parameters: + backend (string): Codename for the backend. If no backend is given, a default (simulated) backend will be used. + """ global _backend global provider - available_backends = provider.backends(b, filters = lambda x: x.status().operational == True) - if (b is not '') and (b in str(available_backends)): - _backend = provider.get_backend(b) + available_backends = provider.backends(backend, filters = lambda x: x.status().operational == True) + if (backend != '') and (backend in str(available_backends)): + _backend = provider.get_backend(backend) else: - print(str(b)+' is not available. Backend is set to qasm_simulator.') + print(str(backend)+' is not available. Backend is set to qasm_simulator.') _backend = qiskit.BasicAer.get_backend('qasm_simulator') _set_qubits(_backend.configuration().n_qubits) @@ -50,8 +60,13 @@ def _request_bits(n): job = qiskit.execute(_circuit, _backend, shots=1) _bitCache += _bit_from_counts(job.result().get_counts()) -# Returns a random n-bit string by popping n bits from bitCache. -def get_bit_string(n): +def get_bit_string(n: int) -> str: + """ + Returns a random n-bit bitstring. + + Parameters: + n (int): Account token on IBMQ. If no token is given, will fall back to a local provider. + """ global _bitCache if len(_bitCache) < n: _request_bits(n-len(_bitCache)) @@ -59,37 +74,54 @@ def get_bit_string(n): _bitCache = _bitCache[n:] return bitString -# Returns a random integer between and including [min, max]. # Running time is probabalistic but complexity is still O(n) -def get_random_int(min,max): +def get_random_int(min: int, max: int) -> int: + """ + Returns a random int from [min, max] (bounds are inclusive). + + Parameters: + min (int): The minimum possible returned integer. + max (int): The maximum possible returned integer. + """ delta = max-min n = math.floor(math.log(delta,2))+1 result = int(get_bit_string(n),2) while(result > delta): result = int(get_bit_string(n),2) - return result+min + result += min + return result # def getRandomIntEntaglement(min,max): -# Returns a random 32 bit integer -def get_random_int32(): +def get_random_int32() -> int: + """Returns a uniformly random 32 bit integer.""" return int(get_bit_string(32),2) -# Returns a random 64 bit integer -def get_random_int64(): +def get_random_int64() -> int: + """Returns a uniformly random 64 bit integer.""" return int(get_bit_string(64),2) -# Returns a random float from a uniform distribution in the range [min, max). -def get_random_float(min,max): - # Get random float from [0,1) +def get_random_float(min: float = 0, max: float = 1) -> float: + """ + Returns a uniformly random single-precision float from the range [min,max). + + Parameters: + min (float): The minimum possible returned float (inclusive). Default is 0.0 + max (float): The maximum possible returned float (exclusive). Default is 1.0 + """ unpacked = 0x3F800000 | get_random_int32() >> 9 packed = struct.pack('I',unpacked) value = struct.unpack('f',packed)[0] - 1.0 return (max-min)*value+min # Scale float to given range -# Returns a random double from a uniform distribution in the range [min, max). -def get_random_double(min,max): - # Get random double from [0,1) +def get_random_double(min: float = 0, max: float = 1) -> float: + """ + Returns a uniformly random double-precision float from the range [min,max). + + Parameters: + min (float): The minimum possible returned double (inclusive). Default is 0.0 + max (float): The maximum possible returned double (exclusive). Default is 1.0 + """ unpacked = 0x3FF0000000000000 | get_random_int64() >> 12 packed = struct.pack('Q',unpacked) value = struct.unpack('d',packed)[0] - 1.0 @@ -97,17 +129,34 @@ def get_random_double(min,max): # Returns a random complex with both real and imaginary parts # from the given ranges. If no imaginary range specified, real range used. -def get_random_complex_rect(r1,r2,i1=None,i2=None): - re = get_random_float(r1,r2) - if i1 == None or i2 == None: - im = get_random_float(r1,r2) - else: - im = get_random_float(i1,i2) +def get_random_complex_rect(real_min: float = 0, real_max: float = 0, img_min: float | None = None, img_max: float | None = None) -> complex: + """ + Returns a random complex number with: + Real-part: a uniformly sampled single-precision float from the range [real_min,real_max). + Imaginary-part: a uniformly sampled single-precision float from the range [img_min,img_max). + + Parameters: + real_min (float): The minimum possible real component (inclusive). Default is 0. + real_max (float): The maximum possible real component (exclusive). Default is 1. + img_min (float): The minimum possible imaginary component (inclusive). If unspecified, will default to real_min. + img_max (float): The maximum possible imaginary component (exclusive). If unspecified, will default to real_max. + """ + if img_min is None: + img_min = real_min + if img_max is None: + img_max = real_max + re = get_random_float(real_min,real_max) + im = get_random_float(img_min,img_min) return re+im*1j -# Returns a random complex in rectangular form from a given polar range. -# If no max angle given, [0,2pi) used. -def get_random_complex_polar(r,theta=2*math.pi): +def get_random_complex_polar(r: float = 1, theta: float = 2*math.pi) -> complex: + """ + Returns a random complex uniformly sampled from an arc sweeping across the complex plane, starting at theta = 0. + + Parameters: + r (float): The radius of the arc being sampled. Default is 1. + theta (float): The ending angle of the arc. + """ r0 = r * math.sqrt(get_random_float(0,1)) theta0 = get_random_float(0,theta) return r0*math.cos(theta0)+r0*math.sin(theta0)*1j diff --git a/qrng/__pycache__/__init__.cpython-37.pyc b/qrng/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 0307f751e8039c34360f6998b40749cadf523080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3619 zcmcIn&vP5M6$Y@o$n|vc9gO!0;X16 z?ur1YC?0B>8M((Edh3xq=GN(-v)7(<>p7=>4@=SdkxM(%ogv;^JYa$M-uFI$j}{hc z4A0<~xBvM5GGqUum($0C@(F(CpJ*hDnB-EVJmQdE%KIV`yzKKL&)NLQmm&_NA6H}` zE3a5ol~ox+hANbE#~kC|mh-ayibr#DK`z2llS^_La$c^;E0A@0RW=|OX`KG*$FI|yuDR1v;gT3H#U492W4Jn?n=DUSI&{_8cyJxK? zFZ?Hue*Lsy9Zns1NRp3R_?b;KBY4vjdfBo)9*gXj^~U~)O|WZd!2}Z^D^g5gl?*F* zE$w68%OKh5zdvYJi^?D|y~Gybqu3;!pDA60`#L{Jq|%y}is~jlQ0=(W$%mPZ>S-R! z*Kb{A+o!{uJPK^yQ`y%{hnV@z*4D?{zc)&o?ccnNGo{ym5ocyM-u^VtyQx}#tdj$^ z{XEw_vmbZV_TaPDr`zQIcDtQqiEXzx_P;C|=FAf9*t97mgaG4UAVMCB8V|Xq*IA%w z=j5jg)W=XP8*>WG5r-z6CZKsEJ`xiV`_>-^Bkls{k1J&_Qcoe{t!7mR_(rt!bQouL z*#As*6JwQ*R<_dEAZ&3u>sp+S*-CV0NO5gkzi zSf!Y6lgoqQPGZefbW9zs@fxq=rx($8LIExo2eIk5P0}BxvCZ|&`*Se)2S%1KF`JO0 zC!F-A(x1v;Dl34~dnWWR!~2HWVIZQjkJHS4hb{hV#V z*&5d03&vb75soZwT!%779Y%Gh=ZI@& zR5a(_4w7yjRY*O&bK;V>;`%?h*Y2xy2ZJ+pvV_n~*NJsM&w3{mx#+4Jc|Nu$>#%6> z4bwEMS`mAkh*86lz~NmBN00eq_W659!UlU4D{NH?>HXC^@@#15M&7tKVdMD;BKZ-E!@>IV zk`DaV3GLbihbYhN=GHXph2M|uZsd1VlInR3D1t8%X?Kf2$5~gE1X5Lpsxt(0T%!SV z1 zM;s^-tul#T;iW3mZ{u5Tsir7*K8M{rvl?Z4F{z8Lb^sFN%nvbhN_BO<45|a*zmL8S z?Uf#?;&Z75OS3hG^nu&)BLwpajyfq;8ItHB#U9FlAB!XZ@aD)LiJq^2e!hRO@tncJ zR;Py}RbiRhK)(e&3SOjnt|KqayM>oz*6pbo6kb2c(8PyPAXRE(=dFH+rc>C<#__rH z6CjW%1$^KMtfr2Jp~#UN6#5mee~9-Eb)G&{s}96O_mmCz0nd)O4q?8zsz%Kx(Ly}N%nv+M>fdp55#EIxom zBAdrJsUEUNlwCeXS<)$uobs_Jk=2Qi!3`!W$Ue%LP%!cv;4+uRYAa#vtA{7fd;X;0 zFC0R<_%fb^gH@69Yh zR)a23z2Yc9bp}M+F1MofC4KbugLIa`ZB`#Ow|LrlNsVTAD8_)NHY{Z_jx!MhPe7) Q3w>y{a30b}&s?qc9}Erp-~a#s diff --git a/setup.py b/setup.py index ab78d18..0aac1e8 100644 --- a/setup.py +++ b/setup.py @@ -5,13 +5,13 @@ setuptools.setup( name="qrng", - version="0.1.2", + version="0.1.3", author="Ozaner Hansha", author_email="ozanerhansha@gmail.com", description="A Quantum Random Number Generator using IBM's Qiskit", long_description=long_description, long_description_content_type="text/markdown", - url="https://github.com/ozanerhansha/qRNG", + url="https://github.com/ozaner/qRNG", packages=setuptools.find_packages(), py_modules = ['qrng'], classifiers=[