
    I>qj8                        d dl m Z mZmZ d dlZd dlZ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 d dlZd dlmZmZmZmZmZ d dlmZ ej8                  j:                  d        Zd Zd Z d	 Z!d
 Z"d Z#d Z$d Z% ejL                  dd fejN                  jQ                  d      d fg      d        Z)d Z*d Z+ej8                  jY                  dddg      d        Z-d Z.ej8                  jY                  dg d      d        Z/d Z0d Z1d  Z2ej8                  jY                  dg d!      d"        Z3d# Z4d$ Z5ej8                  jm                  e d%&      ej8                  jY                  dg d'      d(               Z7ej8                  jY                  dg d'      d)        Z8ej8                  jY                  d*g d+      d,        Z9d- Z:d. Z;y)/    )datetime	timedeltatimezoneN)
conversion	timezones)IS64is_platform_windows)Index	Timedelta	Timestamp
date_rangeto_datetimec                      d} t        j                  d|  d      }t        j                  t        j
                  d|g       y )Nz-'No time zone found with key Europe/Brussels'a/          import sys, zoneinfo, pandas as pd
        sys.modules['tzdata'] = None
        zoneinfo.reset_tzpath(['/path/to/nowhere'])
        try:
            pd.to_datetime('2012-01-01').tz_localize('Europe/Brussels')
        except zoneinfo.ZoneInfoNotFoundError as err:
            assert str(err) == "z
"
        z-c)textwrapdedent
subprocess
check_callsys
executable)msgcodes     a/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/pandas/tests/tslibs/test_timezones.pytest_no_timezone_datar   #   sH     :C??! "% &		
D 3>>467    c                 \    t        j                  |       }t        j                  |      sJ y N)r   maybe_get_tzis_utc)utc_fixturetzs     r   test_is_utcr!   6   s&    				,BBr   c                  X   t        j                  d      } | j                  D ]/  }t        j                  |      }t        j                  d|z         }1 t        j
                  dz          dk(  r
t               s.t        j                        t        j                  |      k7  sJ y y )Npytzz	dateutil/z': dateutil does not know about this oneUTC)pytestimportorskipcommon_timezonesr   r   skipr	   _p_tz_cache_key)r#   tz_nametz_ptz_ds       r   1test_cache_keys_are_distinct_for_pytz_vs_dateutilr-   ;   s    v&D(( =%%g.%%kG&;<= |GGGHu!4!6((.)2K2KD2QQQQ "7r   c                      t        dt        j                  j                               } | j                  t        j                  j                         k(  sJ dt	        |       v sJ y )N
2011-01-01r    ztz='tzlocal()'))r   dateutilr    tzlocalrepr)tss    r   test_tzlocal_reprr5   I   sL    	<HKK$7$7$9	:B55HKK''))))R(((r   c                  t    t        j                  d      } | t        j                  j	                         k(  sJ y )Nz	tzlocal())r   r   r1   r    r2   r0   s    r   test_tzlocal_maybe_get_tzr7   P   s-    				,B$$&&&&r   c                  p   t        dt        j                  j                               j	                  d      } t        j                  j                         j                  t        ddd            }|j                         }| j                  |z   t        d      j	                  d      j                  k(  sJ y )Nr/   r0   si     )	r   r1   r    r2   as_unit	utcoffsetr   total_seconds_value)r4   offsets     r   test_tzlocal_offsetr@   V   s     
<HKK$7$7$9	:	B	B3	GB[[  ",,XdAq-ABF!!#F99v<!8!@!@!E!L!LLLLr   c                      t         j                  j                         } t        j                  |       rJ t        j
                  | t         j                  j                               rJ y r   )r1   r    r2   r   r   
tz_comparetzutcr0   s    r   test_tzlocal_is_not_utcrD   b   sN    				B#####B(9(9(;<<<<r   c                     t        j                  |       }t        j                  |      }t        j                  ||      sJ y r   )r   r   rB   )r   utc_fixture2r    tz2s       r   test_tz_compare_utcrH   j   s8    				,B

 
 
.CC(((r   zpytz/US/Easternc                 $    | j                  |      S r   )localizer    xs     r   <lambda>rM   r   s    "++a. r   
US/Easternc                 &    |j                  |       S )Ntzinfo)replacerK   s     r   rM   rM   s   s    			8L r   )paramsc                 4   | j                   \  }}t        |t              rF|j                  d      r5t	        j
                  d      }|j                  |j                  d            }t        ddd      }t        ddd      } |||      } |||      }||||||fS )Nzpytz/r#   i  r:   i  )	param
