
    bi                         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y)    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 )JaxFormatterc                    t         |   ||       dd l}ddlm} t        ||      rt        d| dt        |       d      t        |t              r|nt         |j                         d         | _
        t        | j                         a| j                  t        t        j                               vrt        j!                  d| j                   dt        t        j                                d	t         |j                         d          d
       t         |j                         d         | _
        || _        y )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          \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/datasets/formatting/jax_formatter.pyr   zJaxFormatter.__init__'   s   (>OP,ff%F8#6tF|n E? ?  !+63 7fSqAQ=R !!557N;;d>#6#6#899NN0 > !4!4!678 9{s{{}Q/014
 kckkmA./DK 0    returnzjaxlib.xla_extension.Devicec                  f    dd l }  | j                         D ci c]  }t        |      | c}S c c}w Nr   )r   r   r   )r   r   s     r&   r   z JaxFormatter._map_devices_to_strB   s*    2=#++-@FV#@@@s   .c                     dd l dd lm} t        t              r*r(t        fdD              r|j                  d      S S )Nr   c              3      K   | ]V  }t        |j                        xr: |j                  d    j                  k(  xr |j                  d    j                  k(   X yw)r   N)r   Arrayshapedtype).0xcolumnr   s     r&   	<genexpr>z,JaxFormatter._consolidate.<locals>.<genexpr>M   sU      kl
1cii(fQWWq	-GfAGGW]^_W`WfWfLffs   AA)axis)r   	jax.numpynumpyr   r   allstack)r$   r2   jnpr   s    ` @r&   _consolidatezJaxFormatter._consolidateH   sD    fd# pv  yyay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      r>t        j                  |j                  t        j                        r|j                         S i }t        |t        j                  t        j                  f      rbt        j                  |j                  t        j                        r4|j                  j                   rd|j"                  i}nud|j$                  i}nft        |t        j                  t        j                  f      r<t        j                  |j                  t        j&                        rd|j(                  i}t        j*                  rKdt,        j.                  v r9dd l}t        ||j2                  j2                        rt        j4                  |      }t        j6                  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        | jG                         a" |jH                  tD        | jJ                           5   |jL                  |fi i || jN                  cd d d        S # 1 sw Y   y xY w)Nr   r/   PILtorchvision)VideoReader
torchcodec)AudioDecoderVideoDecoder)(r   r5   r6   r   r   bytesr   np	characterndarray
issubdtyper/   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.decodersr@   rA   r   r   default_devicer   arrayr#   )	r$   valuer   r9   default_dtyper<   r>   r@   rA   s	            r&   
_tensorizezJaxFormatter._tensorizeS   s   ec5$t*56Lbjj9:r}}U[[Z\ZfZf?g<<>!ebii45"--UWU_U_:` zz((!(#)) 4!(#)) 4		2::67BMM%++WYWbWb<c$ckk2MES[[$8%1

5)''MS[[,H2%-&&<3;;+FF%,!=>
 !!557NSt{{ ;< 	R 399UQ&P&P$:O:O&PQ	R 	R 	Rs   !J88Kc                    dd l }t        j                  rjdt        j                  v rXdd l}t        ||j                        r>| j                  |j                         j                         j                         d         S t        |d      r&t        ||j                        s|j                         }t        |t        j                         rA|j"                  t$        k(  rr| j'                  |D cg c]  }| j)                  |       c}      S t        |t*        t,        f      r.| j'                  |D cg c]  }| j)                  |       c}      S | j                  |      S c c}w c c}w )Nr   torch 	__array__)r   r   TORCH_AVAILABLErP   rQ   r_   r   Tensorr]   detachcpur6   hasattrr-   ra   rC   rE   r/   objectr:   recursive_tensorizer   tuple)r$   data_structr   r_   	substructs        r&   _recursive_tensorizez!JaxFormatter._recursive_tensorize   s    !!g&<+u||4{'9'9';'?'?'A'G'G'I"'MNN;,ZSYY5W%//1Kk2::.  F*((_j)kR[$*B*B9*M)klldE]3$$[f%gid&>&>y&I%ghh{++ *l%gs   -E!1E&rj   c                 2    t        | j                  |d      S )NF)map_list)r	   rl   )r$   rj   s     r&   rh   z JaxFormatter.recursive_tensorize   s    $33[5QQr'   pa_tablec                     | j                         j                  |      }| j                  j                  |      }| j	                  |      S N)numpy_arrow_extractorextract_rowpython_features_decoder
decode_rowrh   )r$   ro   rows      r&   
format_rowzJaxFormatter.format_row   sB    ((*66x@**55c:'',,r'   	jax.Arrayc                     | j                         j                  |      }| j                  j                  ||j                  d         }| j                  |      }| j                  |      }|S r*   )rr   extract_columnrt   decode_columncolumn_namesrh   r:   )r$   ro   r2   s      r&   format_columnzJaxFormatter.format_column   sd    ++-<<XF--;;FHDYDYZ[D\]))&1""6*r'   c                     | j                         j                  |      }| j                  j                  |      }| j	                  |      }|D ]  }| j                  ||         ||<    |S rq   )rr   extract_batchrt   decode_batchrh   r:   )r$   ro   batchcolumn_names       r&   format_batchzJaxFormatter.format_batch   sq    **,::8D,,99%@((/  	GK!%!2!253E!FE+	Gr'   )NNN)__name__
__module____qualname__r   staticmethoddictr   r   r:   r]   rl   rh   paTabler   rw   r}   r   __classcell__)r%   s   @r&   r   r   &   s    16 Ac+H&H!I A A
	.R`,&Rt R-288 - -
bhh ; RXX ' r'   r   rx   )rP   collections.abcr   typingr   r   r6   rC   pyarrowr    r   utils.loggingr   utils.py_utilsr	   
formattingr   r   jaxlibr!   r   r   __annotations__r   r`   r'   r&   <module>r      s\      # *    & ' ' 	!% %E?7K#@A Er'   