
    g=0                         d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZ dd	lmZ d
 Z G d de      Z G d de      Z G d de      Zy)z/
An experimental support for curvilinear grid.
    N)_api)Path)Affine2DIdentityTransform   )_FixedAxisArtistHelperBase_FloatingAxisArtistHelperBaseGridHelperBase)
AxisArtist)
GridFinderc                 *   t        j                  t              j                  dz  } | ||      }t	        |      \  }}||z
  }	||z
  }
t        j
                  ddg|
|	k\        t        j                  |t        j                  |	|
            z  } | ||z   |      }t	        |      \  }}||z
  }||z
  }t        j
                  ddg||k\        t        j                  |t        j                  ||            z  } | |||z         }|||z
  |z  ||z
  |z  fS )z
    Compute *func* and its derivatives along x and y at positions *xs*, *ys*,
    while ensuring that finite difference calculations don't try to evaluate
    values outside of *xlims*, *ylims*.
    g      ?r   )npfinfofloatepssortedtakeminimummaximum)funcxsysxlimsylimsr   valxloxhidxlodxhixepsval_dxyloyhidylodyhiyepsval_dys                      l/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/mpl_toolkits/axisartist/grid_helper_curvelinear.py_value_and_jacobianr*      s    ((5/

#
&C
r2,C e}HC8D8DGGRGTT\*jjbjjt456D"t)R Fe}HC8D8DGGRGTT\*jjbjjt456D"b4i F&3,$&#(=>>    c                   6     e Zd ZdZd fd	Zd Zd Zd Z xZS )FixedAxisArtistHelperz(
    Helper class for a fixed axis.
    c                 l    t         |   |       || _        || j                  }|| _        || _        y)}
        nth_coord = along which coordinate value varies.
         nth_coord = 0 ->  x axis, nth_coord = 1 -> y axis
        )locN)super__init__grid_helper	nth_coordnth_coord_ticksside)selfr3   r6   r5   	__class__s       r)   r2   zFixedAxisArtistHelper.__init__1   s;     	T"&""nnO.	r+   c                 :    | j                   j                  |       y N)r3   
update_limr7   axess     r)   r;   z FixedAxisArtistHelper.update_lim@   s    ##D)r+   c                     |j                   S r:   	transDatar<   s     r)   get_tick_transformz(FixedAxisArtistHelper.get_tick_transformC       ~~r+   c                      j                   dk(  r|j                         n|j                         \  }}||kD  rddddd j                     n j                  t	        dddd          fd	} |       t        g       fS )
z tick_loc, tick_angle, tick_labelr   rightleftbottomtop)rE   rD   rG   rF   Z   rE   rD   rF   rG   c               3      K   j                   dfdj                   z
  dffD ]E  \  } }j                  j                  ddg|       }|d      D ]  }g |d   |r|d   nd	  G y w)
NTr   Flonlatticksr0   label )r5   r3   
_grid_info)r4   show_labelsgitickangle_tangentr7   r6   s       r)   
iter_majorz<FixedAxisArtistHelper.get_tick_iterators.<locals>.iter_majorQ   s     ))401t7K7K3KU2S+U C&	;%%00%	1JKwK- CDCDK C C-8DMbC CCCs   A)A,)r4   get_ylimget_xlimr6   dictiter)r7   r=   v1v2rU   rT   r6   s   `    @@r)   get_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iteratorsF   s    $(NNa$7T]]_B7#f#u66:iiAD 99D"Bqa@F	C |T"X%%r+   r:   )	__name__
__module____qualname____doc__r2   r;   rA   r\   __classcell__r8   s   @r)   r-   r-   ,   s    *&r+   r-   c                   P     e Zd Zd
 fd	Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )FloatingAxisArtistHelperc                     t         |   ||       || _        || _        t        j
                   t        j
                  f| _        d| _        y)r/   d   N)r1   r2   valuer3   r   inf	_extremes_line_num_points)r7   r3   r4   rg   axis_directionr8   s        r)   r2   z!FloatingAxisArtistHelper.__init__^   s@    
 	E*
&&&"&& #r+   c                 `    |t         j                   }|t         j                  }||f| _        y r:   )r   rh   ri   )r7   e1e2s      r)   set_extremesz%FloatingAxisArtistHelper.set_extremesi   s+    :&&B:BRr+   c           
         | j                   j                  |       |j                         \  }}|j                         \  }}| j                   j                  }|j                  |j                  ||||      }|\  }}	}
}| j                  \  }}| j                  dk(  rt        ||
      }
