§
    ƒØjuZ  ã                   ó
  — d dl Z d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ  ee¦  «        Z G d	„ d
e j        ¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Zd.d„Zd/d„Z d/d„Z!d0d„Z"d1d„Z#d2d„Z$d„ Z%d2d„Z&d„ Z'd„ Z(ed k    �rWd!Z)d"Z) ej*         e+d#e)› d$�d%¦  «        ¦  «        d&         Z, ej-        d'e,¦  «          e.d(d)¦  «        Z/ e!e,d*e/f         d ¦  «        \  Z0Z1e,d*e/f         Z2 ej3         e4e2¦  «        ¦  «        Z5 ej6        e2d k    ¦  «        \  Z7Z8e7D ]Z9e5e9xx         d+z  cc<   Œ ej:        d g e;e5¦  «        z   ¦  «        Z5e5 ej<        e5¦  «        z
   ej=        e5¦  «        z  Z1dZ> e	e1e>dd+¬,¦  «        \  Z?Z@ e"e?e1¦  «        \  ZAZBe?eA         Z? ejC        e1¦  «          ejC        e?e>g e4e?¦  «        z  d-¦  «          ejD        ¦   «          dS dS )3é    N)Ú
find_peaks)ÚKMeans)ÚLinearRegression)Úlayers)Ú
exceptions)Ú
get_logger)Ú
find_linesÚget_bboxÚ
get_centerc                   ó"   — e Zd ZdZdZdZdZdZdS )Ú	LineLabelr   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚFIRSTÚSECONDÚTHIRDÚFOURTHÚFIFTH© ó    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/oemer/staffline_extraction.pyr   r      s'   € € € € € Ø€EØ€FØ€EØ€FØ€E€E€Er   r   c                   óð   — e Zd Zd„ Zd„ Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Z	edefd„¦   «         Z
edefd„¦   «         Zedefd	„¦   «         Zedefd
„¦   «         Zd„ Zd„ Zd„ ZdS )ÚLinec                 ó"   — g | _         d | _        d S ©N)ÚpointsÚlabel©Úselfs    r   Ú__init__zLine.__init__   s   € ØˆŒØ $ˆŒ
ˆ
ˆ
r   c                 ó    — | j                              ||f¦  «         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d S r    )	r!   ÚappendÚ	_y_centerÚ_y_upperÚ_y_lowerÚ	_x_centerÚ_x_leftÚ_x_rightÚ_slope)r$   ÚyÚxs      r   Ú	add_pointzLine.add_point!   sQ   € ØŒ×Ò˜A˜q˜6Ñ"Ô"Ð"ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒˆˆr   Úreturnc                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr(   c                 ó   — g | ]
}|d          ‘ŒS ©r   r   ©Ú.0Úpoints     r   ú
<listcomp>z!Line.y_center.<locals>.<listcomp>1   ó   € Ð!DÐ!DÐ!D¨u %¨¤(Ð!DÐ!DÐ!Dr   )ÚhasattrÚsetattrr(   ÚnpÚmeanr!   r#   s    r   Úy_centerzLine.y_center+   ó`   € å�t˜[Ñ)Ô)ð 	-Ý�D˜+ tÑ,Ô,Ð,ØŒ>Ð%Ø”>Ð!ÝœÐ!DÐ!D¸¼Ð!DÑ!DÔ!DÑEÔEˆŒØŒ~Ðr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr)   c                 ó   — g | ]
}|d          ‘ŒS r5   r   r6   s     r   r9   z Line.y_upper.<locals>.<listcomp>:   ó   € ÐBÐBÐB¨U  a¤ÐBÐBÐBr   )r;   r<   r)   r=   Úminr!   r#   s    r   Úy_upperzLine.y_upper4   ó`   € å�t˜ZÑ(Ô(ð 	,Ý�D˜* dÑ+Ô+Ð+ØŒ=Ð$Ø”=Ð ÝœÐBÐB°d´kÐBÑBÔBÑCÔCˆŒØŒ}Ðr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr*   c                 ó   — g | ]
}|d          ‘ŒS r5   r   r6   s     r   r9   z Line.y_lower.<locals>.<listcomp>C   rC   r   )r;   r<   r*   r=   Úmaxr!   r#   s    r   Úy_lowerzLine.y_lower=   rF   r   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr+   c                 ó   — g | ]
}|d          ‘ŒS ©r   r   r6   s     r   r9   z!Line.x_center.<locals>.<listcomp>L   r:   r   )r;   r<   r+   r=   r>   r!   r#   s    r   Úx_centerzLine.x_centerF   r@   r   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr,   c                 ó   — g | ]
}|d          ‘ŒS rM   r   r6   s     r   r9   zLine.x_left.<locals>.<listcomp>U   s   € ÐAÐAÐA¨E˜u QœxÐAÐAÐAr   )r;   r<   r,   r=   rD   r!   r#   s    r   Úx_leftzLine.x_leftO   s`   € å�t˜YÑ'Ô'ð 	+Ý�D˜) TÑ*Ô*Ð*ØŒ<Ð#Ø”<ÐÝ”vÐAÐA°T´[ÐAÑAÔAÑBÔBˆŒØŒ|Ðr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr-   c                 ó   — g | ]
}|d          ‘ŒS rM   r   r6   s     r   r9   z Line.x_right.<locals>.<listcomp>^   rC   r   )r;   r<   r-   r=   rI   r!   r#   s    r   Úx_rightzLine.x_rightX   rF   r   c                 ó(  — t          | d¦  «        sd | _        | j        �| j        S t          j        | j        ¦  «        }d„ |D ¦   «         }d„ |D ¦   «         }t          ¦   «         }|                     ||¦  «         |j        d         | _        | j        S )Nr.   c                 ó   — g | ]
}|d          ‘ŒS r5   r   ©r7   Úps     r   r9   zLine.slope.<locals>.<listcomp>h   s   € Ð#Ð#Ð#�qˆa�ŒdÐ#Ð#Ð#r   c                 ó    — g | ]}|d          g‘ŒS rM   r   rW   s     r   r9   zLine.slope.<locals>.<listcomp>i   s   € Ð%Ð%Ð%˜ˆq�ŒtˆfÐ%Ð%Ð%r   r   )r;   r.   r=   Úarrayr!   r   ÚfitÚcoef_)r$   r!   ÚysÚxsÚmodels        r   Úslopez
Line.slopea   s–   € å�t˜XÑ&Ô&ð 	ØˆDŒKØŒ;Ð"Ø”;ÐÝ”˜$œ+Ñ&Ô&ˆØ#Ð#˜FÐ#Ñ#Ô#ˆØ%Ð%˜fÐ%Ñ%Ô%ˆÝ Ñ"Ô"ˆØ�	Š	�"�bÑÔÐØ”k !”nˆŒØŒ{Ðr   c                 ó"   — | j         |j         k     S r    ©r?   ©r$   Úlines     r   Ú__lt__zLine.__lt__o   s   € ØŒ}˜tœ}Ò,Ð,r   c                 ó*   — t          | j        ¦  «        S r    )Úlenr!   r#   s    r   Ú__len__zLine.__len__r   s   € Ý�4”;ÑÔÐr   c                 ó‚   — dt          | j        ¦  «        › d| j        › d| j        › d| j        › d| j        › d| j        › d�S )NzLine(
	Point count: ú

	Center: ú
	Upper bound: ú
	Lower bound: z	
	Label: ú	
	Slope: ú
)
)rg   r!   r?   rE   rJ   r"   r`   r#   s    r   Ú__repr__zLine.__repr__u   s{   € ðÝ! $¤+Ñ.Ô.ðð àœðð ð #œlðð ð #œlð	ð ð
 œ
