Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# konfigurasi pre commit
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v5.0.0
hooks:
- id: check-executables-have-shebangs
- id: check-toml
Expand All @@ -16,19 +16,19 @@ repos:
# contoh
# total = sum(angka := num for num in nums )
- repo: https://github.com/MarcoGorelli/auto-walrus
rev: v0.2.2
rev: 0.3.4
hooks:
- id: auto-walrus

# ruff adalah salah satu linter dan formatter kode
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.2.1
rev: v0.7.0
hooks:
- id: ruff
- id: ruff-format

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
rev: v1.12.1
hooks:
- id: mypy
args:
Expand Down
2 changes: 2 additions & 0 deletions OpenSeries/bilangan_istimewa.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,10 @@ def angka_segitiga(angka: int) -> Union[int, error.ErrorTipeData, error.Error]:
error.Error: jika angka negatif
error.ErrorTipeData: jika tipe data salah
"""
# jika tipe data dari angka tidak integer
if not isinstance(angka, int):
return error.ErrorTipeData(["int"])
# jika value dari angka diisi nilai negatif
if angka < 0:
return error.Error("angka tidak boleh negatif")
return angka * (angka + 1) // 2
74 changes: 72 additions & 2 deletions OpenSeries/fisika.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from OpenSeries.util import error as error
from typing import Union
from OpenSeries.util import constant


def kecepatan(
Expand Down Expand Up @@ -60,7 +61,7 @@ def gerak_lurus_beraturan(
kecepatan_awal: float, a: float, t: float
) -> Union[float, error.ErrorTipeData]:
"""
fungsi untuk menghitung jarak yang ditempuh oleh benda yang bergerak lurus beraturan
fungsi untuk menghitung jarak tempuh oleh benda yang bergerak lurus beraturan

