o
    i"                     @   s  U d Z ddl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 dd	lmZ dd
lmZ ddlZddlmZ ddlmZ ddlmZ dZdZdefZdZe
eddeddZg dZeddddfZejj Z!ejj"Z#ejj$Z%ejj&Z'dd eD Z(ej)j*Z*ej$j+Z,ej$j-Z.ej$j/Z0ej$j1Z2ej$j3Z4ej$j5Z6ej$j7Z8eeej eej9 e:eej; f Z<e Z=e>eje<f e?d< dd Z@dejfd d!ZAeBdejfd"d#ZCeBdejfd$d%ZDdejfd&d'ZEd(ejeFB eGB dB d)e:fd*d+ZHdIdejd(ejeFB eGB dB fd,d-ZIdejfd.d/ZJd0d1 ZKd2eGd3ed4efd5d6ZLd7d8 ZMd9d: ZNd;d< ZOd=eGfd>d?ZPd@dA ZQdIdBeeFg dB fdCdDZRdEdF ZSdGdH ZTdS )J
    N)ProcessPoolExecutor)suppress)partial)SimpleNamespace)Any)Callable)Optional)Tuple)WeakTensorKeyDictionary   )Config   )bitsandbytesz!NVIDIA A100-SXM4-80GB MIG 3g.40gbl       ' l     <' )   r   r   *   )namemajorminortotal_memorymulti_processor_count)%arange	as_tensorasarraybartlett_windowblackman_windowempty
empty_likeempty_stridedeyefull	full_likehamming_windowhann_windowkaiser_windowlinspacelogspaceones	ones_likerand	rand_likerandintrandint_likerandn
randn_likerandpermrangesparse_bsc_tensorsparse_bsr_tensorsparse_compressed_tensorsparse_coo_tensorsparse_csc_tensorsparse_csr_tensortensortril_indicestriu_indiceszeros
zeros_likecudaFc                 C   s   i | ]}|t t|qS  )getattrtorch).0r   r=   r=   U/home/ubuntu/.local/lib/python3.10/site-packages/spaces/zero/torch/patching_legacy.py
<dictcomp>M   s    rB   to_opsc                  O   s:   t jjj| i |}|j }d ur|tv rt| t|< |S N)r?   _C_TensorBase__new___baserC   )argskwargs
new_tensorbase_tensorr=   r=   rA   _tensor_new_register[   s
   rM   selfc                 C   s.   t | |}t|tjr| tv rt|  t|< |S rD   )_tensor__deepcopy__
isinstancer?   TensorrC   )rN   memorK   r=   r=   rA   _tensor_deepcopy_registerb   s
   
rS   c                 C   s8   | t v rtjdddS tj`z| jW ttj_S ttj_w )Nr<   r   )typeindex)rC   r?   devicerQ   _tensor_device_property)rN   r=   r=   rA   rW   i   s   rW   c                 C   sB   | t v rt |  d  }d ur|S tj`z| jW ttj_S ttj_w Nr   )rC   r?   rQ   dtype_tensor_dtype_property)rN   to_dtyper=   r=   rA   rZ   s   s   rZ   c           	      O   s   t jjj|i |}|^}}}zt| }W n ty!   d }Y nw |d u rF|d ur;|d |g|dd  R t| < | S t| g|R i |S |jdkrh|d ur]|d  }d ur]d|i|}t| g|R i |S |t| < | S )Nr      r<   r   rY   )	r?   rE   _nn	_parse_torC   popKeyError
_tensor_torT   )	rN   rI   rJ   parsedrV   rY   _to_argsr[   r=   r=   rA   _to_op_register~   s&   

re   rV   returnc                 C   s8   | d u rdS t | trdS t | trt| } | jdkS )NTr<   )rP   intstrr?   rV   rT   )rV   r=   r=   rA   _cuda_op_arg_check   s   