isinstancestr
startswithr%   r&   r   removeprefixr   )requesteasternrJ   r#   start_naive	end_naivestartends           r   infer_setupr`   p   s      GX'3G$6$6w$?""6*-- 4 4W =>4A&Kq!$IWk*E
7I
&CHeS+y@@r   c                 f   | \  }}}}}}t        j                  ||      t        j                  ||      j                  u sJ t        j                  |d       t        j                  ||      j                  u sJ t        j                  d |      t        j                  ||      j                  u sJ y r   )r   infer_tzinfor   localize_pydatetimerQ   )r`   r[   _r^   r_   r\   r]   s          r   test_infer_tz_compatre      s    5@2GQsK 	uc*))+w?FF	G	G 	ud+))+w?FF	G	G 	tS))))W=DD	E	Er   c                     | \  }}}}}}t         j                  }|j                  |      }|j                  |      }t        j                  ||      |u sJ y r   )r   utc
astimezoner   rb   )r`   rd   r^   r_   r\   r]   rg   s          r   test_infer_tz_utc_localizeri      sX    /:,Aq%k9
,,C""3'E


s
#C!!%-444r   orderedTFc                     | \  }}}}}}d}t         j                  }|j                  |      }t        j                  ||      }	|r||	fn|	|f}
t        j                  t        |      5  t        j                  |
  d d d        y # 1 sw Y   y xY w)Nz'Inputs must both have the same timezonematch)
