
    \h                     F    S SK Jr  S SKJs  Js  Jr  SS/0r " S S5      rg)    )import_moduleN)PlotGrid
matplotlibc                   f    \ rS rSrSrSSS.S jrS r\S 5       r\S	 5       r	S
 r
S rS rS rSrg)r      a  This class helps to plot subplots from already created SymPy plots
in a single figure.

Examples
========

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

    >>> from sympy import symbols
    >>> from sympy.plotting import plot, plot3d, PlotGrid
    >>> x, y = symbols('x, y')
    >>> p1 = plot(x, x**2, x**3, (x, -5, 5))
    >>> p2 = plot((x**2, (x, -6, 6)), (x, (x, -5, 5)))
    >>> p3 = plot(x**3, (x, -5, 5))
    >>> p4 = plot3d(x*y, (x, -5, 5), (y, -5, 5))

Plotting vertically in a single line:

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

    >>> PlotGrid(2, 1, p1, p2)
    PlotGrid object containing:
    Plot[0]: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)
    Plot[1]: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)

Plotting horizontally in a single line:

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

    >>> PlotGrid(1, 3, p2, p3, p4)
    PlotGrid object containing:
    Plot[0]: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)
    Plot[1]:Plot object containing:
    [0]: cartesian line: x**3 for x over (-5.0, 5.0)
    Plot[2]:Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)

Plotting in a grid form:

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

    >>> PlotGrid(2, 2, p1, p2, p3, p4)
    PlotGrid object containing:
    Plot[0]: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)
    Plot[1]: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)
    Plot[2]:Plot object containing:
    [0]: cartesian line: x**3 for x over (-5.0, 5.0)
    Plot[3]:Plot object containing:
    [0]: cartesian surface: x*y for x over (-5.0, 5.0) and y over (-5.0, 5.0)

TN)showsizec                4   [        SS/ SQ0S[        4S9U l        Xl        X l        / U l        SU l        XPl        U H(  nU R
                  R                  UR
                  5        M*     X@l	        U(       a#  U R                  (       a  U R                  5         ggg)a	  
Parameters
==========

nrows :
    The number of rows that should be in the grid of the
    required subplot.
ncolumns :
    The number of columns that should be in the grid
    of the required subplot.

nrows and ncolumns together define the required grid.

Arguments
=========

A list of predefined plot objects entered in a row-wise sequence
i.e. plot objects which are to be in the top row of the required
grid are written first, then the second row objects and so on

Keyword arguments
=================

show : Boolean
    The default value is set to ``True``. Set show to ``False`` and
    the function will not display the subplot. The returned instance
    of the ``PlotGrid`` class can then be used to save or display the
    plot by calling the ``save()`` and ``show()`` methods
    respectively.
size : (float, float), optional
    A tuple in the form (width, height) in inches to specify the size of
    the overall figure. The default value is set to ``None``, meaning
    the size will be set by the default backend.
r   fromlist)pyplotcmcollectionsz1.1.0)import_kwargsmin_module_versioncatchN)r   RuntimeErrorr   nrowsncolumns_series_figargsappendr	   r   )selfr   r   r   r	   r   kwargsargs           O/var/www/auris/envauris/lib/python3.13/site-packages/sympy/plotting/plotgrid.py__init__PlotGrid.__init__\   s    F (%'FG&|o? 
 		CLL, 	DOOIIK $4    c                 "   U R                   R                  R                  U R                  U R                  5      n0 nSn[        U R                  5       HR  n[        U R                  5       H6  nU[        U R                  5      :  a  U R                  U   X!XE4   '   US-  nM8     MT     U R                  (       d  0 OSU R                  0nU R                   R                  R                  " S0 UD6U l        UR                  5        H  u  px[        UR                  5      S:  a"  UR                  S   R                  (       a  SS0O0 nU R                  R                  " U40 UD6n	U R                  Ul        Xl        UR%                  5         M     g )Nr      figsize
projection3d )r   gridspecGridSpecr   r   rangelenr   r	   r   figurer   itemsr   is_3Dadd_subplot_plotgrid_fig_plotgrid_axprocess_series)
r   gsmappingcijkwspecpcur_axs
             r   _create_figurePlotGrid._create_figure   s6   __%%..tzz4==Itzz"A4==)s499~%(,		!GqtH%Q * # yyRy$))&<OO**117B7	}}GD+.qyy>A+=		!""  &)+ YY**4626F"iiAO#N 'r   c                 \    U R                   (       d  U R                  5         U R                   $ N)r   r:   r   s    r   figPlotGrid.fig   s    yy!yyr   c                     U $ r=   r%   r>   s    r   _backendPlotGrid._backend   s    r   c                 b    U R                   R                  R                  U R                  5        g r=   )r   r   closer?   r>   s    r   rE   PlotGrid.close   s    $$TXX.r   c                     [         R                  (       a?  U R                  R                  5         U R                  R
                  R                  5         g U R                  5         g r=   )base_backend_showr?   tight_layoutr   r   r   rE   r>   s    r   r   PlotGrid.show   s:    HH!!#OO""'')JJLr   c                 :    U R                   R                  U5        g r=   )r?   savefig)r   paths     r   savePlotGrid.save   s    r   c                     [        U R                  5       VVs/ s H  u  pSU-  [        U5      -   PM     nnnSSR                  U5      -   $ s  snnf )Nz	Plot[%d]:zPlotGrid object containing:

)	enumerater   strjoin)r   r4   plot	plot_strss       r   __str__PlotGrid.__str__   sU    %.tyy%9;%9'! "AoT2%9 	 ; /91EEE;s   A)r   r   r   r   r   r   r	   )__name__
__module____qualname____firstlineno____doc__r   r:   propertyr?   rB   rE   r   rO   rX   __static_attributes__r%   r   r   r   r      sX    JV 59t /b(  
  /Fr   r   )sympy.externalr   $sympy.plotting.backends.base_backendplottingbackendsrH   __doctest_requires__r   r%   r   r   <module>rf      s-    ( ; ; L> 
lF lFr   