ó
Nä²Wc           @   sq   d  Z  d d l Z d d l m Z d g Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d S(
   s  
Helper for looping over sequences, particular in templates.

Often in a loop in a template it's handy to know what's next up,
previously up, if this is the first or last item in the sequence, etc.
These can be awkward to manage in a normal Python loop, but using the
looper you can get a better sense of the context.  Use like::

    >>> for loop, item in looper(['a', 'b', 'c']):
    ...     print loop.number, item
    ...     if not loop.last:
    ...         print '---'
    1 a
    ---
    2 b
    ---
    3 c

iÿÿÿÿN(   t   basestring_t   looperc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s¤   
    Helper for looping (particularly in templates)

    Use this like::

        for loop, item in looper(seq):
            if loop.first:
                ...
    c         C   s   | |  _  d  S(   N(   t   seq(   t   selfR   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   __init__&   s    c         C   s   t  |  j ƒ S(   N(   t   looper_iterR   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   __iter__)   s    c         C   s   d |  j  j |  j f S(   Ns   <%s for %r>(   t	   __class__t   __name__R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   __repr__,   s    (   R   t
   __module__t   __doc__R   R   R	   (    (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR      s   			R   c           B   s;   e  Z d  „  Z d „  Z d „  Z e j d k  r9 e Z n  RS(   c         C   s   t  | ƒ |  _ d |  _ d  S(   Ni    (   t   listR   t   pos(   R   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   3   s    c         C   s   |  S(   N(    (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   7   s    c         C   sY   |  j  t |  j ƒ k r! t ‚ n  t |  j |  j  ƒ |  j |  j  f } |  j  d 7_  | S(   Ni   (   R   t   lenR   t   StopIterationt   loop_pos(   R   t   result(    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   __next__:   s
    	%t   3(   R   R
   R   R   R   t   syst   versiont   next(    (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   1   s
   			R   c           B   s%  e  Z d  „  Z d „  Z d „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z e	 j
 d k  r„ e Z n  d „  Z e e ƒ Z d „  Z e e ƒ Z d	 „  Z e e ƒ Z d
 „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z d d „ Z d d „ Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   G   s    	c         C   s   d |  j  |  j |  j f S(   Ns   <loop pos=%r at %r>(   R   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR	   K   s    c         C   s   |  j  S(   N(   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   indexO   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   numberS   s    c         C   s   |  j  |  j S(   N(   R   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   itemW   s    c         C   s/   y |  j  |  j d SWn t k
 r* d  SXd  S(   Ni   (   R   R   t
   IndexErrort   None(   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   [   s    R   c         C   s%   |  j  d k r d  S|  j |  j  d S(   Ni    i   (   R   R   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   previouse   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   oddk   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   eveno   s    c         C   s   |  j  d k S(   Ni    (   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   firsts   s    c         C   s   |  j  t |  j ƒ d k S(   Ni   (   R   R   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   lastw   s    c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   length{   s    c         C   s&   |  j  r t S|  j |  j |  j | ƒ S(   s  
        Returns true if this item is the start of a new group,
        where groups mean that some attribute has changed.  The getter
        can be None (the item itself changes), an attribute name like
        ``'.attr'``, a function, or a dict key or list index.
        (   R   t   Truet   _compare_groupR   R   (   R   t   getter(    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   first_group   s    	c         C   s&   |  j  r t S|  j |  j |  j | ƒ S(   s  
        Returns true if this item is the end of a new group,
        where groups mean that some attribute has changed.  The getter
        can be None (the item itself changes), an attribute name like
        ``'.attr'``, a function, or a dict key or list index.
        (   R    R"   R#   R   R   (   R   R$   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt
   last_groupŠ   s    	c         C   sÓ   | d  k r | | k St | t ƒ r˜ | j d ƒ r˜ | d } | j d ƒ ry | d  } t | | ƒ ƒ  t | | ƒ ƒ  k St | | ƒ t | | ƒ k Sn7 t | d ƒ r½ | | ƒ | | ƒ k S| | | | k Sd  S(   Nt   .i   s   ()iþÿÿÿt   __call__(   R   t
   isinstanceR    t
   startswitht   endswitht   getattrt   hasattr(   R   R   t   otherR$   (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR#   •   s    


"N(   R   R
   R   R	   R   t   propertyR   R   R   R   R   R   R   R   R   R   R    R!   R   R%   R&   R#   (    (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyR   E   s6   													(	   R   R   t   Cython.Tempita.compat3R    t   __all__t   objectR   R   R   (    (    (    s9   /bar/jli/Chip-seq/script/cython/Cython/Tempita/_looper.pyt   <module>   s   	