ó
‡4Nc           @   s¶  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z e d ƒ Z	 d  d l
 m Z y d  d l Z Wn e k
 r« d  d l Z n Xe e d e ƒ pÊ e j dx k Z e j j d ƒ Z e j j d ƒ Z e r e Z n¤ e j dy k  r-d  d l Z e e j f Z nw d d e d d f Z y e j j d e ƒ Wn e  k
 rxd  d l Z n Xd  d l Z e j j! e ƒ e e j f Z e" ƒ  Z# e$ d ƒ Z% e rÎd  d l& Z& n0 y d  d l' Z& Wn e k
 rýd  d l& Z& n Xd „  Z( e e d e( ƒ Z( e j dz k rAd e) f d „  ƒ  YZ* n d e) f d „  ƒ  YZ* e r‚d „  Z+ d „  Z, d  d l- m. Z. n e j+ Z+ e j, Z, e j. Z. y d  d l/ m0 Z0 Wn' e k
 rÚd e) f d „  ƒ  YZ0 n Xd e) f d „  ƒ  YZ1 d e) f d „  ƒ  YZ2 zC y e2 ƒ  d e) Z3 Wn' e4 k
 rHd e) f d „  ƒ  YZ3 n XWd [2 Xd d „ Z5 d  „  Z6 d! „  Z7 y d  d" l- m8 Z8 Wn  e k
 r¥d{ d| d' „ Z8 n Xy d  d( l- m9 Z9 Wn d) „  Z9 n Xy d  d l: Z: e: j; Z< Wn& e k
 rd  d l; Z; e; j= Z< n Xd* „  Z> d d+ „ Z? d, „  Z@ d- „  ZA e j d} k rQd. „  ZB n	 d/ „  ZB d d0 „ ZC d1 „  ZD d2 „  ZE d3 „  ZF eG d4 „ ZH eG d5 „ ZI d6 „  ZJ d7 „  ZK d8 eL f d9 „  ƒ  YZM d: „  ZN d; „  ZO d< „  ZP d= „  ZQ d> „  ZR eG d? „ ZS d d@ „ ZT dA „  ZU dB „  ZV dC aW dD „  ZX dE „  ZY d d dF d dG „ ZZ dH e[ f dI „  ƒ  YZ\ dJ eL f dK „  ƒ  YZ] dL e) f dM „  ƒ  YZ^ dN e f dO „  ƒ  YZ_ dP eL f dQ „  ƒ  YZ` dR e` f dS „  ƒ  YZa dT „  Zb e Zc e) Zd e_ Ze e* Zf e dU „ Zg dV eL f dW „  ƒ  YZh dX eL f dY „  ƒ  YZi dZ ei f d[ „  ƒ  YZj d\ eL f d] „  ƒ  YZk d^ ek _l d^ eL f d_ „  ƒ  YZm d d d d` „ Zn da „  Zo db eL f dc „  ƒ  YZp dd eL f de „  ƒ  YZq df „  Zr dg eL f dh „  ƒ  YZs di eL f dj „  ƒ  YZt dk e ju f dl „  ƒ  YZv d  d lw Zw e se r&ew jx Zy n	 ew jw Zy dm e) f dn „  ƒ  YZz d do „ Z{ d dp „ Z| d dq „ Z} d eG dr „ Z~ d eG ds „ Z dt „  Z€ d du „ Z dv e‚ f dw „  ƒ  YZƒ d S(~   iÿÿÿÿNt   types(   t   exct   py3kwarningi   i    t   javat   wini   i   t   ignorec         C   s   |  S(   N(    (   t   x(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   buffer@   s    R   i   t   PopulateDictc           B   s    e  Z d  Z d „  Z d „  Z RS(   s¡   A dict which populates missing values via a creation function.

        Note the creation function takes a key, unlike
        collections.defaultdict.

        c         C   s   | |  _  d  S(   N(   t   creator(   t   selfR	   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __init__O   s    c         C   s   |  j  | ƒ |  | <} | S(   N(   R	   (   R
   t   keyt   val(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __missing__R   s    (   t   __name__t
   __module__t   __doc__R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   G   s   	c           B   s    e  Z d  Z d „  Z d „  Z RS(   s>   A dict which populates missing values via a creation function.c         C   s   | |  _  d  S(   N(   R	   (   R
   R	   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   Y   s    c         C   sD   y t  j |  | ƒ SWn) t k
 r? |  j | ƒ |  | <} | SXd  S(   N(   t   dictt   __getitem__t   KeyErrorR	   (   R
   R   t   value(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   \   s
    (   R   R   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   V   s   	c         C   s   t  |  d ƒ S(   Nt   __call__(   t   hasattr(   t   fn(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   callabled   s    c         C   s   |  | k |  | k  S(   N(    (   t   at   b(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   cmpf   s    (   t   reduce(   t   defaultdictR   c           B   sS   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   c         O   sK   | d  k	 r+ t | d ƒ r+ t d ƒ ‚ n  t j |  | | Ž | |  _ d  S(   NR   s   first argument must be callable(   t   NoneR   t	   TypeErrorR   R   t   default_factory(   R
   R!   R   t   kw(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   s   s
    c         C   s6   y t  j |  | ƒ SWn t k
 r1 |  j | ƒ SXd  S(   N(   R   R   R   R   (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   y   s    c         C   s6   |  j  d  k r t | ƒ ‚ n  |  j  ƒ  |  | <} | S(   N(   R!   R   R   (   R
   R   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ~   s    c         C   sF   |  j  d  k r t ƒ  } n |  j  f } t |  ƒ | d  d  |  j ƒ  f S(   N(   R!   R   t   tuplet   typet	   iteritems(   R
   t   args(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   __reduce__ƒ   s    c         C   s
   |  j  ƒ  S(   N(   t   __copy__(   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   copy‰   s    c         C   s   t  |  ƒ |  j |  ƒ S(   N(   R$   R!   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR(   ‹   s    c         C   s1   d d  l  } t |  ƒ |  j | j |  j ƒ  ƒ ƒ S(   Niÿÿÿÿ(   R)   R$   R!   t   deepcopyt   items(   R
   t   memoR)   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __deepcopy__   s    c         C   s   d |  j  t j |  ƒ f S(   Ns   defaultdict(%s, %s)(   R!   R   t   __repr__(   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR.   ‘   s    	N(   R   R   R   R   R   R   R'   R)   R(   R-   R.   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   r   s   						t
   frozendictc           B   sd   e  Z e d  „  ƒ Z e Z Z Z e Z Z Z	 Z
 d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   t  d ‚ d  S(   Ns    A frozendict cannot be modified.(   t   AttributeError(   t   obj(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   _blocked_attribute–   s    c         G   s#   t  j |  ƒ } t  j | | Œ | S(   N(   R   t   __new__R   (   t   clsR&   t   new(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR3      s    c         G   s   d  S(   N(    (   R
   R&   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ¢   s    c         C   s   t  t |  ƒ f f S(   N(   R/   R   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR'   ¥   s    c         C   s7   |  s t  | ƒ S|  j ƒ  } | j | ƒ t  | ƒ Sd  S(   N(   R/   R)   t   update(   R
   t   dt   d2(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   union¨   s
    
c         C   s   d t  j |  ƒ S(   Ns   frozendict(%s)(   R   R.   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR.   °   s    (   R   R   t   propertyR2   t   __delitem__t   __setitem__t   cleart   popt   popitemt
   setdefaultR6   R3   R   R'   R9   R.   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR/   •   s   				t   _probec           B   s   e  Z d  „  Z RS(   c         C   s   d S(   Ni   (    (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ¶   s    (   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRA   µ   s   t   missingt	   py25_dictc           B   s   e  Z d  „  Z RS(   c         C   sc   y t  j |  | ƒ SWnH t k
 r^ y |  j } Wn t k
 rP t | ƒ ‚ q_ X| | ƒ Sn Xd  S(   N(   R   R   R   R   R0   (   R
   R   RB   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ¿   s    (   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRC   ¾   s   c         C   s4   |  d  k r | St |  t t f ƒ s, |  g S|  Sd  S(   N(   R   t
   isinstancet   listR#   (   R   t   default(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   to_listÍ   s
    c         C   s:   |  d  k r t ƒ  St |  t ƒ s2 t t |  ƒ ƒ S|  Sd  S(   N(   R   t   setRD   RG   (   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   to_setÕ   s
    c         C   s:   |  d  k r t ƒ  St |  t ƒ s2 t t |  ƒ ƒ S|  Sd  S(   N(   R   t
   column_setRD   RG   (   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   to_column_setÝ   s
    (   t   update_wrapperR   R   R   t   __dict__c         C   sa   x' | D] } t  |  | t | | ƒ ƒ q Wx0 | D]( } t |  | ƒ j t | | d ƒ ƒ q1 W|  S(   N(    (   t   setattrt   getattrR6   (   t   wrappert   wrappedt   assignedt   updatedt   attr(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRL   é   s
    &(   t   partialc            s   ‡ ‡ ‡  f d †  } | S(   Nc             s*   ˆ j  ƒ  } | j | ƒ ˆ ˆ  |  | Ž  S(   N(   R)   R6   (   t   fargst	   fkeywordst   newkeywords(   R&   t   funct   keywords(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   newfuncö   s    (    (   RY   R&   RZ   R[   (    (   RZ   R&   RY   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRU   õ   s    c         C   s    t  ƒ  } | j |  ƒ | j ƒ  S(   N(   t   _md5R6   t	   hexdigest(   R   t   m(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   md5_hex  s    	c            s   ‡  f d †  } | S(   Nc            sV   t  j ˆ  ƒ ‰ ˆ d s" t d ‚ ‡ ‡ ‡  f d †  ‰ ‡ f d †  } t | ƒ ˆ  ƒ S(   Ni   s(   Decorated function does not accept *argsc             sn   ˆ  rj ˆ  d k r t  j }  n	 t  j }  d ˆ j t j ˆ Œ  ˆ d ˆ d f } t j | |  d d ƒn  d  S(   Nt   pendings¡   %s%s now accepts multiple %s arguments as a variable argument list.  Supplying %s as a single list is deprecated and support will be removed in a future release.i   t
   stackleveli   (   R   t   SAPendingDeprecationWarningt   SADeprecationWarningt	   func_namet   inspectt   formatargspect   warningst   warn(   t   warning_typet   msg(   t   list_deprecationt   specR   (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   _deprecate  s    	c            sM   t  | d t ƒ r< ˆ  ƒ  |  t | d d !ƒ | d | Ž  S|  | | Ž  Sd  S(   Niÿÿÿÿi    (   RD   RE   (   R   R&   R"   (   Rm   (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   go!  s    "(   Re   t
   getargspect   AssertionErrort	   decorator(   R   Rn   (   Rk   (   R   Rm   Rl   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   decorate  s
    (    (   Rk   Rr   (    (   Rk   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   accepts_a_list_as_starargs  s    c         '   s”   t  |  ƒ }  x | D]y ‰  t j ˆ  f t j ‡  f d †  t d ƒ ƒ ƒ } x@ | D]( } | |  k rP |  j | ƒ | VPqP qP Wt d ˆ  ƒ ‚ q Wd  S(   Nc            s   ˆ  t  |  ƒ S(   N(   t   str(   t   i(   t   base(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   <lambda>0  s    iè  s&   exhausted namespace for symbol base %s(   RH   t	   itertoolst   chaint   imapt   xranget   addt	   NameError(   t   usedt   basest   poolt   sym(    (   Rv   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   unique_symbols,  s    c            s   ‡  f d †  } t  | ˆ  ƒ S(   s'   A signature-matching decorator factory.c            sÆ   t  j |  ƒ } t | d ƒ | d d !|  j f } t | d d ƒ \ } } t d | d | ƒ } | j t | d t ƒƒ d | } t	 | i ˆ  | 6|  | 6ƒ } t
 |  d |  ƒ j | _ t | |  ƒ S(	   Ni    i   i   t   targetR   t   groupeds1   lambda %(args)s: %(target)s(%(fn)s, %(apply_kw)s)t   im_func(   Re   Ro   R#   Rd   R‚   R   R6   t   format_argspec_plust   Falset   evalRO   t   func_defaultsRL   (   R   Rl   t   namest	   targ_namet   fn_namet   metadatat   codet	   decorated(   Rƒ   (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRr   =  s    %(   RL   (   Rƒ   Rr   (    (   Rƒ   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRq   :  s    c         C   s^   g  } xK |  j  |  j |  j f D]1 } t | d ƒ rC | j ƒ  } n  | j | ƒ q Wt | ƒ S(   sz   decode a slice object as sent to __getitem__.

        takes into account the 2.5 __index__() method, basically.

        t	   __index__(   t   startt   stopt   stepR   R   t   appendR#   (   t   slct   retR   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   decode_sliceN  s    c         C   s   |  j  |  j |  j f S(   N(   R‘   R’   R“   (   R•   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR—   [  s    c         K   s3   |  j  ƒ  }  | r" |  j | ƒ n  |  j |   |  S(   s5   Copy the given dict and update with the given values.(   R)   R6   (   R7   t   _newR"   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   update_copy^  s
    c         c   sX   xQ |  D]I } t  | t ƒ rK t | d ƒ rK x! t | ƒ D] } | Vq9 Wq | Vq Wd S(   s   Given an iterator of which further sub-elements may also be
    iterators, flatten the sub-elements into a single iterator.

    t   __iter__N(   RD   t
   basestringR   t   flatten_iterator(   R   t   elemt   y(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRœ   g  s
    c   	      C   só   x7 |  j  D]( } d | j k r
 t | g ƒ } Pq
 q
 Wg  St ƒ  } xœ | rá | j ƒ  } | j j d t ƒ } | s‡ t | t j ƒ r | j	 | j
 ƒ qF n  t j | ƒ \ } } } } | j	 | ƒ | rF | j	 | j
 ƒ qF qF W| j d ƒ | S(   si  Return the full set of inherited kwargs for the given `cls`.

    Probes a class's __init__ method, collecting all named arguments.  If the
    __init__ defines a \**kwargs catch-all, then the constructor is presumed to
    pass along unrecognized keywords to it's base classes, and the collection
    process is repeated recursively on each of the bases.

    R   R
   (   t   __mro__RM   RH   R>   t   getR‡   RD   R    t   FunctionTypeR6   t	   __bases__Re   Ro   t   discard(	   R4   t   ct   stackR&   t   class_t   ctrRŠ   t   _t   has_kw(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   get_cls_kwargss  s$    
		c         C   s   t  j |  ƒ d S(   s9   Return the full set of legal kwargs for the given `func`.i    (   Re   Ro   (   RY   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   get_func_kwargs’  s    c         C   sI  t  |  ƒ r t j |  ƒ p |  } t j | Œ  } | d rK | d d } n! | d rf d | d } n d } t j | d | d | d ƒ } | d d k	 r¹ | d d t | d ƒ p¼ d } t j | d | d | d | d d „  ƒ} | rt d | d	 | d
 | d | ƒ St d | d d !d	 | d
 | d d !d | d d !ƒ Sd S(   sµ  Returns a dictionary of formatted, introspected function arguments.

    A enhanced variant of inspect.formatargspec to support code generation.

    fn
       An inspectable callable or tuple of inspect getargspec() results.
    grouped
      Defaults to True; include (parens, around, argument) lists

    Returns:

    args
      Full inspect.formatargspec for fn
    self_arg
      The name of the first positional argument, varargs[0], or None
      if the function defines no positional arguments.
    apply_pos
      args, re-written in calling rather than receiving syntax.  Arguments are
      passed positionally.
    apply_kw
      Like apply_pos, except keyword-ish args are passed as keywords.

    Example::

      >>> format_argspec_plus(lambda self, a, b, c=3, **d: 123)
      {'args': '(self, a, b, c=3, **d)',
       'self_arg': 'self',
       'apply_kw': '(self, a, b, c=c, **d)',
       'apply_pos': '(self, a, b, c, **d)'}

    i    i   s   %s[0]i   i   t   formatvaluec         S   s   d |  S(   Nt   =(    (   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRw   Á  s    R&   t   self_argt	   apply_post   apply_kwiÿÿÿÿN(    (   R   Re   Ro   Rf   R   t   lenR   (   R   R„   Rl   R&   R®   R¯   t   defaulted_valsR°   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR†   –  s      !

!2!c         C   s„   y t  |  d | ƒSWni t k
 r d } |  t j k rN | rE d pH d } n | rZ d p] d } t d d d | d | d	 | ƒ SXd
 S(   s  format_argspec_plus with considerations for typical __init__ methods

    Wraps format_argspec_plus with error handling strategies for typical
    __init__ cases::

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    R„   R
   s   (self)s   (self, *args, **kwargs)s   self, *args, **kwargsR®   R&   R¯   R°   N(   R†   R    t   objectR   R   (   t   methodR„   R®   R&   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   format_argspec_initÉ  s    
c         C   s^   y t  j |  ƒ SWnF t k
 rY |  t j k rC d g d d d f Sd g d d d f Sn Xd S(   sú   inspect.getargspec with considerations for typical __init__ methods

    Wraps inspect.getargspec with error handling for typical __init__ cases::

      object.__init__ -> (self)
      other unreflectable (usually C) -> (self, *args, **kwargs)

    R
   R&   t   kwargsN(   Re   Ro   R    R³   R   R   (   R´   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   getargspec_initÞ  s    	c         C   s+   t  |  t j ƒ r# |  j r# |  j S|  Sd S(   sI   Adjust the incoming callable such that a 'self' argument is not required.N(   RD   R    t
   MethodTypet   im_selfR…   (   t   func_or_cls(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   unbound_method_to_callableð  s    t   portable_instancemethodc           B   s    e  Z d  Z d „  Z d „  Z RS(   s_   Turn an instancemethod into a (parent, name) pair
    to produce a serializable callable.

    c         C   s   | j  |  _ | j |  _ d  S(   N(   R¹   Rƒ   R   t   name(   R
   t   meth(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ý  s    c         O   s   t  |  j |  j ƒ | | Ž  S(   N(   RO   Rƒ   R½   (   R
   t   argR"   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    (   R   R   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR¼   ø  s   	c            s%  t  |  t j ƒ r t ƒ  St |  g ƒ ‰  t |  j ƒ } xá | r| j ƒ  } t  | t j ƒ rd q: n  x; ‡  f d †  | j Dƒ D]  } | j | ƒ ˆ  j	 | ƒ q~ W| j
 d k s: t | d ƒ rÇ q: n  xM g  | j ƒ  D] } | ˆ  k r× | ^ q× D]  } | j | ƒ ˆ  j	 | ƒ qó Wq: Wt ˆ  ƒ S(   s†  Return an unordered sequence of all classes related to cls.

    Traverses diamond hierarchies.

    Fibs slightly: subclasses of builtin types are not returned.  Thus
    class_hierarchy(class A(object)) returns (A, object), not A plus every
    class systemwide that derives from object.

    Old-style classes are discarded and hierarchies rooted on them
    will not be descended.

    c         3   s4   |  ]* } | ˆ  k r t  | t j ƒ r | Vq d  S(   N(   RD   R    t	   ClassType(   t   .0R¨   (   t   hier(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>  s    t   __builtin__t   __subclasses__(   RD   R    RÀ   RE   RH   RŸ   R>   R¢   R”   R|   R   R   RÄ   (   R4   t   processR¤   R   R¨   t   s(    (   RÂ   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   class_hierarchy  s"    	 2c         c   sZ   t  |  ƒ } xG | D]? } x6 |  j D]+ } | | j k r# | | j | f VPq# q# Wq Wd S(   sØ   iterate all the keys and attributes associated 
       with a class, without using getattr().

       Does not use getattr() so that class-sensitive 
       descriptors (i.e. property.__get__()) are not called.

    N(   t   dirRŸ   RM   (   R4   t   keysR   R¤   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   iterate_attributes0  s    c         C   sd   t  |  t t f ƒ rZ |  j ƒ  j ƒ  }  |  d k r7 t S|  d k rG t St d |  ƒ ‚ n  t |  ƒ S(   Nt   truet   yest   onRž   t   tt   1t   falset   not   offt   nt   ft   0s   String is not true/false: %r(   s   trues   yess   onRž   RÎ   RÏ   (   s   falses   nos   offRÓ   RÔ   RÕ   (	   RD   Rt   t   unicodet   stript   lowert   TrueR‡   t
   ValueErrort   bool(   R1   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   asbool@  s    c             s   ‡  f d †  } | S(   sr   Return a callable that will evaulate a string as 
    boolean, or one of a set of "alternate" string values.

    c            s   |  ˆ  k r |  St  |  ƒ Sd  S(   N(   RÜ   (   R1   (   t   text(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   bool_or_valueP  s    (    (   RÝ   RÞ   (    (   RÝ   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   bool_or_strK  s    c         C   s   |  d k r |  St |  ƒ S(   s   Coerce to integer.N(   R   t   int(   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   asintW  s    c         C   sv   | |  k rr t  |  | ƒ | k	 rr |  | d k	 rr | t k r[ | r[ t |  | ƒ |  | <qr | |  | ƒ |  | <n  d S(   sµ   If 'key' is present in dict 'kw', coerce its value to type 'type\_' if
    necessary.  If 'flexi_bool' is True, the string '0' is considered false
    when coercing to boolean.
    N(   R$   R   RÛ   RÜ   (   R"   R   t   type_t
   flexi_bool(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   coerce_kw_type^  s    2c         C   sÓ   t  |  d ƒ r> |  j d k	 r4 t |  j t ƒ r4 t S|  j Sn  t |  t ƒ rS t pV t } | |  t ƒ rl t S| |  t ƒ r t S| |  t	 ƒ r’ t	 St  |  d ƒ r¥ t St  |  d ƒ r¸ t St  |  d ƒ rË t	 S| Sd S(   sÄ   Given an instance or class, guess if it is or is acting as one of
    the basic collection types: list, set and dict.  If the __emulates__
    property is present, return that preferentially.
    t   __emulates__R”   R|   RH   N(
   R   Rå   R   t
   issubclasst	   set_typesRH   RD   R$   RE   R   (   t   specimenRF   t   isa(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   duck_type_collectionj  s&    
c            sà   t  ˆ d ƒ r ˆ j ƒ  St  ˆ d ƒ r8 t ˆ j ƒ  ƒ St ˆ d t ˆ d d
 ƒ ƒ ‰  ˆ  d
 k ru t d ˆ ƒ ‚ n  t  ˆ d ƒ r ‡ ‡  f d †  } | ƒ  St  ˆ d ƒ rÌ t ‡  f d	 †  ˆ j ƒ  Dƒ ƒ St d ˆ ƒ ‚ d
 S(   s?   Return a (key, value) iterator for almost any dict-like object.R%   R+   R   R    s   Object '%r' is not dict-liket   iterkeysc          3   s,   x% ˆ  j  ƒ  D] }  |  ˆ |  ƒ f Vq Wd  S(   N(   Rë   (   R   (   t   dictliket   getter(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   iteratorœ  s    RÉ   c         3   s!   |  ] } | ˆ  | ƒ f Vq d  S(   N(    (   RÁ   R   (   Rí   (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>¡  s    N(   R   R%   t   iterR+   RO   R   R    RÉ   (   Rì   Rî   (    (   Rí   Rì   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   dictlike_iteritems‰  s    
 c         C   s€   t  |  | ƒ r |  St  | t ƒ rZ t j d | d j d „  | Dƒ ƒ t |  ƒ f ƒ ‚ n" t j d | | t |  ƒ f ƒ ‚ d  S(   Ns8   Argument '%s' is expected to be one of type %s, got '%s's    or c         s   s   |  ] } d  | Vq d S(   s   '%s'N(    (   RÁ   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>­  s    s6   Argument '%s' is expected to be of type '%s', got '%s'(   RD   R#   R   t   ArgumentErrort   joinR$   (   R¿   t   argtypeR½   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   assert_arg_type¦  s    /i   c         C   s   t  |  _  t  d 7a  d S(   sÞ   Assign a '_creation_order' sequence to the given instance.

    This allows multiple instances to be sorted in order of creation
    (typically within a single thread; the counter is not particularly
    threadsafe).

    i   N(   t   _creation_order(   t   instance(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   set_creation_order´  s    		c         O   s:   y |  | | Ž  SWn" t  d t j ƒ  d d !ƒ n Xd S(   sN   executes the given function, catches all exceptions and converts to a warning.s   %s('%s') ignoredi    i   N(   Rh   t   syst   exc_info(   RY   R&   R¶   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   warn_exceptionÀ  s    s
   self.proxyc         B   s°  | r | } nn | d k r$ d } n  g  e | ƒ D]F } | j d ƒ r1 | j d ƒ r1 e |  | ƒ r1 | | k r1 | ^ q1 } x,| D]$} y: e | | ƒ }	 e |	 d ƒ s± w„ n  e |	 d	 |	 ƒ }	 Wn e k
 rÚ q„ n Xy= e j |	 ƒ }
 e j	 |
 d
 ƒ } e j	 |
 d
 d ƒ } Wn e
 k
 r7d } d } n Xd e ƒ  } | d k	 r^i | | 6pai  } | | Uy |	 j | | _ Wn e k
 r“n Xe |  | | | ƒ q„ Wd S(   s9   Automates delegation of __specials__ for a proxying type.t	   __slots__t   __del__t   __getattribute__t   __metaclass__t   __getstate__t   __setstate__t   __R   R…   i    i   s   (self, *args, **kw)s   (*args, **kw)s?   def %(method)s%(fn_args)s: return %(name)s.%(method)s%(d_args)sN(   s	   __slots__s   __del__s   __getattribute__s   __metaclass__s   __getstate__s   __setstate__(   R   RÈ   t
   startswitht   endswithR   RO   R0   Re   Ro   Rf   R    t   localsR‰   RN   (   t   into_clst   from_clst   skipt   onlyR½   t   from_instancet   dundersR^   R´   R   Rl   t   fn_argst   d_argst   pyt   env(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   monkeypatch_proxied_specialsÇ  s@    	 	(

t
   NamedTuplec           B   s#   e  Z d  Z d d „ Z d „  Z RS(   sH   tuple() subclass that adds labeled names.

    Is also pickleable.

    c         C   sO   t  | ƒ } t j |  | ƒ } | rK t t j | | ƒ ƒ | _ | | _ n  | S(   N(   RE   R#   R3   R   Rx   t   izipRM   t   _labels(   R4   t   valst   labelsRÎ   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR3   ö  s    c         C   s&   g  |  j  D] } | d  k	 r
 | ^ q
 S(   N(   R  R   (   R
   t   l(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRÉ   þ  s    N(   R   R   R   R   R3   RÉ   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  ï  s   t   OrderedPropertiesc           B   sª   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z RS(   sg  An object that maintains the order in which attributes are set upon it.

    Also provides an iterator and a very basic getitem/setitem
    interface to those attributes.

    (Not really a dict, since it iterates over values, not keys.  Not really
    a list, either, since each value must have a key associated; hence there is
    no append or extend.)
    c         C   s   t  ƒ  |  j d <d  S(   Nt   _data(   t   OrderedDictRM   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    c         C   s   t  |  j ƒ S(   N(   R±   R  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __len__  s    c         C   s   |  j  j ƒ  S(   N(   R  t
   itervalues(   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRš     s    c         C   s   t  |  ƒ t  | ƒ S(   N(   RE   (   R
   t   other(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __add__  s    c         C   s   | |  j  | <d  S(   N(   R  (   R
   R   R³   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR<     s    c         C   s   |  j  | S(   N(   R  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    c         C   s   |  j  | =d  S(   N(   R  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR;     s    c         C   s   | |  j  | <d  S(   N(   R  (   R
   R   R³   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __setattr__"  s    c         C   s   i |  j  d d 6S(   NR  (   RM   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRÿ   %  s    c         C   s   | d |  j  d <d  S(   NR  (   RM   (   R
   t   state(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   (  s    c         C   s3   y |  j  | SWn t k
 r. t | ƒ ‚ n Xd  S(   N(   R  R   R0   (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __getattr__+  s    c         C   s   | |  j  k S(   N(   R  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __contains__1  s    c         C   s   |  j  j | ƒ d  S(   N(   R  R6   (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR6   4  s    c         C   s   | |  k r |  | S| Sd  S(   N(    (   R
   R   RF   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR    7  s    c         C   s   |  j  j ƒ  S(   N(   R  RÉ   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRÉ   =  s    c         C   s   | |  j  k S(   N(   R  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   has_key@  s    c         C   s   |  j  j ƒ  d  S(   N(   R  R=   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   C  s    N(   R   R   R   R   R  Rš   R  R<   R   R;   R  Rÿ   R   R  R   R6   R   R    RÉ   R!  R=   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR    s$   																R  c           B   s¶   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sC   A dict that returns keys/values/items in the order they were added.c         K   sB   g  |  _  | d  k r. | r> |  j |   q> n |  j | |  d  S(   N(   t   _listR   R6   (   R
   t   _OrderedDict____sequenceR¶   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   I  s
    	c         C   s   g  |  _  t j |  ƒ d  S(   N(   R"  R   R=   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   Q  s    	c         C   s
   |  j  ƒ  S(   N(   R(   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR)   U  s    c         C   s
   t  |  ƒ S(   N(   R  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR(   X  s    c         O   s   |  j  j | | Ž  d  S(   N(   R"  t   sort(   R
   R¿   R"   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR$  [  s    c         K   s‡   | d  k	 rm t | d ƒ rI xL | j ƒ  D] } |  j | | | ƒ q( Wqm x! | D] \ } } | |  | <qP Wn  | rƒ |  j | ƒ n  d  S(   NRÉ   (   R   R   RÉ   R<   R6   (   R
   R#  R¶   R   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR6   ^  s    c         C   s1   | |  k r  |  j  | | ƒ | S|  j | ƒ Sd  S(   N(   R<   R   (   R
   R   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR@   i  s    c         C   s   t  |  j ƒ S(   N(   Rï   R"  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRš   p  s    c         C   s   g  |  j  D] } |  | ^ q
 S(   N(   R"  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   valuess  s    c         C   s   t  |  j ƒ  ƒ S(   N(   Rï   R%  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  v  s    c         C   s   t  |  j ƒ S(   N(   RE   R"  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRÉ   y  s    c         C   s   t  |  j ƒ  ƒ S(   N(   Rï   RÉ   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRë   |  s    c         C   s'   g  |  j  ƒ  D] } | |  | f ^ q S(   N(   RÉ   (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR+     s    c         C   s   t  |  j ƒ  ƒ S(   N(   Rï   R+   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR%   ‚  s    c         C   sZ   | |  k rC y |  j  j | ƒ WqC t k
 r? | g |  _  qC Xn  t j |  | | ƒ d  S(   N(   R"  R”   R0   R   R<   (   R
   R   R³   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR<   …  s    c         C   s$   t  j |  | ƒ |  j j | ƒ d  S(   N(   R   R;   R"  t   remove(   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR;     s    c         G   s>   | |  k } t  j |  | | Œ } | r: |  j j | ƒ n  | S(   N(   R   R>   R"  R&  (   R
   R   RF   t   presentR   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR>   “  s
    c         C   s'   t  j |  ƒ } |  j j | d ƒ | S(   Ni    (   R   R?   R"  R&  (   R
   t   item(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR?   š  s    N(   R   R   R   R   R   R=   R)   R(   R$  R6   R@   Rš   R%  R  RÉ   Rë   R+   R%   R<   R;   R>   R?   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  F  s&   													
		t
   OrderedSetc           B   sÚ   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e Z d	 „  Z e Z d
 „  Z e Z d „  Z e Z d „  Z e Z d „  Z e Z d „  Z e Z d „  Z e Z d „  Z e Z RS(   c         C   s6   t  j |  ƒ g  |  _ | d  k	 r2 |  j | ƒ n  d  S(   N(   RH   R   R"  R   R6   (   R
   R7   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR      s    	c         C   s3   | |  k r |  j  j | ƒ n  t j |  | ƒ d  S(   N(   R"  R”   RH   R|   (   R
   t   element(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR|   ¦  s    c         C   s$   t  j |  | ƒ |  j j | ƒ d  S(   N(   RH   R&  R"  (   R
   R*  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR&  «  s    c         C   s6   | |  k r" |  j  j | | ƒ n  t j |  | ƒ d  S(   N(   R"  t   insertRH   R|   (   R
   t   posR*  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR+  ¯  s    c         C   s3   | |  k r/ |  j  j | ƒ t j |  | ƒ n  d  S(   N(   R"  R&  RH   (   R
   R*  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR£   ´  s    c         C   s   t  j |  ƒ g  |  _ d  S(   N(   RH   R=   R"  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   ¹  s    c         C   s   |  j  | S(   N(   R"  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ½  s    c         C   s   t  |  j ƒ S(   N(   Rï   R"  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRš   À  s    c         C   s   d |  j  j |  j f S(   Ns   %s(%r)(   t	   __class__R   R"  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR.   Ã  s    c         C   s(   |  j  } x | D] } | | ƒ q W|  S(   N(   R|   (   R
   t   iterableR|   Ru   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR6   È  s    	c         C   s    |  j  |  ƒ } | j | ƒ | S(   N(   R-  R6   (   R
   R  t   result(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR9   Ð  s    c            s)   t  ˆ  ƒ ‰  |  j ‡  f d †  |  Dƒ ƒ S(   Nc         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   RÁ   R   (   R  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>Ù  s    (   RH   R-  (   R
   R  (    (   R  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   intersection×  s    c            sL   t  ˆ ƒ ‰ ˆ  j ‡ f d †  ˆ  Dƒ ƒ } | j ‡  f d †  ˆ Dƒ ƒ | S(   Nc         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   RÁ   R   (   R  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>ß  s    c         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   RÁ   R   (   R
   (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>à  s    (   RH   R-  R6   (   R
   R  R/  (    (   R
   R  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   symmetric_differenceÝ  s    c            s)   t  ˆ  ƒ ‰  |  j ‡  f d †  |  Dƒ ƒ S(   Nc         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   RÁ   R   (   R  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>ç  s    (   RH   R-  (   R
   R  (    (   R  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   differenceå  s    c         C   sK   t  | ƒ } t  j |  | ƒ g  |  j D] } | | k r& | ^ q& |  _ |  S(   N(   RH   t   intersection_updateR"  (   R
   R  R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR3  ë  s    +c         C   sp   t  j |  | ƒ g  |  j D] } | |  k r | ^ q |  _ |  j g  | j D] } | |  k rL | ^ qL 7_ |  S(   N(   RH   t   symmetric_difference_updateR"  (   R
   R  R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR4  ó  s    +1c         C   s?   t  j |  | ƒ g  |  j D] } | |  k r | ^ q |  _ |  S(   N(   RH   t   difference_updateR"  (   R
   R  R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR5  û  s    +N(   R   R   R   R   R|   R&  R+  R£   R=   R   Rš   R.   t   __str__R6   t   __ior__R9   t   __or__R0  t   __and__R1  t   __xor__R2  t   __sub__R3  t   __iand__R4  t   __ixor__R5  t   __isub__(    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR)  Ÿ  s4   																t   IdentitySetc           B   ss  e  Z d  Z e Z d' d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d  „  Z% d! „  Z& d" „  Z' e' Z( d# „  Z) d$ „  Z* d% „  Z+ d& „  Z, RS((   sÏ   A 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.

    c         C   s7   t  ƒ  |  _ | r3 x | D] } |  j | ƒ q Wn  d  S(   N(   R   t   _membersR|   (   R
   R.  t   o(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    c         C   s   | |  j  t | ƒ <d  S(   N(   R@  t   id(   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR|     s    c         C   s   t  | ƒ |  j k S(   N(   RB  R@  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    c         C   s   |  j  t | ƒ =d  S(   N(   R@  RB  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR&    s    c         C   s)   y |  j  | ƒ Wn t k
 r$ n Xd  S(   N(   R&  R   (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR£     s    c         C   s?   y |  j  j ƒ  } | d SWn t k
 r: t d ƒ ‚ n Xd  S(   Ni   s   pop from an empty set(   R@  R?   R   (   R
   t   pair(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR>   "  s
    c         C   s   |  j  j ƒ  d  S(   N(   R@  R=   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   )  s    c         C   s   t  d ƒ ‚ d  S(   Ns   cannot compare sets using cmp()(   R    (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __cmp__,  s    c         C   s'   t  | t ƒ r |  j | j k St Sd  S(   N(   RD   R?  R@  R‡   (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __eq__/  s    c         C   s'   t  | t ƒ r |  j | j k St Sd  S(   N(   RD   R?  R@  RÙ   (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __ne__5  s    c         C   s_   t  |  ƒ | ƒ } t |  ƒ t | ƒ k r. t Sx* t j | j j |  j j ƒ  ƒ D] } t SWt S(   N(	   R$   R±   R‡   Rx   t   ifilterfalseR@  R   Rë   RÙ   (   R
   R.  R  R^   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   issubset;  s    c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  t   NotImplementedRH  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __le__E  s    c         C   s8   t  | t ƒ s t St |  ƒ t | ƒ k  o7 |  j | ƒ S(   N(   RD   R?  RI  R±   RH  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __lt__J  s    c         C   s_   t  |  ƒ | ƒ } t |  ƒ t | ƒ k  r. t Sx* t j |  j j | j j ƒ  ƒ D] } t SWt S(   N(	   R$   R±   R‡   Rx   RG  R@  R   Rë   RÙ   (   R
   R.  R  R^   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   issupersetO  s    c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  RI  RL  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __ge__Z  s    c         C   s8   t  | t ƒ s t St |  ƒ t | ƒ k o7 |  j | ƒ S(   N(   RD   R?  RI  R±   RL  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __gt___  s    c         C   sA   t  |  ƒ ƒ  } | j j |  j |  j ƒ  ƒ j t | ƒ ƒ ƒ | S(   N(   R$   R@  R6   t   _working_sett   _member_id_tuplesR9   t   _iter_id(   R
   R.  R/  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR9   d  s    	%c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  RI  R9   (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR8  k  s    c         C   s   |  j  | ƒ j |  _ d  S(   N(   R9   R@  (   R
   R.  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR6   p  s    c         C   s$   t  | t ƒ s t S|  j | ƒ |  S(   N(   RD   R?  RI  R6   (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR7  s  s    c         C   sA   t  |  ƒ ƒ  } | j j |  j |  j ƒ  ƒ j t | ƒ ƒ ƒ | S(   N(   R$   R@  R6   RO  RP  R2  RQ  (   R
   R.  R/  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR2  y  s    	%c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  RI  R2  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR;  €  s    c         C   s   |  j  | ƒ j |  _ d  S(   N(   R2  R@  (   R
   R.  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR5  …  s    c         C   s$   t  | t ƒ s t S|  j | ƒ |  S(   N(   RD   R?  RI  R5  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR>  ˆ  s    c         C   sA   t  |  ƒ ƒ  } | j j |  j |  j ƒ  ƒ j t | ƒ ƒ ƒ | S(   N(   R$   R@  R6   RO  RP  R0  RQ  (   R
   R.  R/  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR0  Ž  s    	%c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  RI  R0  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR9  •  s    c         C   s   |  j  | ƒ j |  _ d  S(   N(   R0  R@  (   R
   R.  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR3  š  s    c         C   s$   t  | t ƒ s t S|  j | ƒ |  S(   N(   RD   R?  RI  R3  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR<    s    c         C   sA   t  |  ƒ ƒ  } | j j |  j |  j ƒ  ƒ j t | ƒ ƒ ƒ | S(   N(   R$   R@  R6   RO  RP  R1  RQ  (   R
   R.  R/  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR1  £  s    	%c         C   s   d „  |  j  j ƒ  Dƒ S(   Nc         s   s!   |  ] } t  | ƒ | f Vq d  S(   N(   RB  (   RÁ   t   v(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pys	   <genexpr>«  s    (   R@  R  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRP  ª  s    c         C   s    t  | t ƒ s t S|  j | ƒ S(   N(   RD   R?  RI  R1  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR:  ­  s    c         C   s   |  j  | ƒ j |  _ d  S(   N(   R1  R@  (   R
   R.  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR4  ²  s    c         C   s$   t  | t ƒ s t S|  j | ƒ |  S(   N(   RD   R?  RI  R1  (   R
   R  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=  µ  s    c         C   s   t  |  ƒ |  j j ƒ  ƒ S(   N(   R$   R@  R  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR)   »  s    c         C   s   t  |  j ƒ S(   N(   R±   R@  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  À  s    c         C   s   |  j  j ƒ  S(   N(   R@  R  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRš   Ã  s    c         C   s   t  d ƒ ‚ d  S(   Ns   set objects are unhashable(   R    (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __hash__Æ  s    c         C   s    d t  |  ƒ j |  j j ƒ  f S(   Ns   %s(%r)(   R$   R   R@  R%  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR.   É  s    N(-   R   R   R   RH   RO  R   R   R|   R   R&  R£   R>   R=   RD  RE  RF  RH  RJ  RK  RL  RM  RN  R9   R8  R6   R7  R2  R;  R5  R>  R0  R9  R3  R<  R1  RP  R:  R4  R=  R)   R(   R  Rš   RS  R.   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR?    sR   										
																										t   OrderedIdentitySetc           B   s*   e  Z d  e f d „  ƒ  YZ d d „ Z RS(   RO  c           B   s   e  Z e Z RS(    (   R   R   RÙ   t   __sa_hash_exempt__(    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRO  Î  s   c         C   sD   t  j |  ƒ t ƒ  |  _ | r@ x | D] } |  j | ƒ q& Wn  d  S(   N(   R?  R   R  R@  R|   (   R
   R.  RA  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   Õ  s
    N(   R   R   R)  RO  R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRT  Í  s   c         c   s&   x |  D] } t  | ƒ | f Vq Wd S(   s*   Generator: ((id(o), o) for o in iterable).N(   RB  (   R.  R(  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRQ  Ü  s    c         C   s<   | ƒ  } g  |  D]( } | | k r | j  | ƒ r | ^ q S(   N(   R|   (   t   seqt   compare_witht   seenR   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   unique_listé  s    	t   UniqueAppenderc           B   s,   e  Z d  Z d d „ Z d „  Z d „  Z RS(   s½   Appends items to a collection ensuring uniqueness.

    Additional appends() of the same object are ignored.  Membership is
    determined by identity (``is a``) not equality (``==``).
    c         C   sp   | |  _  t ƒ  |  _ | r0 t | | ƒ |  _ n< t | d ƒ rN | j |  _ n t | d ƒ rl | j |  _ n  d  S(   NR”   R|   (   t   dataR?  t   _uniqueRO   t   _data_appenderR   R”   R|   (   R
   R[  t   via(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ô  s    	c         C   s3   | |  j  k r/ |  j | ƒ |  j  j | ƒ n  d  S(   N(   R\  R]  R|   (   R
   R(  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR”   ÿ  s    c         C   s   t  |  j ƒ S(   N(   Rï   R[  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRš     s    N(   R   R   R   R   R   R”   Rš   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRZ  í  s   	t   ScopedRegistryc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sÆ  A 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.
    c         C   s   | |  _  | |  _ i  |  _ d S(   sV  Construct 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	   scopefunct   registry(   R
   R`  Ra  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    		c         C   sI   |  j  ƒ  } y |  j | SWn' t k
 rD |  j j | |  j ƒ  ƒ SXd  S(   N(   Ra  Rb  R   R@   R`  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   &  s
    c         C   s   |  j  ƒ  |  j k S(   s9   Return True if an object is present in the current scope.(   Ra  Rb  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   has-  s    c         C   s   | |  j  |  j ƒ  <d S(   s#   Set the value forthe current scope.N(   Rb  Ra  (   R
   R1   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRH   2  s    c         C   s,   y |  j  |  j ƒ  =Wn t k
 r' n Xd S(   s    Clear the current scope, if any.N(   Rb  Ra  R   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   7  s    (   R   R   R   R   R   Rc  RH   R=   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR_    s   				t   ThreadLocalRegistryc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s]   A :class:`.ScopedRegistry` that uses a ``threading.local()`` 
    variable for storage.

    c         C   s   | |  _  t j ƒ  |  _ d  S(   N(   R`  t	   threadingt   localRb  (   R
   R`  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   D  s    	c         C   s=   y |  j  j SWn( t k
 r8 |  j ƒ  } |  j  _ | SXd  S(   N(   Rb  R   R0   R`  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   H  s
    c         C   s   t  |  j d ƒ S(   NR   (   R   Rb  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRc  O  s    c         C   s   | |  j  _ d  S(   N(   Rb  R   (   R
   R1   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRH   R  s    c         C   s%   y |  j  ` Wn t k
 r  n Xd  S(   N(   Rb  R   R0   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   U  s    (   R   R   R   R   R   Rc  RH   R=   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRd  ?  s   				t   _symbolc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s"   t  | t ƒ s t ‚ | |  _ d S(   s   Construct a new named symbol.N(   RD   Rt   Rp   R½   (   R
   R½   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   \  s    c         C   s   t  |  j f f S(   N(   t   symbolR½   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR'   `  s    c         C   s   d |  j  S(   Ns   <symbol '%s>(   R½   (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR.   b  s    (   R   R   R   R'   R.   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRg  [  s   		Rh  c           B   s)   e  Z d  Z i  Z e j ƒ  Z d „  Z RS(   sI  A constant symbol.

    >>> symbol('foo') is symbol('foo')
    True
    >>> symbol('foo')
    <symbol 'foo>

    A slight refinement of the MAGICCOOKIE=object() pattern.  The primary
    advantage of symbol() is its repr().  They are also singletons.

    Repeated calls of symbol('name') will all return the same instance.

    c         C   sb   |  j  j ƒ  z@ |  j j | ƒ } | d  k rH t | ƒ |  j | <} n  | SWd  t j  j ƒ  Xd  S(   N(   t   _lockt   acquiret   symbolsR    R   Rg  Rh  t   release(   R4   R½   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR3   x  s    (   R   R   R   Rk  Re  t   LockRi  R3   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRh  g  s   c         C   s1  | r | r t  d ƒ ‚ n  t | t ƒ r? t |  | ƒ r? |  St | ps g  t | ƒ D] } | j d ƒ sU | ^ qU ƒ } t t |  ƒ ƒ } t j } t | t ƒ r¬ | } n' | sÇ t ƒ  } t j } n t | ƒ } | | j	 | ƒ | ƒ rï |  St |  ƒ t
 k	 rA| t j k rd pd } t  d |  | d j | ƒ f ƒ ‚ n  d t f d „  ƒ  Y}	 | rpd	 | j |	 _ n  t ƒ  }
 x t |  ƒ D]s \ } } | | k r±t  d
 | ƒ ‚ n  t | ƒ sÖt  d | | f ƒ ‚ n  t |	 | t | ƒ ƒ |
 j | ƒ q†W| |
 | ƒ r|	 St  d d j | |
 ƒ ƒ ‚ d S(   s  Ensure basic interface compliance for an instance or dict of callables.

    Checks that ``obj`` implements public methods of ``cls`` or has members
    listed in ``methods``.  If ``required`` is not supplied, implementing at
    least one interface method is sufficient.  Methods present on ``obj`` that
    are not in the interface are ignored.

    If ``obj`` is a dict and ``dict`` does not meet the interface
    requirements, the keys of the dictionary are inspected. Keys present in
    ``obj`` that are not in the interface will raise TypeErrors.

    Raises TypeError if ``obj`` does not meet the interface criteria.

    In all passing cases, an object with callable members is returned.  In the
    simple case, ``obj`` is returned as-is; if dict processing kicks in then
    an anonymous class is returned.

    obj
      A type, instance, or dictionary of callables.
    cls
      Optional, a type.  All public methods of cls are considered the
      interface.  An ``obj`` instance of cls will always pass, ignoring
      ``required``..
    methods
      Optional, a sequence of method names to consider as the interface.
    required
      Optional, a sequence of mandatory implementations. If omitted, an
      ``obj`` that provides at least one interface method is considered
      sufficient.  As a convenience, required may be a type, in which case
      all public methods of the type are required.

    s2   a class or collection of method names are requiredR¨   s   any ofs   all ofs   %r does not implement %s: %ss   , t   AnonymousInterfacec           B   s   e  Z d  Z RS(   s   A callable-holding shell.(   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRn  ¿  s   t	   Anonymouss   %r: unknown in this interfaces   %r=%r is not callables,   dictionary does not contain required keys %sN(   R    RD   R$   RH   RÈ   R  t   operatort   get   gtR0  R   Rò   R³   R   Rð   R   RN   t   staticmethodR|   (   R1   R4   t   methodst   requiredR^   t	   interfacet   implementedt   compliest	   qualifierRn  t   foundR´   t   impl(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   as_interfaceƒ  sD    !:				c         C   sL   y | |  _  Wn8 t k
 rG t j |  j |  j | |  j |  j ƒ }  n X|  S(   sÈ   Return a function with a given __name__.

    Will assign to __name__ and return the original function if possible on
    the Python implementation, otherwise a new function will be constructed.

    (   R   R    R    R¡   t	   func_codet   func_globalsR‰   t   func_closure(   R   R½   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   function_namedÔ  s    t   memoized_propertyc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s2   A read-only @property that is only evaluated once.c         C   s+   | |  _  | p | j |  _ | j |  _ d  S(   N(   t   fgetR   R   (   R
   R‚  t   doc(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   å  s    	c         C   s1   | d  k r |  S|  j | ƒ | j |  j <} | S(   N(   R   R‚  RM   R   (   R
   R1   R4   R/  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   __get__ê  s    N(   R   R   R   R   R   R„  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  ã  s   t   memoized_instancemethodc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   sà   Decorate a method memoize its return value.

    Best applied to no-arg methods: memoization is not sensitive to
    argument values, and will always return the same value even when
    called with different arguments.

    c         C   s+   | |  _  | p | j |  _ | j |  _ d  S(   N(   R‚  R   R   (   R
   R‚  Rƒ  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ù  s    	c            s>   ˆ d  k r ˆ  S‡ ‡  f d †  } ˆ  j | _ ˆ  j | _ | S(   Nc             sP   ˆ j  ˆ |  | Ž ‰  ‡  f d †  } ˆ j | _ ˆ j | _ | ˆ j ˆ j <ˆ  S(   Nc             s   ˆ  S(   N(    (   R   R"   (   R/  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRw     s    (   R‚  R   R   RM   (   R&   R"   R,   (   R1   R
   (   R/  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   oneshot  s    (   R   R   R   (   R
   R1   R4   R†  (    (   R
   R1   ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR„  þ  s    N(   R   R   R   R   R   R„  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR…  ñ  s   c         C   s   |  j  j | d  ƒ d  S(   N(   RM   R>   R   (   Rö   R½   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   reset_memoized  s    t!   group_expirable_memoized_propertyc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s?   A family of @memoized_properties that can be expired in tandem.c         C   s   g  |  _  d  S(   N(   t
   attributes(   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    c         C   s1   | j  } x! |  j D] } | j | d ƒ q Wd S(   s.   Expire all memoized properties for *instance*.N(   RM   R‰  R>   R   (   R
   Rö   t   stasht	   attribute(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   expire_instance  s    	c         C   s   |  j  j | j ƒ t | ƒ S(   N(   R‰  R”   R   R  (   R
   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s    (   R   R   R   R   RŒ  R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRˆ    s   		t   importlaterc           B   s2   e  Z d  Z d d „ Z e d „  ƒ Z d „  Z RS(   sú   Deferred import object.

    e.g.::

        somesubmod = importlater("mypackage.somemodule", "somesubmod")

    is equivalent to::

        from mypackage.somemodule import somesubmod

    except evaluted upon attribute access to "somesubmod".

    c         C   s   | |  _  | |  _ d  S(   N(   t   _il_patht	   _il_addtl(   R
   t   patht   addtl(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   .  s    	c         C   s»   |  j  rt t |  j t ƒ  t ƒ  |  j  g ƒ } y t | |  j  ƒ SWq· t k
 rp t d |  j |  j  f ƒ ‚ q· XnC t |  j ƒ } x- |  j j d ƒ d D] } t | | ƒ } qš W| Sd  S(   Ns   Module %s has no attribute '%s't   .i   (	   R  t
   __import__RŽ  t   globalsR  RO   R0   t   ImportErrort   split(   R
   R^   t   token(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   _il_module2  s    	c         C   sT   y t  |  j | ƒ } Wn* t k
 rB t d |  j | f ƒ ‚ n X| |  j | <| S(   Ns   Module %s has no attribute '%s'(   RO   R˜  R0   RŽ  RM   (   R
   R   RT   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR  D  s    N(   R   R   R   R   R   R  R˜  R  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR     s   t   WeakIdentityMappingc           B   s–   e  Z d  Z e d ƒ Z d „  Z d „  Z d „  Z d d „ Z	 e d „ Z
 d „  Z d „  Z d	 „  Z d d
 „ Z d e j f d „  ƒ  YZ d „  Z RS(   s)  A WeakKeyDictionary with an object identity index.

    Adds a .by_id dictionary to a regular WeakKeyDictionary.  Trades
    performance during mutation operations for accelerated lookups by id().

    The usual cautions about weak dictionaries and iteration also apply to
    this subclass.

    t   nonec         C   s&   t  j j |  ƒ i  |  _ i  |  _ d  S(   N(   t   weakreft   WeakKeyDictionaryR   t   by_idt	   _weakrefs(   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   [  s    	c         C   s[   t  | ƒ } | |  j | <| |  j k rA |  j | ƒ |  j | <n  t j j |  | | ƒ d  S(   N(   RB  R  Rž  t   _refR›  Rœ  R<   (   R
   R³   R   t   oid(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR<   `  s
    c         C   s7   |  j  t | ƒ =|  j t | ƒ =t j j |  | ƒ d  S(   N(   Rž  RB  R  R›  Rœ  R;   (   R
   R³   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR;   g  s    c         C   sl   t  j j |  | | ƒ } t | ƒ } | | k r@ | |  j | <n  | |  j k rh |  j | ƒ |  j | <n  | S(   N(   R›  Rœ  R@   RB  R  Rž  RŸ  (   R
   R³   RF   R   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR@   l  s    c         C   s{   | |  j  k r' t j j |  | ƒ } n t j j |  | | ƒ } t | ƒ |  j k rw |  j t | ƒ =|  j t | ƒ =n  | S(   N(   t   _noneR›  Rœ  R>   RB  R  Rž  (   R
   R³   RF   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR>   u  s    c         C   s:   t  j j |  ƒ } t | d ƒ } |  j | =|  j | =| S(   Ni    (   R›  Rœ  R?   RB  Rž  R  (   R
   R(  R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR?     s
    

c         C   s.   |  j  j ƒ  |  j j ƒ  t j j |  ƒ d  S(   N(   Rž  R=   R  R›  Rœ  (   R
   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR=   †  s    c         O   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R
   R   R"   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR6   Ž  s    c         C   sl   | d  k r | j } n  y |  j | =Wn t t f k
 r? n Xy |  j | =Wn t t f k
 rg n Xd  S(   N(   R   R   Rž  R   R0   R  (   R
   t   wrR   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   _cleanup‘  s    t   _keyed_weakrefc           B   s   e  Z d  „  Z RS(   c         C   s)   t  j j |  | | ƒ t | ƒ |  _ d  S(   N(   R›  t   refR   RB  R   (   R
   R³   t   callback(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ž  s    (   R   R   R   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR¥    s   c         C   s   |  j  | |  j ƒ S(   N(   R¥  R¤  (   R
   R³   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRŸ  ¢  s    N(   R   R   R   Rh  R¡  R   R<   R;   R   R@   R>   R?   R=   R6   R¤  R›  R¦  R¥  RŸ  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR™  O  s   					
			t   LRUCachec           B   sJ   e  Z d  Z d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(	   sI   Dictionary with 'squishy' removal of least
    recently used items.

    id   g      à?c         C   s   | |  _  | |  _ d  S(   N(   t   capacityt	   threshold(   R
   R©  Rª  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   °  s    	c         C   s'   t  j |  | ƒ } t ƒ  | d <| d S(   Ni   i   (   R   R   t	   time_func(   R
   R   R(  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   ´  s    c         C   s$   g  t  j |  ƒ D] } | d ^ q S(   Ni   (   R   R%  (   R
   Ru   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR%  ¹  s    c         C   s&   | |  k r |  | S| |  | <| Sd  S(   N(    (   R
   R   R   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR@   ¼  s    
c         C   s^   t  j |  | ƒ } | d  k rF | | t ƒ  g } t  j |  | | ƒ n
 | | d <|  j ƒ  d  S(   Ni   (   R   R    R   R«  R<   t   _manage_size(   R
   R   R   R(  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR<   Ã  s    
c         C   s”   x t  |  ƒ |  j |  j |  j k r t t j |  ƒ d t j d ƒ d t ƒ} x9 | |  j D]* } y |  | d =Wq^ t	 k
 r‡ Pq^ Xq^ Wq Wd  S(   NR   i   t   reversei    (
   R±   R©  Rª  t   sortedR   R%  Rp  t
   itemgetterRÙ   R   (   R
   t   bytimeR(  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR¬  Ì  s    &	(	   R   R   R   R   R   R%  R@   R<   R¬  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR¨  «  s   					c         C   sB   t  |  t ƒ r+ t j |  t j d | ƒn t j |  d | ƒd  S(   NRa   (   RD   R›   Rg   Rh   R   t	   SAWarning(   Rj   Ra   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRh   Ú  s    c         C   s   t  j |  t j d | ƒd  S(   NRa   (   Rg   Rh   R   Rc   (   Rj   Ra   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   warn_deprecatedà  s    c         C   s   t  j |  t j d | ƒd  S(   NRa   (   Rg   Rh   R   Rb   (   Rj   Ra   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   warn_pending_deprecationã  s    c            sP   | r d |  ˆ p d f ‰  n d ‰  ˆ d k r: d ‰ n  ‡  ‡ f d †  } | S(   s¨  Decorates a function and issues a deprecation warning on use.

    :param message:
      If provided, issue message in the warning.  A sensible default
      is used if not provided.

    :param add_deprecation_to_docstring:
      Default True.  If False, the wrapped function's __doc__ is left
      as-is.  If True, the 'message' is prepended to the docs if
      provided, or sensible default if message is omitted.

    s   .. deprecated:: %s %st    s$   Call to deprecated function %(func)sc            s&   t  |  t j ˆ t d |  j ƒ ˆ  ƒ S(   NRY   (   t   _decorate_with_warningR   Rc   R   R   (   R   (   t   headert   message(    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRr   ý  s    	N(   R   (   t   versionR·  t   add_deprecation_to_docstringRr   (    (   R¶  R·  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt
   deprecatedæ  s    	c            sP   | r d |  ˆ p d f ‰  n d ‰  ˆ d k r: d ‰ n  ‡  ‡ f d †  } | S(   sE  Decorates a function and issues a pending deprecation warning on use.

    :param version:
      An approximate future version at which point the pending deprecation
      will become deprecated.  Not used in messaging.

    :param message:
      If provided, issue message in the warning.  A sensible default
      is used if not provided.

    :param add_deprecation_to_docstring:
      Default True.  If False, the wrapped function's __doc__ is left
      as-is.  If True, the 'message' is prepended to the docs if
      provided, or sensible default if message is omitted.
    s   .. deprecated:: %s (pending) %sR´  s$   Call to deprecated function %(func)sc            s&   t  |  t j ˆ t d |  j ƒ ˆ  ƒ S(   NRY   (   Rµ  R   Rb   R   R   (   R   (   R¶  R·  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRr     s    	N(   R   (   R¸  R·  R¹  Rr   (    (   R¶  R·  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   pending_deprecation  s    	c         C   s   d „  } t  j d | |  ƒ S(   Nc         S   s5   |  j  d d ƒ \ } } | d k r1 | d 7} n  | S(   Ni   i   RY   R¾   s   ()(   s   funcs   meth(   t   group(   R^   Râ   R½   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   repl%  s    s   \:(\w+)\:`~?\.?(.+?)`(   t   ret   sub(   RÝ   R½  (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   _sanitize_rest$  s    	c      
      s1  t  ˆ ƒ ‰ t ‡  ‡ f d †  ƒ } |  j d k	 r< |  j p? d } | d k	 r| t d |  j ƒ ;} | r | j ƒ  j d ƒ p‚ g  } d } xE | d D]9 } | j ƒ  }	 |	 r– | d t	 | ƒ t	 |	 ƒ !} Pq– q– Wt
 t	 | ƒ d ƒ }
 | j |
 d | | j ƒ  ƒ d j | ƒ } n  | |  ƒ } | | _ | S(   s=   Wrap a function with a warnings.warn and augmented docstring.c            s&   t  j ˆ  ˆ ƒ d d ƒ|  | | Ž  S(   NRa   i   (   Rg   Rh   (   R   R&   R¶   (   t   wtypeR·  (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   warned2  s    R´  RY   s   
i   i    N(   RÀ  Rq   R   R   R   R   t
   expandtabsR–  t   lstripR±   t   minR+  t   rstripRò   (   RY   RÁ  R·  t   docstring_headerRÂ  Rƒ  t   docst   indentt   lineRÝ   t   pointR   (    (   RÁ  R·  ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRµ  -  s$    !	t   classpropertyc           B   s    e  Z d  Z d „  Z d „  Z RS(   sB  A decorator that behaves like @property except that operates
    on classes rather than instances.

    The decorator is currently special when using the declarative
    module, but note that the 
    :class:`~.sqlalchemy.ext.declarative.declared_attr`
    decorator should be used for this purpose with declarative.

    c         O   s,   t  t |  ƒ j | | | Ž | j |  _ d  S(   N(   t   superRÌ  R   R   (   R
   R‚  R¿   R"   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR   T  s    c         C   s   |  j  | ƒ S(   N(   R‚  (   t   descR
   R4   (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyR„  X  s    (   R   R   R   R   R„  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyRÌ  I  s   		(   i   i    (   i   i   (   i   i   (   s   __doc__s
   __module__s   __name__(   s   __dict__(   i   i   („   Re   Rx   Rp  Rø   Rg   R›  R¾  RÃ   R“  R    t
   sqlalchemyR   Re  R•  t   dummy_threadingRO   R‡   t   version_infot   py3kt   platformR  t   jythont   win32RH   Rç   t   setst   SetR   t   DeprecationWarningR   t   filtersR+  t	   ExceptionR&  t	   frozensett	   EMPTY_SETR$   t   NoneTypet   picklet   cPickleR   R   R   R   R   t	   functoolsR   t   collectionsR   R/   RA   RC   R   RG   RI   RK   RL   RU   t   hashlibt   md5R\   R5   R_   Rs   R‚   Rq   R—   R™   Rœ   Rª   R«   RÙ   R†   Rµ   R·   R»   R³   R¼   RÇ   RÊ   RÜ   Rß   Rá   Rä   Rê   Rð   Rô   Rõ   R÷   Rú   R  R#   R  R  R  R)  R?  RT  RQ  RJ   t   column_dictt   ordered_column_sett   populate_column_dictRY  RZ  R_  Rd  Rg  R   Rh  R|  R€  R  R…  R‡  Rˆ  R  Rœ  R™  t   timet   clockR«  R¨  Rh   R²  R³  Rº  R»  RÀ  Rµ  R:   RÌ  (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/.local/lib/python2.7/site-packages/SQLAlchemy-0.6.8-py2.6.egg/sqlalchemy/util.pyt   <module>   s,  !								# 
				!							3			,								'DYdÊ	7		Q		/V	/ 		