t        ||      }n'| j                  dk(  rt        ||      }t        ||	      }	|j                  ||	      \  }}}|j                  |
|      \  }}}| j                  dk(  rat        j                  | j                  | j                         }t        j"                  |
|| j                        }|j%                  ||      \  }}no| j                  dk(  r`t        j"                  ||	| j                        }t        j                  | j                  | j                         }|j%                  ||      \  }}||	|
|f||t        j&                  |      f||t        j&                  |      f|j)                  dd||      |j)                  dd||      fd| _        y )Nr   r   rF      )extremeslon_infolat_info
lon_labels
lat_labelsline_xy)r3   r;   rW   rV   grid_finderextreme_finderinv_transform_xyri   r4   maxmingrid_locator1grid_locator2r   fullrj   rg   linspacetransform_xyasarray_format_ticksrP   )r7   r=   x1x2y1y2rx   rr   lon_minlon_maxlat_minlat_maxe_mine_maxlon_levslon_n
lon_factorlat_levslat_n
lat_factorxx0yy0xxyys                           r)   r;   z#FloatingAxisArtistHelper.update_limp   s!   ##D)BB&&22--k.J.J.0"b"> .6*'7~~u>>Q%)G%)G^^q %)G%)G %%gw7 	$% %%gw7 	$% >>Q''$//<C++gw0E0EFC --c37FB^^q ++gw0E0EFC''$//<C --c37FB !'7G<!5"**Z*@A!5"**Z*@A%338Z3%338Z3Bx	
r+   c                     t               S r:   )r   r<   s     r)   get_axislabel_transformz0FloatingAxisArtistHelper.get_axislabel_transform   s
    zr+   c           	      
     fd} j                   d   \  }}}} j                  dk(  r j                  }||z   dz  }n# j                  dk(  r||z   dz  } j                  }t        |||f||f      \  }	}
}j                  j                         j                  |	      }d|d   cxk  rdk  rRn yd|d   cxk  rdk  rAn y||
g j                     }|	t        j                  t        j                  |d d d          fS y)Nc                     j                   j                  j                         j                  z   }|j	                  | |g      j
                  S r:   )r3   rx   get_transformr@   	transformTxytrfr=   r7   s      r)   trf_xyz@FloatingAxisArtistHelper.get_axislabel_pos_angle.<locals>.trf_xy   s?    ""..<<>OC==!Q(***r+   rr   r   rq   r   r   )NN)
rP   r4   rg   r*   	transAxesinvertedr   r   rad2degarctan2)r7   r=   r   xminxmaxyminymaxr   r   xy1dxy1_dxdxy1_dypds   ``            r)   get_axislabel_pos_anglez0FloatingAxisArtistHelper.get_axislabel_pos_angle   s   	+ "&!<dD$>>Q**C$;!#C^^q $;!#C**C 3CtTlT4L!:WgNN##%//4!>> 	  1Q4n1n  '"4>>2A

2::q2w#7888r+   c                     t               S r:   )r   r<   s     r)   rA   z+FloatingAxisArtistHelper.get_tick_transform   s     ""r+   c                 4     j                   d   \  }}}||z  } j                   d   \  }}}||z  }	 j                  \  }
} fd} j                  dk(  re|
|k  ||k  z  }t        | j                  ||   t
        j                   t
        j                  f|
|f      \  \  \  }}\  }} j                   d   ns j                  dk(  rd|
|	k  |	|k  z  }t        ||	|    j                  t
        j                   t
        j                  f|
|f      \  \  \  }}\  }} j                   d   t              D cg c]
  \  }}|s	| c}}t        j                        t        j                        |dk(  |dk(  z  }|   t
        j                  dz  z   |<    j                        j                  z
  t        j                  t        j                  j                   d	      fd
} |       t#        g       fS c c}}w )z9tick_loc, tick_angle, tick_label, (optionally) tick_labelrt   rs   c                     j                   j                  j                         j                  z   }|j	                  t        j                  t        j                  | |                  j                  S r:   )	r3   rx   r   r@   r   r   column_stackbroadcast_arraysr   r   s      r)   r   z;FloatingAxisArtistHelper.get_tick_iterators.<locals>.trf_xy   sQ    ""..<<>OC==1D1DQ1J!KLNNNr+   r   rv   r   ru   rq   )r   r   c               3      K   t        	      D ]T  \  } }}}}
j                  | |f      } |d         s( |d         s4| |ggt        j                  ||g      | V y w)Nr   r   )zipr   r   r   )r   r   normaltangentlabc2angle_normalrT   in_01labelstick_to_axesxx1yy1s         r)   rU   z?FloatingAxisArtistHelper.get_tick_iterators.<locals>.iter_major   s~     3\=&IF*1fgs!++QF3A<E"Q%La&E2::vw.?#@E#EE	Fs   7A+A+$A+)rP   ri   r4   r*   rg   r   rh   r   r   pirA   r   	functoolspartialmpl
transforms_interval_contains_closerY   )r7   r=   r   r   r   r   r   r   r   r   e0rm   r   maskdxx1dyy1dxx2dyy2lmmmrU   r   rT   r   r   r   r   r   s   ``                    @@@@@@@r)   r\   z+FloatingAxisArtistHelper.get_tick_iterators   s     '+ooj&A#%#&*ooj&A#%#B	O
 >>Q#I#),D5H

CI/@2r(6L2JS#tltT__\2F^^q #I#),D5HD	4::/@2r(6L2JS#tltT__\2F #FD 171Q!7zz$-

4.aiDAI&(,ruuqy8R..t4t~~E!!NN33V=	F 	F |T"X%%% 8s   
HHc                     |j                   S r:   r?   r<   s     r)   get_line_transformz+FloatingAxisArtistHelper.get_line_transform   rB   r+   c                     | j                  |       | j                  d   \  }}t        t        j                  ||g            S )Nrw   )r;   rP   r   r   r   )r7   r=   r   r   s       r)   get_linez!FloatingAxisArtistHelper.get_line   s8    y)1BOOQF+,,r+   r:   )r]   r^   r_   r2   ro   r;   r   r   rA   r\   r   r   ra   rb   s   @r)   rd   rd   \   s2    	$ )
V*#.&`-r+   rd   c                        e Zd Z	 	 	 	 	 d
 fd	ZddZ ej                  dd      	 dd       ZddZd Z	ddZ
 ej                  d      dd	       Z xZS )GridHelperCurveLinearc                 Z    t         |           d| _        t        ||||||      | _        y)a  
        Parameters
        ----------
        aux_trans : `.Transform` or tuple[Callable, Callable]
            The transform from curved coordinates to rectilinear coordinate:
            either a `.Transform` instance (which provides also its inverse),
            or a pair of callables ``(trans, inv_trans)`` that define the
            transform and its inverse.  The callables should have signature::

                x_rect, y_rect = trans(x_curved, y_curved)
                x_curved, y_curved = inv_trans(x_rect, y_rect)

        extreme_finder

        grid_locator1, grid_locator2
            Grid locators for each axis.

        tick_formatter1, tick_formatter2
            Tick formatters for each axis.
        N)r1   r2   rP   r   rx   )r7   	aux_transry   r}   r~   tick_formatter1tick_formatter2r8   s          r)   r2   zGridHelperCurveLinear.__init__   s5    4 	%i&4&3&3&5&57r+   c                     || j                   j                  |        | j                   j                  di | d | _        y )N )rx   update_transformupdate_old_limits)r7   r   kwargss      r)   update_grid_finderz(GridHelperCurveLinear.update_grid_finder  s=     --i8)&)r+   z3.9r4   c                 b    || j                   }||}t        | ||      }t        |||      }|S )N)r5   )rk   )r=   r-   r   )r7   r0   r4   rk   offsetr=   helperaxislines           r)   new_fixed_axisz$GridHelperCurveLinear.new_fixed_axis  s@     <99D! N&tS)LdF>J r+   c                     || j                   }t        | |||      }t        ||      }|j                  j	                  d       |j                  j                  |j                   j                         |S )NT)r=   rd   r   lineset_clip_onset_clip_boxbbox)r7   r4   rg   r=   rk   r   r   s          r)   new_floating_axisz'GridHelperCurveLinear.new_floating_axis&  sd    <99D))UN4dF+!!$'""8==#5#56 r+   c                 J    | j                   j                  ||||      | _        y r:   )rx   get_grid_inforP   )r7   r   r   r   r   s        r)   _update_gridz"GridHelperCurveLinear._update_grid2  s     **88RRHr+   c                     g }|dv r(| j                   d   d   D ]  }|j                  |        |dv r(| j                   d   d   D ]  }|j                  |        |S )N)bothr   rK   lines)r   r   rL   )rP   extend)r7   whichaxis
