From 297e438fba9c34712d91b23856ee7f5aa32e356f Mon Sep 17 00:00:00 2001 From: Philipp Rehner Date: Tue, 28 Apr 2026 22:07:21 +0200 Subject: [PATCH] Add `EPSILON0` and `KE` as additional constants --- CHANGELOG.md | 1 + si-units/CHANGELOG.md | 1 + si-units/docs/derived.md | 2 ++ si-units/src/lib.rs | 8 ++++++++ si-units/src/si_units/__init__.py | 4 ++++ si-units/src/si_units/_core.pyi | 2 ++ src/lib.rs | 9 +++++++++ 7 files changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e06b7a..ae8e147 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added implementations for trigonometric funtions for `Angle` with `T: DualNum` when the `num-dual` feature is active. [#105](https://github.com/itt-ustutt/quantity/pull/105) - Added `ATM` and `POISE` as additional units for pressure and viscosity. +- Added `EPSILON0` and `KE` as additional constants. [#113](https://github.com/itt-ustutt/quantity/pull/113) ## [0.13.0] - 2026-01-06 ### Changed diff --git a/si-units/CHANGELOG.md b/si-units/CHANGELOG.md index 9ebb111..5f72875 100644 --- a/si-units/CHANGELOG.md +++ b/si-units/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added `ATM` and `POISE` as additional units for pressure and viscosity. - Added `sum` for `SIObject`s that can be summed. [#111](https://github.com/itt-ustutt/quantity/pull/111) +- Added `EPSILON0` and `KE` as additional constants. [#113](https://github.com/itt-ustutt/quantity/pull/113) ### Fixed - Fixed the String representation of non-scalar mass quantities. [#111](https://github.com/itt-ustutt/quantity/pull/111) diff --git a/si-units/docs/derived.md b/si-units/docs/derived.md index 76fb412..5cda101 100644 --- a/si-units/docs/derived.md +++ b/si-units/docs/derived.md @@ -47,6 +47,8 @@ of quantities is unique, they do not appear in formatted outputs. | -------- | ---------------------- | ------------------------- | ------------------------------------------------------------------- | | G | Gravitational constant | $G$ | $6.6743\times 10^{-11}~\frac{\text{m}^3}{\text{kg}\cdot\text{s}^2}$ | | RGAS | Ideal gas constant | $R=N_\text{Av}k_\text{B}$ | $8.31446261815324~\frac{\text{J}}{\text{mol}\cdot\text{K}}$ | +| EPSILON0 | Electric constant | $\varepsilon_0$ | $8.8541878188e-12~\frac{\text{F}}{\text{m}}$ | +| KE | Coulomb constant | $k_\text{e} = \frac{1}{4\pi\varepsilon_0}$ | $8987551786.1708~\frac{\text{m}}{\text{F}}$ | ### Example diff --git a/si-units/src/lib.rs b/si-units/src/lib.rs index c12732a..22a7bb4 100644 --- a/si-units/src/lib.rs +++ b/si-units/src/lib.rs @@ -7,6 +7,7 @@ use pyo3::exceptions::PyRuntimeError; use pyo3::prelude::*; use pyo3::types::{PyFloat, PyNotImplemented}; use pyo3::{PyErr, PyTypeInfo}; +use std::f64::consts::FRAC_1_PI; use thiserror::Error; mod si_unit; @@ -537,6 +538,13 @@ pub fn _core(m: &Bound<'_, PyModule>) -> PyResult<()> { add_constant(m, "G", 6.6743e-11, SIUnit([3, -1, -2, 0, 0, 0, 0]))?; let rgas = 1.380649e-23 * 6.02214076e23; add_constant(m, "RGAS", rgas, _JOULE_PER_MOL_AND_KELVIN)?; + add_constant(m, "EPSILON0", 8.8541878188e-12, _FARAD / _METER)?; + add_constant( + m, + "KE", + FRAC_1_PI / (4.0 * 8.8541878188e-12), + _METER / _FARAD, + )?; m.add("QUECTO", QUECTO)?; m.add("RONTO", RONTO)?; diff --git a/si-units/src/si_units/__init__.py b/si-units/src/si_units/__init__.py index 4da6b2a..5abfbd0 100644 --- a/si-units/src/si_units/__init__.py +++ b/si-units/src/si_units/__init__.py @@ -69,6 +69,8 @@ MINUTE, G, RGAS, + EPSILON0, + KE, QUECTO, RONTO, YOCTO, @@ -147,6 +149,8 @@ "MINUTE", "G", "RGAS", + "EPSILON0", + "KE", "QUECTO", "RONTO", "YOCTO", diff --git a/si-units/src/si_units/_core.pyi b/si-units/src/si_units/_core.pyi index 8dee34d..00c8eaf 100644 --- a/si-units/src/si_units/_core.pyi +++ b/si-units/src/si_units/_core.pyi @@ -254,6 +254,8 @@ LITER: Final[SIObject] MINUTE: Final[SIObject] G: Final[SIObject] RGAS: Final[SIObject] +EPSILON0: Final[SIObject] +KE: Final[SIObject] QUECTO: Final[float] RONTO: Final[float] YOCTO: Final[float] diff --git a/src/lib.rs b/src/lib.rs index 8f3ff45..67aff06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -68,6 +68,8 @@ //! -|-|-|- //! [G] | Gravitational constant | $G$ | $6.6743\\times 10^{-11}\\,\\frac{\text{m}^3}{\text{kg}\cdot\text{s}^2}$ //! [RGAS] | Ideal gas constant | $R=N_\text{Av}k_\text{B}$ | $8.31446261815324\\,\\frac{\text{J}}{\text{mol}\\cdot\text{K}}$ +//! [EPSILON0] | Electric constant | $\varepsilon_0$ | $8.8541878188e-12~\frac{\text{F}}{\text{m}}$ +//! [KE] | Coulomb constant | $k_\text{e} = \frac{1}{4\pi\varepsilon_0}$ | $8987551786.1708~\frac{\text{m}}{\text{F}}$ //! //! ## Prefixes //! @@ -143,6 +145,7 @@ #![warn(clippy::all)] #[cfg(feature = "ndarray")] use ndarray::{Array, ArrayBase, Data, Dimension}; +use std::f64::consts::FRAC_1_PI; use std::marker::PhantomData; use std::ops::{Add, Deref, Div, Mul, Neg, Sub}; @@ -556,6 +559,12 @@ pub const CLIGHT: Velocity = Quantity(299792458.0, PhantomData); pub const KCD: Quantity> = Quantity(683.0, PhantomData); /// Gravitational constant $\\left(G=6.6743\\times 10^{-11}\\,\\frac{\text{m}^3}{\text{kg}\cdot\text{s}^2}\\right)$ pub const G: Quantity> = Quantity(6.6743e-11, PhantomData); +/// Electric constant $\\left(\\varepsilon_0=8.8541878188\times 10^{-12}\\,\\frac{\text{F}}{\text{m}}\\right)$ +pub const EPSILON0: Quantity> = + Quantity(8.8541878188e-12, PhantomData); +/// Coulomb constant $\\left(k_\text{e}=\frac{1}{4\pi\varepsilon_0}=8987551786.1708\\,\\frac{\text{m}}{\text{F}}\\right)$ +pub const KE: Quantity> = + Quantity(FRAC_1_PI / (4.0 * 8.8541878188e-12), PhantomData); /// Prefix quecto $\\left(\text{q}=10^{-30}\\right)$ pub const QUECTO: f64 = 1e-30;