
    ce)                        d Z ddlmZ ddgZddlZddlZ ej        d          Z G d dej	        e                   Z
 G d dej	        e         ej        e
e                  ej        j                  ZdS )	z6Common parts of different issue detectors and solvers.    )annotationsSolverRecordSolverCollectionNSolverTc                  ^    e Zd ZdZdZddd
Zedd            Zedd            ZddddZ	dS )r   zSingle registered solver.)__solver__tags solverr   tagscollections.abc.Iterable[str]returnNonec                <    || _         t          |          | _        dS )z/Initialize new :class:`~SolverRecord` instance.N)_SolverRecord__solverset_SolverRecord__tags)selfr   r   s      @lib/python3.11/site-packages/anaconda_navigator/utils/solvers.py__init__zSolverRecord.__init__   s    /5.1$ii    c                    | j         S )zSolver value.)r   r   s    r   r   zSolverRecord.solver   s     }r   collections.abc.Set[str]c                    | j         S )zRelated tags to this solver.)r   r   s    r   r   zSolverRecord.tags   s     {r   r   c               :    | j                             |           dS )z+Extend current record with additional tags.N)r   update)r   r   s     r   extendzSolverRecord.extend$   s    4     r   N)r
   )r   r   r   r   r   r   )r   r   )r   r   )r   r   r   r   )
__name__
__module____qualname____doc__	__slots__r   propertyr   r   r   r
   r   r   r   r      s        ##&I8 8 8 8 8
    X    X ?A ! ! ! ! ! ! ! !r   c                      e Zd ZdZdZddZddddZej        ddddd            Z	ej        ddddd            Z	dddddZ	ddZ
ddZdS ) r   zCollection of issue solvers.)	__content__unique_tagsr   r   c                "    g | _         i | _        dS )z3Initialize new :class:`~SolverCollection` instance.N)_SolverCollection__content_SolverCollection__unique_tagsr   s    r   r   zSolverCollection.__init__.   s    DFMOr   Nr   r   *str | collections.abc.Iterable[str] | None/collections.abc.Iterator[SolverRecord[SolverT]]c             #     K   || j         E d{V  dS t          |t                    r|h}nt          |          }| j         D ]!}|                    |j                  s|V  "dS )z+Iterate through filtered subset of solvers.N)r*   
isinstancestrr   intersectionr   )r   r   solver_records      r   onlyzSolverCollection.only3   s       <~%%%%%%%FdC   	6DDt99D "^ 	  	 M$$]%788 		  	 r   r
   )r   unique_tagsr   r   #str | collections.abc.Iterable[str]r4   c                   dS )zRegister a new unnamed solver.Nr
   )r   r   r   r4   s       r   registerzSolverCollection.registerK         r   ,collections.abc.Callable[[SolverT], SolverT]c                   dS )zRegister a new named solver.Nr
   )r   r   r4   s      r   r7   zSolverCollection.registerU   r8   r   c                    t          t                    rhnt                    t          t                    rhnt                                                   d fd}||S  ||          S )ac  
        Register new solver.

        This method can be used as a decorator:

        .. code-block:: python

            solvers = SolverCollection()

            @solvers.register
            def unnamed_solver(context):
                ...

            @solvers.register(tags='some_tag', unique_tags=('unique_a', 'unique_b'))
            def named_solver(context):
                ...

        as well as direct function:

        .. code-block:: python

            def custom_solver(context):
                ...

            solvers.register(custom_solver, tags=('other_tag', 'additional_tag'), unique_tags='custom_solver')

        :param solver: Solver that should be registered.
        :param tags: Optional collection of common tags.
        :param unique_tags: Optional collection of tags, that should be unique only for this particular solver.
        itemr   r   c                v   j         D ]}|j        | u r nd }                    j                  }|r1d                    d |D                       }t          d|           |,t          |           }j                             |           n|                               D ]}|j        |<   | S )Nz, c              3  4   K   | ]}t          |          V  d S N)repr).0r<   s     r   	<genexpr>z=SolverCollection.register.<locals>.wrapper.<locals>.<genexpr>   s(      (S(Sd(S(S(S(S(S(Sr   z*some of the unique tags are already used: )r   r   r   )	r*   r   r1   r+   join
ValueErrorr   appendr   )r<   r2   common_unique_tagsmessagetagr   r   r4   s        r   wrapperz*SolverCollection.register.<locals>.wrapper   s    !% % % '4//E 0 !%+6+C+CDDV+W+W! Y#yy(S(S@R(S(S(SSS !Wg!W!WXXX$ ,Dt D D D%%m4444$$$$/// # 8 8*7"3''Kr   N)r<   r   r   r   )r/   r0   r   r   )r   r   r   r4   rI   s   ` `` r   r7   zSolverCollection.register^   s    > k3'' 	+&-KKk**KdC   	6DDt99DK   	 	 	 	 	 	 	 	2 >Nwvr   c                *    t          | j                  S )z)Iterate through registered issue solvers.)iterr*   r   s    r   __iter__zSolverCollection.__iter__   s    DN###r   intc                *    t          | j                  S )z'Get total number of registered solvers.)lenr*   r   s    r   __len__zSolverCollection.__len__   s    4>"""r   )r   r   )r   r,   r   r-   )r   r   r   r5   r4   r5   r   r   )r   r5   r4   r5   r   r9   r?   )r   r-   )r   rM   )r    r!   r"   r#   r$   r   r3   typingoverloadr7   rL   rP   r
   r   r   r   r   )   s       &&.IP P P P @D           0 _
 9;?A- - - - - _- _ 9;?A	+ + + + + _+EBB E E E E EN$ $ $ $# # # # # #r   )r#   
__future__r   __all__collections.abccollectionsrQ   TypeVarr   Genericr   IterableabcSizedr   r
   r   r   <module>r\      s    = < " " " " " "-
.      &.
#
#! ! ! ! !6>'* ! ! !2B# B# B# B# B#v~g.W@U0VXcXgXm B# B# B# B# B#r   