grid_linesgls        r)   get_gridlinesz#GridHelperCurveLinear.get_gridlines5  ss    
= ooe,W5 &!!"%&= ooe,W5 &!!"%&r+   c              #      K   t        dddd      |   }ddg|   }|s,| j                  |   d   |   D ]  }g |d   ||d     y | j                  |   d   |   D ]  }g |d   |d	  y w)
NrH   r   rI   rK   rL   rM   r0   rN   rO   )rX   rP   )r7   r4   	axis_sideminorrT   
lon_or_latrS   s          r)   get_tick_iteratorz'GridHelperCurveLinear.get_tick_iterator?  s     "Bqa@KU^I.

3G<YG A@tE{@M@4=@@A 
3G<YG 65tE{5M52556s   A1A3)NNNNNr:   )NNNN)NrF   )majorr   )F)r]   r^   r_   r2   r   r   make_keyword_onlyr   r   r   r   
deprecatedr   ra   rb   s   @r)   r   r      sr     $##!%!%!7F  TE;/NR
 0

I T__U6 6r+   r   )r`   r   numpyr   
matplotlibr   r   matplotlib.pathr   matplotlib.transformsr   r   	axislinesr   r	   r
   axis_artistr   rx   r   r*   r-   rd   r   r   r+   r)   <module>r     sa          =O O # #?2-&6 -&`P-< P-fY6N Y6r+   