ðð ð œ
ðð ð ð 	r   N)r   r   r   r%   r1   ÚpropertyÚfloatr?   rE   rJ   rN   rQ   rT   r`   re   rh   ro   r   r   r   r   r      sp  € € € € € ð%ð %ð %ðð ð ð ð˜%ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð˜%ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð�uð ð ð ñ „Xðð-ð -ð -ð ð  ð  ðð ð ð ð r   r   c                   óö  — e Zd Zd„ Zd„ Zedefd„¦   «         Zej        d„ ¦   «         Zedefd„¦   «         Z	e	j        d„ ¦   «         Z	edefd„¦   «         Z
e
j        d	„ ¦   «         Z
edefd
„¦   «         Zej        d„ ¦   «         Zedefd„¦   «         Zej        d„ ¦   «         Zedefd„¦   «         Zej        d„ ¦   «         Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚStaffc                 ó>   — g | _         d | _        d | _        d| _        d S )NF)ÚlinesÚtrackÚgroupÚ	is_interpr#   s    r   r%   zStaff.__init__�   s"   € ØˆŒ
ØˆŒ
ØˆŒ
Ø$ˆŒˆˆr   c                 óª   — | j                              |¦  «         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d S r    )
ru   r'   r(   r)   r*   r+   r,   r-   Ú
_unit_sizer.   rc   s     r   Úadd_linezStaff.add_line‡   sT   € ØŒ
×Ò˜$ÑÔÐØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒˆˆr   r2   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr(   c                 ó   — g | ]	}|j         ‘Œ
S r   rb   ©r7   rd   s     r   r9   z"Staff.y_center.<locals>.<listcomp>˜   ó   € Ð!GÐ!GÐ!G°D $¤-Ð!GÐ!GÐ!Gr   )r;   r<   r(   r=   r>   ru   r#   s    r   r?   zStaff.y_center’   ó`   € å�t˜[Ñ)Ô)ð 	-Ý�D˜+ tÑ,Ô,Ð,ØŒ>Ð%Ø”>Ð!ÝœÐ!GÐ!G¸D¼JÐ!GÑ!GÔ!GÑHÔHˆŒØŒ~Ðr   c                 ó   — || _         d S r    )r(   ©r$   Úvals     r   r?   zStaff.y_center›   ó   € àˆŒˆˆr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr)   c                 ó   — g | ]	}|j         ‘Œ
S r   )rE   r~   s     r   r9   z!Staff.y_upper.<locals>.<listcomp>¥   ó   € ÐDÐDÐD° ¤ÐDÐDÐDr   )r;   r<   r)   r=   rD   ru   r#   s    r   rE   zStaff.y_upperŸ   ó`   € å�t˜ZÑ(Ô(ð 	,Ý�D˜* dÑ+Ô+Ð+ØŒ=Ð$Ø”=Ð ÝœÐDÐD¸¼ÐDÑDÔDÑEÔEˆŒØŒ}Ðr   c                 ó   — || _         d S r    )r)   r‚   s     r   rE   zStaff.y_upper¨   ó   € àˆŒˆˆr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr*   c                 ó   — g | ]	}|j         ‘Œ
S r   )rJ   r~   s     r   r9   z!Staff.y_lower.<locals>.<listcomp>²   r‡   r   )r;   r<   r*   r=   rI   ru   r#   s    r   rJ   zStaff.y_lower¬   rˆ   r   c                 ó   — || _         d S r    )r*   r‚   s     r   rJ   zStaff.y_lowerµ   rŠ   r   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr+   c                 ó   — g | ]	}|j         ‘Œ
S r   )rN   r~   s     r   r9   z"Staff.x_center.<locals>.<listcomp>¿   r   r   )r;   r<   r+   r=   r>   ru   r#   s    r   rN   zStaff.x_center¹   r€   r   c                 ó   — || _         d S r    )r+   r‚   s     r   rN   zStaff.x_centerÂ   r„   r   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr,   c                 ó   — g | ]	}|j         ‘Œ
S r   )rQ   r~   s     r   r9   z Staff.x_left.<locals>.<listcomp>Ì   s   € ÐBÐBÐB¨t˜tœ{ÐBÐBÐBr   )r;   r<   r,   r=   rD   ru   r#   s    r   rQ   zStaff.x_leftÆ   s`   € å�t˜YÑ'Ô'ð 	+Ý�D˜) TÑ*Ô*Ð*ØŒ<Ð#Ø”<ÐÝ”vÐBÐB°t´zÐBÑBÔBÑCÔCˆŒØŒ|Ðr   c                 ó   — || _         d S r    )r,   r‚   s     r   rQ   zStaff.x_leftÏ   s   € àˆŒˆˆr   c                 ó¾   — t          | d¦  «        st          | dd ¦  «         | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr-   c                 ó   — g | ]	}|j         ‘Œ
S r   )rT   r~   s     r   r9   z!Staff.x_right.<locals>.<listcomp>Ù   r‡   r   )r;   r<   r-   r=   rI   ru   r#   s    r   rT   zStaff.x_rightÓ   rˆ   r   c                 ó   — || _         d S r    )r-   r‚   s     r   rT   zStaff.x_rightÜ   rŠ   r   c                 ó   ‡— t          | d¦  «        st          | dd ¦  «         | j        �| j        S d„ | j        D ¦   «         Šˆfd„t	          dt          | j        ¦  «        ¦  «        D ¦   «         }t          j        |¦  «        | _        | j        S )Nrz   c                 ó   — g | ]	}|j         ‘Œ
S r   rb   r~   s     r   r9   z#Staff.unit_size.<locals>.<listcomp>ç   s   € Ð8Ð8Ð8 T�4”=Ð8Ð8Ð8r   c                 ó8   •— g | ]}‰|         ‰|d z
           z
  ‘ŒS rM   r   )r7   ÚiÚcenterss     €r   r9   z#Staff.unit_size.<locals>.<listcomp>è   s*   ø€ ÐMÐMÐM¨a�˜”
