§
    �Øj7(  ã                   óN  — d dl Z d dlZd dlZddlmZ 	  ej        ¦   «         Zn# e$ rZ	dZY dZ	[	ndZ	[	ww xY w ej
        d¦  «        ZdZ ed¦  «        Zej        j        Zej        j        Zdefd„Zd	„ Z e j        ej        j        ¦  «        Zd
ej        v Zdd„Zdd„Zdd„ZdS )é    Né   )Ú
get_pixmapÚcjkÚmyfontiýÿ  Úreturnc                 óZ   — | d         s | d         t           z  s| d         t          z  rdS dS )NÚalphaÚ
char_flagsFT)ÚSTROKED_TEXTÚFILLED_TEXT)Úspans    ú—/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/pymupdf4llm/ocr/exec_ocr_interface.pyÚocr_textr      s@   € àˆWŒðà�Ô¥Ñ-ðð �Ô¥Ñ,ðð
 ˆuØˆ4ó    c                 ó¨   — t                                | |¦  «        }|dk    rt          j        |j        |z  d¦  «        S t          j        dd¦  «        S )zžCompute matrix to adjust text width.

    We must ensure that inserted text has the width of the rectangle.
    The computed matrix will do this scaling.
    r   r   )ÚFONTÚtext_lengthÚpymupdfÚMatrixÚwidth)ÚtextÚfontsizeÚrectÚtls       r   Úadjust_widthr      sL   € õ 
×	Ò	˜$ Ñ	)Ô	)€BØ	ˆA‚v€vÝŒ~˜dœj¨2™o¨qÑ1Ô1Ð1ÝŒ>˜!˜QÑÔÐr   ÚoptionsÚengc                 ó¶  — |j         rdS |}d}t          j        t          j        |¦  «        }|                     | |¦  «         t
          r|                     |t          |¬¦  «        }n|                     |t          ¬¦  «        }t          j        d|¦  «        }|d         }| 	                    ¦   «          
                    ¦   «                              dd¦  «        S )	z§Use Tesseract to extract text from a given bounding box of the pixmap.

    The irect is expected to contain one line only, so we use
    tessedit_pageseg_mode=7.
    Ú z3tessedit_pageseg_mode=7,preserve_interword_spaces=1)ÚlanguageÚtessdatar   )r    r!   Úpdfr   ú|z\|)Úis_emptyr   ÚPixmapÚcsRGBÚcopyÚUSE_TESS_OPTIONSÚpdfocr_tobytesÚTESSDATAÚopenÚget_textÚstripÚreplace)	ÚpixmapÚirectr    Úmy_irectr   Úthis_pixÚdataÚdocÚpages	            r   r,   r,   /   sÙ   € ð „~ð ØˆrØ€HàC€GÝŒ~�gœm¨XÑ6Ô6€HØ‡M‚M�&˜(Ñ#Ô#Ð#Ýð 
à×&Ò&ØÝØð 'ñ 
ô 
ˆˆð ×&Ò&ØÝð 'ñ 
ô 
ˆõ Œ,�u˜dÑ
#Ô
#€CØˆqŒ6€Dà�=Š=‰?Œ?× Ò Ñ"Ô"×*Ò*¨3°Ñ6Ô6Ð6r   é–   Fc           
      ó   — t           €t          d¦  «        ‚t          |¦  «        st          d¦  «        ‚	 |                      ¦   «         }|                     t
          j        ¬¦  «        }t          j        |¦  «        }|                     ¦   «         d         }g }	g }
g }|D ]‰}|d         D ]~}|d         D ]s}t          |¦  «        r| 
                    |d         ¦  «         Œ-t          |d	         v r|
 
                    |d         ¦  «         ŒX|	 
                    |d         ¦  «         ŒtŒŒŠ|r|rdS t          |||	d
