o
    ŀg'j                     @   s   d dl Zd dl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 d dlmZ d dlmZ G dd dZG dd	 d	ZG d
d dZG dd dZG dd dZdS )    N)IncompatibleFrequency)PeriodDtype)IndexNaTPeriodPeriodIndexSeries
date_rangeoffsetsperiod_range)PeriodArrayc                   @   sZ   e Zd Zejdg ddd Zejdg ddd Zejd	g d
dd ZdS )TestPeriodIndexDisallowedFreqszfreq,freq_depr))2M2ME)2Q-MARz2QE-MAR)2Y-FEBz2YE-FEB)r   2me)r   z2qe-MAR)r   z2yE-febc                 C   s   d|dd   d|dd   d}t jt|d tddg|d W d    n1 s+w   Y  t jt|d tdd|d	 W d    d S 1 sJw   Y  d S )
Nzfor Period, please use '   z' instead of ''matchz
2020-01-01z
2020-01-02freqstartendr   )pytestraises
ValueErrorr   r   )selfr   	freq_deprmsg r"   a/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/indexes/period/test_constructors.py1test_period_index_offsets_frequency_error_message   s   ""zPTestPeriodIndexDisallowedFreqs.test_period_index_offsets_frequency_error_messager    )2SME2sme2CBME2BYE2Byec                 C   s   d|dd   }t jt|d tdd|d W d    n1 s"w   Y  t jt|d tddg|d W d    d S 1 sBw   Y  d S )NInvalid frequency: r   r   z2020-01z2020-05r   )r   r   r   r   r   )r   r    r!   r"   r"   r#   (test_period_index_frequency_invalid_freq,   s   "zGTestPeriodIndexDisallowedFreqs.test_period_index_frequency_invalid_freqr   )z2BQE-SEPz2BYE-MAR2BMEc                 C   s\   d|dd   }t dd|d}tjt|d |  W d    d S 1 s'w   Y  d S )Nr*   r   z01-Jan-2012   periodsr   r   )r	   r   r   r   	to_period)r   r   r!   rngr"   r"   r#   2test_period_index_from_datetime_index_invalid_freq6   s
   
"zQTestPeriodIndexDisallowedFreqs.test_period_index_from_datetime_index_invalid_freqN)	__name__
__module____qualname__r   markparametrizer$   r+   r2   r"   r"   r"   r#   r      s    


	r   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zej	d	e
ejeejgd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zej	dg dd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zej	d,d-d.ged-d.ggd/d0 Z d1d2 Z!d3d4 Z"ej	d5g d6ej	d7g d8d9d: Z#ej	d7g d8d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(ej	dEg dFej)dGej)dHdIdJ Z*dKdL Z+dMS )NTestPeriodIndexc                 C   s   t ddd t ddd d}tjt|d tg ddd}W d    n1 s(w   Y  tjt|d ttg ddd}W d    n1 sJw   Y  t|| tjg ddd}t|| tjtg ddd}t|| d S )	NiYordinalr   r   2The 'ordinal' keyword in PeriodIndex is deprecatedr   )r   r   r   )	r   tmassert_produces_warningFutureWarningr   nparrayassert_index_equalfrom_ordinals)r   r!   idx1idx2alt1alt2r"   r"   r#   test_from_ordinalsA   s   z"TestPeriodIndex.test_from_ordinalsc              	   C   s  t dd}d}d}d}tjt|d* tjt|d t|g|jg|j	d W d    n1 s0w   Y  W d    n1 s?w   Y  d}tjt|d* tjt|d t|g|j
g|j	d	 W d    n1 skw   Y  W d    n1 szw   Y  d
}tjt|d4 tjt|d t|jg|j
g|j	d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )N
2016-01-01Dr<   2Constructing PeriodIndex from fields is deprecatedz!Cannot pass both data and ordinalr   )datar;   r   z Cannot pass both data and fields)rM   yearr   z#Cannot pass both ordinal and fields)r;   rN   r   )r   r   r   r   r>   r?   r@   r   r;   r   rN   )r   per	depr_msg1	depr_msg2err_msg1err_msg2err_msg3r"   r"   r#   test_keyword_mismatchR   s2   
"z%TestPeriodIndex.test_keyword_mismatchc                 C   s   t dddtt dddg}tt|t| ttt|tt| tjtt dddg}tt|t| ttt|tt| t dddtt dddg}tt|t|t	d ttt|tt|t	d d S )N2011-01Mr   2011-03rK   dtype)
r   r   r>   rC   r   r   rA   rB   nanobject)r   arrr"   r"   r#   "test_construction_base_constructorg   s     (z2TestPeriodIndex.test_construction_base_constructorc                 C   s8   t d}g d}t||d}t||d}t|| d S )NrK   )
2011-01-01z
2012-03-04z
2014-05-01rY   )r   r   r   r>   rC   )r   rZ   valuesresultexpectedr"   r"   r#   'test_base_constructor_with_period_dtypev   s
   z7TestPeriodIndex.test_base_constructor_with_period_dtypevalues_constructorc                 C   sV   t dddtt dddg}||}t|td}t|tu sJ t|jt	| d S )NrV   rW   r   rX   rY   )