˜W Q q¡Sœ\Ñ)ÐMÐMÐMr   r   )r;   r<   rz   ru   Úrangerg   r=   r>   )r$   Úgapsr›   s     @r   Ú	unit_sizezStaff.unit_sizeà   s�   ø€ õ �t˜\Ñ*Ô*ð 	.Ý�D˜,¨Ñ-Ô-Ð-ØŒ?Ð&Ø”?Ð"Ø8Ð8¨T¬ZÐ8Ñ8Ô8ˆØMÐMÐMÐMµ5¸½CÀÄ
¹O¼OÑ3LÔ3LÐMÑMÔMˆÝœ' $™-œ-ˆŒØŒÐr   c                 ó2   — t          | j        ¦  «        dk    S )Né   ©rg   ru   r#   s    r   Ú
incompletezStaff.incompleteì   s   € å�4”:‰Œ !Ò#Ð#r   c                 óª   — t          | d¦  «        sd | _        | j        �| j        S t          j        d„ | j        D ¦   «         ¦  «        | _        | j        S )Nr.   c                 ó   — g | ]	}|j         ‘Œ
S r   )r`   )r7   Úls     r   r9   zStaff.slope.<locals>.<listcomp>ö   s   € Ð;Ð;Ð;¨1˜qœwÐ;Ð;Ð;r   )r;   r.   r=   r>   ru   r#   s    r   r`   zStaff.slopeð   sU   € å�t˜XÑ&Ô&ð 	ØˆDŒKØŒ;Ð"Ø”;ÐÝ”gÐ;Ð;°´
Ð;Ñ;Ô;Ñ<Ô<ˆŒØŒ{Ðr   r   c                 óÎ   — t          ¦   «         }| j        D ]N}t          ¦   «         }|j        D ]!\  }}|                     ||z   ||z   ¦  «         Œ"|                     |¦  «         ŒO|S r    )rs   ru   r   r!   r1   r{   )r$   Úx_offsetÚy_offsetÚstrd   Únew_lr/   r0   s           r   Ú	duplicatezStaff.duplicateù   ss   € Ý‰WŒWˆØ”Jð 	ð 	ˆDÝ‘F”FˆEØœð 8ð 8‘��1Ø—’  (¡
¨A¨h©JÑ7Ô7Ð7Ð7Ø�KŠK˜ÑÔÐÐØˆ	r   c                 ó"   — | j         |j         k     S r    rb   )r$   r©   s     r   re   zStaff.__lt__  s   € ØŒ}˜rœ{Ò*Ð*r   c                 ó*   — t          | j        ¦  «        S r    r¡   r#   s    r   rh   zStaff.__len__  s   € Ý�4”:‰ŒÐr   c                 ó²   — dt          | j        ¦  «        › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d| j        › d	| j	        › d
�S )NzStaff(
	Lines: rj   rk   rl   z
	Unit size: z	
	Track: z	
	Group: z
	Is interpolation: rm   rn   )
rg   ru   r?   rE   rJ   rž   rv   rw   rx   r`   r#   s    r   ro   zStaff.__repr__  s¬   € ð
Ý˜DœJ™œð
ð 
àœð
ð 
ð #œlð
ð 
ð #œlð	
ð 
ð
 !œNð
ð 
ð œ
ð
ð 
ð œ
ð
ð 
ð $(¤>ð
ð 
ð œ
ð
ð 
ð 
ð 
	r   c                 ó˜   — t          |t          ¦  «        r|j        |j        }}n|\  }}|| j        z
  dz  }|| j        z
  dz  }||z   dz  S )Nr   g      à?)Ú
isinstancers   rN   r?   )r$   r©   r0   r/   Úx_distÚy_dists         r   Ú__sub__zStaff.__sub__  s]   € Ý�b�%Ñ Ô ð 	Ø”; ¤ˆqˆAˆAà‰DˆAˆqØ�d”mÑ#¨Ñ)ˆØ�d”mÑ#¨Ñ)ˆØ˜‘ CÑ'Ð'r   N)r   r   )r   r   r   r%   r{   rp   rq   r?   ÚsetterrE   rJ   rN   rQ   rT   Úintrž   Úboolr¢   r`   r«   re   rh   ro   r³   r   r   r   rs   rs   €   s�  € € € € € ð%ð %ð %ð	ð 	ð 	ð ð˜%ð ð ð ñ „Xðð „_ðð ñ „_ðð ð˜ð ð ð ñ „Xðð „^ðð ñ „^ðð ð˜ð ð ð ñ „Xðð „^ðð ñ „^ðð ð˜%ð ð ð ñ „Xðð „_ðð ñ „_ðð ð˜ð ð ð ñ „Xðð „]ðð ñ „]ðð ð˜ð ð ð ñ „Xðð „^ðð ñ „^ðð ð	˜3ð 	ð 	ð 	ñ „Xð	ð ð$˜Dð $ð $ð $ñ „Xð$ð ð�uð ð ð ñ „Xððð ð ð ð+ð +ð +ðð ð ðð ð ð(ð (ð (ð (ð (r   rs   c                 ó  — t          j        | dk    ¦  «        \  }}t          j        | d¬¦  «        }|t          j        |¦  «        z  }t	          t          |¦  «        dz  ¦  «        }t          t          |¦  «        dz   | j        d         ¦  «        }t          t          |¦  «        dz
  d¦  «        }t          |dz   t          |¦  «        ¦  «        D ])}t          j        ||dz
  |…         ¦  «        dk     r|} nŒ*t          |dz
  dd¦  «        D ])}t          j        |||dz   …         ¦  «        dk     r|} nŒ*t          t          |¦  «        d	z   t          | ¦  «        ¦  «        }	t	          ||z
  |z  ¦  «        }
g }t          |||
¦  «        D ]Z}||
z   }||z
  |
k     r'|}| 
                    t          ||¦  «        ¦  «          n$| 
                    t          ||¦  «        ¦  «         Œ[t          j        |t          ¬
¦  «        |||	fS )Nr   )Úaxisr   é2   r   é
   çš™™™™™¹?éÿÿÿÿéd   ©Údtype)r=   ÚwhereÚsumr>   Úroundrg   rD   rI   Úshaperœ   r'   rZ   Úobject)Ú
