§
    ƒØj¢5  ã                   óN  — 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
mZmZmZ d dlmZmZmZmZmZmZ  ee¦  «        Z G d„ d¦  «        Zd„ Zd#d
„Zd$d„Zd%d„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!edk    �r0 ej"        d¦  «        Z# ej"        d¦  «        Z$ ej"        d¦  «        Z% ej"        d¦  «        Z& ej"        d¦  «        Z' ej"        d¦  «        Z( ej)        e&j*        dz   ¦  «        dz  Z+ ej,        e'd k    ¦  «        Z-d e+e-d          e-d         f<    e¦   «         Z.e /                    d¦  «          e¦   «         \  Z0Z1e /                    d ¦  «          ee0e1¦  «        \  Z2Z3e /                    d!¦  «          ee2e3¦  «        \  Z4Z5d"„ e4D ¦   «         Z6 ee6e&¦  «        Z7dS dS )&é    N)Úlayers)Úpredict)Úfind_closest_staffsÚget_global_unit_sizeÚget_unit_sizeÚ
get_logger)Ú
get_centerÚmerge_nearby_bboxÚget_bboxÚrm_merge_overlap_bboxÚ
to_rgb_imgÚdraw_bounding_boxesc                   ó6   — e Zd Zd„ Zed„ ¦   «         Zd„ Zd„ ZdS )Ú	NoteGroupc                 ó’   — d | _         d | _        g | _        g | _        g | _        d | _        d | _        d | _        d | _        d | _	        d S ©N)
ÚidÚbboxÚnote_idsÚtop_note_idsÚbottom_note_idsÚstem_upÚhas_stemÚall_same_typeÚgroupÚtrack©Úselfs    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/oemer/note_group_extraction.pyÚ__init__zNoteGroup.__init__   sO   € ØˆŒØ#ˆŒ	Ø#%ˆŒØ')ˆÔØ*,ˆÔØ!ˆŒØ"ˆŒØ#'ˆÔØˆŒ
ØˆŒ
ˆ
ˆ
ó    c                 ó>   — | j         d         | j         d         z   dz  S )Nr   é   ©r   r   s    r   Úx_centerzNoteGroup.x_center"   s   € à”	˜!”˜tœy¨œ|Ñ+¨qÑ0Ð0r!   c                 ó*   — t          | j        ¦  «        S r   )Úlenr   r   s    r   Ú__len__zNoteGroup.__len__&   s   € Ý�4”=Ñ!Ô!Ð!r!   c                 ó‚   — d| j         › d| j        › d| j        › dt          | j        ¦  «        › d| j        › d| j        › d�S )NzNote Group No. z
 / Group: z
 / Track: z :(
	Note count: z
	Stem up: z
	Has stem: z
)
)r   r   r   r'   r   r   r   r   s    r   Ú__repr__zNoteGroup.__repr__)   sr   € ð ¤ð ð °D´Jð ð È$Ì*ð ð Ý  ¤Ñ/Ô/ðð àœ,ðð ð  œ=ðð ð ð 	r!   N)Ú__name__Ú
__module__Ú__qualname__r    Úpropertyr%   r(   r*   © r!   r   r   r      s\   € € € € € ð
ð 
ð 
ð ð1ð 1ñ „Xð1ð"ð "ð "ðð ð ð ð r!   r   c                  óž  — t          j        d¦  «        } t          j        d¦  «        }t          j        d¦  «        }t          j        dt          j        ¬¦  «        }t          j        |                     t          j        ¦  «        |¦  «        }||z   }d||dk    <   t          j	         
                    |¦  «        \  }}t          t          j        | ¦  «        ¦  «        }d|v r|                     d¦  «         i }	|D �]ö}
t          j        | |
k    ¦  «        \  }}d}t          j        |¦  «        |z
  }t          j        |¦  «        |z   }t          j        |¦  «        }t          j        |¦  «        }|||…||…f         }t          t          j        |¦  «        ¦  «        }d	|v r|                     d	¦  «         t#          |¦  «        d	k    rŒÒt#          |¦  «        dk    rÙt          |	                     ¦   «         ¦  «        }|                     |¦  «        }t#          |¦  «        d	k    r|                     ¦   «         }nlt#          |¦  «        dk    r|                     ¦   «         }nD|                     ¦   «         }|	|         }|D ] }|                     |	|         ¦  «         |	|= Œ!||	|<   |D ]}||||k    <   Œn|                     ¦   «         }||	vrg |	|<   |	|                              |
