B
    [j                 @   s   d Z ddlmZ ddlmZmZmZmZ dgZddl	m
Z
mZmZ ddlmZmZmZ eee Zeed ed  eed	   Zeee ed ed   ZG d
d de
ZdS )z
**Contains**

* Medium
    )division)secondmeterkilogramampereMedium)Symbolsympifysqrt)speed_of_lightu0e0         c                   s   e Zd ZdZd fdd	Zedd Zedd Zed	d
 Zedd Z	edd Z
dd Zdd Zdd Zdd Zdd Z  ZS )r   a5  
    This class represents an optical medium. The prime reason to implement this is
    to facilitate refraction, Fermat's principle, etc.

    An optical medium is a material through which electromagnetic waves propagate.
    The permittivity and permeability of the medium define how electromagnetic
    waves propagate in it.


    Parameters
    ==========

    name: string
        The display name of the Medium.

    permittivity: Sympifyable
        Electric permittivity of the space.

    permeability: Sympifyable
        Magnetic permeability of the space.

    n: Sympifyable
        Index of refraction of the medium.


    Examples
    ========

    >>> from sympy.abc import epsilon, mu
    >>> from sympy.physics.optics import Medium
    >>> m1 = Medium('m1')
    >>> m2 = Medium('m2', epsilon, mu)
    >>> m1.intrinsic_impedance
    149896229*pi*kilogram*meter**2/(1250000*ampere**2*second**3)
    >>> m2.refractive_index
    299792458*meter*sqrt(epsilon*mu)/second


    References
    ==========

    .. [1] http://en.wikipedia.org/wiki/Optical_medium

    Nc                s
  t t| | |}t||_t||_t||_|d k	r|d kr`|d kr`|d td |j  |_|d kr|d kr|d td |j  |_|d kr|d krt|tt	|j|j   dkrt
dnD|d k	r|d k	rtt	||  |_n |d kr|d krt|_t|_|S )Nr   gư>zValues are not consistent.)superr   __new__r	   _permittivity_permeabilityZ_ncabsr
   
ValueError_e0mksa_u0mksa)clsnamepermittivitypermeabilitynobj)	__class__ :lib/python3.7/site-packages/sympy/physics/optics/medium.pyr   D   s$    


 
zMedium.__new__c             C   s   t | j| j S )az  
        Returns intrinsic impedance of the medium.

        The intrinsic impedance of a medium is the ratio of the
        transverse components of the electric and magnetic fields
        of the electromagnetic wave travelling in the medium.
        In a region with no electrical conductivity it simplifies
        to the square root of ratio of magnetic permeability to
        electric permittivity.

        Examples
        ========

        >>> from sympy.physics.optics import Medium
        >>> m = Medium('m')
        >>> m.intrinsic_impedance
        149896229*pi*kilogram*meter**2/(1250000*ampere**2*second**3)

        )r
   r   r   )selfr!   r!   r"   intrinsic_impedanceX   s    zMedium.intrinsic_impedancec             C   s   dt | j| j  S )z
        Returns speed of the electromagnetic wave travelling in the medium.

        Examples
        ========

        >>> from sympy.physics.optics import Medium
        >>> m = Medium('m')
        >>> m.speed
        299792458*meter/second

           )r
   r   r   )r#   r!   r!   r"   speedo   s    zMedium.speedc             C   s
   t | j S )z
        Returns refractive index of the medium.

        Examples
        ========

        >>> from sympy.physics.optics import Medium
        >>> m = Medium('m')
        >>> m.refractive_index
        1

        )r   r&   )r#   r!   r!   r"   refractive_index   s    zMedium.refractive_indexc             C   s   | j S )a  
        Returns electric permittivity of the medium.

        Examples
        ========

        >>> from sympy.physics.optics import Medium
        >>> m = Medium('m')
        >>> m.permittivity
        625000*ampere**2*second**4/(22468879468420441*pi*kilogram*meter**3)

        )r   )r#   r!   r!   r"   r      s    zMedium.permittivityc             C   s   | j S )a  
        Returns magnetic permeability of the medium.

        Examples
        ========

        >>> from sympy.physics.optics import Medium
        >>> m = Medium('m')
        >>> m.permeability
        pi*kilogram*meter/(2500000*ampere**2*second**2)

        )r   )r#   r!   r!   r"   r      s    zMedium.permeabilityc             C   s    ddl m} t| j|| j S )Nr   )sstr)Zsympy.printingr(   type__name__args)r#   r(   r!   r!   r"   __str__   s    zMedium.__str__c             C   s   | j |j k S )zC
        Compares based on refractive index of the medium.
        )r'   )r#   otherr!   r!   r"   __lt__   s    zMedium.__lt__c             C   s
   | |k  S )Nr!   )r#   r-   r!   r!   r"   __gt__   s    zMedium.__gt__c             C   s   | j |j kS )N)r'   )r#   r-   r!   r!   r"   __eq__   s    zMedium.__eq__c             C   s
   | |k S )Nr!   )r#   r-   r!   r!   r"   __ne__   s    zMedium.__ne__)NNN)r*   
__module____qualname____doc__r   propertyr$   r&   r'   r   r   r,   r.   r/   r0   r1   __classcell__r!   r!   )r    r"   r      s   -N)r4   Z
__future__r   Zsympy.physics.unitsr   r   r   r   __all__Zsympyr   r	   r
   r   r   r   Z
convert_tor   r   r   r   r!   r!   r!   r"   <module>   s   "