ó
~9­\c           @  s°  d  Z  d d l m Z m Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 d d l m Z d d l m Z d d l m Z m Z d d l m Z d	 d
 l m Z m Z d d l m Z e a d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d e# f d „  ƒ  YZ$ d e f d „  ƒ  YZ% d e% f d  „  ƒ  YZ& d! e% f d" „  ƒ  YZ' d# e f d$ „  ƒ  YZ( d% e f d& „  ƒ  YZ) d' e) f d( „  ƒ  YZ* d) e) f d* „  ƒ  YZ+ d+ e) f d, „  ƒ  YZ, i e* d- 6e+ d. 6e, d/ 6Z- d0 „  Z. d1 „  Z/ d2 d3 „ Z0 d4 „  Z1 d5 „  Z2 d6 „  Z3 d7 „  Z4 d8 „  Z5 d9 „  Z6 d: „  Z7 d; „  Z8 d S(<   s  Plotting module for Sympy.

A plot is represented by the ``Plot`` class that contains a reference to the
backend and a list of the data series to be plotted. The data series are
instances of classes meant to simplify getting points and meshes from sympy
expressions. ``plot_backends`` is a dictionary with all the backends.

This module gives only the essential. For all the fancy stuff use directly
the backend. You can get the backend wrapper for every plot from the
``_backend`` attribute. Moreover the data series classes have various useful
methods like ``get_points``, ``get_segments``, ``get_meshes``, etc, that may
be useful if you wish to use another plotting library.

Especially if you need publication ready graphs and this module is not enough
for you - just get the ``_backend`` attribute and add whatever you want
directly to it. In the case of matplotlib (the common way to graph data in
python) just copy ``_backend.fig`` which is the figure and ``_backend.ax``
which is the axis and work on them as you would on any other matplotlib object.

