o
    %NŒj¥  ã                   @  sÜ   d dl mZ d dlZd dlm  mZ d dlZd dl	Z
d dlmZmZ d dlmZ g d¢Zdddddd	œd
d„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )&é    )ÚannotationsN)Úadapt_preset_for_audioÚanalyze_source)ÚGENRE_PRESETS)Z	mono_bassÚdereverbÚhf_restorationÚ
dynamic_eqÚdeesserÚ	multibandÚvintageÚharmonic_enhancementÚmodernÚ	ai_dehazeZtransient_shaperÚstereo_imagingZauto_sidechainZfinal_limitingiD¬  g      @F)ÚsrÚsecondsÚdullÚsibilantÚ	transientc                 C  sò  t j d¡}t| | ƒ}t j|t jd|  }dt  dt j d | ¡ dt  dt j d | ¡  }dt  dt j d	 | d ¡ d
t  dt j d | ¡  }	|| dd|¡7 }|	| dd|¡7 }	|r†|dt  dt j d | ¡ 7 }|	dt  dt j d | d ¡ 7 }	|r»t	d|| d ƒD ]*}
t
d||
 ƒ}|rºt  dd|¡}||
|
| …  |7  < |	|
|
| …  |7  < qt  ||	f¡}|rßddlm} |jdd| d  ddd}|j||dd}t  t  |¡¡}|dkrñ|d| 9 }| t j¡| fS )NiØ'5)Údtypeg¸…ëQ¸¾?é   én   gš™™™™™©?i„  gq=
×£p½?éo   g
×£p=
§?i˜  r   gú~j¼t“x?i8  g¸…ëQ¸ž?é    gš™™™™™é?g        )Úsignalé   iX  ÚlowÚsos)ZbtypeÚoutput)ZaxisgÍÌÌÌÌÌì?)ÚnpÚrandomZdefault_rngÚintÚarangeZfloat64ÚsinÚpiÚnormalÚrangeÚminÚlinspaceÚcolumn_stackZscipyr   ZbutterZsosfiltfiltÚmaxÚabsÚastypeZfloat32)r   r   r   r   r   ÚrngÚnÚtÚleftÚrightÚstartÚwidthZpulseÚaudior   r   Zpeak© r5   ú8/home/user/Projects/AutoRemaster/tests/test_preset_v2.pyÚ_stereo_signal   s6   8< $€r7   c               
   C  sP  t tƒ} d}| |k}|sQt d|fd| |f¡dt ¡ v s!t t ¡r&t t ¡nddt ¡ v s2t t¡r7t t¡ndt | ¡t |¡dœ }dd|i }tt 	|¡ƒ‚d  }  }}d	}|tv} | st d
| fd|tf¡t |¡dt ¡ v sxt t¡r}t t¡nddœ }dd|i }tt 	|¡ƒ‚d  }} t 
¡ D ]\}}	|	d }d}
||
k} | sÐt d| fd||
f¡t |¡t |
¡dœ }t |¡d d|i }tt 	|¡ƒ‚d  } } }
|	d }|sñt |¡d dt |¡i }tt 	|¡ƒ‚d }|	d }|tk} | s5t d| fd|tf¡t |¡dt ¡ v st t¡rt t¡nddœ }t |¡d d|i }tt 	|¡ƒ‚d  }} |	d }t|ƒ}
ttƒ}|
|k}|s±t d|fd|
|f¡dt ¡ v sct t¡rht t¡ndt |¡t |
¡dt ¡ v s~t t¡rƒt t¡nddt ¡ v s‘t t¡r–t t¡ndt |¡dœ }t |¡d  d!|i }tt 	|¡ƒ‚d  } }
 }}|	d" d# \}}|	d$ }
