§
    �ØjÈ  ã                   óº   — d dl Zd dlZd dlmZ d dlmZ g d¢Z ej        g d¢g d¢g d¢ge¬¦  «        Z	 ej        g d¢g d	¢g d
¢ge¬¦  «        Z
d„ Zd„ Zd„ Zd„ ZdS )é    N)Ú
as_strided)Úmupdf)Ú	num_spansÚ	text_areaÚtext_densityÚavg_span_heightÚavg_span_widthÚ
num_blocksÚ
num_imagesÚ
image_areaÚimage_densityÚnum_small_oblique_vectorsÚlog_vector_densityÚpage_sobel_energyÚpage_sobel_entropyÚpage_sobel_varÚpage_white_ratioÚimg_fft_energyÚimg_fft_ratioÚimg_black_ratioÚimg_white_ratioÚimg_sobel_energyÚimg_sobel_orientation_entropyÚimg_sobel_local_variance)é   r   éÿÿÿÿ)é   r   éþÿÿÿ©Údtype)r   r   r   )r   r   r   )r   r   r   c                 ó8  — |j         \  }}| j         \  }}|dz  }|dz  }t          j        | ||f||ffd¬¦  «        }||||f}	|j        d         |j        d         |j        d         |j        d         f}
t	          ||	|
¬¦  «        }t          j        d||¦  «        S )Nr   Úreflect)Úmoder   r   )ÚshapeÚstrideszijkl,kl->ij)r$   ÚnpÚpadr%   r   Úeinsum)ÚimgÚkernelÚkhÚkwÚihÚiwÚpad_hÚpad_wÚpaddedr$   r%   Úwindowss               ú™/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/pymupdf4llm/ocr/compute_ocr_features.pyÚconv2d_fastr4   '   s¸   € ØŒ\�F€BˆØŒY�F€Bˆà�!‰G€EØ�!‰G€EåŒV�C˜5 %˜.¨5°%¨.Ð9À	ÐJÑJÔJ€Fð ��R˜Ð€EàŒ�qÔØŒ�qÔØŒ�qÔØŒ�qÔð	€Gõ ˜ u°gÐ>Ñ>Ô>€Gõ Œ9�] G¨VÑ4Ô4Ð4ó    c           	      óx  — t          | t          ¦  «        }t          | t          ¦  «        }t          j        ||z  ||z  z   ¦  «        }t          j        ||¦  «        }t          t          j        |¦  «        ¦  «        }t          j        t          j	         t          j	        d¦  «        }t          j
        ||¬¦  «        \  }}||                     ¦   «         dz   z  }	t          t          j        |	t          j        |	dz   ¦  «        z  ¦  «         ¦  «        }
t          t          j        |¦  «        ¦  «        }||
|fS )Né%   )Úbinsç•Ö&è.>)r4   ÚSOBEL_XÚSOBEL_Yr&   ÚsqrtÚarctan2ÚfloatÚmeanÚlinspaceÚpiÚ	histogramÚsumÚlogÚvar)ÚgrayÚgxÚgyÚmagÚangÚsobel_energyr8   ÚhistÚ_ÚpÚsobel_entropyÚ	sobel_vars               r3   Úsobel_featuresrQ   >   sù   € Ý	�T�7Ñ	#Ô	#€BÝ	�T�7Ñ	#Ô	#€Bå
Œ'�"�r‘'˜B ™GÑ#Ñ
$Ô
$€CÝ
Œ*�R˜Ñ
Ô
€Cå�œ ™œÑ&Ô&€LåŒ;�œ�v�rœu bÑ)Ô)€DÝŒl˜3 TÐ*Ñ*Ô*�G€Dˆ!Ø�—’‘
”
˜TÑ!Ñ"€AÝ�2œ6 !¥b¤f¨Q°©XÑ&6Ô&6Ñ"6Ñ7Ô7Ð7Ñ8Ô8€Må•b”f˜S‘k”kÑ"Ô"€Ià˜¨	Ð1Ð1r5   c                 óz  — |                       dt          j        d¬¦  «        }t          j        |dd¦  «        }t	          j        |j        t          j        ¬¦  «                             dd¦  «        }|dk     	                    ¦   «         }t          t          |¦  «        ¦  «        }|                     |¦  «         |S )NéH   F)ÚdpiÚ
colorspaceÚalphaé€   r   éæ   )Ú
get_pixmapÚpymupdfÚcsGRAYÚPixmapr&   Ú
frombufferÚsamplesÚuint8Úreshaper?   ÚlistrQ   Úappend)ÚpageÚpixÚ	pix_smallrF   r   Úrcs         r3   Úsobel_features_pagerg   Q   sœ   € à
�/Š/˜b­W¬^À5ˆ/Ñ
IÔ
I€Cõ ”˜s C¨Ñ-Ô-€IÝŒ=˜Ô*µ"´(Ð;Ñ;Ô;×CÒCÀCÈÑMÔM€DØ˜sš
×(Ò(Ñ*Ô*ÐÝ	�n˜TÑ"Ô"Ñ	#Ô	#€BØ‡I‚IÐÑÔÐØ€Ir5   c                 óð
  — t          | ¦  «        }|d         |d         z
  |d         |d         z
  z  }d„ | D ¦   «         }t          |¦  «        }t          d„ |D ¦   «         ¦  «        }|r||z  nd}|dk    r=t          j        d„ |D ¦   «         ¦  «        }	t          j        d„ |D ¦   «         ¦  «        }