Simplicity of code takes much greater importance than performance. Don't use it
if you care at all about performance. A new backend instance is initialized
every time you call ``show()`` and the old one is left to the garbage collector.
iÿÿÿÿ(   t   print_functiont   divisionN(   t   sympifyt   Exprt   Tuplet   Dummyt   Symbol(   t   import_module(   t   arity(   t   ranget   Callable(   t   is_sequencei   (   t   vectorized_lambdifyt   lambdify(   t   textplotc           C  s
   t  a d S(   s/   
    Disable show(). For use in the tests.
    N(   t   Falset   _show(    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt
   unset_show0   s    t   Plotc           B  s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s  The central class of the plotting module.

    For interactive work the function ``plot`` is better suited.

    This class permits the plotting of sympy expressions using numerous
    backends (matplotlib, textplot, the old pyglet module for sympy, Google
    charts api, etc).

    The figure can contain an arbitrary number of plots of sympy expressions,
    lists of coordinates of points, etc. Plot has a private attribute _series that
    contains all data series to be plotted (expressions for lines or surfaces,
    lists of points, etc (all subclasses of BaseSeries)). Those data series are
    instances of classes not imported by ``from sympy import *``.

    The customization of the figure is on two levels. Global options that
    concern the figure as a whole (eg title, xlabel, scale, etc) and
    per-data series options (eg name) and aesthetics (eg. color, point shape,
    line type, etc.).

    The difference between options and aesthetics is that an aesthetic can be
    a function of the coordinates (or parameters in a parametric plot). The
    supported values for an aesthetic are:
    - None (the backend uses default values)
    - a constant
    - a function of one variable (the first coordinate or parameter)
    - a function of two variables (the first and second coordinate or
    parameters)
    - a function of three variables (only in nonparametric 3D plots)
    Their implementation depends on the backend so they may not work in some
    backends.

    If the plot is parametric and the arity of the aesthetic function permits
    it the aesthetic is calculated over parameters and not over coordinates.
    If the arity does not permit calculation over parameters the calculation is
    done over coordinates.

    Only cartesian coordinates are supported for the moment, but you can use
    the parametric plots to plot in polar, spherical and cylindrical
    coordinates.

    The arguments for the constructor Plot must be subclasses of BaseSeries.

    Any global option can be specified as a keyword argument.

    The global options for a figure are:

    - title : str
    - xlabel : str
    - ylabel : str
    - legend : bool
    - xscale : {'linear', 'log'}
    - yscale : {'linear', 'log'}
    - axis : bool
    - axis_center : tuple of two floats or {'center', 'auto'}
    - xlim : tuple of two floats
    - ylim : tuple of two floats
    - aspect_ratio : tuple of two floats or {'auto'}
    - autoscale : bool
    - margin : float in [0, 1]

    The per data series options and aesthetics are:
    There are none in the base series. See below for options for subclasses.

    Some data series support additional aesthetics or options:

    ListSeries, LineOver1DRangeSeries, Parametric2DLineSeries,
    Parametric3DLineSeries support the following:

    Aesthetics:

    - line_color : function which returns a float.

    options:

    - label : str
    - steps : bool
    - integers_only : bool

    SurfaceOver2DRangeSeries, ParametricSurfaceSeries support the following:

    aesthetics:

    - surface_color : function which returns a float.
    c         O  sí   t  t |  ƒ j ƒ  d  |  _ d  |  _ d  |  _ d |  _ d  |  _ d  |  _	 d |  _
 t |  _ d |  _ d |  _ t |  _ t |  _ d |  _ g  |  _ |  j j | ƒ t |  _ x< | j ƒ  D]. \ } } t |  | ƒ r· t |  | | ƒ q· q· Wd  S(   Nt   autot   lineari    (   t   superR   t   __init__t   Nonet   titlet   xlabelt   ylabelt   aspect_ratiot   xlimt   ylimt   axis_centert   Truet   axist   xscalet   yscaleR   t   legendt	   autoscalet   margint   _seriest   extendt   DefaultBackendt   backendt   itemst   hasattrt   setattr(   t   selft   argst   kwargst   keyt   val(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ’   s(    															c         C  sB   t  |  d ƒ r |  j j ƒ  n  |  j |  ƒ |  _ |  j j ƒ  d  S(   Nt   _backend(   R+   R2   t   closeR)   t   show(   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR4   ¶   s    c         C  sE   t  |  d ƒ r |  j j ƒ  n  |  j |  ƒ |  _ |  j j | ƒ d  S(   NR2   (   R+   R2   R3   R)   t   save(   R-   t   path(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR5   ½   s    c         C  sG   g  t  |  j ƒ D]  \ } } d | t | ƒ ^ q } d d j | ƒ S(   Ns   [%d]: s   Plot object containing:
s   
(   t	   enumerateR&   t   strt   join(   R-   t   it   st   series_strs(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   __str__Ã   s    3c         C  s   |  j  | S(   N(   R&   (   R-   t   index(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   __getitem__È   s    c         G  s9   t  | ƒ d k r5 t | d t ƒ r5 | |  j | <n  d  S(   Ni   i    (   t   lent
   isinstancet
   BaseSeriesR&   (   R-   R>   R.   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   __setitem__Ë   s    %c         C  s   |  j  | =d  S(   N(   R&   (   R-   R>   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   __delitem__Ï   s    c         C  s2   t  | t ƒ r" |  j j | ƒ n t d ƒ ‚ d S(   sD  Adds an element from a plot's series to an existing plot.

        Examples
        ========

        Consider two ``Plot`` objects, ``p1`` and ``p2``. To add the
        second plot's first series object to the first, use the
        ``append`` method, like so:

        .. plot::
           :format: doctest
           :include-source: True

           >>> from sympy import symbols
           >>> from sympy.plotting import plot
           >>> x = symbols('x')
           >>> p1 = plot(x*x, show=False)
           >>> p2 = plot(x, show=False)
           >>> p1.append(p2[0])
           >>> p1
           Plot object containing:
           [0]: cartesian line: x**2 for x over (-10.0, 10.0)
           [1]: cartesian line: x for x over (-10.0, 10.0)
           >>> p1.show()

        See Also
        ========
        extend

        s'   Must specify element of plot to append.N(   RA   RB   R&   t   appendt	   TypeError(   R-   t   arg(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRE   Ò   s    c         C  sT   t  | t ƒ r% |  j j | j ƒ n+ t | ƒ rD |  j j | ƒ n t d ƒ ‚ d S(   s  Adds all series from another plot.

        Examples
        ========

        Consider two ``Plot`` objects, ``p1`` and ``p2``. To add the
        second plot to the first, use the ``extend`` method, like so:

        .. plot::
           :format: doctest
           :include-source: True

           >>> from sympy import symbols
           >>> from sympy.plotting import plot
           >>> x = symbols('x')
           >>> p1 = plot(x**2, show=False)
           >>> p2 = plot(x, -x, show=False)
           >>> p1.extend(p2)
           >>> p1
           Plot object containing:
           [0]: cartesian line: x**2 for x over (-10.0, 10.0)
           [1]: cartesian line: x for x over (-10.0, 10.0)
           [2]: cartesian line: -x for x over (-10.0, 10.0)
           >>> p1.show()

        s(   Expecting Plot or sequence of BaseSeriesN(   RA   R   R&   R'   R   RF   (   R-   RG   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR'   ö   s
    (   t   __name__t
   __module__t   __doc__R   R4   R5   R=   R?   RC   RD   RE   R'   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   <   s   T	$							$RB   c           B  sY   e  Z d  Z e Z e Z e Z e Z e Z e Z	 d „  Z
 e d „  ƒ Z e d „  ƒ Z RS(   sŒ  Base class for the data objects containing stuff to be plotted.

    The backend should check if it supports the data series that it's given.
    (eg TextBackend supports only LineOver1DRange).
    It's the backend responsibility to know how to use the class of
    data series that it's given.

    Some data series classes are grouped (using a class attribute like is_2Dline)
    according to the api they present (based only on convention). The backend is
    not obliged to use that api (eg. The LineOver1DRange belongs to the
    is_2Dline group and presents the get_points method, but the
    TextBackend does not use the get_points method).
    c         C  s   t  t |  ƒ j ƒ  d  S(   N(   R   RB   R   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   W  s    c         C  s   |  j  |  j g } t | ƒ S(   N(   t	   is_3Dlinet   is_3Dsurfacet   any(   R-   t   flags3D(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   is_3DZ  s    c         C  s   |  j  |  j g } t | ƒ S(   N(   t	   is_2DlineRK   RM   (   R-   t
   flagslines(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   is_lineb  s    (   RH   RI   RJ   R   RP   RK   RL   t
   is_contourt   is_implicitt   is_parametricR   t   propertyRO   RR   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRB     s   	t   Line2DBaseSeriesc           B  s5   e  Z d  Z e Z d Z d „  Z d „  Z d „  Z RS(   s¤   A base class for 2D lines.

    - adding the label, steps and only_integers options
    - making is_2Dline true
    - defining get_segments and get_color_array
    i   c         C  s;   t  t |  ƒ j ƒ  d  |  _ t |  _ t |  _ d  |  _ d  S(   N(	   R   RW   R   R   t   labelR   t   stepst   only_integerst
   line_color(   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   x  s
    			c         C  sÕ   t  d ƒ } |  j ƒ  } |  j t k rŠ | j | d | d f ƒ j j ƒ  d } | j | d | d f ƒ j j ƒ  d  } | | f } n  | j j | ƒ j j d d |  j	 ƒ } | j j
 | d  | d g d d ƒS(   Nt   numpyi    i   iÿÿÿÿR    (   R   t
   get_pointsRY   R   t   arrayt   Tt   flattent   mat   reshapet   _dimt   concatenate(   R-   t   npt   pointst   xt   y(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   get_segments  s    **'c         C  sä   t  d ƒ } |  j } t | d ƒ rÌ | j | ƒ } t | ƒ } | d k rp |  j rp |  j ƒ  } | t | ƒ ƒ St t	 t |  j
 ƒ  ƒ ƒ } | d k r¥ | | d ƒ S| d k r¿ | | d  Œ  S| | Œ  Sn | | j |  j ƒ Sd  S(   NR\   t   __call__i   i    i   (   R   R[   R+   t	   vectorizeR   RU   t   get_parameter_pointst   centers_of_segmentst   listt   mapR]   t   onest   nb_of_points(   R-   Re   t   ct   ft   nargsRg   t	   variables(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   get_color_array‰  s    	(	   RH   RI   RJ   R   RP   Rc   R   Ri   Rv   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRW   l  s   		
t   List2DSeriesc           B  s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s7   Representation for a line consisting of list of points.c         C  sP   t  d ƒ } t t |  ƒ j ƒ  | j | ƒ |  _ | j | ƒ |  _ d |  _ d  S(   NR\   Rn   (   R   R   Rw   R   R^   t   list_xt   list_yRX   (   R-   Rx   Ry   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ¡  s
    c         C  s   d S(   Ns	   list plot(    (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   ¨  s    c         C  s   |  j  |  j f S(   N(   Rx   Ry   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR]   «  s    (   RH   RI   RJ   R   R=   R]   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRw   ž  s   		t   LineOver1DRangeSeriesc           B  s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sH   Representation for a line consisting of a SymPy expression over a range.c         K  sã   t  t |  ƒ j ƒ  t | ƒ |  _ t |  j ƒ |  _ t | d ƒ |  _ t | d ƒ |  _	 t | d ƒ |  _
 | j d d ƒ |  _ | j d t ƒ |  _ | j d d ƒ |  _ | j d	 d  ƒ |  _ | j d
 d ƒ |  _ d |  _ d  S(   Ni    i   i   Rq   i,  t   adaptivet   depthi   R[   R!   R   (   R   Rz   R   R   t   exprR8   RX   t   vart   floatt   startt   endt   getRq   R   R{   R|   R   R[   R!   t   flag(   R-   R}   t   var_start_endR/   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ²  s    c         C  s5   d t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ f S(   Ns!   cartesian line: %s for %s over %s(   R8   R}   R~   R€   R   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   Ä  s    c           sì   ˆ j  s ˆ j r& t t ˆ ƒ j ƒ  St ˆ j g ˆ j ƒ ‰  g  ‰ t d ƒ } ‡  ‡ ‡ ‡ f d †  ‰ ˆ j	 d k r¤ | j
 ˆ j ƒ ˆ _ | j
 ˆ j ƒ ˆ _ n  ˆ  ˆ j ƒ } ˆ  ˆ j ƒ } ˆ ˆ j | g ˆ j | g d ƒ ˆ Sd S(   s  
        Adaptively gets segments for plotting.

        The adaptive sampling is done by recursively checking if three
        points are almost collinear. If they are not collinear, then more
        points are added between those points.

        References
        ==========
        [1] Adaptive polygonal approximation of parametric curves,
            Luiz Henrique de Figueiredo.

        R\   c           s   t  d ƒ } d | j j ƒ  d } |  d | | d |  d } ˆ  | ƒ } | j | | g ƒ } ˆ j d k ru d S| ˆ j k rÇ |  d d k s¤ | d d k r± d ˆ _ d Sˆ j |  | g ƒ nÕ| d k  rþ ˆ |  | | d ƒ ˆ | | | d ƒ nž|  d d k r| d d k rˆ j d k rM| j	 |  d | d d	 ƒ } n | j
 |  d | d d	 ƒ } t t ˆ  | ƒ ƒ }	 t d
 „  |	 Dƒ ƒ rœx€ t t |	 ƒ d ƒ D]e }
 |	 |
 d k	 sÖ|	 |
 d d k	 r¬ˆ | |
 |	 |
 g | |
 d |	 |
 d g | d ƒ q¬q¬Wqœn |  d d k s^| d d k s^| d d k s^t |  | | ƒ r‰ˆ |  | | d ƒ ˆ | | | d ƒ n ˆ j |  | g ƒ d S(   s   Samples recursively if three points are almost collinear.
                For depth < 6, points are added irrespective of whether they
                satisfy the collinearity condition or not. The maximum depth
                allowed is 12.
                R\   gÍÌÌÌÌÌÜ?gš™™™™™¹?i    i   Ni   t   logi
   c         s  s   |  ] } | d  k	 Vq d  S(   N(   R   (   t   .0Rh   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>  s    (   R   t   randomt   randR^   Rƒ   R|   R   RE   R!   t   logspacet   linspaceRn   Ro   RM   R	   R@   t   flat(   t   pt   qR|   Re   R‡   t   xnewt   ynewt	   new_pointt   xarrayt   yarrayR:   (   Rs   t   list_segmentst   sampleR-   (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR”   Ý  s<     	  $10R…   i    N(   RZ   R{   R   Rz   Ri   R   R~   R}   R   R!   t   log10R€   R   (   R-   Re   t   f_startt   f_end(    (   Rs   R“   R”   R-   s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRi   È  s    4"c         C  s:  t  d ƒ } |  j t k r¸ |  j d k rq | j t |  j ƒ t |  j ƒ d t |  j ƒ t |  j ƒ d ƒ} q| j t |  j ƒ t |  j ƒ d t |  j ƒ t |  j ƒ d ƒ} nT |  j d k rë | j |  j |  j d |  j	 ƒ} n! | j |  j |  j d |  j	 ƒ} t
 |  j g |  j ƒ } | | ƒ } | | f S(   NR\   R…   t   numi   (   R   RZ   R   R!   R‰   t   intR€   R   RŠ   Rq   R   R~   R}   (   R-   Re   Rx   Rs   Ry   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR]     s    !&!&$!(   RH   RI   RJ   R   R=   Ri   R]   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRz   ¯  s
   			St   Parametric2DLineSeriesc           B  sA   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sZ   Representation for a line consisting of two parametric sympy expressions
    over a range.c         K  sç   t  t |  ƒ j ƒ  t | ƒ |  _ t | ƒ |  _ d t |  j ƒ t |  j ƒ f |  _ t | d ƒ |  _ t	 | d ƒ |  _
 t	 | d ƒ |  _ | j d d ƒ |  _ | j d t ƒ |  _ | j d d	 ƒ |  _ | j d
 d  ƒ |  _ d  S(   Ns   (%s, %s)i    i   i   Rq   i,  R{   R|   i   R[   (   R   Rš   R   R   t   expr_xt   expr_yR8   RX   R~   R   R€   R   R‚   Rq   R   R{   R|   R   R[   (   R-   R›   Rœ   R„   R/   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   4  s    %c         C  sA   d t  |  j ƒ t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ f S(   Ns2   parametric cartesian line: (%s, %s) for %s over %s(   R8   R›   Rœ   R~   R€   R   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   A  s    $c         C  s+   t  d ƒ } | j |  j |  j d |  j ƒS(   NR\   R˜   (   R   RŠ   R€   R   Rq   (   R-   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRl   F  s    c         C  s^   |  j  ƒ  } t |  j g |  j ƒ } t |  j g |  j ƒ } | | ƒ } | | ƒ } | | f S(   N(   Rl   R   R~   R›   Rœ   (   R-   t   paramt   fxt   fyRx   Ry   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR]   J  s    c           sá   ˆ j  s t t ˆ ƒ j ƒ  St ˆ j g ˆ j ƒ ‰  t ˆ j g ˆ j ƒ ‰ g  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ ˆ  ˆ j ƒ } ˆ ˆ j ƒ } | | g } ˆ  ˆ j	 ƒ } ˆ ˆ j	 ƒ } | | g } ˆ ˆ j ˆ j	 | | d ƒ ˆ S(   s  
        Adaptively gets segments for plotting.

        The adaptive sampling is done by recursively checking if three
        points are almost collinear. If they are not collinear, then more
        points are added between those points.

        References
        ==========
        [1] Adaptive polygonal approximation of parametric curves,
            Luiz Henrique de Figueiredo.

        c           sÍ  t  d ƒ } d | j j ƒ  d } |  | | |  } ˆ  | ƒ } ˆ | ƒ }	 | j | |	 g ƒ }
 | ˆ j k r‡ ˆ j | | g ƒ nB| d k  rÊ ˆ |  | | |
 | d ƒ ˆ | | |
 | | d ƒ nÿ| d d	 k rê | d d	 k s
| d d	 k r,| d d	 k r,| j |  | d ƒ } t t	 ˆ  | ƒ ƒ } t t	 ˆ | ƒ ƒ } t
 d „  t | | ƒ Dƒ ƒ rÉx¾ t t | ƒ d ƒ D]£ } | | d	 k	 r¥| | d	 k	 sÍ| | d d	 k	 r| | d d	 k	 r| | | | g } | | d | | d g } ˆ | | | | | | | d ƒ qqWqÉn | d d	 k s| d d	 k s| d d	 k s| d d	 k st | |
 | ƒ r¶ˆ |  | | |
 | d ƒ ˆ | | |
 | | d ƒ n ˆ j | | g ƒ d	 S(
   sô    Samples recursively if three points are almost collinear.
            For depth < 6, points are added irrespective of whether they
            satisfy the collinearity condition or not. The maximum depth
            allowed is 12.
            R\   gÍÌÌÌÌÌÜ?gš™™™™™¹?i   i   i    i
   c         s  s-   |  ]# \ } } | d  k	 o$ | d  k	 Vq d  S(   N(   R   (   R†   Rg   Rh   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>‡  s   N(   R   R‡   Rˆ   R^   R|   RE   R   RŠ   Rn   Ro   RM   t   zipR	   R@   R‹   (   t   param_pt   param_qRŒ   R   R|   Re   R‡   t	   param_newRŽ   R   R   t   param_arrayt   x_arrayt   y_arrayR:   t   point_at   point_b(   t   f_xt   f_yR“   R”   R-   (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR”   g  s>      	 (  i    (
   R{   R   Rš   Ri   R   R~   R›   Rœ   R€   R   (   R-   t	   f_start_xt	   f_start_yR€   t   f_end_xt   f_end_yR   (    (   R©   Rª   R“   R”   R-   s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRi   R  s    	4(
   RH   RI   RJ   R   RU   R   R=   Rl   R]   Ri   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRš   .  s   				t   Line3DBaseSeriesc           B  s)   e  Z d  Z e Z e Z d Z d „  Z RS(   sS   A base class for 3D lines.

    Most of the stuff is derived from Line2DBaseSeries.i   c         C  s   t  t |  ƒ j ƒ  d  S(   N(   R   R¯   R   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ¯  s    (	   RH   RI   RJ   R   RP   R   RK   Rc   R   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¯   ¦  s
   t   Parametric3DLineSeriesc           B  s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s\   Representation for a 3D line consisting of two parametric sympy
    expressions and a range.c         K  sÌ   t  t |  ƒ j ƒ  t | ƒ |  _ t | ƒ |  _ t | ƒ |  _ d t |  j ƒ t |  j ƒ f |  _ t | d ƒ |  _	 t
 | d ƒ |  _ t
 | d ƒ |  _ | j d d ƒ |  _ | j d d  ƒ |  _ d  S(   Ns   (%s, %s)i    i   i   Rq   i,  R[   (   R   R°   R   R   R›   Rœ   t   expr_zR8   RX   R~   R   R€   R   R‚   Rq   R   R[   (   R-   R›   Rœ   R±   R„   R/   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ·  s    %c         C  sM   d t  |  j ƒ t  |  j ƒ t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ f S(   Ns9   3D parametric cartesian line: (%s, %s, %s) for %s over %s(   R8   R›   Rœ   R±   R~   R€   R   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   Ã  s    $c         C  s+   t  d ƒ } | j |  j |  j d |  j ƒS(   NR\   R˜   (   R   RŠ   R€   R   Rq   (   R-   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRl   È  s    c         C  s…   |  j  ƒ  } t |  j g |  j ƒ } t |  j g |  j ƒ } t |  j g |  j ƒ } | | ƒ } | | ƒ } | | ƒ } | | | f S(   N(   Rl   R   R~   R›   Rœ   R±   (   R-   R   Rž   RŸ   t   fzRx   Ry   t   list_z(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR]   Ì  s    (   RH   RI   RJ   R   R=   Rl   R]   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR°   ³  s
   			t   SurfaceBaseSeriesc           B  s&   e  Z d  Z e Z d „  Z d „  Z RS(   s   A base class for 3D surfaces.c         C  s    t  t |  ƒ j ƒ  d  |  _ d  S(   N(   R   R´   R   R   t   surface_color(   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   Ý  s    c         C  s
  t  d ƒ } |  j } t | t ƒ rò | j | ƒ } t | ƒ } |  j r– t t t	 |  j
 ƒ  ƒ ƒ } | d k r} | | d ƒ S| d k r– | | Œ  Sn  t t t	 |  j ƒ  ƒ ƒ } | d k rË | | d ƒ S| d k rå | | d  Œ  S| | Œ  Sn | | j |  j ƒ Sd  S(   NR\   i   i    i   (   R   Rµ   RA   R
   Rk   R   RU   Rn   Ro   t   centers_of_facest   get_parameter_meshest
   get_meshesRp   Rq   (   R-   Re   Rr   Rs   Rt   Ru   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRv   á  s$    		(   RH   RI   RJ   R   RL   R   Rv   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR´   Ø  s   	t   SurfaceOver2DRangeSeriesc           B  s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sR   Representation for a 3D surface consisting of a sympy expression and 2D
    range.c         K  s×   t  t |  ƒ j ƒ  t | ƒ |  _ t | d ƒ |  _ t | d ƒ |  _ t | d ƒ |  _ t | d ƒ |  _	 t | d ƒ |  _
 t | d ƒ |  _ | j d d ƒ |  _ | j d d ƒ |  _ | j d d  ƒ |  _ d  S(   Ni    i   i   t   nb_of_points_xi2   t   nb_of_points_yRµ   (   R   R¹   R   R   R}   t   var_xR   t   start_xt   end_xt   var_yt   start_yt   end_yR‚   Rº   R»   R   Rµ   (   R-   R}   t   var_start_end_xt   var_start_end_yR/   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   û  s    c         C  sV   d t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ t  |  j ƒ t  |  j |  j f ƒ f S(   Ns3   cartesian surface: %s for %s over %s and %s over %s(   R8   R}   R¼   R½   R¾   R¿   RÀ   RÁ   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=     s    c         C  sŽ   t  d ƒ } | j | j |  j |  j d |  j ƒ| j |  j |  j d |  j ƒƒ \ } } t	 |  j
 |  j f |  j ƒ } | | | | | ƒ f S(   NR\   R˜   (   R   t   meshgridRŠ   R½   R¾   Rº   RÀ   RÁ   R»   R   R¼   R¿   R}   (   R-   Re   t   mesh_xt   mesh_yRs   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¸     s    	(   RH   RI   RJ   R   R=   R¸   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¹   ø  s   			t   ParametricSurfaceSeriesc           B  s8   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z RS(   sa   Representation for a 3D surface consisting of three parametric sympy
    expressions and a range.c         K  sõ   t  t |  ƒ j ƒ  t | ƒ |  _ t | ƒ |  _ t | ƒ |  _ t | d ƒ |  _ t | d ƒ |  _	 t | d ƒ |  _
 t | d ƒ |  _ t | d ƒ |  _ t | d ƒ |  _ | j d d ƒ |  _ | j d d ƒ |  _ | j d d  ƒ |  _ d  S(   Ni    i   i   t   nb_of_points_ui2   t   nb_of_points_vRµ   (   R   RÇ   R   R   R›   Rœ   R±   t   var_uR   t   start_ut   end_ut   var_vt   start_vt   end_vR‚   RÈ   RÉ   R   Rµ   (   R-   R›   Rœ   R±   t   var_start_end_ut   var_start_end_vR/   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   !  s    c      
   C  sn   d t  |  j ƒ t  |  j ƒ t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ t  |  j ƒ t  |  j |  j	 f ƒ f S(   NsH   parametric cartesian surface: (%s, %s, %s) for %s over %s and %s over %s(
   R8   R›   Rœ   R±   RÊ   RË   RÌ   RÍ   RÎ   RÏ   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   2  s    c         C  sR   t  d ƒ } | j | j |  j |  j d |  j ƒ| j |  j |  j d |  j ƒƒ S(   NR\   R˜   (	   R   RÄ   RŠ   RË   RÌ   RÈ   RÎ   RÏ   RÉ   (   R-   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR·   =  s
    	c         C  s”   |  j  ƒ  \ } } t |  j |  j f |  j ƒ } t |  j |  j f |  j ƒ } t |  j |  j f |  j ƒ } | | | ƒ | | | ƒ | | | ƒ f S(   N(   R·   R   RÊ   RÍ   R›   Rœ   R±   (   R-   t   mesh_ut   mesh_vRž   RŸ   R²   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¸   D  s
    (	   RH   RI   RJ   R   RU   R   R=   R·   R¸   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRÇ     s   			t   ContourSeriesc           B  s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   s"   Representation for a contour plot.c         C  s¶   t  t |  ƒ j ƒ  d |  _ d |  _ t | ƒ |  _ t | d ƒ |  _ t | d ƒ |  _	 t | d ƒ |  _
 t | d ƒ |  _ t | d ƒ |  _ t | d ƒ |  _ |  j |  _ d  S(   Ni2   i    i   i   (   R   RÔ   R   Rº   R»   R   R}   R¼   R   R½   R¾   R¿   RÀ   RÁ   R¸   R]   (   R-   R}   RÂ   RÃ   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   T  s    		c         C  sV   d t  |  j ƒ t  |  j ƒ t  |  j |  j f ƒ t  |  j ƒ t  |  j |  j f ƒ f S(   Ns)   contour: %s for %s over %s and %s over %s(   R8   R}   R¼   R½   R¾   R¿   RÀ   RÁ   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR=   b  s    c         C  sŽ   t  d ƒ } | j | j |  j |  j d |  j ƒ| j |  j |  j d |  j ƒƒ \ } } t	 |  j
 |  j f |  j ƒ } | | | | | ƒ f S(   NR\   R˜   (   R   RÄ   RŠ   R½   R¾   Rº   RÀ   RÁ   R»   R   R¼   R¿   R}   (   R-   Re   RÅ   RÆ   Rs   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¸   k  s    	(   RH   RI   RJ   R   RS   R   R=   R¸   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRÔ   M  s
   			t   BaseBackendc           B  s   e  Z d  „  Z RS(   c         C  s    t  t |  ƒ j ƒ  | |  _ d  S(   N(   R   RÕ   R   t   parent(   R-   RÖ   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   z  s    (   RH   RI   R   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRÕ   y  s   t   MatplotlibBackendc           B  s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  s  t  t |  ƒ j | ƒ g  |  j j D] } | j ^ q# } t d d i d d d g d 6d d d	 t f ƒ|  _ |  j j	 |  _
 |  j j |  _ |  j j j |  _ t | ƒ rÄ t | ƒ rÄ t d
 ƒ ‚ n>t | ƒ sª|  j
 j ƒ  |  _ |  j j d ƒ |  _ |  j j d j d ƒ |  j j d j d ƒ |  j j d j d ƒ |  j j d j d ƒ |  j j d j t ƒ |  j j d j t ƒ |  j j j d ƒ |  j j j d ƒ nX t | ƒ rt d d i d g d 6ƒ} |  j
 j ƒ  |  _ |  j j d d d ƒ|  _ n  d  S(   Nt
   matplotlibt   __import__kwargst   pyplott   cmt   collectionst   fromlistt   min_module_versions   1.1.0t   catchs-   The matplotlib backend can not mix 2D and 3D.io   t   leftt   zerot   rightt   nonet   bottomt   topt   mpl_toolkitst   mplot3dt
   projectiont   3d(   R   R×   R   RÖ   R&   RO   R   t   RuntimeErrorRØ   RÚ   t   pltRÛ   RÜ   t   LineCollectionRM   t   allt
   ValueErrort   figuret   figt   add_subplott   axt   spinest   set_positiont	   set_colort   set_smart_boundsR   R   t   xaxist   set_ticks_positiont   yaxis(   R-   RÖ   R;   t   are_3DRæ   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   ‚  s4    "		c           sÃ  |  j  } xé|  j  j D]Û} | j rM |  j | j ƒ  ƒ } |  j j | ƒ nx| j ro |  j j | j	 ƒ  Œ  nV| j
 rCt d d i d g d 6ƒ} | j j } | j | j ƒ  ƒ } |  j j | ƒ | j ƒ  \ } } } |  j j t | ƒ t | ƒ f ƒ |  j j t | ƒ t | ƒ f ƒ |  j j t | ƒ t | ƒ f ƒ n‚| j r©| j	 ƒ  \ } } } |  j j | | | d t |  j d |  j j ƒ d d d	 d d
 d ƒ} n| j r¹|  j j d j t ƒ |  j j d j t ƒ | j ƒ  }	 t |	 ƒ d k r9t  |	 d ƒ \ } } |  j j! | | d | j" d d ƒqÅ|  j# j$ j% }
 |
 d | j" g ƒ } |	 \ } } } } | d k rš|  j j | | | d | ƒqÅ|  j j& | | | d | ƒn t' d ƒ ‚ t( | d ƒ rç| j) | j* ƒ n  | j+ rR| j" rRt, | j" t- t. f ƒ s#t, | j" t/ ƒ r?| j0 ƒ  } | j1 | ƒ qR| j2 | j" ƒ n  | j r | j3 r |  j# j4 d k  r†t5 j6 d ƒ qñt, | j3 t- t. f ƒ s°t, | j3 t/ ƒ rÞ| j0 ƒ  } | j7 | j8 ƒ } | j1 | ƒ qñ| j2 | j3 ƒ q q Wt d d i d g d 6ƒ} | j j9 } | j: rOt, |  j | ƒ rO|  j j; | j: ƒ n  | j< rt, |  j | ƒ r|  j j= | j< ƒ n  | j> r.d d l? m@ ‰  | j> } tA ‡  f d †  | Dƒ ƒ r×t' d jB | ƒ ƒ ‚ n  tA ‡  f d †  | Dƒ ƒ rt' d jB | ƒ ƒ ‚ n  d „  | Dƒ } |  j j | ƒ ny tC d  „  | j Dƒ ƒ r§g  | j D] } | jD ^ qQ} g  | j D] } | jE ^ qp} |  j j t | ƒ t | ƒ ƒ n  | jF rTd d l? m@ ‰  | jF } tA ‡  f d! †  | Dƒ ƒ rýt' d" jB | ƒ ƒ ‚ n  tA ‡  f d# †  | Dƒ ƒ r1t' d$ jB | ƒ ƒ ‚ n  d% „  | Dƒ } |  j j | ƒ n  t, |  j | ƒ sy|  j# j4 d k r|  j jG | jH ƒ n  | jI r×| jI } t, |  j | ƒ r¶q×| d& k ró|  j j d jJ d& ƒ |  j j d jJ d& ƒ q×| d' k r’|  j jK ƒ  \ } } |  j jL ƒ  \ } } | | d k r?d* n d& } | | d k r[d+ n d& } |  j j d jJ | ƒ |  j j d jJ | ƒ q×|  j j d jJ d( | d f ƒ |  j j d jJ d( | d f ƒ n  | jM sð|  j jN ƒ  n  | jO r$|  j jO ƒ  r$|  j jP jQ | jO ƒ q$n  | jR rV|  j jS | jR ƒ |  j jT | jR ƒ n  | jU ru|  j jV | jU ƒ n  | jW rš|  j jX | jW d) d, ƒn  | jY r¿|  j jZ | jY d) d- ƒn  d  S(.   NRæ   RÙ   Rç   RÝ   t   cmapt   viridist   rstridei   t   cstridet	   linewidthgš™™™™™¹?Rà   Rä   i   i    t	   facecolort	   edgecolorR   t   whitet   contours_   The matplotlib backend supports only is_2Dline, is_3Dline, is_3Dsurface and is_contour objects.RX   s   1.2.0s=   The version of matplotlib is too old to use surface coloring.iÿÿÿÿ(   t   Basicc         3  s(   |  ] } t  | ˆ  ƒ o | j Vq d  S(   N(   RA   t   is_real(   R†   R:   (   R  (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>õ  s    s%   All numbers from xlim={} must be realc         3  s(   |  ] } t  | ˆ  ƒ o | j Vq d  S(   N(   RA   t	   is_finite(   R†   R:   (   R  (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>ø  s    s'   All numbers from xlim={} must be finitec         s  s   |  ] } t  | ƒ Vq d  S(   N(   R   (   R†   R:   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>û  s    c         s  s   |  ] } t  | t ƒ Vq d  S(   N(   RA   Rz   (   R†   R;   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>þ  s    c         3  s(   |  ] } t  | ˆ  ƒ o | j Vq d  S(   N(   RA   R  (   R†   R:   (   R  (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>  s    s%   All numbers from ylim={} must be realc         3  s(   |  ] } t  | ˆ  ƒ o | j Vq d  S(   N(   RA   R  (   R†   R:   (   R  (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>  s    s'   All numbers from ylim={} must be finitec         s  s   |  ] } t  | ƒ Vq d  S(   N(   R   (   R†   R:   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>  s    t   centerR   t   datat   position(   R  i    (   R  i    (   i   i    (   i    i   ([   RÖ   R&   RP   Rì   Ri   Rò   t   add_collectionRS   R  R¸   RK   R   Rç   t   art3dt   Line3DCollectionR]   t   set_xlimt   mint   maxt   set_ylimt   set_zlimRL   t   plot_surfacet   getattrRÛ   t   jetRT   Ró   Rö   R   t
   get_rasterR@   t   _matplotlib_listt   fillR[   RØ   t   colorst   ListedColormapt   contourfRî   R+   t	   set_labelRX   RR   RA   R   R™   R
   Rv   t	   set_arrayRõ   Rµ   t   __version__t   warningst   warnRb   t   sizet   Axes3DR!   t
   set_xscaleR"   t
   set_yscaleR   t   sympy.core.basicR  RM   t   formatRí   R€   R   R   t   set_autoscale_onR$   R   Rô   t   get_xlimt   get_ylimR    t   set_axis_offR#   t   legend_t   set_visibleR%   t   set_xmargint   set_ymarginR   t	   set_titleR   t
   set_xlabelR   t
   set_ylabel(   R-   RÖ   R;   t
   collectionRæ   R  Rg   Rh   t   zRf   R  t   colormapR‘   R’   t   zarrayt	   plot_typet   color_arrayR!  R   t   startst   endsR   R1   t   xlt   xht   ylt   yht   pos_leftt
   pos_bottom(    (   R  s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   process_series   sè    					""%		%**			"		%		!$						c         C  s.   |  j  ƒ  t r  |  j j ƒ  n
 |  j ƒ  d  S(   N(   R?  R   Rë   R4   R3   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR4   /  s    
c         C  s   |  j  ƒ  |  j j | ƒ d  S(   N(   R?  Rð   t   savefig(   R-   R6   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR5   9  s    
c         C  s   |  j  j |  j ƒ d  S(   N(   Rë   R3   Rð   (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR3   =  s    (   RH   RI   R   R?  R4   R5   R3   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR×     s
   			
	t   TextBackendc           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s   t  t |  ƒ j | ƒ d  S(   N(   R   RA  R   (   R-   RÖ   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR   B  s    c         C  s†   t  s
 d  St |  j j ƒ d k r1 t d ƒ ‚ nQ t |  j j d t ƒ sY t d ƒ ‚ n) |  j j d } t | j | j	 | j
 ƒ d  S(   Ni   s1   The TextBackend supports only one graph per Plot.i    s9   The TextBackend supports only expressions over a 1D range(   R   R@   RÖ   R&   Rî   RA   Rz   R   R}   R€   R   (   R-   t   ser(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR4   E  s    c         C  s   d  S(   N(    (   R-   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR3   R  s    (   RH   RI   R   R4   R3   (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRA  A  s   		R(   c           B  s   e  Z d  „  Z RS(   c         C  s9   t  d d d d t f ƒ} | r+ t | ƒ St | ƒ Sd  S(   NRØ   RÞ   s   1.1.0Rß   (   R   Rê   R×   RA  (   t   clsRÖ   RØ   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   __new__W  s    
(   RH   RI   RD  (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR(   V  s   RØ   t   textt   defaultc         C  s3   t  d ƒ } | j | j |  d  |  d f ƒ d ƒ S(   NR\   iÿÿÿÿi   i    (   R   t   meant   vstack(   R^   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRm   j  s    c      	   C  s‰   t  d ƒ } | j | j |  d  d … d  d … f |  d d  … d  d … f |  d  d … d d  … f |  d  d … d  d … f f ƒ d ƒ S(   NR\   iÿÿÿÿi   i   (   R   RG  t   dstack(   R^   Re   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR¶   o  s    %gü©ñÒMbP?c         C  s   t  d ƒ } |  | j | j ƒ } | | j | j ƒ } | j | | ƒ } | j j | ƒ } | j j | ƒ }	 | | |	 }
 t |
 d ƒ | k  S(   s0   Checks whether three points are almost collinearR\   i   (   R   t   astypeR   t   dott   linalgt   normt   abs(   Rg   Rh   R2  t   epsRe   t   vector_at   vector_bt   dot_productt   vector_a_normt   vector_b_normt	   cos_theta(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR‹   x  s    c         C  sÌ   g  } g  } t  |  ƒ r x§ |  D]j } | d } | d } | j | j | j | j | j d g ƒ | j | j | j | j | j d g ƒ q Wn2 | j d d d d g ƒ | j d d d d g ƒ | | f S(   si   
    Returns lists for matplotlib ``fill`` command from a list of bounding
    rectangular intervals
    i    i   N(   R@   R'   R€   R   R   (   t   interval_listt   xlistt   ylistt	   intervalst	   intervalxt	   intervaly(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyR  ˆ  s    

c    
      O  s)  t  t t |  ƒ ƒ }  t ƒ  } xN |  D]F } t | t ƒ r% | | j O} t | ƒ d k rk t d ƒ ‚ qk q% q% W| r | j	 ƒ  n	 t
 d ƒ } | j d | j ƒ | j d d | j ƒ | j	 d t ƒ } g  } t |  d d ƒ } g  | D] } t | | Ž  ^ qè } t | | Ž  }	 | r%|	 j ƒ  n  |	 S(   sÉ  
    Plots a function of a single variable and returns an instance of
    the ``Plot`` class (also, see the description of the
    ``show`` keyword argument below).

    The plotting uses an adaptive algorithm which samples recursively to
    accurately plot the plot. The adaptive algorithm uses a random point near
    the midpoint of two points that has to be further sampled. Hence the same
    plots can appear slightly different.

    Usage
    =====

    Single Plot

    ``plot(expr, range, **kwargs)``

    If the range is not specified, then a default range of (-10, 10) is used.

    Multiple plots with same range.

    ``plot(expr1, expr2, ..., range, **kwargs)``

    If the range is not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot((expr1, range), (expr2, range), ..., **kwargs)``

    Range has to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr`` : Expression representing the function of single variable

    ``range``: (x, 0, 5), A 3-tuple denoting the range of the free variable.

    Keyword Arguments
    =================

    Arguments for ``plot`` function:

    ``show``: Boolean. The default value is set to ``True``. Set show to
    ``False`` and the function will not display the plot. The returned
    instance of the ``Plot`` class can then be used to save or display
    the plot by calling the ``save()`` and ``show()`` methods
    respectively.

    Arguments for ``LineOver1DRangeSeries`` class:

    ``adaptive``: Boolean. The default value is set to True. Set adaptive to False and
    specify ``nb_of_points`` if uniform sampling is required.

    ``depth``: int Recursion depth of the adaptive algorithm. A depth of value ``n``
    samples a maximum of `2^{n}` points.

    ``nb_of_points``: int. Used when the ``adaptive`` is set to False. The function
    is uniformly sampled at ``nb_of_points`` number of points.

    Aesthetics options:

    ``line_color``: float. Specifies the color for the plot.
    See ``Plot`` to see how to set color for the plots.

    If there are multiple plots, then the same series series are applied to
    all the plots. If you want to set these options separately, you can index
    the ``Plot`` object returned and set it.

    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot. It is set to the latex representation of
    the expression, if the plot has only one expression.

    ``xlabel`` : str. Label for the x-axis.

    ``ylabel`` : str. Label for the y-axis.

    ``xscale``: {'linear', 'log'} Sets the scaling of the x-axis.

    ``yscale``: {'linear', 'log'} Sets the scaling if the y-axis.

    ``axis_center``: tuple of two floats denoting the coordinates of the center or
    {'center', 'auto'}

    ``xlim`` : tuple of two floats, denoting the x-axis limits.

    ``ylim`` : tuple of two floats, denoting the y-axis limits.

    Examples
    ========

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> from sympy import symbols
       >>> from sympy.plotting import plot
       >>> x = symbols('x')

    Single Plot

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot(x**2, (x, -5, 5))
       Plot object containing:
       [0]: cartesian line: x**2 for x over (-5.0, 5.0)

    Multiple plots with single range.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot(x, x**2, x**3, (x, -5, 5))
       Plot object containing:
       [0]: cartesian line: x for x over (-5.0, 5.0)
       [1]: cartesian line: x**2 for x over (-5.0, 5.0)
       [2]: cartesian line: x**3 for x over (-5.0, 5.0)

    Multiple plots with different ranges.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot((x**2, (x, -6, 6)), (x, (x, -5, 5)))
       Plot object containing:
       [0]: cartesian line: x**2 for x over (-6.0, 6.0)
       [1]: cartesian line: x for x over (-5.0, 5.0)

    No adaptive sampling.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot(x**2, adaptive=False, nb_of_points=400)
       Plot object containing:
       [0]: cartesian line: x**2 for x over (-10.0, 10.0)

    See Also
    ========

    Plot, LineOver1DRangeSeries.

    i   sM   The same variable should be used in all univariate expressions being plotted.Rg   R   R   s   f(%s)R4   (   Rn   Ro   R   t   setRA   R   t   free_symbolsR@   Rî   t   popR   t
   setdefaultt   nameR   t   check_argumentsRz   R   R4   (
   R.   R/   t   freet   aRg   R4   t   seriest	   plot_exprRG   t   plots(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot¤  s&    ž	"c          O  s‡   t  t t |  ƒ ƒ }  | j d t ƒ } g  } t |  d d ƒ } g  | D] } t | | Ž  ^ qF } t | | Ž  } | rƒ | j ƒ  n  | S(   s  
    Plots a 2D parametric plot.

    The plotting uses an adaptive algorithm which samples recursively to
    accurately plot the plot. The adaptive algorithm uses a random point near
    the midpoint of two points that has to be further sampled. Hence the same
    plots can appear slightly different.

    Usage
    =====

    Single plot.

    ``plot_parametric(expr_x, expr_y, range, **kwargs)``

    If the range is not specified, then a default range of (-10, 10) is used.

    Multiple plots with same range.

    ``plot_parametric((expr1_x, expr1_y), (expr2_x, expr2_y), range, **kwargs)``

    If the range is not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot_parametric((expr_x, expr_y, range), ..., **kwargs)``

    Range has to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr_x`` : Expression representing the function along x.

    ``expr_y`` : Expression representing the function along y.

    ``range``: (u, 0, 5), A 3-tuple denoting the range of the parameter
    variable.

    Keyword Arguments
    =================

    Arguments for ``Parametric2DLineSeries`` class:

    ``adaptive``: Boolean. The default value is set to True. Set adaptive to
    False and specify ``nb_of_points`` if uniform sampling is required.

    ``depth``: int Recursion depth of the adaptive algorithm. A depth of
    value ``n`` samples a maximum of `2^{n}` points.

    ``nb_of_points``: int. Used when the ``adaptive`` is set to False. The
    function is uniformly sampled at ``nb_of_points`` number of points.

    Aesthetics
    ----------

    ``line_color``: function which returns a float. Specifies the color for the
    plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same Series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class:

    ``xlabel`` : str. Label for the x-axis.

    ``ylabel`` : str. Label for the y-axis.

    ``xscale``: {'linear', 'log'} Sets the scaling of the x-axis.

    ``yscale``: {'linear', 'log'} Sets the scaling if the y-axis.

    ``axis_center``: tuple of two floats denoting the coordinates of the center
    or {'center', 'auto'}

    ``xlim`` : tuple of two floats, denoting the x-axis limits.

    ``ylim`` : tuple of two floats, denoting the y-axis limits.

    Examples
    ========

    .. plot::
       :context: reset
       :format: doctest
       :include-source: True

       >>> from sympy import symbols, cos, sin
       >>> from sympy.plotting import plot_parametric
       >>> u = symbols('u')

    Single Parametric plot

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot_parametric(cos(u), sin(u), (u, -5, 5))
       Plot object containing:
       [0]: parametric cartesian line: (cos(u), sin(u)) for u over (-5.0, 5.0)


    Multiple parametric plot with single range.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot_parametric((cos(u), sin(u)), (u, cos(u)))
       Plot object containing:
       [0]: parametric cartesian line: (cos(u), sin(u)) for u over (-10.0, 10.0)
       [1]: parametric cartesian line: (u, cos(u)) for u over (-10.0, 10.0)

    Multiple parametric plots.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot_parametric((cos(u), sin(u), (u, -5, 5)),
       ...     (cos(u), u, (u, -5, 5)))
       Plot object containing:
       [0]: parametric cartesian line: (cos(u), sin(u)) for u over (-5.0, 5.0)
       [1]: parametric cartesian line: (cos(u), u) for u over (-5.0, 5.0)


    See Also
    ========
    Plot, Parametric2DLineSeries

    R4   i   i   (	   Rn   Ro   R   R^  R   Ra  Rš   R   R4   (   R.   R/   R4   Rd  Re  RG   Rf  (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot_parametricY  s    ‹"c          O  s‡   t  t t |  ƒ ƒ }  | j d t ƒ } g  } t |  d d ƒ } g  | D] } t | | Ž  ^ qF } t | | Ž  } | rƒ | j ƒ  n  | S(   sº	  
    Plots a 3D parametric line plot.

    Usage
    =====

    Single plot:

    ``plot3d_parametric_line(expr_x, expr_y, expr_z, range, **kwargs)``

    If the range is not specified, then a default range of (-10, 10) is used.

    Multiple plots.

    ``plot3d_parametric_line((expr_x, expr_y, expr_z, range), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr_x`` : Expression representing the function along x.

    ``expr_y`` : Expression representing the function along y.

    ``expr_z`` : Expression representing the function along z.

    ``range``: ``(u, 0, 5)``, A 3-tuple denoting the range of the parameter
    variable.

    Keyword Arguments
    =================

    Arguments for ``Parametric3DLineSeries`` class.

    ``nb_of_points``: The range is uniformly sampled at ``nb_of_points``
    number of points.

    Aesthetics:

    ``line_color``: function which returns a float. Specifies the color for the
    plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class.

    ``title`` : str. Title of the plot.

    Examples
    ========

    .. plot::
       :context: reset
       :format: doctest
       :include-source: True

       >>> from sympy import symbols, cos, sin
       >>> from sympy.plotting import plot3d_parametric_line
       >>> u = symbols('u')

    Single plot.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d_parametric_line(cos(u), sin(u), u, (u, -5, 5))
       Plot object containing:
       [0]: 3D parametric cartesian line: (cos(u), sin(u), u) for u over (-5.0, 5.0)


    Multiple plots.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d_parametric_line((cos(u), sin(u), u, (u, -5, 5)),
       ...     (sin(u), u**2, u, (u, -5, 5)))
       Plot object containing:
       [0]: 3D parametric cartesian line: (cos(u), sin(u), u) for u over (-5.0, 5.0)
       [1]: 3D parametric cartesian line: (sin(u), u**2, u) for u over (-5.0, 5.0)


    See Also
    ========

    Plot, Parametric3DLineSeries

    R4   i   i   (	   Rn   Ro   R   R^  R   Ra  R°   R   R4   (   R.   R/   R4   Rd  Re  RG   Rf  (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot3d_parametric_lineï  s    c"c          O  s‡   t  t t |  ƒ ƒ }  | j d t ƒ } g  } t |  d d ƒ } g  | D] } t | | Ž  ^ qF } t | | Ž  } | rƒ | j ƒ  n  | S(   s  
    Plots a 3D surface plot.

    Usage
    =====

    Single plot

    ``plot3d(expr, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plot with the same range.

    ``plot3d(expr1, expr2, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot3d((expr1, range_x, range_y), (expr2, range_x, range_y), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr`` : Expression representing the function along x.

    ``range_x``: (x, 0, 5), A 3-tuple denoting the range of the x
    variable.

    ``range_y``: (y, 0, 5), A 3-tuple denoting the range of the y
     variable.

    Keyword Arguments
    =================

    Arguments for ``SurfaceOver2DRangeSeries`` class:

    ``nb_of_points_x``: int. The x range is sampled uniformly at
    ``nb_of_points_x`` of points.

    ``nb_of_points_y``: int. The y range is sampled uniformly at
    ``nb_of_points_y`` of points.

    Aesthetics:

    ``surface_color``: Function which returns a float. Specifies the color for
    the surface of the plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot.

    Examples
    ========

    .. plot::
       :context: reset
       :format: doctest
       :include-source: True

       >>> from sympy import symbols
       >>> from sympy.plotting import plot3d
       >>> x, y = symbols('x y')

    Single plot

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d(x*y, (x, -5, 5), (y, -5, 5))
       Plot object containing:
       [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with same range

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d(x*y, -x*y, (x, -5, 5), (y, -5, 5))
       Plot object containing:
       [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)
       [1]: cartesian surface: -x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)


    Multiple plots with different ranges.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d((x**2 + y**2, (x, -5, 5), (y, -5, 5)),
       ...     (x*y, (x, -3, 3), (y, -3, 3)))
       Plot object containing:
       [0]: cartesian surface: x**2 + y**2 for x over (-5.0, 5.0) and y over (-5.0, 5.0)
       [1]: cartesian surface: x*y for x over (-3.0, 3.0) and y over (-3.0, 3.0)


    See Also
    ========
    Plot, SurfaceOver2DRangeSeries

    R4   i   i   (	   Rn   Ro   R   R^  R   Ra  R¹   R   R4   (   R.   R/   R4   Rd  Re  RG   Rf  (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot3d]  s    x"c          O  s‡   t  t t |  ƒ ƒ }  | j d t ƒ } g  } t |  d d ƒ } g  | D] } t | | Ž  ^ qF } t | | Ž  } | rƒ | j ƒ  n  | S(   sa	  
    Plots a 3D parametric surface plot.

    Usage
    =====

    Single plot.

    ``plot3d_parametric_surface(expr_x, expr_y, expr_z, range_u, range_v, **kwargs)``

    If the ranges is not specified, then a default range of (-10, 10) is used.

    Multiple plots.

    ``plot3d_parametric_surface((expr_x, expr_y, expr_z, range_u, range_v), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr_x``: Expression representing the function along ``x``.

    ``expr_y``: Expression representing the function along ``y``.

    ``expr_z``: Expression representing the function along ``z``.

    ``range_u``: ``(u, 0, 5)``,  A 3-tuple denoting the range of the ``u``
    variable.

    ``range_v``: ``(v, 0, 5)``,  A 3-tuple denoting the range of the v
    variable.

    Keyword Arguments
    =================

    Arguments for ``ParametricSurfaceSeries`` class:

    ``nb_of_points_u``: int. The ``u`` range is sampled uniformly at
    ``nb_of_points_v`` of points

    ``nb_of_points_y``: int. The ``v`` range is sampled uniformly at
    ``nb_of_points_y`` of points

    Aesthetics:

    ``surface_color``: Function which returns a float. Specifies the color for
    the surface of the plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied for
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.


    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot.

    Examples
    ========

    .. plot::
       :context: reset
       :format: doctest
       :include-source: True

       >>> from sympy import symbols, cos, sin
       >>> from sympy.plotting import plot3d_parametric_surface
       >>> u, v = symbols('u v')

    Single plot.

    .. plot::
       :context: close-figs
       :format: doctest
       :include-source: True

       >>> plot3d_parametric_surface(cos(u + v), sin(u - v), u - v,
       ...     (u, -5, 5), (v, -5, 5))
       Plot object containing:
       [0]: parametric cartesian surface: (cos(u + v), sin(u - v), u - v) for u over (-5.0, 5.0) and v over (-5.0, 5.0)


    See Also
    ========
    Plot, ParametricSurfaceSeries

    R4   i   i   (	   Rn   Ro   R   R^  R   Ra  RÇ   R   R4   (   R.   R/   R4   Rd  Re  RG   Rf  (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot3d_parametric_surfaceà  s    ]"c          O  s¦   t  t t |  ƒ ƒ }  | j d t ƒ } t |  d d ƒ } g  | D] } t | Œ  ^ q@ } t | | Ž  } t | d j	 ƒ d k r t
 d ƒ ‚ n  | r¢ | j ƒ  n  | S(   sÙ  
    Draws contour plot of a function

    Usage
    =====

    Single plot

    ``plot_contour(expr, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plot with the same range.

    ``plot_contour(expr1, expr2, range_x, range_y, **kwargs)``

    If the ranges are not specified, then a default range of (-10, 10) is used.

    Multiple plots with different ranges.

    ``plot_contour((expr1, range_x, range_y), (expr2, range_x, range_y), ..., **kwargs)``

    Ranges have to be specified for every expression.

    Default range may change in the future if a more advanced default range
    detection algorithm is implemented.

    Arguments
    =========

    ``expr`` : Expression representing the function along x.

    ``range_x``: (x, 0, 5), A 3-tuple denoting the range of the x
    variable.

    ``range_y``: (y, 0, 5), A 3-tuple denoting the range of the y
     variable.

    Keyword Arguments
    =================

    Arguments for ``ContourSeries`` class:

    ``nb_of_points_x``: int. The x range is sampled uniformly at
    ``nb_of_points_x`` of points.

    ``nb_of_points_y``: int. The y range is sampled uniformly at
    ``nb_of_points_y`` of points.

    Aesthetics:

    ``surface_color``: Function which returns a float. Specifies the color for
    the surface of the plot. See ``sympy.plotting.Plot`` for more details.

    If there are multiple plots, then the same series arguments are applied to
    all the plots. If you want to set these options separately, you can index
    the returned ``Plot`` object and set it.

    Arguments for ``Plot`` class:

    ``title`` : str. Title of the plot.

    See Also
    ========
    Plot, ContourSeries
    R4   i   i   i    s5   Contour Plot cannot Plot for more than two variables.(   Rn   Ro   R   R^  R   Ra  RÔ   R   R@   R]  Rî   R4   (   R.   R/   R4   Re  RG   Rd  t   plot_contours(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   plot_contourG  s    Dc         C  sÎ  | d k rt  |  d t ƒ rt |  ƒ | k  r@ t d ƒ ‚ n  xA t t |  ƒ ƒ D] } t  |  | t ƒ rS PqS qS Wt |  ƒ d } t |  |  Œ  } t t ƒ  j g  | D] } | j	 ^ q§ Œ  ƒ } t |  ƒ | | k rò | t |  | Œ  g } n‹ t d d ƒ } g  }	 x% | D] }
 |	 j
 t |
 ƒ | ƒ qWx8 t t | ƒ | ƒ D]  } |	 j
 t t ƒ  ƒ | ƒ qFW| t |	 Œ  g } | St  |  d t ƒ sÉt  |  d t ƒ rït |  d ƒ | k rï| d k rïx t t |  ƒ ƒ D]] } t  |  | t ƒ rt |  | ƒ | k rPn  t  |  | t ƒ sÜt |  | ƒ |  | <qÜqÜWt |  ƒ d } |  |  } t d „  | Dƒ ƒ sst ‚ t t ƒ  j g  | D] } | D] } | j	 ^ qq†Œ  ƒ } t | ƒ | k rÓt d | ƒ ‚ n  t |  ƒ | | k rGt  |  | t ƒ rGt g  |  | | | !D] } | ^ qŒ  }	 g  | D] } | |	 ^ q-} | St d d ƒ } g  }	 x% | D] }
 |	 j
 t |
 ƒ | ƒ qcWx8 t | t | ƒ ƒ D]  } |	 j
 t t ƒ  ƒ | ƒ q›Wt |	 Œ  }	 g  | D] } | |	 ^ qÒ} | SnÛ t  |  d t ƒ rÊt |  d ƒ | | k rÊx§ |  D]Ÿ } xD t | ƒ D]6 } t  | | t ƒ s6t d	 t | | ƒ ƒ ‚ q6q6WxO t | ƒ D]A } t | | | ƒ d k s}t d
 t | | | ƒ ƒ ‚ q}q}Wq#W|  Sd S(   s  
    Checks the arguments and converts into tuples of the
    form (exprs, ranges)

    Examples
    ========

    .. plot::
       :context: reset
       :format: doctest
       :include-source: True

       >>> from sympy import plot, cos, sin, symbols
       >>> from sympy.plotting.plot import check_arguments
       >>> x = symbols('x')
       >>> check_arguments([cos(x), sin(x)], 2, 1)
           [(cos(x), sin(x), (x, -10, 10))]

       >>> check_arguments([x, x**2], 1, 1)
           [(x, (x, -10, 10)), (x**2, (x, -10, 10))]
    i   i    s*   len(args) should not be less than expr_leniöÿÿÿi
   i   c         s  s+   |  ]! } | D] } t  | t ƒ Vq q d  S(   N(   RA   R   (   R†   R}   t   e(    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pys	   <genexpr>×  s    s?   The number of free_symbols in the expression is greater than %ds    Expected an expression, given %ss0   The ranges should be a tuple of length 3, got %sN(   RA   R   R@   Rî   R	   R   Rn   R\  t   unionR]  RE   R   Rí   t   AssertionErrorR8   (   R.   t   expr_lent   nb_of_free_symbolsR:   t   exprsRn  R]  Rf  t   default_ranget   rangest   symbolR}   t
   range_exprRG   (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyRa  –  sx    .&)
")	!-#(9   RJ   t
   __future__R    R   R  t   sympyR   R   R   R   R   t   sympy.externalR   t   sympy.core.functionR   t   sympy.core.compatibilityR	   R
   t   sympy.utilities.iterablesR   t   experimental_lambdifyR   R   t   sympy.plotting.textplotR   R   R   R   t   objectR   RB   RW   Rw   Rz   Rš   R¯   R°   R´   R¹   RÇ   RÔ   RÕ   R×   RA  R(   t   plot_backendsRm   R¶   R‹   R  Rg  Rh  Ri  Rj  Rk  Rm  Ra  (    (    (    s2   lib/python2.7/site-packages/sympy/plotting/plot.pyt   <module>   sT   (	ãM2x% #2,À	
					µ	–	n	ƒ	g	O