¬¦  «        \  }}|rdS t          j        |j        ¦  «                             | j        ¦  «        }t#          j        |j        t"          j        ¬¦  «                             |j        |j        d¦  «        }	  ||¦  «        }|sdS t1          |d         ¦  «        dk    rt          d¦  «        ‚|
|z   }|rP|D ]}|                      |¦  «         Œ|                      t
          j        t
          j        t
          j        ¬¦  «         g }|D ]Ÿ\  }}t          j        t?          d„ |D ¦   «         ¦  «        t?          d„ |D ¦   «         ¦  «        tA          d„ |D ¦   «         ¦  «        tA          d„ |D ¦   «         ¦  «        ¦  «        }tC          ||¦  «        }| 
                    ||f¦  «         Œ |sdS |  "                    tF          tH          j%        ¬¦  «         |D ]o\  }}t          j        |¦  «        |z  }tM          ||j        |¦  «        }|  '                    |j(        dd|j        z  fz   ||j        tF          |j(        |f¬¦  «         ŒpdS )aS  This callback function performs OCR on the given page.

    It uses the "detection-only" function of some OCR engine. This function is
    expected to identify text regions and return bounding boxes.
    The actual text recognition is performed by Tesseract OCR, which is expected to be
    installed and available in the system path.
    NzTesseract unavailable.z8OCR engine unavailable - no detection callable provided.©ÚflagsÚblocksÚlinesÚspansÚbboxr   éú   ©ÚdpiÚrectsÚempty_threshold©Údtypeé   r   é   zBDetection-only function must return a list of (box, score) tuples.©ÚimagesÚgraphicsr   c              3   ó&   K  — | ]}|d          V — ŒdS ©r   N© ©Ú.0Úps     r   ú	<genexpr>z%exec_ocr_detection.<locals>.<genexpr>¤   ó&   è è € Ð"Ð"˜��!”Ð"Ð"Ð"Ð"Ð"Ð"r   c              3   ó&   K  — | ]}|d          V — ŒdS ©r   NrL   rM   s     r   rP   z%exec_ocr_detection.<locals>.<genexpr>¥   rQ   r   c              3   ó&   K  — | ]}|d          V — ŒdS rK   rL   rM   s     r   rP   z%exec_ocr_detection.<locals>.<genexpr>¦   rQ   r   c              3   ó&   K  — | ]}|d          V — ŒdS rS   rL   rM   s     r   rP   z%exec_ocr_detection.<locals>.<genexpr>§   rQ   r   ©ÚfontnameÚ
