Jc@sdZddkZddklZddklZddklZddkl Z ddk Z ye Wn#e j oddk lZ nXddkZddklZdd klZlZeZeoddk Z neiZd efd YZd efd YZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZ de fdYZ!de fdYZ"defdYZ#d e fd!YZ$d"Z%d#efd$YZ&d%e fd&YZ'd'Z(d(e fd)YZ)d*e fd+YZ*d,e fd-YZ+d.e fd/YZ,d0efd1YZ-d2d3e.d4Z/d5Z0d6Z1d7d7d8d9Z2dS(:s matplotlib includes a framework for arbitrary geometric transformations that is used determine the final position of all elements drawn on the canvas. Transforms are composed into trees of :class:`TransformNode` objects whose actual value depends on their children. When the contents of children change, their parents are automatically invalidated. The next time an invalidated transform is accessed, it is recomputed to reflect those changes. This invalidation/caching approach prevents unnecessary recomputations of transforms, and contributes to better interactive performance. For example, here is a graph of the transform tree used to plot data to the graph: .. image:: ../_static/transforms.png The framework can be used for both affine and non-affine transformations. However, for speed, we want use the backend renderers to perform affine transformations whenever possible. Therefore, it is possible to perform just the affine or non-affine part of a transformation on a set of data. The affine is always assumed to occur after the non-affine. For any transform:: full transform == non-affine part + affine part The backends are not expected to handle non-affine transformations themselves. iN(tma(taffine_transform(tinv(tWeakKeyDictionary(tSet(tPath(tcount_bboxes_overlapping_bboxtupdate_path_extentst TransformNodecBseZdZdZdZdZeeBZeZeZ eZ dZ dZ e Z dZdZeoeZdZeie_nd Zeogd Zn gd ZRS( sE :class:`TransformNode` is the base class for anything that participates in the transform tree and needs to invalidate its parents or be invalidated. This includes classes that are not really transforms, such as bounding boxes, since some transforms depend on bounding boxes to compute their values. iiicCst|_d|_dS(s7 Creates a new :class:`TransformNode`. iN(Rt_parentst_invalid(tself((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__init__Ps cGstdddS(Ns+TransformNode instances can not be copied. s Consider using frozen() instead.(tNotImplementedError(R targs((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__copy__]scCs|io |ip|i}|i|jodSt|ip||_dS|g}x^t|oP|i}|i|jp |io&|i|_|i|ii q\q\WdS(s Invalidate this :class:`TransformNode` and all of its ancestors. Should be called any time the transform changes. N( t is_affinetINVALID_AFFINEtINVALIDR tlenR tpopt pass_throughtextendtkeys(R tvaluetstacktroot((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt invalidatecs     cGs"x|D]}d|i| %s [label="%s", fontsize=10]; ( taddt __class__t__name__R tjointitemstwritethashthasattrR!t__dict__(RtpropsR't_[1]tkeytvalRtname(trecursetfobjtseent highlight(s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR8s8      @         s digraph G { s} N(tsetR/(R R9R;((R8R9R;R:s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytwrite_graphvizs   cCsdS(N((R R9R;((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s(R,t __module__t__doc__t_gidtINVALID_NON_AFFINERRtFalseRtis_bboxRR Rt __deepcopy__RRtDEBUGR R"R=(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR6s*      1tBboxBasecBseZdZeZeZeodZeeZndZ e ie _dZ dZ dZ ee dOdOdZdZeedOdOdZd ZeedOdOd Zd ZeedOdOd Zd ZeedOdOdZdZeedOdOdZdZeedOdOdZdZeedOdOdZdZeedOdOdZ dZ!ee!dOdOdZ"dZ#ee#dOdOdZ$dZ%ee%dOdOdZ&dZ'ee'dOdOdZ(dZ)ee)dOdOd Z*d!Z+ee+dOdOd"Z,d#Z-ee-dOdOd$Z.d%Z/ee/dOdOd&Z0d'Z1ee1dOdOd(Z2d)Z3ee3dOdOd*Z4d+Z5d,Z6d-Z7d.Z8d/Z9d0Z:d1Z;d2Z<d3Z=d4Z>d5Z?h dPd76dQd96dRd:6dSd<6dTd=6dUd>6dVd?6dWd@6dXdA6Z@dOdBZAdCZBdOd;dDZCdEZDdFZEdGZFdHZGdIZHdJZIdKZJdLZKdMZLedNZMRS(Ys This is the base class of all bounding boxes, and provides read-only access to its data. A mutable bounding box is provided by the :class:`Bbox` class. The canonical representation is as two points, with no restrictions on their ordering. Convenience properties are provided to get the left, bottom, right and top edges and width and height, but these are not stored explicity. cCswti|otidnti|}|d|ddjp|d|ddjotidndS( NsBbox bounds are a masked array.iisSingular Bbox.(ii(ii(ii(ii(Rt isMaskedArraytwarningstwarntnptasarray(tpoints((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_checks cCst|iiS(N(tBboxt get_pointstcopy(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"scOs |iS(N(RO(R Rtkwargs((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt __array__scCs(t|iiddddgjS(sk Returns True if the :class:`Bbox` is the unit bounding box from (0, 0) to (1, 1). gg?(tlistROtflatten(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytis_unitscCs|idS(Ni(ii(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_x0ss (property) :attr:`x0` is the first of the pair of *x* coordinates that define the bounding box. :attr:`x0` is not guaranteed to be less than :attr:`x1`. If you require that, use :attr:`xmin`.cCs|idS(Nii(ii(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_y0ss (property) :attr:`y0` is the first of the pair of *y* coordinates that define the bounding box. :attr:`y0` is not guaranteed to be less than :attr:`y1`. If you require that, use :attr:`ymin`.cCs|idS(Nii(ii(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_x1ss (property) :attr:`x1` is the second of the pair of *x* coordinates that define the bounding box. :attr:`x1` is not guaranteed to be greater than :attr:`x0`. If you require that, use :attr:`xmax`.cCs|idS(Ni(ii(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_y1ss (property) :attr:`y1` is the second of the pair of *y* coordinates that define the bounding box. :attr:`y1` is not guaranteed to be greater than :attr:`y0`. If you require that, use :attr:`ymax`.cCs|idS(Ni(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_p0ss (property) :attr:`p0` is the first pair of (*x*, *y*) coordinates that define the bounding box. It is not guaranteed to be the bottom-left corner. For that, use :attr:`min`.cCs|idS(Ni(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_p1ss (property) :attr:`p1` is the second pair of (*x*, *y*) coordinates that define the bounding box. It is not guaranteed to be the top-right corner. For that, use :attr:`max`.cCs t|idddfS(Ni(tminRO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_xmin#ssF (property) :attr:`xmin` is the left edge of the bounding box.cCs t|idddfS(Ni(R\RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_ymin(ssH (property) :attr:`ymin` is the bottom edge of the bounding box.cCs t|idddfS(Ni(tmaxRO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_xmax-ssG (property) :attr:`xmax` is the right edge of the bounding box.cCs t|idddfS(Ni(R_RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_ymax2ssE (property) :attr:`ymax` is the top edge of the bounding box.cCsBt|idddft|idddfgS(Nii(R\RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_min7ssV (property) :attr:`min` is the bottom-left corner of the bounding box.cCsBt|idddft|idddfgS(Nii(R_RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_max>ssL (property) :attr:`max` is the top-right corner of the bounding box.cCs|idddfS(Ni(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_intervalxDss (property) :attr:`intervalx` is the pair of *x* coordinates that define the bounding box. It is not guaranteed to be sorted from left to right.cCs|idddfS(Ni(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_intervalyKss (property) :attr:`intervaly` is the pair of *y* coordinates that define the bounding box. It is not guaranteed to be sorted from bottom to top.cCs|i}|d|dS(Nii(ii(ii(RO(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_widthRs sj (property) The width of the bounding box. It may be negative if :attr:`x1` < :attr:`x0`.cCs|i}|d|dS(Nii(ii(ii(RO(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_heightYs sk (property) The height of the bounding box. It may be negative if :attr:`y1` < :attr:`y0`.cCs|i}|d|dS(Nii(RO(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_size`s s (property) The width and height of the bounding box. May be negative, in the same way as :attr:`width` and :attr:`height`.cCs6|ii\}}}}||||||fS(N(RORT(R tx0ty0tx1ty1((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_boundsgss\ (property) Returns (:attr:`x0`, :attr:`y0`, :attr:`width`, :attr:`height`).cCs|iiiS(N(RORTRP(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _get_extentsnssM (property) Returns (:attr:`x0`, :attr:`y0`, :attr:`x1`, :attr:`y1`).cCstS(N(R (R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyROsscCsM|i\}}||jo||jo ||jp||jo ||jS(s_ Returns True if *x* is between or equal to :attr:`x0` and :attr:`x1`. (t intervalx(R txRiRk((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt containsxvs cCsM|i\}}||jo||jo ||jp||jo ||jS(s_ Returns True if *y* is between or equal to :attr:`y0` and :attr:`y1`. (t intervaly(R tyRjRl((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt containsys cCs|i|o |i|S(sn Returns *True* if (*x*, *y*) is a coordinate inside the bounding box or on its edge. (RqRt(R RpRs((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytcontainssc Cs|i\}}}}|i\}}}} ||jo||}}n||jo||}}n||jo||}}n| |jo|| } }n||jp$| |jp||jp ||j S(si Returns True if this bounding box overlaps with the given bounding box *other*. (Rn( R tothertax1tay1tax2tay2tbx1tby1tbx2tby2((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytoverlapss       cCsM|i\}}||jo||jo ||jp||jo ||jS(sd Returns True if *x* is between but not equal to :attr:`x0` and :attr:`x1`. (Ro(R RpRiRk((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytfully_containsxs cCsM|i\}}||jot|jo t|jpt|jo t|jS(sd Returns True if *y* is between but not equal to :attr:`y0` and :attr:`y1`. (RrRp(R RsRjRl((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytfully_containsys cCs|i|o |i|S(sr Returns True if (*x*, *y*) is a coordinate inside the bounding box, but not on its edge. (RR(R RpRs((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytfully_containssc Cs|i\}}}}|i\}}}} ||jo||}}n||jo||}}n||jo||}}n| |jo|| } }n||jp$| |jp||jp ||j S(s Returns True if this bounding box overlaps with the given bounding box *other*, but not on its edge alone. (Rn( R RvRwRxRyRzR{R|R}R~((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytfully_overlapss       cCst|i|iS(sk Return a new :class:`Bbox` object, statically transformed by the given transform. (RNt transformRO(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt transformedscCst|ii|iS(sz Return a new :class:`Bbox` object, statically transformed by the inverse of the given transform. (RNtinvertedRRO(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytinverse_transformedsg?tCitSWtSg?tSEtEtNEtNtNWtWc Cs|djo |}n|i\}}}}t|to|i|\}}n |\}}|i\} } } } t|i|||| | |||| | gS(sS Return a copy of the :class:`Bbox`, shifted to position *c* within a container. *c*: may be either: * a sequence (*cx*, *cy*) where *cx* and *cy* range from 0 to 1, where 0 is left or bottom and 1 is right or top * a string: - 'C' for centered - 'S' for bottom-center - 'SE' for bottom-left - 'E' for left - etc. Optional argument *container* is the box within which the :class:`Bbox` is positioned; it defaults to the initial :class:`Bbox`. N(Rtboundst isinstancetstrtcoefsRNt_points( R tct containertltbtwthtcxtcytLtBRtH((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytanchoreds    cCs?|i\}}t|id|id||||ggS(s! Return a copy of the :class:`Bbox`, shrunk by the factor *mx* in the *x* direction and the factor *my* in the *y* direction. The lower left corner of the box remains unchanged. Normally *mx* and *my* will be less than 1, but this is not enforced. i(tsizeRNR(R tmxtmyRR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytshrunks cCs|djo |}n|i\}}|||}||jo |}n|||}|}t|id|id||fgS(s Return a copy of the :class:`Bbox`, shrunk so that it is as large as it can be while having the desired aspect ratio, *box_aspect*. If the box coordinates are relative---that is, fractions of a larger box such as a figure---then the physical aspect ratio of that figure is specified with *fig_aspect*, so that *box_aspect* can also be given as a ratio of the absolute dimensions, not the relative dimensions. iN(RRRNR(R t box_aspectRt fig_aspectRRRR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytshrunk_to_aspects     c Gsg}dgt|dg}|i\}}}}||}xZt|d |dD]A\} } |it|| ||g|| ||ggqZW|S(s e.g., ``bbox.splitx(f1, f2, ...)`` Returns a list of new :class:`Bbox` objects formed by splitting the original one with vertical lines at fractional positions *f1*, *f2*, ... iii(RSRntziptappendRN( R RtboxestxfRiRjRkRlRtxf0txf1((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytsplitx3s  9c Gsg}dgt|dg}|i\}}}}||}xZt|d |dD]A\} } |it||| |g||| |ggqZW|S(s e.g., ``bbox.splitx(f1, f2, ...)`` Returns a list of new :class:`Bbox` objects formed by splitting the original one with horizontal lines at fractional positions *f1*, *f2*, ... iii(RSRnRRRN( R RRtyfRiRjRkRlRtyf0tyf1((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytsplityCs  9c Cst|djodSti|}|i\}}}}ti|dddf|}ti|dddf|}ti|dddf|}ti|dddf|} t||t|| dj} ti| S(sx Count the number of vertices contained in the :class:`Bbox`. *vertices* is a Nx2 Numpy array. iNii(RRJRKRntsigntabstsum( R tverticesRiRjRkRltdx0tdy0tdx1tdy1tinside((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytcount_containsSs####$cCs t||S(s Count the number of bounding boxes that overlap this one. bboxes is a sequence of :class:`BboxBase` objects (R(R tbboxes((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytcount_overlapsdscCsj|i}|i}|||d}|||d}ti| | g||gg}t|i|S(s Return a new :class:`Bbox` which is this :class:`Bbox` expanded around its center by the given factors *sw* and *sh*. g@(twidththeightRJtarrayRNR(R tswtshRRtdeltawtdeltahta((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytexpandedls   #cCs.|i}t|| | g||ggS(si Return a new :class:`Bbox` that is padded on all four sides by the given value. (RORN(R tpRL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytpaddedys cCst|i||fS(se Return a copy of the :class:`Bbox`, statically translated by *tx* and *ty*. (RNR(R ttxtty((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt translatedscCsO|ii\}}}}ti||g||g||g||ggS(s Return an array of points which are the four corners of this rectangle. For example, if this :class:`Bbox` is defined by the points (*a*, *b*) and (*c*, *d*), :meth:`corners` returns (*a*, *b*), (*a*, *d*), (*c*, *b*) and (*c*, *d*). (RORTRJR(R RRtrtt((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytcornersscCsJ|i}ti|i|}ti}|i|dt|S(s Return a new bounding box that bounds a rotated version of this bounding box by the given radians. The new bounding box is still aligned with the axes, of course. tignore(RtAffine2DtrotateRRNtunittupdate_from_data_xytTrue(R tradiansRtcorners_rotatedtbbox((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytrotateds   c Cst|djo |dSti}ti}ti }ti }x|D]}|i}|dddf}|dddf}t|ti|}t|ti|}t|ti|}t|ti|}qIWti||||S(sO Return a :class:`Bbox` that contains all of the given bboxes. iiN(RRJtinfROR\R_RNt from_extents( RRiRjRkRlRRLtxstys((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytunions       N(g?g?(ii(g?i(g?i(g?g?(g?g?(g?g?(ig?(ig?(NR,R>R?RRCRRERMt staticmethodR"RRRRURVtpropertyRRiRWRjRXRkRYRlRZtp0R[tp1R]txminR^tyminR`txmaxRatymaxRbR\RcR_RdRoReRrRfRRgRRhRRmRRntextentsRORqRtRuRRRRRRRRRRRRRRRRRRRRR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRFs                                                                         !        RNcBs#eZdZdZeoeZdZdZneiddgddggei Z e dZ e dZ e dZd ZeZd Zdd Zdeed Zdeed ZdZeeieZdZeeieZdZeei eZ!dZ"eei#e"Z$dZ%eei&e%Z'dZ(eei)e(Z*dZ+eei,e+Z-dZ.eei/e.Z0dZ1eei2e1Z3dZ4ee4Z5dZ6ee6Z7dZ8ee8Z9dZ:dZ;dZ<RS(s! A mutable bounding box. cCsJti|ti|ti|_tiddg|_t|_ dS(s *points*: a 2x2 numpy array of the form [[x0, y0], [x1, y1]] If you need to create a :class:`Bbox` object from another form of data, consider the static methods :meth:`unit`, :meth:`from_bounds` and :meth:`from_extents`. gHz>N( RFR RJRKtfloat_RRt_minposRt_ignore(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s cCs|i||i|dS(N(RMt ___init__(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s cCs!|i|iti|dS(N(RMRRR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRsgg?cCsttiiS(s_ (staticmethod) Create a new unit :class:`Bbox` from (0, 0) to (1, 1). (RNt _unit_valuesRP(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCsti||||||S(s (staticmethod) Create a new :class:`Bbox` from *x0*, *y0*, *width* and *height*. *width* and *height* may be negative. (RNR(RiRjRR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt from_boundsscGs.ti|dtiidd}t|S(s (staticmethod) Create a new Bbox from *left*, *bottom*, *right* and *top*. The *y*-axis increases upwards. tdtypei(RJRRtreshapeRN(RRL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs$cCsdt|iS(NsBbox(%s)(treprR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__repr__scCs ||_dS(s Set whether the existing bounds of the box should be ignored by subsequent calls to :meth:`update_from_data` or :meth:`update_from_data_xy`. *value*: - When True, subsequent calls to :meth:`update_from_data` will ignore the existing bounds of the :class:`Bbox`. - When False, subsequent calls to :meth:`update_from_data` will include the existing bounds of the :class:`Bbox`. N(R(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs\tidti|it|df|it|dff}|i||S(s Update the bounds of the :class:`Bbox` based on the passed in data. After updating, the bounds will have positive *width* and *height*; *x0* and *y0* will be the minimal values. *x*: a numpy array of *x*-values *y*: a numpy array of *y*-values *ignore*: - when True, ignore the existing bounds of the :class:`Bbox`. - when False, include the existing bounds of the :class:`Bbox`. - when None, use the last value passed to :meth:`ignore`. sRupdate_from_data requires a memory copy -- please replace with update_from_data_xyi(RHRIRJthstackRRR(R RpRsRtxy((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytupdate_from_datas?cCs|djo |i}n|iidjodSt|d|i|i|\}}}|o|i|o>|dddf|idddf<|d|id|dddf|idddf<|d|idR?R RERRRJRRRRRRRRt__str__RRRRRRRRRFRVRiRRWRjRRXRkRRYRlRRZRRR[RRRdRoRReRrRRmRRRRtminposxR tminposyROR R<(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRNsV   '    $                 tTransformedBboxcBsXeZdZdZdZeZdZeiie_eoeZ dZnRS(s A :class:`Bbox` that is automatically transformed by a given transform. When either the child bounding box or transform changes, the bounds of this bbox will update accordingly. cCs<ti|||_||_|i||d|_dS(s] *bbox*: a child :class:`Bbox` *transform*: a 2D :class:`Transform` N(RFR t_bboxt _transformRRR(R RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s   cCsd|i|ifS(NsTransformedBbox(%s, %s)(RR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCsW|ioF|ii|ii}tii|d}||_d|_n|iS(Ngi( R RRRRORJRtfilledR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyROs    cCs|i}|i||S(N(t _get_pointsRM(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyROs  ( R,R>R?R RR RORNRER(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs   t TransformcBseZdZdZdZeZeZdZ dZ dZ dZ dZ dZdZdZd Zd Zd Zed d ZdZRS(s The base class of all :class:`TransformNode` instances that actually perform a transformation. All non-affine transformations should be subclasses of this class. New affine transformations should be subclasses of :class:`Affine2D`. Subclasses of this class should override the following members (at minimum): - :attr:`input_dims` - :attr:`output_dims` - :meth:`transform` - :attr:`is_separable` - :attr:`has_inverse` - :meth:`inverted` (if :meth:`has_inverse` can return True) If the transform needs to do something non-standard with :class:`mathplotlib.path.Path` objects, such as adding curves where there were once line segments, it should override: - :meth:`transform_path` cCs8t|tot||Stdt|dS(sc Composes two transforms together such that *self* is followed by *other*. s,Can not add Transform to object of type '%s'N(RRtcomposite_transform_factoryt TypeErrorttype(R Rv((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__add__scCs8t|tot||Stdt|dS(sc Composes two transforms together such that *self* is followed by *other*. s,Can not add Transform to object of type '%s'N(RRRRR(R Rv((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__radd__ scOs|iiS(sP Used by C/C++ -based backends to get at the array matrix data. (R"RR(R RRQ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRRscCs tdS(s Performs the transformation on the given array of values. Accepts a numpy array of shape (N x :attr:`input_dims`) and returns a numpy array of shape (N x :attr:`output_dims`). N(R (R tvalues((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs|S(s Performs only the affine part of this transformation on the given array of values. ``transform(values)`` is always equivalent to ``transform_affine(transform_non_affine(values))``. In non-affine transformations, this is generally a no-op. In affine transformations, this is equivalent to ``transform(values)``. Accepts a numpy array of shape (N x :attr:`input_dims`) and returns a numpy array of shape (N x :attr:`output_dims`). ((R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_affine&scCs |i|S(s Performs only the non-affine part of the transformation. ``transform(values)`` is always equivalent to ``transform_affine(transform_non_affine(values))``. In non-affine transformations, this is generally equivalent to ``transform(values)``. In affine transformations, this is always a no-op. Accepts a numpy array of shape (N x :attr:`input_dims`) and returns a numpy array of shape (N x :attr:`output_dims`). (R(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_non_affine7scCstS(s8 Get the affine part of this transform. (tIdentityTransform(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt get_affineGscCs|iti|gdS(s  A convenience function that returns the transformed copy of a single point. The point is given as a sequence of length :attr:`input_dims`. The transformed point is returned as a sequence of length :attr:`output_dims`. i(RRJRK(R tpoint((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_pointMs cCs"t|i|i|i|iS(s Returns a transformed copy of path. *path*: a :class:`~matplotlib.path.Path` instance. In some cases, this transform may insert curves into the path that began as line segments. (RRRtcodest_interpolation_steps(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_pathYs cCs|S(s Returns a copy of path, transformed only by the affine part of this transform. *path*: a :class:`~matplotlib.path.Path` instance. ``transform_path(path)`` is equivalent to ``transform_path_affine(transform_path_non_affine(values))``. ((R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_path_affinees cCs"t|i|i|i|iS(s! Returns a copy of path, transformed only by the non-affine part of this transform. *path*: a :class:`~matplotlib.path.Path` instance. ``transform_path(path)`` is equivalent to ``transform_path_affine(transform_path_non_affine(values))``. (RRRR R!(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_path_non_affineqs gh㈵>c Cs|idjp|idjotdn|p|dti}n||titi|ti|f}|i|}|i|}||}ti |dddf|dddf} |p| dti} n| S(s Performs transformation on a set of angles anchored at specific locations. The *angles* must be a column vector (i.e., numpy array). The *pts* must be a two-column numpy array of x,y positions (angle transforms currently only work in 2D). This array must have the same number of rows as *angles*. *radians* indicates whether or not input angles are given in radians (True) or degrees (False; the default). *pushoff* is the distance to move away from *pts* for determining transformed angles (see discussion of method below). The transformed angles are returned in an array with the same size as *angles*. The generic version of this method uses a very generic algorithm that transforms *pts*, as well as locations very close to *pts*, to find the angle in the transformed system. isOnly defined in 2Dgf@Nii( t input_dimst output_dimsR RJtpitc_tcostsinRtarctan2( R tanglestptsRtpushofftpts2ttptsttpts2tdR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyttransform_angles~s  - 2cCs tdS(s, Return the corresponding inverse transformation. The return value of this method should be treated as temporary. An update to *self* does not cause a corresponding update to its inverted copy. ``x === self.inverted().transform(self.transform(x))`` N(R (R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs N(R,R>R?RR%R&RBt has_inverset is_separableRRRRRRRRRR"R#R$R3R(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs$     9tTransformWrappercBseZdZeZeZdZdZeZ dZ e i ie _dZ dZ dZeeZdZeeZRS(s A helper class that holds a single child transform and acts equivalently to it. This is useful if a node of the transform tree must be replaced at run time with a transform of a different type. This class allows that replacement to correctly trigger invalidation. Note that :class:`TransformWrapper` instances must have the same input and output dimensions during their entire lifetime, so the child transform may only be replaced with another child transform of the same dimensions. cCs?ti||i|_|i|_|i|d|_dS(st *child*: A class:`Transform` instance. This child may later be replaced with :meth:`set`. iN(RR R%R&t_setR (R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s     cCs d|iS(NsTransformWrapper(%r)(t_child(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs |iiS(N(R8R"(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"scCsz||_|i||i|_|i|_|i|_|i|_|i|_|i|_|i|_|i |_ dS(N( R8RRRRR"R#R$RR(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR7s         cCs-|i|d|_|id|_dS(s Replace the current child of this transform with another one. The new child must have the same number of input and output dimensions as the current child. iN(R7R R(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR<s   cCs |iiS(N(R8R5(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_is_separablescCs |iiS(N(R8R4(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_has_inverse s(R,R>R?RRRBRR RR R"RR7R<R9RR5R:R4(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR6s       t AffineBasecBseZdZeZdZdZedZdZ dZ e i ie _dZ e i ie _dZ e i ie _dZe iie_RS( sW The base class of all affine transformations of any number of dimensions. cCsti|d|_dS(N(RR Rt _inverted(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s cOs |iS(N(t get_matrix(R RRQ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRRscCsti||S(sj Concatenates two transformation matrices (represented as numpy arrays) together. (RJtdot(RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_concatscCs tdS(sL Get the underlying transformation matrix as a numpy array. N(R (R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=&scCs|S(N((R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR,scCs |i|S(N(R"(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR#0scCs|S(N((R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR$4scCs|S(N((R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR8s(R,R>R?RRR RRRR?R=RRR#R$R(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR;s       t Affine2DBasecBseZdZdZdZdZeiie_dZeeZ dZ dZ e dZ dZdZeiie_eoeZd Zneiie_eZeiie_d Zeiie_RS( s The base class of all 2D affine transformations. 2D affine transformations are performed using a 3x3 numpy array:: a c e b d f 0 0 1 This class provides the read-only interface. For a mutable 2D affine transformation, use :class:`Affine2D`. Subclasses of this class will generally only need to override a constructor and :meth:`get_matrix` that generates a custom 3x3 matrix. icCst|iiS(N(RR=RP(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"VscCs+|i}|ddjo|ddjS(Niig(ii(ii(R=(R tmtx((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR9Zs cOs |iS(N(R=(R RRQ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRR_scCs,|i}t|d iddiS(sM Return the values of the matrix as a sequence (a,b,c,d,e,f) iii(R=ttupletswapaxesRT(R RA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt to_valuesbs cCs7ti|||g|||gdddggtiS(s (staticmethod) Create a new transformation matrix as a 3x3 numpy array of the form:: a c e b d f 0 0 1 gg?(RJRR(RRRR2tetf((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytmatrix_from_valuesis cCsX|i}t|to/t|i|}ti|dti|St||S(Ntmask(R=Rt MaskedArrayRtdataRtgetmask(R RLRAttpoints((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRus  cCs|i}t||S(N(R=R(R RRA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR|s cCsQti| o3t|ti otiddttn|i |S(Ns/A non-numpy array of type %s was passed in for s%transformation. Please correct this.( RRGRRJtndarrayRHRIRRR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCsO|idjp |io.|i}tt||_d|_n|iS(Ni(R<RR R=RR(R RA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs   (R,R>R?R%R&R"R;R9RR5RRRDRRGRRRERRR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR@=s*         RcBseZdZddZdZeZdZedZ dZ dZ dZ edZ d Zd Zd Zd Zd ZdZddZdZeeZRS(s- A mutable 2D affine transformation. cCscti||djotid}n!toti|ti}n||_d|_ dS(s Initialize an Affine transform from a 3x3 numpy float array:: a c e b d f 0 0 1 If *matrix* is None, initialize with the identity transform. iiN( R@R RRJtidentityRERKRt_mtxR (R tmatrix((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s   cCsdt|iS(Ns Affine2D(%s)(RRO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs8t|to$|i|ijiodSdS(Nii(RRR=tall(R Rv((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt__cmp__sc Cs=tti||||||dddg tiidS(s (staticmethod) Create a new Affine2D instance from the given values:: a c e b d f 0 0 1 gg?i(ii(RRJRRR(RRRR2RERF((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt from_valuess 0cCsd|_|iS(s Get the underlying transformation matrix as a 3x3 numpy array:: a c e b d f 0 0 1 i(R RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s cCs||_|idS(s Set the underlying transformation matrix from a 3x3 numpy array:: a c e b d f 0 0 1 N(ROR(R RA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt set_matrixs cCs|i|_|idS(so Set this transformation from the frozen copy of another :class:`Affine2DBase` object. N(R=ROR(R Rv((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR<scCsttidS(s (staticmethod) Return a new :class:`Affine2D` object that is the identity transform. Unless this transform will be mutated later on, consider using the faster :class:`IdentityTransform` class instead. i(RRJRN(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRNs cCs tid|_|i|S(sH Reset the underlying matrix to the identity transform. i(RJRNROR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytclears cCs~ti|}ti|}ti|| dg||dgdddggti}ti||i|_|i|S(s Add a rotation (in radians) to this transform in place. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. gg?(RJR)R*RRR>ROR(R tthetaRRt rotate_mtx((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs(  cCs|i|tidS(s Add a rotation (in degrees) to this transform in place. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. gf@(RRJR'(R tdegrees((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt rotate_degscCs'|i| | i|i||S(s Add a rotation (in radians) around the point (x, y) in place. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. (t translateR(R RpRsRV((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt rotate_aroundscCs'|i| | i|i||S(s Add a rotation (in degrees) around the point (x, y) in place. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. (RZRY(R RpRsRX((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytrotate_deg_around#scCs_tidd|gdd|gdddggti}ti||i|_|i|S(s Adds a translation in place. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. g?g(RJRRR>ROR(R RRt translate_mtx((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRZ-s '  cCsv|djo |}nti|ddgd|dgdddggti}ti||i|_|i|S(s3 Adds a scale in place. If *sy* is None, the same scale is applied in both the *x*- and *y*-directions. Returns *self*, so this method can easily be chained with more calls to :meth:`rotate`, :meth:`rotate_deg`, :meth:`translate` and :meth:`scale`. gg?N(RRJRRR>ROR(R tsxtsyt scale_mtx((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytscale<s  '  cCs+|i}|ddjo|ddjS(Niig(ii(ii(R=(R RA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR9Ps N(R,R>R?RR RR RRRRSR=RTR<RNRURRYR[R\RZRaR9RR5(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs&         RcBs eZdZeidZdZeiie_dZeZ dZ ei ie _dZ ei ie _e Z ei ie _e Z ei ie _dZeiie_eZeiie_eZeiie_dZeiie_eZeiie_RS(sX A special class that does on thing, the identity transform, in a fast way. icCs|S(N((R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"]scCsdS(NsIdentityTransform()((R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRascCs|iS(N(RO(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=escCs|S(N((R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRiscCs|S(N((R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"sscCs|S(N((R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR}s(R,R>R?RJRNROR"R@RR R=RRRR"R#R$RR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRVs0      tBlendedGenericTransformcBseZdZdZdZeZeZdZdZ e e Z dZ e i ie _dZeZdZe iie_dZe iie_dZe iie_d Ze iie_d Ze iie_RS( s A "blended" transform uses one transform for the *x*-direction, and another transform for the *y*-direction. This "generic" version can handle any given child transform in the *x*- and *y*-directions. icCs<ti|||_||_|i||d|_dS(s Create a new "blended" transform using *x_transform* to transform the *x*-axis and *y_transform* to transform the *y*-axis. You will generally not call this constructor directly but use the :func:`blended_transform_factory` function instead, which can determine automatically which kind of blended transform to create. N(RR t_xt_yRRt_affine(R t x_transformt y_transform((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s   cCs|iio |iiS(N(RcRRd(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt_get_is_affinescCst|ii|iiS(N(tblended_transform_factoryRcR"Rd(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"scCsd|i|ifS(NsBlendedGenericTransform(%s,%s)(RcRd(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCst|i}|i}||jo|idjo|i|S|idjo)|i|ddddf}n;|i|dddf}|it|df}|idjo)|i|ddddf}n;|i|dddf}|it|df}t|tpt|toti ||fdSt i ||fdSdS(Niii( RcRdR%RRRRRIRt concatenateRJ(R RLRpRstx_pointsty_points((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs  )) cCs|ii|S(N(RR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs,|iio|iio|S|i|S(N(RcRRdR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCst|ii|iiS(N(RbRcRRd(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs|ip|idjo|iio|iio|i|ijo|ii|_q|iii}|iii}ti |d|ddddgf}t ||_n t |_d|_n|iS(Niigg?( R ReRRcRRdRR=RJtvstackRR(R tx_mtxty_mtxRA((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs)  (R,R>R?R%R&RR5RR RhRRR"RRR RRRRR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRbs,          tBlendedAffine2DcBsDeZdZeZdZdZeZdZe iie_RS(s A "blended" transform uses one transform for the *x*-direction, and another transform for the *y*-direction. This version is an optimization for the case where both child transforms are of type :class:`Affine2DBase`. cCsIti|||_||_|i||ti|d|_dS(s Create a new "blended" transform using *x_transform* to transform the *x*-axis and *y_transform* to transform the *y*-axis. Both *x_transform* and *y_transform* must be 2D affine transforms. You will generally not call this constructor directly but use the :func:`blended_transform_factory` function instead, which can determine automatically which kind of blended transform to create. N(RR RcRdRR@RRO(R RfRg((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s     cCsd|i|ifS(NsBlendedAffine2D(%s,%s)(RcRd(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs|io|i|ijo|ii|_nK|ii}|ii}ti|d|ddddgf|_d|_d|_n|iS(Niigg?( R RcRdR=RORJRmRR<(R RnRo((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s ,  ( R,R>R?RR5R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRps   cCs;t|tot|tot||St||S(s Create a new "blended" transform using *x_transform* to transform the *x*-axis and *y_transform* to transform the *y*-axis. A faster version of the blended transform is returned for the case where both child transforms are affine. (RR@RpRb(RfRg((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRi&stCompositeGenericTransformcBs.eZdZeZdZdZeiie_dZe eZ dZ e e Z dZ e ZdZeiie_dZeiie_dZeiie_d Zeiie_d Zeiie_d Zeiie_d Zeiie_d Zeiie_RS(s A composite transform formed by applying transform *a* then transform *b*. This "generic" version can handle any two arbitrary transformations. cCsK|i|_|i|_ti|||_||_|i||dS(sl Create a new composite transform that is the result of applying transform *a* then transform *b*. You will generally not call this constructor directly but use the :func:`composite_transform_factory` function instead, which can automatically choose the best kind of composite transform instance to create. N(R%R&RR t_at_bR(R RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR >s     cCsId|_t|ii|ii}t|tp |iS|S(Ni(R RRrR"RsRRq(R R"((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"Qs  ! cCs|iio |iiS(N(RrRRs(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRhYscCs|iio |iiS(N(RrR5Rs(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR9]scCsd|i|ifS(Ns!CompositeGenericTransform(%s, %s)(RrRs(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRascCs|ii|ii|S(N(RsRRr(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRes cCs|ii|S(N(RR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRjscCs;|iio|iio|S|ii|ii|S(N(RrRRsRR(R RL((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRns cCs|ii|ii|S(N(RsR"Rr(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR"us cCs|ii|ii|S(N(RsR#RrR"(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR#zs cCs;|iio|iio|S|ii|ii|S(N(RrRRsR$R"(R R((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR$s cCs`|iioB|iio5tti|iii|iiiS|iiSdS(N(RrRRsRRJR>RR=(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCst|ii|iiS(N(RqRsRRr(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs(R,R>R?RRR R"RRhRRR9R5RR RRRR"R#R$RR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRq4s6               tCompositeAffine2DcBs>eZdZdZdZeZdZeiie_RS(s A composite transform formed by applying transform *a* then transform *b*. This version is an optimization that handles the case where both *a* and *b* are 2D affines. cCsT|i|_|i|_ti|||_||_|i||d|_dS(s Create a new composite transform that is the result of applying transform *a* then transform *b*. Both *a* and *b* must be instances of :class:`Affine2DBase`. You will generally not call this constructor directly but use the :func:`composite_transform_factory` function instead, which can automatically choose the best kind of composite transform instance to create. N( R%R&R@R RrRsRRRO(R RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s     cCsd|i|ifS(NsCompositeAffine2D(%s, %s)(RrRs(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCsN|io=ti|ii|ii|_d|_d|_n|iS(Ni( R RJR>RsR=RrRORR<(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s    (R,R>R?R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRts    cCset|to|St|to|St|tot|tot||St||S(sv Create a new composite transform that is the result of applying transform a then transform b. Shortcut versions of the blended transform are provided for the case where both child transforms are affine, or one or the other is the identity transform. Composite transforms may also be created using the '+' operator, e.g.:: c = a + b (RRR;RtRq(RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs t BboxTransformcBsDeZdZeZdZdZeZdZe iie_RS(sp :class:`BboxTransform` linearly transforms points from one :class:`Bbox` to another :class:`Bbox`. cCsEti|||_||_|i||d|_d|_dS(sw Create a new :class:`BboxTransform` that linearly transforms points from *boxin* to *boxout*. N(R@R t_boxint_boxoutRRROR<(R tboxintboxout((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s     cCsd|i|ifS(NsBboxTransform(%s, %s)(RvRw(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRsc Cs|io|ii\}}}}|ii\}}}}||} ||} to*| djp | djotdnti| d| | |gd| | | |gdddggti|_ d|_ d|_n|i S(Nis0Transforming from or to a singular bounding box.gg?( R RvRRwREt ValueErrorRJRRRORR<( R tinltinbtinwtinhtoutltoutbtoutwtouthtx_scalety_scale((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s   !  ( R,R>R?RR5R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRus   tBboxTransformTocBsDeZdZeZdZdZeZdZe iie_RS(s :class:`BboxTransformTo` is a transformation that linearly transforms points from the unit bounding box to a given :class:`Bbox`. cCs9ti|||_|i|d|_d|_dS(s Create a new :class:`BboxTransformTo` that linearly transforms points from the unit bounding box to *boxout*. N(R@R RwRRROR<(R Ry((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR s     cCs d|iS(NsBboxTransformTo(%s)(Rw(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRscCs|io|ii\}}}}to*|djp |djotdnti|d|gd||gdddggti|_d|_ d|_n|iS(Nis(Transforming to a singular bounding box.gg?( R RwRRERzRJRRRORR<(R RRRR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=s !   ( R,R>R?RR5R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs  tBboxTransformFromcBsDeZdZeZdZdZeZdZe iie_RS(sx :class:`BboxTransformFrom` linearly transforms points from a given :class:`Bbox` to the unit bounding box. cCs9ti|||_|i|d|_d|_dS(N(R@R RvRRROR<(R Rx((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR 3s     cCs d|iS(NsBboxTransformFrom(%s)(Rv(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR<scCs|io|ii\}}}}to*|djp |djotdnd|}d|}ti|d| |gd|| |gdddggti|_d|_ d|_n|iS(Nis*Transforming from a singular bounding box.g?g( R RvRRERzRJRRRORR<(R R{R|R}R~RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=@s !    ( R,R>R?RR5R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR,s  tScaledTranslationcBs>eZdZdZdZeZdZeiie_RS(s A transformation that translates by *xt* and *yt*, after *xt* and *yt* have been transformad by the given transform *scale_trans*. cCsHti|||f|_||_|i|d|_d|_dS(N(R@R t_tt _scale_transRRROR<(R txttytt scale_trans((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR Vs     cCsd|ifS(NsScaledTranslation(%s)(R(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR^scCs~|iom|ii|i\}}tidd|gdd|gdddggti|_d|_d|_ n|iS(Ng?gi( R RRRRJRRRORR<(R RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR=bs    (R,R>R?R RR R=R@(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRQs    tTransformedPathcBsDeZdZdZdZdZdZdZdZRS(s A :class:`TransformedPath` caches a non-affine transformed copy of the :class:`~matplotlib.path.Path`. This cached copy is automatically updated when the non-affine part of the transform changes. cCsBti|||_||_|i|d|_d|_dS(s Create a new :class:`TransformedPath` from the given :class:`~matplotlib.path.Path` and :class:`Transform`. N(RR t_pathRRRt_transformed_patht_transformed_points(R RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyR vs      cCs|i|i@|ijp|idjoI|ii|i|_t|ii|ii d|ii |_ nd|_dS(Ni( R RARRRR$RRRRR!R(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt _revalidates cCs|i|i|ifS(s3 Return a copy of the child path, with the non-affine part of the transform already applied, along with the affine part of the path necessary to complete the transformation. Unlike :meth:`get_transformed_path_and_affine`, no interpolation will be performed. (RRR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt!get_transformed_points_and_affines cCs|i|i|ifS(s Return a copy of the child path, with the non-affine part of the transform already applied, along with the affine part of the path necessary to complete the transformation. (RRR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytget_transformed_path_and_affines cCsb|i|i@|ijp|idjo|ii|i|_nd|_|ii|iS(sD Return a fully-transformed copy of the child path. iN(R RARRRR$RR#(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytget_fully_transformed_paths  cCs |iiS(N(RR(R ((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRs( R,R>R?R RRRRR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyRos  gMbP?gV瞯 vmax, they will be swapped, regardless of whether they are too close. If either is inf or -inf or nan, return - expander, expander. g(RJtisfiniteRBRR_R(tvmintvmaxtexpanderttinyt increasingtswapped((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt nonsingulars "    *  cCsJ|\}}||jo||jo ||jp||jo ||jS(N((RR6RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytinterval_containss 'cCsJ|\}}||jo||jo ||jp||jo ||jS(N((RR6RR((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytinterval_contains_opens 'gtinchescCs|djo|ti||S|djotdn|djo|d:}|d:}n|djptdn|t|||iS(s Return a new transform with an added offset. args: trans is any transform kwargs: fig is the current figure; it can be None if units are 'dots' x, y give the offset units is 'inches', 'points' or 'dots' tdotss3For units of inches or points a fig kwarg is neededRLgR@Rs%units must be dots, points, or inchesN(RRZRRzRtdpi_scale_trans(ttranstfigRpRstunits((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pyt offset_copys     (3R?tnumpyRJRtmatplotlib._pathRt numpy.linalgRtweakrefRRHR<t NameErrortsetsRtcbookRRRRRRBRERItobjectRRFRNRRR6R;R@RRRbRpRiRqRtRRuRRRRRRRRR(((s;/usr/lib64/python2.6/site-packages/matplotlib/transforms.pytsV    +L-_/g: _. ,(%B