
    d                       d dl mZ d dlZd dlmZ d dlmZ d dlZd dl	Z
d dlZd dlmZ d dlZd dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d	Z er&d dl!Z! ee!j"                   ed
          k    rdZ ndZ ddZ#d e#d          fd e#dd          fd e#dd          fd e#ddd          fd e#ddd          fd e#dddd          fd e#dddd          fd e#dddd          fd e#ddddd          fd e#ddddd          fd  e#ddddd          fd! e#dddddd"#          fd$ e#dddddd"#          fd% e#dddddd"#          fd&Z$ej%        &                    d' e'e$(                                           e'e$)                                          (          d)             Z*g d*Z+ ej,        e++          d,             Z-ej,        d-             Z.ej,        d.             Z/ej,        d/             Z0ej,        d0             Z1ej,        d1             Z2ej,        d2             Z3ej,        d3             Z4ej,        d4             Z5ej,        d5             Z6eej%        &                    d6d7d8g          d9                         Z7ed:             Z8eej%        &                    d;d<g d=fd>g d?fd@g dAfdBg dCfdDg dCfdEg dCfdFg dCfg          dG                         Z9edH             Z:edI             Z;edJ             Z<eej%        &                    dKg dL          dM                         Z=edN             Z>edO             Z?edP             Z@eej%        &                    dQg dR          dS                         ZAedT             ZBedU             ZCedV             ZDedW             ZEedX             ZFedY             ZGedZ             ZHed[             ZIed\             ZJd] eKd^d_          g d`daZLeej%        &                    db e'eL(                                           e'eL)                                          (          dc                         ZMedd             ZNede             ZOedf             ZPeej%        &                    dgdhdiidi edjk          dldi edmk          dlg          dn                         ZQeej%        &                    dgdhdoido edpk          dlg          dq                         ZReej%        &                    dgdhdridr edpk          dlg          ds                         ZSeej%        &                    dgdo edtk          dldr edtk          dldi edtk          dlg          du                         ZTeej%        &                    dgdhdiidi edjk          dlg          dv                         ZUeej%        &                    dgdhdoido edpk          dlg          dw                         ZVeej%        &                    dgdhdridr edpk          dlg          dx                         ZWeej%        &                    dgdo edtk          dldr edtk          dldi edtk          dlg          dy                         ZXedz             ZYej,        d{             ZZej,        d|             Z[ed}             Z\ed~             Z]ed             Z^ed             Z_ed             Z`ed             Zaed             Zbed             Zced             Zdeej%        &                    de+          dd                        Zeeej%        &                    dddg          ej%        &                    dg d          ej%        &                    de+          dd                                                Zfedd            Zgeej%        &                    dg d          dd                        Zhed             Zieej%        &                    de+          dd                        Zjed             Zkeej%        &                    d ejl        d edk          gz             ejl         edk                    gddg(          d                         Zmeej%        &                    de+          dd                        Zneej%        &                    de+          d                         Zoeej%        &                    de+          d                         Zpeej%        &                    de+          d                         Zqeej%        &                    de+          dd                        Zreej%        &                    de+          d                         Zseej%        &                    de+          d                         Zted             Zueej%        &                    dd edk          g          dd                        Zvedd            Zwedd            Zxeej%        &                    dddddde fde fdg          d                         Zyeej%        &                    dddddde fde fdg          d                         Zzeej%        &                    dddg          d                         Z{eej%        &                    dg d          ej%        &                    dddg          d                                     Z|eej%        &                    ddde  dfdde  dfdde  dfg          d                         Z}eej%        &                    dg d          ej%        &                    dg d¢          dÄ                                     Z~eej%        &                    dg dĢ          dń                         ZedƄ             Zeej%        &                    de          dǄ                         Zeej%        &                    de          ej%        &                    dddg          d˄                                     Zeej%        &                    de          d̄                         Zeej%        &                    dddg          dτ                         Zeej%                            dЬѦ          d҄                         Zeej%        &                    dg dӢ          ej%        &                    dhg dԢ          dՄ                                     Zeej%        &                    dhg dԢ          dք                         Zej,        dׄ             Zed؄             Zedل             Zedڄ             Zedۄ             Zed܄             Zed݄             Zedބ             Zeej%        &                    dg dߢ          ej%        &                    de+          d                                     Zeej%        &                    de+          d                         ZdS )    )annotationsN	timedelta)dedent)Version)CFTimeIndex_parse_array_of_cftime_strings_parse_iso8601_with_reso_parsed_string_to_boundsassert_all_valid_date_typeparse_iso8601_like)assert_array_equalassert_identical
