From d04780b97c2ac8f4de48406dc84d804c01dd9f44 Mon Sep 17 00:00:00 2001 From: sadiqebrahim Date: Sat, 29 Oct 2022 21:34:05 +0530 Subject: [PATCH 1/8] Added Builtin Voltage --- electronics/builtin_voltage.py | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 electronics/builtin_voltage.py diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py new file mode 100644 index 000000000000..35b9bb9add0f --- /dev/null +++ b/electronics/builtin_voltage.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from math import log + +Q = 1.6021e-19 # ELECTRON CHARGE (units = C) +K = 1.380649e-23 # BOLTZMAN'S CONSTANT (unit = kg m^2 s^-2 K^-1) +T = 300 # TEMPERATURE (unit = K) + + +def builtin_voltage( + donor_conc: float, # donor concentration + acceptor_conc: float, # acceptor concentration + intrinsic_conc: float, # intrinsic concentration +) -> float: + """ + This function can calculate the Builtin Voltage of a pn junction diode. + This is calculated from the given three values. + Examples - + >>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10) + 0.8334098736308577 + >>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200) + Traceback (most recent call last): + ... + ValueError: Donor concentration should be positive + >>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200) + Traceback (most recent call last): + ... + ValueError: Acceptor concentration should be positive + >>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0) + Traceback (most recent call last): + ... + ValueError: Intrinsic concentration should be positive + >>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000) + Traceback (most recent call last): + ... + ValueError: Donor concentration should be greater than intrinsic concentration + >>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000) + Traceback (most recent call last): + ... + ValueError: Acceptor concentration should be greater than intrinsic concentration + """ + + if donor_conc <= 0: + raise ValueError("Donor concentration should be positive") + elif acceptor_conc <= 0: + raise ValueError("Acceptor concentration should be positive") + elif intrinsic_conc <= 0: + raise ValueError("Intrinsic concentration should be positive") + elif donor_conc <= intrinsic_conc: + raise ValueError( + "Donor concentration should be greater than intrinsic concentration" + ) + elif acceptor_conc <= intrinsic_conc: + raise ValueError( + "Acceptor concentration should be greater than intrinsic concentration" + ) + else: + return K * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / Q + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 736147bb087a0890ce812a3c44a03dd98fe805c8 Mon Sep 17 00:00:00 2001 From: sadiqebrahim <75269485+sadiqebrahim@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:55:39 +0530 Subject: [PATCH 2/8] Update builtin_voltage.py --- electronics/builtin_voltage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index 35b9bb9add0f..6e7668f573e4 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -17,7 +17,7 @@ def builtin_voltage( This is calculated from the given three values. Examples - >>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10) - 0.8334098736308577 + 0.833370010652644 >>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200) Traceback (most recent call last): ... @@ -55,7 +55,7 @@ def builtin_voltage( "Acceptor concentration should be greater than intrinsic concentration" ) else: - return K * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / Q + return K * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / Q[0] if __name__ == "__main__": From 400dc60452429b2d51cc10a7f9070b42f44a176a Mon Sep 17 00:00:00 2001 From: sadiqebrahim <75269485+sadiqebrahim@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:56:23 +0530 Subject: [PATCH 3/8] Update electronics/builtin_voltage.py Co-authored-by: Caeden Perelli-Harris --- electronics/builtin_voltage.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index 6e7668f573e4..f6784395bba2 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -1,9 +1,10 @@ from __future__ import annotations from math import log +from scipy.constants import physical_constants, Boltzmann -Q = 1.6021e-19 # ELECTRON CHARGE (units = C) -K = 1.380649e-23 # BOLTZMAN'S CONSTANT (unit = kg m^2 s^-2 K^-1) +Q = physical_constants['electron volt'] # ELECTRON CHARGE (units = C) +K = Boltzmann # BOLTZMAN'S CONSTANT (unit = kg m^2 s^-2 K^-1) T = 300 # TEMPERATURE (unit = K) From 4fa61ec535ee99a7b20f1c59243ad02ff057986e Mon Sep 17 00:00:00 2001 From: sadiqebrahim <75269485+sadiqebrahim@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:56:30 +0530 Subject: [PATCH 4/8] Update electronics/builtin_voltage.py Co-authored-by: Caeden Perelli-Harris --- electronics/builtin_voltage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index f6784395bba2..f0fb4dc5476b 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -1,4 +1,3 @@ -from __future__ import annotations from math import log from scipy.constants import physical_constants, Boltzmann From 1fb06aae47a6fad691f71d6af317ceeed0f6faf6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 29 Oct 2022 16:27:48 +0000 Subject: [PATCH 5/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- electronics/builtin_voltage.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index f0fb4dc5476b..8b388fb14dd3 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -1,8 +1,8 @@ - from math import log -from scipy.constants import physical_constants, Boltzmann -Q = physical_constants['electron volt'] # ELECTRON CHARGE (units = C) +from scipy.constants import Boltzmann, physical_constants + +Q = physical_constants["electron volt"] # ELECTRON CHARGE (units = C) K = Boltzmann # BOLTZMAN'S CONSTANT (unit = kg m^2 s^-2 K^-1) T = 300 # TEMPERATURE (unit = K) From 6655b0458471a0db7f01ccaee6ccace3db2d1d23 Mon Sep 17 00:00:00 2001 From: sadiqebrahim <75269485+sadiqebrahim@users.noreply.github.com> Date: Sat, 29 Oct 2022 22:10:00 +0530 Subject: [PATCH 6/8] Apply suggestions from code review Co-authored-by: Caeden Perelli-Harris --- electronics/builtin_voltage.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index 8b388fb14dd3..c0ac8c85eae5 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -2,8 +2,6 @@ from scipy.constants import Boltzmann, physical_constants -Q = physical_constants["electron volt"] # ELECTRON CHARGE (units = C) -K = Boltzmann # BOLTZMAN'S CONSTANT (unit = kg m^2 s^-2 K^-1) T = 300 # TEMPERATURE (unit = K) @@ -55,7 +53,7 @@ def builtin_voltage( "Acceptor concentration should be greater than intrinsic concentration" ) else: - return K * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / Q[0] + return Boltzmann * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / physical_constants["electron volt"][0] if __name__ == "__main__": From 9bf6332a4f807e1556ad46b2048523548bc2548c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 29 Oct 2022 16:40:50 +0000 Subject: [PATCH 7/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- electronics/builtin_voltage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py index c0ac8c85eae5..38fde4524d1a 100644 --- a/electronics/builtin_voltage.py +++ b/electronics/builtin_voltage.py @@ -53,7 +53,12 @@ def builtin_voltage( "Acceptor concentration should be greater than intrinsic concentration" ) else: - return Boltzmann * T * log((donor_conc * acceptor_conc) / intrinsic_conc**2) / physical_constants["electron volt"][0] + return ( + Boltzmann + * T + * log((donor_conc * acceptor_conc) / intrinsic_conc**2) + / physical_constants["electron volt"][0] + ) if __name__ == "__main__": From 00442aff2455395b1879f1f385178c178099584a Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 30 Oct 2022 12:41:19 +0100 Subject: [PATCH 8/8] Create elf.py --- hashes/elf.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 hashes/elf.py diff --git a/hashes/elf.py b/hashes/elf.py new file mode 100644 index 000000000000..e4bfcec22c22 --- /dev/null +++ b/hashes/elf.py @@ -0,0 +1,21 @@ +def elf_hash(data: str) -> int: + """ + Implementation of ElfHash Algorithm, a variant of PJW hash function. + + >>> elf_hash('lorem ipsum') + 253956621 + """ + hash_ = x = 0 + for letter in data: + hash_ = (hash_ << 4) + ord(letter) + x = hash_ & 0xF0000000 + if x != 0: + hash_ ^= x >> 24 + hash_ &= ~x + return hash_ + + +if __name__ == "__main__": + import doctest + + doctest.testmod()