
    -e                        d Z ddlmZ ddlZ ej        e          ZddlZddlZddl	m
Z
 ddlmZ erddlmZ dZ G d	 d
          ZdS )z Encapulate the management of any modules that are created in the process
of building a Bokeh Document in a DocumentModelManager class.

    )annotationsN)
ModuleType)TYPE_CHECKING   )Document)DocumentModuleManagerc                  H    e Zd ZU dZded<   ded<   ddZddZddZddZdS )r   z[ Keep track of and clean up after modules created while building Bokeh
    Documents.

    zweakref.ReferenceType[Document]	_documentzlist[ModuleType]_modulesdocumentr   c                F    t          j        |          | _        g | _        dS )z

        Args:
            document (Document): A Document to manage modules for
                A weak reference to the Document will be retained

        N)weakrefrefr
   r   )selfr   s     6lib/python3.11/site-packages/bokeh/document/modules.py__init__zDocumentModuleManager.__init__6   s      !X..    returnintc                *    t          | j                  S )N)lenr   )r   s    r   __len__zDocumentModuleManager.__len__A   s    4=!!!r   moduler   Nonec                    |j         t          j        v r,t          d|j         d|                                           |t          j        |j         <   | j                            |           dS )a	   Add a module associated with a Document.

        .. note::
            This method will install the module in ``sys.modules``

        Args:
            module (Module) : a module to install for the configured Document

        Returns:
            None

        z Add called already-added module z for N)__name__sysmodulesRuntimeErrorr
   r   append)r   r   s     r   addzDocumentModuleManager.addD   sk     ?ck))n&/nnZ^ZhZhZjZjnnooo'-FO$V$$$$$r   c                    ddl m} ddlm t                              dt           j                   d                                             j        D ]} ||          }d |D             } fd|D             }fd|D             }t          |          dk    r t          	                    d	|d
|           |j
        t          j        v rt          j        |j
        = |j                                         ~g  _        dS )z Clean up any added modules, and check that there are no unexpected
        referrers afterwards.

        Returns:
            None

        r   )get_referrers)	FrameTypez	Deleting z modules for document c                .    g | ]}|t           j        u|S  )r   r   ).0xs     r   
<listcomp>z1DocumentModuleManager.destroy.<locals>.<listcomp>q   s$    FFFq#+1E1E1E1E1Er   c                &    g | ]}|j         u|S r&   )r   )r'   r(   r   s     r   r)   z1DocumentModuleManager.destroy.<locals>.<listcomp>r   s%    HHHq$-1G1G1G1G1Gr   c                4    g | ]}t          |          |S r&   )
isinstance)r'   r(   r$   s     r   r)   z1DocumentModuleManager.destroy.<locals>.<listcomp>s   s(    NNNqZ95M5MNNNNr   zModule z] has extra unexpected referrers! This could indicate a serious memory leak. Extra referrers: N)gcr#   typesr$   logdebugr   r   r
   errorr   r   r   __dict__clear)r   r#   r   	referrersr$   s   `   @r   destroyzDocumentModuleManager.destroyV   s^    	%$$$$$######		\c$-00\\HXHX\\]]]m 	 	F &f--IFFIFFFIHHHHIHHHINNNNINNNI9~~""		  YF  Y  Y  LU  Y  Y  Z  Z  Z #+--K0 O!!### r   N)r   r   )r   r   )r   r   r   r   )r   r   )	r   
__module____qualname____doc____annotations__r   r   r!   r5   r&   r   r   r   r   -   s          
 /...	 	 	 	" " " "% % % %$* * * * * *r   r   )r8   
__future__r   logging	getLoggerr   r/   r   r   r.   r   typingr   r   r   __all__r   r&   r   r   <module>r?      s     # " " " " " g!! 


                    #""""""S S S S S S S S S Sr   