||
k}|
|k} |rÓ| st d%|| fd&||
|f¡d't ¡ v sìt |¡rñt |¡nd't |
¡d(t ¡ v st |¡rt |¡nd(d)œ }t |¡d* d+|i }tt 	|¡ƒ‚d  } } }
q—d S ),Né2   ©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenr   ©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8Z	_Families)únot in)z%(py1)s not in %(py3)s©r>   r?   úassert %(py5)sÚpy5Úpreset_versionr   ©z%(py1)s == %(py4)s©r>   Úpy4ú
>assert %(py6)sr@   Úfamilyz
>assert %(py1)sr>   Zmodule_order©z%(py1)s == %(py3)sÚEXPECTED_MODULE_ORDERz
>assert %(py5)sÚactive_modules)zN%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py9)s
{%(py9)s = %(py6)s(%(py7)s)
}Úset)r=   Úpy2rJ   r@   Úpy7Úpy9z
>assert %(py11)sZpy11ÚintentZ
lufs_rangeÚtarget_lufs©ú<=rW   )z%(py0)s <= %(py4)sz%(py4)s <= %(py5)sÚloÚhi)r=   rJ   rF   z
>assert %(py7)srR   )r;   r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚitemsÚ_format_assertmsgrN   rP   )Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_format4Ú@py_format6ÚnameÚpresetÚ@py_assert3Ú@py_format5Z@py_format2Ú@py_assert1Ú@py_assert8Ú@py_format10Z@py_format12rX   rY   Ú@py_format8r5   r5   r6   Ú2test_all_visible_builtins_are_resolved_v2_profiles0   s   ®xt:Œþ Êúrt   c                  C  s"  ddddœ} |   ¡ D ]ƒ\}\}}}}}t| }|d }|d }	|	|k}
|
sVt d|
fd|	|f¡t |	¡d	t ¡ v s?t |¡rDt |¡nd	d
œ }dd|i }tt 	|¡ƒ‚d  }	}
|d }	d}|	|u }
|
s‰t d|
fd|	|f¡t |	¡t |¡dœ }dd|i }tt 	|¡ƒ‚d  }	 }
}|d }	|	|k}
|
sÉt d|
fd|	|f¡t |	¡dt ¡ v s²t |¡r·t |¡ndd
œ }dd|i }tt 	|¡ƒ‚d  }	}
|d }	|	|k}
|
st d|
fd|	|f¡t |	¡dt ¡ v sñt |¡röt |¡ndd
œ }dd|i }tt 	|¡ƒ‚d  }	}
|d }	|	|k}
|
sIt d|
fd|	|f¡t |	¡dt ¡ v s2t |¡r7t |¡ndd
œ }dd|i }tt 	|¡ƒ‚d  }	}
|d }	|	|k}
|
sŠt d|
fd|	|f¡t |	¡dt ¡ v sst |¡rxt |¡ndd
œ }dd|i }tt 	|¡ƒ‚d  }	}
q
d S )N)g333333$Àg»7ôø(.$ÀgSt$—ÿ€?gˆc]ÜFÈ?ç+‡ÙÎ÷Ã?)g333333#Àg;ÐØí?9#ÀgªñÒMb˜?g/n£¼Ê?gÂõ(\Â?)gš™™™™™!Àgùíðd!Àg¸…ëQ¸Ž?gýöuàœÍ?g|ò°Pkš·?©Ú	Psytranceú
Tech HouseúMelodic TechnorT   rU   r9   rM   ÚtargetrD   rE   rF   Zreference_backedT©Úis©z%(py1)s is %(py4)srI   úassert %(py6)sr@   Úreference_lufsÚlow_side_ratior   Úmid_side_ratioÚmidÚhigh_side_ratioÚhigh)
rb   r   rZ   r[   r_   r\   r]   r^   r`   ra   )Úexpectedrl   rz   r   r   r‚   r„   rm   rT   ri   rd   rj   rk   rn   ro   rg   r5   r5   r6   Ú1test_reference_backed_genres_use_measured_targets<   s   ý|j|~‚„ør†   c            	      C  s6  dd„ t D ƒ} t ¡ D ]}|d  ¡ D ]\}}| |  tt|ƒƒ7  < qqdD ]<}| | }d}||k}|s]t d|fd||f¡t |¡t |¡dœ }t 	|¡d	 d
|i }t
t |¡ƒ‚d  } }}q'| d }d}||k}|s“t d|fd||f¡t |¡t |¡dœ }dd
|i }t
t |¡ƒ‚d  } }}d S )Nc                 S  ó   i | ]}|d “qS )r   r5   )Ú.0Úmoduler5   r5   r6   Ú
<dictcomp>N   ó    zKtest_v2_uses_full_engine_as_eligible_corrective_palette.<locals>.<dictcomp>rO   )r   r	   r
   r   r   r   r   r   r   )ú>)z%(py1)s > %(py4)srI   rK   r@   r   r9   rH   r~   )rN   r   Úvaluesrb   r!   ÚboolrZ   r[   r_   rc   r`   ra   )	Zcoveragerm   r‰   Úenabledri   rn   rd   ro   rg   r5   r5   r6   Ú7test_v2_uses_full_engine_as_eligible_corrective_paletteM   s   ÿvnr   c                  C  sP  t dddd\} }td }dd„ |d D ƒ}t| |||ƒ\}}}|j}|ƒ }t|ƒ}	|	 }
