# Path: skrf/constants.py
# INF = 1e99
# ALMOST_ZERO = 1e-12
# ZERO = 1e-4
# ONE = 1.0 + 1/1e14
# LOG_OF_NEG = -100
# K_BOLTZMANN = 1.38064852e-23
# T0 = 290.
# S_DEFINITIONS = ['power', 'pseudo', 'traveling']
# S_DEF_DEFAULT = 'power'
# def to_meters(d: NumberLike, unit: str = 'm', v_g: float = c) -> NumberLike:


from scipy.constants import epsilon_0, mu_0
from .media import Media
from ..data import materials
from ..constants import NumberLike
from typing import Union, TYPE_CHECKING
from numpy import real, sqrt, ones
    from .. frequency import Frequency
    mu_r : number, array-like
        complex relative permeability. negative imaginary is lossy.
    ep_loss_tan : None, number, array-like
        electric loss tangent (of the permativity).
        If not None, imag(ep_r) is ignored.
    mu_loss_tan : None, number, array-like
        magnetic loss tangent (of the permeability).
        If not None, imag(mu_r) is ignored.
    rho : number, array-like, string or None
        resistivity (ohm-m) of the conductor walls. If array-like
        must be same length as frequency. if str, it must be a key in
        :data:`skrf.data.materials`.
        Default is None (lossless).
    \*args, \*\*kwargs : arguments and keyword arguments


    Examples
    --------
    >>> from skrf.media.freespace import Freespace
    >>> from skrf.frequency import Frequency
    >>> f = Frequency(75,110,101,'ghz')
    >>> Freespace(frequency=f, ep_r=11.9)
    >>> Freespace(frequency=f, ep_r=11.9-1.1j)
    >>> Freespace(frequency=f, ep_r=11.9, ep_loss_tan=.1)
    >>> Freespace(frequency=f, ep_r=11.9-1.1j, mu_r = 1.1-.1j)

    """

    def __init__(self, frequency: Union['Frequency', None] = None,
                 z0: Union[NumberLike, None] = None,

# Path: skrf/constants.py
# INF = 1e99
# ALMOST_ZERO = 1e-12
# ZERO = 1e-4
# ONE = 1.0 + 1/1e14
# LOG_OF_NEG = -100
# K_BOLTZMANN = 1.38064852e-23
# T0 = 290.
# S_DEFINITIONS = ['power', 'pseudo', 'traveling']
# S_DEF_DEFAULT = 'power'
# def to_meters(d: NumberLike, unit: str = 'm', v_g: float = c) -> NumberLike:


# Path: skrf/media/freespace.py
from scipy.constants import epsilon_0, mu_0
from .media import Media
from ..data import materials
from ..constants import NumberLike
from typing import Union, TYPE_CHECKING
from numpy import real, sqrt, ones
    from .. frequency import Frequency

    mu_r : number, array-like
        complex relative permeability. negative imaginary is lossy.
    ep_loss_tan : None, number, array-like
        electric loss tangent (of the permativity).
        If not None, imag(ep_r) is ignored.
    mu_loss_tan : None, number, array-like
        magnetic loss tangent (of the permeability).
        If not None, imag(mu_r) is ignored.
    rho : number, array-like, string or None
        resistivity (ohm-m) of the conductor walls. If array-like
        must be same length as frequency. if str, it must be a key in
        :data:`skrf.data.materials`.
        Default is None (lossless).
    \*args, \*\*kwargs : arguments and keyword arguments


    Examples
    --------
    >>> from skrf.media.freespace import Freespace
    >>> from skrf.frequency import Frequency
    >>> f = Frequency(75,110,101,'ghz')
    >>> Freespace(frequency=f, ep_r=11.9)
    >>> Freespace(frequency=f, ep_r=11.9-1.1j)
    >>> Freespace(frequency=f, ep_r=11.9, ep_loss_tan=.1)
    >>> Freespace(frequency=f, ep_r=11.9-1.1j, mu_r = 1.1-.1j)

    """

    def __init__(self, frequency: Union['Frequency', None] = None,
                 z0: Union[NumberLike, None] = None,

                 ep_r: NumberLike = 1+0j, mu_r: NumberLike = 1+0j,