+
    }i                    0  a  0 t $ R t^ RIHt . ROt^ RIt^ RIt^ RIH	t	H
t
Ht ^RIHt ^RIHtHt ^RIHtHtHtHtHtHtHtHtHt ^RIHtHt ^RIH t  ]	].]3,          t!Rt"R	]#R
&   ]PH                  PK                  R4      '       d   ^RI&Ht" Rt'R	]#R&   ]PH                  PK                  R4      '       d   ^RI(Ht' ])! ]*! R]']"R 34      4      t+R]#R&   Rt, ! R R4      t-R]#R&    ]P\                  ! 4       t/R R lt0R R lt1R R lt2R R lt3R R lt4R# ) a  The package provides top-level helpers which use a lazily initialised
default parser. These are convenience functions, for more control it
is perfectly acceptable to instantiate and call parsers directly.

The default parser does use a cache keyed on the user-agent string,
but its exact behaviour is unspecified, if you require a consistent
behaviour or specific algorithm, set up your own parser (global or
not).

For convenience, direct aliases are also provided for:

- :mod:`core types <.types>`
- :mod:`caching utilities <.caching>`
- :mod:`ua_parser.basic.Parser` as :class:`BasicParser`

This way importing anything but the top-level package should not be
necessary unless you want to *implement* a parser.
)annotationsN)CallableOptionalcast)Resolver)CachingResolverS3Fifo)	DefaultedResultDeviceDomainMatchersOSPartialResultr   Result	UserAgent)load_builtinsload_lazy_builtins)IS_GRAALzOptional[_ResolverCtor]Re2Resolverre2RegexResolverua_parser_rsc                >    \        \        V 4      \        R 4      4      # )i  )r   BasicResolverCache)ms   &d/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/ua_parser/__init__.py<lambda>r   L   s    omA&6dD    _ResolverCtorBestAvailableResolverc                  x    ] tR t^UtRt]R R l4       tR R ltR R ltR R	 lt	R
 R lt
R R ltR R ltRtR# )ParserzVWrapper object, provides convenience methods around an
underlying :class:`Resolver`.

c                    V ^8  d   QhRRRR/# )   r   r   returnr"    )formats   "r   __annotate__Parser.__annotate__\   s     - -h -f -r   c               $    V ! \        V4      4      # )zfrom_matchers(Matchers) -> Parser

