
    AHjk                         d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZ ddlmZmZmZ  ej                   dej"                        Zd	 Z G d
 d      Zy)    )chainN)parser)pop_tz_offset_from_string
word_is_tz)combine_dictsnormalize_unicode   )ALWAYS_KEEP_TOKENS
DictionaryNormalizedDictionary(\d+)c                     t        | t              r| S t        | t              r | j                         j	                         dv S y)N)true1yesF)
isinstanceboolstrstriplower)values    S/root/tools/cai/cai_env/lib/python3.12/site-packages/dateparser/languages/locale.py_parse_boolr      s9    %%{{}""$(<<<    c                   f   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZd Zd(dZd(dZd)dZed*d       Zd(dZd	 Zd)d
Zd+dZd)dZd Zd Zd Zd Zd Zd Zd)dZ d Z!d)dZ"d Z#d Z$d)dZ%d Z&d Z'd)dZ(d+dZ)d Z*d,dZ+d)dZ,d)d Z-d)d!Z.d)d"Z/d)d#Z0d$ Z1d)d%Z2d)d&Z3e4jj                  fd'Z6y)-Localea\  
    Class that deals with applicability and translation from a locale.

    :param shortname:
        A locale code, e.g. 'fr-PF', 'qu-EC', 'af-NA'.
    :type shortname: str

    :param language_info:
        Language info (translation data) of the language the locale belongs to.
    :type language_info: dict

    :return: A Locale instance
    Nc                     || _         |j                  di       j                  |i       }t        ||      | _        | j                  j	                  dd        y )Nlocale_specific)	shortnamegetr   infopop)selfr   language_infolocale_specific_infos       r   __init__zLocale.__init__1   sQ    ",001BBGKKr 
 "-1EF			'.r   c                    |rt        |d      \  }}| j                  |      }|j                  rt        |      }| j	                  ||      }| j                  |      }|j                  |      }|j                  |      S )a  
        Check if the locale is applicable to translate date string.

        :param date_string:
            A string representing date and/or time in a recognizably valid format.
        :type date_string: str

        :param strip_timezone:
            If True, timezone is stripped from date string.
        :type strip_timezone: bool

        :return: boolean value representing if the locale is applicable for the date string or not.
        F	as_offsetsettings)r   _translate_numerals	NORMALIZEr   	_simplify_get_dictionarysplitare_tokens_valid)r#   date_stringstrip_timezoner+   _
dictionarydate_tokenss          r   is_applicablezLocale.is_applicable9   s}     6{eTNK..{;+K8Knn[8nD))(3
 &&{3**;77r   c                     |rt        |d      \  }}| j                  ||      }| j                  ||      }g }|D ]%  }|j                  | j	                  |d|             ' | j                  ||      S )NFr(   r*   keep_formattingr+   )r   r.   _sentence_splitextend_split&_count_words_present_in_the_dictionary)r#   textr3   r+   r4   	sentencestokenssents           r   count_applicabilityzLocale.count_applicabilityR   s    /FGD!~~dX~6(((A	 	WDMM$++dEH+UV	W::68LLr   c                     | j                  | j                  |            }d}d}t        |      D ]-  }||v r||   r|dz  }|dz  }|j                         s)|dz  }/ ||gS )Nr*   r   r	   )clean_dictionary_get_split_dictionarysetisdigit)r#   wordsr+   r5   dict_cntskip_cntwords          r   r>   z-Locale._count_words_present_in_the_dictionary]   s    **&&&9

 J 	Dz!d#MHMHA	 (##r   c                 l    g }| D ]"  }t        |      |k  s|j                  |       $ |D ]  }| |=  | S N)lenappend)r5   	thresholddel_keyskeydel_keys        r   rE   zLocale.clean_dictionarym   sM     	%C3x)#$	%   	$G7#	$r   c                    | j                  |      }|j                  rt        |      }| j                  ||      }| j	                  |      }|j                  ||      }| j                  |      }t        |      D ]|  \  }}|j                         }|j                         D ]-  \  }	}
