
    iX                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SK
Jr  S SKJrJrJrJr  S SKrS SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJr  S SKJr  S SK J!r!J"r"  S SK#J$r$J%r%J&r&J'r'  S SK(J)r)  \(       a  S SK*J+r+  S SK,J-r-J.r.  S SKJ/r/J0r0  \Rb                  " SS5      Re                  5       r3  " S S\Rh                  5      r5S#S jr6SSSSSSSSSSSS.                         S$S jjr7Sr8S%S jr9S&S jr:SSSSSSSSSSSSSSS.                               S'S jjr;  S(SSSSSSSSSSS .
                           S)S! jjjr<S*S+S" jjr=g),    )annotationsN)datetimetimezone)Path)IOTYPE_CHECKINGAnyCallable)debug)find_breaking_changes)JSONEncoder)ExplanationStyleParser)ExtensionErrorGitError)load_extensions)_get_latest_tag_get_repo_root)GriffeLoaderloadload_git	load_pypi)logger)Sequence)DocstringOptionsDocstringStyle)	Extension
ExtensionsGRIFFE_LOG_LEVELINFOc                  :   ^  \ rS rSrSSU 4S jjjrSS jrSrU =r$ )
_DebugInfo3   c                *   > [         TU ]  " SSU0UD6  g )Nnargs )super__init__)selfr%   kwargs	__class__s      N/home/james-whalen/.local/lib/python3.13/site-packages/griffe/_internal/cli.pyr(   _DebugInfo.__init__4   s    /u//    c                Z    [         R                  " 5         [        R                  " S5        g )Nr   )r   _print_debug_infosysexit)r)   argsr*   s      r,   __call___DebugInfo.__call__7   s    !r.   r&   )r   )r%   zint | str | Noner*   r	   returnNone)r3   r	   r*   r	   r6   r7   )__name__
__module____qualname____firstlineno__r(   r4   __static_attributes____classcell__)r+   s   @r,   r"   r"   3   s    0 0 r.   r"   c                    [        U[        5      (       a  [        USSS9 n[        XS9  S S S 5        g Uc  [        R
                  n[        XS9  g ! , (       d  f       g = f)Nwutf8)encodingfile)
