
    ue                         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dS )    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
dS )LayerNc                    || _         |pt          t          j                              | _        |                     |          }|                                | _        |r|                                D ]\  }}t          |t                    rA|d         t          v r2|d         |d         k    r |                    |d         d          ||<   \t          |t                    r't          j        |          rt          |          ||<   t          |t                    rt          |z   ||<   t          |t                    r|g k    rt          |d         t                    r~d}t!          |          D ]L\  }	}
|	t#          |          dz
  k    r|d                    |
          z  }4|d                    |
          z  }Md                    t          |          ||<   ot          |t&                    r|                                ||<   | j                            |           d| _        || _        d| _        || _        dS )	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              5lib/python3.11/site-packages/pydeck/bindings/layer.py__init__zLayer.__init__   s   v 	)DJLL))33F;; {{}} 	) . .1 a%% .!A$+*=*=!A$!B%-- !		!A$ 3 3F1II3'' .EN1,=,= . %aF1II3'' . 3a 7F1II4(( 
.Q"WWAaD#9N9NW#%L)21 F F:A
??(DKK
,C,CCLL(FMM*,E,EELL (0C\ R RF1II8,, . !F1IM  (((
$8! 			    c                     | j         S N)r+   r/   s    r6   r.   z
Layer.dataz   s
    zr8   c                     | j         r|                     |          | _        dS t          |          r|                    d          | _        dS t          |          rt          |          | _        dS || _        dS )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~   s     $ 	" $ 9 9( C CD(## 	"!)));;DJJJx(( 	"3H==DJJJ!DJJJr8   c                 <    | 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&    ( 	e*+cddd  r8   c           	      |   t          |          st          d          | j        }d |                                D             }g }|j        D ]n}t          j        ||                                                   }| j        ||         = |	                    | j
        |t          ||                   |d           o|S )Nz,Layer data must be a `pandas.DataFrame` typec                 `    i | ]+\  }}t          |          t          t          t          fv(||,S  )r   r$   dictset).0r1   r2   s      r6   
<dictcomp>z.Layer._prepare_binary_data.<locals>.<dictcomp>   s9     n n n$!QTRSWW]acgil\mMmMmAMmMmMmr8   )layer_idcolumn_nameaccessornp_data)r   r   r   r   columnsnpstackto_numpyr)   appendr   r	   )r/   rA   layer_accessorsinverted_accessor_mapbinary_transmissioncolumnrN   s          r6   r?   zLayer._prepare_binary_data   s     H%% 	[*+YZZZ, n n/2G2G2I2I n n n & 	 	Fhx/88::;;G3F;<&& $#) /0Ef0M N N&	     #"r8   c                 ,    t          | t                    S r:   )getattrTYPE_IDENTIFIERr;   s    r6   r   z
Layer.type   s    t_---r8   c                 <    |                      t          |           d S r:   )__setattr__rZ   )r/   	type_names     r6   r   z
Layer.type   s    )44444r8   c                     t           j        }t          |t                    r:| j        |v r1t          || j                 t                    ri || j                 |}|S r:   )pydeck_settingsdefault_layer_attributesr   rG   r   )r/   r0   
attributess      r6   r   z#Layer._add_default_layer_attributes   s]    $=
j$'' 	9DI,C,C
S]^b^gShjnHoHo,C8
49-88Fr8   )NNN)__name__
__module____qualname__r7   propertyr.   setterrC   r?   r   r   rF   r8   r6   r   r      s        e e e eN   X 
[" " ["! ! !
# # #4 . . X. 
[5 5 [5    r8   r   )r   numpyrP   
data_utilsr   r   r   
json_toolsr   r	   r
   r_   pydeck.typesr   r   pydeck.exceptionsr   rZ   r#   r    r   rF   r8   r6   <module>rl      s         T T T T T T T T T T 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ( ( ( ( ( ( ( ( 6 6 6 6 6 6  ooh h h h hI h h h h hr8   