¦  «         �Œøt          t          j        |¦  «        ¦  «        }|                     |	                     ¦   «         ¦  «        }|D ]}d	|||k    <   Œ|	|fS )
NÚnote_idÚnotehead_predÚstems_rests_pred)é   r#   ©Údtypeé   éÿÿÿÿr4   r   )r   Ú	get_layerÚnpÚonesÚuint8Úcv2ÚdilateÚastypeÚscipyÚndimageÚlabelÚsetÚuniqueÚremoveÚwhereÚminÚmaxr'   ÚkeysÚintersectionÚpopÚextendÚappendÚ
difference)Únote_id_mapÚnoteheadÚstemsÚkerÚ	ext_stemsÚmixÚnh_labelÚ_ÚnidsÚgroupsÚnidÚnysÚnxsÚoffsetÚtopÚbtÚleftÚrightÚcovered_regionÚlabelsrI   ÚinterrB   Útmp_gÚkÚllÚllsÚdiffs                               r   Úgroup_noteheadsri   1   s  € åÔ" 9Ñ-Ô-€KÝÔ Ñ0Ô0€HÝÔÐ/Ñ0Ô0€Eõ Œ'�&¥¤Ð
)Ñ
)Ô
)€CÝ”
˜5Ÿ<š<­¬Ñ1Ô1°3Ñ7Ô7€Ið �YÑ
€CØ€CˆˆAŠ�JÝ”-×%Ò% cÑ*Ô*�K€HˆaÝ�rŒy˜Ñ%Ô%Ñ&Ô&€DØ	ˆT€z€zØ�Š�B‰Œˆà€FØð *"ñ *"ˆÝ”8˜K¨Ò,Ñ-Ô-‰ˆˆSàˆÝŒf�S‰kŒk˜FÑ"ˆÝŒV�C‰[Œ[˜6Ñ!ˆÝŒv�c‰{Œ{ˆÝ”�s‘”ˆØ! # b &¨$¨u¨*Ð"4Ô5ˆÝ•R”Y˜~Ñ.Ô.Ñ/Ô/ˆØ�ˆ;ˆ;Ø�MŠM˜!ÑÔÐåˆv‰;Œ;˜!ÒÐØÝ�‰[Œ[˜1Š_ˆ_Ý�v—{’{‘}”}Ñ%Ô%ˆDØ×'Ò'¨Ñ-Ô-ˆEÝ�5‰zŒz˜QŠˆàŸ
š
™œ��Ý�U‘”˜q’�àŸ	š	™œ��ð Ÿ	š	™œ�Ø˜uœ�Øð "ð "�AØ—L’L ¨¤Ñ+Ô+Ð+Ø˜q˜	˜	Ø %��u‘àð /ð /�à).�˜ 2šÑ&Ð&ð/ð —J’J‘L”LˆEà˜ÐÐØˆF�5‰MØˆuŒ×Ò˜SÑ!Ô!Ð!Ñ!õ �bŒi˜Ñ!Ô!Ñ
"Ô
"€CØ�>Š>˜&Ÿ+š+™-œ-Ñ(Ô(€DØð #ð #ˆØ!"ˆ�˜2’ÑÐà�8ÐÐr!   é   c                 óä  ‡‡‡‡— | j         }t          |¦  «        \  }}‰||f         Št          ||¦  «        }|d         |d         z
  dz   }|d         t          |dz  ¦  «        z
  Št	          ‰|z   ‰j        d         ¦  «        Šˆˆˆˆfd„}t          ||¦  «        \  }	}
t	          |	j        |
j        ¦  «        }t          |	j	        |
j	        ¦  «        }|d         dz
  }t          |||z  z
  |¦  «        } |||d¦  «        \  }}|d         dz   }t	          |||z  z   |¦  «        } |||d¦  «        \  }}|�0|�.t          ||z
  ¦  «        }t          ||z
  ¦  «        }||k     r|n|S |�|S |�|S d S )Nr#   r   é   r7   c                 óp  •— 	 |dk    r| |k    r�n%|dk     r| |k     r�n‰