Instantiates a parser from the provided
:class:`~ua_parser.core.Matchers` using the default resolver
stack.

)r    )clsr   s   ""r   from_matchersParser.from_matchers[   s     (+,,r   c                    V ^8  d   QhRRRR/# )r$   resolverr   r%   Noner&   )r'   s   "r   r(   r)   f   s     ! ! !d !r   c                	    Wn         R # )Nr/   )selfr/   s   &&r   __init__Parser.__init__f   s     r   c               $    V ^8  d   QhRRRRRR/# )r$   uastrdomainsr   r%   r   r&   )r'   s   "r   r(   r)   i   s!     * *3 * *} *r   c               $    V P                  W4      # )zParses the ``ua`` string, returning a parse result with *at least*
the requested :class:`domains <Domain>` resolved (whether to success or
failure).
r2   )r3   r7   r9   s   """r   __call__Parser.__call__i   s    
 }}R))r   c               $    V ^8  d   QhRRRRRR/# )r$   r3   r   r7   r8   r%   r   r&   )r'   s   "r   r(   r)   p   s!     / /H /# /& /r   c                L    V ! V\         P                  4      P                  4       # )z+Convenience method for parsing all domains.)r   ALLcompleter3   r7   s   &&r   parseParser.parsep   s    B

#,,..r   c               $    V ^8  d   QhRRRRRR/# )r$   r3   r   r7   r8   r%   Optional[UserAgent]r&   )r'   s   "r   r(   r)   t   s"     6 6x 6S 65H 6r   c                D    V ! V\         P                  4      P                  # )z=Convenience method for parsing the :class:`UserAgent` domain.)r   
USER_AGENT
user_agentrA   s   &&r   parse_user_agentParser.parse_user_agentt   s    B))*555r   c               $    V ^8  d   QhRRRRRR/# )r$   r3   r   r7   r8   r%   Optional[OS]r&   )r'   s   "r   r(   r)   x   s!     & &x &S &\ &r   c                D    V ! V\         P                  4      P                  # )z6Convenience method for parsing the :class:`OS` domain.)r   r   osrA   s   &&r   parse_osParser.parse_osx   s    B		"%%%r   c               $    V ^8  d   QhRRRRRR/# )r$   r3   r   r7   r8   r%   Optional[Device]r&   )r'   s   "r   r(   r)   |   s"     . .8 . .1A .r   c                D    V ! V\         P                  4      P                  # )z:Convenience method for parsing the :class:`Device` domain.)r   DEVICEdevicerA   s   &&r   parse_deviceParser.parse_device|   s    B&---r   r2   N)__name__
__module____qualname____firstlineno____doc__classmethodr,   r4   r;   rB   rI   rO   rV   __static_attributes__r&   r   r   r"   r"   U   s>    
 - -!*/6&. .r   r"   parserc                    V ^8  d   QhRRRR/# )r$   namer8   r%   r"   r&   )r'   s   "r   r(   r(      s     K Kc Kf Kr   c                   \         ;_uu_ 4        V R 8X  d   \        4       P                  R 4      ;p'       d   \        \        V4      uuRRR4       # \
        '       g   \        '       g   \        '       d   \        4       pM
\        4       p\        P                  V4      s\        uuRRR4       #  RRR4       \        R\        : RV : 24      h  + '       g   i     L'; i)r_   Nzmodule z has no attribute )_lazy_globals_lockglobalsgetr   r"   r   r   r   r   r   r,   r_   AttributeErrorrX   )ra   pmatcherss   &  r   __getattr__ri      s    		8
 IMM(++q+FA 
	 }xx-/(?))(3F 
	 
  78,.@I
JJ! 
	s#   8CCC*C6/CC 	c                    V ^8  d   QhRRRR/# )r$   r7   r8   r%   r   r&   )r'   s   "r   r(   r(      s     - -c -f -r   c                X    ^RI Hp V! V \        P                  4      P	                  4       # )a  Parses the :class:`.UserAgent`, :class:`.OS`, and :class:`.Device`
information using the :data:`global parser <parser>`.

Equivalent to calling each of :func:`parse_user_agent`,
:func:`parse_os`, and :func:`parse_device` but *may* be more
efficient than calling them separately depending on the underlying
parser.

Even in the best case, prefer the domain-specific helpers if
you're not going to use *all* of them.
r_   ) r_   r   r?   r@   r7   r_   s   & r   rB   rB      s!     "fjj!**,,r   c                    V ^8  d   QhRRRR/# )r$   r7   r8   r%   rE   r&   )r'   s   "r   r(   r(      s     4 4 4!4 4r   c                P    ^RI Hp V! V \        P                  4      P                  # )z_Parses the :class:`browser <.UserAgent>` information using the
:data:`global parser <parser>`.
rl   )rm   r_   r   rG   rH   rn   s   & r   rI   rI      s      "f''(333r   c                    V ^8  d   QhRRRR/# )r$   r7   r8   r%   rL   r&   )r'   s   "r   r(   r(      s     $ $ $ $r   c                P    ^RI Hp V! V \        P                  4      P                  # )zNParses the :class:`.OS` information using the :data:`global parser
<parser>`.
rl   )rm   r_   r   r   rN   rn   s   & r   rO   rO      s     "fii ###r   c                    V ^8  d   QhRRRR/# )r$   r7   r8   r%   rR   r&   )r'   s   "r   r(   r(      s     , ,S ,- ,r   c                P    ^RI Hp V! V \        P                  4      P                  # )zRParses the :class:`.Device` information using the :data:`global
parser <parser>`.
rl   )rm   r_   r   rT   rU   rn   s   & r   rV   rV      s     "fmm$+++r   )r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   rB   rV   rO   rI   )       ru   )5__conditional_annotations__r\   
__future__r   __all__importlib.util	importlib	threadingtypingr   r   r   basicr   r   cachingr   r   r   corer	   r
   r   r   r   r   r   r   loadersr   r   utilsr   r   r   __annotations__util	find_specr   r   regexnextfilterr    VERSIONr"   Lockrc   ri   rB   rI   rO   rV   )rw   s   @r   <module>r      s  & #*   + + , 5
 
 
 7 (X-.'+$ +>>E"",)-& ->>N++0'+
D	
	( } 	 ). ).X 	 ^^% K*-&4$,r   