|
siddt ¡ v s;t t¡r@t 	t¡ndd	t ¡ v sLt |¡rQt 	|¡nd	t 	|¡t 	|¡t 	|	¡d
œ }t
t |¡ƒ‚d  } } }	}
|d }d}||k}|s t d|fd||f¡t 	|¡t 	|¡dœ }dd|i }t
t |¡ƒ‚d  } }}d S )NT)r   r   r   rw   c                 S  r‡   )Fr5   )rˆ   Úkeyr5   r5   r6   rŠ   _   r‹   zGtest_adaptation_never_enables_user_disabled_modules.<locals>.<dictcomp>rO   zcassert not %(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.values
}()
})
}ÚanyÚadapted)r=   r>   r?   rF   rR   rG   r   r9   rH   rI   r~   r@   )r7   r   r   r   r’   r\   r]   rZ   r^   r_   r`   ra   r[   )r4   r   rm   ÚactiveÚ	effectiver“   Ú_rd   rf   Ú@py_assert6rq   rh   ri   rn   ro   rg   r5   r5   r6   Ú3test_adaptation_never_enables_user_disabled_modules\   s   ¢nr˜   c            	      C  sd  t dd\} }t td ¡}t |d ¡}t |¡}t |¡}t| |||ƒ ||k}|sit d|fd||f¡dt ¡ v sAt 	|¡rFt 
|¡nddt ¡ v sRt 	|¡rWt 
|¡ndd	œ }d
d|i }tt |¡ƒ‚d }||k}|s®t d|fd||f¡dt ¡ v s†t 	|¡r‹t 
|¡nddt ¡ v s—t 	|¡rœt 
|¡ndd	œ }d
d|i }tt |¡ƒ‚d }d S )NT©r   rx   rO   r9   )z%(py0)s == %(py2)srm   Úpreset_before)r=   rQ   zassert %(py4)srJ   r”   Úactive_before)r7   ÚcopyÚdeepcopyr   r   rZ   r[   r\   r]   r^   r_   r`   ra   )	r4   r   rm   r”   rš   r›   rp   Ú@py_format3ro   r5   r5   r6   Ú+test_adaptation_does_not_mutate_input_dictse   s   