t          | ¦  «        t          ‰¦  «        t          ‰	¦  «        …f         }t          t          j        |¦  «        ¦  «        }d|v r|                     d¦  «         ‰|v r|                     ‰¦  «         t          |¦  «        dk    rwt          |¦  «        dk    rLg }|D ](}|                     ||||k             j        f¦  «         Œ)t          |d„ ¬¦  «        d         d         }n| 	                    ¦   «         }|| fS | |z  } �Œ3dS )NTr   r7   c                 ó   — | d         S )Nr7   r/   )Úits    r   ú<lambda>z9get_possible_nearby_gid.<locals>.search.<locals>.<lambda>•   s
   € °R¸´U€ r!   )Úkeyr8   )NN)
ÚintrC   r:   rD   rE   r'   rM   ÚsizeÚsortedrK   )Úcur_yÚy_boundÚstepÚpxsÚgidsÚregÚggÚgidÚcur_gidÚend_xÚ	group_mapÚstart_xs           €€€€r   Úsearchz'get_possible_nearby_gid.<locals>.search‚   sE  ø€ ð	Ø�aŠxˆx˜E WÒ,Ð,ÙØ˜’�˜e gšo˜oÙØ�C ™JœJ­¨G©¬µS¸±Z´ZÐ(?Ð?Ô@ˆCÝ•r”y ‘~”~Ñ&Ô&ˆDØ�DˆyˆyØ—’˜A‘”�Ø˜$ˆˆØ—’˜GÑ$Ô$Ð$å�4‰yŒy˜1Š}ˆ}Ý�t‘9”9˜q’=�=à�CØ"ð <ð <˜ØŸ
š
 B¨¨C°ªG¬Ô(9Ð#:Ñ;Ô;Ð;Ð;Ý  Ð*:Ð*:Ð;Ñ;Ô;¸BÔ?ÀÔB�C�CàŸ(š(™*œ*�CØ˜E�zÐ!Ø�T‰MˆEñ-	ð. ˆzr!   r8   r4   )r   r	   r   ÚroundrG   Úshaper   Úy_upperrH   Úy_lowerÚabs)Úcur_noter   Úscan_range_ratior   Úcen_xÚcen_yÚ	unit_sizeÚwr�   Úst1Úst2r„   r…   ru   rv   Úgid_topÚgtyÚgid_btÚgbyÚdiff_topÚdiff_btr}   r~   r€   s    `                   @@@r   Úget_possible_nearby_gidr•   y   sÃ  øøøø€ ØŒ=€DÝ˜dÑ#Ô#�L€Eˆ5Ø˜˜u˜Ô%€GÝ˜e UÑ+Ô+€IàˆQŒ�$�q”'Ñ˜AÑ€AØ�1Œg�˜a !™e™œÑ$€GÝ�˜‘	˜9œ?¨1Ô-Ñ.Ô.€Eðð ð ð ð ð ð ð õ4 # 5¨%Ñ0Ô0�H€CˆÝ�#”+˜sœ{Ñ+Ô+€GÝ�#”+˜sœ{Ñ+Ô+€Gð �ŒG�a‰K€EÝ�%Ð*¨YÑ6Ñ6¸Ñ@Ô@€GØ�6˜% ¨"Ñ-Ô-�L€GˆSð �ŒG�a‰K€EÝ�%Ð*¨YÑ6Ñ6¸Ñ@Ô@€GØ�&˜ ¨Ñ+Ô+�K€FˆCàÐ˜vÐ1Ý�u˜s‘{Ñ#Ô#ˆÝ�e˜c‘kÑ"Ô"ˆØ" WÒ,Ð,ˆwˆw°&Ð8Ø	Ð	ØˆØ	Ð	ØˆØˆ4r!   ç      à?c                 óä   ‡— |€dS ˆfd„} || ¦  «        } ||¦  «        }t          |¦  «        \  }}t          |¦  «        \  }	}
t          ||¦  «        }||z  }t          |	|z
  ¦  «        }||k     S )NTc                 óÖ   •— t          j        ‰| k    ¦  «        \  }}t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        fS r   )r:   rF   rG   rH   )r|   ÚysÚxsr   s      €r   Ú_get_boxz'check_valid_new_group.<locals>._get_box¹   sI   ø€ Ý”˜) Sš.Ñ)Ô)‰ˆˆBÝ”�r‘