nd}	d}
d	„ | D ¦   «         }t          d
„ |D ¦   «         ¦  «        }|rt          j        ||z  dz   ¦  «        nd}t          d„ |D ¦   «         ¦  «        }t          |¦  «        \  }}}}d„ | D ¦   «         }t          |¦  «        }d}g }|D �]}t          |d         d         |d         ¦  «        t          |d         d         |d         ¦  «        t          |d         d         |d         ¦  «        t          |d         d         |d         ¦  «        g}|d         |d         z
  |d         |d         z
  z  }||z  }|d|z  k    rŒ»|d         d         |d         d         z
  |d         d         |d         d         z
  z  }||z  |z  }|                     ||f¦  «         �Œ|r||z  nd}i d|“d|“d|“dt          |	¦  «        “dt          |
¦  «        “d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“dd “d!d “d d d d d d"œ¥}|s|S t          |d#„ ¬$¦  «        d         }t          j        |d%         ¦  «        }|j        rt          j        |d¦  «        }	 |d&         rFt          j        |d&         ¦  «        } t          j        || ¦  «        }d'} t          j        |d¦  «        }n# t          $ r
}!Y d'}!~!nd'}!~!ww xY w|j        dk    rt          j        t          j        |¦  «        }t          j        |d(d(¦  «        }t          j        |j        t          j        ¬)¦  «                             d(d(¦  «        }t          j                             |¦  «        }"t          j                             |"¦  «        }#t          j        |#¦  «        }$|$                     ¦   «         }%|$|$|$                     ¦   «         k                                  ¦   «         |$|$|$                     ¦   «         k                                  ¦   «         d*z   z  }&|d(k                          ¦   «         }'|d+k                         ¦   «         }(t1          |¦  «        \  })}*}+|                     t          |%¦  «        t          |&¦  «        t          |'¦  «        t          |(¦  «        t          |)¦  «        t          |*¦  «        t          |+¦  «        d,œ¦  «         |S )-a  Return model-relevant features for the given page.

    Args:
        blocks: (list) blocks created by get_text("dict",flags=FLAGS)["blocks].
            The FLAGS *MUST* include PRESERVE_IMAGES and COLLECT_VECTORS.
        page_rect: (Rect) the rectangle Page.rect.
        pixmap: GRAY 128x128 sized image of the page without all text

    Returns:
        A dictionary of page "features" (see code here) that can be used to
        request a recommendation whether to OCR the page from a compatible
        ML model.
    r   r   é   r   c                 óª   — g | ]P}|d          t           j        k    ¯|d         D ]/}|d         D ]$}|d                              ¦   «         °|d         ‘Œ%Œ0ŒQS )ÚtypeÚlinesÚspansÚtextÚbbox)r   ÚFZ_STEXT_BLOCK_TEXTÚisspace)Ú.0ÚbÚlÚss       r3   ú
