
    c!                    @   d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ dd	lm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 ej        dk     rddlmZ nddlmZ d-dZd.dZ	 	 d/d0d!Z  G d" d#e          Z! G d$ d%e          Z"d1d)Z#d2d,Z$dS )3zBProgram to generate documentation for a given PyToolConfig object.    )annotationsNis_dataclass)Any	Generator)
StringList)Sphinx)ClassDocumenter)tabulate   )_gather_config_fields)PyToolConfig)Source)ConfigField	Dataclass)UniversalConfig)      r   )
get_origintype_to_print	type[Any]return
str | Nonec                    | d S t          |           	 | j        S # t          $ r | cY S w xY wt          |                               dd          S )Nztyping. )r   __name__AttributeErrorstrreplace)r   s    :lib/python3.11/site-packages/pytoolconfig/documentation.py_type_to_strr!      sr     t-   !	! )) 	! 	! 	!    	!}%%i444s    ++modeltype[Dataclass]dict[str, type[Dataclass]]c                    i }t          |                                           D ]#\  }}t          |j                  r
|j        ||<   $|S N)r   itemsr   _type)r"   resultnamefields       r    
_subtablesr,   &   sQ    F,U3399;; ' 'e$$ 	' ;F4LM    rstr   tablefmtr   prefixGenerator[str, None, None]c              #  t  K   g d}t          |           }t          d |                                D                       }|r|                    d           g }|                                D ]\  }}t          |j                  s|dk    r| n| d| |j        r|j                            dd          nd t          |j                  |j
        g}	|j        rP|j        }
t          t                    sJ t          t                    |
j                 }|j        |	d<   |j
        |	d	<   |rG|j        }|)|	                    d
                    |                     n|	                    d            |                    |	           t!          |||                              d          E d {V  d S )N)r*   descriptiontypedefaultc              3  $   K   | ]}|j         V  d S r&   )command_line).0r+   s     r    	<genexpr>z"_generate_table.<locals>.<genexpr>5   s%      MMeu)MMMMMMr-   zcommand line flagr   .
 r   r   z, )r/   headers)r   anyvaluesappendr'   r   r(   r3   r   r!   _defaultuniversal_configr   r*   r7   joinr   split)r"   r/   r0   headermodel_fieldsr7   tabler*   r+   rowkeyuniversal_keycli_docs                r    _generate_tablerL   .   s     
 877F+@+G+GLMM|7J7J7L7LMMMMML +)***E#))++  eEK(( 	#r\A4		&/A/A4/A/A8=8IS!))$444tU[))	C % 0,#O44444 5o F Fsx P&2A&/A %, %JJtyy112222JJt$$$LL&AAAGGMMMMMMMMMMMr-   c                  J    e Zd ZdZdZdZdZedd            ZddZ		 dddZ
dS )PyToolConfigAutoDocumenterz.Sphinx autodocumenter for pytoolconfig models.pytoolconfigtabler   Tmemberr   
membernamer   isattrboolparentr   c                     t          |          S zCheck if member is dataclass.r   clsrP   rQ   rR   rT   s        r    can_document_memberz.PyToolConfigAutoDocumenter.can_document_memberX   s    
 F###r-   sigNonec                    dS zRemove directive headers.N selfrZ   s     r    add_directive_headerz/PyToolConfigAutoDocumenter.add_directive_header_         r-   Fmore_contentStringList | Noneno_docstringc                    |                                  }| j        }t          |          D ]}|                     ||           dS z6Create simple table to document configuration options.Nget_sourcenameobjectrL   add_liner`   rc   re   sourceconfiglines         r    add_contentz&PyToolConfigAutoDocumenter.add_contentb   T     $$&&#F++ 	( 	(DMM$''''	( 	(r-   N
rP   r   rQ   r   rR   rS   rT   r   r   rS   rZ   r   r   r[   Frc   rd   re   rS   r   r[   )r   
__module____qualname____doc__objtypecontent_indenttitles_allowedclassmethodrY   ra   rp   r^   r-   r    rN   rN   Q   s{        88!GNN$ $ $ [$( ( ( ( EJ( ( ( ( ( ( (r-   rN   c                  F    e Zd ZdZdZdZedd            ZddZ	 dddZ	dS )PyToolConfigSourceDocumenterpytoolconfigsourcesr   TrP   r   rQ   r   rR   rS   rT   r   c                ,    t          |t                    S rV   )
isinstancer   rW   s        r    rY   z0PyToolConfigSourceDocumenter.can_document_memberq   s    
 &&)))r-   rZ   r[   c                    dS r]   r^   r_   s     r    ra   z1PyToolConfigSourceDocumenter.add_directive_headerx   rb   r-   Frc   rd   re   c                    |                                  }| j        }t          |          D ]}|                     ||           dS rg   rh   rl   s         r    rp   z(PyToolConfigSourceDocumenter.add_content{   rq   r-   Nrr   rs   rt   ru   )
r   rv   rw   ry   rz   r{   r|   rY   ra   rp   r^   r-   r    r~   r~   l   su        #GNN* * * [*( ( ( ( EJ( ( ( ( ( ( (r-   r~   appr	   r[   c                d    |                      d           |                     t                     dS )zRegister automatic documenter.zsphinx.ext.autodocN)setup_extensionadd_autodocumenterrN   )r   s    r    setupr      s2    ,---566666r-   rn   r   c              #  2  K   dV  t          | j                  dk    r7| j         dV  t          | j                  D ]\  }}d| d|j         dV  n(t          | j                  j        }| j         d| dV  dV  | j        D ]#}|j        rd	|j         d
V  |j        V  dV  $dV  t          | j        d          E d{V  dV  t          | j                  
                                D ] \  }}t          |d|          E d{V  dV  !dS )zlGenerate Markdown documentation for a given config model.

    This currently Beta at best. Do not use.
    z# Configuration
r   z! supports the following sources:
r<   z. r;   z supports the z format
z## z 
z## Options
githubN)lensourcestool	enumerater*   nextr3   rL   r"   r,   r'   )rn   idxrm   r*   r0   subtables         r    _generate_documentationr      s     
 
6>Q <@@@@@@$V^44 	- 	-KC,c,,V[,,,,,,,	- FN##(;;D;;;;;;
JJJ.   	((((((($$$$JJJ
v|X666666666
JJJ&v|44::<<  "8Xv>>>>>>>>>



 r-   )r   r   r   r   )r"   r#   r   r$   )r.   r   )r"   r#   r/   r   r0   r   r   r1   )r   r	   r   r[   )rn   r   r   r1   )%rx   
__future__r   sysdataclassesr   typingr   r   docutils.statemachiner   sphinx.applicationr	   sphinx.ext.autodocr
   r   fieldsr   pytoolconfigr   r   r   typesr   r   rB   r   version_infotyping_extensionsr   r!   r,   rL   rN   r~   r   r   r^   r-   r    <module>r      s   H H # " " " " " 



 $ $ $ $ $ $ ! ! ! ! ! ! ! ! , , , , , , % % % % % % . . . . . .       ) ) ) ) ) ) & & & & & &       ) ) ) ) ) ) ) ) - - - - - -i ",,,,,,,!!!!!!5 5 5 5     N  N  N  N  NF( ( ( ( ( ( ( (6( ( ( ( (? ( ( (27 7 7 7     r-   