r   rg   rh   r   rc   r%   raisesAssertionErrorr   rb   )r`   rj   r[   rd   r\   r]   r   rg   r^   r_   argss              r   test_infer_tz_mismatchrq      s    /:,GQ1k9
3C
,,C""3'E

(
(G
<C"E3<eD	~S	1 &%& & &s   (BBc                     t        j                  t        d      5  t        j                  d       d d d        t        j                  t        d      5  t        j                  t                d d d        d} t        j                  t        |       5  t        j                  t        dd             d d d        y # 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)	Nz<class 'float'>rl   g      F@z<class 'module'>z<class 'pandas.Timestamp'>z
2021-01-01r$   r0   )r%   rn   	TypeErrorr   r   r   )r   s    r   test_maybe_get_tz_invalid_typesrt      s    	y(9	: %t$% 
y(:	; 'v&' 'C	y	, By%@AB B% %' 'B Bs#   B>C
!C>C
CCr*   )r$   GMT	Etc/GMT+1z	Etc/GMT-5c                     t        j                  d      } |j                  |       }t        j                  |      sJ y )Nzoneinfor%   r&   ZoneInfor   is_fixed_offset)r*   rx   r    s      r   test_zoneinfo_fixed_offsetr|      s:     "":.H			7	#B$$R(((r   c                      t        j                  d      }  | j                  d      }t        j                  |      rJ y )Nrx   Africa/Lusakary   )rx   r    s     r   9test_zoneinfo_not_fixed_offset_with_historical_transitionr      s;    "":.H			?	+B((,,,,r   c                     t        j                  t        j                        } | t        t	        dd            k(  sJ t        j                  d      } | t        t	        dd            k(  sJ t        j                  d      } | t        t	        dd             k(  sJ t        j                  d      } | t        t	        dd	            k(  sJ t        j                  d
      } | t        t	        dd	             k(  sJ y )Nr   )hoursminutesz+01:15r:      z-01:15z	UTC+02:45   -   z	UTC-02:45)r   r   r   rg   r   r0   s    r   test_maybe_get_tz_offset_onlyr      s     
			-B)!Q78888 
			)B)!R89999				)B91b99:::: 
			,B)!R89999				,B91b99::::r   c                     t        j                  d      } t        dddd      }|j                  |       }t	        j
                  t        d      D cg c]9  }t        ddd	|t        j                  
      j                  |       j                  ; c}t        j                        }t        j                  |j                  j                         |       y c c}w )Nz
US/Pacificz
2040-07-01   hr$   )periodsfreqr    i     r:   rP   dtype)rx   rz   r   
tz_convertnparrayranger   r   rg   rh   hourint32tmassert_numpy_array_equalto_numpy)r    	utc_timeslocalr   expected_hourss        r   $test_zoneinfo_utc_to_local_post_2037r      s     
		<	(B<#%HI  $EXX b		
 T1ahll;FFrJOO	
 hhN 

 3 3 5~F	
s   >C)America/New_YorkAustralia/MelbournezEurope/Kaliningradc                    t        j                  |       }g d}t        |d      }|j                  |      }|D cg c]D  }t	        j
                  |      j                  t        j                        j                  |      F }}t        j                  |j                         t        j                  |             |D cg c]  }|j                          c}|D cg c]  }|j                          c}k(  sJ y c c}w c c}w c c}w )N)z
2038-01-01z
2038-07-01z
2100-01-01z
2100-07-01z
2200-01-01z
2200-07-01Trg   rP   )rx   rz   r   r   r   fromisoformatrR   r   rg   rh   r   r   to_pydatetimer   r   r<   )	r*   r    datar   r   dateexpectedr4   dts	            r   $test_zoneinfo_utc_to_local_post_2100r      s     
		7	#BD Dd+I  $E  	t$,,HLL,ALLRPH 
  3 3 5rxx7IJ%*+rBLLN+/R2/RRRR ,/Rs   A	C>DDc                     t        t        j                  ddgd      d      } | j                  d      }t	        j
                  d      }t        dd	d	t        j                  
      j                  |      t        ddd	t        j                  
      j                  |      g}|j                  dk(  sJ t        j                  |j                         t        j                  |             y )N3000-01-01T00:00:003000-07-01T00:00:00M8[s]r   Tr   Europe/Brussels  r:   rP   r   zdatetime64[s, Europe/Brussels])r   r   r   r   rx   rz   r   r   rg   rh   r   r   r   r   )r   r   r    r   s       r   8test_zoneinfo_utc_to_local_far_future_seconds_resolutionr     s     
')>?wOI   !23E			,	-Bq!HLL1<<R@q!HLL1<<R@H
 ;;:::: 3 3 5rxx7IJr   c                     t        t        j                  ddgd            } | j                  d      }|j	                  d      }t        j                  d      }t        ddd|	      j                  t        j                        t        dd
d|	      j                  t        j                        g}|j                  dk(  sJ t        j                  |j                         t        j                  |             y )Nr   r   r   r   r   r$   r   r:   rP   r   zdatetime64[s, UTC])r   r   r   tz_localizer   rx   rz   r   rh   r   rg   r   r   r   r   )local_times	localized
result_utcr    expected_utcs        r   8test_zoneinfo_local_to_utc_far_future_seconds_resolutionr      s     
')>?wOK ''(9:I%%e,J			,	-Bq!B'228<<@q!B'228<<@L
 3333
 8 8 :BHH\<RSr   zEstdlib datetime.fromtimestamp fails on 32-bit platforms with overflow)reason)r   zAmerica/Santiagor   r   c                    t        j                  |       }ddlm} t        j                  t         ||       j                  j                  d                  }|t        d      z
  j                  t        j                        }t        d      D cg c]  }|t        d|z  	      z    }}|D cg c]  }|j                  |       }}|D cg c]  }t        |       }	}t        |	D 
cg c]  }
|
d d
 	 c}
      }|j!                  | d      }t#        j$                  |j'                  d      j)                         t+        j,                  |d             t#        j$                  |j/                  t              t1        |	             t#        j$                  |j)                         t+        j,                  |d             y c c}w c c}w c c}w c c}
w )Nr   rz   3  r:   )daysrP   `      r   iinfer	ambiguousr$   Or   )rx   rz   zoneinfo._zoneinfor   fromtimestampmax	_tz_aftertransitionsr   rR   r   rg   r   rh   rW   r   r   r   assert_equalr   r   r   r   astyper
   )r*   r    rz   transr^   ir   r4   expected_tzexpected_strvr   results                r   0test_zoneinfo_boundary_at_last_cached_transitionr   3  so    
		7	#B+""3x'8'B'B'N'Nt'T#UVEYA&&//x||/DEAFzARSAUYrAv66SLS/;<2==$<K<&12CG2L26A3B67E w':F OO% ..0"((<s2S OOFMM#&l(;<OOF((*BHH[,LM! T<26s   G2GG-Gc                    t        j                  |       }ddlm}  ||       j                  j	                  d      \  }}||kD  r"t        |d      t        d      z   }t        j                  t        d	      5  |j                  |        d d d        |j                  | d
      }|t        j                  u sJ |j                  | d      }|j                         t        d      z   j                  |      }|j                         |k(  sJ |j                  | d      }	|j                         t        dd      z
  j                  |      }