”
�BœF 2™JœJ­¬¨r©
¬
µB´F¸2±J´JÐ?Ð?r!   )r	   r   r†   )Úori_grpÚtar_grpr   Úmax_x_diff_ratior›   Úori_boxÚtar_boxÚ	ori_x_cenÚ	ori_y_cenÚ	tar_x_cenrV   r‹   Ú
max_x_diffrh   s     `           r   Úcheck_valid_new_groupr¥   µ   s¥   ø€ Ø€Øˆtð@ð @ð @ð @ð @ð ˆh�wÑÔ€GØˆh�wÑÔ€GÝ% gÑ.Ô.Ñ€IˆyÝ˜gÑ&Ô&�L€IˆqÝ˜i¨Ñ3Ô3€IØÐ-Ñ-€JÝˆy˜9Ñ$Ñ%Ô%€DØ�*ÒÐr!   çš™™™™™É?c           	      ó&  ‡— t          j        d¦  «        Ši }|                      ¦   «         D �]C\  }}t          j        ||k    ¦  «        \  }}t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        f}	t          j        ˆfd„|D ¦   «         ¦  «        }
t          j        |
d d …df         ¦  «        t          j        |
d d …df         ¦  «        t          j        |
d d …df         ¦  «        t          j        |
d d …df         ¦  «        f}
t          j        ˆfd„|D ¦   «         ¦  «        }||z  }|	d         |
d         |z
  k     }|	d         |
d         |z   k    }|r|sd||<   |D ]}d‰|         _	        Œ�Œq|s|rd	||<   |D ]}d	‰|         _	        Œ�ŒŽt          |¦  «        dk    r¢|d         }t          ‰|         |¦  «        }|�‚t          ||||¦  «        rp||v r||         ‰|         _	        t          j        ||k    ||¦  «        }| |                              |¦  «         | |                              |¦  «        }| |         |= �ŒEd
„ |                      ¦   «         D ¦   «         } | |fS )NÚnotesc                 ó*   •— g | ]}‰|         j         ‘ŒS r/   r$   ©Ú.0rY   r¨   s     €r   ú
<listcomp>z(parse_stem_direction.<locals>.<listcomp>Ï   ó   ø€ Ð9Ð9Ð9¨S˜˜sœœÐ9Ð9Ð9r!   r   r7   r#   r4   c                 ó^   •— g | ])}‰|         j         d          ‰|         j         d         z
  ‘Œ*S ©r4   r7   r$   rª   s     €r   r¬   z(parse_stem_direction.<locals>.<listcomp>Ñ   s4   ø€ ÐLÐLÐLÀ�e˜C”j”o aÔ(¨¨s¬¬¸Ô);Ñ;ÐLÐLÐLr!   TFc                 ó@   — i | ]\  }}t          |¦  «        d k    ¯||“ŒS )r   )r'   )r«   ÚgprW   s      r   ú
<dictcomp>z(parse_stem_direction.<locals>.<dictcomp>ó   s)   € ÐGÐGÐG™8˜2˜t½¸T¹¼ÀQº¸ˆb�$¸¸¸r!   )r   r9   Úitemsr:   rF   rG   rH   ÚarrayÚmeanr   r'   r•   r¥   rM   Úindex)rX   r   Útolerance_ratiorž   Útemp_resultr±   rW   ÚgyÚgxÚgboxÚnboxÚnhÚ	toleranceÚ	gp_higherÚgp_lowerrY   Ú	new_groupÚold_gp_nidxr¨   s                     @r   Úparse_stem_directionrÃ   Ç   s¸  ø€ åÔ˜WÑ%Ô%€Eà€KØ—L’L‘N”Nð %,ñ %,‰ˆˆDÝ”˜) Rš-Ñ(Ô(‰ˆˆBÝ”�r‘
”
�BœF 2™JœJ­¬¨r©
¬
µB´F¸2±J´JÐ?ˆÝŒxÐ9Ð9Ð9Ð9°DÐ9Ñ9Ô9Ñ:Ô:ˆÝ”�t˜A˜A˜A˜q˜D”zÑ"Ô"¥B¤F¨4°°°°1°¬:Ñ$6Ô$6½¼¸tÀAÀAÀAÀqÀD¼zÑ8JÔ8JÍBÌFÐSWÐXYÐXYÐXYÐ[\ÐX\ÔS]ÑL^ÔL^Ð_ˆÝŒWÐLÐLÐLÐLÀtÐLÑLÔLÑMÔMˆØ˜Ñ(ˆ	à˜!”W˜t Aœw¨Ñ2Ò2ˆ	Ø˜”G˜d 1œg¨	Ñ1Ò1ˆàð 	˜Xð 	à"ˆK˜‰OØð *ð *�Ø%)��c”
Ô"Ð"ÙØð 	˜xð 	à#ˆK˜‰OØð +ð +�Ø%*��c”
Ô"Ð"Ùõ ˆt‰9Œ9˜Š>ˆ>Ø�q”'ˆCÝ/°°c´
¸IÑFÔFˆIØÐ%Õ+@ÀÀYÐPYÐ[kÑ+lÔ+lÐ%Ø Ð+Ð+Ø)4°YÔ)?�E˜#”JÔ&õ œH Y°¢]°I¸yÑIÔI�	Ø�yÔ!×(Ò(¨Ñ-Ô-Ð-Ø$ Rœj×.Ò.¨sÑ3Ô3�Ø˜2”J˜{Ð+ùàGÐG v§|¢|¡~¤~ÐGÑGÔG€FØ�9ÐÐr!   c                 óî  ‡— t          j        d¦  «        Š| j        rØ| j        �Ñ| j        }t          j        ˆfd„| j        D ¦   «         ¦  «        }| j        r5t          |d         t          j	        |d d …df         ¦  «        z
  ¦  «        }n4t          |d         t          j
        |d d …df         ¦  «        z
  ¦  «        }t          t          |¦  «        Ž }||k     r| j        D ]}d‰|         _        ŒdS dS )Nr¨   c                 ó\   •— g | ](}‰|         j         d          ‰|         j         d         f‘Œ)S )r7   r4   r$   rª   s     €r   r¬   zcheck_group.<locals>.<listcomp>ý   s4   ø€ Ð`Ð`Ð`È#˜e Cœjœo¨aÔ0°%¸´*´/À!Ô2DÐEÐ`Ð`Ð`r!   r7   r   r4   TF)r   r9   r   r   r   r:   r´   r   r†   rG   rH   r   r	   Úinvalid)r   ÚboxÚny_boundrh   r‹   rY   r¨   s         @r   Úcheck_grouprÉ   ÷   sü   ø€ ÝÔ˜WÑ%Ô%€Eà„~ð ˜%œ-Ð3àŒjˆÝ”8Ð`Ð`Ð`Ð`ÐQVÔQ_Ð`Ñ`Ô`ÑaÔaˆØŒ=ð 	8Ý�s˜1”v¥¤ x°°°°1°¤~Ñ 6Ô 6Ñ6Ñ7Ô7ˆDˆDå�s˜1”v¥¤ x°°°°1°¤~Ñ 6Ô 6Ñ6Ñ7Ô7ˆDÝ!¥:¨c¡?¤?Ð3ˆ	Ø�)ÒÐØ”~ð *ð *�Ø%)��c”