has_cftimerequires_cftime)_ALL_CALENDARS_NON_STANDARD_CALENDARS_all_cftime_date_types z1.5.2standard	gregorianc                ,    t          | |||||          S )Nyearmonthdayhourminutesecond)dictr   s         =lib/python3.11/site-packages/xarray/tests/test_cftimeindex.py	date_dictr"   ,   s&    Cd6&       1999)r   19990101)r   r   z1999-0119990101)r   r   r   z
1999-01-0119990101T1212)r   r   r   r   z1999-01-01T12z1999-01-01 1219990101T123434)r   r   r   r   r   z1999-01-01T12:34z1999-01-01 12:3419990101T12345656r   z1999-01-01T12:34:56z1999-01-01 12:34:56)r   r   z
month-dashr   zday-dashr   z	hour-dashzhour-space-separatorr   zminute-dashzminute-space-separatorr   zsecond-dashzsecond-space-separator)stringexpected)idsc                    t          |           }||k    sJ t          j        t                    5  t          | dz              t          | dz              d d d            d S # 1 swxY w Y   d S )N3z.3)r   pytestraises
ValueError)r.   r/   results      r!   test_parse_iso8601_liker7   b   s      ''FX	z	"	" * *6C<(((6D=)))* * * * * * * * * * * * * * * * * *s   %A##A'*A')365_day360_dayjulianall_leap366_dayr   proleptic_gregorian)paramsc                4    t                      | j                 S N)r   param)requests    r!   	date_typerC   {   s    !##GM22r#   c                     | ddd           | ddd           | ddd           | ddd          g}t          |          S )N      r   rC   datess     r!   indexrJ      _     		!Q	!Q	!Q	!Q	E ur#   c                     | ddd           | ddd           | ddd           | ddd          g}t          |          S )NrF   rE   rG   rH   s     r!   monotonic_decreasing_indexrM      rK   r#   c                <     | ddd          g}t          |          S NrE   rG   rH   s     r!   length_one_indexrP      s&    Yq!Q Eur#   c                8    t          j        g d| gdg          S )NrE   rF         timecoordsdims)xr	DataArrayrJ   s    r!   dar\      s!    <eWF8DDDDr#   c                2    t          j        g d|           S NrR   r[   )pdSeriesr[   s    r!   seriesra      s    9\\\////r#   c                2    t          j        g d|           S r^   )r_   	DataFramer[   s    r!   dfrd      s    <E2222r#   c                :    dd l }| |j        u rdS | |j        u rdS dS )Nr            )cftimeDatetimeAllLeapDatetime360DayrC   ri   s     r!   feb_daysrm      s6    MMMF***r	f+	+	+rrr#   c                $    dd l }| |j        u rdS dS )Nr   rg      )ri   rk   rl   s     r!   dec_daysrp      s#    MMMF)))rrr#   c                     | ddd           | ddd           | ddd           | ddd          g}t          |d          S )NrE   rF   foonamerG   rH   s     r!   index_with_nameru      sd     		!Q	!Q	!Q	!Q	E u5))))r#   )rt   expected_name)barrw   )Nrr   c                B    t          | |          j        }||k    sJ d S )Nrs   )r   rt   )ru   rt   rv   r6   s       r!   test_constructor_with_namery      s0     t4449F]""""""r#   c                   dd l }| |j        u r2t          j         | ddd           |j        ddd          g          }n1t          j         | ddd           |j        ddd          g          }t          j        t                    5  t          |           d d d            n# 1 swxY w Y   t          j        t                    5  t          t          j        d | ddd          g                     d d d            n# 1 swxY w Y   t          t          j         | ddd           | ddd          g                     d S )Nr   rE   rF   )	ri   DatetimeNoLeapnparrayrj   r3   r4   	TypeErrorr   )rC   rJ   ri   mixed_date_typess       r!   test_assert_all_valid_date_typer      s   MMMF)))8Yq!Q!7!71a!@!@A
 
 8Yq!Q!6!6q!Q!?!?@
 
 
