Source code for skrf.constants

"""
.. currentmodule:: skrf.constants

========================================
constants (:mod:`skrf.constants`)
========================================

This module contains constants, numerical approximations, and unit conversions

.. data:: c

    Velocity of light constant (from scipy)

.. data:: INF

    A very very large value (1e99)

.. data:: ONE

    1 + epsilon where epsilon is small. Used to avoid numerical error.

.. data:: ZERO

    0 + epsilon where epsilon is small. Used to avoid numerical error.

.. data:: K_BOLTZMANN

    Boltzmann constant (1.38064852e-23)

.. data:: S_DEFINITIONS

    S-parameter definition labels:
        - 'power' for power-waves definition,
        - 'pseudo' for pseudo-waves definition.
        - 'traveling' corresponds to the initial implementation.

.. data:: S_DEF_DEFAULT

    Default S-parameter definition: 'power', for power-wave definition.

.. data:: S_DEF_HFSS_DEFAULT

    Default S-parameter definition setting in HFSS: 'traveling' ("Generalized" in HFSS)

.. autosummary::
   :toctree: generated/

   to_meters

"""
from numbers import Number
from typing import Sequence, Union

import numpy as npy
from scipy.constants import c, inch, mil

# used as substitutes to handle mathematical singularities.
INF = 1e99
"""
High but not infinite value for numerical purposes.
"""

ALMOST_ZERO = 1e-12
"""
Very tiny but not zero value to handle mathematical singularities.
"""

ZERO = 1e-4
"""
A very small values, often used for numerical comparisons.
"""

ONE = 1.0 + 1/1e14
"""
Almost one but not one to handle mathematical singularities.
"""

LOG_OF_NEG = -100
"""
Very low but minus infinity value for numerical purposes.
"""

K_BOLTZMANN = 1.38064852e-23
"""
Boltzmann constant (1.38064852e-23)
"""

T0 = 290.
"""
Room temperature (kind of)
"""

EIG_COND = 1e-9
"""
Eigenvalue ratio compared to the maximum eigenvalue in :meth:`~skrf.mathFunctions.nudge_eig`.

EIG_COND * max(eigenvalue)
"""

EIG_MIN = 1e-12
"""
Minimum eigenvalue used in :meth:`~skrf.mathFunctions.nudge_eig`
"""

# S-parameter definition labels and default definition
S_DEFINITIONS = ['power', 'pseudo', 'traveling']
S_DEF_DEFAULT = 'power'
S_DEF_HFSS_DEFAULT = 'traveling'

FREQ_UNITS = {"Hz": 1.0, "kHz": 1e3, "MHz": 1e6, "GHz": 1e9, "THz": 1e12}

NumberLike = Union[Number, Sequence[Number], npy.ndarray]

global distance_dict
distance_dict = {
    'm': 1.,
    'cm': 1e-2,
    'mm': 1e-3,
    'um': 1e-6,
    'in': inch,
    'mil': mil,
    's': c,
    'us': 1e-6*c,
    'ns': 1e-9*c,
    'ps': 1e-12*c,
}


[docs] def to_meters(d: NumberLike, unit: str = 'm', v_g: float = c) -> NumberLike: """ Translate various units of distance into meters. Parameters ---------- d : number or array-like value(s) to convert unit : str the unit to that x is in: ['m','cm','um','in','mil','s','us','ns','ps'] v_g : float group velocity in m/s Returns ------- d_m : number of array-like distance in meters """ _distance_dict = { 'm': 1., 'cm': 1e-2, 'mm': 1e-3, 'um': 1e-6, 'in': inch, 'mil': mil, 's': v_g, 'us': 1e-6*v_g, 'ns': 1e-9*v_g, 'ps': 1e-12*v_g, } unit = unit.lower() try: return _distance_dict[unit]*d except KeyError as err: raise(ValueError('Incorrect unit')) from err