staff_predÚsplitsr]   r^   Úaccum_xÚhalfÚright_boundÚ
left_boundrš   Úbottom_boundÚ	step_sizeÚzonesÚstartÚends                 r   Ú
init_zonesrÐ     s  € ÝŒX�j 1’nÑ%Ô%�F€Bˆõ Œf�Z aÐ(Ñ(Ô(€GØ�œ Ñ(Ô(Ñ(€GÝ•�W‘” Ñ!Ñ"Ô"€DÝ•c˜"‘g”g ‘l JÔ$4°QÔ$7Ñ8Ô8€KÝ•S˜‘W”W˜r‘\ 1Ñ%Ô%€JÝ�4˜‘7�C ™LœLÑ)Ô)ð ð ˆÝŒ7�7˜1˜R™4 ˜6”?Ñ#Ô# cÒ)Ð)ØˆKØˆEð *õ �4˜‘7˜A˜rÑ"Ô"ð ð ˆÝŒ7�7˜1˜Q˜r™T˜6”?Ñ#Ô# cÒ)Ð)ØˆJØˆEð *õ •s˜2‘w”w ‘}¥c¨*¡o¤oÑ6Ô6€LÝ�{ ZÑ/°6Ñ9Ñ:Ô:€IØ€EÝ�z ;°	Ñ:Ô:ð (ð (ˆØ�iÑˆØ˜Ñ˜yÒ(Ð(ØˆCØ�LŠL�˜u cÑ*Ô*Ñ+Ô+Ð+ØˆEØ�Š•U˜5 #Ñ&Ô&Ñ'Ô'Ð'Ð'ÝŒ8�E¥Ð(Ñ(Ô(¨*°kÀ<ÐOÐOr   é   çš™™™™™é?r»   éK   c           	      ó2  ‡— t          j        d¦  «        }t          || ¬¦  «        ^}}g Š|D ]•}t          |d         |d         d¬¦  «         t	          j        |t          j        ¬¦  «        }t          |d d …|f         |d         |¬¦  «        }	|	�1‰                     |	¦  «         t          t          |	¦  «        ¦  «         Œ–t          ‰¦  «        Št          ‰|¬	¦  «        }
t                               d
|
› �¦  «         ‰D ]+}t          |¦  «        D ]\  }}||
z  |_        ||
z  |_        ŒŒ,t#          ˆfd„‰D ¦   «         ¦  «        st$          ‚t#          ˆfd„‰D ¦   «         ¦  «        sJ ‚d„ }‰j        D �]
}	d„ |	D ¦   «         }t          t)          |¦  «        ¦  «        dk    rt+          j        d|› �¦  «        ‚t	          j        d„ |	D ¦   «         ¦  «        }t	          j         ||¦  «        |k     ¦  «        s#t+          j        d|› d ||¦  «        › �¦  «        ‚t	          j        d„ |	D ¦   «         ¦  «        }t	          j         ||¦  «        |k     ¦  «        s#t+          j        d|› d ||¦  «        › �¦  «        ‚�Œt	          j        ‰¦  «        |fS )NrÅ   )rÆ   r   r¼   ú )rÏ   r¾   ©r§   Úline_threshold©Ú
min_degreezTracks: c                 ó\   •— g | ](}t          |¦  «        t          ‰d          ¦  «        k    ‘Œ)S r5   ©rg   ©r7   ÚstaffÚ
all_staffss     €r   r9   zextract.<locals>.<listcomp>X  ó0   ø€ ÐIÐIÐI°U•�E‘
”
�c *¨Q¤-Ñ0Ô0Ò0ÐIÐIÐIr   c                 ó\   •— g | ](}t          |¦  «        t          ‰d          ¦  «        k    ‘Œ)S r5   rÛ   rÜ   s     €r   r9   zextract.<locals>.<listcomp>Z  rß   r   c                 ó~   — t          j        t          j        | ¦  «        t          j        | ¦  «        z  dz
  ¦  «        S ©Nr   )r=   ÚabsrZ   r>   )Údatas    r   ú<lambda>zextract.<locals>.<lambda>\  s*   € �œ�rœx¨™~œ~µ´¸±´Ñ=ÀÑAÑBÔB€ r   c                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS r   r¡   ©r7   rÝ   s     r   r9   zextract.<locals>.<listcomp>_  s"   € Ð9Ð9Ð9¨•C˜œÑ$Ô$Ð9Ð9Ð9r   r   z;Some of the stafflines contains less or more than 5 lines: c                 ó   — g | ]	}|j         ‘Œ
S r   rb   rç   s     r   r9   zextract.<locals>.<listcomp>e  s   € Ð?Ð?Ð?¨u˜EœNÐ?Ð?Ð?r   z8Centers of staff parts at the same row not aligned (Th: z): c                 ó   — g | ]	}|j         ‘Œ
S r   ©rž   rç   s     r   r9   zextract.<locals>.<listcomp>k  s   € ÐBÐBÐB°%˜eœoÐBÐBÐBr   zUnit sizes not consistent (th: )r   Ú	get_layerrÐ   Úprintr=   rZ   rµ   Úextract_partr'   rg   Úalign_staffsÚfurther_infer_track_numsÚloggerÚdebugÚ	enumeraterv   rw   ÚallÚ	ExceptionÚTÚsetÚEÚStafflineCountInconsistentÚStafflineNotAlignedÚStafflineUnitSizeInconsistent)rÆ   r×   Úhorizontal_diff_thÚunit_size_diff_thÚbarline_min_degreerÅ   rÍ   Ú_ÚrrÚstaffsÚ	num_trackÚcol_stsÚidxr©   ÚnormÚline_numr›   rž   rÞ   s                     @r   Úextractr  >  s  ø€ åÔ! ,Ñ/Ô/€Jõ ˜:¨fÐ5Ñ5Ô5€I€EˆAØ€JØð ð ˆÝˆb�Œe�R˜”V Ð%Ñ%Ô%Ð%ÝŒX�b¥¤Ð'Ñ'Ô'ˆÝ˜j¨¨¨¨B¨Ô/¸"¸Q¼%ÐP^Ð_Ñ_Ô_ˆØÐØ×Ò˜fÑ%Ô%Ð%Ý•#�f‘+”+ÑÔÐøÝ˜jÑ)Ô)€Jõ )¨Ð@RÐSÑSÔS€IÝ
‡L‚LÐ'˜IÐ'Ð'Ñ(Ô(Ð(Øð (ð (ˆÝ  Ñ)Ô)ð 	(ð 	(‰GˆC�Ø˜Y‘ˆBŒHØ˜iÑ'ˆBŒHˆHð	(õ ÐIÐIÐIÐI¸jÐIÑIÔIÑJÔJð ÝˆÝÐIÐIÐIÐI¸jÐIÑIÔIÑJÔJÐJÐJÐJàBÐB€DØ”,ð [ñ [ˆà9Ð9°&Ð9Ñ9Ô9ˆÝ�s�8‰}Œ}ÑÔ Ò"Ð"ÝÔ.ØXÈhÐXÐXñZô Zð Zõ ”(Ð?Ð?¸Ð?Ñ?Ô?Ñ@Ô@ˆÝŒv�d�d˜7‘m”mÐ&8Ò8Ñ9Ô9ð 	sÝÔ'ØqÐK]ÐqÐqÐbfÐbfÐgnÑboÔboÐqÐqñsô sð sõ ”HÐBÐB¸6ÐBÑBÔBÑCÔCˆ	ÝŒv�d�d˜9‘o”oÐ(9Ò9Ñ:Ô:ð 	[ÝÔ1ØYÐ2CÐYÐYÈÈÈYÉÌÐYÐYñ[ô [ð [ñ	[õ Œ8�JÑÔ Ð&Ð&r   c                 óp  — t          | ||¬¦  «        \  }}t          |¦  «        dk     rd S g }g }t          |¦  «        D ]º\  }}|dz  }	|j        t	          |	¦  «        k    sJ |› d|	› d|› �¦   «         ‚|	dk    rk|rit          ¦   «         }
t          |¦  «        dk    sJ t          |¦  «        ¦   «         ‚|D ]}|
                     |¦  «         Œ|                     |
