
    Pi                         U d dl Z d dlmZ d dlmZm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 erd dlZd dlZ e            Zdaee         ed
<    G d deedef                   ZdS )    N)Mapping)TYPE_CHECKINGOptional   )config)
get_logger)
map_nested   )TensorFormatterDEVICE_MAPPINGc                        e Zd Zd fd	Zedeedf         fd            Zd Zd Z	d Z
d	efd
Zdej        defdZdej        ddfdZdej        defdZ xZS )JaxFormatterNc                 
   t                                          ||           dd l}ddlm} t          ||          r#t          d| dt          |           d          t          |t                    r|n!t           |j	                    d                   | _
        t          |                                 a| j
        t          t                                                    vrt                              d| j
         dt          t                                                     d	t           |j	                    d                    d
           t           |j	                    d                   | _
        || _        d S )N)featurestoken_per_repo_idr   )Devicez	Expected z to be a `str` not z, as `jaxlib.xla_extension.Device` is not serializable neither with `pickle` nor with `dill`. Instead you can surround the device with `str()` to get its string identifier that will be internally mapped to the actual `jaxlib.xla_extension.Device`.zDevice with string identifier z) not listed among the available devices: z), so falling back to the default device: .)super__init__jaxjaxlib.xla_clientr   
isinstance
ValueErrortypestrdevicesdevicer   _map_devices_to_strlistkeysloggerwarningjnp_array_kwargs)selfr   r   r   r#   r   r   	__class__s          u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/datasets/formatting/jax_formatter.pyr   zJaxFormatter.__init__'   s   (>OPPP


,,,,,,ff%% 	?F ? ?tF|| ? ? ?   !+63 7 7RffSqAQ=R=R !!5577N;d>#6#6#8#89999NN4 4 4 !4!4!6!6774 4{s{}}Q/004 4 4  
 kckmmA.//DK 0    returnzjaxlib.xla_extension.Devicec                  <    dd l } d  | j                    D             S )Nr   c                 .    i | ]}t          |          |S  )r   ).0r   s     r&   
<dictcomp>z4JaxFormatter._map_devices_to_str.<locals>.<dictcomp>F   s     @@@FV@@@r'   )r   r   )r   s    r&   r   z JaxFormatter._map_devices_to_strB   s'    


@@+#+--@@@@r'   c                     dd l dd lm} t          t                    r5r3t          fdD                       r|                    d          S S )Nr   c              3      K   | ]E}t          |j                  o+|j        d          j        k    o|j        d          j        k    V  FdS )r   N)r   Arrayshapedtype)r,   xcolumnr   s     r&   	<genexpr>z,JaxFormatter._consolidate.<locals>.<genexpr>M   sh        kl
1ci((fQWq	-GfAGW]^_W`WfLf     r'   )axis)r   	jax.numpynumpyr   r   allstack)r$   r4   jnpr   s    ` @r&   _consolidatezJaxFormatter._consolidateH   s    


fd## 	1 	1     pv     1 yyay000r'   c                    dd l }dd lm} t          |t          t
          t          d           f          r|S t          |t          j        t          j	        f          r8t          j
        |j        t          j                  r|                                S i }t          |t          j        t          j	        f          rDt          j
        |j        t          j                  r |j        j        r
d|j        i}n]d|j        i}nSt          |t          j        t          j	        f          r-t          j
        |j        t          j                  r	d|j        i}t          j        r@dt,          j        v r2dd l}t          ||j        j                  rt          j        |          }t          j        r&dt,          j        v rddlm} t          ||          r|S t          j        r*dt,          j        v rddlm }m!} t          |||f          r|S tD          | #                                a" |j$        tD          | j%                           5   |j&        |fi i || j'        cd d d            S # 1 swxY w Y   d S )Nr   r2   PILtorchvision)VideoReader
