
    -i                     8    d Z ddlmZ ddlZ G d d          ZdS )z
    Arabic verb stemmer
    Nc                   :    e Zd Zd Zd Zd Zd Zd Zd Zd
dZ	d	S )basic_affixerc                 Z    g | _         g | _        g | _        g | _        g | _        g | _        d S )N)
procleticsprefixessuffixes	encliticsaffixesclitics)selfs    T/var/www/html/speakWrite/venv/lib/python3.11/site-packages/alyahmor/basic_affixer.py__init__zbasic_affixer.__init__   s0        c                 >    d                     ||g          | j        v S N-)joinr
   )r   prefixsuffixs      r   is_valid_affixzbasic_affixer.is_valid_affix    s     		66*++t|;;r   c                     t          j        |          }t          j        |          }d                    ||g          | j        v S r   )arabystrip_tashkeelr   r   )r   	procliticenclitics      r   is_valid_cliticszbasic_affixer.is_valid_clitics$   sB     (33	'11		9h/00DL@@r   c                 >    d                     |||g          }|}||fS )a  
        Join the  verb and its affixes, and get the vocalized form
        @param verb: verb found in dictionary.
        @type verb: unicode.
        @param proclitic: first level prefix.
        @type proclitic: unicode.
        @param enclitic: first level suffix.
        @type enclitic: unicode.
        @return: (vocalized word, semivocalized).
        @rtype: (unicode, unicode).
         )r   )r   verbr   r   	vocalizedsemivocalizeds         r   vocalizezbasic_affixer.vocalize/   s,     HHix899	!=))r   c                    g }t          j        | j        | j        | j        | j                  D ]R}|d         }|d         }|d         }|d         }|                     |||||          }|r|                    |           S|S )z generate all possible affixesr            )	itertoolsproductr   r   r   r	   get_formappend)	r   word
verb_formselementprocprefsuffencnewwords	            r   generate_formszbasic_affixer.generate_forms>   s     
 (4=$-Y]Yghh 	+ 	+G1:D1:D1:D!*CmmD$dC@@G +!!'***r   c                     d}|                      ||          rL|                     |||dz   |z             r/d                    |||g          }|                     |||          }|S )z generate the possible affixesr   r   )r   check_clitic_affixr   r"   )r   r+   r.   r/   r0   r1   r2   conjs           r   r)   zbasic_affixer.get_formM   su    
 tT** 	:&&tS$s(4-@@ :xxtD 122--dS99r   Tc                     d|                                }|sd |D             }nd |D             }t          t          |                    }g d}|D ]fd|D             }|S )z generate all affixes    قصدc                 B    g | ]}t          j        |d                    S r   )r   r   .0ds     r   
<listcomp>z5basic_affixer.generate_affix_list.<locals>.<listcomp>b   s'    GGGAU1!A$77GGGr   c                     g | ]
}|d          S r:    r;   s     r   r>   z5basic_affixer.generate_affix_list.<locals>.<listcomp>d   s    000QAaD000r   )u
   قَصَدu
   قْصَدr8   c                 <    g | ]}|                     d           S )r   )replace)r<   xr+   s     r   r>   z5basic_affixer.generate_affix_list.<locals>.<listcomp>k   s'    GGGQQYYtC00GGGr   )r3   listset)r   r    formslist_affixesvariantsr+   s        @r   generate_affix_listz!basic_affixer.generate_affix_list[   s    ##D)) 	1GGGGGLL00%000LC--.. =<< 	H 	HDGGGG,GGGLLr   N)T)
__name__
__module____qualname__r   r   r   r"   r3   r)   rI   r@   r   r   r   r      s        
 
 
< < <A A A* * *         r   r   )__doc__pyarabic.arabyr   r'   r   r@   r   r   <module>rO      sk              Z Z Z Z Z Z Z Z Z Zr   