o
    tBh                     @   sV   d dl mZmZmZ ddlmZ dgZdedee dee fddZG d	d
 d
Z	dS )    )
CollectionOptionalList   )natural_comparison_keysuggestion_listinput_optionsreturnc                    sZ   i  t | }tt| d d }|D ]}|||}|dur"| |< qt  fdddS )zGet list with suggestions for a given input.

    Given an invalid input string and list of valid options, returns a filtered list
    of valid options sorted based on their similarity with the input.
    g?r   Nc                    s     | dt| fS )Nr   )getr   )optionoptions_by_distance v/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/graphql/pyutils/suggestion_list.py<lambda>   s   
z!suggestion_list.<locals>.<lambda>)key)LexicalDistanceintlenmeasuresorted)r   r	   lexical_distance	thresholdr   distancer   r   r   r      s   
c                   @   sf   e Zd ZU dZeed< eed< ee ed< eee  ed< defddZd	ed
ede	e fddZ
dS )r   a  Computes the lexical distance between strings A and B.

    The "distance" between two strings is given by counting the minimum number of edits
    needed to transform string A into string B. An edit can be an insertion, deletion,
    or substitution of a single character, or a swap of two adjacent characters.

    This distance can be useful for detecting typos in input or sorting.
    _input_input_lower_case_input_list_rowsr   c                 C   sP   || _ | | _t|d }ttt| j| _dg| dg| dg| g| _d S )Nr   r   )	r   lowerr   r   listmapordr   r   )selfr   row_sizer   r   r   __init__0   s
   
"zLexicalDistance.__init__r   r   r
   c                 C   s  | j |krdS | }| j|krdS ttt|| j}}t|t|}}||k r4||}}||}}|| |kr<d S | j}t	|d D ]}	|	|d |	< qEt	d|d D ]}
||
d d  }||
d  }|
 }|d< t	d|d D ]e}	||
d  ||	d  krdnd}t
||	 d ||	d  d ||	d  | }|
dkr|	dkr||
d  ||	d  kr||
d  ||	d  kr||
d d  |	d  }t
||d }||k r|}|||	< qr||kr d S qU||d  | }||kr|S d S )Nr   r         )r   r   r   r    r!   r"   r   r   r   rangemin)r#   r   r   option_lower_caseaba_lenb_lenrowsjiup_rowcurrent_rowsmallest_cellcostcurrent_celldouble_diagonal_cellr   r   r   r   r   8   sJ   



 
@
zLexicalDistance.measureN)__name__
__module____qualname____doc__str__annotations__r   r   r%   r   r   r   r   r   r   r   !   s   
 	r   N)
typingr   r   r   natural_comparer   __all__r<   r   r   r   r   r   r   <module>   s
    