fontbufferçš™™™™™É¿©r   rW   Úmorph))r*   ÚRuntimeErrorÚcallableÚget_displaylistÚget_textpager   ÚTEXT_ACCURATE_BBOXESÚTextPageÚextractDICTr   ÚappendÚREPLACEMENT_UNICODEr   ÚRectr0   Útorectr   ÚnpÚ
frombufferÚsamplesÚuint8ÚreshapeÚheightr   ÚlenÚadd_redact_annotÚapply_redactionsÚPDF_REDACT_IMAGE_NONEÚPDF_REDACT_LINE_ART_NONEÚPDF_REDACT_TEXT_REMOVEÚIRectÚminÚmaxr,   Úinsert_fontÚFONTNAMEr   Úbufferr   Úinsert_textÚbl)r5   Údet_onlyr@   r    Úkeep_ocr_textÚdisplaylistÚ	stextpageÚtextpageÚtext_blocksr<   Ú
fffd_spansÚ	ocr_spansÚbÚlÚsÚpixÚemptyÚmatrixÚimgÚresultÚredaction_rectsÚsbboxÚtess_resultsÚboxÚscorer0   r   r   Úmats                                r   Úexec_ocr_detectionr‘   N   s  € õ ÐÝÐ3Ñ4Ô4Ð4å�HÑÔð WÝÐUÑVÔVÐVðð ×&Ò&Ñ(Ô(€KØ×(Ò(­wÔ/KÐ(ÑLÔL€IÝÔ 	Ñ*Ô*€HØ×&Ò&Ñ(Ô(¨Ô2€Kð €EØ€JØ€IØð 	,ð 	,ˆØ�7”ð 	,ð 	,ˆAØ�w”Zð ,ð ,�Ý˜A‘;”;ð ,Ø×$Ò$ Q v¤YÑ/Ô/Ð/Ð/Ý(¨A¨f¬IÐ5Ð5Ø×%Ò% a¨¤iÑ0Ô0Ð0Ð0ð —L’L  6¤Ñ+Ô+Ð+Ð+ð,ð	,ð ð �]ð ð 	ˆõ ˜K¨S¸ÈsÐSÑSÔS�J€CˆØð Øˆõ Œ\˜#œ)Ñ$Ô$×+Ò+¨D¬IÑ6Ô6€Fõ Œ-˜œ­2¬8Ð
4Ñ
4Ô
4×
<Ò
<ØŒ
ØŒ	Ø	ñô €Cð
ð ˆX�c‰]Œ]€FØð ØˆÝ
ˆ6�!Œ9�~„~˜ÒÐÝØPñ
ô 
ð 	
ð ! 9Ñ,€OØð 
Ø$ð 	)ð 	)ˆEØ×!Ò! %Ñ(Ô(Ð(Ð(Ø×ÒÝÔ0ÝÔ5ÝÔ/ð 	ñ 	
ô 	
ð 	
ð €Làð +ð +‰
ˆˆUÝ”ÝÐ"Ð"˜cÐ"Ñ"Ô"Ñ"Ô"ÝÐ"Ð"˜cÐ"Ñ"Ô"Ñ"Ô"ÝÐ"Ð"˜cÐ"Ñ"Ô"Ñ"Ô"ÝÐ"Ð"˜cÐ"Ñ"Ô"Ñ"Ô"ñ	
ô 
ˆõ ˜˜UÑ#Ô#ˆØ×Ò˜U D˜MÑ*Ô*Ð*Ð*àð Øˆð 	×Ò�hµ4´;ÐÑ?Ô?Ð?à#ð 
ð 
‰ˆˆtåŒ|˜EÑ"Ô" VÑ+ˆõ ˜4 ¤¨dÑ3Ô3ˆð 	×ÒØŒG�q˜$ ¤Ñ,Ð-Ñ-ØØ”[ÝØ”7˜C�.ð 	ñ 	
ô 	
ð 	
ð 	
ð
ð 
r   c           
      ó~  — t          |¦  «        st          d¦  «        ‚	 |                      ¦   «         }|                     t          j        ¬¦  «        }t	          j        |¦  «        }|                     ¦   «         d         }g }	g }
g }|D ]‰}|d         D ]~}|d         D ]s}t          |¦  «        r| 	                    |d         ¦  «         Œ-t          |d         v r|
 	                    |d         ¦  «         ŒX|	 	                    |d         ¦  «         ŒtŒŒŠ|r|rdS t          |||	d	¬