|	j                         |
k(  sJ y t        |d      t        d      z
  }t        j                  t        d	      5  |j                  |        d d d        |j                  | d
      }|t        j                  u sJ |j                  | d      }|j                         j                  d|      }|j                         |k(  sJ |j                  | d      }|j                         j                  d|      }|j                         |k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   r   r9   )unitr   r   znonexistent timerl   NaT)nonexistentshift_forwardrP   shift_backwardr:   )r   microsecondszCannot infer dst timer   T)foldrQ   F)rx   rz   r   r   r   r   r   r%   rn   
ValueErrorr   pdr   r   r   rR   )r*   r    rz   r^   r_   r4   r   
result_dstexpected_dst
result_stdexpected_stds              r   3test_zoneinfo_nonexistent_at_last_cached_transitionr   W  sK    
		7	#B+'",,88>JE3s{u3')B*??]]:-?@ 	$NN7#	$ U;^^G^I
((*Yr-BBKKSUKV'')\999^^G9I^J
2A!FF
''
 	 '')\999 s%	"(==]]:-DE 	$NN7#	$ 59^^Gt^<
'')11q1D'')\999^^Gu^=
'')11q1D'')\999A	$ 	$(	$ 	$s   ;I1I>1I;>Jkey)rN   r~   zAsia/Qyzylordac                     t        j                  |       }t        dd      j                  |      }t	        dddt
        j                        j                  |      }|j                  |j                  k(  sJ y )Nz
1850-01-01r$   r0   i:  r:   rP   )	rx   rz   r   r   r   r   rg   rh   minute)r   r    r4   r   s       r   /test_zoneinfo_utc_to_local_pre_first_transitionr     s`     
		3	B	<E	*	5	5b	9Ba8<<8CCBGH99'''r   c                  X   t        t        j                  dd            } d}t        j                  t
        |      5  | j                  d       d d d        t        j                  t
        |      5  t        | j                  dd      } d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY w)Nz10000-01-01T09:00:00usz;Localizing Timestamps which are outside the range of Pythonrl   r   )r   r    )r   r   
datetime64r%   rn   NotImplementedErrorr   r>   )r4   r   s     r   -test_zoneinfo_conversion_outside_range_stdlibr     s     
2==!7>	?B
GC	*#	6 *
()* 
*#	6 Cryyt0ABC C* *C Cs   B2B B B)c                     t        j                  d      } ddlm} | j                  t
        j                  f| j                  d      t        t        d            f| j                  d      t        j                  d      f| j                  d      t        j                  d      ffD ]  \  }} ||      }||k(  rJ  y )Nr#   r   )_normalize_pytz_timezoneZ   r   r   rv   )r%   r&   pandas.io._utilr   r$   r   rg   FixedOffsetr   rx   rz   )r#   r   r    r   r   s        r   test_normalize_pytz_timezoner     s    v&D8 
8<< 			"	x	"(=>?	)	*H,=,=>P,QR	{	#X%6%6{%CD	 "H *"-!!!"r   )<r   r   r   r   r   r   rx   dateutil.tzr1   numpyr   r%   pandas._libs.tslibsr   r   pandas.compatr   r	   pandasr   r
   r   r   r   r   pandas._testing_testingr   mark
single_cpur   r!   r-   r5   r7   r@   rD   rH   fixturer    gettzr`   re   ri   parametrizerq   rt   r|   r   r   r   r   r   r   skipifr   r   r   r   r    r   r   <module>r      s"   
  
     
    8 8$ 
R)'	M=) 	89			<	(*LMAA"5 T5M2& 3&	B $LM) N)-;,G" PSS2K&T& HR   VN		N8 V,:	,:^  QR	( S	(
C"r   