B
    ܵ|V{'                 @   s   G d d de ZdS )c               @   s   e Z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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d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<BaseStemmerc             C   s    |  d d| _i | _d| _d S )N i'      )set_currentmaxCacheSize_cache_counter)self r	   :lib/python3.7/site-packages/snowballstemmer/basestemmer.py__init__   s    
zBaseStemmer.__init__c             C   s2   || _ d| _t| j | _d| _| j| _| j| _dS )z.
        Set the self.current string.
        r   N)currentcursorlenlimitlimit_backwardbraket)r   valuer	   r	   r
   r      s    zBaseStemmer.set_currentc             C   s   | j S )z.
        Get the self.current string.
        )r   )r   r	   r	   r
   get_current   s    zBaseStemmer.get_currentc             C   s4   |j | _ |j| _|j| _|j| _|j| _|j| _d S )N)r   r   r   r   r   r   )r   otherr	   r	   r
   	copy_from   s    zBaseStemmer.copy_fromc             C   sn   | j | jkrdS t| j| j  }||ks0||k r4dS ||8 }||d?  d|d@ > @ dkr\dS |  j d7  _ dS )NF         r   T)r   r   ordr   )r   sminmaxchr	   r	   r
   in_grouping!   s    zBaseStemmer.in_groupingc             C   sr   | j | jkrdS t| j| j d  }||ks4||k r8dS ||8 }||d?  d|d@ > @ dkr`dS |  j d8  _ dS )NFr   r   r   r   T)r   r   r   r   )r   r   r   r   r   r	   r	   r
   in_grouping_b-   s    zBaseStemmer.in_grouping_bc             C   s|   | j | jkrdS t| j| j  }||ks0||k rB|  j d7  _ dS ||8 }||d?  d|d@ > @ dkrx|  j d7  _ dS dS )NFr   Tr   r   r   )r   r   r   r   )r   r   r   r   r   r	   r	   r
   out_grouping9   s    zBaseStemmer.out_groupingc             C   s   | j | jkrdS t| j| j d  }||ks4||k rF|  j d8  _ dS ||8 }||d?  d|d@ > @ dkr||  j d8  _ dS dS )NFr   Tr   r   r   )r   r   r   r   )r   r   r   r   r   r	   r	   r
   out_grouping_bF   s    zBaseStemmer.out_grouping_bc             C   sF   | j | jkrdS t| j| j  }||ks0||k r4dS |  j d7  _ dS )NFr   T)r   r   r   r   )r   r   r   r   r	   r	   r
   in_rangeS   s    zBaseStemmer.in_rangec             C   sJ   | j | jkrdS t| j| j d  }||ks4||k r8dS |  j d8  _ dS )NFr   T)r   r   r   r   )r   r   r   r   r	   r	   r
   
in_range_b\   s    zBaseStemmer.in_range_bc             C   sF   | j | jkrdS t| j| j  }||ks4||k s4dS |  j d7  _ dS )NFr   T)r   r   r   r   )r   r   r   r   r	   r	   r
   	out_rangee   s    zBaseStemmer.out_rangec             C   sJ   | j | jkrdS t| j| j d  }||ks8||k s8dS |  j d8  _ dS )NFr   T)r   r   r   r   )r   r   r   r   r	   r	   r
   out_range_bn   s    zBaseStemmer.out_range_bc             C   sD   | j | j |k rdS | j| j| j|  |kr2dS |  j|7  _dS )NFT)r   r   r   )r   s_sizer   r	   r	   r
   eq_sw   s    zBaseStemmer.eq_sc             C   sD   | j | j |k rdS | j| j | | j  |kr2dS |  j |8  _ dS )NFT)r   r   r   )r   r'   r   r	   r	   r
   eq_s_b   s    zBaseStemmer.eq_s_bc             C   s   |  t||S )N)r(   r   )r   r   r	   r	   r
   eq_v   s    zBaseStemmer.eq_vc             C   s   |  t||S )N)r)   r   )r   r   r	   r	   r
   eq_v_b   s    zBaseStemmer.eq_v_bc             C   sb  d}|}| j }| j}d}d}d}	x||| d?  }
d}t||}||
 }xXt||jD ]H}|| |krld}P t| j||  t|j|  }|dkrP |d7 }qVW |dk r|
}|}n|
}|}|| dkr"|dkrP ||krP |	rP d}	q"W xr|| }||jkrH||j | _ |jd kr|j	S t
| |j}| }||j | _ |rH|j	S |j}|dk rdS qW dS )Nr   Fr   T)r   r   r   ranger'   r   r   r   methodresultgetattrsubstring_i)r   vv_sizeijclcommon_icommon_jfirst_key_inspectedkdiffcommonwi2r.   resr	   r	   r
   
find_among   s`    
 zBaseStemmer.find_amongc             C   sp  d}|}| j }| j}d}d}d}	x||| d?  }
