Add scipy.linalg.svd for faster SVD calculations
This MR arises from here.
Added
try:
U, s, Vh = scipy_svd(template_bank.T)
except numpy.linalg.LinAlgError as e:
U, s, Vh = spawaveform.svd(template_bank.T,mod=True,inplace=True)
print ("Falling back on spawaveform", e, file=sys.stderr)
to cbc_template_fir.py
instead of U, s, Vh = spawaveform.svd(template_bank.T,mod=True,inplace=True)
.
This enables SVD calculation to be done with scipy
rather than using spawaveform
, making the calculation faster.
scipy
method of calcuating SVDs sometimes fails, so when it does fail, the SVD calculation falls back to the spawaveform
version of SVD calculation and leaves a message indicating that the SVD calculation used the spawaveform
method.
When a single SVD job is run on headnode, it takes about 15 min for jobs run with scipy
, while it takes overnight for jobs run with spawaveform
.
When SVD jobs are run as a dag, since about half of the jobs fall back on spawaveform
, it takes about 12 hours to finish when running with scipy
and it takes about 65 hours to finish when running with spawaveform
.
Some rows in orthogonal_template_bank
(=here) and mix_matrix
(=here) have different +/-
signs when comparing the output of the version run with scipy
and spawaveform
.
The row numbers where the +/-
signs differ are the same for orthogonal_template_bank
and mix_matrix
.
It has been confirmed that the reconstructed matrix is the same when running SVD banks with scipy
and spawaveform
.