isinstancestropenprintr1   stdout)dataoutput_filefds      r,   _print_datarL   <   sO    +s##+sV4$  54 **Kd% 54s   
A
ATF
extensionssearch_pathsdocstring_parserdocstring_optionsresolve_aliasesresolve_implicitresolve_externalallow_inspectionforce_inspectionstore_sourcefind_stubs_packagec          
     x   [        UUUUUU	U
S9nU  HK  nU(       d  [        R                  " S5        M"  [        R                  " SU5         UR	                  USUS9  MM     [        R                  " S5        U(       ai  [        R                  " S	5        UR                  XgS
9u  nnU(       a#  [        R                  " S[        U5      U5        U$ [        R                  " SU5        U$ ! [
         a"  n[        R                  " SX5         S nAM  S nAf[         a    [        R                  " SU5         GM&  f = f)N)rN   rO   rP   rQ   rU   rV   rW   zEmpty package name, continuingzLoading package %sT)try_relative_pathrX   zCould not find package %s: %sz%Tried but could not import package %szFinished loading packageszStarting alias resolution)implicitexternalz4%s aliases were still unresolved after %s iterationsz-All aliases were resolved after %s iterations)r   r   r   infor   ModuleNotFoundErrorerrorImportError	exceptionrR   len)packagesrN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   loaderpackager_   
unresolved
iterationss                    r,   _load_packagesrh   F   s      !)+))!F LL9:('2	OKK4L^K_  KK+, /0!'!7!7AQ!7!m
JKKNPST^P_akl M KKGTM # 	JLL8'II 	ODgNN	Os   C))
D93D$D98D9)DEBUGr    WARNINGERRORCRITICALc                     [         R                  " U 5      $ ! [         R                   a    U R                  S5      s $ f = f)N,)jsonloadsJSONDecodeErrorsplit)values    r,   _extensions_typert   |   s:     zz%    {{3 s    %A A c            	       ^^ Sn Sn  [         R                  " SXSS9nSnSmUR                  SS	9nUR                  S
SSUS9  UR                  SSSS[        R
                  " 5        3S9  UR                  S[        SS9  ScU4S jjnUR                  SSSSSS9mSdU4S jjnU" SS5      nUR                  SS	9nUR                  SS S!S"S#9  UR                  S$S%S&SS'S(9  UR                  S)S*[        R                  S+S,9  UR                  S-S.S/S0[        S1S29  UR                  S3S4S50 [        R                  S6S29  UR                  S7S8S&S9S9  UR                  S:S;S&S<S9  UR                  S=S>S?S&S@SA9  UR                  SBS?SCSDSA9  UR                  SESFS&SGS9  U" U5        U" SHSI5      n	U	R                  SJS	9n
U
R                  SKS SLSM9  U
R                  SNSOSPSQSM9  U
R                  SRSSSTSUSM9  U
R                  SVSWS&S0SXSY9  U
R                  SZSWSCS0S[SY9  U
R                  S\S]S&S^S9  [         Vs/ s H  oR                  PM     nnU
R                  S$S_S`US0SaSb9  U" U	5        U$ s  snf )ezBReturn the CLI argument parser.

Returns:
    An argparse parser.
z3%(prog)s [GLOBAL_OPTS...] COMMAND [COMMAND_OPTS...]z'Signatures for entire Python programs. Fgriffe)add_helpusagedescriptionprogzKShow this help message and exit. Commands also accept the -h/--help option.z Show this help message and exit.zGlobal optionstitle-h--helphelpactionr   z-Vz	--versionversionz	%(prog)s )r   r   z--debug-infozPrint debug information.c           
       > U R                  SS9nUR                  SSSTS9  U R                  SS9nUR                  SS	S
S[        SS9  UR                  SSSSSS9  U R                  SS9nUR                  SSSSSSS9  UR                  SS0 [        SS9  UR                  SS S!S"S#S$S9  UR                  S%S&S'SSS(S9  U R                  S)S9nUR                  S*S+S,[        [
        [        R                  S-S.9  g )/NzCommon optionsr{   r}   r~   r   r   zSearch optionsz-sz--searchrO   appendzPaths to search packages into.)destr   typer   z-yz
--sys-pathappend_sys_path
store_truezAWhether to append `sys.path` to search paths specified with `-s`.r   r   r   zLoading optionsz-Bz--find-stubs-packagesrX   FzJWhether to look for stubs-only packages and merge them with concrete ones.r   r   defaultr   z-ez--extensionszA list of extensions to use.)r   r   r   z-Xz--no-inspectionrU   store_falseTz:Disallow inspection of builtin/compiled/not found modules.z-xz--force-inspectionrV   z<Force inspection of everything, even when sources are found.zDebugging optionsz-Lz--log-levelLEVELzCSet the log level: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`.)metavarr   choicesr   r   )add_argument_groupadd_argumentr   rt   DEFAULT_LOG_LEVEL_level_choicesrE   upper)	subparsercommon_optionssearch_optionsloading_optionsdebug_optionssubcommand_helps        r,   add_common_options&get_parser.<locals>.add_common_options   sz   "55<L5M##D(6#X"55<L5M##1 	$ 	
 	##"T 	$ 	
 $66=N6O$$#%] 	% 	
 	$$!/ 	% 	
 	$$# M 	% 	
 	$$ #O 	% 	
 "44;N4O""%"V 	# 	
r.   
subcommandCommandsCOMMANDT)r   r|   r   rz   requiredc                0   > TR                   " U 4SXS.UD6$ )NF)rw   r   ry   )
add_parser)commandtextr*   
subparserss      r,   add_subparser!get_parser.<locals>.add_subparser   s!    $$Wdu4d]cddr.   dumpz.Load package-signatures and dump them as JSON.zDump optionsrc   PACKAGE+z Packages to find, load and dump.)r   r%   r   z-fz--fullr   z"Whether to dump full data in JSON.)r   r   r   z-oz--outputzZOutput file. Supports templating to output each package in its own file, with `{package}`.)r   r   z-dz
--docstylerP   NzThe docstring style to parse.)r   r   r   r   z-Dz	--docoptsrQ   z%The options for the docstring parser.z-rz--resolve-aliaseszWhether to resolve aliases.z-Iz--resolve-implicitzrWhether to resolve implicitly exported aliases as well. Aliases are explicitly exported when defined in `__all__`.z-Uz--resolve-externalrT   zAlways resolve aliases pointing to external/unknown modules (not loaded directly).Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).r   z--no-resolve-externalr   zNever resolve aliases pointing to external/unknown modules (not loaded directly).Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).z-Sz--statszShow statistics at the end.checkz1Check for API breakages or possible improvements.zCheck optionsre   z)Package to find, load and check, as path.)r   r   z-az	--againstREFzUOlder Git reference (commit, branch, tag) to check against. Default: load latest tag.z-bz
--base-refBASE_REFzIGit reference (commit, branch, tag) to check. Default: load current code.z--colorcolorz"Force enable colors in the output.r   z
--no-colorz#Force disable colors in the output.z-vz	--verbosezVerbose output.z--formatstylezOutput format.)r   r   r   r   )r   argparse.ArgumentParserr6   r7   )r   rE   r   rE   r*   r	   r6   r   )argparseArgumentParserr   r   r   _get_versionr"   add_subparsersr1   rH   r   ro   rp   r   rs   )rx   ry   parser	main_helpglobal_optionsr   r   dump_parserdump_optionscheck_parsercheck_optionsfmtformatsr   r   s                @@r,   
get_parserr      s    BE;KFI$$e5`hiF]I8O..5E.FNhvINk)yY^YkYkYmXnMopzHbc<
~ && ' Je  (XYK111GLj)3Mop1   

i	   ,    ZZ4   *	   E	   _   _	   *	   {# !*]^L 33/3JMy)Bmnd	   X	   1   2   t[L]^$45$4Syy$4G5tZgwX\cst|$M	 6s   +I )outputfullrP   rQ   rN   rR   rS   rT   rO   rX   r   rU   rV   statsc                  Sn[        U[        5      (       a  UR                  SS9U:w  a  SnU	(       a  [        U	5      O/ n	U(       a  U	R	                  [
        R                  5         [        U=(       d    S6 n[        U UU	UUUUUUUSU
S9nUR                  R                  n[        R                  " [         R"                  S	9nU(       aE  UR%                  5        H0  u  nnUR'                  S
USS9n[)        UUR                  US95        M2     O([*        R,                  " U[.        S
USS9n[)        UU5        [        R                  " [         R"                  S	9U-
  nU(       aE  UR1                  5       nUR2                  Ul        [        R6                  " UR9                  5       5        [;        U5      [;        U 5      :X  a  S$ S$ ! [         a    [        R                  " S5         gf = f)aT  Load packages data and dump it as JSON.

Parameters:
    packages: The packages to load and dump.
    output: Where to output the JSON-serialized data.
    full: Whether to output full or minimal data.
    docstring_parser: The docstring parser to use. By default, no parsing is done.
    docstring_options: Docstring parsing options.
    resolve_aliases: Whether to resolve aliases (indirect objects references).
    resolve_implicit: Whether to resolve every alias or only the explicitly exported ones.
    resolve_external: Whether to load additional, unspecified modules to resolve aliases.
        Default is to resolve only from one module to its private sibling (`ast` -> `_ast`).
    extensions: The extensions to use.
    search_paths: The paths to search into.
    find_stubs_package: Whether to search for stubs-only packages.
        If both the package and its stubs are found, they'll be merged together.
        If only the stubs are found, they'll be used as the package itself.
    append_sys_path: Whether to append the contents of `sys.path` to the search paths.
    allow_inspection: Whether to allow inspecting modules when visiting them is not possible.
    force_inspection: Whether to force using dynamic analysis when loading data.
    stats: Whether to compute and log stats about loading.

Returns:
    `0` for success, `1` for failure.
Fre   )re   Tr&   Could not load extensions   rM   )tz   )indentr   	sort_keys)clsr   r   r   r   )rD   rE   formatlistextendr1   pathr   r   r   ra   rh   modules_collectionmembersr   nowr   utcitemsas_jsonrL   ro   dumpsr   r   microsecondstime_spent_serializingr]   as_textrb   )rc   r   r   rP   rQ   rN   rR   rS   rT   rO   rX   r   rU   rV   r   per_package_outputloaded_extensionsrd   data_packagesstartedpackage_namerI   
serializedelapsedloader_statss                            r,   r   r   L  s   X &#6===#Cv#M!)54%2LCHH%+j.>B@ $!)+'))))-F --55M llhll+G"/"5"5"7L$QTTJJ
FMM,M$GH #8 ZZ;qt_cd
J'llhll+g5G||~.5.B.B+L((*+M"c(m31::K  45s   (G  G)(G))
base_refrN   rO   r   rX   rU   rV   verboser   r   c       
        r   U(       a  [        U5      O/ nU(       a  UR                  [        R                  5        U=(       d    U n [	        U=(       d    S6 n[        R                  " SU=(       d    S5      =n(       Ga  UR                  S5      =(       d    [        U 5      R                  5       R                  SS5      nUR                  S5      n[        [        U 5      UUUUUU	US	S
S9
nU(       a  [        R                  " SU5      =n(       d  [        SU S35      eUR                  S5      =(       d    [        U 5      R                  5       R                  SS5      nUR                  S5      nOUnSn[        [        U 5      UUUUUU	US	S
S9
nOhU=(       d    U n U=(       d    [!        U 5      n[#        U5      n[+        UUUUUUU	US	S
S9
nU(       a  [+        U UUUUUU	US	S
S9
nO[-        U S	UUUU	US	S
S9	n[        [/        UU5      5      nUc-  [0        R2                  " SS
5      =nb  UR                  5       S;   n[4        R6                  " 5         [4        R8                  " Uc  UOU(       + S9  Uc(  U
(       a  [:        R<                  O[:        R>                  nO[;        U5      nU H(  n['        URA                  US9[        R(                  S9  M*     U(       a  gg! [
         a    [        R                  " S5         gf = f! [$         a%  n['        SU 3[        R(                  S9   S
nAgS
nAff = f)a  Check for API breaking changes in two versions of the same package.

Parameters:
    package: The package to load and check.
    against: Older Git reference (commit, branch, tag) to check against.
    against_path: Path when the "against" reference is checked out.
    base_ref: Git reference (commit, branch, tag) to check.
    extensions: The extensions to use.
    search_paths: The paths to search into.
    append_sys_path: Whether to append the contents of `sys.path` to the search paths.
    allow_inspection: Whether to allow inspecting modules when visiting them is not possible.
    force_inspection: Whether to force using dynamic analysis when loading data.
    verbose: Use a verbose output.

Returns:
    `0` for success, `1` for failure.
r&   r   r   z([\w.-]+)?((==|<=|<|>=|>|!=).+) -_r   TN)rN   rO   rU   rV   rX   rR   rT   zBase z% is not a valid dependency specifier.zgriffe: error: rB   )	refreporN   rO   rU   rV   rX   rR   rT   )rZ   rN   rO   rU   rV   rX   rR   rT   FORCE_COLOR>   1yonyestrue)strip)r   r   )!r   r   r1   r   r   r   r   ra   rematchgrouprE   lowerreplacer   
ValueErrorr   r   r   rG   stderrr   r   r   osgetenvcoloramadeinitinitr   VERBOSEONE_LINEexplain)re   againstagainst_pathr   rN   rO   r   rX   rU   rV   r   r   r   r   match_againstagainst_distagainst_versionold_package
match_base	base_distbase_versionnew_package
repositoryr_   	breakagesforce_colorbreakages                              r,   r   r     s&   D *64%2LCHH%*7L+j.>B@
 !CW]PRSS}S%++A.>#g,EEGOOPSUXY'--a0L(%--1 !
 "$((+Mx"XXJX 5
2W!XYY#))!,<GCCEMMcSVWI%++A.L$ILL(%--1 !
 $.w	9!9G'5J (%--1 !
 ",)!1!1#5 $!%K "&,)!1!1#5 $!%
K *;DEI}=$)GG+T!!#'FFOOMMI>},3 ((9I9R9R 'hU+#**=  W  45\  	OE7+#**=	s*   K!  L ! LL
L6L11L6c                (   [        5       nUR                  U 5      nUR                  nUR                  S5        UR                  S5      nUR                  S[        5      n [        [        U5      n[        R                  " SUS9  [        R                  " [        S[        R                   " 5       5      5        ["        [$        S.nX   " S0 UD6$ ! [         a7    SR                  [        5      n[        SU SU S	3[        R                  S
9   gf = f)zRun the main program.

This function is executed when you type `griffe` or `python -m griffe`.

Parameters:
    args: Arguments passed from the command line.

Returns:
    An exit code.

debug_infor   	log_levelz%(levelname)-10s %(message)s)r   levelz', 'z"griffe: error: invalid log level 'z' (choose from 'z')rB   r   i  )r   r   r&   )r   
parse_args__dict__popr   getattrloggingbasicConfigAttributeErrorjoinr   rG   r1   r   setrecursionlimitmaxgetrecursionlimitr   r   )	r3   r   opts	opts_dictr   r  r  r   commandss	            r,   mainr  A  s     \F%006DIMM,|,J k+<=I
P+ 	#AO #dC$9$9$;<= 9>t.LH,),,  ++n-0;KG9TVW	
 s   !C >DD)rI   rE   rJ   str | IO | Noner6   r7   )rc   Sequence[str]rN   zExtensions | NonerO   Sequence[str | Path] | NonerP   DocstringStyle | Parser | NonerQ   DocstringOptions | NonerR   boolrS   r$  rT   bool | NonerU   r$  rV   r$  rW   r$  rX   r$  r6   r   )rs   rE   r6   zSequence[str | dict[str, Any]])r6   r   ) rc   r   r   r  r   r$  rP   r"  rQ   r#  rN   CSequence[str | dict[str, Any] | Extension | type[Extension]] | NonerR   r$  rS   r$  rT   r%  rO   r!  rX   r$  r   r$  rU   r$  rV   r$  r   r$  r6   int)NN)re   z
str | Pathr   
str | Noner   zstr | Path | Noner   r(  rN   r&  rO   r!  r   r$  rX   r$  rU   r$  rV   r$  r   r$  r   r%  r   zstr | ExplanationStyle | Noner6   r'  )N)r3   zlist[str] | Noner6   r'  )>
__future__r   r   ro   r  r   r   r1   r   r   pathlibr   typingr   r   r	   r
   r   griffe._internalr   griffe._internal.diffr   griffe._internal.encodersr   griffe._internal.enumerationsr   r   griffe._internal.exceptionsr   r    griffe._internal.extensions.baser   griffe._internal.gitr   r   griffe._internal.loaderr   r   r   r   griffe._internal.loggerr   collections.abcr   #griffe._internal.docstrings.parsersr   r   r   r   r   r   r   Actionr"   rL   rh   r   rt   r   r   r   r  r&   r.   r,   <module>r8     s   #    	 	 
 '  3 3  " 7 1 B @ < @ K K *(TF II0&9??A  & %)047;15 "$(!"$00 "0 .	0
 50 /0 0 0 "0 0 0 0 0 0f C FX #7;15VZ!"$(04$!!"![;[; [; 	[;
 5[; /[; T[; [; [; "[; .[; [; [; [; [;  ![;" 	#[;@ &*T
  VZ04!$!"+/TTT $T
 T TT .T T T T T T T )T 	Tn%-r.   