rL ia(~dZddlZddlZddlZddlmZmZddlm Z ddl m Z ddl mZddlmZmZddlmZdd lmZGd d ej,ZGd d ej,ZGddeZGddej2ZGddZej6edZeeej:ZeZy)z/ An experimental support for curvilinear grid. N)_apicbook)Path)host_axes_class_factory) axislinesgrid_helper_curvelinear) AxisArtist)ExtremeFinderSimplec eZdZy)FloatingAxisArtistHelperN)__name__ __module__ __qualname__k/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mpl_toolkits/axisartist/floating_axes.pyr r srr c2eZdZdfd ZdZdZdZxZS)FixedAxisArtistHelperc |jjdgdz\}}}}tjt |df|df|df|df|\}} t ||| |||| }||_||_||_ ||_ y)z} nth_coord = along which coordinate value varies. nth_coord = 0 -> x axis, nth_coord = 1 -> y axis Nrrleftrightbottomtop)sideaxis_direction) grid_finderextreme_finderr check_getitemdictsuper__init__nth_coord_ticksvalue grid_helper_side) selfr(rr&lon1lon2lat1lat2r' nth_coord __class__s rr%zFixedAxisArtistHelper.__init__s "H!8!8!G!G$RS!TdD$-- tQiay$q Ry itL  "'O. & rcp|jj||jj|_yN)r( update_lim _grid_info)r*axess rr3z FixedAxisArtistHelper.update_lim1s) ##D)**55rc |jj|jd\}}}||z }|jd\}}}||z } |jjjdgdz} t | dd\} } t | dd\} }fd}|j dk(rR| |k||kz}t j||j||| | f| |f\\ \}}\}}|jdn`|j d k(rQ| | k| | kz}t j|| ||j| | f| |f\\ \}}\}}|jd tDcgc] \}}|s | c}}tjtj|dk(|dk(z}|tjdz z|<|jjz tj t"j$j&d  fd }|t)gfScc}}w) z9tick_loc, tick_angle, tick_label, (optionally) tick_labellat_infolon_infoNrcjjz}|jtjtj ||j Sr2) get_transform transData transformnp column_stackbroadcast_arraysT)xytrfr5r s rtrf_xyz8FixedAxisArtistHelper.get_tick_iterators..trf_xyDsE++->C==1D1DQ1J!KLNN Nrr lat_labelsr lon_labels)rrc3Kt  D]T\}}}}} j||f}|ds(|ds4||ggtj||g|Vyw)Nrr)zipr=r>rad2deg) rBrCnormaltangentlabc2 angle_normal angle_tangentin_01labels tick_to_axesxx1yy1s rf1z4FixedAxisArtistHelper.get_tick_iterators..f1as~3\=&I F*1fgs!++QF3Aarctan2piget_tick_transform transAxes functoolspartialmpl transforms_interval_contains_closeiter)!r*r5lat_levslat_n lat_factoryy0lon_levslon_n lon_factorxx0extremesxminxmaxyminymaxrEmaskdxx1dyy1dxx2dyy2lmmmrVrOrPr rQrRrSrTrUs! ` @@@@@@@@rget_tick_iteratorsz(FixedAxisArtistHelper.get_tick_iterators5sM&&22 &*ooj&A#%#&*ooj&A#%#>4##//>> KHRaL) dHQRL) d O >>Q CKC4K0D';;DJJD D$<$O 3JS# tltT__\2F ^^q CKC4K0D';;CItzzD$<$O 3JS# tltT__\2F #FD 171Q!7zz$-  4. aiDAI &(,ruuqy8 R..t4t~~E !! NN 3 3V= F FtT"X~%8s / H>:H>c|j|tdddd|j\}}|j||\}}t t j ||gS)N) lon_lines0r)rzr) lat_lines0r)r{rr)r3r#r)r4rr>r?)r*r5kvxxyys rget_linezFixedAxisArtistHelper.get_linejsg *+,)+,0::71#A&BBOORH-..rr2)rrrr%r3rxr __classcell__r0s@rrrs$63j/rrceZdZdZdZy)ExtremeFinderFixedc||_y)z This subclass always returns the same bounding box. Parameters ---------- extremes : (float, float, float, float) The bounding box that this helper always returns. N _extremes)r*rks rr%zExtremeFinderFixed.__init__ws "rc|jSr2r)r* transform_xyx1y1x2y2s r__call__zExtremeFinderFixed.__call__s ~~rN)rrrr%rrrrrrts  "rrc@eZdZ dfd Z ddZdZddZxZS)GridHelperCurveLinearcBt||t|||||y)N)r! grid_locator1 grid_locator2tick_formatter1tick_formatter2)r$r%r)r* aux_transrkrrrrr0s rr%zGridHelperCurveLinear.__init__s- (:8(D'4'4)8)8  :rc| |j}||}t|||}t|||}|jj d|jj |jj |S)N)r&rT)r5rr line set_clip_on set_clip_boxbbox)r*locr/roffsetr5helperaxislines rnew_fixed_axisz$GridHelperCurveLinear.new_fixed_axisso <99D  ! N' #y2dF>J !!$' ""8==#5#56rc |jt|_|j}|j}|j|j||||}t |dd\}} t |dd\} } || | | f|d<|j || \} } }tj| } |j| | \}}}tj|}| | |f|d<|||f|d<|jdd|| |d<|jdd|||d<| d| |z }|d||z }|j|||k|| kz|| |k|| kz|| | | \}}||d <||d <|j|dd|ddg|\}}||d <||d <y) Nr9rkr8r7rrrGrF lon_lines lat_linesrzr{) r4r#r r!inv_transform_xyrWrr>asarrayr _format_ticks_get_raw_grid_lines)r*rrrr grid_infor rklon_minlon_maxlat_minlat_maxrgrhrircrdre lon_values lat_valuesrrs r _update_gridz"GridHelperCurveLinear._update_grids ?? ""fDOOO && --k.J.J.0"b">"(2A,/!(12,/ ''7 B *  % %gw 7 $%::h'  % %gw 7 $%::h' (% ; * (% ; *"-";"; xX#/ ,"-";"; xX#/ ,fu% 2 fu% 2 *>> *,g1EF G *,g1EF G Wgw 0 9 "+ +!* +>{>> RaL(12, 3)1 3 9#, ,"+ ,rcg}|dvr|j|jd|dvr|j|jd|S)N)bothrBr)rrCr)extendr4)r*whichaxis grid_liness r get_gridlinesz#GridHelperCurveLinear.get_gridlinessK =   dook: ; =   dook: ;r)NNNN)majorr)rrrr%rrrrrs@rrrs- $#!%!% :OS<-,^rrc4eZdZfdZdZfdZdZxZS)FloatingAxesBasectjt|t||d|i||j dy)N)r(r(g?)rcheck_isinstancerr$r% set_aspect)r*r(argskwargsr0s rr%zFloatingAxesBase.__init__s7 3M $BKB6B rc|jjjdgdz\}}}}tj||f||f||f||fg}d|j _|S)Nrd)get_grid_helperr r!mpatchesPolygonget_path_interpolation_steps)r*x0ry0rpatchs r_gen_axes_patchz FloatingAxesBase._gen_axes_patchsoJ--/;;JJTFUVJWBB  2r(RHr2hR!IJ03- rct||jj|j j j |jzt|!}|j|jd|j|j|jj||jj||jy)NF)root)r$clearr set_transformrr r;r<r set_figure get_figurer\ set_clip_path gridlinesadjust_axes_lim)r* orig_patchr0s rrzFloatingAxesBase.clears      " . . < < >nn   W,. doo5o9:  0   , $$Z0 rc\|jjj|jj|jz }|j dd}|j |j|j|j|j|jy)NgRQ?) rr get_extentsr;r<expandedset_xlimrlrmset_ylimrnro)r*rs rrz FloatingAxesBase.adjust_axes_limsvzz""$00 JJ $ $ & 79}}T4( dii+ dii+r)rrrr%rrrrrs@rrrs  ,rrz Floating{}) __doc__r]numpyr> matplotlibr_rrmatplotlib.patchespatchesrmatplotlib.pathr%mpl_toolkits.axes_grid1.parasite_axesrrr axis_artistr r r r rrrr_make_class_factoryfloatingaxes_class_factoryAxes FloatingAxesFloatingSubplotrrrrs"% I0#, 88 T/3LLT/n,&b3IIbJ",",J7U667GV)*A)..*QR r