
    -e!                    "   d Z ddl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mZmZ ddlmZ dd	lmZ erddlZd
Zd0d1dZd2dZd3dZd4dZddd5dZd6d!Zd4d"Zd7d#Zd8d&Zd9d'Zd:d)Z d;d5d*Z!d0d<d-Z"e#d.k    r ed/           dS dS )=z> Helper functions for downloading and accessing sample data.

    )annotationsNsplitext)Path)stdout)TYPE_CHECKINGAnyTextIO)urljoin)urlopen)downloadTprogressboolreturnNonec                (   t          d          }t          d|            d}t                                                      D ]\  }}|t	          |          z  }|                                r|t          |d          5 }|                                }ddd           n# 1 swxY w Y   t          j	        |          
                                }||k    rt          d|d           t          d	|           t          |||| 
           dS )z< Download larger data sets for various Bokeh examples.

    TcreatezUsing data directory: zhttp://sampledata.bokeh.orgrbNz	Skipping z (checksum match)z	Fetching r   )external_data_dirprintmetadataitems	real_nameexistsopenreadhashlibmd5	hexdigest_download_file)	r   data_dirs3	file_namer    	real_pathfiledata	local_md5s	            5lib/python3.11/site-packages/bokeh/util/sampledata.pyr   r   2   sl    !---H	
-8
-
-... 
'B"****,, C C	3y333	 	i&& #$yy{{# # # # # # # # # # # # # # #D))3355IC@)@@@AAA')''(((r9hBBBBBC Cs    B!!B%	(B%	namestrc                n    t          |           \  }}|dk    rt          |          d         s| dS |S | S )N.zip   .csvr   )r+   r   exts      r*   r   r   N   sI    d^^NIs
f}}	""1% 	%%%%    dict[str, str]c                     t          t                    j        dz                      d          5 } t	          t          j        |                     cd d d            S # 1 swxY w Y   d S )Nzsampledata.jsonr   )r   __file__parentr   dictjsonload)fs    r*   r   r   X   s    
x..
"3
3	9	9$	?	? "1DIaLL!!" " " " " " " " " " " " " " " " " "s   !AA"%A"modulekwr	   pd.DataFramec                @    dd l } |j        t          |          fi |S Nr   )pandasread_csvexternal_pathr;   r+   r<   pds       r*   external_csvrE   \   s0    2;}T**11b111r2   Fr   r   r   c                N   	 dd l }n# t          $ r t          d          w xY wt          |           }|dz  }	 |                    t          |dz                      }t          j        |d                   }n# t          t          f$ r Y nw xY w|
                                sZ| st          d          t          d| d	           	 |                                 nF# t          $ r t          d
|           w xY w|                                st          | d          |S )Nr   zB'yaml' and 'pyyaml' are required to use bokeh.sampledata functionsr   r(   configsampledata_dirzVbokeh sample data directory does not exist, please execute bokeh.sampledata.download()	Creating 
 directoryz)could not create bokeh data directory at  exists but is not a directory)yamlImportErrorRuntimeError
_bokeh_dir	safe_loadr   r   
expanduserOSError	TypeErrorr   r   mkdiris_dir)r   rL   	bokeh_dirr#   rG   s        r*   r   r   `   s   a a a a_```a &)))I6!HY%9 : :;;?6*:#;<<Y    ?? 
L 	ywxxx.(...///	WNN 	W 	W 	WU8UUVVV	W    	L(JJJKKKOs%    !?A: :BB
C C<r%   c                   t                      }|| z  }|                                r|                                st          d| d          t	          |d          5 }t                      }|                    |           pB|                    |  d          p*|                    t          |           d          d          }|t          d|            t          j	        |
                                                                          }||k    rt          d| d          	 d d d            n# 1 swxY w Y   |S )	Nz$Could not locate external data file z,. Please execute bokeh.sampledata.download()r   r.   r   zUnknown external data file zExternal data file z8 is outdated. Please execute bokeh.sampledata.download())r   r   is_filerN   r   r   getr   r   r    r   r!   )r%   r#   	file_pathr'   meta	known_md5r)   s          r*   rB   rB   }   s    ""H9$I {Y%6%6%8%8 {y)yyyzzz	i		 
