ó
¡¼™\c           @   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 j e e ƒ Z e j e d e d e e d	 ƒ Z e j e e e d e d ƒ Z d e
 f d
 „  ƒ  YZ d S(   s   
**Contains**

* Medium
iÿÿÿÿ(   t   division(   t   secondt   metert   kilogramt   amperet   Medium(   t   Symbolt   sympifyt   sqrt(   t   speed_of_lightt   u0t   e0i   i   i   c           B   s˜   e  Z d  Z d d d d „ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   s6  
    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] https://en.wikipedia.org/wiki/Optical_medium

    c         C   s|  t  t |  ƒ j |  | ƒ } t | ƒ | _ t | ƒ | _ t | ƒ | _ | d  k	 r| d  k	 r‹ | d  k r‹ | d t d | j | _ n  | d  k	 rÂ | d  k rÂ | d t d | j | _ n  | d  k	 rx| d  k	 rxt	 | t t
 | j | j ƒ ƒ d k rt d ƒ ‚ qqxn_ | d  k	 rK| d  k	 rKt t
 | | ƒ | _ n- | d  k rx| d  k rxt | _ t | _ n  | S(   Ni   gíµ ÷Æ°>s   Values are not consistent.(   t   superR   t   __new__R   t   _permittivityt   _permeabilityt   _nt   Nonet   ct   absR   t
   ValueErrort   _e0mksat   _u0mksa(   t   clst   namet   permittivityt   permeabilityt   nt   obj(    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyR   D   s$    *	c         C   s   t  |  j |  j ƒ S(   sz  
        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   (   t   self(    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   intrinsic_impedanceX   s    c         C   sE   |  j  d k	 r6 |  j d k	 r6 d t |  j  |  j ƒ St |  j Sd S(   sM  
        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
        >>> m2 = Medium('m2', n=1)
        >>> m.speed == m2.speed
        True

        i   N(   R   R   R   R   R   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   speedo   s    c         C   s   t  |  j S(   s×   
        Returns refractive index of the medium.

        Examples
        ========

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

        (   R   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   refractive_index…   s    c         C   s   |  j  S(   s  
        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   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyR   •   s    c         C   s   |  j  S(   s  
        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   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyR   ¥   s    c         C   s=   d d l  m } t |  ƒ j d | |  j |  j |  j g ƒ S(   Niÿÿÿÿ(   t   sstrs   : (   t   sympy.printingR!   t   typet   __name__R   R   R   (   R   R!   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   __str__µ   s    c         C   s   |  j  | j  k  S(   sC   
        Compares based on refractive index of the medium.
        (   R    (   R   t   other(    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   __lt__º   s    c         C   s   |  | k  S(   N(    (   R   R&   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   __gt__À   s    c         C   s   |  j  | j  k S(   N(   R    (   R   R&   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   __eq__Ã   s    c         C   s   |  | k S(   N(    (   R   R&   (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   __ne__Æ   s    N(   R$   t
   __module__t   __doc__R   R   t   propertyR   R   R    R   R   R%   R'   R(   R)   R*   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyR      s   -				N(   R,   t
   __future__R    t   sympy.physics.unitsR   R   R   R   t   __all__t   sympyR   R   R   R	   R
   R   t
   convert_toR   R   R   R   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/optics/medium.pyt   <module>   s   "	'#