
    ue$                         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mZ d Zdej        v Z G d de          ZdS )    N   )	JSONMixin)Layer   )deck_to_html)settings)View)	ViewState)BaseMapProvider)DARKget_from_map_identifierc                  J    	 ddl m}   |              dS # t          $ r Y dS w xY w)Nr   DeckGLWidgetTF)widgetr   ImportErrorr   s    4lib/python3.11/site-packages/pydeck/bindings/deck.pyhas_jupyter_extrar      sK    ))))))t   uus    
""zgoogle.colabc                       e Zd Zd edd          ged eddd          dd	dddej        j        dfd
Z	e
d             ZddefdZd Zd Z	 	 	 	 	 	 	 ddZd ZdS )DeckNMapViewT)type
controllerr   r   )latitude	longitudezoom100%  c                    g | _         t          |t                    r| j                             |           n	|pg | _         || _        || _        |pi }|	| _        |
| _        |r!t          |          	                                nd| _
        || _        t                      rqddlm}  |            | _        t           j        | j        _        t           j        | j        _        || j        _        || j        _        || j        _        || j        _
        |                     |           d}t          |t.                    r'|t0          j        j        k    s
J |            || _        nt9          ||          | _        || _        dS )a  This is the renderer and configuration for a deck.gl visualization, similar to the
        `Deck <https://deck.gl/docs/api-reference/core/deck>`_ class from deck.gl.
        Pass `Deck` a Mapbox API token to display a basemap; see the notes below.

        Parameters
        ----------

        layers : pydeck.Layer or list of pydeck.Layer, default None
            List of :class:`pydeck.bindings.layer.Layer` layers to render.
        views : list of pydeck.View, default ``[pydeck.View(type="MapView", controller=True)]``
            List of :class:`pydeck.bindings.view.View` objects to render.
        api_keys : dict, default None
            Dictionary of geospatial API service providers, where the keys are ``mapbox``, ``google_maps``, or ``carto``
            and the values are the API key. Defaults to None if not set. Any of the environment variables
            ``MAPBOX_API_KEY``, ``GOOGLE_MAPS_API_KEY``, and ``CARTO_API_KEY`` can be set instead of hardcoding the key here.
        map_provider : str, default 'carto'
            If multiple API keys are set (e.g., both Mapbox and Google Maps), inform pydeck which basemap provider to prefer.
            Values can be ``carto``, ``mapbox`` or ``google_maps``
        map_style : str or dict, default 'dark'
            One of 'light', 'dark', 'road', 'satellite', 'dark_no_labels', and 'light_no_labels', a URI for a basemap
            style, which varies by provider, or a dict that follows the Mapbox style `specification <https://docs.mapbox.com/mapbox-gl-js/style-spec/>`.
            The default is Carto's Dark Matter map. For Mapbox examples, see  Mapbox's `gallery <https://www.mapbox.com/gallery/>`.
            If not using a basemap, set ``map_provider=None``.
        initial_view_state : pydeck.ViewState, default ``pydeck.ViewState(latitude=0, longitude=0, zoom=1)``
            Initial camera angle relative to the map, defaults to a fully zoomed out 0, 0-centered map
            To compute a viewport from data, see :func:`pydeck.data_utils.viewport_helpers.compute_view`
        height : int, default 500
            Height of Jupyter notebook cell, in pixels.
        width : int` or string, default '100%'
            Width of visualization, in pixels (if a number) or as a CSS value string.
        tooltip : bool or dict of {str: str}, default True
            If ``True``/``False``, toggles a default tooltip on visualization hover.
            Layers must have ``pickable=True`` set in order to display a tooltip.
            For more advanced usage, the user can pass a dict to configure more custom tooltip features.
            Further documentation is `here <tooltip.html>`_.

        .. _Deck:
            https://deck.gl/docs/api-reference/core/deck
        .. _gallery:
            https://www.mapbox.com/gallery/
        Nr   r   zQThe map_provider parameter must be 'mapbox' when map_style is provided as a dict.)layers
isinstancer   appendviewsinitial_view_statedescriptioneffectsstrlowermap_provider_tooltipr   r   r   deck_widgetpydeck_settingscustom_librariesconfigurationheightwidthtooltip_set_api_keysdictr   MAPBOXvalue	map_styler   
parameters)selfr    r#   r6   api_keysr$   r0   r/   r1   r%   r&   r)   r7   r   custom_map_style_errors                  r   __init__zDeck.__init__   s~   p fe$$ 	'Kv&&&& ,BDK
"4>r&9EOC--335554 
	9------+|~~D0?0PD--<-JD*&,D#%*D"'.D$,8D)8$$$!ti&& 	N?#9#????AW???&DNN4YMMDN$    c                 6    | j         j        sd S | j         j        S N)r+   selected_datar8   s    r   r?   zDeck.selected_data|   s!    - 	4--r<   r9   c                 4   |D ]}|ot          |           t           D ]y}|j         d}|j         d}|                    |j                  pt	          j        |          }t          | ||           t                      rt          | j        ||           zdS )zQSets API key for base map provider for both HTML embedding and the Jupyter widget_key_API_KEYN)	r   r5   namegetosgetenvsetattrr   r+   )r8   r9   kprovider	attr_nameprovider_env_var
attr_values          r   r2   zDeck._set_api_keys   s     	% 	%A$/!$$' 	A 	AH#>///I"*-999!hn55TCS9T9TJD)Z000 "" A()Z@@@	A 	Ar<   c                 v    t           r|                     d           dS |                                  | j        S )z2Display current Deck object for a Jupyter notebookTnotebook_displayN)in_google_colabto_htmlupdater+   r@   s    r   showz	Deck.show   s:     	$LL$L/////KKMMM##r<   c                    t                      st          d          |                                 | j        _        d}g }| j        D ]2}|j        r)|                    |                                           d}3|r|| j        _	        dS dS )a  Update a deck.gl map to reflect the current configuration

        For example, if you've modified data passed to Layer and rendered the map using `.show()`,
        you can call `update` to change the data on the map.

        Intended for use in a Jupyter environment.
        zbInstall the Jupyter extra for pydeck with your package manager, e.g. `pip install pydeck[jupyter]`FTN)
r   r   to_jsonr+   
json_inputr    use_binary_transportextendget_binary_datadata_buffer)r8   
has_binarybinary_data_setslayers       r   rS   zDeck.update   s     !"" 	t   '+llnn#
[ 	" 	"E) " ''(=(=(?(?@@@!
 	<+;D(((	< 	<r<   Fc                     |                                  }	t          |	f| j        | j        |||||| j        t
          j        t
          j        ||d|}
|
S )a  Write a file and loads it to an iframe, if in a Jupyter environment;
        otherwise, write a file and optionally open it in a web browser

        Parameters
        ----------
        filename : str, default None
            Name of the file.
        open_browser : bool, default False
            Whether a browser window will open or not after write.
        notebook_display : bool, default None
            Display the HTML output in an iframe if True. Set to True automatically if rendering in Jupyter.
        iframe_width : str or int, default '100%'
            Width of Jupyter notebook iframe in pixels, if rendered in a Jupyter environment.
        iframe_height : int, default 500
            Height of Jupyter notebook iframe in pixels, if rendered in Jupyter or Colab.
        as_string : bool, default False
            Returns HTML as a string, if True and ``filename`` is None.
        css_background_color : str, default None
            Background color for visualization, specified as a string in any format accepted for CSS colors.

        Returns
        -------
        str
            Returns absolute path of the file
        )
mapbox_keygoogle_maps_keyfilenameopen_browserrP   iframe_heightiframe_widthr1   r-   r.   	as_stringoffline)rV   r   r`   ra   r*   r,   r-   r.   )r8   rb   rc   rP   re   rd   rf   rg   kwargs	deck_jsonfs              r   rR   zDeck.to_html   sp    H LLNN	
 0%-'%M,=)7
 
 
 
  r<   c                 P    |                      d          }t          |dd          S )NTrO   data )rR   getattr)r8   htmls     r   _repr_html_zDeck._repr_html_   s)     ||T|22tVR(((r<   r>   )NFNr   r   FF)__name__
__module____qualname__r	   r   r
   r   CARTOr5   r;   propertyr?   r3   r2   rT   rS   rR   rp    r<   r   r   r      s        tt4445$9a11EEE$*0^% ^% ^% ^%@ . . X.

A 
Ad 
A 
A 
A 
A$ $ $< < <0 5 5 5 5n) ) ) ) )r<   r   )rF   sys
json_toolsr   r^   r   io.htmlr   r   r,   viewr	   
view_stater
   base_map_providerr   
map_stylesr   r   r   modulesrQ   r   rv   r<   r   <module>r      s   				 



 ! ! ! ! ! !       " " " " " " 2 2 2 2 2 2       ! ! ! ! ! ! . . . . . . 5 5 5 5 5 5 5 5   !CK/L) L) L) L) L)9 L) L) L) L) L)r<   