o
    ni                     @   s*  d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZmZ ddl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
r~dd
lmZmZ ddl m!Z! ddl"m#Z# edej$e f Z%edej$e f Z&e'dZ(G dd dej)Z*G dd dZ+dS )z6Backend - Send to internal process.

Manage backend.

    N)TYPE_CHECKINGAnyCallableDictOptionalUnion)InterfaceBase)InterfaceQueue)wandb_internal)SettingsStatic)Mailbox)Settings)RecordResult)service_connection   )Runzqueue.Queue[Record]zqueue.Queue[Result]wandbc                   @   s8   e Zd ZdZdedeeef ddfddZd
dd	Z	dS )BackendThreadz.Class to running internal process as a thread.targetkwargsreturnNc                 C   s.   t j|  d| _|| _|| _d| _d| _d S )N
BackendThrTr   )	threadingThread__init__name_target_kwargsdaemonpid)selfr   r    r"   W/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/backend/backend.pyr   '   s   
zBackendThread.__init__c                 C   s   | j di | j d S )Nr"   )r   r   r!   r"   r"   r#   run/   s   zBackendThread.runr   N)
__name__
__module____qualname____doc__r   r   strr   r   r%   r"   r"   r"   r#   r   $   s    r   c                   @   s   e Zd ZU ejjed< ee ed< ee	 ed< eej
j ed< ee ed< ed ed< ed ed	< eed
< 			d$dedee dee	 ddddf
ddZd%ddZd&ddZd&ddZd&ddZd&ddZd&d d!Zd&d"d#ZdS )'Backend_multiprocessing	interface_internal_pidwandb_process	_settingsRecordQueuerecord_qResultQueueresult_q_mailboxNmailboxsettings	log_levelservicez.Optional[service_connection.ServiceConnection]r   c                 C   sZ   d| _ d | _d | _d | _d | _d | _|| _|| _|| _|| _	t
| _|   d | _d | _d S )NF)_doner3   r5   r0   r.   r/   r1   
_log_level_servicer6   multiprocessingr-   _multiprocessing_setup_save_mod_path_save_mod_spec)r!   r7   r8   r9   r:   r"   r"   r#   r   >   s   
zBackend.__init__r%   r   c                 C   s   | j sJ | j | d S )N)r.   _hack_set_run)r!   r%   r"   r"   r#   rB   W   s   
zBackend._hack_set_runc                 C   sh   | j sJ | j jdkrd S | j jpd}ttdsd S t }tdd|| t	|}|| _
d S )Nthreadspawnget_contextz+multiprocessing start_methods={}, using: {},)r1   start_methodhasattrr>   get_all_start_methodsloggerinfoformatjoinrE   r-   )r!   rG   all_methodsctxr"   r"   r#   r?   [   s   




zBackend._multiprocessing_setupc                 C   s   t jd }t|dd }t|dd }|d u r%tjj}tjjd|d}||_n|| _|d urB|j	| _
tjtjtj	dd}||_	d S d S )N__main____spec____file__zwandb.mpmain)r   loadermpmainz__main__.py)sysmodulesgetattr	importlib	machineryBuiltinImporter
ModuleSpecrQ   rA   rR   r@   ospathrM   dirnamer   )r!   main_modulemain_mod_specmain_mod_pathrS   fnamer"   r"   r#   _module_main_installp   s"   

zBackend._module_main_installc                 C   s(   t jd }| j|_| jr| j|_d S d S )NrP   )rU   rV   rA   rQ   r@   rR   )r!   r_   r"   r"   r#   _module_main_uninstall   s
   
zBackend._module_main_uninstallc                 C   sX  | j r| j | j| _dS | jsJ | j }| jptj|_	|j
}t| }t }|dkrQt | _t | _tjdd ttt|| j| j|dd}|| _n&| j | _| j | _| jjtt|| j| j|dd| _| jssJ d| j_|   td | jsJ | j  | jj | _!td	| jj   | "  t#| j| j| j| jd
| _dS )z%Launch backend worker if not running.NrC   T)disable)r8   r3   r5   user_pid)r   r   r
   zstarting backend process...z"started backend process with pid: )processr3   r5   r7   )$r=   make_interfacer6   r.   r1   copyr<   loggingDEBUGx_log_levelrG   r   to_protor\   getpidqueueQueuer3   r5   r   _set_internal_processr   r
   dictr0   r-   Processr   rc   rJ   rK   startr    r/   rd   r	   )r!   r8   rG   settings_staticrf   wandb_threadr"   r"   r#   ensure_launched   sb   





	



zBackend.ensure_launchedc                 C   s   dS )zReport server status.Nr"   r$   r"   r"   r#   server_status   s    zBackend.server_statusc                 C   st   | j rd S d| _ | jr| j  | jr| j  | jr&t| jdr&| j  | jr6t| jdr8| j  d S d S d S )NTclose)r;   r.   rM   r0   r3   rH   ry   r5   r$   r"   r"   r#   cleanup   s   


zBackend.cleanup)NNN)r%   r   r   Nr&   )r'   r(   r)   r>   contextBaseContext__annotations__r   r   intrg   BaseProcessr   r   r   rB   r?   rc   rd   rw   rx   rz   r"   r"   r"   r#   r,   3   s<   
 






?r,   ),r*   importlib.machineryrX   rj   r>   r\   ro   rU   r   typingr   r   r   r   r   r   r   wandb.sdk.interface.interfacer   #wandb.sdk.interface.interface_queuer	   wandb.sdk.internal.internalr
   "wandb.sdk.internal.settings_staticr   wandb.sdk.lib.mailboxr   wandb.sdk.wandb_settingsr   wandb.proto.wandb_internal_pb2r   r   wandb.sdk.libr   	wandb_runr   rp   r2   r4   	getLoggerrJ   r   r   r,   r"   r"   r"   r#   <module>   s2     