ri   c                 K   s&   t |st| |fi |S tt| < | S rD   )ri   _tensor_cudaTO_CUDArC   )rN   rV   rJ   r=   r=   rA   _cuda_op_register   s   rl   c                 K   sh   zt | }W n ty   d }Y nw |d ur,|d  }d ur,t| dfi d|i|S t| fi |S )Nr   cpurY   )rC   r_   r`   ra   _tensor_cpu)rN   rJ   rd   r[   r=   r=   rA   _cpu_op_remove   s   ro   c                   C   s   t d)NzCUDA must not be initialized in the main process on Spaces with Stateless GPU environment.
You can look at this Stacktrace to find out which part of your code triggered a CUDA init)RuntimeErrorr=   r=   r=   rA   _cuda_init_raise   s   rq   r   rI   rJ   c                 O   s   zt |dd}W n ty   t|  |i | Y S w |jdkr,t|  |i |S t|  |i i |ddi}tt|< |S )NrV   rm   r<   )r?   rV   get	Exception_torch_genericsrT   rk   rC   )r   rI   rJ   rV   r7   r=   r=   rA   _generic_method_register   s   
ru   c                  C   s   t tj_ttj_ttj_ttj_	t
tj_tjrttj_ttj_tD ]} tt| tt|  q!ttj_dd tj	_dd tj	_dd tj	_dd tj	_dd tj	_dd tj	_dd tj	_t !  d S )	Nc                   S      dS )NTr=   r=   r=   r=   rA   <lambda>       zpatch.<locals>.<lambda>c                   S   rv   rX   r=   r=   r=   r=   rA   rw      rx   c                   S   rv   Nr   r=   r=   r=   r=   rA   rw      rx   c                  _      t S rD   )CUDA_MEM_GET_INFOrI   rJ   r=   r=   rA   rw      rx   c                  _   rz   rD   )CUDA_DEVICE_CAPABILITYr|   r=   r=   rA   rw      rx   c                  _   rz   rD   )CUDA_DEVICE_PROPERTIESr|   r=   r=   rA   rw      rx   c                  _   rz   rD   )CUDA_DEVICE_NAMEr|   r=   r=   rA   rw      rx   )"rS   r?   rQ   __deepcopy__rM   rG   re   torl   r<   ro   rm   r   zero_patch_torch_devicerW   rV   rZ   rY   GENERIC_METHOD_NAMESsetattrr   ru   rq   rE   
_cuda_initis_availabledevice_countcurrent_devicemem_get_infoget_device_capabilityget_device_propertiesget_device_namer   patchr   r=   r=   rA   r      s&   r   c                  C   s  t tj_tt tj`W d    n1 sw   Y  ttj_t	tj_
ttj_tt tj`W d    n1 s9w   Y  tt tj`W d    n1 sPw   Y  tD ]
} tt| t|   qWttj_ttj
_ttj
_ttj
_ttj
_ttj
_ttj
_t tj
_!t"#  d S rD   )$rO   r?   rQ   r   r   AttributeErrorrG   ra   r   rj   r<   rn   rm   rV   rY   r   r   rt   r   rE   _cuda_availabler   _cuda_device_countr   _cuda_current_devicer   _cuda_mem_get_infor   _cuda_get_device_capabilityr   _cuda_get_device_propertiesr   _cuda_get_device_namer   r   unpatchr   r=   r=   rA   r      s0   


r   c                   C   s   d S rD   r=   r=   r=   r=   rA   pack      r   nvidia_uuidc                 C   s   | t jd< tdg  d S )NCUDA_VISIBLE_DEVICESr   )osenvironr?   rQ   r<   )r   r=   r=   rA   init   s   
r   c                   C   rv   ry   r=   r=   r=   r=   rA   size   r   r   callbackc                 C   sJ   t  D ]}|\}}|\}}}}t|d||d|_qt  tj  d S )Nr<   )rV   rY   memory_format)	rC   itemsra   datar   mover?   r<   synchronize)r   opr7   parsed_argsrc   rY   r   r=   r=   rA   r      s   
r   c                  C   sJ   t tdd} | tjj}| W  d    S 1 sw   Y  d S )Nfork)
mp_context)r   multiprocessingget_contextsubmitr?   r<   _is_in_bad_forkresult)efr=   r=   rA   is_in_bad_fork  s   $r   c                   C   s   t tj_ttj_d S rD   )ra   r?   rQ   r   rj   r<   r=   r=   r=   rA   disable_cuda_intercept  s   r   rD   )U__doc__r   r   concurrent.futuresr   
contextlibr   	functoolsr   typesr   typingr   r   r	   r
   r?   torch.utils.weakr   configr    r   r   CUDA_TOTAL_MEMORYr{   r}   r~   r   rV   rk   rQ   r   rO   r   ra   r<   rj   rm   rn   rt   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   boolr   TensorToArgsrC   dict__annotations__rM   rS   propertyrW   rZ   re   rg   rh   ri   rl   ro   rq   ru   r   r   r   r   r   r   r   r   r=   r=   r=   rA   <module>   sr    )"	
 $	