ŠŽrŸ   c                  C  sâ  t dd\} }td }t| |||d ƒ\}}}|d }|d d }||k}|sJt d|fd	||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}|d }d}||u }|st d|fd||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}|d }d}||k}|s´t d|fd||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}|d }d}||u }|sét d|fd||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}d S )NTr™   rx   rO   Ú
air_rel_dbÚadaptiveZair_severe_db)rW   )z%(py1)s <= %(py4)srI   r~   r@   r   r{   r}   Zhf_restoration_modeZdsp_fastr9   rH   r   F©r7   r   r   rZ   r[   r_   r`   ra   )r4   r   rm   r•   r”   Úfeaturesri   rn   rd   ro   rg   r5   r5   r6   Ú.test_dull_source_selects_single_hf_repair_pathp   s   
ÿrjjnr¤   c                  C  sœ  t dd\} }td }t| |||d ƒ\}}}|d }|d d }||k}|sJt d|fd	||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}|d }d}||u }|st d|fd||f¡t |¡t |¡d
œ }	dd|	i }
tt |
¡ƒ‚d  } }}d}|d }||k}d}||k}|r™|sÂt d||fd|||f¡t |¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } } } }}d S )NT)r   ry   rO   Úsibilance_rel_dbr¡   Zsibilance_trigger_db©ú>=)z%(py1)s >= %(py4)srI   r~   r@   r	   r{   r}   g       @Zdeesser_ratiog      @rV   )z%(py1)s <= %(py5)sz%(py5)s <= %(py7)s)r>   rF   rR   zassert %(py9)srS   r¢   )r4   r   rm   r•   r”   r£   ri   rn   rd   ro   rg   rf   r—   rs   rr   r5   r5   r6   Ú9test_strong_4_to_8k_content_keeps_gentle_deesser_eligible|   s   
ÿrj’r¨   c                  C  s®   t ƒ \} }td }t|d ƒ}d|d< t| |||dhd\}}}|d }d}||u }|sOt d|fd||f¡t |¡t |¡dœ }	d	d
|	i }
tt |
¡ƒ‚d  } }}d S )Nrx   rO   Tr	   )Zlocked_modulesr{   r}   rI   r~   r@   )	r7   r   Údictr   rZ   r[   r_   r`   ra   )r4   r   rm   r”   r–   r“   ri   rn   rd   ro   rg   r5   r5   r6   Ú0test_locked_user_toggle_prevents_adaptive_bypass‡   s   
ÿnrª   c                  C  s>  t dd\} }t| |ƒ}t|ƒ}h d£}||k}|s_t d|fd||f¡dt ¡ v s/t t¡r4t t¡nddt ¡ v s@t |¡rEt |¡ndt |¡t |¡dœ }d	d
|i }t	t 
|¡ƒ‚d  } }}dd„ | ¡ D ƒ}t|ƒ}	|	s™ddt ¡ v s€t t¡r…t t¡ndt |¡t |	¡dœ }
t	t 
|
¡ƒ‚d  }}	d S )NT)r   >   Zhigh_mid_rel_dbr¥   r€   rƒ   r    r   Zcrest_dbZlow_mid_rel_dbr¦   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)srP   r£   r<   rA   rB   c                 s  s    | ]}t  |¡V  qd S )N)r   Úisfinite)rˆ   Úvaluer5   r5   r6   Ú	<genexpr>™   s   € zFtest_reference_features_are_finite_for_normal_audio.<locals>.<genexpr>z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall)r=   rQ   rJ   )r7   r   rP   rZ   r[   r\   r]   r^   r_   r`   ra   r   r®   )r4   r   r£   rd   re   rf   rg   rh   rp   rn   ro   r5   r5   r6   Ú3test_reference_features_are_finite_for_normal_audio’   sP   
ýýýýýýýýýýýýýýýýýýtr¯   c                  C  sn  t d d d } d}| |u }|s3t d|fd| |f¡t | ¡t |¡dœ }dd	|i }tt |¡ƒ‚d  }  }}t d
 d d } d}| |u }|slt d|fd| |f¡t | ¡t |¡dœ }dd	|i }tt |¡ƒ‚d  }  }}dD ]@}t | d d } d}| |u }|s®t d|fd| |f¡t | ¡t |¡dœ }t |¡d d	|i }tt |¡ƒ‚d  }  }}qtd S )Nry   rO   r   Fr{   r}   rI   r~   r@   z
Liquid DnB)zPeak Time TechnozIndustrial TechnoZ	NeurofunkZ	HardstyleTrK   )r   rZ   r[   r_   r`   ra   rc   )ri   rn   rd   ro   rg   rl   r5   r5   r6   Ú5test_heavy_modern_chain_is_not_a_whole_family_defaultœ   s
   rr~ÿr°   c                  C  sX  dD ]>} t |  d }d}| }||k}|s8t d|fd||f¡t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } } }}qt d	 }|j}d
}g }|||ƒ}	t|	ƒ}
d}|
|k}|s¥t d|fd|
|f¡dt 	¡ v srt 
t¡rwt t¡ndt |¡t |¡t |¡t |¡t |	¡t |
¡t |¡dœ }dd|i }tt |¡ƒ‚d  } } } } }	 }
 }}t d }|j}d
}g }|||ƒ}	t|	ƒ}
d}|
|k}|st d|fd|
|f¡dt 	¡ v sçt 
t¡rìt t¡ndt |¡t |¡t |¡t |¡t |	¡t |
¡t |¡dœ }dd|i }tt |¡ƒ‚d  } } } } }	 }
 }}d S )Nrv   Zoutput_ceiling_dbg      ð?r9   )z%(py1)s == -%(py4)srI   zassert %(py7)srR   rw   Zreference_eq_bandsé   )zu%(py12)s
{%(py12)s = %(py0)s(%(py10)s
{%(py10)s = %(py4)s
{%(py4)s = %(py2)s.get
}(%(py6)s, %(py8)s)
})
} == %(py15)sr;   )r=   rQ   rJ   r@   rB   Zpy10Zpy12Zpy15zassert %(py17)sZpy17ry   r   )r   rZ   r[   r_   r`   ra   Úgetr;   r\   r]   r^   )rl   ri   rn   re   rd   rk   rs   rp   Z@py_assert7Z@py_assert9Z@py_assert11Z@py_assert14Z@py_assert13Z@py_format16Z@py_format18r5   r5   r6   ÚDtest_reference_backed_presets_carry_true_peak_ceiling_and_eq_anchors£   s   zèîr³   c                  C  s0  t ƒ \} }t td ¡}d|d d< d|d d< t| |||d ƒ\}}}|d }d}||u }|sSt d	|fd
||f¡t |¡t |¡dœ }	dd|	i }
tt 	|
¡ƒ‚d  } }}|d }|d d dddœ}||k}|st d|fd||f¡t |¡t |¡dœ }	dd|	i }
tt 	|
¡ƒ‚d  } }}d S )Nrx   gffffffÖ?rT   r   rƒ   rO   r   Tr{   r}   rI   r~   r@   Zstereo_target_ratiosr€   )r   r‚   r„   r9   rH   )
r7   rœ   r   r   r   rZ   r[   r_   r`   ra   )r4   r   rm   r•   r”   r–   ri   rn   rd   ro   rg   r5   r5   r6   ÚEtest_reference_backed_width_can_reach_measured_narrow_or_wide_targetsª   s:   

ÿj
ýüüüüüüüür´   c                  C  sè   t d } | d d }d}||k}|s5t d|fd||f¡t |¡t |¡dœ }dd	|i }tt |¡ƒ‚d  } }}| d
 d }d}||k}|slt d|fd||f¡t |¡t |¡dœ }dd	|i }tt |¡ƒ‚d  } }}d S )Nrw   rT   rƒ   ru   r9   rH   rI   r~   r@   Zstereo_match_ratiosr„   g‰A`åÐ"»?)r   rZ   r[   r_   r`   ra   )rm   ri   rn   rd   ro   rg   r5   r5   r6   ÚNtest_psytrance_keeps_measured_width_intent_separate_from_prelimit_compensation¼   s   nrrµ   )Ú
__future__r   Úbuiltinsr\   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterZ   rœ   Únumpyr   Zengine.preset_adapterr   r   Zengine.presetsr   rN   r7   rt   r†   r   r˜   rŸ   r¤   r¨   rª   r¯   r°   r³   r´   rµ   r5   r5   r5   r6   Ú<module>   s(    "	