¦  «         g }|                     |¦  «         Œ»t          ¦   «         }
|D ]}|
                     |¦  «         Œ|                     |
¦  «         |S )NrÖ   r    ú, r   )Úextract_linerg   rò   r"   r   rs   r{   r'   )Úpredr§   r×   ru   rþ   r   Úline_bufferr  rd   ÚlidrÝ   r¥   s               r   rí   rí   s  sl  € å˜D¨8ÀNÐSÑSÔS�H€Eˆ1õ ˆ5�z„z�A‚~€~Øˆtà€FØ€KÝ˜uÑ%Ô%ð 
!ð 
!‰	ˆˆTØ�A‰gˆØŒz�Y s™^œ^Ò+Ð+Ð+°Ð-DÐ-D¸Ð-DÐ-D¸sÐ-DÐ-DÑ+Ô+Ð+Ø�!Š8ˆ8˜ˆ8Ý‘G”GˆEÝ�{Ñ#Ô# qÒ(Ð(Ð(­#¨kÑ*:Ô*:Ñ(Ô(Ð(Ø ð "ð "�Ø—’˜qÑ!Ô!Ð!Ð!Ø�MŠM˜%Ñ Ô Ð ØˆKØ×Ò˜4Ñ Ô Ð Ð õ ‰GŒG€EØð ð ˆØ�Š�qÑÔÐÐØ
‡M‚M�%ÑÔÐà€Mr   c                 óê  — t          j        t          | ¦  «        t           j        ¬¦  «        }t          j        | dk    ¦  «        \  }}|D ]}||xx         dz  cc<   Œt          j        |dt          |¦  «        gddg¦  «        }|t          j        |¦  «        z
  t          j        |¦  «        z  }t          ||dd¬¦  «        \  }}	|dz  }|dd…         }t          ||¦  «        \  }
}||
         }t          j        t          j
        |dd …         |d d…         z
  ¦  «        d d…         ¦  «        }d„ t          t          |¦  «        ¦  «        D ¦   «         }t          ||¦  «        D ]�\  }}t          j        t          j        ||z
  ¦  «        ¦  «        }||         }|
|         rO||         t          |d	¦  «        k    r5t          ||z
  ¦  «        |k     r||                              |||z   ¦  «         ŒŽ|d         }d}d}t#          t          ||
|¦  «        d
„ ¬¦  «        }|D ]1\  }}}|sŒ	||k    rd}|}t%          |¦  «        |_        |dz  }|dz  }Œ2t          j        |¦  «        |
         }||fS )Nr¾   r   r   rÑ   ©ÚheightÚdistanceÚ
prominencer¼   r   c                 ó*   — g | ]}t          ¦   «         ‘ŒS r   )r   ©r7   rþ   s     r   r9   z extract_line.<locals>.<listcomp>¤  s   € Ð1Ð1Ð1˜�T‰VŒVÐ1Ð1Ð1r   g333333ó?c                 ó   — | d         S )Nr   r   )Úobjs    r   rå   zextract_line.<locals>.<lambda>±  s
   € ÀSÈÄV€ r   ©Úkey)r=   Úzerosrg   Úuint16rÀ   Úinsertr>   Ústdr   Úfilter_line_peaksÚsortrœ   ÚzipÚargminrã   rD   r1   Úsortedr   r"   rZ   )r
  r§   r×   ÚcountÚsub_ysÚsub_xsr/   r  r›   rþ   Úvalid_centersÚgroupsÚccÚmax_gapru   r0   Úclosest_cenÚcenÚ
last_groupÚcur_line_idr  Úpackrd   ÚvalidÚgrps                            r   r	  r	  ’  s’  € åŒH•S˜‘Y”Y¥b¤iÐ0Ñ0Ô0€EÝ”X˜d QšhÑ'Ô'�N€FˆFØð ð ˆØˆaˆˆŒ�A‰ˆˆ‰ˆõ ŒI�e˜a¥ U¡¤˜_¨q°!¨fÑ5Ô5€EØ•B”G˜E‘N”NÑ"¥b¤f¨U¡m¤mÑ3€DÝ˜D¨À!ÐPQÐRÑRÔR�J€GˆQØˆq�L€GØ��"�Œ:€DÝ-¨g°tÑ<Ô<Ñ€M�6ð 
�Ô	€BÝŒg•b”g˜b   œf r¨#¨2¨#¤wÑ.Ñ/Ô/°°°Ô3Ñ4Ô4€GØ1Ð1�U¥3 w¡<¤<Ñ0Ô0Ð1Ñ1Ô1€EÝ�F˜FÑ#Ô#ð 8ð 8‰ˆˆ1Ý”i¥¤ w°¡{Ñ 3Ô 3Ñ4Ô4ˆØ�kÔ"ˆØ˜Ô%ð 	8Ø˜!”W�s >°3Ñ7Ô7Ò7Ð7Ý˜˜S™‘\”\ GÒ+Ð+Ø�+Ô×(Ò(¨¨A¨h©JÑ7Ô7Ð7øð ˜”€JØ€KØ
€CÝ•#�e˜]¨FÑ3Ô3Ð9KÐ9KÐLÑLÔL€DØ ð 	ð 	Ñˆˆe�SØð 	ØØ�*ÒÐØˆKØˆJå˜{Ñ+Ô+ˆŒ
Ø�qÑˆØˆq‰ˆˆåŒH�U‰OŒO˜MÔ*€EØ�$ˆ;Ðr   ç      ø?c                 óh  — t          j        d„ t          t          | ¦  «        ¦  «        D ¦   «         ¦  «        }t	          | ¦  «        D ]\  }}||         dk    rd||<   Œ| dd …         | d d…         z
  }t          dt          t          | ¦  «        dz  ¦  «        ¦  «        }t          j        t          j        |¦  «        d |…         ¦  «        }||z  }	| d         |	z
  dz
  gt          | ¦  «        z   }
g }d}t          dt          |
¦  «        ¦  «        D ]4}|
|         |
|dz
           z
  |	k    r|dz  }| 
                    |¦  «         Œ5| 
                    |d         dz   ¦  «         |d         }d}t          dt          |¦  «        ¦  «        D ]™}||         }||k    r|dz  }Œ|dk     rd|||z
  |…<   nn|dk    rh| ||z
  |…         }|d d…         }|d	d …         }t          ||         ¦  «        t          ||         ¦  «        k    rd|||z
  dz   |…<   nd|||z
  |dz
  …<   |}d}Œš||d d…         fS )