Ô"Ð"Ø�5Øˆ4r!   c           	      ó  ‡‡‡‡— t          j        d¦  «        Št          j        |¦  «        at          t          ¦  «        ag }t          j        |¦  «        dz
  }d}|                      ¦   «         D �]�\  }}t          ¦   «         }||_	        ||_
        t          j        ||k    ¦  «        \  }}	t          j        |	¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |¦  «        f}
t          j        ˆfd„|D ¦   «         ¦  «        }t          j        |d d …df         ¦  «        t          j        |d d …df         ¦  «        t          j        |d d …df         ¦  «        t          j        |d d …df         ¦  «        f}t          j        t          |
d         |
d         f|
d         |
d         fdd¦  «         t          j        t          |d         |d         f|d         |d         fdd¦  «         |
|_        |D ]}|‰|         _        Œ‰|d                  j        €kt          j        ˆfd	„|D ¦   «         ¦  «        }|
d         |
d         z
  }|d         |d         z
  }t+          ||z
  ¦  «        |d
z  k    rd|_        n8d|_        n0‰|d                  j        rd|_        d|_        nd|_        d|_        ˆfd„|D ¦   «         Št/          ˆfd„‰D ¦   «         ¦  «        |_        ‰|d                  j        Š‰|d                  j        Št/          ˆˆfd„|D ¦   «         ¦  «        }t/          ˆˆfd„|D ¦   «         ¦  «        }|r|sr|
d         |
d         z   dz  }|
d         |
d         z   dz  }t7          ||¦  «        \  }}|j        Š|j        Š|D ]&}|j        ‰|         _        |j        ‰|         _        Œ'‰|_        ‰|_        ||||k    <   |                     |¦  «         |dz  }�Œ�||fS )Nr¨   r7   r   c                 ó*   •— g | ]}‰|         j         ‘ŒS r/   r$   rª   s     €r   r¬   zgen_groups.<locals>.<listcomp>  r­   r!   r#   r4   ©éÿ   r   r   )r   r   rÍ   c                 ó^   •— g | ])}‰|         j         d          ‰|         j         d         z
  ‘Œ*S r¯   r$   rª   s     €r   r¬   zgen_groups.<locals>.<listcomp>'  s4   ø€ ÐPÐPÐPÀC˜% œ*œ/¨!Ô,¨U°3¬Z¬_¸QÔ-?Ñ?ÐPÐPÐPr!   rj   TFc                 ó*   •— g | ]}‰|         j         ‘ŒS r/   )rB   rª   s     €r   r¬   zgen_groups.<locals>.<listcomp>6  s    ø€ Ð4Ð4Ð4¨�5˜”:Ô#Ð4Ð4Ð4r!   c              3   ó0   •K  — | ]}|‰d          k    V — ŒdS )r   Nr/   )r«   ÚntÚn_typess     €r   ú	<genexpr>zgen_groups.<locals>.<genexpr>7  s+   øè è € Ð@Ð@°"˜r 7¨1¤:š~Ð@Ð@Ð@Ð@Ð@Ð@r!   c              3   ó:   •K  — | ]}‰|         j         ‰k    V — Œd S r   )r   )r«   rY   r¨   Ú	tar_tracks     €€r   rÓ   zgen_groups.<locals>.<genexpr><  ó/   øè è € ÐEÐE¸˜˜sœÔ)¨9Ò4ÐEÐEÐEÐEÐEÐEr!   c              3   ó:   •K  — | ]}‰|         j         ‰k    V — Œd S r   )r   )r«   rY   r¨   Ú	tar_groups     €€r   rÓ   zgen_groups.<locals>.<genexpr>=  rÖ   r!   )r   r9   r:   ÚcopyÚgrp_imgr   Ú
