
    Qne                    P   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 er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 d	dl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!	 	 d0d1d"Z" G d# d$e          Z# G d% d&e          Z$d2d*Z%d3d-Z&dS )4zBProgram to generate documentation for a given PyToolConfig object.    )annotationsNis_dataclass)TYPE_CHECKINGAny	Generator)DataclassInstance)
StringList)Sphinx   )PyToolConfig)ConfigField)ClassDocumenter)tabulate)_gather_config_fields)Source)UniversalConfig)      r   )
get_origintype_to_print	type[Any]return
str | Nonec                    | d S t          |           '	 | j        S # t          $ r t          |           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"      sv    t-  (	& )) 	& 	& 	&}%%%%%	&}%%i444s    88modeltype[DataclassInstance]"dict[str, type[DataclassInstance]]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              #  j  K   g d}t          |           }t          d |                                D                       }|r|                    d           g }|                                D ]\  }}t          |j                  s|s| 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>9   s%      MMeu)MMMMMMr.   zcommand line flag.
 r   r   z, )r0   headers)r   anyvaluesappendr(   r   r)   r4   r    r"   _defaultuniversal_configr   r+   r8   joinr   split)r#   r0   r1   headermodel_fieldsr8   tabler+   r,   rowkeyuniversal_keycli_docs                r!   _generate_tablerM   2   s     
 877F+@+G+GLMM|7J7J7L7LMMMMML +)***E#))++  eEK(( 	!'?4		-?-?-?-?8=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   clsrQ   rR   rS   rU   s        r!   can_document_memberz.PyToolConfigAutoDocumenter.can_document_member]   s     F###r.   sigNonec                    dS zRemove directive headers.N selfr[   s     r!   add_directive_headerz/PyToolConfigAutoDocumenter.add_directive_headerh         r.   Fmore_contentStringList | Noneno_docstringc                    |                                  }| j        }t          |          D ]}|                     ||           dS z6Create simple table to document configuration options.Nget_sourcenameobjectrM   add_linera   rd   rf   sourceconfiglines         r!   add_contentz&PyToolConfigAutoDocumenter.add_contentk   T     $$&&#F++ 	( 	(DMM$''''	( 	(r.   N
rQ   r   rR   r   rS   rT   rU   r   r   rT   r[   r   r   r\   Frd   re   rf   rT   r   r\   r   
__module____qualname____doc__objtypecontent_indenttitles_allowedclassmethodrZ   rb   rq   r_   r.   r!   rO   rO   U   sy        88!GNN$ $ $ [$( ( ( ( #	( 	( 	( 	( 	( 	( 	(r.   rO   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 )PyToolConfigSourceDocumenterzAExpiremental documenter for docmenting a source for pytoolconfig.pytoolconfigsourcesr   TrQ   r   rR   r   rS   rT   rU   r   c                ,    t          |t                    S rW   )
isinstancer   rX   s        r!   rZ   z0PyToolConfigSourceDocumenter.can_document_member   s     &&)))r.   r[   r\   c                    dS r^   r_   r`   s     r!   rb   z1PyToolConfigSourceDocumenter.add_directive_header   rc   r.   Frd   re   rf   c                    |                                  }| j        }t          |          D ]}|                     ||           dS rh   ri   rm   s         r!   rq   z(PyToolConfigSourceDocumenter.add_content   rr   r.   Nrs   rt   ru   rv   rw   r_   r.   r!   r   r   w   sy        KK#GNN* * * [*( ( ( ( #	( 	( 	( 	( 	( 	( 	(r.   r   appr   r\   c                d    |                      d           |                     t                     dS )zRegister automatic documenter.zsphinx.ext.autodocN)setup_extensionadd_autodocumenterrO   )r   s    r!   setupr      s2    ,---566666r.   ro   r   c              #  ,  K   dV  t          | j                  dk    r7| j         dV  t          | j                  D ]\  }}d| d|j         dV  n!| j        d         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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<   r   z supports the z format
z## z 
z## Options
githubN)
lensourcestool	enumerater+   r4   rM   r#   r-   r(   )ro   idxrn   r+   r1   subtables         r!   _generate_documentationr      s     
 
6>Q@@@@@@$V^44 	- 	-KC,c,,V[,,,,,,,	- ~a %;;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$   r0   r   r1   r   r   r2   )r   r   r   r\   )ro   r   r   r2   )'rz   
__future__r   sysdataclassesr   typingr   r   r   	_typeshedr	   docutils.statemachiner
   sphinx.applicationr   pytoolconfigr   typesr   sphinx.ext.autodocr   r   fieldsr   r   r   rC   r   version_infotyping_extensionsr   r"   r-   rM   rO   r   r   r   r_   r.   r!   <module>r      s    H H # " " " " " 



 $ $ $ $ $ $ 0 0 0 0 0 0 0 0 0 0 #++++++000000))))))******"""""" . . . . . .       ) ) ) ) ) )       - - - - - -i,,,,,,,!!!!!!5 5 5 5     N  N  N  N  NF( ( ( ( ( ( ( (D( ( ( ( (? ( ( (D7 7 7 7     r.   