|	j                  |      s|	j                  |
|      ||<    U ||v s[|r|j                         s|nd}||   xs |||<   ~ d|v r| j                  |      }g }d}|t        |      k  r||   }|sd}t        |      dz
  }|dk\  r ||   dk(  r|dz  }|dz  }|dk\  r	||   dk(  rd}|dz   }|t        |      k  r)||   dk(  r!|dz  }|dz  }|t        |      k  r	||   dk(  r!|dkD  r[|dkD  rVt        |      D ]  }|j!                           t#        ||      }t        |      D ]  }|j%                  d        ||dz   z  }|dz  }|j%                  |       |dz  }|t        |      k  r| j'                  ||rd|      S d|      S )a  
        Translate the date string to its English equivalent.

        :param date_string:
            A string representing date and/or time in a recognizably valid format.
        :type date_string: str

        :param keep_formatting:
            If True, retain formatting of the date string after translation.
        :type keep_formatting: bool

        :return: translated date string.
        r*    inr   r	    	separatorr+   )r,   r-   r   r.   r/   r0   _get_relative_translations	enumerater   itemsmatchsubisalpha_clear_future_wordsrO   ranger"   maxrP   _join)r#   r2   r:   r+   r5   date_string_tokensrelative_translationsirL   patternreplacementfallbackfiltered_tokenstokenprev_spacesjnext_spacesr4   
max_spacess                      r   	translatezLocale.translatew   s    ..{;+K8Knn[8nD))(3
'--k?K $ ? ? ? R !34 		IGAt::<D(=(C(C(E I$==&,3KKT,J&q)I
 :%'6t||~tSUH,6t,<,H&q)		I %%!%!9!9:L!M #())&q)E (1,1f!3s!:1$KFA 1f!3s!:
  E#0116H6Ks6R1$KFA #0116H6Ks6R
 ?{Q";/ .'++-. "%[+!>J":. 4'..s34 q(AQ""5)FAM #())P zz+b  
 	
14  
 	
r   c                     t         j                  |      }t        |      D ]E  \  }}|j                         st	        t        |            j                  t        |            ||<   G dj                  |      S )NrV   )	NUMERAL_PATTERNr0   r\   	isdecimalr   intzfillrO   join)r#   r2   re   rg   rl   s        r   r,   zLocale._translate_numerals   sl    ,22;?!"45 	JHAu (+CJ(=(=c%j(I"1%	J ww)**r   c                     |j                   r/| j                  | j                  d      | _        | j                  S | j                  | j                  d      | _        | j                  S )NT	normalizeF)r-   !_normalized_relative_translations_generate_relative_translations_relative_translationsr#   r+   s     r   r[   z!Locale._get_relative_translations   st    55=8848H 6 999**2.2.R.R# /S /+ ...r   c                    | j                   j                  di       }i }|j                         D ]  \  }}|rt        t	        t
        |            }dj                  t        |t        d            }|j                  dd      }t        j                  dj                  |      t        j                  t        j                  z        }|||<    |S )Nzrelative-type-regex|T)rS   reversez(\d+z	(?P<n>\d+z^(?:{})$)r!   r    r]   listmapr   rw   sortedrO   replacerecompileformatUNICODE