torchcodec)AudioDecoderVideoDecoder)(r   r7   r8   r   r   bytesr   np	characterndarray
issubdtyper2   tolistnumberintegerr   jax_enable_x64int64int32floatingfloat32PIL_AVAILABLEsysmodules	PIL.ImageImageasarrayTORCHVISION_AVAILABLEtorchvision.ior@   TORCHCODEC_AVAILABLEtorchcodec.decodersrB   rC   r   r   default_devicer   arrayr#   )	r$   valuer   r;   default_dtyper>   r@   rB   rC   s	            r&   
_tensorizezJaxFormatter._tensorizeS   s   


ec5$t**566 	"Lbj9:: 	"r}U[Z\Zf?g?g 	"<<>>!ebi455 	3"-UWU_:`:` 	3 z( 5!(#) 4!(#) 4	2:677 	3BM%+WYWb<c<c 	3$ck2M 	*ES[$8$8%11 *
5))' 	MS[,H,H222222%-- & 	<3;+F+FFFFFFFFF%,!=>> 
 !!5577NSt{ ;<< 	R 	R 39UQQ&P&P$:O&PQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	Rs   I''I+.I+c                     dd l }t          j        rxdt          j        v rjdd l}t          ||j                  rQ                     |	                                
                                                                d                   S t          |d          r)t          ||j                  s|                                }t          |t          j                  r2|j        t$          k    r!                      fd|D                       S n=t          |t(          t*          f          r!                      fd|D                       S                      |          S )Nr   torchr+   	__array__c                 :    g | ]}                     |          S r+   recursive_tensorizer,   	substructr$   s     r&   
<listcomp>z5JaxFormatter._recursive_tensorize.<locals>.<listcomp>   s(    )k)k)kR[$*B*B9*M*M)k)k)kr'   c                 :    g | ]}                     |          S r+   rd   rf   s     r&   rh   z5JaxFormatter._recursive_tensorize.<locals>.<listcomp>   s'    %g%g%gid&>&>y&I&I%g%g%gr'   )r   r   TORCH_AVAILABLErR   rS   ra   r   Tensorr_   detachcpur8   hasattrr0   rb   rE   rG   r2   objectr<   r   tuple)r$   data_structr   ra   s   `   r&   _recursive_tensorizez!JaxFormatter._recursive_tensorize   sZ   


 ! 	Og&<&<LLL+u|44 O{'9'9';';'?'?'A'A'G'G'I'I"'MNNN;,, 	2ZSY5W5W 	2%//11Kk2:.. 	i F**(()k)k)k)k_j)k)k)klll +dE]33 	i$$%g%g%g%g[f%g%g%ghhh{+++r'   rq   c                 0    t          | j        |d          S )NF)map_list)r	   rr   )r$   rq   s     r&   re   z JaxFormatter.recursive_tensorize   s    $3[5QQQQr'   pa_tablec                     |                                                      |          }| j                            |          }|                     |          S N)numpy_arrow_extractorextract_rowpython_features_decoder
decode_rowre   )r$   ru   rows      r&   
format_rowzJaxFormatter.format_row   sK    ((**66x@@*55c::'',,,r'   	jax.Arrayc                     |                                                      |          }| j                            ||j        d                   }|                     |          }|                     |          }|S )Nr   )rx   extract_columnrz   decode_columncolumn_namesre   r<   )r$   ru   r4   s      r&   format_columnzJaxFormatter.format_column   sm    ++--<<XFF-;;FHDYZ[D\]]))&11""6**r'   c                     |                                                      |          }| j                            |          }|                     |          }|D ] }|                     ||                   ||<   !|S rw   )rx   extract_batchrz   decode_batchre   r<   )r$   ru   batchcolumn_names       r&   format_batchzJaxFormatter.format_batch   s    **,,::8DD,99%@@((//  	G 	GK!%!2!253E!F!FE+r'   )NNN)__name__
__module____qualname__r   staticmethoddictr   r   r<   r_   rr   re   paTabler   r}   r   r   __classcell__)r%   s   @r&   r   r   &   s1       1 1 1 1 1 16 Ac+H&H!I A A A \A
	 	 	.R .R .R`, , ,&Rt R R R R-28 - - - - -
bh ;    RX '        r'   r   r~   )rR   collections.abcr   typingr   r   r8   rE   pyarrowr    r   utils.loggingr   utils.py_utilsr	   
formattingr   r   jaxlibr!   r   r   __annotations__r   r+   r'   r&   <module>r      s!    



 # # # # # # * * * * * * * *               & & & & & & ' ' ' ' ' ' ' ' ' ' ' '  JJJMMM	!% % % %E E E E E?7K#@A E E E E Er'   