
    g                         d dl Z d dlZddlmZmZmZ ddlmZm	Z	 ddl
m
Z d dlmZmZ d dlmZ d	Zd
Zh dZ G d de      Zy)    N   )is_pandas_dfhas_geo_interfacerecords_from_geo_interface   )	JSONMixincamel_and_lower)settings)ImageFunction)BinaryTransportExceptionz@@typez@@=>   "'`c                       e Zd Zd
dZed        Zej                  d        Zd Zd Zed        Z	e	j                  d        Z	d	 Z
y)LayerNc                    || _         |xs t        t        j                               | _        | j                  |      }|j                         | _        |r||j                         D ]M  \  }}t        |t              r/|d   t        v r$|d   |d   k(  r|j                  |d   d      ||<   Ft        |t              r$t        j                  |      rt        |      ||<   zt        |t              rt        |z   ||<   t        |t              r|g k7  r}t        |d   t              rjd}t!        |      D ]?  \  }	}
|	t#        |      dz
  k(  r|dj%                  |
      z  },|dj%                  |
      z  }A dj%                  t        |      ||<   )t        |t&              s;|j)                         ||<   P | j*                  j-                  |       d| _        || _        d| _        || _        y)	a  Configures a deck.gl layer for rendering on a map. Parameters passed
        here will be specific to the particular deck.gl layer that you are choosing to use.

        Please see the deck.gl
        `Layer catalog <https://deck.gl/docs/api-reference/layers>`_
        to determine the particular parameters of your layer. You are highly encouraged to look
        at the examples in the pydeck documentation.

        Parameters
        ==========

        type : str
            Type of layer to render, e.g., `HexagonLayer`
        id : str, default None
            Unique name for layer
        data : str or list of dict of {str: Any} or pandas.DataFrame, default None
            Either a URL of data to load in or an array of data
        use_binary_transport : bool, default None
            Boolean indicating binary data
        **kwargs
            Any of the parameters passable to a deck.gl layer.

        Examples
        ========

        For example, here is a HexagonLayer which reads data from a URL.

          >>> import pydeck
          >>> # 2014 location of car accidents in the UK
          >>> UK_ACCIDENTS_DATA = ('https://raw.githubusercontent.com/uber-common/'
          >>>                     'deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv')
          >>> # Define a layer to display on a map
          >>> layer = pydeck.Layer(
          >>>     'HexagonLayer',
          >>>     UK_ACCIDENTS_DATA,
          >>>     get_position=['lng', 'lat'],
          >>>     auto_highlight=True,
          >>>     elevation_scale=50,
          >>>     pickable=True,
          >>>     elevation_range=[0, 3000],
          >>>     extruded=True,
          >>>     coverage=1)

        Alternately, input can be a pandas.DataFrame:

          >>> import pydeck
          >>> df = pd.read_csv(UK_ACCIDENTS_DATA)
          >>> layer = pydeck.Layer(
          >>>     'HexagonLayer',
          >>>     df,
          >>>     get_position=['lng', 'lat'],
          >>>     auto_highlight=True,
          >>>     elevation_scale=50,
          >>>     pickable=True,
          >>>     elevation_range=[0, 3000],
          >>>     extruded=True,
          >>>     coverage=1)
        r    r   z{}z{}, z{}[{}]N)typestruuiduuid4id_add_default_layer_attributescopy_kwargsitems
isinstanceQUOTE_CHARSreplacer   validateFUNCTION_IDENTIFIERlist	enumeratelenformatr   	serialize__dict__update_datause_binary_transport_binary_datadata)selfr   r.   r   r,   kwargskvarray_as_stri
identifiers              J/var/www/openai/venv/lib/python3.12/site-packages/pydeck/bindings/layer.py__init__zLayer.__init__   s   v 	)DJJL)33F; {{}1 a%!A$+*=!A$!B%- !		!A$ 3F1I3'ENN1,= %aF1I3' 3a 7F1I4(Q"WAaD#9N#%L)21:A
?(DKK
,CCL(FMM*,EEL	 *6
 !)0C\ RF1I8, !F1I5 '8 MM  (
$8! 	    c                     | j                   S N)r+   r/   s    r6   r.   z
Layer.dataz   s    zzr8   c                     | j                   r| j                  |      | _        yt        |      r|j	                  d      | _        yt        |      rt        |      | _        y|| _        y)zMake the data attribute a list no matter the input type, unless
        use_binary_transport is specified, which case we circumvent
        serializing the data to JSON
        records)orientN)r,   _prepare_binary_datar-   r   to_dictr+   r   r   )r/   data_sets     r6   r.   z
Layer.data~   sX     $$ $ 9 9( CD(#!)));DJx(3H=DJ!DJr8   c                 H    | j                   st        d      | j                  S )Nz6Layer must be flagged with `use_binary_transport=True`)r,   r   r-   r;   s    r6   get_binary_datazLayer.get_binary_data   s#    ((*+cdd   r8   c           	         t        |      st        d      | j                  }|j                         D ci c]%  \  }}t	        |      t
        t        t        fvs#||' }}}g }|j                  D ]d  }t        j                  ||   j                               }| j                  ||   = |j                  | j                  |t        ||         |d       f |S c c}}w )Nz,Layer data must be a `pandas.DataFrame` type)layer_idcolumn_nameaccessornp_data)r   r   r   r   r   r$   dictsetcolumnsnpstackto_numpyr)   appendr   r	   )	r/   rA   layer_accessorsr1   r2   inverted_accessor_mapbinary_transmissioncolumnrH   s	            r6   r?   zLayer._prepare_binary_data   s     H%*+YZZ,,2A2G2G2I n2I$!QTRSW]acgil\mMmA2I n &&Fhhx/88:;G3F;<&& $#) /0Ef0M N&	 ' #"# !os   $CCc                 "    t        | t              S r:   )getattrTYPE_IDENTIFIERr;   s    r6   r   z
Layer.type   s    t_--r8   c                 0    | j                  t        |       y r:   )__setattr__rV   )r/   	type_names     r6   r   z
Layer.type   s    )4r8   c                     t         j                  }t        |t              r>| j                  |v r0t        || j                     t              ri || j                     |}|S r:   )pydeck_settingsdefault_layer_attributesr   rI   r   )r/   r0   
attributess      r6   r   z#Layer._add_default_layer_attributes   sV    $==
j$'DII,C
S]^b^g^gShjnHo8
499-88Fr8   )NNN)__name__
__module____qualname__r7   propertyr.   setterrC   r?   r   r    r8   r6   r   r      sp    eN   
[[" "!
#4 . . 
[[5 5r8   r   )r   numpyrL   
data_utilsr   r   r   
json_toolsr   r	   r
   r[   pydeck.typesr   r   pydeck.exceptionsr   rV   r#   r    r   rc   r8   r6   <module>ri      s=      T T 2 2 ( 6  hI hr8   