
\c           @   s  d  Z  d d l Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 m
 Z
 d d l m Z m Z d d l m Z d d	 l m Z m Z m Z d d
 l m Z m Z d d l m Z d d l m Z d d l m Z m Z m Z d d l m  Z  d d l! m" Z" e# ryd d l$ m% Z% m& Z& m' Z' m( Z( m) Z) m* Z* m+ Z+ d d l, m- Z- d d l. m/ Z/ d d l0 m1 Z1 n  e j2 e3  Z4 e j5 d e j6  Z7 i e d  d 6e d  d 6e d  d 6e d  d 6e d  d 6e d  d 6e d  d 6Z8 e e8 d e  e
 _8 d   Z9 d e: f d      YZ; d! e; e f d"     YZ< d# e; e f d$     YZ= d% e; e f d&     YZ> d' e f d(     YZ? d) e? f d*     YZ@ d+ e? f d,     YZA d- e? f d.     YZB d/ e: f d0     YZC d1 eC e@ f d2     YZD d3 eC eB f d4     YZE d5 e  f d6     YZF d7 e  f d8     YZG d9 e f d:     YZH d; e f d<     YZI d= e f d>     YZJ d?   ZK d S(@   s   
    sphinx.domains.python
    ~~~~~~~~~~~~~~~~~~~~~

    The Python domain.

    :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