d}t||}||
 }xft|jd | ddD ]L}|| |krvd}P t| j|d |  t|j|  }|dkrP |d7 }q`W |dk r|
}|}n|
}|}|| dkr"|dkrP ||krP |	rP d}	q"W xr|| }||jkrV||j | _ |jdkr,|j	S t
| |j}| }||j | _ |rV|j	S |j}|dk rdS qW dS )zO
        find_among_b is for backwards processing. Same comments apply
        r   Fr   r,   TN)r   r   r   r-   r'   r   r   r   r.   r/   r0   r1   )r   r2   r3   r4   r5   r6   Zlbr8   r9   r:   r;   r<   r=   r>   r?   r.   r@   r	   r	   r
   find_among_b   s`    
$zBaseStemmer.find_among_bc             C   sn   t |||  }| jd| | | j|d  | _|  j|7  _| j|krZ|  j|7  _n| j|krj|| _|S )z
        to replace chars between c_bra and c_ket in self.current by the
        chars in s.

        @type c_bra int
        @type c_ket int
        @type s: string
        r   N)r   r   r   r   )r   c_brac_ketr   
adjustmentr	   r	   r
   	replace_s  s    	"

zBaseStemmer.replace_sc             C   s:   | j dk s2| j | jks2| j| jks2| jt| jkr6dS dS )Nr   FT)r   r   r   r   r   )r   r	   r	   r
   slice_check  s    2zBaseStemmer.slice_checkc             C   s&   d}|   r"| | j| j| d}|S )z 
        @type s string
        FT)rG   rF   r   r   )r   r   r/   r	   r	   r
   
slice_from  s
    zBaseStemmer.slice_fromc             C   s
   |  dS )Nr   )rH   )r   r	   r	   r
   	slice_del"  s    zBaseStemmer.slice_delc             C   sB   |  |||}|| jkr&|  j|7  _|| jkr>|  j|7  _dS )zQ
        @type c_bra int
        @type c_ket int
        @type s: string
        N)rF   r   r   )r   rC   rD   r   rE   r	   r	   r
   insert%  s
    

zBaseStemmer.insertc             C   s"   d}|   r| j| j| j }|S )zX
        Copy the slice into the supplied StringBuffer

        @type s: string
        r   )rG   r   r   r   )r   r   r/   r	   r	   r
   slice_to1  s    zBaseStemmer.slice_toc             C   s   | j d| j S )z!
        @type s: string
        r   )r   r   )r   r   r	   r	   r
   	assign_to<  s    zBaseStemmer.assign_toc             C   sd   | j |}|d kr@| | |   |  }|| jg| j |< n| j|d< |d }|  jd7  _|S )Nr   r   )r   getr   Z_stemr   r   )r   wordcacher/   r	   r	   r
   
_stem_wordB  s    

zBaseStemmer._stem_wordc             C   sX   t t| j| jd d  }t| j dd dd| }x|D ]\}}| j|= q@W d S )N   
   c             S   s   | d d S )Nr   r	   )rO   r	   r	   r
   <lambda>Q  s    z*BaseStemmer._clear_cache.<locals>.<lambda>)keyr   )intr   r   r   sorteditems)r   ZremovecountZ	oldcachesrT   r   r	   r	   r
   _clear_cacheO  s    zBaseStemmer._clear_cachec             C   s&   |  |}t| j| jkr"|   |S )N)rP   r   r   r   rX   )r   rN   r/   r	   r	   r
   stemWordU  s    
zBaseStemmer.stemWordc                s.    fdd|D }t  j jkr*   |S )Nc                s   g | ]}  |qS r	   )rP   ).0rN   )r   r	   r
   
<listcomp>\  s    z)BaseStemmer.stemWords.<locals>.<listcomp>)r   r   r   rX   )r   Zwordsr/   r	   )r   r
   	stemWords[  s    zBaseStemmer.stemWordsN) __name__
__module____qualname__r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r(   r)   r*   r+   rA   rB   rF   rG   rH   rI   rJ   rK   rL   rP   rX   rY   r\   r	   r	   r	   r
   r      s:   				::
r   N)objectr   r	   r	   r	   r
   <module>   s    