r   r   r   r\   typer>   assert_numpy_array_equalr`   rA   rB   )r   rd   r/   r`   ra   r"   r"   r#   test_index_object_dtype~   s   

z'TestPeriodIndex.test_index_object_dtypec                 C   s   d}t jt|d tddd}W d    n1 sw   Y  d}t jt|d tdddd}W d    n1 s:w   Y  t jt|d t|dd	}W d    n1 sWw   Y  t || d S )
N#Period with BDay freq is deprecatedr   z4/2/2012Br   PeriodDtype\[B\] is deprecated
   r   r/   r   r   r/   )r>   r?   r@   r   r   rC   )r   msg1pmsg2rb   indexr"   r"   r#   test_constructor_use_start_freq   s   z/TestPeriodIndex.test_constructor_use_start_freqc              	   C   sx  t ddddd }t t ddddd }d	}tjt|d
 t||dd}W d    n1 s6w   Y  tdddd}t	|| tjt|d
 t||dd}W d    n1 saw   Y  t
|j|j tjt|d
 t||d}W d    n1 sw   Y  t	|| g d}ddg}d}tjt|d
& tjt|d
 t||dd W d    n1 sw   Y  W d    n1 sw   Y  tjt|d
& tjt|d
 t||dd W d    n1 sw   Y  W d    n	1 sw   Y  g d}g d}tjt|d
 t||dd}	W d    n	1 s(w   Y  tdddd}
t	|	|
 d S )Ni  i        r         rL   r   Q-DECrN   quarterr   1990Q32009Q2r   z2Q-DECrN   rz   )  r~   r~   zMismatched Period array lengthsrW   )rN   monthr   r   )r   rt      2007-01r   r.   )rA   arangerepeattiler>   r?   r@   r   r   rC   rf   asi8r   r   r   )r   yearsquartersdepr_msgrq   rb   index2monthsr!   idxexpr"   r"   r#   test_constructor_field_arrays   sL   z-TestPeriodIndex.test_constructor_field_arraysc                 C   sb   t tdddtddddd}ttdddtdddtdddtdddgdd}t|| d S )	Nr   nsr:   rs   r   rt   r   r   )r   r   r   r>   rC   r   r   r   r"   r"   r#   test_constructor_nano   s   





	z%TestPeriodIndex.test_constructor_nanoc                 C   s   t jddt jdd}t t jg dt jdd}d}tjt|d t	||d	}W d    n1 s4w   Y  t