y	!	! 5 5"#34445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
y	!	! F F"28Q		!Q0B0B,C#D#DEEEF F F F F F F F F F F F F F F rx1a););YYq!Q=O=O(PQQRRRRRs$   
B&&B*-B*
/DD	D	)fieldr/   r   )rE   rE   rF   rF   r   )rE   rF   rE   rF   r   )rE   rE   rE   rE   r   )r   r   r   r   r   r   microsecondc                F    t          | |          }t          ||           d S r@   )getattrr   )rJ   r   r/   r6   s       r!    test_cftimeindex_field_accessorsr      s)     UE""Fvx(((((r#   c                L    | j         }d | D             }t          ||           d S )Nc                    g | ]	}|j         
S  )dayofyr.0dates     r!   
<listcomp>z7test_cftimeindex_dayofyear_accessor.<locals>.<listcomp>       //////r#   )	dayofyearr   rJ   r6   r/   s      r!   #test_cftimeindex_dayofyear_accessorr      2    _F/////Hvx(((((r#   c                L    | j         }d | D             }t          ||           d S )Nc                    g | ]	}|j         
S r   )dayofwkr   s     r!   r   z7test_cftimeindex_dayofweek_accessor.<locals>.<listcomp>  r   r#   )	dayofweekr   r   s      r!   #test_cftimeindex_dayofweek_accessorr     r   r#   c                L    | j         }d | D             }t          ||           d S )Nc                    g | ]	}|j         
S r   )daysinmonthr   s     r!   r   z;test_cftimeindex_days_in_month_accessor.<locals>.<listcomp>  s    333T 333r#   )days_in_monthr   r   s      r!   'test_cftimeindex_days_in_month_accessorr     s3     F33U333Hvx(((((r#   )r.   	date_argsreso))r$   )  rE   rE   r   )199902)r   rF   rE   r   )19990202)r   rF   rF   r   )19990202T01)r   rF   rF   rE   r   )19990202T0101)r   rF   rF   rE   rE   r   )19990202T010156)r   rF   rF   rE   rE   8   r   c                Z     | | }|}t          | |          \  }}||k    sJ ||k    sJ d S r@   )r
   )rC   r.   r   r   expected_dateexpected_resoresult_dateresult_resos           r!   test_parse_iso8601_with_resor     sQ     Iy)MM7	6JJK-''''-''''''r#   c           	          | ddddddd          } | ddd          } | dd|dddd	          }t          | d
|          \  }}||k    sJ ||k    sJ d S )NrF   
         rE         ;   ?B r   r   rC   rp   parsedexpected_startexpected_endresult_start
result_ends          r!    test_parse_string_to_bounds_yearr   #  s    Yq!RAq!,,FYq!Q''N9QHb"b&AAL7	66RRL*>))))%%%%%%r#   c           	          | ddddddd          } | ddd          } | dd|dddd          }t          | d	|          \  }}||k    sJ ||k    sJ d S )
NrF   r   r   r   rE   r   r   r   r   r   )rC   rm   r   r   r   r   r   s          r!   %test_parse_string_to_bounds_month_febr   -  s    Yq!RAq!,,FYq!Q''N9Q8RR@@L7	7FSSL*>))))%%%%%%r#   c           	          | ddd          } | ddd          } | dd|dddd          }t          | d|          \  }}||k    sJ ||k    sJ d S )NrF   r   rE   r   r   r   r   r   r   s          r!   %test_parse_string_to_bounds_month_decr   7  s    Yq"a  FYq"a((N9QHb"b&AAL7	7FSSL*>))))%%%%%%r#   )r   ex_start_argsex_end_args))r   )rF   rF   r   )rF   rF   r   r   r   r   r   )r   )rF   rF   r   r   )rF   rF   r   r   r   r   r   )r   )rF   rF   r   r   rF   )rF   rF   r   r   rF   r   r   )r   )rF   rF   r   r   rF   r   )rF   rF   r   r   rF   r   r   c           	          | ddddddd          } | | } | | }t          | ||          \  }}||k    sJ ||k    sJ d S )NrF   r   r   r   @ r   )	rC   r   r   r   r   r   r   r   r   s	            r!   (test_parsed_string_to_bounds_sub_monthlyr   A  su     Yq!RAq&11FY.N9k*L7	4PPL*>))))%%%%%%r#   c           
         t          j        t                    5  t          | d | ddd                     d d d            d S # 1 swxY w Y   d S )NarE   )r3   r4   KeyErrorr   rC   s    r!   #test_parsed_string_to_bounds_raisesr   W  s    	x	 	  E E C1a1C1CDDDE E E E E E E E E E E E E E E E E Es   AAAc                   |                     d          }|t          dd          k    sJ |                      | ddd                    }|dk    sJ |                     d          }|t          dd          k    sJ t          j        t          d          5  |                     d           d d d            d S # 1 swxY w Y   d S )N0001r   rF   rE   z
0001-02-011234match)get_locslicer3   r4   r   )rC   rJ   r6   s      r!   test_get_locr   ]  s   ]]6""FU1a[[    ]]99Q1--..FQ;;;;]]<((FU1a[[    	xw	/	/	/  f                 s   B==CCc                2   |                     dd          }d}||k    sJ |                     dd          }d}||k    sJ |                      | ddd          d          }d}||k    sJ |                      | ddd          d          }d}||k    sJ d S )Nr   leftr   rightrF   rE   rS   get_slice_boundrC   rJ   r6   r/   s       r!   test_get_slice_boundr   l  s    ""6622FHX""6733FHX""99Q1#5#5v>>FHX""99Q1#5#5w??FHXr#   c                2   |                     dd          }d}||k    sJ |                     dd          }d}||k    sJ |                      | ddd          d          }d}||k    sJ |                      | ddd          d          }d}||k    sJ d S )Nr   r   rF   r   rT   rE   rS   r   )rC   rM   r6   r/   s       r!   %test_get_slice_bound_decreasing_indexr     s    '77GGFHX'77HHFHX'77		!Q8J8JFSSFHX'77		!Q8J8JGTTFHXr#   c                2   |                     dd          }d}||k    sJ |                     dd          }d}||k    sJ |                      | ddd          d          }d}||k    sJ |                      | ddd          d          }d}||k    sJ d S )Nr   r   r   r   rE   rS   r   )rC   rP   r6   r/   s       r!   %test_get_slice_bound_length_one_indexr     s    --ff==FHX--fg>>FHX--ii1a.@.@&IIFHX--ii1a.@.@'JJFHXr#   c                    t          j        dg| gdg          }|                    t          dd                    }t	          ||           d S )NrE   rU   rV   r   rU   rY   rZ   selr   r   )rP   r\   r6   s      r!   "test_string_slice_length_one_indexr     sS    	qc#3"4F8	D	D	DBVVvv..V//FVR     r#   c                    |j         | u sJ d S r@   r   rC   rJ   s     r!   test_date_type_propertyr     s    ?i''''''r#   c                n    d|v sJ d|v sJ d|vsJ  | ddd          |v sJ  | ddd          |vsJ d S )N
0001-01-01r   0003rE   rS   r   r   s     r!   test_containsr     su    5    U????9Q1&&&&9Q1U******r#   c                    |                      d                              d          }t          j        ddgddggdg          }t	          ||           d S )	Nz
time.monthrU   rT   r   rE   rF   r   rV   )groupbysumrY   rZ   r   )r\   r6   r/   s      r!   test_groupbyr     sY    ZZ%%))&11F|QFQF87)DDDHVX&&&&&r#   r   r   
0001-12-30)TTFF)r.   zstring-slicez	bool-listsel_argc                    t          j        ddg|d d         gdg          }|                     |          }t          ||           d S )NrE   rF   rU   rV   r   rY   rZ   r   r   )r\   rJ   r   r/   r6   s        r!   test_sel_string_or_listr     sS     |QFE"1"I;fXFFFHVVV!!FVX&&&&&r#   c           
     \   t          j        ddg|d d         gdg          }|                     t           |ddd           |ddd                              }t	          ||           |                      |ddd           |ddd          g          }t	          ||           d S )NrE   rF   rU   rV   r   rg   r   r   )r\   rJ   rC   r/   r6   s        r!   test_sel_date_slice_or_listr     s    |QFE"1"I;fXFFFHVVyyAq1199QB3G3GHHVIIFVX&&&VV))Aq!,,ii1a.@.@AVBBFVX&&&&&r#   c                    t          j        d                              |d                   }|                      |ddd                    }t	          ||           d S )NrE   r   r   rY   rZ   assign_coordsr   r   r\   rC   rJ   r/   r6   s        r!   test_sel_date_scalarr     s[    |A,,%(,;;HVV1a++V,,FVX&&&&&r#   c                    t          j        d                              |d                   }|                      |ddd          d          }t	          ||           d S )NrT   rS   r     rE   nearest)rU   methodr   r   s        r!   test_sel_date_distant_dater     s]    |A,,%(,;;HVV4A..yVAAFVX&&&&&r#   
sel_kwargsr   r   F   days)r   	tolerancei@w c           	     f   t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           d S )	NrF   rE   r   rU   rT   rS      r   r   r\   rC   rJ   r   r/   r6   s         r!   test_sel_date_scalar_nearestr    s     |A,,%(,;;HRV::1a++:z::FVX&&&|A,,%(,;;HRV;;1b!,,;
;;FVX&&&&&r#   padim  c           	     f   t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           d S )NrF   rE   r   rU   rT   r  r   r   r  s         r!   test_sel_date_scalar_padr	         |A,,%(,;;HRV::1a++:z::FVX&&&|A,,%(,;;HRV;;1b!,,;
;;FVX&&&&&r#   backfillc           	     f   t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           t          j        d                              |d                   } | j        dd |ddd          i|}t	          ||           d S )	NrS   rF   r   rU   rE   rT   r  r   r   r  s         r!   test_sel_date_scalar_backfillr    r
  r#      c           
         t          j        t                    5   | j        dd |ddd          i| d d d            d S # 1 swxY w Y   d S )NrU   rE      r   r3   r4   r   r   r\   rC   r   s      r!   %test_sel_date_scalar_tolerance_raisesr    s     
x	 	  6 655IIaA&&5*5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   AA	Ac           
     F   t          j        ddg|d         |d         ggdg          } | j        d	d |ddd           |ddd          gi|}t          ||           t          j        ddg|d         |d         ggdg          } | j        d	d |ddd           |ddd          gi|}t          ||           t          j        ddg|d         |d         ggdg          } | j        d	d |ddd           |ddd          gi|}t          ||           d S )
NrF   rE   rU   rV   rS   rT   r   r  r   r   r  s         r!   test_sel_date_list_nearestr  +  su    |QFU1XuQx,@+AQQQHRVPP))Aq!,,ii1a.@.@APZPPFVX&&&|QFU1XuQx,@+AQQQHRVQQ))Aq!,,ii2q.A.ABQjQQFVX&&&|QFU1XuQx,@+AQQQHRVRR))Ar1--yyB/B/BCRzRRFVX&&&&&r#   c           
         t          j        ddg|d         |d         ggdg          } | j        dd |ddd           |ddd          gi|}t          ||           d S )NrF   rE   rU   rV   rS   rT   r   r   r  s         r!   test_sel_date_list_padr  >       |QFU1XuQx,@+AQQQHRVPP))Aq!,,ii1a.@.@APZPPFVX&&&&&r#   c           
         t          j        ddg|d         |d         ggdg          } | j        dd |ddd           |ddd          gi|}t          ||           d S )NrS   rF   rU   rV   rE   rT   r   r   r  s         r!   test_sel_date_list_backfillr  I  r  r#   c                    t          j        t                    5   | j        dd |ddd           |ddd          gi| d d d            d S # 1 swxY w Y   d S )NrU   rE   rF   r  r   r  r  s      r!   #test_sel_date_list_tolerance_raisesr  T  s     
x	 	  L LKKYYq!Q''1a););<K
KKKL L L L L L L L L L L L L L L L L Ls   (AAAc                D   t          j        d                              |d                   }|                     d          }t	          ||           t          j        ddg|d d         gdg          }|                     ddg          }t	          ||           d S )NrE   r   r   rF   rU   rV   )rY   rZ   r   iselr   )r\   rJ   r/   r6   s       r!   	test_iselr  b  s    |A,,%(,;;HWW!W__FVX&&&|QFE"1"I;fXFFFHWW1a&W!!FVX&&&&&r#   c                     | ddd          gS rO   r   r   s    r!   scalar_argsr!  m  s    IaAr#   c                    dt          dd          t          d d          t           | ddd           | ddd                    t          d  | ddd                    gS )Nr   r   r   rE   r   rg   )r   r   s    r!   
range_argsr#  r  so     	lL))dL!!ii1a  ))Ar2"6"677dIIaR(()) r#   c                    |D ]}| |         dk    sJ t          j        ddg|d d                   }|D ]}| |                             |          sJ  d S NrE   rF   r[   )r_   r`   equalsra   rJ   r!  r#  argr/   s         r!   test_indexing_in_series_getitemr)  }  s        c{ay!QuRaRy111H , ,c{!!(++++++, ,r#   c                    |D ]}| j         |         dk    sJ t          j        ddg|d d                   }|D ]$}| j         |                             |          sJ %d S r%  )locr_   r`   r&  r'  s         r!   test_indexing_in_series_locr,    s     $ $z#!#####y!QuRaRy111H 0 0z#%%h//////0 0r#   c                    d}| j         d         |k    sJ t          j        ddg|d d                   }| j         d d                             |          sJ d S )NrE   r   rF   r[   )ilocr_   r`   r&  )ra   rJ   r/   s      r!   test_indexing_in_series_ilocr/    sh    H;q>X%%%%y!QuRaRy111H;rr?!!(+++++++r#   c                    t          j        ddt          j        t          j        g|           }|j        d d         }|                                }|                    |          sJ d S )Ng              ?r[   rF   )r_   r`   r|   nanr.  dropnar&  )rJ   ra   r/   r6   s       r!   test_series_dropnar4    s]    YS"&"&1???F{2A2H]]__F=="""""""r#   c                $   t          j        dg|d                   }|D ]&}| j        |         }|                    |          sJ 't          j        ddg|d d                   }|D ]&}| j        |         }|                    |          sJ 'd S NrE   r   rs   rF   r[   )r_   r`   r+  r&  rc   )rd   rJ   r!  r#  r/   r(  r6   s          r!   test_indexing_in_dataframe_locr7    s    y!58,,,H ' '}}X&&&&&&|QF%)444H ' '}}X&&&&&&' 'r#   c                B   t          j        dg|d                   }| j        d         }|                    |          sJ |                    |          sJ t          j        ddg|d d                   }| j        d d         }|                    |          sJ d S r6  )r_   r`   r.  r&  rc   )rd   rJ   r/   r6   s       r!   test_indexing_in_dataframe_ilocr9    s    y!58,,,HWQZF=="""""=="""""|QF%)444HWRaR[F=="""""""r#   c           	     j   t          j        ddg | ddd           | ddd          ggdg          }t          j        ddg | dd	d           | dd
d          ggdg          }t          j        ||gd          }t          |j        d                                         t                    sJ d S )Nr1         @rE   rF   rU   rV   g      @g      @rS   rT   )dim)rY   rZ   concat
isinstancexindexesto_pandas_indexr   )rC   da1da2r\   s       r!   test_concat_cftimeindexrC    s    
,	c
YYq!Q//1a1C1CDEVH  C ,	c
YYq!Q//1a1C1CDEVH  C 
C:6	*	*	*Bbk&)99;;[IIIIIIIr#   c                 6    t          g           } | j        J d S r@   )r   rC   r[   s    r!   test_empty_cftimeindexrE    s!    OOE?"""""r#   c                   | j         } |ddd           |ddd           |ddd           |ddd          g}t          |          }| t          d          z   }|                    |          sJ t	          |t                    sJ d S NrE   rF   r   rC   r   r   r&  r>  rJ   rC   expected_datesr/   r6   s        r!   test_cftimeindex_addrK    s    I	!Q	!Q	!Q	!Q	N >**HYA&&&&F=="""""fk*******r#   calendarreturnNonec                   t          j        dd|           }t          j        d t	          d          D                       }||z   }|                    dd          }|                    |          sJ t          |t                    sJ d S )N2000r  periodsrL  c                .    g | ]}t          d           S rF   r   r   r   _s     r!   r   z7test_cftimeindex_add_timedeltaindex.<locals>.<listcomp>  #    DDDa	q 1 1 1DDDr#   rF   D	rY   cftime_ranger_   TimedeltaIndexrangeshiftr&  r>  r   rL  r   deltasr6   r/   s        r!   #test_cftimeindex_add_timedeltaindexr`    s     	H===ADD588DDDEEFZFwwq#H=="""""fk*******r#   nr;  g      ?z
freq,units))rX  rX  )Hrb  )Tmin)Sre  )Lmsc                    t          j        dd|d          }|t          j        | |          z   }|                    | |          }|                    |          sJ t          |t                    sJ d S )NrP  rS   rX  )rR  rL  freq)rY   rZ  r_   	Timedeltar]  r&  r>  r   )ra  ri  unitsrL  r   r6   r/   s          r!   test_cftimeindex_shift_floatrl    sy     	H3GGGAa'''Fwwq$H=="""""fk*******r#   c                     t          j        ddd          } t          j        t          d          5  |                     dd           d d d            d S # 1 swxY w Y   d S )	NrP  rS   rX  rR  ri  z5Could not convert to integer offset at any resolutionr         @us)rY   rZ  r3   r4   r5   r]  )r   s    r!   test_cftimeindex_shift_float_usrq    s    
444A	Q
 
 
   	
T                    AAAri  )ASAYSYQSQMSMc                    t          j        ddd          }t          j        t          d          5  |                    d|            d d d            d S # 1 swxY w Y   d S )NrP  rS   rX  rn  zunsupported operand typer   ro  rY   rZ  r3   r4   r~   r]  )ri  r   s     r!   5test_cftimeindex_shift_float_fails_for_non_tick_freqsr}    s     	444A	y(B	C	C	C  	T                 rr  c                   | j         } |ddd           |ddd           |ddd           |ddd          g}t          |          }t          d          | z   }|                    |          sJ t	          |t                    sJ d S rG  rH  rI  s        r!   test_cftimeindex_raddr    s    I	!Q	!Q	!Q	!Q	N >**HA&F=="""""fk*******r#   c                   t          j        dd|           }t          j        d t	          d          D                       }||z   }|                    dd          }|                    |          sJ t          |t                    sJ d S )NrP  r  rQ  c                .    g | ]}t          d           S rT  r   rU  s     r!   r   z7test_timedeltaindex_add_cftimeindex.<locals>.<listcomp>!  rW  r#   rF   rX  rY  r^  s        r!   #test_timedeltaindex_add_cftimeindexr    s     	H===ADD588DDDEEFaZFwwq#H=="""""fk*******r#   c                >   | j         } |ddd           |ddd           |ddd           |ddd          g}t          |          }| t          d          z   }|t          d          z
  }|                    |          sJ t	          |t                    sJ d S rG  rH  rI  s        r!   test_cftimeindex_sub_timedeltar  (  s    I	!Q	!Q	!Q	!Q	N >**HYA&&&&FiQ''''F=="""""fk*******r#   otherrT   rE   z1d-arrayzscalar-arrayc                "   | j         } |ddd           |ddd           |ddd           |ddd          g}t          |          }| t          d          z   }||z
  }|                    |          sJ t	          |t                    sJ d S rG  rH  )rJ   r  rC   rJ  r/   r6   s         r!   $test_cftimeindex_sub_timedelta_arrayr  8  s     I	!Q	!Q	!Q	!Q	N >**HYA&&&&Fe^F=="""""fk*******r#   c                &   t          j        dd|           }|                    dd          }||z
  }t          j        d t          d          D                       }|                    |          sJ t          |t          j                  sJ d S )NrP  r  rQ  rF   rX  c                .    g | ]}t          d           S rT  r   rU  s     r!   r   z4test_cftimeindex_sub_cftimeindex.<locals>.<listcomp>S  #    !F!F!F)"3"3"3!F!F!Fr#   )rY   rZ  r]  r_   r[  r\  r&  r>  )rL  r   br6   r/   s        r!    test_cftimeindex_sub_cftimeindexr  M  s     	H===A	3AUF !F!FU1XX!F!F!FGGH=="""""fb/0000000r#   c                   t          j        dd|           }||d         z
  }t          j        d t	          d          D                       }|                    |          sJ t          |t          j                  sJ d S )NrP  r  rQ  r   c                .    g | ]}t          |           S r   r   r   is     r!   r   z8test_cftimeindex_sub_cftime_datetime.<locals>.<listcomp>]  r  r#   rY   rZ  r_   r[  r\  r&  r>  rL  r   r6   r/   s       r!   $test_cftimeindex_sub_cftime_datetimer  X  s     	H===A1XF !F!FU1XX!F!F!FGGH=="""""fb/0000000r#   c                   t          j        dd|           }|d         |z
  }t          j        d t	          d          D                       }|                    |          sJ t          |t          j                  sJ d S )NrP  r  rQ  r   c                0    g | ]}t          |            S r  r   r  s     r!   r   z8test_cftime_datetime_sub_cftimeindex.<locals>.<listcomp>g  s%    !G!G!G)!"4"4"4!G!G!Gr#   r  r  s       r!   $test_cftime_datetime_sub_cftimeindexr  b  s     	H===AqTAXF !G!GeAhh!G!G!GHHH=="""""fb/0000000r#   c                    t          j        dd|           }t          j        t          d          5  |                    ddd          |z
   d d d            d S # 1 swxY w Y   d S )NrP  r  rQ  zdifference exceedsr   rE   )rY   rZ  r3   r4   r5   rC   rL  r   s     r!   ,test_distant_cftime_datetime_sub_cftimeindexr  l  s     	H===A	z)=	>	>	> ! !	Aq!q  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   AA"Ac                   t          j        dd|           }t          j        d t	          d          D                       }||z
  }|                    dd          }|                    |          sJ t          |t                    sJ d S )NrP  r  rQ  c                .    g | ]}t          d           S rT  r   rU  s     r!   r   z7test_cftimeindex_sub_timedeltaindex.<locals>.<listcomp>x  rW  r#   rX  rY  r^  s        r!   #test_cftimeindex_sub_timedeltaindexr  t  s     	H===ADD588DDDEEFZFwwr3H=="""""fk*******r#   c                    t          j        dd|           }t          j        |j                  }||z
  }||z
  }|                    |          sJ t          |t          j                  sJ d S )NrP  r  rQ  )rY   rZ  r_   Indexvaluesr&  r>  r[  )rL  r   r  r/   r6   s        r!   .test_cftimeindex_sub_index_of_cftime_datetimesr    st     	H===A
A1uHUF=="""""fb/0000000r#   c                    t          j        dd|           }t          j        t          d          5  |dz
   d d d            d S # 1 swxY w Y   d S )NrP  r  rQ  zunsupported operandr   rE   )rY   rZ  r3   r4   r~   r  s     r!   $test_cftimeindex_sub_not_implementedr    s     	H===A	y(=	>	>	>  	A                 s   AA
A
c                    t          j        t                    5  t          d          | z
   d d d            d S # 1 swxY w Y   d S )NrE   r   )r3   r4   r~   r   r[   s    r!   test_cftimeindex_rsubr    s    	y	!	! " "qE!!" " " " " " " " " " " " " " " " " "s   ;??rX  c                   | j         } |ddd           |ddd           |ddd           |ddd          g}t          |          }|                     d|          }|                    |          sJ t	          |t                    sJ d S )NrE   rS   rF   )rC   r   r]  r&  r>  )rJ   ri  rC   rJ  r/   r6   s         r!   test_cftimeindex_shiftr    s     I	!Q	!Q	!Q	!Q	N >**H[[D!!F=="""""fk*******r#   c                     t          j        dd          } t          j        t                    5  |                     dd           d d d            d S # 1 swxY w Y   d S )NrP  rS   rR  r   rX  r|  r[   s    r!    test_cftimeindex_shift_invalid_nr    s    OFA...E	y	!	!  C                    AAAc                     t          j        dd          } t          j        t                    5  |                     dd           d d d            d S # 1 swxY w Y   d S )NrP  rS   r  rE   r|  r[   s    r!   #test_cftimeindex_shift_invalid_freqr    s    OFA...E	y	!	!  Aq                 r  )rL  r/   )noleapr  )r8   r  )r9   r9   )r:   r:   )r=   r=   c                N    t          j        dd|           }|j        |k    sJ d S )NrP  rS   startrR  rL  )rY   rZ  rL  )rL  r/   rJ   s      r!   "test_cftimeindex_calendar_propertyr    s3     O&!hGGGE>X%%%%%%r#   c                |    t          j        dd|           }|                                }d| d|v sJ d|v sJ dS )z4Test that cftimeindex has calendar property in repr.rP  rS   r  z calendar=''z(2000-01-01 00:00:00, 2000-01-02 00:00:00NrY   rZ  __repr__)rL  r/   rJ   repr_strs       r!   test_cftimeindex_calendar_reprr    s\     O&!hGGGE~~H$$$$00005AAAAAAr#   rR  rF   (   c                l    t          j        d|           }|                                }d|  |v sJ dS )z3Test that cftimeindex has periods property in repr.rP  r  rR  z length=Nr  )rR  rJ   r  s      r!   test_cftimeindex_periods_reprr    sF     O&':::E~~Hg8++++++r#   )r  r9   r   rb  c                r    t          j        dd| |          }|                                }d|  d|v sJ dS )z5Test that cftimeindex has frequency property in repr.rP  rS   )r  rR  ri  rL  z, freq='r  Nr  )ri  rL  rJ   r  s       r!   test_cftimeindex_freq_in_reprr    sM    
 O&!$RRRE~~Hd))))))r#   zperiods,expectedzhCFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00],
            dtype='object', length=2, calendar='z', freq=None)zCFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00, 2000-01-03 00:00:00,
             2000-01-04 00:00:00],
            dtype='object', length=4, calendar='z', freq='D')e   aP  CFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00, 2000-01-03 00:00:00,
             2000-01-04 00:00:00, 2000-01-05 00:00:00, 2000-01-06 00:00:00,
             2000-01-07 00:00:00, 2000-01-08 00:00:00, 2000-01-09 00:00:00,
             2000-01-10 00:00:00,
             ...
             2000-04-01 00:00:00, 2000-04-02 00:00:00, 2000-04-03 00:00:00,
             2000-04-04 00:00:00, 2000-04-05 00:00:00, 2000-04-06 00:00:00,
             2000-04-07 00:00:00, 2000-04-08 00:00:00, 2000-04-09 00:00:00,
             2000-04-10 00:00:00],
            dtype='object', length=101, calendar='c                |    t          j        d| d          }t          |          }|t          |          k    sJ dS )zITest that cftimeindex.__repr__ is formatted similar to pd.Index.__repr__.rP  rX  r  rR  ri  N)rY   rZ  r   repr)rR  r/   rJ   s      r!    test_cftimeindex_repr_formattingr    sE    F O&'DDDEhHtE{{""""""r#   display_width)r  P   d   )rF   rS   rT   r  r  c                   t          j        d|           }t          d          }t          j        |          5  |                                }|                    d          }t          |          D ]P\  }}t          |          |k    sJ t          |           d| d|             |dk    r|d|         d|z  k    sJ Q	 ddd           dS # 1 swxY w Y   dS )	z?Test that cftimeindex is sensitive to OPTIONS['display_width'].rP  r  zCFTimeIndex()r  
 r   N)rY   rZ  lenset_optionsr  split	enumerate)rR  r  rJ   len_intro_strr  splittedr  ss           r!   &test_cftimeindex_repr_formatting_widthr    sW   
 O&':::E''M	m	4	4	4 @ @>>##>>$''h'' 	@ 	@DAqq66]***s1vv,K,K,K,KM,K,K***1uu-(C-,?????	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   B
CCC)   2   r  c                    t          j        dd          }t          j        d|           }|                                }|                                }t          |          t          |          k     sJ d S )NrP  r  r  )rY   rZ  r  r  )rR  	index_101index_periodsindex_101_repr_strindex_periods_repr_strs        r!   !test_cftimeindex_repr_101_shorterr  *  sy     fc:::IO&'BBBM"++--*3355!""S)?%@%@@@@@@@r#   c            	        ddl m}  t          j        ddgddgg          }t          j         | ddd           | ddd	          g | ddd
           | ddd          gg          }t	          ||           }t          j                            ||           t          j        d          }t          j         | ddd                    }t	          ||           }t          j                            ||           d S )Nr   )r{   
2000-01-01z
2000-01-02z
2000-01-03z
2000-01-04r   rE   rF   rS   rT   )ri   r{   r|   r}   r	   testingr   )r{   stringsr/   r6   s       r!   "test_parse_array_of_cftime_stringsr  4  s   %%%%%%h|4|\6RSTTGx^D!Q''a)C)CD^D!Q''a)C)CD	
 H ,G^DDFJ!!&(333 h|$$GxtQ2233H+G^DDFJ!!&(33333r#   c                
   d}t          j        dd|           }t          j        dd          }t          j        |                    |                    }|                    |          }|                    |          sJ d S )Nz
%Y%m%d%H%MrP  r  rQ  r  )rY   rZ  r_   
date_ranger  strftimer&  )rL  date_format	cf_values	dt_valuesr/   r6   s         r!   test_strftime_of_cftime_arrayr  J  s     KHEEEIfa000Ix	**;7788H,,F=="""""""r#   unsafeFTc                   t          j        dd|           }t          j        dd          }| t          v rJ|sHt          j        t          d          5  |                                }d d d            n# 1 swxY w Y   n|                    |          }|	                    |          sJ t          j                            ||           t          |t          j                  sJ d S )NrP  r  rQ  r  znon-standardr   )r  )rY   rZ  r_   r  r   r3   warnsRuntimeWarningto_datetimeindexr&  r|   r  r   r>  DatetimeIndex)rL  r  rJ   r/   r6   s        r!   test_to_datetimeindexr  U  s"    OFAAAAE}VQ///H***6*\.??? 	. 	.++--F	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ''v'66=="""""J!!&(333fb.///////s   A55A9<A9c                    t          j        dd|           }t          j        t          d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nr   r  rQ  r   rY   rZ  r3   r4   r5   r  rL  rJ   s     r!   "test_to_datetimeindex_out_of_ranger  g  s     OFAAAAE	z	0	0	0 ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !   AAAr;   r9   c                    t          j        dd|           }t          j        t          d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nz
2001-02-28rF   rQ  29r   r  r  s     r!   test_to_datetimeindex_feb_29r  o  s     OL!hGGGE	z	.	.	. ! !   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !r  z1https://github.com/pandas-dev/pandas/issues/24263)reasonc                     t          j        ddd          } t          j                            | g          }|                    d          t          dd          k    sJ d S )Nz
2001-01-01r  r9   rQ  z2001-01r   rg   )rY   rZ  r_   
MultiIndexfrom_arraysr   r   )rJ   mindexs     r!   test_multiindexr  w  s\     OL#	JJJE]&&w//F>>)$$a444444r#   )3663S33T2H)floorceilroundc                   t          j        ddd          } t          ||          |           }t          j        ddd          } t          ||          |                                           }|                    |          sJ d S )N2000-01-02T01:03:51r   1777Srn  )r_   r  r   rY   rZ  r  r&  )ri  r   r/   r6   s       r!   +test_rounding_methods_against_datetimeindexr    s     }2BWMMMH(wx((..H_2BWMMMF$WVV$$T**;;==F=="""""""r#   c                    t          j        ddd          }t          j        t          d          5   t          ||           d           d d d            d S # 1 swxY w Y   d S )Nr  r   r  rn  fixedr   ry  )rY   rZ  r3   r4   r5   r   )r   rJ   s     r!   "test_rounding_methods_invalid_freqr    s     O12GLLLE	z	1	1	1 % %vt$$$% % % % % % % % % % % % % % % % % %s   AA!Ac                    t          j         | ddddddd           | ddddddd           | ddddddd	          g          S )
NrE   r   iX@ rS   r   i!    r   i )rY   r   r   s    r!   rounding_indexr    sf    >IaAq"b&11IaAq!Q//IaAq!Q//	
  r#   c                    |                      d          }t          j         |ddddddd           |ddddddd           |ddddddd          g          }|                    |          sJ d S )Nre  rE   rF   r   rS   r
  )r   rY   r   r&  r  rC   r6   r/   s       r!   	test_ceilr    s      %%F~IaAq!Q**IaAq!Q**IaAq!Q**	
 H =="""""""r#   c                    |                      d          }t          j         |ddddddd           |ddddddd           |ddddddd          g          }|                    |          sJ d S )Nre  rE   r   r   rS   r
  r   )r  rY   r   r&  r  s       r!   
test_floorr    s    !!#&&F~IaAq"b!,,IaAq!Q**IaAq!Q**	
 H =="""""""r#   c                    |                      d          }t          j         |ddddddd           |ddddddd           |ddddddd          g          }|                    |          sJ d S )Nre  rE   rF   r   rS   r
  r   )r  rY   r   r&  r  s       r!   
test_roundr    s    !!#&&F~IaAq!Q**IaAq!Q**IaAq!Q**	
 H =="""""""r#   c                    t          j         | ddd           | ddd          g          }|j        }dt          j        ddg          z  }t          j                            ||           d S )Ni  rE   rF   l    `;P r   )rY   r   asi8r|   r}   r  r   r   s       r!   	test_asi8r    so    NIIdAq1199T1a3H3HIJJEZF1a&!1!11HJ!!&(33333r#   c                     ddl } | j        }t          j         |ddddddd	          g          }|j        }t          j        d
g          }t
          j                            ||           dS )z)Test that asi8 conversion is truly exact.r   Ni)  rT   r  rS      -   r   l   "vl)	ri   DatetimeProlepticGregorianrY   r   r  r|   r}   r  r   )ri   rC   rJ   r6   r/   s        r!   test_asi8_distant_dater    su     MMM1INIIeQAr2vFFGHHEZFxPQRRHJ!!&(33333r#   c                 4   t          j        ddd          } t          j        |           dk    sJ t          j        t          j        |                     dk    sJ t	          j        ddd          }t          j        |          dk    sJ t          j        t          j        |                    dk    sJ t	          j        ddd          }t          j        |          dk    sJ t          j        t          j        |                    dk    sJ d S )Nr  rS   rX  rn  1Dr  )rY   rZ  
infer_freqrZ   r_   r  timedelta_range)cf_indxpd_indx
pd_td_indxs      r!   test_infer_freq_valid_typesr"    s   olAC@@@G=!!S((((=g..//36666mL!#>>>G=!!S((((=g..//36666#$DDDJ=$$++++=j1122c999999r#   c                    t          j        t          d          5  t          j        t          j        g d                     d d d            n# 1 swxY w Y   t          j        ddd          } t          j        t          d          5  t          j        t          j        | | g                     d d d            n# 1 swxY w Y   t          j        t          d	          5  t          j        | d d
                    d d d            n# 1 swxY w Y   t          j        | t          j        g d                             J t          j        | t          j        g d                             J t          j        | t          j        g d                             J t          j        ddd          } t          j        | t          j        g d                             J d S )Nz"must contain datetime-like objectsr   )r   rE   rF   z
1990-02-03rT   ry  rn  z
must be 1Dz(Need at least 3 dates to infer frequencyrF   )r   rF   rE   rS   )r   rE   rE   rF   )r   rE   rS   rw  )	r3   r4   r5   rY   r  rZ   rZ  r|   r}   )indxs    r!   test_infer_freq_invalid_inputsr%    sz    
z)M	N	N	N / /
bl999--.../ / / / / / / / / / / / / / / ?<>>>D	z	6	6	6 2 2
blD$<001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
z)S	T	T	T    
d2A2h                              =bh|||44566>>> =bh|||44566>>> =bhyyy11233;;; ?<>>>D=bhyyy11233;;;;;s5   )AAA)CC
C)DDD)z	300AS-JANzA-DECzAS-JULz2AS-FEBzQ-NOVz3QS-DECry  4M7DrX  30H5T40Sc                n    t          j        dd| |          }t          j        |          }|| k    sJ d S )Nr  rS   rR  ri  rL  )rY   rZ  r  )ri  rL  r$  outs       r!   test_infer_freqr.    s<    * ?<QQQD
-

C$;;;;;;r#   c                    t          j        ddd|           }t          j        t          j        |                    }||k                                    sJ d S )Nr  rS   rX  r,  )rY   rZ  pickleloadsdumpsall)rL  idxidx_pkls      r!   test_pickle_cftimeindexr6    sW     /,h
O
O
OCl6<,,--G7N!!!!!!!r#   )NNNNNN)rM  rN  )
__future__r   r0  datetimer   textwrapr   numpyr|   pandasr_   r3   packaging.versionr   xarrayrY   xarray.coding.cftimeindexr   r	   r
   r   r   r   xarray.testsr   r   r   r   xarray.tests.test_coding_timesr   r   r   standard_or_gregorianri   __version__r"   ISO8601_LIKE_STRING_TESTSmarkparametrizelistr  keysr7   _CFTIME_CALENDARSfixturerC   rJ   rM   rP   r\   ra   rd   rm   rp   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   SEL_STRING_OR_LIST_TESTSr   r   r   r   r  r	  r  r  r  r  r  r  r  r!  r#  r)  r,  r/  r4  r7  r9  rC  rE  rK  r`  rl  rq  r}  r  r  r  r}   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  xfailr  r  r  r  r  r  r  r  r  r"  r%  r.  r6  r   r#   r!   <module>rL     s   " " " " " "                       % % % % % %                                          ,MMMwv!""ggg&6&666 * +    YYF+++,		vT:::;iiV4@@@A		vTtDDDEyyfDdKKKLII64dSSST	vTt$???
 		vTt$???
 		vTt$tLLL
 		vTt$tLLL
 		vTt$tLLL
 		tDd	
 	
 	
 		tDd	
 	
 	
 		tDd	
 	
 	
O- - ` D	"	)	)	+	+,,&++--..   
* * 
*    ()))3 3 *)3         
 E E E 0 0 0 3 3 3       * * * 2^]4STT# # UT #
 S S S( 		,,,			<<< 	<<< 	% ) )  )
 ) ) ) ) ) ) ) ) ) #  
 
( (
 
 ( & & & & & & & & & ,   	& 	&  	& E E E
      $   $   $ ! ! ! ( ( ( + + + ' ' ' E,55+++   D	!	(	(	*	*++%**,,--   
' '  ' ' ' ' ' ' ' ' ' ' 	999"+=+=+=>>99'+B+B+BCC ' '  ' 5yyc7J7J7JKKL ' '	  
' 

PSATATATUUV ' '	  
' yyb'9'9'9::II2,>,>,>??99"+=+=+=>> 6 6  6
 	yyyb?Q?Q?QRRS ' '	  
' 5yyc7J7J7JKKL ' '	  
' 

PSATATATUUV ' '	  
' yyb'9'9'9::II2,>,>,>??99"+=+=+=>> L L  L
 ' ' '          , , , 0 0 0 , , , # # # 	' 	' 	' # # # 	J 	J 	J # # #
 + + + %677+ + + 87 + sCj))  	 	 %677+ + + 87	 	 *) +     !M!M!MNN   ON  + + + %677+ + + 87 + + + + RXa99!$$$%%&&1B1B1B(C(CD	^$   
+ +  + %6771 1 1 87 1 %6771 1 87 1 %6771 1 87 1 %677! ! 87 ! %677+ + + 87 + %6771 1 87 1 %677  87  " " "
 #yya'8'8'8!9::+ + + ;: +         	+,	*+6 & &  &
 	+,	*+6 B B  B QG,,, , -, , %F%F%FGG#s,,* * -, HG *  X1FX X X	
 W 2GW W W	
 
Y 4I
Y 
Y 
Y	
 @# #A  B# ---88$7$7$788@ @ 98 98 @ MMM22A A 32 A 4 4 4* ^44# # 54 # ^44E4=110 0 21 54 0 ^44! ! 54 ! j)%<==! ! >= ! MNN5 5 ON 5 !7!7!788#=#=#=>># # ?> 98 # #=#=#=>>% % ?> %    	# 	# 	# 	# 	# 	# 	# 	# 	# 4 4 4 4 4 4 : : : < < <8 
   $ %677  87%  ( %677" " 87 " " "r#   