
    ɯei_2                     D   d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* dd	d
ddddddddddddZ+e+d   de+d   de+d   de+d   de+d   d e+d!   d"e+d#   d$e+d%   d&e+d'   d(e+d)   d*e+d+   d,e+d-   d.e+d/   d0e+d1   d2iZ,d3e-fd4Z.d5e/d6e/d7d8fd9Z0d5e/d6e/d:e	d;e	fd<Z1	 dJd=ee-e2f   fd>Z3d?e-d=e4fd@Z5d?e-d=e-fdAZ6dBefdCZ7dDee-ee-   f   dEe-dFe-d=e-fdGZ8 G dH dI      Z9y)K    N)
cmp_to_keypartial)AnyCallableIterableOptionalSetTupleUnion)parse_table_name
quote_name)pandas)ColumnEmulator)	ArrayType
BinaryTypeBooleanTypeByteTypeDateTypeDecimalType
DoubleType	FloatTypeIntegerTypeLongTypeMapTypeNullType	ShortType
StringTypeTimestampTypeTimeTypeVariantType_NumericTypez%<snowflake-regex-placeholder-for-dot>z+<snowflake-regex-placeholder-for-backslash>z'<snowflake-regex-placeholder-for-caret>z*<snowflake-regex-placeholder-for-question>z%<snowflake-regex-placeholder-for-add>z&<snowflake-regex-placeholder-for-pipe>z(<snowflake-regex-placeholder-for-dollar>z*<snowflake-regex-placeholder-for-asterisk>z4<snowflake-regex-placeholder-for-left-curly-bracket>z5<snowflake-regex-placeholder-for-right-curly-bracket>z5<snowflake-regex-placeholder-for-left-square-bracket>z6<snowflake-regex-placeholder-for-right-square-bracket>z2<snowflake-regex-placeholder-for-left-parenthesis>z3<snowflake-regex-placeholder-for-right-parenthesis>).\^?+|$*{}[]()r"   z\.r#   z\\r$   z\^r%   z\?r&   z\+r'   z\|r(   z\$r)   z\*r*   z\{r+   z\}r,   z\[r-   z\]r.   z\(r/   z\)wildcardc                    t         j                         D ]  \  }}| j                  ||      }  | j                  dd      } | j                  dd      } t        j                         D ]  \  }}| j                  ||      }  d|  d} | S )N_r"   %z.*r$   r(   )regex_special_characters_mapitemsreplace#escape_regex_special_characters_map)r0   kvs      _/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/snowflake/snowpark/mock/_util.pyconvert_wildcard_to_regexr;   L   s    ,224 *1##Aq)* S)HT*H 499; *1##Aq)* 8*AHO    ascend
null_firstpandas_seriesz	pd.Seriesc           	      l   |j                   j                         }t        t        t	        t        |            D cg c]  }| c}|            }t        t        | |      }|j                  t        |             dgt        |      z  }t	        t        |            D ]  }||||   d   <    |S c c}w )N)keyr   )
valuestolistlistziprangelenr   array_custom_comparatorsortr   )r=   r>   r?   origin_arrayiarray_with_pos
comparatornew_poss           r:   custom_comparatorrO   ]   s     ''..0L#%M0B*CDQqDlSTN0&*EJJz23cC''G3~&' *()q!!$%*N Es   	B1abc                 N   |d   |d   }}||k(  ry||rdS dS ||rdS dS 	 t        j                  |      rt        j                  |      ryt        j                  |      rd}n!t        j                  |      rd}n	||k  rdnd}| r|S d|z  S # t        $ r ||k  rdnd}Y w xY w)N   r   )mathisnan	TypeError)r=   r>   rP   rQ   value_avalue_brets          r:   rH   rH   h   s    tQqTWG'r&Q&	q&B&
-::g4::g#6ZZ CZZ C')"qC 3&b3h&  -g%b1-s   *B 9B B$#B$returnc                    | xs |}|j                         }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }d}d|v rt	 t        |      j                  d      }t        ||dz   |dz          j	                         r&t        ||dz   |dz          }|d| dz   ||dz   d z   }n|d| dz   ||dz   d z   }||rdfS |fS # t        $ r Y w xY w)a  
    unified processing of the time format
    converting snowflake date/time/timestamp format into python datetime format

    usage notes on the returning fractional seconds:
        fractional seconds does not come into effect when parsing input, see following sql
            alter session set TIME_OUTPUT_FORMAT = 'HH:MI:SS.FF9';
            select to_time('11:22:44.333333', 'HH:MI:SS.FF1');
         it still returns '11:22:44.333333' not '11:22:44.3'
         however fractional seconds is used in controlling the output format
    YYYYz%YMMz%mMONz%bDDz%dHH24z%HHH12z%IAMz%pPMMIz%MSSz%STZHTZMz%zTZH	   FF      Nz%f)upperr6   strindexisdigitint