zeros_liker³   r   r   r   rF   rG   rH   r´   r=   Ú	rectangler   Únote_group_idr   rµ   r†   r   Úallr   r   r   r   rM   )rX   r   ÚngsÚnew_mapÚidxr|   rW   Úngr¹   rº   r»   r¼   rY   r½   Úg_heightÚn_heightÚ
same_trackÚ
same_groupÚy_mass_centerÚx_mass_centerÚstrV   rÒ   r¨   rØ   rÕ   s                         @@@@r   Ú
gen_groupsrê   
  s  øøøø€ åÔ˜WÑ%Ô%€Eõ Œg�iÑ Ô €GÝ�Ñ!Ô!€Gà
€CÝŒm˜IÑ&Ô&¨Ñ*€GØ
€CØ—\’\‘^”^ð 8ñ 8‰	ˆˆTÝ‰[Œ[ˆØˆŒØˆŒÝ”˜) Sš.Ñ)Ô)‰ˆˆBÝ”�r‘
”
�BœF 2™JœJ­¬¨r©
¬
µB´F¸2±J´JÐ?ˆÝŒxÐ9Ð9Ð9Ð9°DÐ9Ñ9Ô9Ñ:Ô:ˆÝ”�t˜A˜A˜A˜q˜D”zÑ"Ô"¥B¤F¨4°°°°1°¬:Ñ$6Ô$6½¼¸tÀAÀAÀAÀqÀD¼zÑ8JÔ8JÍBÌFÐSWÐXYÐXYÐXYÐ[\ÐX\ÔS]ÑL^ÔL^Ð_ˆåŒ•g  Q¤¨¨a¬Ð1°D¸´G¸TÀ!¼WÐ3EÀ{ÐTUÑVÔVÐVÝŒ•g  Q¤¨¨a¬Ð1°D¸´G¸TÀ!¼WÐ3EÀ{ÐTUÑVÔVÐVàˆŒØð 	+ð 	+ˆCØ'*ˆE�#ŒJÔ$Ð$à��a”Œ>Ô!Ð)å”ÐPÐPÐPÐPÈ4ÐPÑPÔPÑQÔQˆBØ˜A”w  a¤Ñ(ˆHØ˜A”w  a¤Ñ(ˆHÝ�8˜HÑ$Ñ%Ô%¨¨a©Ò/Ð/à"�”�à#�”�Ø�4˜”7Œ^Ô#ð 	ØˆBŒJØˆBŒKˆKàˆBŒJØˆBŒKà4Ð4Ð4Ð4¨tÐ4Ñ4Ô4ˆÝÐ@Ð@Ð@Ð@¸Ð@Ñ@Ô@Ñ@Ô@ˆÔð ˜$˜qœ'”NÔ(ˆ	Ø˜$˜qœ'”NÔ(ˆ	ÝÐEÐEÐEÐEÐEÀÐEÑEÔEÑEÔEˆ
ÝÐEÐEÐEÐEÐEÀÐEÑEÔEÑEÔEˆ
Øð 	,˜zð 	,Ø! !œW t¨A¤wÑ.°!Ñ3ˆMØ! !œW t¨A¤wÑ.°!Ñ3ˆMÝ'¨°}ÑEÔE‰EˆB�ØœˆIØœˆIØð ,ð ,�Ø#%¤8��c”
Ô Ø#%¤8��c”
Ô Ð àˆŒØˆŒà"%ˆ�	˜3’ÑØ�
Š
�2‰ŒˆØˆq‰ˆ‰Ø�ˆ<Ðr!   c                 ój   — t          j        d¦  «        }| D ]}t          |j        ¦  «        dk    rŒŒd S )Nr¨   r#   )r   r9   r'   r   )rX   r¨   Úgrps      r   Úpost_check_groupsrí   Q  sJ   € åÔ˜WÑ%Ô%€Eàð ð ˆÝˆsŒ|ÑÔ Ò!Ð!ð ð "ðð r!   c                  óH  — t                                d¦  «         t          ¦   «         \  } }t                                d¦  «         t          | |¦  «        \  } }t                                d¦  «         t	          | |¦  «        \  } }t                                d¦  «         | |fS )NúGrouping noteheadsúAnalyzing stem directionúInstanitiating note groupszPost check notes in groups)ÚloggerÚdebugri   rÃ   rê   )rX   r   s     r   Úextractrô   \  s‘   € å
‡L‚LÐ%Ñ&Ô&Ð&Ý'Ñ)Ô)Ñ€FˆIå
‡L‚LÐ+Ñ,Ô,Ð,Ý,¨V°YÑ?Ô?Ñ€FˆIå
‡L‚LÐ-Ñ.Ô.Ð.Ý" 6¨9Ñ5Ô5Ñ€FˆIå
‡L‚LÐ-Ñ.Ô.Ð.à�9ÐÐr!   c            
      ó�  — t          j        d¦  «        } t          | ¦  «        }t          |d¦  «        }t	          |¦  «        }t          j        | j        dz   t
          j        ¬¦  «        dz  }t          j	        | dk    ¦  «        }d||d         |d         f<   |D ]ª}| |d         |d         …|d         |d	         …f         }d||dk    <   t          |d