Nc                 ó   — g | ]}d ‘ŒS )Tr   r  s     r   r9   z%filter_line_peaks.<locals>.<listcomp>Â  s   € Ð<Ð<Ð< Q˜DÐ<Ð<Ð<r   é   Fr   r¼   r    gš™™™™™É?r   éûÿÿÿ)r=   rZ   rœ   rg   rò   rI   rÂ   r>   r  Úlistr'   rÁ   )Úpeaksr  Úmax_gap_ratioÚvalid_peaksr  rX   r�   r!  Úapprox_unitr'  Ú	ext_peaksr%  rw   rš   Úcur_gÚ
cand_peaksÚ	head_partÚ	tail_parts                     r   r  r  Á  sz  € Ý”(Ð<Ð<­%µ°E±
´
Ñ*;Ô*;Ð<Ñ<Ô<Ñ=Ô=€Kõ ˜EÑ"Ô"ð %ð %‰ˆˆQØ�Œ7�RŠ<ˆ<Ø$ˆK˜Ñøð ���Œ9�u˜S˜b˜S”zÑ!€DÝ�•5�˜U™œ cÑ)Ñ*Ô*Ñ+Ô+€EÝ”'�"œ' $™-œ-¨¨¨Ô/Ñ0Ô0€KØ˜MÑ)€Gà�q”˜'Ñ! !Ñ#Ð$¥t¨E¡{¤{Ñ2€IØ€FØ€EÝ�1•c˜)‘n”nÑ%Ô%ð ð ˆØ�QŒ<˜) A a¡Cœ.Ñ(¨7Ò2Ð2Ø�Q‰JˆEØ�Š�eÑÔÐÐð ‡M‚M�&˜”*˜Q‘,ÑÔÐØ�1ŒI€EØ€EÝ�Q�˜F™œÑ$Ô$ð ð ˆØ�s”ˆØ�EŠ>ˆ>Ø�Q‰JˆEØà�1Š9ˆ9à).ˆK˜˜E™	 #˜Ñ&Ð&Ø�QŠYˆYØ˜s 5™y¨˜}Ô-ˆJØ" 2 A 2œˆIØ" 2 3 3œˆIÝ�4˜	”?Ñ#Ô#¥c¨$¨y¬/Ñ&:Ô&:Ò:Ð:Ø/4�˜C ™I a™K¨˜OÑ,Ð,à/4�˜C ™I c¨!¡e˜OÑ,àˆØˆˆØ˜˜s ˜sœÐ#Ð#r   r   c                 óŽ  ‡— t          d„ | D ¦   «         ¦  «        }t          |¦  «        dk    rt          j        | ¦  «        S t	          |¦  «        }t          j        t          | ¦  «        |ft          ¬¦  «        }t          | ¦  «        D ]/\  }}t          |¦  «        |k    rt          j        |¦  «        ||<   Œ0d„ }ˆfd„}t          |¦  «        D �]r}	|d d …|	f         }
t          |
¦  «        D �]R\  }}t          |t          ¦  «        rŒ| |         } |||
¦  «        }t          |¦  «        |k     sJ t          |¦  «        › d|› �¦   «         ‚t          |¦  «        dk    s
J |¦   «         ‚ ||d         d         |¦  «        }|�||||	f<   Œžt          |¦  «        dk    rB|d         \  }}||k    sJ ‚|j        |j        z
  }|||z
  z  }|                     |¬¦  «        }�nQt          |¦  «        d	k    s
J |¦   «         ‚|\  \  }}\  }}||k    s
J |¦   «         ‚||k    s
J |¦   «         ‚||k    r||}}||}}||k     rN||z
  ||z
  }}|j        |j        z
   ||z  z  }|j        |j        z
   ||z  z  }|                     ||¬
¦  «        }n§||cxk    r|k     rOn nL||z
  ||z
  }}|j        |j        z
  ||z  z  }|j        |j        z
  ||z  z  }|                     ||¬
¦  «        }nK||z
  ||z
  }}|j        |j        z
  ||z  z  }|j        |j        z
  ||z  z  }|                     ||¬