IGNORECASE)r#   rz   rf   relative_dictionaryrS   r   rh   s          r   r|   z&Locale._generate_relative_translations   s     $		.CR H /557 	/JCS!2E:;hhvedCDGoog|<Gjj""7+RZZ"---GG ,/(	/ #"r   c           
         g d}ddg}| j                  ||      }| j                  |      }g }g }|D ]  }	| j                  |	|      \  }
}g }g }t        |      dz
  }d}t	        |      D ]-  \  }}||k  r||dz      nd}| j                  ||g|      }|rd}0|dk(  s|dk(  r&|j                  |       |j                  |
|          `||v rV||vrR| j                  |vrD|j                  ||          |j                  | j                  |
|   |
|dz      g|             d	}||v r-||vr)|j                  ||          |j                  |
|          |j                  d
      |v r||vr|t        |j                  d
            d  }|r;||j                  d
         r'|j                  ||j                  d
         |z          n#|j                  ||j                  d
                |j                  |
|          | j                  |      r'|j                  |       |j                  |
|          |r5t        |
|         r'|j                  |       |j                  |
|          |s|j                  |       g }|j                  |       g }0 |sn|j                  |       |j                  |        t        t        |            D ]  }d||   v r| j                  ||         ||<   | j                  t        t        t        ||               |      ||<   | j                  t        t        t        ||               |      ||<    ||fS )N)-u   ——u   —u   ～zhjar*   r	   FrV   rX   Tu   ()"'{}[],.،rW   )r;   r/   _simplify_split_alignrO   r\   _join_chunkrP   r   r   _token_with_digits_is_okr   rb   ra   r   filterr   )r#   search_stringr+   dashes word_joint_unsupported_languagesr@   r5   
translatedoriginalsentenceoriginal_tokenssimplified_tokenstranslated_chunkoriginal_chunklast_token_indexskip_next_tokenrg   rL   	next_wordcurrent_and_next_joinedpuncts                        r   translate_searchzLocale.translate_search   s   .,0$<((((J	))8)<

! <	0H151K1K8 2L 2.O.  "N"#459#O$%67 1,489<L8L-a!e4RT	*.*:*:9% +; +' #&+O2:$++D1"))/!*<=+z9F*.NN$++J7N,OP"))((,Q/Q1GH%- )  '+OZ'D,>$++Jt,<="))/!*<=ZZ0J>4vCU TZZ%@!A!CDEDJJ,G!H(//&tzz/'BCeK )//
4::o;V0WX"))/!*<=2248$++D1"))/!*<=%*_Q5G*H$++D1"))/!*<='"))*:;+-( 7)+c1,d  !!"23/y<	0z s:' 	Az!}$ $ 8 8A G
1 ,,VD*Q-01H - JqM **VD(1+./( + HQK	 8##r   c                     | j                  |      }g }| j                  @|D ]4  }|j                  d      st        |      dkD  s$|j	                  |       6 || _        | j                  S )Nr*   .r	   )r/   _abbreviationsendswithrO   rP   )r#   r+   r5   abbreviationsitems        r   _get_abbreviationszLocale._get_abbreviations?  so    ))8)<
&" /==%#d)a-!((./ #0D"""r   c                 x   | j                  |      }dg}d}|D ]  }|d|d d z   dz   z  } | j                  dv r|D ]  }|d|z   dz   z  } d	d
ddddd}d| j                  vr||d   z   }	t        j                  |	|      }
n+||| j                  d      z   }	t        j                  |	|      }
t        d |
      }
|
S )Nr*   z[0-9]rV   z(?<! ))ficshudedaz(?<!u   [\.!?;…\r\n]+(?:\s|$)*u%   [\.!?;…\r\n]+(\s*[¡¿]*|$)|[¡¿]+z[|!?;\r\n]+(?:\s|$)+u$   [。…‥\.!?？！;\r\n]+(?:\s|$)+z[\r\n]+u   [\r\n؟!\.…]+(?:\s|$)+)r	                  sentence_splitter_groupr	   )r   r   r!   r   r0   r   )r#   stringr+   r   digit_abbreviationsabbreviation_stringabbreviationdigit_abbreviationsplitters_dict	split_regr@   s              r   r;   zLocale._sentence_splitI  s   ///B&i ) 	L,s++c1	 >>;;&9 "#//#5# +7&6*
 %DII5+nQ.??IF3I $ +D!EFG  F3I4+	r   c                 ~   | j                  ||      }| j                  | j                  t        |      |      |      }t        |      t        |      k(  r||fS t        |      t        |      k  rpd}t	        |      D ]_  \  }}|t        |      k  r:|t        ||   j                               k(  rd}6|sd};|j                  |d       N|j                  |d       a nod}t	        |      D ]_  \  }}|t        |      k  r:t        |j                               ||   k(  rd}6|sd};|j                  |d       N|j                  |d       a t        |      t        |      k7  rRt        |      t        |      kD  r|j                  d       n|j                  d       t        |      t        |      k7  rR||fS )Nr*   FTrV   )_word_splitr.   r   rO   r\   r   insertremove)r#   r   r+   r   r   	add_emptyrg   rl   s           r   r   zLocale._simplify_split_alignn  s   **8h*G ,,NN,X6NJ - 
 3'8#99"$555!C(9$::I%&78 25s?++ 1/!2D2J2J2L MM$)	((,I$+221b9#**1b12 I%o6 45s,--(7;LQ;OO$)	((,I$-44Q;%,,Q34 /"c*;&<<?#c*;&<<&&r*!((,	 /"c*;&<<
  111r   c                     | j                   /d|_        | j                  |      }| j                  |      | _         | j                   S )NTr*   )_split_dictionaryr-   r/   _split_dict)r#   r+   r5   s      r   rF   zLocale._get_split_dictionary  sH    !!)!%H--x-@J%)%5%5j%AD"%%%r   c                 p    i }|D ].  }d|v r |j                         }|D ]
  }||   ||<    '||   ||<   0 |S )NrX   )r0   )r#   r5   newdictr   r]   rg   s         r   r   zLocale._split_dict  s\     	1Dd{

 2A!+D!1GAJ2 !+4 0	1 r   c                 f    d| j                   v r| j                  |d|      S |j                         S )Nno_word_spacingTr9   )r!   r=   r0   )r#   r   r+   s      r   r   zLocale._word_split  s/    		);;vth;OO<<>!r   c                 |    |g}t        | j                  |d            }t        | j                  |||            }|S )Nr   r*   )r   _split_tokens_with_regex_split_tokens_by_known_words)r#   r2   r:   r+   rA   s        r   r=   zLocale._split  sK    d33FHEF--( . 

 r   c                     |d d  }t        |      D ]  \  }}t        j                  ||      ||<     t        t        t        j                  |            S rN   )r\   r   r0   r   r   r   from_iterable)r#   rA   regexrg   rl   s        r   r   zLocale._split_tokens_with_regex  sO    !&) 	/HAu.F1I	/dE//788r   c                     | j                  |      }t        |      D ]  \  }}|j                  ||      ||<    t        t	        j
                  |            S rN   )r/   r\   r0   r   r   r   )r#   rA   r:   r+   r5   rg   rl   s          r   r   z#Locale._split_tokens_by_known_words  sX    ))(3
!&) 	AHAu"((@F1I	AE''/00r   c                     d| j                   v r| j                  |d|      S t        j                  dddj	                  |            S )Nr   rV   rY   z\s{2,}rX   )r!   rd   r   r_   rw   )r#   chunkr+   s      r   r   zLocale._join_chunk  s>    		)::erH:EE66)S#((5/::r   c                 ~    d| j                   v rt        j                  d|      yyt        j                  d|      yy)Nr   z[\d\.:\-/]+TFz\d+)r!   r   search)r#   rl   s     r   r   zLocale._token_with_digits_is_ok  s>    		)yy/; yy'3r   c                     |j                         }| j                  |      }| j                  j                  d      dk(  r| j	                  ||      }|S | j                  ||      }|S )Nr*   nameru)r   _get_simplificationsr!   r    "_process_russian_compound_ordinals_apply_simplifications)r#   r2   r+   simplificationss       r   r.   zLocale._simplify  so    !'')33X3F99== D(AA_K  55k?SKr   c                     |D ]A  }t        |j                               d   \  }}|j                  ||      j                         }C |S )Nr   )r   r]   r_   r   )r#   r2   r   simplificationrh   ri   s         r   r   zLocale._apply_simplifications  sQ    - 	HN#'(<(<(>#?#B G[!++k;?EEGK	H r   c                 b    | j                  ||      }d }d}t        j                  |||      }|S )uX   Process Russian compound ordinals mathematically (двадцать + первое = 21).c                     t        | j                  d            }t        | j                  d            }||z   }d|cxk  rdk  rn n|dv rd|cxk  rdk  rt        |      S  | j                  d      S )Nr	   r      )      	   r   )ru   groupr   )r^   	first_num
second_numresults       r   replace_number_pairszGLocale._process_russian_compound_ordinals.<locals>.replace_number_pairs  sp    EKKN+IU[[^,J+FF b Y(%:qJ?SRS?S6{" @T;;q>!r   z\b(\d+)\s+(\d+)\b)r   r   r_   )r#   r2   r   r   number_pair_patterns        r   r   z)Locale._process_russian_compound_ordinals  s;    11+O	" 3ff02FTr   c                 (   t        | j                  j                  dd            }|j                  r| j                  g | _        | j                  d      }|D ]{  }t        |j                               d   \  }}|sd|z  }t        j                  |t        j                  t        j                  z        }| j                  j                  ||i       } | j                  S | j                  g | _        | j                  d      }|D ]{  }t        |j                               d   \  }}|sd|z  }t        j                  |t        j                  t        j                  z        }| j                  j                  ||i       } | j                  S )Nr   FTry   r   z(?<=\A|\W|_)%s(?=\Z|\W|_))flags)r   r!   r    r-   _normalized_simplifications_generate_simplificationsr   r]   r   r   IUrP   _simplifications)r#   r+   r   r   r   rh   ri   s          r   r   zLocale._get_simplifications  sq   %diimm4Eu&MN//7350"&"@"@4"@"P&5 TN+/0D0D0F+G+J(G[*">"H jjrttDG44;;Wk<RST 333 $$,(*%"&"@"@5"@"Q&5 IN+/0D0D0F+G+J(G[*">"H jjrttDG))00';1GHI (((r   c                 ,   g }| j                   j                  dg       D ]r  }i }t        |j                               d   \  }}|rt	        |      }t        |t              rt        |      ||<   n|rt	        |      n|||<   |j                  |       t |S )Nr   r   )	r!   r    r   r]   r   r   ru   r   rP   )r#   rz   r   r   c_simplificationrS   r   s          r   r   z Locale._generate_simplifications  s    "iimm,=rB 	5N!n2245a8JC',%%(+E
 %DM(9%(@SX %""#34	5 r   c                 j    h d}t        |      j                  |      rd||j                  d      <   |S )N>   dayhourweekyearmonthminutesecondrV   rW   )rG   
isdisjointindex)r#   rI   freshness_wordss      r   ra   zLocale._clear_future_words+  s1    Vu:  1')E%++d#$r   c                     |sy| j                  |      d   }|d   }t        dt        |            D ]!  }||dz
     ||   }}||vr	||vr||z  }||z  }# |S )NrV   	capturingr   r	   )_get_splittersrb   rO   )	r#   rA   rZ   r+   capturing_splittersjoinedrg   leftrights	            r   rd   zLocale._join1  s    "11(;KHq#f+& 	A Q-%D..5@S3S)#eOF		 r   c                     |j                   s9| j                  | j                          || j                  _        | j                  S | j                  | j                          || j                  _        | j                  S rN   )r-   _dictionary_generate_dictionary	_settings_normalized_dictionary_generate_normalized_dictionaryr~   s     r   r/   zLocale._get_dictionary?  so    !!'))+)1D&###**24464<D''1...r   c                 T    | j                   | j                  |       | j                   S rN   )
_wordchars_set_wordcharsr~   s     r   _get_wordcharszLocale._get_wordcharsK  $    ??")r   c                 T    | j                   | j                  |       | j                   S rN   )
_splitters_set_splittersr~   s     r   r  zLocale._get_splittersP  r  r   c                 t   t               t               d}|dxx   t        t              z  cc<   | j                  |      }t        | j                  j	                  dg             |d   z  }|D ]A  }t        j                  d|t
        j                        s)||v s.|d   j                  |       C || _	        y )N)	wordcharsr  r  skipz^\W+$r  )
rG   r
   r  r!   r    r   r^   r   addr  )r#   r+   	splittersr  r  rl   s         r   r  zLocale._set_splittersU  s     	
	 	+#&8"99''1	499==,-	+0FF 	2E88HeRZZ8	!+&**51		2 $r   c                     t               }| j                  |      D ]N  }t        j                  d|t        j                        r)|D ]!  }|j                  |j                                # P |dhz
  h dz  | _        y )N
^[\W\d_]+$rX   >
   0r   23456789)rG   r/   r   r^   r   r  r   r  r#   r+   r  rL   chars        r   r  zLocale._set_wordcharsh  su    E	((2 	,DxxtRZZ8 ,djjl+,	, $se+ /
 
r   c                 "   | j                   xt               }| j                  |      D ]N  }t        j                  d|t        j
                        r)|D ]!  }|j                  |j                                # P |h dz
  | _         | j                   S )Nr  >   r  r   r  r  r  r   r!  r"  r#  r$  ampqrX   '(r   :)_wordchars_for_detectionrG   r/   r   r^   r   r  r   r%  s        r   get_wordchars_for_detectionz"Locale.get_wordchars_for_detection}  s    ((0I,,X6 088M4<  0DMM$**,/00
 -6 9 -D)* ,,,r   c                 <    t        | j                  |      | _        y Nr*   )r   r!   r  r~   s     r   r	  zLocale._generate_dictionary  s    %dii(Cr   c                 <    t        | j                  |      | _        y r2  )r   r!   r  r~   s     r   r  z&Locale._generate_normalized_dictionary  s    &:499x&X#r   c                 >   | j                   j                  dg       | j                   j                  dg       | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d	   g| j                   d
   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   | j                   d   g| j                   d   | j                   d   | j                   d   gd}dj                  | j                   d         }t        ||g|      S )Nr  pertainmondaytuesday	wednesdaythursdayfridaysaturdaysundayjanuaryfebruarymarchaprilmayjunejulyaugust	septemberoctobernovemberdecemberr   r   r   )JUMPPERTAINWEEKDAYSMONTHSHMSz{language}ParserInfor   )language)basesdict)r!   r    r   type)r#   base_cls
attributesr   s       r   to_parserinfozLocale.to_parserinfo  ss   IIMM&"-yy}}Y3		(#		)$		+&		*%		(#		*%		(# 		)$		*%		'"		'"		% 		&!		&!		(#		+&		)$		*%		*% IIf%tyy':DIIh<OP5

8 &,,dii6G,HD
<<r   )FNrN   )r   )F)rX   N)7__name__
__module____qualname____doc__r  r  r   r   r  r  r}   r{   r   r   r/  r&   r7   rC   r>   staticmethodrE   rq   r,   r[   r|   r   r   r;   r   rF   r   r   r=   r   r   r   r   r.   r   r   r   r   ra   rd   r/   r  r  r  r  r0  r	  r  r   
parserinforT   r   r   r   r      s#    K!"&JJ!(,%N#/82	M$   T
l+/#M$^##J,2\&	"91;")4 
/

$&
*->DY &,%6%6 =r   r   )	itertoolsr   r   r   dateutilr   dateparser.timezone_parserr   r   dateparser.utilsr   r   r5   r
   r   r   r   r   rs   r   r   r[  r   r   <module>r`     sA       L = L L"**Xrtt,j
= j
=r   