¦  «        }t          j        ||d         |d         f|d	         |d         fdd	¦  «         t          j        |||d	         d	z   |d         ft          j        ddd¦  «         Œ«|S )NÚcelfs_keys_predé   ©r4   r5   rÍ   r   r7   r4   r#   Úsfn©r   rÍ   r   çš™™™™™é?rÌ   )r   r9   r   r
   r   r:   r;   rƒ   r<   rF   r   r=   rÜ   ÚputTextÚFONT_HERSHEY_SIMPLEX)ÚpredÚbboxesÚimgrá   rÇ   ÚregionÚpps          r   Úpredict_symbolsr  l  sE  € ÝÔÐ-Ñ.Ô.€Då�d‰^Œ^€FÝ˜v rÑ*Ô*€FÝ" 6Ñ*Ô*€Få
Œ'�$”*˜T‘/­¬Ð
2Ñ
2Ô
2°SÑ
8€CÝ
Œ(�4˜’6Ñ
Ô
€CØ€CˆˆAŒ��A”ˆÑØð `ð `ˆØ�c˜!”f˜S œV�m S¨¤V¨C°¬F ]Ð2Ô3ˆØˆˆv�aŠxÑÝ�V˜UÑ#Ô#ˆÝŒ�c˜C œF C¨¤FÐ+¨c°!¬f°c¸!´fÐ-=¸{ÈAÑNÔNÐNÝŒ�C˜˜c !œf Q™h¨¨A¬Ð/µÔ1IÈ3ÐP[Ð]^Ñ_Ô_Ð_Ð_Ø€Jr!   c           
      ó  — |                      ¦   «         }t          j        |¦  «        }| D ]Z}|j        \  }}}}t	          j        |||f||fdd¦  «         |j        r)t	          j        |d|dz   |ft          j        ddd¦  «         Œ[|S )Nrú   r#   ÚDOTrû   rÌ   )	rÙ   r:   r´   r   r=   rÜ   Úhas_dotrü   rý   )r¨   Úori_imgr   ÚnoteÚx1Úy1Úx2Úy2s           r   Ú
