³ņ
®d|Mc        1   @   sĖ  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z e d  Z	 d  d k
 l Z y d  d k Z Wn e j
 o d  d k Z n Xe e d e  p e i dw j Z e i i d  Z e i i d  Z e o
 e Z n© e i dx j  o d  d k Z e e i f Z nz d d e d d f Z y e i i d e  Wn e  j
 o d  d k Z n Xd  d k Z e i i! e  e e i f Z e"   Z# e$ d  Z% e o d  d k& Z& n3 y d  d k' Z& Wn e j
 o d  d k& Z& n Xd   Z( e e d e(  Z( e i dy j o d e) f d     YZ* n d e) f d     YZ* e o& d   Z+ d   Z, d  d k- l. Z. n e i+ Z+ e i, Z, e i. Z. y d  d k/ l0 Z0 Wn) e j
 o d e) f d     YZ0 n Xd e) f d     YZ1 d e) f d     YZ2 zE y e2   d e) Z3 Wn) e4 j
 o d e) f d     YZ3 n XWd [2 Xd d  Z5 d    Z6 d!   Z7 y d  d" k- l8 Z8 Wn" e j
 o dz d{ d'  Z8 n Xy d  d( k- l9 Z9 Wn d)   Z9 n Xy d  d k: Z: e: i; Z< Wn( e j
 o d  d k; Z; e; i= Z< n Xd*   Z> d d+  Z? d,   Z@ d-   ZA e i d| j o 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 eG d>  ZR d d?  ZS d@   ZT dA   ZU dB aV dC   ZW dD   ZX d d dE d dF  ZY dG eZ f dH     YZ[ dI eL f dJ     YZ\ dK e) f dL     YZ] dM e f dN     YZ^ dO eL f dP     YZ_ dQ e_ f dR     YZ` dS   Za e Zb e) Zc e^ Zd e* Ze e dT  Zf dU eL f dV     YZg dW eL f dX     YZh dY eh f dZ     YZi d[ eL f d\     YZj d] ej _k d] eL f d^     YZl d d d d_  Zm d`   Zn da eL f db     YZo dc eL f dd     YZp de   Zq df eL f dg     YZr dh eL f di     YZs dj e it f dk     YZu d  d kv Zv e p e o ev iw Zx n
 ev iv Zx dl e) f dm     YZy d dn  Zz d do  Z{ d dp  Z| d eG dq  Z} d eG dr  Z~ ds   Z d dt  Z du e f dv     YZ d S(}   i’’’’Nt   types(   t   exct   py3kwarningi   i    t   javat   wini   i   t   ignorec         C   s   |  S(   N(    (   t   x(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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	   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __init__O   s    c         C   s   |  i  |  |  | <} | S(   N(   R	   (   R
   t   keyt   val(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __missing__R   s    (   t   __name__t
   __module__t   __doc__R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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	   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   Y   s    c         C   sI   y t  i |  |  SWn. t j
 o" |  i |  |  | <} | Sn Xd  S(   N(   t   dictt   __getitem__t   KeyErrorR	   (   R
   R   t   value(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   \   s
    (   R   R   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   V   s   	c         C   s   t  |  d  S(   Nt   __call__(   t   hasattr(   t   fn(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   callabled   s    c         C   s   |  | j |  | j  S(   N(    (   t   at   b(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   sN   | d  j	 o! t | d  o t d   n t i |  | |  | |  _ d  S(   NR   s   first argument must be callable(   t   NoneR   t	   TypeErrorR   R   t   default_factory(   R
   R!   R   t   kw(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   s   s
    c         C   s;   y t  i |  |  SWn  t j
 o |  i |  Sn Xd  S(   N(   R   R   R   R   (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   y   s    c         C   s8   |  i  d  j o t |   n |  i    |  | <} | S(   N(   R!   R   R   (   R
   R   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ~   s    c         C   sH   |  i  d  j o t   } n |  i  f } t |   | d  d  |  i   f S(   N(   R!   R   t   tuplet   typet	   iteritems(   R
   t   args(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   __reduce__   s    c         C   s
   |  i    S(   N(   t   __copy__(   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   copy   s    c         C   s   t  |   |  i |   S(   N(   R$   R!   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR(      s    c         C   s1   d d  k  } t |   |  i | i |  i     S(   Ni’’’’(   R)   R$   R!   t   deepcopyt   items(   R
   t   memoR)   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __deepcopy__   s    c         C   s   d |  i  t i |   f S(   Ns   defaultdict(%s, %s)(   R!   R   t   __repr__(   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR.      s    	N(   R   R   R   R   R   R   R'   R)   R(   R-   R.   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   _blocked_attribute   s    c         G   s#   t  i |   } t  i | |  | S(   N(   R   t   __new__R   (   t   clsR&   t   new(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR3      s    c         G   s   d  S(   N(    (   R
   R&   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ¢   s    c         C   s   t  t |   f f S(   N(   R/   R   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR'   „   s    c         C   s<   |  p t  |  Sn$ |  i   } | i |  t  |  Sd  S(   N(   R/   R)   t   update(   R
   t   dt   d2(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   unionØ   s
    c         C   s   d t  i |   S(   Ns   frozendict(%s)(   R   R.   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR.   °   s    (   R   R   t   propertyR2   t   __delitem__t   __setitem__t   cleart   popt   popitemt
   setdefaultR6   R3   R   R'   R9   R.   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR/      s   				t   _probec           B   s   e  Z d    Z RS(   c         C   s   d S(   Ni   (    (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ¶   s    (   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRA   µ   s   t   missingt	   py25_dictc           B   s   e  Z d    Z RS(   c         C   sg   y t  i |  |  SWnL t j
 o@ y |  i } Wn t j
 o t |   qc X| |  Sn Xd  S(   N(   R   R   R   R   R0   (   R
   R   RB   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   æ   s    (   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRC   ¾   s   c         C   s>   |  d  j o | Sn t |  t t f  p |  g Sn |  Sd  S(   N(   R   t
   isinstancet   listR#   (   R   t   default(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   to_listĶ   s
    c         C   sD   |  d  j o t   Sn t |  t  p t t |    Sn |  Sd  S(   N(   R   t   setRD   RG   (   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   to_setÕ   s
    c         C   sD   |  d  j o t   Sn t |  t  p t t |    Sn |  Sd  S(   N(   R   t
   column_setRD   RG   (   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 |  |  i t | | d   q1 W|  S(   N(    (   t   setattrt   getattrR6   (   t   wrappert   wrappedt   assignedt   updatedt   attr(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRL   é   s      &(   t   partialc            s       f d   } | S(   Nc             s*    i    } | i |     |  |   S(   N(   R)   R6   (   t   fargst	   fkeywordst   newkeywords(   R&   t   funct   keywords(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   newfuncö   s    (    (   RY   R&   RZ   R[   (    (   RZ   R&   RY   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRU   õ   s    c         C   s    t    } | i |   | i   S(   N(   t   _md5R6   t	   hexdigest(   R   t   m(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   md5_hex  s    	c            s     f d   } | S(   Nc            sX   t  i      d p
 t d      f d     f d   } t |     S(   Ni   s(   Decorated function does not accept *argsc             sr     og   d j o t  i }  n
 t  i }  d  i t i     d  d f } t i | |  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   (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   _deprecate  s    	c            sR   t  | d t  o-     |  t | d d ! | d |   Sn |  | |   Sd  S(   Ni’’’’i    (   RD   RE   (   R   R&   R"   (   Rm   (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   go!  s    &(   Re   t
   getargspect   AssertionErrort	   decorator(   R   Rn   (   Rk   (   R   Rm   Rl   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   decorate  s
    (    (   Rk   Rr   (    (   Rk   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   accepts_a_list_as_starargs  s    c         '   s   t  |   }  x | D]{   t i   f t i   f d   t d    } xB | D]* } | |  j o |  i |  | VPqP qP Wt d     q Wd  S(   Nc            s     t  |   S(    (   t   str(   t   i(   t   base(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   unique_symbols,  s      	c            s     f d   } t  |    S(   s'   A signature-matching decorator factory.c            sŹ   t  i |   } t | d  | d d !|  i f } t | d d  \ } } t d | d |  } | i t | d t  d | } t	 | h    | <|  | < } t
 |  d |   i | _ 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   (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRr   =  s    %!(   RL   (   R   Rr   (    (   R   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRq   :  s    c         C   s`   g  } xM |  i  |  i |  i f D]3 } t | d  o | i   } n | i |  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   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   decode_sliceN  s     c         C   s   |  i  |  i |  i f S(   N(   R   R   R   (   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   [  s    c         K   s5   |  i    }  | o |  i |  n |  i |   |  S(   s5   Copy the given dict and update with the given values.(   R)   R6   (   R7   t   _newR"   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   update_copy^  s
    c         c   s[   xT |  D]L } t  | t  o0 t | d  o  x" t |  D] } | Vq; 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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   g  s     ! c   	      C   sü   x9 |  i  D]* } d | i j o t | g  } Pq
 q
 Wg  St   } x£ | o | i   } | i i d t  } | p t | t i  o | i	 | i
  qH n t i |  \ } } } } | i	 |  | o | i	 | i
  qH qH W| i 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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   get_cls_kwargss  s(    

 		 c         C   s   t  i |   d S(   s9   Return the full set of legal kwargs for the given `func`.i    (   Re   Ro   (   RY   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   get_func_kwargs  s    c         C   sV  t  |   o t i |   p |  } t i |   } | d o | d d } n$ | d o d | d } n d } t i | d | d | d  } | d d j	 o | d d t | d  p d } t i | d | d | d | d d   } | o# t d | d	 | d
 | d |  Sn5 t 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(   t   =(    (   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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°   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s      #!4!c      	   C   s   y t  |  d | SWnt t j
 oh d } |  t i j o | o d p d } n | o d p d } t d d d | d | d	 |  Sn Xd
 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&   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   format_argspec_initÉ  s    
c         C   se   y t  i |   SWnM t j
 oA |  t i j o d g d d d f Sqa d 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“   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   getargspec_initŽ  s    	c         C   s1   t  |  t i  o |  i o |  i Sn |  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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   | i  |  _ | i |  _ d  S(   N(   R¹   R   R   t   name(   R
   t   meth(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ż  s    c         O   s   t  |  i |  i  | |   S(   N(   RO   R   R½   (   R
   t   argR"   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    (   R   R   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR¼   ų  s   	c            s>  t  |  t i  o t   Sn t |  g    t |  i  } xõ | oķ | i   } t  | t i  o q? n x;   f d   | i D D]  } | i |    i	 |  q W| i
 d j p t | d  o q? n xZ g  } | i   D] } |   j o | | qę qę ~ D]  } | i |    i	 |  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   s>   x7 |  ]0 } |   j o t  | t i  o	 | Vq q Wd  S(   N(   RD   R    t	   ClassType(   t   .0RØ   (   t   hier(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   t   _[1]RØ   t   s(    (   RĀ   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   class_hierarchy  s(      !9 c         c   s\   t  |   } xI | D]A } x8 |  i D]- } | | i j o | | i | 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¤   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   iterate_attributes0  s     
 c         C   sp   t  |  t t f  oP |  i   i   }  |  d j o t Sqf |  d j o t Sqf t 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   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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#   |    j o |  Sn t  |   Sd  S(   N(   RŻ   (   R1   (   t   text(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   bool_or_valueP  s    (    (   RŽ   Rß   (    (   RŽ   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   bool_or_strK  s    c         C   s}   | |  j ol t  |  |  | j	 oU |  | d j	 oD | t j o | o t |  |  |  | <qy | |  |  |  | <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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   coerce_kw_typeW  s    5c         C   sū   t  |  d  o6 |  i d j	 o t |  i t  o t SqF |  i Sn t |  t  o t p t } | |  t  o t Sn1 | |  t  o t Sn | |  t	  o t	 Sn t  |  d  o t Sn5 t  |  d  o t Sn t  |  d  o t	 Sn | 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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   duck_type_collectionc  s&    c            sö   t   d  o  i   Sn% t   d  o t  i    Sn t  d t  d d
       d
 j o t d    n t   d  o    f d   } |   SnE t   d  o$ t   f d	    i   D  Sn t 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%   i    D] }  |   |   f Vq Wd  S(   N(   Rź   (   R   (   t   dictliket   getter(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   iterator  s     RŹ   c         3   s%   x |  ] } |   |  f Vq Wd  S(   N(    (   RĮ   R   (   Rģ   (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>  s   	 N(   R   R%   t   iterR+   RO   R   R    RŹ   (   Rė   Rķ   (    (   Rģ   Rė   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   dictlike_iteritems  s    $c         C   s   t  |  |  o |  Snl t  | t  o9 t i d | d i d   | D  t |   f   n# t i d | | t |   f   d  S(   Ns8   Argument '%s' is expected to be one of type %s, got '%s's    or c         s   s   x |  ] } d  | Vq Wd S(   s   '%s'N(    (   RĮ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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½   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   assert_arg_type  s    0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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   set_creation_order­  s    		c         O   s:   y |  | |   SWn" t  d t i   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¶   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   warn_exception¹  s    s
   self.proxyc         B   sŠ  | o
 | } n | d j o
 d } n g  } e |  D]O } | i d  o9 | i d  o) e |  |  o | | j o | | q9 q9 ~ } x8| D]0}	 y< e | |	  }
 e |
 d  p w n e |
 d	 |
  }
 Wn e j
 o
 q n Xy= e i |
  } e i	 | d
  } e i	 | d
 d  } Wn e
 j
 o d } d } n Xd e   } | d j	 o h  | | <p h  } | | Uy |
 i | |	 _ Wn e j
 o 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“   R   Rl   t   fn_argst   d_argst   pyt   env(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   monkeypatch_proxied_specialsĄ  sB    
 
 2 
#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   sQ   t  |  } t i |  |  } | o( t t i | |   | _ | | _ n | S(   N(   RE   R#   R3   R   Rx   t   izipRM   t   _labels(   R4   t   valst   labelsRĻ   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR3   ļ  s    c         C   s3   g  } |  i  D] } | d  j	 o | | q q ~ S(   N(   R  R   (   R
   RĘ   t   l(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRŹ   ÷  s    N(   R   R   R   R   R3   RŹ   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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    |  i d <d  S(   Nt   _data(   t   OrderedDictRM   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    c         C   s   t  |  i  S(   N(   R±   R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __len__	  s    c         C   s   |  i  i   S(   N(   R  t
   itervalues(   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    c         C   s   t  |   t  |  S(   N(   RE   (   R
   t   other(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __add__  s    c         C   s   | |  i  | <d  S(   N(   R  (   R
   R   R³   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR<     s    c         C   s   |  i  | S(   N(   R  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    c         C   s   |  i  | =d  S(   N(   R  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR;     s    c         C   s   | |  i  | <d  S(   N(   R  (   R
   R   R³   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __setattr__  s    c         C   s   h  |  i  d d <S(   NR  (   RM   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRž     s    c         C   s   | d |  i  d <d  S(   NR  (   RM   (   R
   t   state(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR’   !  s    c         C   s5   y |  i  | SWn t j
 o t |   n Xd  S(   N(   R  R   R0   (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __getattr__$  s    c         C   s   | |  i  j S(   N(   R  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __contains__*  s    c         C   s   |  i  i |  d  S(   N(   R  R6   (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR6   -  s    c         C   s!   | |  j o |  | Sn | Sd  S(   N(    (   R
   R   RF   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR    0  s    c         C   s   |  i  i   S(   N(   R  RŹ   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRŹ   6  s    c         C   s   | |  i  j S(   N(   R  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   has_key9  s    c         C   s   |  i  i   d  S(   N(   R  R=   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   <  s    N(   R   R   R   R   R  R   R  R<   R   R;   R  Rž   R’   R  R  R6   R   R    RŹ   R   R=   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   sF   g  |  _  | d  j o | o |  i |   qB n |  i | |  d  S(   N(   t   _listR   R6   (   R
   t   _OrderedDict____sequenceR¶   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   B  s
    	c         C   s   g  |  _  t i |   d  S(   N(   R!  R   R=   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   J  s    	c         C   s
   |  i    S(   N(   R(   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR)   N  s    c         C   s
   t  |   S(   N(   R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR(   Q  s    c         O   s   |  i  i | |   d  S(   N(   R!  t   sort(   R
   Ræ   R"   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR#  T  s    c         K   s   | d  j	 od t | d  o/ xM | i   D] } |  i | | |  q* Wqq x" | D] \ } } | |  | <qS Wn | o |  i |  n d  S(   NRŹ   (   R   R   RŹ   R<   R6   (   R
   R"  R¶   R   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR6   W  s      c         C   s6   | |  j o |  i  | |  | Sn |  i |  Sd  S(   N(   R<   R   (   R
   R   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR@   b  s    c         C   s   t  |  i  S(   N(   Rī   R!  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   i  s    c         C   s&   g  } |  i  D] } | |  | q ~ S(   N(   R!  (   R
   RĘ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   valuesl  s    c         C   s   t  |  i    S(   N(   Rī   R$  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  o  s    c         C   s   t  |  i  S(   N(   RE   R!  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRŹ   r  s    c         C   s   t  |  i    S(   N(   Rī   RŹ   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRź   u  s    c         C   s/   g  } |  i    D] } | | |  | f q ~ S(   N(   RŹ   (   R
   RĘ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR+   x  s    c         C   s   t  |  i    S(   N(   Rī   R+   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR%   {  s    c         C   s^   | |  j o: y |  i  i |  WqG t j
 o | g |  _  qG Xn t i |  | |  d  S(   N(   R!  R   R0   R   R<   (   R
   R   R³   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR<   ~  s    c         C   s$   t  i |  |  |  i i |  d  S(   N(   R   R;   R!  t   remove(   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR;     s    c         G   s@   | |  j } t  i |  | |  } | o |  i i |  n | S(   N(   R   R>   R!  R%  (   R
   R   RF   t   presentR   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR>     s
    c         C   s'   t  i |   } |  i i | d  | S(   Ni    (   R   R?   R!  R%  (   R
   t   item(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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?   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  ?  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   s8   t  i |   g  |  _ | d  j	 o |  i |  n d  S(   N(   RH   R   R!  R   R6   (   R
   R7   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    	c         C   s5   | |  j o |  i  i |  n t i |  |  d  S(   N(   R!  R   RH   R|   (   R
   t   element(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR|     s    c         C   s$   t  i |  |  |  i i |  d  S(   N(   RH   R%  R!  (   R
   R)  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR%  ¤  s    c         C   s8   | |  j o |  i  i | |  n t i |  |  d  S(   N(   R!  t   insertRH   R|   (   R
   t   posR)  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR*  Ø  s    c         C   s5   | |  j o$ |  i  i |  t i |  |  n d  S(   N(   R!  R%  RH   (   R
   R)  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR£   ­  s    c         C   s   t  i |   g  |  _ d  S(   N(   RH   R=   R!  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   ²  s    c         C   s   |  i  | S(   N(   R!  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ¶  s    c         C   s   t  |  i  S(   N(   Rī   R!  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ¹  s    c         C   s   d |  i  i |  i f S(   Ns   %s(%r)(   t	   __class__R   R!  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR.   ¼  s    c         C   s(   |  i  } x | D] } | |  q W|  S(   N(   R|   (   R
   t   iterableR|   Ru   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR6   Į  s
    	 c         C   s    |  i  |   } | i |  | S(   N(   R,  R6   (   R
   R  t   result(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR9   É  s    c            s)   t       |  i   f d   |  D  S(   Nc         3   s*   x# |  ] } |   j o	 | Vq q Wd  S(   N(    (   RĮ   R   (   R  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>Ņ  s   	 (   RH   R,  (   R
   R  (    (   R  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   intersectionŠ  s    c            sL   t       i  f d     D  } | i   f d    D  | S(   Nc         3   s*   x# |  ] } |   j o	 | Vq q Wd  S(   N(    (   RĮ   R   (   R  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>Ų  s   	 c         3   s*   x# |  ] } |   j o	 | Vq q Wd  S(   N(    (   RĮ   R   (   R
   (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>Ł  s   	 (   RH   R,  R6   (   R
   R  R.  (    (   R
   R  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   symmetric_differenceÖ  s    c            s)   t       |  i   f d   |  D  S(   Nc         3   s*   x# |  ] } |   j o	 | Vq q Wd  S(   N(    (   RĮ   R   (   R  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>ą  s   	 (   RH   R,  (   R
   R  (    (   R  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   differenceŽ  s    c         C   sX   t  |  } t  i |  |  g  } |  i D] } | | j o | | q* q* ~ |  _ |  S(   N(   RH   t   intersection_updateR!  (   R
   R  RĘ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR2  ä  s    8c         C   s   t  i |  |  g  } |  i D] } | |  j o | | q q ~ |  _ |  i g  } | i D] } | |  j o | | q] q] ~ 7_ |  S(   N(   RH   t   symmetric_difference_updateR!  (   R
   R  RĘ   R   t   _[2](    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR3  ģ  s    8>c         C   sL   t  i |  |  g  } |  i D] } | |  j o | | q q ~ |  _ |  S(   N(   RH   t   difference_updateR!  (   R
   R  RĘ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR5  ō  s    8N(   R   R   R   R   R|   R%  R*  R£   R=   R   R   R.   t   __str__R6   t   __ior__R9   t   __or__R/  t   __and__R0  t   __xor__R1  t   __sub__R2  t   __iand__R3  t   __ixor__R5  t   __isub__(    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   s9   t    |  _ | o" x | D] } |  i |  q Wn d  S(   N(   R   t   _membersR|   (   R
   R-  t   o(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s
     c         C   s   | |  i  t |  <d  S(   N(   R@  t   id(   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR|     s    c         C   s   t  |  |  i j S(   N(   RB  R@  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR    s    c         C   s   |  i  t |  =d  S(   N(   R@  RB  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR%    s    c         C   s+   y |  i  |  Wn t j
 o n Xd  S(   N(   R%  R   (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR£     s    c         C   sA   y |  i  i   } | d SWn t j
 o t d   n Xd  S(   Ni   s   pop from an empty set(   R@  R?   R   (   R
   t   pair(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR>     s
    c         C   s   |  i  i   d  S(   N(   R@  R=   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   "  s    c         C   s   t  d   d  S(   Ns   cannot compare sets using cmp()(   R    (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __cmp__%  s    c         C   s,   t  | t  o |  i | i j Sn t Sd  S(   N(   RD   R?  R@  R   (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __eq__(  s    c         C   s,   t  | t  o |  i | i j Sn t Sd  S(   N(   RD   R?  R@  RŚ   (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __ne__.  s    c         C   sg   t  |   |  } t |   t |  j o t Sn x- t i | i i |  i i    D]
 } t SqU Wt S(   N(	   R$   R±   R   Rx   t   ifilterfalseR@  R  Rź   RŚ   (   R
   R-  R  R^   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   issubset4  s     c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  t   NotImplementedRH  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __le__>  s    c         C   s>   t  | t  p t Sn t |   t |  j  o |  i |  S(   N(   RD   R?  RI  R±   RH  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __lt__C  s    c         C   sg   t  |   |  } t |   t |  j  o t Sn x- t i |  i i | i i    D]
 } t SqU Wt S(   N(	   R$   R±   R   Rx   RG  R@  R  Rź   RŚ   (   R
   R-  R  R^   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   issupersetH  s     c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  RI  RL  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __ge__S  s    c         C   s>   t  | t  p t Sn t |   t |  j o |  i |  S(   N(   RD   R?  RI  R±   RL  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __gt__X  s    c         C   sA   t  |     } | i i |  i |  i    i t |    | S(   N(   R$   R@  R6   t   _working_sett   _member_id_tuplesR9   t   _iter_id(   R
   R-  R.  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR9   ]  s    	%c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  RI  R9   (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR8  d  s    c         C   s   |  i  |  i |  _ d  S(   N(   R9   R@  (   R
   R-  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR6   i  s    c         C   s)   t  | t  p t Sn |  i |  |  S(   N(   RD   R?  RI  R6   (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR7  l  s    c         C   sA   t  |     } | i i |  i |  i    i t |    | S(   N(   R$   R@  R6   RO  RP  R1  RQ  (   R
   R-  R.  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR1  r  s    	%c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  RI  R1  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR;  y  s    c         C   s   |  i  |  i |  _ d  S(   N(   R1  R@  (   R
   R-  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR5  ~  s    c         C   s)   t  | t  p t Sn |  i |  |  S(   N(   RD   R?  RI  R5  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR>    s    c         C   sA   t  |     } | i i |  i |  i    i t |    | S(   N(   R$   R@  R6   RO  RP  R/  RQ  (   R
   R-  R.  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR/    s    	%c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  RI  R/  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR9    s    c         C   s   |  i  |  i |  _ d  S(   N(   R/  R@  (   R
   R-  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR2    s    c         C   s)   t  | t  p t Sn |  i |  |  S(   N(   RD   R?  RI  R2  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR<    s    c         C   sA   t  |     } | i i |  i |  i    i t |    | S(   N(   R$   R@  R6   RO  RP  R0  RQ  (   R
   R-  R.  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR0    s    	%c         C   s   d   |  i  i   D S(   Nc         s   s%   x |  ] } t  |  | f Vq Wd  S(   N(   RB  (   RĮ   t   v(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys	   <genexpr>¤  s   	 (   R@  R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRP  £  s    c         C   s%   t  | t  p t Sn |  i |  S(   N(   RD   R?  RI  R0  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR:  ¦  s    c         C   s   |  i  |  i |  _ d  S(   N(   R0  R@  (   R
   R-  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR3  «  s    c         C   s)   t  | t  p t Sn |  i |  |  S(   N(   RD   R?  RI  R0  (   R
   R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=  ®  s    c         C   s   t  |   |  i i    S(   N(   R$   R@  R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR)   “  s    c         C   s   t  |  i  S(   N(   R±   R@  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  ¹  s    c         C   s   |  i  i   S(   N(   R@  R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ¼  s    c         C   s   t  d   d  S(   Ns   set objects are unhashable(   R    (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __hash__æ  s    c         C   s    d t  |   i |  i i   f S(   Ns   %s(%r)(   R$   R   R@  R$  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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  R1  R;  R5  R>  R/  R9  R2  R<  R0  RP  R:  R3  R=  R)   R(   R  R   RS  R.   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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__(    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRO  Ē  s   c         C   sF   t  i |   t   |  _ | o" x | D] } |  i |  q' Wn d  S(   N(   R?  R   R  R@  R|   (   R
   R-  RA  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   Ī  s     N(   R   R   R(  RO  R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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'  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRQ  Õ  s     c         C   sJ   |   } g  } |  D]/ } | | j o | i  |  o | | q q ~ S(   N(   R|   (   t   seqt   compare_witht   seenRĘ   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   sv   | |  _  t   |  _ | o t | |  |  _ nA t | d  o | i |  _ n! t | d  o | i |  _ n d  S(   NR   R|   (   t   dataR?  t   _uniqueRO   t   _data_appenderR   R   R|   (   R
   R[  t   via(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ķ  s    	c         C   s5   | |  i  j o! |  i |  |  i  i |  n d  S(   N(   R\  R]  R|   (   R
   R'  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ų  s    c         C   s   t  |  i  S(   N(   Rī   R[  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ż  s    N(   R   R   R   R   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   | |  _  | |  _ h  |  _ 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  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    		c         C   sN   |  i    } y |  i | SWn, t j
 o  |  i i | |  i    Sn Xd  S(   N(   Ra  Rb  R   R@   R`  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s
    c         C   s   |  i    |  i j S(   s9   Return True if an object is present in the current scope.(   Ra  Rb  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   has&  s    c         C   s   | |  i  |  i   <d S(   s#   Set the value forthe current scope.N(   Rb  Ra  (   R
   R1   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRH   +  s    c         C   s.   y |  i  |  i   =Wn t j
 o n Xd S(   s    Clear the current scope, if any.N(   Rb  Ra  R   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   0  s    (   R   R   R   R   R   Rc  RH   R=   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 i   |  _ d  S(   N(   R`  t	   threadingt   localRb  (   R
   R`  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   =  s    	c         C   sB   y |  i  i SWn- t j
 o! |  i   } |  i  _ | Sn Xd  S(   N(   Rb  R   R0   R`  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   A  s
    c         C   s   t  |  i d  S(   NR   (   R   Rb  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRc  H  s    c         C   s   | |  i  _ d  S(   N(   Rb  R   (   R
   R1   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRH   K  s    c         C   s'   y |  i  ` Wn t j
 o n Xd  S(   N(   Rb  R   R0   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=   N  s    (   R   R   R   R   R   Rc  RH   R=   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRd  8  s   				t   _symbolc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s$   t  | t  p t  | |  _ d S(   s   Construct a new named symbol.N(   RD   Rt   Rp   R½   (   R
   R½   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   U  s    c         C   s   t  |  i f f S(   N(   t   symbolR½   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR'   Y  s    c         C   s   d |  i  S(   Ns   <symbol '%s>(   R½   (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR.   [  s    (   R   R   R   R'   R.   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRg  T  s   		Rh  c           B   s)   e  Z d  Z h  Z e i   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   sd   |  i  i   zB |  i i |  } | d  j o t |  |  i | <} n | SWd  t i  i   Xd  S(   N(   t   _lockt   acquiret   symbolsR    R   Rg  Rh  t   release(   R4   R½   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR3   q  s    (   R   R   R   Rk  Re  t   LockRi  R3   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRh  `  s   c      	   C   s`  | o | o t  d   n t | t  o t |  |  o |  Sn t | p9 g  } t |  D]! } | i d  p | | qc qc ~  } t t |    } t i } t | t  o
 | } n* | p t   } t i } n t |  } | | i	 |  |  o |  Sn t |   t
 j	 oC | t i j o d p d }	 t  d |  |	 d i |  f   n d t f d     Y}
 | o d	 | i |
 _ n t   } x t |   D]w \ } } | | j o t  d
 |   n t |  p t  d | | f   n t |
 | t |   | i |  q¬W| | |  o |
 Sn t  d d i | |    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   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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   gtR/  R   Rń   R³   R   Rļ   R   RN   t   staticmethodR|   (   R1   R4   t   methodst   requiredRĘ   R^   t	   interfacet   implementedt   compliest	   qualifierRn  t   foundR“   t   impl(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   as_interface|  sF    ! H	
	 	 c         C   sN   y | |  _  Wn: t j
 o. t i |  i |  i | |  i |  i  }  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½   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 | i |  _ | i |  _ d  S(   N(   t   fgetR   R   (   R
   R  t   doc(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   Ž  s    	c         C   s6   | d  j o |  Sn |  i |  | i |  i <} | S(   N(   R   R  RM   R   (   R
   R1   R4   R.  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   __get__ć  s    N(   R   R   R   R   R   R  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 | i |  _ | i |  _ d  S(   N(   R  R   R   (   R
   R  R  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ņ  s    	c            sC    d  j o   Sn    f d   }   i | _   i | _ | S(   Nc             sP    i   |  |      f d   }  i | _  i | _ |  i  i <  S(   Nc             s     S(    (    (   R   R"   (   R.  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRw   ü  s    (   R  R   R   RM   (   R&   R"   R,   (   R1   R
   (   R.  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   oneshotś  s    (   R   R   R   (   R
   R1   R4   R  (    (   R
   R1   sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  ÷  s    N(   R   R   R   R   R   R  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  ź  s   c         C   s   |  i  i | d   d  S(   N(   RM   R>   R   (   Rõ   R½   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    c         C   s1   | i  } x! |  i D] } | i | d  q Wd S(   s.   Expire all memoized properties for *instance*.N(   RM   R  R>   R   (   R
   Rõ   t   stasht	   attribute(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   expire_instance  s    	
 c         C   s   |  i  i | i  t |  S(   N(   R  R   R   R  (   R
   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    (   R   R   R   R   R  R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   '  s    	c         C   sæ   |  i  on t |  i t   t   |  i  g  } y t | |  i   SWq» t j
 o# t d |  i |  i  f   q» XnD t |  i  } x- |  i i 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(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   _il_module+  s    
 c         C   sV   y t  |  i |  } Wn, t j
 o  t d |  i | f   n X| |  i | <| S(   Ns   Module %s has no attribute '%s'(   RO   R  R0   R  RM   (   R
   R   RT   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  =  s    N(   R   R   R   R   R   R  R  R  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 i 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  i i |   h  |  _ h  |  _ d  S(   N(   t   weakreft   WeakKeyDictionaryR   t   by_idt	   _weakrefs(   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   T  s    	c         C   s]   t  |  } | |  i | <| |  i j o |  i |  |  i | <n t i i |  | |  d  S(   N(   RB  R  R  t   _refR  R  R<   (   R
   R³   R   t   oid(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR<   Y  s
    c         C   s7   |  i  t |  =|  i t |  =t i i |  |  d  S(   N(   R  RB  R  R  R  R;   (   R
   R³   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR;   `  s    c         C   sp   t  i i |  | |  } t |  } | | j o | |  i | <n | |  i j o |  i |  |  i | <n | S(   N(   R  R  R@   RB  R  R  R  (   R
   R³   RF   R   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR@   e  s    c         C   s   | |  i  j o t i i |  |  } n t i i |  | |  } t |  |  i j o$ |  i t |  =|  i t |  =n | S(   N(   t   _noneR  R  R>   RB  R  R  (   R
   R³   RF   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR>   n  s    c         C   s:   t  i i |   } t | d  } |  i | =|  i | =| S(   Ni    (   R  R  R?   RB  R  R  (   R
   R'  R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR?   x  s
    

c         C   s.   |  i  i   |  i i   t i i |   d  S(   N(   R  R=   R  R  R  (   R
   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR=     s    c         O   s
   t   d  S(   N(   t   NotImplementedError(   R
   R   R"   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR6     s    c      	   C   sr   | d  j o | i } n y |  i | =Wn t t f j
 o n Xy |  i | =Wn t t f j
 o n Xd  S(   N(   R   R   R  R   R0   R  (   R
   t   wrR   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   _cleanup  s    t   _keyed_weakrefc           B   s   e  Z d    Z RS(   c         C   s)   t  i i |  | |  t |  |  _ d  S(   N(   R  t   refR   RB  R   (   R
   R³   t   callback(    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR     s    (   R   R   R   (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR„    s   c         C   s   |  i  | |  i  S(   N(   R„  R¤  (   R
   R³   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  H  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Ŗ  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ©  s    	c         C   s'   t  i |  |  } t   | d <| d S(   Ni   i   (   R   R   t	   time_func(   R
   R   R'  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   ­  s    c         C   s,   g  } t  i |   D] } | | d q ~ S(   Ni   (   R   R$  (   R
   RĘ   Ru   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR$  ²  s    c         C   s+   | |  j o |  | Sn | |  | <| Sd  S(   N(    (   R
   R   R   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR@   µ  s    
c         C   s`   t  i |  |  } | d  j o) | | t   g } t  i |  | |  n | | d <|  i   d  S(   Ni   (   R   R    R   R«  R<   t   _manage_size(   R
   R   R   R'  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR<   ¼  s    
c         C   s   x t  |   |  i |  i |  i j ol t t i |   d t i d  d t } x; | |  i D], } y |  | d =Wq_ t	 j
 o Pq_ Xq_ Wq Wd  S(   NR   i   t   reversei    (
   R±   R©  RŖ  t   sortedR   R$  Rp  t
   itemgetterRŚ   R   (   R
   t   bytimeR'  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR¬  Å  s     $	 (	   R   R   R   R   R   R$  R@   R<   R¬  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRØ  ¤  s   					c         C   sD   t  |  t  o t i |  t i d | n t i |  d | d  S(   NRa   (   RD   R   Rg   Rh   R   t	   SAWarning(   Rj   Ra   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRh   Ó  s    c         C   s   t  i |  t i d | d  S(   NRa   (   Rg   Rh   R   Rc   (   Rj   Ra   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   warn_deprecatedŁ  s    c         C   s   t  i |  t i d | d  S(   NRa   (   Rg   Rh   R   Rb   (   Rj   Ra   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   warn_pending_deprecationÜ  s    c            sU   | o d |   p d f   n d    d j o
 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 i  t d |  i     S(   NRY   (   t   _decorate_with_warningR   Rc   R   R   (   R   (   t   headert   message(    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRr   ö  s    	N(   R   (   t   versionR·  t   add_deprecation_to_docstringRr   (    (   R¶  R·  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt
   deprecatedß  s    
c            sU   | o d |   p d f   n d    d j o
 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 i  t d |  i     S(   NRY   (   Rµ  R   Rb   R   R   (   R   (   R¶  R·  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRr     s    	N(   R   (   Rø  R·  R¹  Rr   (    (   R¶  R·  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   pending_deprecationü  s    
c         C   s   d   } t  i d | |   S(   Nc         S   s7   |  i  d d  \ } } | d j o | d 7} n | S(   Ni   i   RY   R¾   s   ()(   s   funcs   meth(   t   group(   R^   Rį   R½   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   repl  s    s   \:(\w+)\:`~?\.?(.+?)`(   t   ret   sub(   RŽ   R½  (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   _sanitize_rest  s    	c            s9  t     t    f d    } |  i d j	 o
 |  i p d } | d j	 oĻ | t d |  i  ;} | o | i   i d  p g  } d } xG | d D]; } | i   }	 |	 o" | d t	 |  t	 |	  !} Pq q Wt
 t	 |  d  }
 | i |
 d | | i    d i |  } n | |   } | | _ | S(   s=   Wrap a function with a warnings.warn and augmented docstring.c            s&   t  i     d d |  | |   S(   NRa   i   (   Rg   Rh   (   R   R&   R¶   (   t   wtypeR·  (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyt   warned+  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·  sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.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 |   i | | |  | i |  _ d  S(   N(   t   superRĢ  R   R   (   R
   R  Ræ   R"   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR   M  s    c         C   s   |  i  |  S(   N(   R  (   t   descR
   R4   (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyR  Q  s    (   R   R   R   R   R  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pyRĢ  B  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?  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Ģ  (    (    (    sl   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/util.pys   <module>   s*  "
							# 
				!							3			,							'DYdŹ	7		Q		/V	/ 		