ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@@sdZddlmZddlZddlZddlZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z e Zd efd YZd efdYZdefdYZdefdYZdeefdYZdefdYZdefdYZdeefdYZdefdYZdefdYZdefd YZd!efd"YZd#efd$YZd%efd&YZ eZ!eZ"eZ#e Z$e ej%Z&e d'Z'dd(Z)d)efd*YZ*d+Z+dd,Z,d-Z-d.Z.d/Z/dd0Z0d1Z1d2efd3YZ2e2d4Z3d5Z4d6efd7YZ5d8e5fd9YZ6d:Z7d;Z8dS(<sCollection classes and helpers.i(tabsolute_importNi(t binary_types(tcollections_abc(titertools_filterfalse(tpy2k(t string_types(t threadingtAbstractKeyedTuplecB@seZdZdZRS(cC@s t|jS(sReturn a list of string key names for this :class:`.KeyedTuple`. .. seealso:: :attr:`.KeyedTuple._fields` (tlistt_fields(tself((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytkeyss ((t__name__t __module__t __slots__R (((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRst KeyedTuplecB@s;eZdZddZedZdZdZRS(s``tuple`` subclass that adds labeled names. E.g.:: >>> k = KeyedTuple([1, 2, 3], labels=["one", "two", "three"]) >>> k.one 1 >>> k.two 2 Result rows returned by :class:`.Query` that contain multiple ORM entities and/or column expressions make use of this class to return rows. The :class:`.KeyedTuple` exhibits similar behavior to the ``collections.namedtuple()`` construct provided in the Python standard library, however is architected very differently. Unlike ``collections.namedtuple()``, :class:`.KeyedTuple` is does not rely on creation of custom subtypes in order to represent a new series of keys, instead each :class:`.KeyedTuple` instance receives its list of keys in place. The subtype approach of ``collections.namedtuple()`` introduces significant complexity and performance overhead, which is not necessary for the :class:`.Query` object's use case. .. seealso:: :ref:`ormtutorial_querying` cC@sKtj||}|r4|jjt||ng}||jd<|S(Nt_labels(ttuplet__new__t__dict__tupdatetzip(tclstvalstlabelstt((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRJs  cC@s,tg|jD]}|dk r |^q S(sReturn a tuple of string key names for this :class:`.KeyedTuple`. This method provides compatibility with ``collections.namedtuple()``. .. seealso:: :meth:`.KeyedTuple.keys` N(RRtNone(R tl((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR Ss cC@std|dS(NsCan't set attribute: %s(tAttributeError(R tkeytvalue((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __setattr__`sc@sfdjDS(sReturn the contents of this :class:`.KeyedTuple` as a dictionary. This method provides compatibility with ``collections.namedtuple()``, with the exception that the dictionary returned is **not** ordered. c@s i|]}j||qS((R(t.0R(R (sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys js (R (R ((R sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt_asdictcsN( R R t__doc__RRtpropertyR RR!(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR*s   t_LWcB@s)eZdZdZdZdZRS(cC@stj||S(N(RR(RR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRpscC@stt||jffS(N(RRt _real_fields(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __reduce__sscC@s,tt|j|}|jdd|S(sAReturn the contents of this :class:`.KeyedTuple` as a dictionary.N(tdictRR%tpopR(R td((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR!ys((R R RRR&R!(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR$ms  tImmutableContainercB@seZdZeZZZRS(cO@std|jjdS(Ns%s object is immutable(t TypeErrort __class__R (R targtkw((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt _immutables(R R R/t __delitem__t __setitem__R(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR*s t immutabledictcB@sNeZejZZZZZdZ dZ dZ dZ dZ RS(cG@s#tj|}tj|||S(N(R'Rt__init__(Rtargstnew((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscG@sdS(N((R R4((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3scC@stt|ffS(N(R2R'(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR&scC@sT|s |S|s0t|tr#|St|Sn t|}tj|||SdS(N(t isinstanceR2R'R(R R)td2((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytunions  cC@sdtj|S(Nsimmutabledict(%s)(R't__repr__(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR9s(R R R*R/tclearR(tpopitemt setdefaultRRR3R&R8R9(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR2s     t PropertiescB@seZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZddZdZdZdZdZdZRS(s8Provide a __getattr__/__setattr__ interface over a dict.t_datacC@stj|d|dS(NR>(tobjectR(R tdata((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3scC@s t|jS(N(tlenR>(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__len__scC@stt|jjS(N(titerRR>tvalues(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__iter__scC@s9ttt|g|jjD]}t|^q"S(N(tdirtsuperR=R>R tstr(R tk((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__dir__scC@st|t|S(N(R(R tother((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__add__scC@s||j|(R Rtobj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR1scC@s |j|S(N(R>(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __getitem__scC@s|j|=dS(N(R>(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR0scC@s||j|(R RRM((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@si|jd6S(NR>(R>(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __getstate__scC@stj|d|ddS(NR>(R?R(R tstate((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __setstate__scC@s3y|j|SWntk r.t|nXdS(N(R>tKeyErrorR(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __getattr__s cC@s ||jkS(N(R>(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __contains__scC@s t|jS(s8Return an immutable proxy for this :class:`.Properties`.(tImmutablePropertiesR>(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt as_immutablescC@s|jj|dS(N(R>R(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@s||kr||S|SdS(N((R Rtdefault((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytgets cC@s t|jS(N(RR>(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR scC@st|jjS(N(RR>RD(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRDscC@st|jjS(N(RR>titems(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRYscC@s ||jkS(N(R>(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pythas_keyscC@s|jjdS(N(R>R:(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR:s(R>N(R R R"RR3RBRERJRLR1RNR0RRORQRSRTRVRRRXR RDRYRZR:(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR=s.                    tOrderedPropertiescB@seZdZdZdZRS(sUProvide a __getattr__/__setattr__ interface with an OrderedDict as backing store.cC@stj|tdS(N(R=R3t OrderedDict(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s((R R R"RR3(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR[sRUcB@seZdZdZRS(sDProvide immutable dict/object attribute to an underlying dictionary.((R R R"R(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRUsR\cB@seZdZdZdZddZdZdZdZ dZ ddZ d Z d Z d Zd Zd ZerdZdZdZndZdZdZdZRS(sCA dict that returns keys/values/items in the order they were added.t_listcC@st|jffS(N(R\RY(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR& scK@sBg|_|dkr.|r>|j|q>n|j||dS(N(R]RR(R t_OrderedDict____sequencetkwargs((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s   cC@sg|_tj|dS(N(R]R'R:(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR:s cC@s |jS(N(t__copy__(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytcopyscC@s t|S(N(R\(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR`scO@s|jj||dS(N(R]tsort(R R-R.((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRb!scK@s|dk rmt|drIxL|jD]}|j|||q(Wqmx!|D]\}}|||||k}tj|||}|r:|jj|n|S(N(R'R(R]Rh(R RRWtpresentR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR([s  cC@s'tj|}|jj|d|S(Ni(R'R;R]Rh(R titem((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR;bs(R]N(R R R"RR&RR3R:RaR`RbRR<RER RDRYRRdReRfR1R0R(R;(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR\s,                t OrderedSetcB@seZddZdZdZdZdZdZdZ dZ dZ d Z e Z d ZeZd ZeZd ZeZd ZeZdZeZdZeZdZeZdZeZRS(cC@sTtj|g|_|dk rGt||_tj||jn g|_dS(N(tsetR3R]Rt unique_listR(R R)((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3is    cC@s3||kr|jj|ntj||dS(N(R]RgRltadd(R telement((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRnrs cC@s$tj|||jj|dS(N(RlRhR](R Ro((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRhwscC@s6||kr"|jj||ntj||dS(N(R]tinsertRlRn(R tposRo((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRp{s cC@s3||kr/|jj|tj||ndS(N(R]RhRl(R Ro((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytdiscards cC@stj|g|_dS(N(RlR:R](R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR:s cC@s |j|S(N(R](R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRNscC@s t|jS(N(RCR](R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyREscC@s |j|S(N(R8(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRLscC@sd|jj|jfS(Ns%s(%r)(R,R R](R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR9scC@sDx=|D]5}||kr|jj|tj||qqW|S(N(R]RgRlRn(R titerablete((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRs   cC@s |j|}|j||S(N(R,R(R RKtresult((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR8s c@s)t|jfd|DS(Nc3@s!|]}|kr|VqdS(N((R ta(RK(sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys s(RlR,(R RK((RKsO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt intersections c@sLtjfdD}|jfdD|S(Nc3@s!|]}|kr|VqdS(N((R Rv(RK(sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys sc3@s!|]}|kr|VqdS(N((R Rv(R (sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys s(RlR,R(R RKRu((RKR sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytsymmetric_differences c@s)t|jfd|DS(Nc3@s!|]}|kr|VqdS(N((R Rv(RK(sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys s(RlR,(R RK((RKsO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt differences cC@sKt|}tj||g|jD]}||kr&|^q&|_|S(N(Rltintersection_updateR](R RKRv((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRzs +cC@sptj||g|jD]}||kr|^q|_|jg|jD]}||krL|^qL7_|S(N(Rltsymmetric_difference_updateR](R RKRv((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR{s+1cC@s?tj||g|jD]}||kr|^q|_|S(N(Rltdifference_updateR](R RKRv((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR|s+N(R R RR3RnRhRpRrR:RNRERLR9t__str__Rt__ior__R8t__or__Rwt__and__Rxt__xor__Ryt__sub__Rzt__iand__R{t__ixor__R|t__isub__(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRkhs6                 t IdentitySetcB@sseZdZeZd'dZdZdZdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'e'Z(d#Z)d$Z*d%Z+d&Z,RS((sA set that considers only object id() for uniqueness. This strategy has edge cases for builtin types- it's possible to have two 'foo' strings in one of these sets, for example. Use sparingly. cC@s7t|_|r3x|D]}|j|qWndS(N(R't_membersRn(R Rsto((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s  cC@s||jt|scC@s|j|j|_dS(N(R8R(R Rs((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRCscC@s$t|tstS|j||S(N(R6RRR(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR~Fs cC@sMt|}|j}t|}|jj|j|j||S(N(RRRRRRRy(R RsRuRRK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRyLs   "cC@s t|tstS|j|S(N(R6RRRy(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRTscC@s|j|j|_dS(N(RyR(R Rs((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR|YscC@s$t|tstS|j||S(N(R6RRR|(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR\s cC@sMt|}|j}t|}|jj|j|j||S(N(RRRRRRRw(R RsRuRRK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRwbs   "cC@s t|tstS|j|S(N(R6RRRw(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRjscC@s|j|j|_dS(N(RwR(R Rs((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRzoscC@s$t|tstS|j||S(N(R6RRRz(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRrs cC@sMt|}|j}t|}|jj|j|j||S(N(RRRRRRRx(R RsRuRRK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRxxs    cC@sd|jjDS(Ncs@s!|]}t||fVqdS(N(R(R tv((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys s(RRD(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@s t|tstS|j|S(N(R6RRRx(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@s|j|j|_dS(N(RxR(R Rs((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR{scC@s$t|tstS|j||S(N(R6RRRx(R RK((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRs cC@st|t|jjS(N(RRCRRD(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRascC@s t|jS(N(RAR(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRBscC@st|jjS(N(RCRRD(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyREscC@stddS(Nsset objects are unhashable(R+(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__hash__scC@s&dt|jt|jjfS(Ns%s(%r)(RR RRRD(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR9sN(-R R R"RlRRR3RnRTRhRrR(R:RRRRRRRRRR8RRR~RyRR|RRwRRzRRxRRR{RRaR`RBRERR9(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRsR                                  t WeakSequencecB@sAeZddZdZdZdZdZdZRS(cC@s/g|D]}tj||j^q|_dS(N(tweakreftreft_removet_storage(R t_WeakSequence__elementsRo((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3scC@s#|jjtj||jdS(N(RRgRRR(R Rj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRgscC@s|jj|dS(N(RRh(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@s t|jS(N(RAR(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRBscC@sdd|jDDS(Ncs@s!|]}|dk r|VqdS(N(R(R RM((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys scs@s|]}|VqdS(N((R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pys s(R(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyREscC@s@y|j|}Wn!tk r4td|nX|SdS(NsIndex %s out of range(RRRt IndexError(R tindexRM((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRNs  ((R R R3RgRRBRERN(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRs      tOrderedIdentitySetcB@s*eZdefdYZddZRS(RcB@seZeZRS((R R Rt__sa_hash_exempt__(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRscC@sDtj|t|_|r@x|D]}|j|q&WndS(N(RR3R\RRn(R RsR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s    N(R R RkRRR3(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRst PopulateDictcB@s eZdZdZdZRS(sA dict which populates missing values via a creation function. Note the creation function takes a key, unlike collections.defaultdict. cC@s ||_dS(N(tcreator(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3scC@s|j|||<}|S(N(R(R Rtval((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt __missing__s(R R R"R3R(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRs cC@sttj|S(N(R#toperatort itemgetter(tidx((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyttcC@st}|j}|sHg|D]%}||kr|| r|^qSg|D]1}|||krO||| rO|^qOSdS(N(RlRn(tseqthashfunctseentseen_addtx((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRms  0 tUniqueAppendercB@s,eZdZddZdZdZRS(sAppends items to a collection ensuring uniqueness. Additional appends() of the same object are ignored. Membership is determined by identity (``is a``) not equality (``==``). cC@sm||_i|_|r-t|||_n<t|drK|j|_nt|dri|j|_ndS(NRgRn(R@t_uniquetgetattrt_data_appenderRcRgRn(R R@tvia((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s  cC@s<t|}||jkr8|j|t|j|t|dkr6t|dtjr6t|dS|SdS(Nii(RAR6ttypest GeneratorTypeR(R-((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytcoerce_generator_args(cC@s^|dkr|St|tj s6t|ttr=|gSt|trP|St|SdS(N(RR6RtIterableRRR(RRW((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytto_list"s cC@s/t|jg|D]}|jr|^qS(sreturn True if any items of set\_ are present in iterable. Goes through special effort to ensure __hash__ is not called on items in iterable that don't support it. (tboolRwR(tset_Rsti((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pythas_intersection/scC@s:|dkrtSt|ts2tt|S|SdS(N(RRlR6R(R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytto_set:s  cC@s:|dkrtSt|ts2tt|S|SdS(N(Rt column_setR6R(R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt to_column_setCs  cK@s3|j}|r"|j|n|j||S(s5Copy the given dict and update with the given values.(RaR(R)t_newR.((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt update_copyLs   cc@sXxQ|D]I}t|t rKt|drKx!t|D] }|Vq9Wq|VqWdS(sGiven an iterator of which further sub-elements may also be iterators, flatten the sub-elements into a single iterator. REN(R6RHRctflatten_iterator(Rtelemty((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRVs   tLRUCachecB@sweZdZdZddddZd Zdd Zd Zd Z d Z dZ e dZ dZRS(sDictionary with 'squishy' removal of least recently used items. Note that either get() or [] should be used here, but generally its not safe to do an "in" check first as the dictionary can change subsequent to that call. tcapacityt thresholdt size_alertt_countert_mutexidg?cC@s7||_||_||_d|_tj|_dS(Ni(RRRRRtLockR(R RRR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3os     cC@s|jd7_|jS(Ni(R(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt _inc_countervscC@sAtj|||}||k r9|j|d<|dS|SdS(Nii(R'RXR(R RRWRj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRXzs  cC@s*tj||}|j|d<|dS(Nii(R'RNR(R RRj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRNscC@s$gtj|D]}|d^qS(Ni(R'RD(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRDscC@s&||kr||S|||<|SdS(N((R RR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR<s  cC@satj||}|dkrI|||jg}tj|||n ||d<|jdS(Ni(R'RXRRR1t _manage_size(R RRRj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR1s   cC@s|j|j|jS(N(RR(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytsize_thresholdscC@s|jjtsdSzt|j}xt||j|j|jkr|rjt}|j|ntt j |dt j ddt }x;||jD],}y||d=Wqtk rqqXqWq+WWd|jjXdS(NRitreversei(RtacquireRRRRARRtsortedR'RDRRRRRtrelease(R Rt by_counterRj((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRs &' (RRRRRN(R R R"RRR3RRXRNRDR<R1R#RR(((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyRcs      idc C@s|ft|}tj|}|r,|St|tftgt|D](\}}|dk rH|t|f^qHddfg}||_ tg|D]}|dk r|^q|_ |t|<|S(NR(( Rt _lw_tuplesRXRR$R't enumerateRt_property_gettersR%R (tnametfieldsthash_ttp_clsRtfieldtf((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pytlightweight_named_tuples  . tScopedRegistrycB@s;eZdZdZdZdZdZdZRS(sA Registry that can store one or multiple instances of a single class on the basis of a "scope" function. The object implements ``__call__`` as the "getter", so by calling ``myregistry()`` the contained object is returned for the current scope. :param createfunc: a callable that returns a new object to be placed in the registry :param scopefunc: a callable that will return a key to store/retrieve an object. cC@s||_||_i|_dS(sVConstruct a new :class:`.ScopedRegistry`. :param createfunc: A creation function that will generate a new value for the current scope, if none is present. :param scopefunc: A function that returns a hashable token representing the current scope (such as, current thread identifier). N(t createfunct scopefunctregistry(R RR((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyR3s  cC@sI|j}y|j|SWn'tk rD|jj||jSXdS(N(RRRRR<R(R R((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pyt__call__s   cC@s|j|jkS(s9Return True if an object is present in the current scope.(RR(R ((sO/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/util/_collections.pythasscC@s||j|js`    C O ak    Q  8