iN(   t   nodes(   t
   directives(   t	   iteritems(   t   addnodest   locale(   t   DeprecatedDictt   RemovedInSphinx30Warning(   t   ObjectDescription(   t   Domaint   ObjTypet   Index(   t   _t   __(   t   XRefRole(   t   logging(   t   Fieldt   GroupedFieldt
   TypedField(   t   SphinxDirective(   t   make_refnode(   t   Anyt   Dictt   Iterablet   Iteratort   Listt   Tuplet   Union(   t   Sphinx(   t   Builder(   t   BuildEnvironments  ^ ([\w.]*\.)?            # class name(s)
          (\w+)  \s*             # thing name
          (?: \(\s*(.*)\s*\)     # optional: arguments
           (?:\s* -> \s* (.*))?  #           return annotation
          )? $                   # and nothing more
          t   modulet   keywordt   operatort   objectt	   exceptiont	   statements   built-in functiont   builtinsd   sphinx.locale.pairindextypes is deprecated. Please use sphinx.domains.python.pairindextypes instead.c         C   s#  t  j   } | g } yx| j d  D]} | j   } d } } xJ | j d  r | j t  j    | d c | d 7<| d j   } qG Wx- | j d  r | j   | d j   } q Wx= | j d  r | j d  r | d 7} | d  j   } q Wx- | j d  r0| d 7} | d  j   } qW| rV| d c t  j	 | |  7<n  x; | r| j t  j    | d c | d 7<| d 8} qYWx | r| j   | d 8} qWq( Wt
 |  d k rt  n  Wn= t k
 r|  t  j   7}  |  d c t  j	 | |  7<n X|  | 7}  d	 S(
   s   "Parse" a list of arguments separated by commas.

    Arguments can have "optional" annotations given by enclosing them in
    brackets.  Currently, this will split at any comma, even if it's inside a
    string literal (e.g. default argument value).
    t   ,i    t   [iii   t   ]s   []N(   R   t   desc_parameterlistt   splitt   stript
   startswitht   appendt   desc_optionalt   popt   endswitht   desc_parametert   lent
   IndexError(   t   signodet   arglistt	   paramlistt   stackt   argumentt	   ends_opent
   ends_close(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   _pseudo_parse_arglistC   sD    	

"

		
 t   PyXrefMixinc           B   s2   e  Z e j d d d   Z e j d d d  Z RS(   c         C   s   t  t |   j | | | | | |  } t | d <| j d  r | d | d } | d <| d k rr | d }	 n" | d k r | j d  d }	 n  x@ | j t j  D]) }
 t j |	  |
 j	 |
 j	 j
 |
  <Pq Wn  | S(	   Nt   refspecifict   .t   ~i    i   t	   reftargeti(   R=   R>   (   t   superR;   t	   make_xreft   TrueR+   R)   t   traverseR    t   Textt   parentt   index(   t   selft   rolenamet   domaint   targett	   innernodet   contnodet   envt   resultt   prefixt   textt   node(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRA   v   s    	
"c      	   C   s   d } t  j |  } t  j | |  }	 t | o? | j   | k  }
 g  } x t d  |	  D]q } |
 ry t j |  } n  | j	 |  r | j
 | p | | |   q[ | j
 |  j | | | | | |   q[ W| S(   Ns(   (\s*[\[\]\(\),](?:\s*or\s)?\s*|\s+or\s+)(   t   ret   compileR)   t   boolt   astextt   filtert   NoneR    RD   t   matchR,   RA   (   RG   RH   RI   RJ   RK   RL   RM   t   delimst	   delims_ret   sub_targetst   split_contnodet   resultst
   sub_target(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt
   make_xrefs   s    	N(   t   __name__t
   __module__R    t   emphasisRW   RA   R_   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR;   u   s   t   PyFieldc           B   s   e  Z e j d d d   Z RS(   c         C   sF   | d k r! | d k r! d } n  t  t |   j | | | | | |  S(   Nt   classRW   t   obj(   R@   Rc   RA   (   RG   RH   RI   RJ   RK   RL   RM   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRA      s    	N(   R`   Ra   R    Rb   RW   RA   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRc      s   t   PyGroupedFieldc           B   s   e  Z RS(    (   R`   Ra   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRf      s   t   PyTypedFieldc           B   s   e  Z e j d d d   Z RS(   c         C   sF   | d k r! | d k r! d } n  t  t |   j | | | | | |  S(   NRd   RW   Re   (   R@   Rg   RA   (   RG   RH   RI   RJ   RK   RL   RM   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRA      s    	N(   R`   Ra   R    Rb   RW   RA   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRg      s   t   PyObjectc           B   sL  e  Z d  Z i e j d 6e j d 6e j d 6Z e d d e d  d d3 d d d d4 d e	 e d d e d  d d d d5 d d d d6 d e	 e
 d d e d  d d d d7 d e	 e d# d e d$  d% e d d8 e d( d e d)  d% e d d9 d+ d g Z e Z d,   Z d-   Z d.   Z d/   Z d0   Z d1   Z d2   Z RS(:   s   
    Description of a general Python object.

    :cvar allow_nesting: Class is an object that allows for nested namespaces
    :vartype allow_nesting: bool
    t   noindexR   t
   annotationt	   parametert   labelt
   Parameterst   namest   paramt   argR7   R   t   kwargt   kwparamt   typerolenameRd   t	   typenamest	   paramtypet   typet   can_collapset   variablet	   VariablesRH   Re   t   vart   ivart   cvart   vartypet
   exceptionst   Raisest   exct   raisest   raiseR"   t   exceptt   returnvaluet   Returnst   has_argt   returnst   returnt
   returntypes   Return typet   rtypet   bodyrolenamec         C   s   d S(   sT   May return a prefix to put before the object name in the
        signature.
        t    (    (   RG   t   sig(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   get_signature_prefix   s    c         C   s   t  S(   sq   May return true if an empty argument list is to be generated even if
        the document contains none.
        (   t   False(   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   needs_arglist   s    c         C   s  t  j |  } | d k r$ t  n  | j   \ } } } } |  j j d |  j j j d   } |  j j j d  }	 |	 r t	 }
 | r | j
 |	  r | | } | t |	  j d  } q| r |	 d | | } q|	 d | } n4 t }
 | r| j d  }	 | | } n d }	 | } | | d <|	 | d <| | d <|  j |  } | rh| t j | |  7} n  | r| t j | |  7} nq |
 r|  j j j r|  j j d |  j j j d   } | r| d k r| d } | t j | |  7} qn  |  j j d	  } | t j | |  7} | s|  j   rE| t j   7} n  | rd| t j | |  7} n  | r| t j d
 | d
 |  7} n  | | f St | |  | r| t j | |  7} n  | r| t j d
 | d
 |  7} n  | | f S(   sJ  Transform a Python signature into RST nodes.

        Return (fully qualified name of the thing, classname if any).

        If inside a class, the current class name is handled intelligently:
        * it is stripped from the displayed name if present
        * it is added to the full name (return value) if not present
        R   s	   py:modules   py:classR=   R   Rd   t   fullnameR~   Rj   t    N(   t	   py_sig_reRX   RW   t
   ValueErrort   groupst   optionst   getRM   t   ref_contextR   R+   R1   t   lstripRB   t   rstripR   R   t   desc_annotationt   desc_addnamet   configt   add_module_namest	   desc_nameR   R(   t   desc_returnsR:   (   RG   R   R3   t   mt   name_prefixt   nameR4   t   retannt   modnamet	   classnamet
   add_moduleR   t
   sig_prefixt   nodetextt   anno(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   handle_signature   sf    
		



	
!
!c         C   s   t  d   d S(   s2   Return the text for the index entry of the object.s!   must be implemented in subclassesN(   t   NotImplementedError(   RG   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   get_index_textF  s    c         C   s[  |  j  j d |  j j j d   } | r4 | d p7 d | d } | |  j j j k r| d j |  | d j |  |  j | d <|  j j j	 |  |  j j
 d	 d
 } | | k r |  j j j d | d |  j j | | d  d d |  j n  |  j j |  j f | | <n  |  j | |  } | rW|  j d j d | | d d  f  n  d  S(   NR   s	   py:moduleR=   R   i    Rn   t   idst   firstt   pyt   objectss$   duplicate object description of %s, s   other instance in s   , use :noindex: for one of themt   linet   entriest   single(   R   R   RM   R   t   statet   documentR   R,   Rn   t   note_explicit_targett
   domaindatat   state_machinet   reportert   warningt   doc2patht   linenot   docnamet   objtypeR   t	   indexnodeRW   (   RG   t   name_clsR   R3   R   R   R   t	   indextext(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   add_target_and_indexK  s&    	#c         C   s   d } |  j rO |  j d \ } } |  j r4 | } qO | rO | j d  } qO n  | r | |  j j d <|  j r |  j j j d g   } | j |  q n  d |  j k r |  j j j d g   } | j |  j j j	 d   |  j d |  j j d <n  d S(	   s  Handle object nesting before content

        :py:class:`PyObject` represents Python language constructs. For
        constructs that are nestable, such as a Python classes, this method will
        build up a stack of the nesting heirarchy so that it can be later
        de-nested correctly, in :py:meth:`after_content`.

        For constructs that aren't nestable, the stack is bypassed, and instead
        only the most recent object is tracked. This object prefix name will be
        removed with :py:meth:`after_content`.
        iR=   s   py:classs
   py:classesR   s
   py:moduless	   py:moduleN(
   RW   Rn   t   allow_nestingR*   RM   R   t
   setdefaultR,   R   R   (   RG   RO   R   R   t   classest   modules(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   before_contente  s     				c         C   s   |  j  j j d g   } |  j rF y | j   WqF t k
 rB qF Xn  t |  d k rb | d n d |  j  j d <d |  j k r |  j  j j d g   } | r | j   |  j  j d <q |  j  j j d  n  d S(	   s^  Handle object de-nesting after content

        If this class is a nestable object, removing the last nested class prefix
        ends further nesting in the object.

        If this class is not a nestable object, the list of classes should not
        be altered as we didn't affect the nesting levels in
        :py:meth:`before_content`.
        s
   py:classesi    is   py:classR   s
   py:moduless	   py:moduleN(	   RM   R   R   R   R.   R2   R1   RW   R   (   RG   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   after_content  s    	(   Ro   Rk   Rp   R7   R   Rq   Rr   (   Ru   Rv   (   Rz   R{   R|   (   R}   (   R   R   R"   R   (   R   R   (   R   (   R`   Ra   t   __doc__R   t   flagt	   unchangedt   option_specRg   R   RB   Rf   R   R   Rc   t   doc_field_typesR   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyRh      s:   

 			P			"t   PyModulelevelc           B   s    e  Z d  Z d   Z d   Z RS(   sE   
    Description of an object on module level (functions, data).
    c         C   s   |  j  d k S(   Nt   function(   R   (   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    c         C   s   |  j  d k r? | s' t d  | d St d  | d | f S|  j  d k r~ | sf t d  | d St d  | d | f Sd Sd  S(	   NR   s   %s() (built-in function)i    s   %s() (in module %s)t   datas   %s (built-in variable)s   %s (in module %s)R   (   R   R   (   RG   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    (   R`   Ra   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s   	t   PyClasslikec           B   s&   e  Z d  Z e Z d   Z d   Z RS(   sO   
    Description of a class-like object (classes, interfaces, exceptions).
    c         C   s   |  j  d S(   NR   (   R   (   RG   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    c         C   s^   |  j  d k r? | s' t d  | d St d  | d | f S|  j  d k rV | d Sd Sd  S(   NRd   s   %s (built-in class)i    s   %s (class in %s)R"   R   (   R   R   (   RG   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    (   R`   Ra   R   RB   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s   	t   PyClassmemberc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s>   
    Description of a class member (methods, attributes).
    c         C   s   |  j  j d  S(   Nt   method(   R   R/   (   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    c         C   s*   |  j  d k r d S|  j  d k r& d Sd S(   Nt   staticmethods   static t   classmethods   classmethod R   (   R   (   RG   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s
    c   	      C   s  | \ } } |  j  j j } |  j d k r y | j d d  \ } } Wn3 t k
 r{ | rp t d  | | f Sd | Sn X| r | r t d  | | | f St d  | | f Sn|  j d k rQy | j d d  \ } } Wn3 t k
 r| rt d  | | f Sd | Sn X| r:| r:t d	  | | | f St d
  | | f Sn0|  j d k ry | j d d  \ } } Wn3 t k
 r| rt d  | | f Sd | Sn X| rt d  | | | f St d  | | f Sn |  j d k r}y | j d d  \ } } Wn/ t k
 rB| r;t d  | | f S| Sn X| rf| rft d  | | | f St d  | | f Sn d Sd  S(   NR   R=   i   s   %s() (in module %s)s   %s()s   %s() (%s.%s method)s   %s() (%s method)R   s   %s() (%s.%s static method)s   %s() (%s static method)R   s   %s() (%s.%s class method)s   %s() (%s class method)t	   attributes   %s (in module %s)s   %s (%s.%s attribute)s   %s (%s attribute)R   (   RM   R   R   R   t   rsplitR   R   (	   RG   R   R   R   t   clst   add_modulest   clsnamet   methnamet   attrname(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     sZ    (   R`   Ra   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s   		t   PyDecoratorMixinc           B   s    e  Z d  Z d   Z d   Z RS(   s)   
    Mixin for decorator directives.
    c         C   s;   t  t |   j | |  } | j d t j d d   | S(   Ni    t   @(   R@   R   R   t   insertR   R   (   RG   R   R3   t   ret(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    c         C   s   t  S(   N(   R   (   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   %  s    (   R`   Ra   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s   	t   PyDecoratorFunctionc           B   s   e  Z d  Z d   Z RS(   sE   
    Directive to mark functions meant to be used as decorators.
    c         C   s   d |  _  t j |   S(   Ns   py:function(   R   R   t   run(   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   .  s    	(   R`   Ra   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   *  s   t   PyDecoratorMethodc           B   s   e  Z d  Z d   Z RS(   sC   
    Directive to mark methods meant to be used as decorators.
    c         C   s   d |  _  t j |   S(   Ns	   py:method(   R   R   R   (   RG   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   9  s    	(   R`   Ra   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   5  s   t   PyModulec           B   s]   e  Z d  Z e Z d Z d Z e Z i d   d 6d   d 6e j	 d 6e j	 d 6Z
 d	   Z RS(
   s8   
    Directive to mark description of a new module.
    i   i    c         C   s   |  S(   N(    (   t   x(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   <lambda>I  s    t   platformc         C   s   |  S(   N(    (   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   J  s    t   synopsisRi   t
   deprecatedc         C   sD  |  j  d j   } d |  j k } | |  j j d <g  } | s@|  j j |  j j d d  |  j j d d  d |  j k f |  j j d d	 | <|  j j d
 f |  j j d d | <t j	 d d d d | g d t
 } |  j j j |  | j |  t d  | } t j d d | d | d d  f g  } | j |  n  | S(   Ni    Ri   s	   py:moduleR   R   R   R   R   R   R   R   R   s   module-t   ismods   %s (module)R   R   (   t	   argumentsR*   R   RM   R   R   R   R   R    RJ   RB   R   R   R   R,   R   R   RF   RW   (   RG   R   Ri   R   t
   targetnodeR   t   inode(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   O  s&    	$$	(   R`   Ra   R   R   t   has_contentt   required_argumentst   optional_argumentst   final_argument_whitespaceR   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   ?  s   


t   PyCurrentModulec           B   s5   e  Z d  Z e Z d Z d Z e Z i  Z d   Z	 RS(   s   
    This directive is just to tell Sphinx that we're documenting
    stuff in module foo, but links to module foo won't lead here.
    i   i    c         C   sL   |  j  d j   } | d k r8 |  j j j d d   n | |  j j d <g  S(   Ni    RW   s	   py:module(   R   R*   RM   R   R.   RW   (   RG   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   v  s
    (
   R`   Ra   R   R   R   R   R   R   R   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR   j  s   t
   PyXRefRolec           B   s   e  Z d    Z RS(   c         C   s   | j  j d  | d <| j  j d  | d <| s | j d  } | j d  } | d d !d k r | d } | j d  } | d k r | | d } q q n  | d d !d k r | d } t | d <n  | | f S(	   Ns	   py:modules   py:classR=   R>   i    i   iR<   (   R   R   R   t   rfindRB   (   RG   RM   t   refnodet   has_explicit_titlet   titleRJ   t   dot(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   process_link  s    

(   R`   Ra   R   (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s   t   PythonModuleIndexc           B   s8   e  Z d  Z d Z e d  Z e d  Z d d  Z RS(   s<   
    Index subclass to provide the Python module index.
    t   modindexs   Python Module IndexR   c      	   C   s)  i  } d  } |  j j j d } t | d t d t } t t |  j j d  d d   } d } d } x| D]\ } \ } }	 }
 } | r | | k r qo n  x= | D]/ } | j	 |  r | t |  } | } Pq q Wd } | s | d } } n  | j
 | d j   g   } | j d  d } | | k r| | k rV| rd	 | d
 d	 <qn8 | j	 |  s| j | | d	 d d d d d g  n  d } n | d	 7} d } | rt d  pd } | j | | | | d | | |
 | |	 g  | } qo Wt |  | | k  } t t |   } | | f S(   Nt   modindex_common_prefixt   keyt   reverseR   c         S   s   |  d j    S(   Ni    (   t   lower(   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s    R   i    R=   i   ii   t
   Deprecateds   module-(   RW   RI   RM   R   t   sortedR1   RB   R   R   R+   R   R   R)   R,   R   (   RG   t   docnamest   contentt   ignoresR   t   prev_modnamet   num_toplevelsR   R   R   t	   platformsR   t   ignoret   strippedR   t   packaget   subtypet	   qualifiert   collapset   sorted_content(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   generate  sL    )	

N(	   R`   Ra   R   R   R   t	   localnamet	   shortnameRW   R  (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR     s
   t   PythonDomainc           B   s5  e  Z d  Z d Z d Z i	 e e d  d d  d 6e e d  d d  d 6e e d  d d d  d 6e e d	  d d d  d	 6e e d
  d d  d
 6e e d  d d  d 6e e d  d d  d 6e e d  d d  d 6e e d  d d  d 6Z i e d 6e d 6e	 d 6e	 d	 6e
 d
 6e
 d 6e
 d 6e
 d 6e d 6e d 6e d 6e d 6Z i	 e   d 6e   d 6e d e  d 6e   d 6e   d 6e   d 6e d e  d 6e   d 6e   d 6Z i i  d 6i  d 6Z e g Z d   Z d   Z d d  Z d   Z d    Z d!   Z d"   Z d#   Z RS($   s   Python language domain.R   t   PythonR   t   funcRe   R   Rd   R   R"   R   t   meths   class methodR   s   static methodR   R   t   attrR   t   modt   currentmodulet	   decoratort   decoratormethodt
   fix_parenst   constR   R   c         C   s   xJ t  |  j d j    D]/ \ } \ } } | | k r |  j d | =q q WxP t  |  j d j    D]5 \ } \ } } } } | | k rg |  j d | =qg qg Wd  S(   NR   R   (   t   listR   t   items(   RG   R   R   t   fnt   _lR   t   _x(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt	   clear_doc  s    ,2c         C   s   xJ | d j    D]8 \ } \ } } | | k r | | f |  j d | <q q WxB | d j    D]0 \ } } | d | k r^ | |  j d | <q^ q^ Wd  S(   NR   R   i    (   R  R   (   RG   R  t	   otherdataR   R   R   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   merge_domaindata  s    #i    c         C   s  | d d k r | d  } n  | s' g  S|  j  d } g  } d }	 | d k r| d k rj t |  j  }
 n |  j |  }
 |
 d k	 r| r | r | d | d | } | | k r | | d |
 k r | }	 q n  |	 s| r | d | | k r | | d | d |
 k r | d | }	 q| | k rI| | d |
 k rI| }	 qd | } g  | D]9 } | j |  rZ| | d |
 k rZ| | | f ^ qZ} qqn&| | k r| }	 n| d k rg  S| r| d | | k r| d | }	 n | r| d | | k r| d | }	 n | r^| r^| d | d | | k r^| d | d | }	 nj | d k rd | k rd | | k rd | }	 n5 | d k rd | k rd | | k rd | }	 n  |	 d k	 r| j |	 | |	 f  n  | S(   s   Find a Python object for "name", perhaps using the given module
        and/or classname.  Returns a list of (name, object entry) tuples.
        is   ()R   i   R=   R  R   s   exceptions.R  R  s   object.N(   R  R  (   R   RW   R  t   object_typest   objtypes_for_roleR/   R,   (   RG   RM   R   R   R   Rv   t
   searchmodeR   t   matchest   newnamet   objtypesR   t
   searchnamet   oname(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   find_obj#  s\      	
3	c      
   C   s  | j  d  } | j  d  }	 | j d  r3 d p6 d }
 |  j | | |	 | | |
  } | sa d  St |  d k r t j t d  | d j d   | D  d	 d
 d d d | n  | d \ } } | d d k r |  j	 | | | |  St
 | | | d | | |  Sd  S(   Ns	   py:modules   py:classR<   i   i    s5   more than one target found for cross-reference %r: %ss   , c         s   s   |  ] } | d  Vq d S(   i    N(    (   t   .0RX   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pys	   <genexpr>o  s    Rv   t   refR  t   pythont   locationR   (   R   t   hasattrR.  RW   R1   t   loggerR   R   t   joint   _make_module_refnodeR   (   RG   RM   t   fromdocnamet   builderRv   RJ   RQ   RL   R   R   R(  R)  R   Re   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   resolve_xrefc  s"    c      
   C   s   | j  d  } | j  d  } g  }	 |  j | | | | d  d  }
 x |
 D] \ } } | d d k r |	 j d |  j | | | |  f  qI |	 j d |  j | d  t | | | d | | |  f  qI W|	 S(   Ns	   py:modules   py:classi   R   s   py:mods   py:i    (   R   R.  RW   R,   R6  t   role_for_objtypeR   (   RG   RM   R7  R8  RJ   RQ   RL   R   R   R]   R)  R   Re   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   resolve_any_xrefz  s    	c   
      C   s   |  j  d | \ } } } } | }	 | r: |	 d | 7}	 n  | rS |	 t d  7}	 n  | rn |	 d | d 7}	 n  t | | | d | | |	  S(   NR   s   : s    (deprecated)s    (t   )s   module-(   R   R   R   (
   RG   R8  R7  R   RL   R   R   R   R   R   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR6    s    c         c   s   x@ t  |  j d  D]+ \ } } | | d | d d | d f Vq WxM t  |  j d  D]8 \ } \ } } | d k rW | | | | | d f VqW qW Wd  S(   NR   R   i    s   module-R   i   (   R   R   (   RG   R   t   infot   refnameR   Rv   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   get_objects  s
     #&c         C   s`   | j  d  } | j  d  } | j  d  } | d  k r= d  Sd j t d  | | | g   Sd  S(   Ns	   py:modules   py:classR?   R=   (   R   RW   R5  RV   (   RG   RQ   R   R   RJ   (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   get_full_qualified_name  s    (   R`   Ra   R   R   Rl   R	   R   R&  R   R   R   R   R   R   R   R   R   RB   t   rolest   initial_dataR   t   indicesR#  R%  R.  R9  R;  R6  R?  R@  (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyR    s`   







				
@				c         C   s-   |  j  t  i d d 6d d 6t d 6t d 6S(   NR$   t   versioni   t   env_versiont   parallel_read_safet   parallel_write_safe(   t
   add_domainR  RB   (   t   app(    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   setup  s    (L   R   RR   t   docutilsR    t   docutils.parsers.rstR   t   sixR   t   sphinxR   R   t   sphinx.deprecationR   R   t   sphinx.directivesR   t   sphinx.domainsR   R	   R
   t   sphinx.localeR   R   t   sphinx.rolesR   t   sphinx.utilR   t   sphinx.util.docfieldsR   R   R   t   sphinx.util.docutilsR   t   sphinx.util.nodesR   R   t   typingR   R   R   R   R   R   R   t   sphinx.applicationR   t   sphinx.buildersR   t   sphinx.environmentR   t	   getLoggerR`   R4  RS   t   VERBOSER   t   pairindextypesR:   R!   R;   Rc   Rf   Rg   Rh   R   R   R   R   R   R   R   R   R   R   R  RJ  (    (    (    s4   lib/python2.7/site-packages/sphinx/domains/python.pyt   <module>
   sh   4	25K
+H