|jt| t
|jt| t	j||d	}t
|| d S )
Ni    rY   rs   )r   rt   r   rs   (   rL   r   r}   )rA   r   int64r   r   rB   r>   r?   r@   r   rC   rN   r   rz   from_fields)r   r   r   r!   pindexaltr"   r"   r#   %test_constructor_arrays_negative_year   s   z5TestPeriodIndex.test_constructor_arrays_negative_yearc              	   C   s   d}d}t jt|d6 tjt|d ttddttddd W d    n1 s,w   Y  W d    d S W d    d S 1 sDw   Y  d S )	NrL   zQuarter must be 1 <= q <= 4r   r   i  rs   rx   ry   )	r   r   r   r>   r?   r@   r   rangelist)r   r   r!   r"   r"   r#   !test_constructor_invalid_quarters   s   "z1TestPeriodIndex.test_constructor_invalid_quartersc                 C   s^   d}t jt|d tdddd}W d    n1 sw   Y  tdddd}t || d S )Nz:Non-integer 'periods' in pd.date_range, pd.timedelta_ranger   r   g      %@rW   r.   rk   )r>   r?   r@   r   rC   )r   r!   ra   r   r"   r"   r#   #test_period_range_fractional_period   s   z3TestPeriodIndex.test_period_range_fractional_periodc                 C   s8   t ddd}t|d|jd}t|dd}t|| d S )Nz2002-01-01 00:0030minr   rv   rl   rm   )r   r   r   r>   rC   )r   r   r   ra   r"   r"   r#   "test_constructor_with_without_freq   s   z2TestPeriodIndex.test_constructor_with_without_freqc                 C   s  t dddd}tt|j| ttt|j| d}tjt|d t|j	 W d    n1 s4w   Y  tjt|d tt|j	 W d    n1 sRw   Y  d}tjt
|d ttdd	d
d W d    n1 stw   Y  tt|}t|| t|}t|| t|dd
}t|| t|t d
}t|| |jdksJ t|dd
}t||d |jdksJ t|tdd
}t||d |jdksJ t|dd
}|dd}t|| d S )Nr   rw   rW   r.   z)freq not specified and cannot be inferredr   z'Period' object is not iterable2007r9   r   )rM   MEr   r   rt   rK   e)r   r>   rC   r   r`   r   r   r   r   r   	TypeErrorr   iterr
   MonthEndr   asfreq)r   r   r!   ra   r   r"   r"   r#   test_constructor_fromarraylike   s@   z.TestPeriodIndex.test_constructor_fromarraylikec                 C   sR   t jdddt jd}|t d}t|dd}t|ddd}t|| d S )	Ni i d   rY   zM8[us]rK   r   zM8[ns])	rA   r   r   viewrZ   r   astyper>   rC   )r   valspirb   r"   r"   r#   test_constructor_datetime64arr!  s
   z.TestPeriodIndex.test_constructor_datetime64arrbox)Nseriesrq   c                 C   sZ   t dddd}|d u r|j}n|dkrt|}t|dd}tg ddd}t|| d S )	N2017rs   r   r.   r   rK   r   )z
2017-01-31z
2017-02-28z
2017-03-31z
2017-04-30)r	   _valuesr   r   r>   rC   )r   r   rM   ra   rb   r"   r"   r#   !test_constructor_datetime64arr_ok*  s   z1TestPeriodIndex.test_constructor_datetime64arr_okc                 C   s(  t ddgdd}t ddgdd}t|| |jdksJ t ddgd	d}t ddgd
d}t|| |jd	ks:J t ddgdd}t |dd}t ddgdd}t|| |jdks]J t |dd}t|| |jdkspJ d}tjt|d t dgddd W d    d S 1 sw   Y  d S )Nz2013-01z2013-03z	period[M]rY   rW   r   z
2013-01-05z
2013-03-05z
period[3D]3Dz
2013-01-01z
2013-01-02rK   z&specified freq and dtype are differentr   rV   z	period[D])r   rZ   )r   r>   rC   rZ   r   r   r   )r   r   r   resr!   r"   r"   r#   test_constructor_dtype9  s(   "z&TestPeriodIndex.test_constructor_dtypec                 C   st   t g dd}t|t sJ t|dksJ |jdksJ tjtdd t g  W d    d S 1 s3w   Y  d S )NrW   r   r   r   freq not specifiedr   )r   
isinstancelenr   r   r   r   )r   r   r"   r"   r#   test_constructor_emptyV  s   
"z&TestPeriodIndex.test_constructor_emptyc              
   C   s  t tdddttdddg}t g ddd}t|| t ttdddttdddg}t|| t tttdddtdddg}t g ddd}t|| t ttttdddtdddg}t|| t ttddgdd}t|| tjt	dd t ttg W d    n1 sw   Y  tjt	dd t tttg W d    n1 sw   Y  tjt	dd t ddg W d    n1 sw   Y  tjt	dd t tddg W d    d S 1 sw   Y  d S )	NrV   rW   r   rV   r   rV   )r   r   rV   rV   r   r   r   )
r   r   r   r>   rC   rA   rB   r   r   r   r   r"   r"   r#   test_constructor_pi_nat_  sD   "z'TestPeriodIndex.test_constructor_pi_natc              
   C   sF  d}t jt|d ttdddttdddg W d    n1 s#w   Y  t jt|d tttdddttdddg W d    n1 sLw   Y  t jt|d tttdddtdddg W d    n1 srw   Y  t jt|d ttttdddtdddg W d    d S 1 sw   Y  d S )Nz5Input has different freq=D from PeriodIndex\(freq=M\)r   rV   rW   r   rK   )r   r   r   r   r   r   rA   rB   r   r!   r"   r"   r#   test_constructor_incompat_freq  s*     "z.TestPeriodIndex.test_constructor_incompat_freqc                 C   s   t dttdddg}t g ddd}t|| t dttdddg}t g ddd}t|| t tdddtd	g}t g d
dd}t|| d S )NrV   rW   r   r   r   )r   r   rV   r_   rK   
2012-01-01)r_   r   r   )r   r   r   r>   rC   r   r"   r"   r#   test_constructor_mixed  s   z&TestPeriodIndex.test_constructor_mixedfloats皙? @c                 C   s@   d}t jt|d t| W d    d S 1 sw   Y  d S )Nz9PeriodIndex does not allow floating point in constructionr   )r   r   r   r   )r   r   r!   r"   r"   r#   test_constructor_floats  s   
"z'TestPeriodIndex.test_constructor_floatsc                 C   s   t g d}|d }d}tjt|d t||d}W d    n1 s$w   Y  dd t||D }ttt|}t|}t	|| d S )N)i  i  i  r   rL   r   r}   c                 S   s&   g | ]}|d  dd|d dqS )r   dQr   r"   ).0tr"   r"   r#   
<listcomp>  s   & zETestPeriodIndex.test_constructor_year_and_quarter.<locals>.<listcomp>)
r   r>   r?   r@   r   zipr   mapr   rC   )r   rN   rz   r!   r   strslopsro   r"   r"   r#   !test_constructor_year_and_quarter  s   z1TestPeriodIndex.test_constructor_year_and_quarterc                 C   sD  t dddd}tg ddd}t|| t ddd	d
}tg dd	d}t|| t dddd}tg ddd}t|| d}tjt|d tdgdd W d    n1 sZw   Y  d}tjt|d tdgdd W d    n1 szw   Y  d}tjt|d t dddd W d    d S 1 sw   Y  d S )N2014-01r   rs   r   r   r/   )r   z2014-03z2014-05z2014-07r   
2014-01-02z
2014-01-15r   r   )r   z
2014-01-05z
2014-01-08z
2014-01-11z
2014-01-142014-01-01 17:004hr   )r   r   r/   )z2014-01-01 09:00z2014-01-01 13:00r   z;Frequency must be positive, because it represents span: -1Mr   rV   z-1Mz:Frequency must be positive, because it represents span: 0M0Mr.   )r   r   r>   rC   r   r   r   )r   pidxrb   r!   r"   r"   r#   test_constructor_freq_mult  s4   "z*TestPeriodIndex.test_constructor_freq_multzfreq_offset, freq_period))YEr9   )r   rW   )rK   rK   )minr   )sr   mult)r   rt   r   rs   rv   c                 C   sJ   t || }t || }td|dd}td|dd|}t|| d S )N
2014-04-01rk   r   )strr   r	   r0   r>   rC   )r   r   freq_offsetfreq_periodfreqstr_offsetfreqstr_periodr   rb   r"   r"   r#   %test_constructor_freq_mult_dti_compat  s   z5TestPeriodIndex.test_constructor_freq_mult_dti_compatc                 C   sD   t d| ddd}td| ddd| d}t|| d S )Nr   rW   rk   r   r   )r   r	   r0   r>   rC   )r   r   r   rb   r"   r"   r#   +test_constructor_freq_mult_dti_compat_month  s   z;TestPeriodIndex.test_constructor_freq_mult_dti_compat_monthc                 C   sb   dD ]}t ddg|d}t ddgdd}qdD ]}tdd|d	}t dd
gdd}t|| qd S )N)1D1h1h1DrJ   z
2016-01-02r   z2016-01-01 00:00z2016-01-02 00:0025hrt   rl   z2016-01-02 01:00)r   r   r>   rC   )r   r   r   rb   r"   r"   r#   test_constructor_freq_combined  s   z.TestPeriodIndex.test_constructor_freq_combinedc                 C   sd  t dddd}t|dksJ t dddd}t|dksJ t dddd}t|d	ks-J t d
ddd}t|dks<J d}tjt|d t dddd}W d    n1 sWw   Y  t|dksdJ t dddd}t|dkssJ t dddd}t|dksJ t dddd}t|dksJ tjt|d tdd}t |dd}W d    n1 sw   Y  t|dksJ |j|jksJ |d |ksJ tdd}t |d d!}t|d ksJ |j|jksJ |d" |ksJ d#}tjt|d tdd$}W d    n	1 sw   Y  t |d d!}t|t|ksJ ||k s'J |j|jks0J d S )%Nr9   z1/1/2001z	12/1/2009)r   r   r   	   r   $   rW   l   rK   z
12/31/2009i  rh   r   ri   i-	  hz12/31/2001 23:00i8"  Minz1/1/2001 23:59i  r   z1/1/2001 23:59:59iQ 02-Apr-2005rw   rm   r   
2006-12-31Wrk   )r   r/   r=   :'w' is deprecated and will be removed in a future version.1w)r   r   r>   r?   r@   r   r   all)r   r   r!   r   i1end_intvi2r"   r"   r#   test_period_range_length  sN   

z(TestPeriodIndex.test_period_range_lengthc                 C   s   d}t jt|d! tdd}tdd}t||d t|tddg}W d    n1 s-w   Y  t|dks:J |d	 |ksBJ t jt|d tt|tddg}W d    n1 s`w   Y  t|dksmJ |d	 |ksuJ d S )
Nrh   r   r   ri   
2005-05-01)r   r   z
2005-05-05rt   r   )	r>   r?   r@   r   r   r   r   rA   rB   )r   r!   r   r   r   r"   r"   r#   "test_infer_freq_from_first_element1  s   