z$zzHHY'' >HH	///00>HH 3 3A 6<<<== 	 HYHHIIIK		,,6688		!!xYxxxyyy "
z 
z 
z 
z 
z 
z 
z 
z 
z 
z 
z 
z 
z 
z 
z s   CD88D<?D<c                @    dd l } |j        t          |          fi |S r?   )r@   rA   package_pathrC   s       r*   package_csvr_      s0    2;|D))00R000r2   c                     t          t                    j        d                             dd                                          S )Nr/   
sampledata_data)r   r5   parentsjoinpathresolve r2   r*   package_dirrg      s2    >>!!$--lGDDLLNNNr2   filename
str | Pathc                $    t                      | z  S )N)rg   rh   s    r*   r^   r^      s    ==8##r2   c                ~    t          | d          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )Nr   )r   r8   r9   )rh   r:   s     r*   	load_jsonrm      s~    	h		 y||                 s   266r
   c                &    t          | dd          S )N utf8)newlineencoding)r   rk   s    r*   open_csvrs      s    "v6666r2   c                \   t          d                                          dz  }|                                sM| s|S t          d| d           	 |                                 nF# t
          $ r t          d|           w xY w|                                st          | d          |S )N~z.bokehrI   rJ   z+could not create bokeh config directory at rK   )r   rQ   r   r   rT   rR   rN   rU   )r   rV   s     r*   rO   rO      s    S		$$&&1I 	M'i'/)///000	ZOO 	Z 	Z 	ZXYXXYYY	Z !! 	M)KKKLLLs   A& &Bbase_urlr#   c                R   ddl m} t          | |          }||z  }t          |          }t	          |d          5 }t          |j        d                   }	t          d| d|	 d           d}
d}	 |                    |          }|snb|
t          |          z  }
|
                    |           |r8d
|
dd|
dz  |	z  dd}t          j
        |           t          j                     z	 d d d            n# 1 swxY w Y   |rt                       t          |          \  }}|dk    r|t          |          d         s|dz  }t          d|             ||d          5 }|                    ||           d d d            n# 1 swxY w Y   |                                 d S d S )Nr   )ZipFilewbzContent-LengthzDownloading: z (z bytes)i @  Tz< 10dz [g      Y@z6.2fz%%]r.   r/   r0   zUnpacking: r)zipfilerx   r   r   r   intheadersr   r   lenwriter   flushr   extractunlink)rv   rh   r#   r   rx   file_urlrZ   urlr'   	file_size
fetch_size
block_sizer(   statusr   r1   zip_files                    r*   r"   r"      su     x**H8#I
(

C	i		 $$4566	<h<<)<<<===

	88J''D #d))#JJJt VjVVV*U2B92LVVVVV$$$	               (  h''NIs
f}}	""1% 	 I'I''(((WY$$ 	2Y111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	 }s$   B0C88C<?C<#FF
F
__main__r   )T)r   r   r   r   )r+   r,   r   r,   )r   r3   )r;   r,   r+   r,   r<   r	   r   r=   )r   r   r   r   )r%   r,   r   r   )r   r   )rh   ri   r   r   )rh   ri   r   r	   )rh   ri   r   r
   )F)
rv   r,   rh   r,   r#   r   r   r   r   r   )$__doc__
__future__r   r   r8   os.pathr   pathlibr   sysr   typingr   r	   r
   urllib.parser   urllib.requestr   r@   rD   __all__r   r   r   rE   r   rB   r_   rg   r^   rm   rs   rO   r"   __name__rf   r2   r*   <module>r      s&    # " " " " "                     - - - - - - - - - -             " " " " " "
  C C C C C8   " " " "2 2 2 2 ).      :   $1 1 1 1O O O O$ $ $ $   7 7 7 7    - - - - -j zHe r2   