ValueError)formatdefault_formatis_input_formatformat_to_usetime_fmtfractional_secondsff_indexs          r:   !convert_snowflake_datetime_formatrz   ~   s    ,nM""$H-Hd+Ht,Hd+H-H-Hd+Hd+Hd+Hd+H$/Ht,H}	8}**40H8HqL8a<89AAC%((Q,A)N%O"#IX.5A8PP#IX.5A8PP /QAA/AAA  		s   6A3E2 2	E>=E>timec                     t        |       }d|cxk  rdk  rn n|dz  }t        |      S d|cxk  rdk  rn n|dz  }t        |      S |dk\  r|dz  }t        |      S )z
    deal with time of numeric values, convert the time into value that Python datetime accepts
    spec here: https://docs.snowflake.com/en/sql-reference/functions/to_time#usage-notes

    l    ,b/ l    `'ri  l     F[L'i@B i ʚ;)float)r{   timestamp_valuess     r:   -convert_numeric_string_value_to_float_secondsr      s     T{&77+d2 !"" 
+	?.?	?+g5
 !""	 
.	.+j8!""r<   c                 8   t        |       }|j                  d      }t        |      dk(  ro|d   }d}|t        |      k  r:||   j                         r'|dz  }|t        |      k  r||   j                         r'|d t	        ||d       ||d  z   }|d    d| }|S )Nr"   rk   rS   r      )rn   splitrG   rp   min)r{   rx   rZ   
time_partsseconds_partidxs         r:   +process_string_time_with_fractional_secondsr      s    
d)C3J
:!!!}C%%,s*;*C*C*E1HC C%%,s*;*C*C*E :3s$6:;l34>PP 	 Aq/Jr<   colc                    dd l }t        | j                  j                  t              r"| j                  d       j                         r| S 	 i t        t        t        t        t        t        t        | j                  j                  s|j                  ndt        t        t         |j"                  t$        |j"                  t&        |j"                  t(        | j                  j                  s|j*                  ndt,        | j                  j                  s|j*                  ndt.        t        t0        | j                  j                  s|j                  ndt2        t        t4        t        t6        t        t8        t        t:        t        }|j=                  t?        | j                  j                        t              }| jA                  |d      } | S )Nr   c                 
    | d u S N )xs    r:   <lambda>z<fix_drift_between_column_sf_type_and_dtype.<locals>.<lambda>   s
    T	 r<   Int8Int64ignore)errors)!numpy
isinstancesf_typedatatyper!   applyanyr   objectr   r   boolr   nullableint8r   r   float64r   r   r   int64r   r   r   r   r   r   r    r   gettypeastype)r   r   sf_type_to_dtype
fixed_types       r:   *fix_drift_between_column_sf_type_and_dtyper      s    	3;;''6II)*..0
&6F 	T 	CKK$8$8%**f	
 	& 	U]] 	EMM 	5== 	(<(<U[[' 	S[[%9%9%++w 	& 	S[[%9%95::v 	F 	v 	&  	V!" 	#& "%%d3;;+?+?&@&IJ
**Z*
1CJr<   namecurrent_schemacurrent_databasec                     t        | t              rt        |       } t        |       dk(  r|g| z   } t        |       dk(  r|g| z   } dj	                  d | D              S )NrS   rk   r"   c              3   2   K   | ]  }t        |        y wr   )r   ).0ns     r:   	<genexpr>z+get_fully_qualified_name.<locals>.<genexpr>  s     0aJqM0s   )r   rn   r   rG   join)r   r   r   s      r:   get_fully_qualified_namer   	  s]     $%
4yA~$&
4yA~ !D(8804000r<   c                   .    e Zd Zdee   ddfdZd Zd Zy)ImportContextimportsr[   Nc                      || _         d | _        y r   )_imports	_callback)selfr   s     r:   __init__zImportContext.__init__  s    -1r<   c           	          t        j                         t        j                  j	                  d      j
                  t        j                  d<   t        t        j                  j                               t        t        j                         fd}| _        	  j                  D ]  }|t        j                  vrt        j                  j                  |       t        j                  j                  |      r7t!        j"                  |j
                  dt!        j$                  d             t!        j&                  |j
                          y # t(        $ r  j                           w xY w)Nsnowflake_import_directoryc                     t        t        j                        t              z
  } j                  D ]&  }|| v st        j                  j	                  |       ( t        t        j
                  j                               z
  }|D ]  }t        j
                  |=  j                          t        j                  d<   y t        j                  d= y )Nr   )	setsyspathr   removemoduleskeyscleanup	_xoptions)	
added_pathmodule_path
added_keysrA   frozen_sys_module_keysfrozen_sys_pathlast_import_directoryr   temporary_import_paths	       r:   cleanup_importsz0ImportContext.__enter__.<locals>.cleanup_imports%  s    SXX_)==J#}} 1*,HHOOK01
 S[[--/03IIJ! %KK$% "))+ %0>S:;MM">?r<   T__pycache__)dirs_exist_okr   )tempfileTemporaryDirectoryr   r   r   r   r   r   r   rD   r   r   r   appendosisdirshutilcopytreeignore_patternscopy2BaseException)r   r   r   r   r   r   r   s   `  @@@@r:   	__enter__zImportContext.__enter__  s    ( ; ; = # 1 12N O6K6P6P23 "%S[[%5%5%7!8sxx.	@ 	@( )	#}} Jchh.HHOOK077==-OO#-22&*%55mD	 LL.C.H.HIJ  	NN	s   'B8E   E;c                 $    | j                          y r   )r   )r   r   value	tracebacks       r:   __exit__zImportContext.__exit__M  s    r<   )__name__
__module____qualname__r	   rn   r   r   r   r   r<   r:   r   r     s$    2C 2T 21fr<   r   )T):rU   r   r   r   r   	functoolsr   r   typingr   r   r   r   r	   r
   r   "snowflake.snowpark._internal.utilsr   r    snowflake.snowpark.mock._optionsr   pd,snowflake.snowpark.mock._snowflake_data_typer   snowflake.snowpark.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r4   r7   rn   r;   r   rO   rH   rq   rz   r}   r   r   r   r   r   r   r<   r:   <module>r      s  
  	  
  ) G G G K 9 G    4 
1
7	2	5	0	1	3	5	?	@	@	A	=	>  $ !%u & %u %u %u %u %u %u %u %u %u %u %u %u' #$ "d  [ 'D 'd 's 's '. -1.B
38_.Bb# # #(c RU &0N 0f	1
Xc]"
#	158	1LO	1	19 9r<   