
    mi                         d Z ddlmZ ddlZddlmZ 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mZ ddlmZ dd	lmZ  ej*                  e      Zd
 ZddZddZy)zTest time evaluation, either using the original SDR from [Vincent et al. 2006]
or the newest SDR definition from the MDX 2021 competition (this one will
be reported as `nsdr` for `new sdr`).
    )futuresN)LogProgress   )apply_model)convert_audio
save_audio)distrib)DummyPoolExecutorc                 V   | j                         dk(  sJ |j                         dk(  sJ d}t        j                  t        j                  |       d      }t        j                  t        j                  | |z
        d      }||z  }||z  }dt        j                  ||z        z  }|S )z
    Compute the SDR according to the MDX challenge definition.
    Adapted from AIcrowd/music-demixing-challenge-starter-kit (MIT license)
       gHz>)      dim
   )r   thsumsquarelog10)
references	estimatesdeltanumdenscoress         I/var/www/stems/demucs_env/lib/python3.12/site-packages/demucs/evaluate.pynew_sdrr      s    
 >>q   ==?aE
&&:&F
3C
&&:	12
?C5LC5LC"((39%%FM    c           	         | j                  dd      j                         } |j                  dd      j                         }t        | j                         d    |j                         d          d   }|sd |fS | j	                         } |j	                         }t
        j                  j                  | |d||dd      d d }||fS )Nr   r   r   F)compute_permutationwindowhopframewise_filtersbsseval_sources_version)	transposedoubler   cpunumpymusevalmetricsbss_eval)r   r   winr"   compute_sdr
new_scoresr   s          r   
eval_trackr0   .   s    %%a+224J##Aq)002I)$/1FGJJZ%%'
OO%	))	 %#$) * + ,/B0 z!!r   c                    | j                   }| j                  dz  }|j                  dd       | j                  dz  }|j                  dd       |j                  j                  .t        j                  |j                  j
                  dgd      }n-t        j                  |j                  j                  dgd      }|j                  j                  }d	}| j                  }t        d
|j                  z        }	t        d
|j                  z        }
t        t        j                  t        |      t        j                         }t#        t$        ||j&                  j(                  d      }g }|j                  j*                  rt,        j.                  nt0        } ||j                  j*                        5 }|D ]  }|j2                  |   }t5        j6                  |j8                        j;                         j=                         }|j?                         dk(  r|d   }|jA                  | jB                        }|jE                  d      }||jE                         z
  |jG                         z  }tI        |||j                  |jJ                        }tM        ||d   |j                  jN                  |j                  jP                  |j                  jR                        d   }||jG                         z  |jE                         z   }|jA                  |      }t5        jT                  |jV                  D cg c]<  }t5        j6                  |jX                  |   j8                        j;                         > c}      }|j?                         dk(  r	|dddf   }|jA                  |      }tI        |||j                  |jJ                        }|j                  jZ                  rx| j                  dz  |j\                  z  }|j                  dd       t_        |jV                  |      D ]0  \  }}ta        |jc                         ||dz   z  |j                         2 |je                  |j\                  |jg                  th        |||	|
|      f        t#        t$        ||j&                  j(                  d      }i }|D ]  \  }}|jk                         }|\  }}i ||<   tm        |jV                        D ]  \  }}dt=        ||         gi||   |<    |W|\  }}} }!tm        |jV                        D ]g  \  }}||   jo                         | |   jo                         ||   jo                         |!|   jo                         d}"||   |   jq                  |"       i  i }#t        t        j                         D ]'  }$|#jq                  t        jr                  ||$             ) i }%tu        tw        |#jy                                     |jV                  d      }&|&D ]  }'d}(d})|jV                  D ]  }*|#j{                         D cg c]   }t}        j~                  |#|   |*   |'         " }+}t}        jD                  |+      },t}        j                  |+      }-|,|%|'j                         dz   |*z   <   |-|%|'j                         dz   dz   |*z   <   |(|,t        |jV                        z  z  }(|)|-t        |jV                        z  z  }) |(|%|'j                         <   |)|%|'j                         dz   <    |%cddd       S c c}w c c}w # 1 sw Y   yxY w)z
    Evaluate model using museval.
    compute_sdr=False means using only the MDX definition of the SDR, which
    is much faster to evaluate.
    resultsT)exist_okparentszresults/testNtest)subsetsis_wavFr(   g      ?Eval)updatesnamer   r   r   )shiftssplitoverlapr   wavz.mp3)r-   r"   r.   z
Eval (BSS)nsdr)SDRSIRISRSAR__med)Bargsfoldermkdirr5   nonhqmusdbDBdsetmusdb_sampleratemodelint
samplerateranger	   ranklen
world_sizer   loggermisc
num_printsworkersr   ProcessPoolExecutorr
   tracksr   
from_numpyaudiotfloatr   todevicemeanstdr   audio_channelsr   r;   r<   r=   stacksourcestargetssaver:   zipr   r(   appendsubmitr0   result	enumeratetolistupdatesharenextitervalueskeysnp	nanmedianmedianlower).solverr.   rF   
output_dirjson_foldertest_setsrc_rateeval_devicerN   r-   r"   indexespendingspoolindextrackmixrefr   r:   r   rG   estimaterZ   
track_namependingr   nsdrsidxtargetsdrisrsirsarrr   
all_trackssrcrk   metric_namesmetric_nameavgavg_of_medianssourcemediansra   rv   s.                                                 r   evaluater   C   s}    ;;D*JdD1--.0KtT2 yy88DIIOOfXdK88DIIOOfXeLyy))HKLLE
b5###
$C
b5###
$CGLL#h-1C1CDG&'4993G3G%'GH*.))*;*;7&&ARD	dii	  JD 	`EOOE*E--,..0668CwwyA~$i&&'C((q(/C#swwy0CXu/?/?AUAUVC#E3t9+/99+;+;499??,0II,=,=??@BI "CGGI-
:I![1IJO--X$u}}T2889;;=XZJ~~1$'40
#{3J&z8','7'79M9MOJyy~~.;dD9&)%--&C [ND(x||~v/GIYIYZ[ OOUZZJ	sQ\ *5 *^ _ `;	`@ vx9M9M$02#+ 	>Jnn&G#MFE!#F:(7 KV.4uU3Z7H6I-Jz"6*K!'-$c3#,U]]#; >KC"3x0"3x0"3x0"3x0	F :&v.55f=>	>" 
++, 	:CgmmFC89	: D!2!2!456u}}Q7GH' 	BKCN-- 	> ",!24 LLE!26!:;!GH4 4 www'7+=A{((*S069:FL{((*V3c9FBCtc%--000&3u}}+="==	> +.F;$$&'3AF;$$&/0	B UJ J$ YZ4J Js5   9F ]9A\::F]D,]%\?
*C]:
]])T)F)__doc__
concurrentr   loggingdora.logr   r)   rt   rJ   r*   torchr   applyr   r\   r   r    r	   utilsr
   	getLogger__name__rU   r   r0   r    r   r   <module>r      sQ   
          ,  $ 
		8	$ "*kr   