<listcomp>z$compute_features.<locals>.<listcomp>p   sz   € ð ð ð àØˆVŒ9�Ô1Ò1Ð1Ø�7”ð 2Ð1ØØ�7”ð 2Ð1àØ�&”	×!Ò!Ñ#Ô#ð 2ð 	
ˆ&Œ	à1Ð1Ð1Ð1Ð1r5   c              3   ó\   K  — | ]'}|d          |d         z
  |d         |d         z
  z  V — Œ(dS )ri   r   r   r   N© ©rr   Úrs     r3   ú	<genexpr>z#compute_features.<locals>.<genexpr>{   s?   è è € ÐFÐF°a�Q�q”T˜A˜aœD‘[ Q q¤T¨A¨a¬D¡[Ñ1ÐFÐFÐFÐFÐFÐFr5   c                 ó0   — g | ]}|d          |d         z
  ‘ŒS )ri   r   rx   ry   s     r3   rv   z$compute_features.<locals>.<listcomp>€   s$   € Ð"EÐ"EÐ"E°Q A a¤D¨1¨Q¬4¡KÐ"EÐ"EÐ"Er5   c                 ó0   — g | ]}|d          |d         z
  ‘ŒS )r   r   rx   ry   s     r3   rv   z$compute_features.<locals>.<listcomp>�   s$   € Ð!DÐ!DÐ!D°A 1 Q¤4¨!¨A¬$¡;Ð!DÐ!DÐ!Dr5   c                 ó>   — g | ]}|d          t           j        k    ¯|‘ŒS ©rk   )r   ÚFZ_STEXT_BLOCK_VECTOR©rr   rs   s     r3   rv   z$compute_features.<locals>.<listcomp>‡   s)   € ÐMÐMÐM�Q A f¤IµÔ1LÒ$LÐ$LˆqÐ$LÐ$LÐ$Lr5   c              3   óŒ   K  — | ]?}|d          d         |d          d         z
  |d          d         |d          d         z
  z  V — Œ@dS )ro   ri   r   r   r   Nrx   r�   s     r3   r{   z#compute_features.<locals>.<genexpr>ˆ   sb   è è € ð ð ØJKˆˆ6Œ�1Œ˜˜&œ	 !œÑ	$¨¨6¬°1¬¸¸&¼	À!¼Ñ)DÑEðð ð ð ð ð r5   r9   c              3   óÊ   K  — | ]^}|                      d d¦  «        rF|d         d         |d         d         z
  dk     r%|d         d         |d         d         z
  dk     ¯ZdV — Œ_dS )	ÚisrectFro   r   r   é   ri   r   N)Úgetr�   s     r3   r{   z#compute_features.<locals>.<genexpr>Œ   sˆ   è è € ð $ð $àØ�5Š5�˜5Ñ!Ô!ð$ð ˆfŒI�aŒL˜1˜Vœ9 Qœ<Ñ'¨"Ò,Ð,ØˆfŒI�aŒL˜1˜Vœ9 Qœ<Ñ'¨"Ò,Ð,ð	 	
ð -Ð,Ð,Ð,ð$ð $r5   c                 ó>   — g | ]}|d          t           j        k    ¯|‘ŒS r   )r   ÚFZ_STEXT_BLOCK_IMAGEr�   s     r3   rv   z$compute_features.<locals>.<listcomp>™   s)   € ÐKÐKÐK�A 1 V¤9µÔ0JÒ#JÐ#JˆaÐ#JÐ#JÐ#Jr5   ro   g{®Gáz„?r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   g        r   )r   r   r   r   r   c                 ó   — | d         S )Nr   rx   )r)   s    r3   ú<lambda>z"compute_features.<locals>.<lambda>Ò   s
   € °C¸´F€ r5   )ÚkeyÚimageÚmaskNrW   r   g�íµ ÷Æ°>rX   )r   r   r   r   r   r   r   )ÚlenrC   r&   r?   Úlog1prg   ÚmaxÚminrb   r>   rZ   r\   rV   Ú	ExceptionÚnr[   r]   r^   r_   r`   ÚfftÚfft2ÚfftshiftÚabsrQ   Úupdate),ÚblocksÚ	page_rectrc   r
   Ú	page_areaÚ
span_rectsr   r   r   r   r	   ÚvectorsÚvector_arear   r   r   r   r   r   Úimagesr   r   Úrelevant_imagesr)   Úvisible_bboxÚthis_img_areaÚtotal_img_areaÚscorer   ÚfeaturesÚbest_imgrd   Úmask_pixÚer”   Ú	fft_shiftÚ	magnitudeÚ
fft_energyÚ	fft_ratioÚblack_ratioÚwhite_ratiorK   rO   rP   s,                                               r3   Úcompute_featuresr¯   ^   sy  € õ �V‘”€JØ˜1” 	¨!¤Ñ,°¸1´À	È!ÄÑ1LÑM€Iðð àðñ ô €Jõ �J‘”€Iõ ÐFÐF¸:ÐFÑFÔFÑFÔF€Ià,5Ð<�9˜yÑ(Ð(¸1€Là�1‚}€}Ýœ'Ð"EÐ"E¸*Ð"EÑ"EÔ"EÑFÔFˆÝœÐ!DÐ!D¸Ð!DÑ!DÔ!DÑEÔEˆˆàˆØˆð NÐM˜&ÐMÑMÔM€GÝð ð ØOVðñ ô ñ ô €Kð FOÐU�œ +°	Ñ"9¸DÑ"@ÑAÔAÐAÐTUÐÝ #ð $ð $àð$ñ $ô $ñ !ô !Ðõ 	˜DÑ!Ô!ñ LÐÐ)¨>Ð;Kð LÐK˜ÐKÑKÔK€Få�V‘”€JØ€Jà€OØð -ñ -ˆå��F”˜A” 	¨!¤Ñ-Ô-Ý��F”˜A” 	¨!¤Ñ-Ô-Ý��F”˜A” 	¨!¤Ñ-Ô-Ý��F”˜A” 	¨!¤Ñ-Ô-ð	
ˆð & aœ¨<¸¬?Ñ:Ø˜ŒO˜l¨1œoÑ-ñ
ˆð 	�mÑ#ˆ
Ø˜D 9Ñ,Ò,Ð,ØØ˜fœ+ aœ.¨3¨v¬;°q¬>Ñ9Ø�ŒK˜ŒN˜S œ[¨œ^Ñ+ñ
ˆð  Ñ.°Ñ>ˆØ×Ò  s˜|Ñ,Ô,Ð,Ñ,ð /8Ð>�J Ñ*Ð*¸Q€MðØ�Yðà�Yðð 	˜ðð 	�5 Ñ1Ô1ð	ð
 	�% Ñ/Ô/ðð 	�jðð 	�jðð 	�jðð 	˜ðð 	$Ð%>ðð 	Ð0ðð 	Ð.ðð 	Ð0ðð 	˜.ðð 	Ð,ðð  	˜#ð!ð" 	˜ð#ð$ ØØØ),Ø$'ð-ð ð €Hð2 ð Øˆõ �?Ð(:Ð(:Ð;Ñ;Ô;¸AÔ>€Hå
Œ.˜ 'Ô*Ñ
+Ô
+€CØ
„yð %ÝŒn˜S !Ñ$Ô$ˆðØ�FÔð 	)Ý”~ h¨vÔ&6Ñ7Ô7ˆHÝ”.  hÑ/Ô/ˆCØˆHÝ”.  aÑ(Ô(ˆCøøÝð ð ð Øˆˆˆˆøøøøðøøøà
„uˆq‚y€yÝŒn�Wœ^¨SÑ1Ô1ˆõ Œ.˜˜c 3Ñ
'Ô
'€Cõ Œ-˜œ­2¬8Ð
4Ñ
4Ô
4×
<Ò
<¸SÀ#Ñ
FÔ
F€CÝ
Œ&�+Š+�cÑ
Ô
€CÝ”—’ Ñ$Ô$€IÝ”�yÑ!Ô!€Ià—’Ñ!Ô!€JØ˜) i§n¢nÑ&6Ô&6Ò6Ô7×<Ò<Ñ>Ô>Ø�)˜yŸ~š~Ñ/Ô/Ò/Ô0×5Ò5Ñ7Ô7¸$Ñ>ñ€Ið ˜’9×"Ò"Ñ$Ô$€KØ˜’9×"Ò"Ñ$Ô$€Kå-;¸CÑ-@Ô-@Ñ*€L�- Ø‡O‚Oå# JÑ/Ô/Ý" 9Ñ-Ô-Ý$ [Ñ1Ô1Ý$ [Ñ1Ô1Ý % lÑ 3Ô 3Ý-2°=Ñ-AÔ-AÝ(-¨iÑ(8Ô(8ð	
ð 	
ñ
ô 
ð 
ð €Os   ÌAM! Í!
M5Í0M5)Únumpyr&   rZ   Únumpy.lib.stride_tricksr   r   ÚFEATURE_NAMESÚarrayr>   r:   r;   r4   rQ   rg   r¯   rx   r5   r3   ú<module>r´      sî   ðØ Ð Ð Ð Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð ðð ð €ð8 ˆ"Œ(�J�J�J 
 
 
¨J¨J¨JÐ7¸uÐ
EÑ
EÔ
E€à
ˆ"Œ(�I�I�I˜y˜y˜y¨,¨,¨,Ð7¸uÐ
EÑ
EÔ
E€ð5ð 5ð 5ð.2ð 2ð 2ð&
ð 
ð 
ðbð bð bð bð br5   