Parameter:
kecepatan_awal (float): kecepatan awal (m/s)
Expand Down Expand Up @@ -143,7 +144,7 @@ def energi_potensial(
(float, int): hasil dari kalkulasi energei potensial
error.ErrorTipeData: error jika tipe data data salah
"""
# melakukan pengecekan apakah semua parameter memiliki tipe data dari float atau int
# melakukan pengecekan apakah semua parameter
if not all(isinstance(data, (float, int)) for data in [m, g, h]):
return error.ErrorTipeData(["float", "int"])
else:
Expand Down Expand Up @@ -268,3 +269,72 @@ def efek_doppler(
"frekuensi tidak positif, kecepatan sumber relatif lebih besar dari kecepatan gelombang dalam medium"
)
return doppler


def jumlah_partikel(
n: Union[int, float],
) -> Union[int, float, error.ErrorTipeData, error.Error]:
"""
Fungsi untuk melakukan kalkulasi
mencari jumlah partikel
berdasarkan persamaan N = n * N_a


parameter :
n (int, float) = jumlah mol (mol)

return :
N (int, float) = Jumlah Partikel
"""
if not isinstance(n, (float, int)):
return error.ErrorTipeData(["int", "float"])
if n < 0:
return error.Error("jumlah mol tidak positif")
N = n * constant.BILANGAN_AVOGADRO
return N


def jumlah_mol(
m: Union[int, float], m_r: Union[int, float]
) -> Union[int, float, error.ErrorTipeData, error.ErrorDibagiNol, error.Error]:
"""
fungsi untuk melakukan kalkulasi jumlah mol
berdasarkan persamaan n = m / Mr

parameter :
m (int, float) = massa (g)
m_r (int, float) = massa relatif/ massa molar (g/mol)

return :
n (int, float) = jumlah mol (mol)
"""
if not all(isinstance(data, (float, int)) for data in [m, m_r]):
return error.ErrorTipeData(["int", "float"])
if m_r == 0:
return error.ErrorDibagiNol()
if m < 0 or m_r < 0:
return error.Error("Tidak boleh negatif")
else:
n = m / m_r
return n


def massa_atom(
m_r: Union[int, float],
) -> Union[int, float, error.ErrorTipeData, error.Error]:
"""
Fungsi untuk melakukan kalkulasi massa atom
m_0 = m_r / Na.

parameter :
m_r (int, float) = massa molar(g/mol)

return :
m_0 = massa atom (sma)
"""
if not (isinstance(m_r, (float, int))):
return error.ErrorTipeData(["int", "float"])
if m_r < 0:
return error.Error("massa tidak boleh negatif")
m_0 = m_r / constant.BILANGAN_AVOGADRO
return m_0
2 changes: 2 additions & 0 deletions OpenSeries/matematika.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ def permutasi(nilai: int, r: int) -> Union[int, float, error.ErrorTipeData]:
faktorial_nilai = faktorial(nilai)
faktorial_nilai_r = faktorial(nilai - r)

# mengecek tipe data dari nilai faktorial
if isinstance(faktorial_nilai, int) and isinstance(faktorial_nilai_r, int):
return faktorial_nilai / faktorial_nilai_r
else:
Expand All @@ -268,6 +269,7 @@ def kombinasi(nilai: int, r: int) -> Union[int, float, error.ErrorTipeData]:
faktorial_r = faktorial(r)
faktorial_nilai_r = faktorial(nilai - r)

# mengecek nilai dari faktorial nilai
if (
isinstance(faktorial_nilai, int)
and isinstance(faktorial_r, int)
Expand Down
5 changes: 5 additions & 0 deletions OpenSeries/statistika.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ def entropy(
error.ErrorTipeData: error jika tipe data salah
error.Error: jika nilai label yang diberikan kosong
"""
# jika tipe data dari label bukan list
if not isinstance(label, (list)):
return error.ErrorTipeData(["list"])
# jika nilai di dalam list kosong
if not label:
return error.Error("label tidak boleh kosong")
# jika nilai di dalam list itu tidak int
if not all(isinstance(cek_nilai, int) for cek_nilai in label):
return error.ErrorTipeData(["int"])
_, count = np.unique(label, return_counts=True)
Expand All @@ -46,8 +49,10 @@ def standar_deviasi(
error.ErrorTipeData: error jika tipe data salah
error.Error: jika vektor yang diberikan kosong
"""
# cek parameter vektor jika tidak bertipe data np.ndarray
if not isinstance(vektor, np.ndarray):
return error.ErrorTipeData(["numpy array"])
# cek jika nilai vektor adalah 0
if len(vektor) == 0:
return error.Error("vektor tidak boleh kosong")

Expand Down
15 changes: 9 additions & 6 deletions OpenSeries/util/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@
# dan dikarakterisasi dalam berbagai cara
BILANGAN_EULER: float = 2.718281828459045235360

# konstanta plank, yang dilambangankan dengan h, yang merupakan konstanta fisika
# fundamental yang menghubungkan energi foton dengan frekuensinya, nilainya disini
# adalah 6.6261 × 10⁻³⁴ (joule per detik)
KONSTANTA_PLANCK = 6.6261 * pow(10, -34)

# variable ini juga mewakili dari konstanta planck, tetapi dinyatan dalam satuan
# elektron volt per detik (eV/s) nilainya adalah 4.1357 × 10⁻¹⁵ eV s⁻¹
KONSTANTA_PLANCK = 4.1357 * pow(10, -15)
KONSTANTA_PLANCK: float = 4.1357 * pow(10, -15)

# bilangan avogadro adalah bilangan yang menyatakan jumlah partikel dalam suatu
# zat dalam satuan partikel/mol
BILANGAN_AVOGADRO: float = 6.022 * pow(10, 23)

# Konstanta gas adalah konstanta yang muncul dari persamaan gas ideal dengan satuan J/K mol
KONSTANTA_GAS_IDEAL: float = 8.314472


# default error dari warna menggunakan kode ANSI escape
# merah
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
if platform.system == "windows":
core_require.append("pywin32")


install_require = [x.strip() for x in core_require if "git+" not in x]

# setup nama project
Expand Down
63 changes: 63 additions & 0 deletions testing/fisika_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,66 @@ def test_efek_doppler_nilai_negatif(self):
self.assertIsInstance(hasil, error.Error)
with self.assertRaises(error.Error):
raise hasil


class Testjumlah_partikel(unittest.TestCase):
def test_jumlah_partikel(self):
hasil = fisika.jumlah_partikel(15)
rounding_hasil = hasil
self.assertEqual(rounding_hasil, 9032999999999999536529408)

def test_jumlah_partikel_invalid_tipe_data(self):
hasil = fisika.jumlah_partikel("15")
self.assertIsInstance(hasil, error.ErrorTipeData)
with self.assertRaises(error.ErrorTipeData):
raise hasil

def test_jumlah_partikel_negatif(self):
hasil = fisika.jumlah_partikel(-15)
self.assertIsInstance(hasil, error.Error)
with self.assertRaises(error.Error):
raise hasil


class Testjumlah_mol(unittest.TestCase):
def test_jumlah_mol(self):
hasil = fisika.jumlah_mol(25, 5)
rounding_hasil = hasil
self.assertEqual(rounding_hasil, 5)

def test_jumlah_mol_invalid_tipe_data(self):
hasil = fisika.jumlah_mol("25", 5)
self.assertIsInstance(hasil, error.ErrorTipeData)
with self.assertRaises(error.ErrorTipeData):
raise hasil

def test_jumlah_mol_dibaginol(self):
hasil = fisika.jumlah_mol(25, 0)
self.assertIsInstance(hasil, error.ErrorDibagiNol)
with self.assertRaises(error.ErrorDibagiNol):
raise hasil

def test_jumlah_mol_invalid_negatif(self):
hasil = fisika.jumlah_mol(-25, 5)
self.assertIsInstance(hasil, error.Error)
with self.assertRaises(error.Error):
raise hasil


class Testmassa_atom(unittest.TestCase):
def test_massa_atom(self):
hasil = fisika.massa_atom(17 * pow(10, 23))
rounding_hasil = hasil
self.assertEqual(rounding_hasil, 2.8229823978744606)

def test_jumlah_massa_atom_tipe_data(self):
hasil = fisika.massa_atom("17")
self.assertIsInstance(hasil, error.ErrorTipeData)
with self.assertRaises(error.ErrorTipeData):
raise hasil

def test_jumlah_massa_invalid_negatif(self):
hasil = fisika.massa_atom(-17)
self.assertIsInstance(hasil, error.Error)
with self.assertRaises(error.Error):
raise hasil
Loading