¦  «        \  }}|rdS t	          j        |j        ¦  «                             | j        ¦  «        }t!          j        |j        t           j        ¬¦  «                             |j        |j        d¦  «        }	  ||¦  «        }|sdS t/          |d         ¦  «        dk    rt          d¦  «        ‚|
|z   }|rP|D ]}|                      |¦  «         Œ|                      t          j        t          j        t          j        ¬¦  «         |                      t<          t>          j         ¬¦  «         |D ]Ü\  }}}t	          j        tC          d„ |D ¦   «         ¦  «        tC          d„ |D ¦   «         ¦  «        tE          d„ |D ¦   «         ¦  «        tE          d„ |D ¦   «         ¦  «        ¦  «        |z  }| #                    ¦   «         sŒ‘|j        }tI          |||¦  «        }|  %                    |j&        dd|z  fz   ||t<          |j&        |f¬¦  «         ŒÝdS )z.OCR callback with flexible OCR engine backend.z1OCR engine is unavailable - no callable provided.r8   r:   r;   r<   r=   r   Nr>   r?   rC   rE   r   zBFull OCR function must return a list of (box, text, score) tuples.rG   rV   c              3   ó&   K  — | ]}|d          V — ŒdS rK   rL   rM   s     r   rP   z exec_ocr_full.<locals>.<genexpr>  ó&   è è € Ð&Ð&˜Q�A�a”DÐ&Ð&Ð&Ð&Ð&Ð&r   c              3   ó&   K  — | ]}|d          V — ŒdS rS   rL   rM   s     r   rP   z exec_ocr_full.<locals>.<genexpr>  r”   r   c              3   ó&   K  — | ]}|d          V — ŒdS rK   rL   rM   s     r   rP   z exec_ocr_full.<locals>.<genexpr>  r”   r   c              3   ó&   K  — | ]}|d          V — ŒdS rS   rL   rM   s     r   rP   z exec_ocr_full.<locals>.<genexpr>  r”   r   rY   rZ   )'r]   r\   r^   r_   r   r`   ra   rb   r   rc   rd   r   re   r0   rf   r   rg   rh   ri   rj   rk   rl   r   rm   rn   ro   rp   rq   rr   rv   rw   r   rx   rt   ru   r-   r   ry   rz   )r5   Úfull_ocrr@   r    r|   r}   r~   r   r€   r<   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   rŽ   r   Úconfr   r   r�   s                               r   Úexec_ocr_fullrš   È   sÀ  € õ �HÑÔð PÝÐNÑOÔOÐOðð ×&Ò&Ñ(Ô(€KØ×(Ò(­wÔ/KÐ(ÑLÔL€IÝÔ 	Ñ*Ô*€HØ×&Ò&Ñ(Ô(¨Ô2€Kð €EØ€JØ€IØð 	,ð 	,ˆØ�7”ð 	,ð 	,ˆAØ�w”Zð ,ð ,�Ý˜A‘;”;ð ,Ø×$Ò$ Q v¤YÑ/Ô/Ð/Ð/Ý(¨A¨f¬IÐ5Ð5Ø×%Ò% a¨¤iÑ0Ô0Ð0Ð0ð —L’L  6¤Ñ+Ô+Ð+Ð+ð,ð	,ð ð �]ð ð 	ˆõ ˜K¨S¸ÈsÐSÑSÔS�J€CˆØð Øˆõ Œ\˜#œ)Ñ$Ô$×+Ò+¨D¬IÑ6Ô6€Fõ Œ-˜œ­2¬8Ð
4Ñ
4Ô
4×
<Ò
<ØŒ
ØŒ	Ø	ñô €Cðð ˆX�c‰]Œ]€FØð ØˆÝ
ˆ6�!Œ9�~„~˜ÒÐÝØPñ
ô 
ð 	
ð
 ! 9Ñ,€OØð 
Ø$ð 	)ð 	)ˆEØ×!Ò! %Ñ(Ô(Ð(Ð(Ø×ÒÝÔ0ÝÔ5ÝÔ/ð 	ñ 	
ô 	
ð 	
ð 	×Ò�hµ4´;ÐÑ?Ô?Ð?ð "ð 
ð 
‰ˆˆT�4åŒLÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&ÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&ÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&ÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&ñ	ô ð ñð 	ð �zŠz‰|Œ|ð 	Øà”;ˆå˜4 ¨4Ñ0Ô0ˆà×ÒØŒG�q˜$ ™/Ð*Ñ*ØØÝØ”7˜C�.ð 	ñ 	
ô 	
ð 	
ð 	
ð%
ð 
r   )r   )r6   r   F)r6   NF) ÚinspectÚnumpyrg   r   Úget_culled_pixmapr   Úget_tessdatar*   Ú	ExceptionÚeÚFontr   rw   Úchrrd   ÚmupdfÚFZ_STEXT_STROKEDr   ÚFZ_STEXT_FILLEDr   Úboolr   r   Ú	signaturer%   r)   ÚsigÚ
parametersr(   r,   r‘   rš   rL   r   r   ú<module>rª      sU  ðØ €€€à Ð Ð Ð Ø €€€à )Ð )Ð )Ð )Ð )Ð )ðØ#ˆwÔ#Ñ%Ô%€H€HøØð ð ð Ø€H€H€H€H€H€Høøøøðøøøð €w„|�EÑÔ€Ø€Ø�c˜&‘k”kÐ ØŒ}Ô-€ØŒmÔ+€ð�dð ð ð ð ð	 ð 	 ð 	 ð €gÔ˜œÔ5Ñ6Ô6€Ø ¤Ð.Ð ð7ð 7ð 7ð 7ð>w
ð w
ð w
ð w
ðtd
ð d
ð d
ð d
ð d
ð d
s   ”$ ¤5©0°5