
    #j'                         d dl Z d dlZd dlZd dlZd dlmZ d Zd Zd Zd Z	d Z
ed        Zd	 Zed
        Zed        Zy)    Nwrapsc                     | j                  ddt               | j                  ddt               | j                  ddt               | j                  ddt               y)z=Registers these custom functions against an SQLite connection
rank_score   decode_matchinfoannotate_matchinfo   	rank_bm25N)create_functionr   decode_matchinfo_strr	   r   )conns    j/home/mi/.openclaw/workspace/fridge-app/backend/.venv/lib/python3.12/site-packages/sqlite_fts4/__init__.pyregister_functionsr      sN    q*5+Q0DE-q2DEa3    c                 .     t                fd       }|S )Nc                  Z    	  | i |S # t         $ r t        j                           w xY wN)	Exception	traceback	print_exc)argskwargsfns     r   wrapperz5wrap_sqlite_function_in_error_logger.<locals>.wrapper   s6    	t&v&& 	!	s    *r   )r   r   s   ` r   $wrap_sqlite_function_in_error_loggerr      s     
2Y  Nr   c                 <    t        t        t        |                   S r   )strlistr   bufs    r   r   r      s    t$S)*++r   c                 R    t        j                  ddt        |       dz  z  z   |       S )N@I   )structunpacklenr    s    r   r   r   !   s%    ==s3x1} 56<<r   c                 
    d| iS )Nerror )ms    r   _errorr-   &   s    Q<r   c                 D    t        j                  t        | |      d      S )Nr
   )indent)jsondumps_annotate_matchinfo)r!   format_strings     r   r	   r	   *   s    ::)#}=aHHr   c                 *   t        t        |             si S dd }d }fd}i }|D ]  }|dk(  r |       \  }}|d|d|d<   |dk(  r |       \  }}|d|d|d<   6|dk(  rwd ||fv rt        d	      c S g }|d
d|d<   t        |      D ]K  }	t        |      D ];  }
 |       \  }} |       \  }} |       \  }}|j	                  |	|
||||||gd       = M |dk(  r_d ||fv rt        d      c S g }|dd|d<   t        |      D ]2  }	t        |      D ]"  }
 |       \  }}|j	                  |	|
||d       $ 4 |dk(  rd ||fv rt        d      c S g }|dz   dz  }i }t        |      D ]  }	g }t        |      D ].  } |       d   }|j	                  |       |j	                  |       0 dj                  |D cg c]  }dj                  |      d d d    c}      |dj                  |	      <    d||d|d<   |dk(  r |       \  }}|d|d|d<   |dk(  rJ|t        d      c S g }t        |      D ]!  } |       \  }}|j	                  |||d       # d |d!|d<   B|d"k(  rJ|t        d#      c S g }t        |      D ]!  } |       \  }}|j	                  |||d$       # d%|d!|d"<   |d&k(  s|t        d'      c S g }t        |      D ]!  } |       \  }}|j	                  |||d(       # d)|d!|d&<    |S c c}w )*Nr   c                  &       } dz  | dz
  fS )Nr   r+   )value	matchinfomatchinfo_indexs    r   _nextz"_annotate_matchinfo.<locals>._next8   s'    /*1o)))r   pz(Number of matchable phrases in the query)r6   titleidxcz/Number of user defined columns in the FTS tablexz#'x' must be preceded by 'p' and 'c'z*Details for each phrase/column combination)r6   r;   )phrase_indexcolumn_indexhits_this_column_this_rowhits_this_column_all_rowsdocs_with_hitsidxsyz#'y' must be preceded by 'p' and 'c'z8Usable phrase matches for each phrase/column combination)r?   r@   hits_for_phrase_in_colr<   bz#'b' must be preceded by 'p' and 'c'        z{:032b}z	phrase_{}z5Bitfield showing which phrases occur in which columns)r;   r6   decodednz Number of rows in the FTS4 tableaz'a' must be preceded by 'c')r@   average_num_tokensr<   z>Average number of tokens in each column across the whole table)r;   r6   lz'l' must be preceded by 'c')r@   
num_tokensr<   zDNumber of tokens in each column of the current row of the FTS4 tablesz's' must be preceded by 'c')r@   length_phrase_subsequence_matchr<   z<Length of longest subsequence of phrase matching each column)r   r   r-   rangeappendjoinformat)r!   r3   p_num_phrasesc_num_columnsr9   resultschr<   infor?   r@   rA   idx1rB   idx2rC   idx3rF   valuesnum_32_column_chunksrL   current_phrase_chunks_vunsigned_integerr6   ir7   r8   s                              @@r   r2   r2   /   sA   %c*+I	OMM* G D9!&M3&CGCL
 3Y!&M3&JGCL
 3Y}55CDDDEGCL
 !&m 4 $)-$8 L6;g3-t6;g3-t+07(NDKK,8,89R9R.<%)4$6		 3Y}55CDDDSGCL !&m 4 
$)-$8 	L27'/*CKK,8,86L#&		
 3Y}55CDDF$1B$62#= G %m 4 (*%34 4A
AMM!$)0034 =?GG 1F, "(()9:4R4@=**<89 Q #GCL 3YJE3;GCL
 3Y$;<<F=) "W
s%&eCP ZGCL 3Y$;<<F=) T"W
sqcRST `GCL 3Y$;<<F=) "W
s();@" XGCLCDJ Nys    Lc                     | sy t        | d      }d}|d   d   }|D ]#  }|d   }|d   }|dkD  s|t        |      |z  z  }% | S )Npcx        r>   r6   rA   rB   r   )r2   float)raw_matchinfor7   scorex_phrase_column_detailsdetailsrA   rB   s          r   r   r      sz     #M59IE'nW5* R$+,G$H!$+,G$H!$q(U458QQQE	R
 6Mr   c           	      Z   | syt        | d      }d}d}d}|d   d   }|d   d   }|d	   d   }t        |      D ]  }t        |      D ]  }	|d
   d   |	   d   }
|d   d   |	   d   }|
dk(  rd}n d|z
  |t        |      t        |
      z  z  z   }|d   d   D cg c]  }|d   |	k(  r
|d   |k(  r| c}d   }t        |d         }t        |d         }t        t	        j
                  ||z
  dz   |dz   z        d      }|||z  z   }|dk(  rd}n||dz   z  |z  }|||z  z  }  | S c c}w )z0Must be called with output of matchinfo 'pcnalx'Npcnalxg333333?g      ?ri   r:   r6   r=   rM   rN   rO   rP   rQ   r   r   r>   r@   r?   rA   rC   g      ?)r2   rT   rj   maxmathlog)raw_match_info
match_infokrG   rl   phrase_countcolumn_counttotal_row_countr?   r@   rO   rQ   drd   phrase_column_xterm_frequencyrC   idfdenomrhss                       r   r   r      s    $^X>JAAEc?7+Lc?7+L og.Ol+ "!,/ !	L!+C!9,!G$" $C1,?MJ!Q&EQ%
"3e<N6O"OPQ $C1^$4n%5 
 O #?3N#OPN"?3C#DEN $~5;QT@TU 	C #a!e,Ez%Q/58S3YEC!	"H 6M3s   D()r&   rr   r0   r   	functoolsr   r   r   r   r   r-   r	   r2   r   r   r+   r   r   <module>r      sr        4
,=
 &I &IUp & &( &3 &3r   