¦  «        }d|_        ||||	f<   �ŒT�Œt|S )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r    rÛ   )r7   Úst_parts     r   ú	<genexpr>zalign_staffs.<locals>.<genexpr>ö  s(   è è € Ð7Ð7 W•C˜‘L”LÐ7Ð7Ð7Ð7Ð7Ð7r   r   r¾   c                 ó<  ‡ — ˆ fd„t          t          |¦  «        ¦  «        D ¦   «         }t          |d„ ¬¦  «        }d„ |D ¦   «         }g }|D ]O}t          ||         t          ¦  «        r|                     |||         f¦  «         t          |¦  «        dk    r nŒP|S )Nc                 ó8   •— g | ]}|t          |‰z
  ¦  «        f‘ŒS r   )rã   )r7   r  Újs     €r   r9   z8align_staffs.<locals>.get_nearby_sts.<locals>.<listcomp>  s(   ø€ Ð>Ð>Ð> s�#•s˜3˜q™5‘z”zÐ"Ð>Ð>Ð>r   c                 ó   — | d         S râ   r   ©Úits    r   rå   z6align_staffs.<locals>.get_nearby_sts.<locals>.<lambda>  s
   € ¨R°¬U€ r   r  c                 ó   — g | ]
}|d          ‘ŒS r5   r   )r7   rG  s     r   r9   z8align_staffs.<locals>.get_nearby_sts.<locals>.<listcomp>  s   € Ð&Ð&Ð&˜"��1”Ð&Ð&Ð&r   r   )rœ   rg   r   r°   rs   r'   )rD  ÚrowÚdistsÚidxsÚ
nearby_stsÚnear_idxs   `     r   Úget_nearby_stsz$align_staffs.<locals>.get_nearby_sts  s¹   ø€ Ø>Ð>Ð>Ð>­eµC¸±H´H©o¬oÐ>Ñ>Ô>ˆÝ�uÐ"2Ð"2Ð3Ñ3Ô3ˆØ&Ð& Ð&Ñ&Ô&ˆàˆ
Øð 	ð 	ˆHÝ˜#˜hœ-­Ñ/Ô/ð =Ø×!Ò! 8¨S°¬]Ð";Ñ<Ô<Ð<Ý�:‰Œ !Ò#Ð#Ø�ð $àÐr   c                 ór   •— | j         ‰z  }|D ](}t          |j        | j        z
  ¦  «        }||k     r|c S Œ)d S r    )rž   rã   r?   )Úref_stÚ
ori_st_colÚmax_distr©   ÚdistÚmax_dist_ratios        €r   Úget_nearest_ori_stz(align_staffs.<locals>.get_nearest_ori_st  sQ   ø€ ØÔ# nÑ4ˆØð 	ð 	ˆBÝ�r”{ V¤_Ñ4Ñ5Ô5ˆDØ�hŠˆØ�	�	�	ð àˆtr   r  r   )r§   r   )r§   r¨   T)rö   rg   r=   rZ   rI   r  rÄ   rò   rœ   r°   rs   rT   rQ   r«   rN   r?   rx   )r   rT  Ú	len_typesÚmax_lenÚgridr  r@  rN  rU  rš   rI  rD  r  Úori_st_partÚstsÚori_stÚref_idxrP  Úwidthr§   Únew_stÚidx1Úref1Úidx2Úref2Úr1Úr2r¨   s    `                          r   rî   rî   õ  sé  ø€ ÝÐ7Ð7°Ð7Ñ7Ô7Ñ7Ô7€IÝ
ˆ9�~„~˜ÒÐåŒx˜ÑÔÐõ �)‰nŒn€GÝŒ8•S˜‘[”[ 'Ð*µ&Ð9Ñ9Ô9€DÝ! &Ñ)Ô)ð *ð *‰ˆˆWÝˆw‰<Œ<˜7Ò"Ð"Ýœ Ñ)Ô)ˆD�‰Iøðð ð ðð ð ð ð õ �7‰^Œ^ð 6 ñ 6 ˆØ�1�1�1�a�4ŒjˆÝ ‘n”nð 4	 ñ 4	 ‰FˆAˆsÝ˜#�uÑ%Ô%ð Øà  œ)ˆKØ �.  CÑ(Ô(ˆCÝ�{Ñ#Ô# gÒ-Ð-Ð-µ#°kÑ2BÔ2BÐ/OÐ/OÀgÐ/OÐ/OÑ-Ô-Ð-Ý�s‘8”8˜a’<�<�< ‘<”<�<ð
 (Ð'¨¨A¬¨q¬	°;Ñ?Ô?ˆFØÐ!Ø#��Q˜�T‘
Øõ �3‰xŒx˜1Š}ˆ}Ø"% a¤&‘�˜Ø !’|�|�|�|Øœ¨¬Ñ6�Ø  A¨¡KÑ0�Ø×)Ò)°8Ð)Ñ<Ô<�‘å˜3‘x”x 1’}�}�} c‘}”}�}Ø-0Ñ*‘��t™l˜t Tà˜q’y�y�y $‘y”y�yØ˜q’y�y�y $‘y”y�yØ˜$’;�;Ø!% t˜$�DØ!% t˜$�DØ�t’8�8à! !™V T¨$¡Y˜�BØ!%¤¨t¬}Ñ!<Ð=ÀÀbÁÑI�HØ!%¤¨t¬}Ñ!<Ð=ÀÀbÁÑI�HØ!Ÿ^š^°XÈ˜^ÑQÔQ�F�FØ˜QÐ%Ð%Ò%Ð% Ò%Ð%Ð%Ð%Ð%à˜t™V T¨$¡Y˜�BØ $¤¨d¬mÑ ;ÀÀRÁÑH�HØ $¤¨d¬mÑ ;ÀÀRÁÑH�HØ!Ÿ^š^°XÈ˜^ÑQÔQ�F�Fð " $™Y¨¨$©˜�BØ $¤¨d¬mÑ ;ÀÀRÁÑH�HØ $¤¨d¬mÑ ;ÀÀRÁÑH�HØ!Ÿ^š^°XÈ˜^ÑQÔQ�FØ#ˆFÔØˆD��A�‰J‰Jñi4	 ðj €Kr   c                 ó˜  — t          j        d¦  «        }t          j        d¦  «        }t          j        d¦  «        }t          j        d¦  «        }||z
  |z
  |z
  }d||dk     <   t          |¦  «        }t          || |¬¦  «        }t	          ||¦  «        |z   }d||dk    <   t          j        dt
          j        ¬	¦  «        }	t          j	        t          j
        |                     t
          j        ¦  «        |	¦  «        |	¦  «        }
t          |
¦  «        }g }|D ]K}|d
         |d         z
  }t          | gt          |¦  «        ¢R Ž }||k    r|                     ||z  ¦  «         ŒLt          j        |¦  «        }d}d}t#          dd¦  «        D ];}t%          ||||z  k             ¦  «        }||dz   z  | j        d         k    r|dz  }Œ; |S )NÚsymbols_predÚstems_rests_predÚnotehead_predÚclefs_keys_predr   rØ   r   )r    r   r¾   r   rº   )r   rë   r	   Úfilter_linesÚget_barline_mapr=   ÚonesÚuint8Úcv2ÚerodeÚdilateÚastyper
   Únaive_get_unit_sizer   r'   rZ   rœ   rg   rÃ   )r   rÙ   ÚsymbolsÚstemsÚnoteheadÚclefsÚmixru   ÚbmapÚkerÚext_bmapÚbboxesÚh_ratiosÚboxÚhrž   r  Úfactorrš   Úvalid_hs                       r   rï   rï   S  sÐ  € åÔ˜~Ñ.Ô.€GÝÔÐ/Ñ0Ô0€EÝÔ Ñ0Ô0€HÝÔÐ.Ñ/Ô/€Eà
�E‰/˜HÑ
$ uÑ
,€CØ€CˆˆAŠ�Jõ �s‰OŒO€EÝ˜ °:Ð>Ñ>Ô>€EÝ˜7 EÑ*Ô*¨UÑ2€DØ€DˆˆaŠ�Lõ Œ'�&¥¤Ð
)Ñ
)Ô
)€CÝŒy�œ D§K¢Kµ´Ñ$9Ô$9¸3Ñ?Ô?ÀÑEÔE€HÝ�hÑÔ€Fð €HØð +ð +ˆØ�ŒF�S˜”V‰OˆÝ'¨ÐAµ¸C±´ÐAÐAÐAˆ	ØˆyŠ=ˆ=Ø�OŠO˜A 	™MÑ*Ô*Ð*øÝŒx˜Ñ!Ô!€Hà€IØ€FÝ�1�b‰\Œ\ð ð ˆÝ�h˜x¨¨q©Ò0Ô1Ñ2Ô2ˆØ�a˜‘c‰?˜Vœ\¨!œ_Ò,Ð,Ø˜‰NˆIˆIàØÐr   c                 óŒ   — t          j        t          j        | d         | d         z
  | d         | d         z
  ¦  «        ¦  «        S )Nr   r   r   r   )r=   Úrad2degÚarctan2)rd   s    r   Ú