draw_notesr    s•   € Ø
�,Š,‰.Œ.€CÝ
Œ(�3‰-Œ-€CØð _ð _ˆØœ‰ˆˆB��BÝŒ�c˜B ˜8 b¨" X¨{¸AÑ>Ô>Ð>ØŒ<ð 	_ÝŒK˜˜U R¨¡T¨2 JµÔ0HÈ#È{Ð\]Ñ^Ô^Ð^øØ€Jr!   Ú__main__r¨   Úsymbols_predr1   r2   r3   Úoriginal_imagerø   rÍ   r7   rï   rð   rñ   c                 ó   — g | ]	}|j         ‘Œ
S r/   r$   )r«   Úgs     r   r¬   r¬   ž  s   € Ð%Ð%Ð%˜ˆaŒfÐ%Ð%Ð%r!   )rj   )r–   )r¦   r–   )8r=   Únumpyr:   Úscipy.ndimager@   Úoemerr   Úoemer.inferencer   Úoemer.utilsr   r   r   r   Ú
oemer.bboxr	   r
   r   r   r   r   r+   rò   r   ri   r•   r¥   rÃ   rÉ   rê   rí   rô   r  r  r9   r¨   ÚsymbolsrO   rP   Ústems_restsr  r;   rƒ   r   rF   rá   r‹   ÚinfoÚa_groupsÚa_mapÚb_groupsÚb_maprX   Úc_maprÿ   Úoutr/   r!   r   ú<module>r"     s  ðØ 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆ�HÑ	Ô	€ðð ð ð ð ñ ô ð ð8Eð Eð EðP9ð 9ð 9ð 9ðxð ð ð ð$-ð -ð -ð -ð`ð ð ð&Dð Dð DðNð ð ðð ð ð ð ð ð&ð ð ð ˆzÒÑØˆFÔ˜WÑ%Ô%€EØˆfÔ˜~Ñ.Ô.€GØ"�&Ô" 9Ñ-Ô-€KØˆvÔ Ñ0Ô0€HØ"�&Ô"Ð#5Ñ6Ô6€KØˆfÔÐ/Ñ0Ô0€Gà
ˆ"Œ'�(”. Ñ%Ñ
&Ô
&¨Ñ
,€CØ
ˆ"Œ(�;˜q’=Ñ
!Ô
!€CØ€CˆˆAŒ��A”ˆÑà$Ð$Ñ&Ô&€IØ
‡K‚KÐ$Ñ%Ô%Ð%Ø%�oÑ'Ô'�O€HˆeØ
‡K‚KÐ*Ñ+Ô+Ð+Ø*Ð*¨8°UÑ;Ô;�O€HˆeØ
‡K‚KÐ,Ñ-Ô-Ð-Ø�J˜x¨Ñ/Ô/�M€FˆEà%Ð%˜fÐ%Ñ%Ô%€FØ
Ð
˜f hÑ
/Ô
/€C€C€Cð+ Ðr!   