z2TestPeriodIndex.test_infer_freq_from_first_elementc              	   C   sl  d}t jt|d tdd}W d    n1 sw   Y  d}t jt|d |tddg}W d    n1 s9w   Y  d}d	}tjt|d# t jt|d t| W d    n1 s`w   Y  W d    n1 sow   Y  t	|}tjt|d, t jt|d t| W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )
Nrh   r   r   ri   r   r   wz9Input has different freq=W-SUN from PeriodIndex\(freq=B\)rj   )
r>   r?   r@   r   r   r   r   r   rA   rB   )r   r!   r   r   r   r"   r"   r#   test_mixed_freq_raisesB  s0   


"z&TestPeriodIndex.test_mixed_freq_raisesr   )rW   r   r9   rK   ri   r   r   msusr   r   z8ignore:Period with BDay freq is deprecated:FutureWarningz3ignore:PeriodDtype\[B\] is deprecated:FutureWarningc                 C   s,   t d|dd}t|j|d}t|| d S )Nz
2001/04/01r   r   r   )r   r   r`   r>   rC   )r   r   orgr   r"   r"   r#   test_recreate_from_dataU  s   z'TestPeriodIndex.test_recreate_from_datac                 C   sd   g d}t |dd}tdd |D }|t}t|tsJ tdd |D s*J t|| d S )N)i  r~   i  r9   r   c                 S   s   g | ]}t |qS r"   )r   )r   numr"   r"   r#   r   e  s    zDTestPeriodIndex.test_map_with_string_constructor.<locals>.<listcomp>c                 s   s    | ]}t |tV  qd S )N)r   r   )r   resir"   r"   r#   	<genexpr>l  s    zCTestPeriodIndex.test_map_with_string_constructor.<locals>.<genexpr>)r   r   r   r   r   r   r>   rC   )r   rawrq   rb   r   r"   r"   r#    test_map_with_string_constructora  s   
z0TestPeriodIndex.test_map_with_string_constructorN),r3   r4   r5   rI   rU   r^   rc   r   r6   r7   r   rA   rB   r   r   _from_sequencerg   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr   r   r"   r"   r"   r#   r8   @   sd    
&	*	
	(

	
	0
r8   c                   @   sD   e Zd Zdd Zdd Zejdddge	ddggdd	 Z
d
S )TestSimpleNewc                 C   s   t ddddd}tjtdd |j|dd W d    n1 s!w   Y  |j|jdd}t|| d	}tjt|d t|jjt	|j
|jd
 W d    n1 sVw   Y  t|jj|j
|jd
}|j|dd}t|| d S )Nr   ro   rt   rW   )namer/   r   <class .*PeriodIndex'>r   r  z Should be numpy array of type i8rY   )r   r   r   AssertionError_simple_new_datar>   rC   re   r   r   rZ   )r   r   ra   r!   r]   r"   r"   r#   test_constructor_simple_news  s   z)TestSimpleNew.test_constructor_simple_newc                 C   sj   t g ddd}tjtdd |j|dd W d    n1 s w   Y  |j|jdd}t|| d S )NrW   ro   )r   r  r  r   r  )r   r   r   r  r  r  r>   rC   )r   r   ra   r"   r"   r#   !test_constructor_simple_new_empty  s   z/TestSimpleNew.test_constructor_simple_new_emptyr   r   r   c                 C   s>   t jtdd t| W d    d S 1 sw   Y  d S )Nz<class r   )r   r   r  r   r  )r   r   r"   r"   r#   -test_period_index_simple_new_disallows_floats  s   "z;TestSimpleNew.test_period_index_simple_new_disallows_floatsN)r3   r4   r5   r	  r
  r   r6   r7   rA   rB   r  r"   r"   r"   r#   r  r  s
    	r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestShallowCopyc                 C   s(   t g dd}| }|}t|| d S )NrW   r   )r   _viewr>   rC   )r   r   ra   rb   r"   r"   r#   test_shallow_copy_empty  s   z'TestShallowCopy.test_shallow_copy_emptyc                 C   sN   t dddd}tjtdd ||j W d    d S 1 s w   Y  d S )N
2018-01-01r   2Dr.   ndarrayr   )r   r   r   r  _shallow_copyr   r   r   r"   r"   r#   test_shallow_copy_disallow_i8  s   "z-TestShallowCopy.test_shallow_copy_disallow_i8c                 C   sL   t dddd}tjtdd || W d    d S 1 sw   Y  d S )Nr  r   r  r.   r   r   )r   r   r   r  r  r  r"   r"   r#   0test_shallow_copy_requires_disallow_period_index  s   "z@TestShallowCopy.test_shallow_copy_requires_disallow_period_indexN)r3   r4   r5   r  r  r  r"   r"   r"   r#   r    s    r  c                   @   s   e Zd Zdd Zdd ZdS )TestSeriesPeriodc                 C   sN   d}t jt|d ttddddtd W d    d S 1 s w   Y  d S )Nz(Cannot cast PeriodIndex to dtype float64r   z
2000-01-01rk   rK   r.   rY   )r   r   r   r   r   floatr   r"   r"   r#   !test_constructor_cant_cast_period  s   "z2TestSeriesPeriod.test_constructor_cant_cast_periodc                 C   s4   t ddd}t|tdd}t|}t|| d S )Nz1/1/2000rk   )r/   rK   rY   )r   r   r   r>   assert_series_equal)r   r   serr   r"   r"   r#   test_constructor_cast_object  s   z-TestSeriesPeriod.test_constructor_cast_objectN)r3   r4   r5   r  r  r"   r"   r"   r#   r    s    r  )numpyrA   r   pandas._libs.tslibs.periodr   pandas.core.dtypes.dtypesr   pandasr   r   r   r   r   r	   r
   r   pandas._testing_testingr>   pandas.core.arraysr   r   r8   r  r  r  r"   r"   r"   r#   <module>   s     (
*    6"