get_degreer„  |  s8   € ÝŒ:•b”j  a¤¨4°¬7Ñ!2°D¸´G¸dÀ1¼gÑ4EÑFÔFÑGÔGÐGr   c                 óÚ  — d}d}d}d}|                      dd¦  «                             ¦   «         D ]V}t          ||j        ¦  «        }t          ||j        ¦  «        }t          ||j        ¦  «        }t          ||j        ¦  «        }ŒWg }| D ]^}	t          |	¦  «        }
|
|k     rŒ|	d         |k     s$|	d         |k    s|	d         |k     s|	d         |k    rŒI| 	                    |	¦  «         Œ_|S )Ni–˜ r   r¼   r   r   r   )
ÚreshapeÚsqueezerD   rE   rQ   rI   rJ   rT   r„  r'   )ru   r   rÙ   Úmin_yÚmin_xÚmax_yÚmax_xr©   Úcandsrd   Údegrees              r   rj  rj  €  s  € Ø€EØ€EØ€EØ€EØ�nŠn˜R Ñ#Ô#×+Ò+Ñ-Ô-ð 'ð 'ˆÝ�E˜2œ:Ñ&Ô&ˆÝ�E˜2œ9Ñ%Ô%ˆÝ�E˜2œ:Ñ&Ô&ˆÝ�E˜2œ:Ñ&Ô&ˆˆà€EØð ð ˆå˜DÑ!Ô!ˆØ�JÒÐØð �Œ7�UŠ?ˆ?Ø˜”7˜U’?�?Ø˜”7˜U’?�?Ø˜”7˜U’?�?Øà�Š�TÑÔÐÐØ€Lr   c           	      óV  — t          j        | ¦  «        }|D ]ˆ}t          |¦  «        }|d         |d         z
  dk    r|dxx         dz  cc<   ||d         |d         …|d         |d         …fxx         | |d         |d         …|d         |d         …f         z  cc<   Œ‰d||dk    <   |S )Nr   r   r   r   )r=   Ú
zeros_liker4  )rs  r{  Úimgr}  s       r   rk  rk  �  sÉ   € Ý
Œ-˜Ñ
 Ô
 €CØð Sð SˆÝ�3‰iŒiˆØˆqŒ6�#�a”&‰=˜AÒÐØ�ˆFˆFŒF�a‰KˆFˆF‰FØˆC�ŒF�3�q”6ˆM˜3˜qœ6 # a¤&˜=Ð(Ð)Ð)Ô)¨W°S¸´V¸CÀ¼F°]ÀCÈÄFÈ3ÈqÌ6ÀMÐ5QÔ-RÑRÐ)Ð)Ñ)Ð)Ø€CˆˆAŠ�JØ€Jr   c                 óÀ   ‡‡‡— |                       dd¦  «                             ¦   «         }ˆˆfd„Šˆfd„|D ¦   «         }t          |d„ ¬¦  «        }|d         d         S )Nr¼   r   c                 óB   •— | j         ‰z
  }| j        ‰z
  }|dz  |dz  z   S )Nr   )rN   r?   )r©   Úx_diffÚy_diffr0   r/   s      €€r   rS  z!naive_get_unit_size.<locals>.dist«  s,   ø€ Ø”˜q‘ˆØ”˜q‘ˆØ˜‰{˜V q™[Ñ(Ð(r   c                 ó4   •— g | ]}|j          ‰|¦  «        f‘ŒS r   rê   )r7   r©   rS  s     €r   r9   z'naive_get_unit_size.<locals>.<listcomp>°  s(   ø€ Ð<Ð<Ð<¨"ˆbŒl˜D˜D ™HœHÐ%Ð<Ð<Ð<r   c                 ó   — | d         S râ   r   rF  s    r   rå   z%naive_get_unit_size.<locals>.<lambda>±  s
   € ¨¨A¬€ r   r  r   )r†  r‡  r   )r   r0   r/   Úflat_staffsrJ  rS  s    ``  @r   rr  rr  ¨  s�   øøø€ Ø—.’.  QÑ'Ô'×/Ò/Ñ1Ô1€Kð)ð )ð )ð )ð )ð )ð
 =Ð<Ð<Ð<°Ð<Ñ<Ô<€EÝ�5Ð.Ð.Ð/Ñ/Ô/€EØ�Œ8�AŒ;Ðr   Ú__main__ÚlastÚtabiz../test_imgs/z.pklÚrbrÝ   rÅ   ij  ix  .r   r  Úro)rÑ   rÒ   r»   r»   rÓ   )rÒ   )r/  )r   )rÓ   )EÚenumÚpicklern  Únumpyr=   Úmatplotlib.pyplotÚpyplotÚpltÚscipy.signalr   Úsklearn.clusterr   Úsklearn.linear_modelr   Úoemerr   r   r÷   Úoemer.utilsr   Ú
oemer.bboxr	   r
   r   r   rð   ÚEnumr   r   rs   rÐ   r  rí   r	  r  rî   rï   r„  rj  rk  rr  Úf_nameÚloadÚopenr
  Úregister_layerrœ   rÿ   ru   r  rä   r  rg   r!  rÀ   r]   r^   r/   rZ   r4  r>   r  Ú	thresholdr5  rþ   r7  r%  ÚplotÚshowr   r   r   ú<module>r±     s  ðØ €€€Ø €€€à 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø "Ð "Ð "Ð "Ð "Ð "Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð 
ˆ�HÑ	Ô	€ðð ð ð ð �”	ñ ô ð ðað að að að añ aô að aðH\(ð \(ð \(ð \(ð \(ñ \(ô \(ð \(ð~Pð Pð Pð>2'ð 2'ð 2'ð 2'ðjð ð ð ð>,ð ,ð ,ð ,ð^1$ð 1$ð 1$ð 1$ðh[ð [ð [ð [ð|&ð &ð &ð &ðRHð Hð Hðð ð ð ð:ð ð ð
ð 
ð 
ð ˆzÒÑØ€FØ€Fð ˆ6Œ;�t�tÐ8¨FÐ8Ð8Ð8¸$Ñ?Ô?Ñ@Ô@ÀÔI€DØ€FÔ˜,¨Ñ-Ô-Ð-Ø	ˆˆt�TÑ	Ô	€Bð �,˜t C¨ Gœ}¨aÑ0Ô0�K€Eˆ4à��R�Œ=€DØˆBŒH�S�S˜‘Y”YÑÔ€EØˆRŒX�d˜1’fÑÔ�F€BˆØð ð ˆØˆaˆˆŒ�A‰ˆˆ‰ˆØˆBŒH�a�S˜4˜4 ™;œ;Ñ&Ñ'Ô'€EØ�G�B”G˜E‘N”NÑ" f b¤f¨U¡m¤mÑ3€Dà€IØˆz˜$ y¸1ÈÐKÑKÔK�H€Eˆ1Ø+Ð+¨E°4Ñ8Ô8Ñ€K�Ø�+Ô€EØ€C„HˆT�N„N€NØ€C„HˆU�Y�K   E¡
¤
Ñ*¨DÑ1Ô1Ð1Ø€C„H�J„J€J€J€Jð; Ðr   