From 118a948fca5a679fbd2cab509c8e46148a08337b Mon Sep 17 00:00:00 2001 From: Duncan Macleod Date: Wed, 27 Oct 2021 11:40:23 +0100 Subject: [PATCH 1/2] remove files that should not be under version control --- Code/.ipynb_checkpoints/setup-checkpoint.py | 22 - Code/PyROQ.egg-info/PKG-INFO | 14 - Code/PyROQ.egg-info/SOURCES.txt | 8 - Code/PyROQ.egg-info/dependency_links.txt | 1 - Code/PyROQ.egg-info/top_level.txt | 1 - .../.ipynb_checkpoints/__init__-checkpoint.py | 2 - Code/PyROQ/__init__.pyc | Bin 150 -> 0 bytes Code/PyROQ/pyroq.pyc | Bin 19523 -> 0 bytes Code/build/lib/PyROQ/__init__.py | 2 - Code/build/lib/PyROQ/pyroq.py | 496 ------------------ Code/dist/PyROQ-0.1.25-py3-none-any.whl | Bin 6934 -> 0 bytes Code/dist/PyROQ-0.1.25.tar.gz | Bin 5694 -> 0 bytes Tutorial/__pycache__/pyroq.cpython-36.pyc | Bin 19682 -> 0 bytes Tutorial/__pycache__/pyroq.cpython-37.pyc | Bin 18471 -> 0 bytes Tutorial/pyroq.pyc | Bin 20831 -> 0 bytes 15 files changed, 546 deletions(-) delete mode 100644 Code/.ipynb_checkpoints/setup-checkpoint.py delete mode 100644 Code/PyROQ.egg-info/PKG-INFO delete mode 100644 Code/PyROQ.egg-info/SOURCES.txt delete mode 100644 Code/PyROQ.egg-info/dependency_links.txt delete mode 100644 Code/PyROQ.egg-info/top_level.txt delete mode 100644 Code/PyROQ/.ipynb_checkpoints/__init__-checkpoint.py delete mode 100644 Code/PyROQ/__init__.pyc delete mode 100644 Code/PyROQ/pyroq.pyc delete mode 100644 Code/build/lib/PyROQ/__init__.py delete mode 100644 Code/build/lib/PyROQ/pyroq.py delete mode 100644 Code/dist/PyROQ-0.1.25-py3-none-any.whl delete mode 100644 Code/dist/PyROQ-0.1.25.tar.gz delete mode 100644 Tutorial/__pycache__/pyroq.cpython-36.pyc delete mode 100644 Tutorial/__pycache__/pyroq.cpython-37.pyc delete mode 100644 Tutorial/pyroq.pyc diff --git a/Code/.ipynb_checkpoints/setup-checkpoint.py b/Code/.ipynb_checkpoints/setup-checkpoint.py deleted file mode 100644 index 2ce06ea..0000000 --- a/Code/.ipynb_checkpoints/setup-checkpoint.py +++ /dev/null @@ -1,22 +0,0 @@ -import setuptools - -with open("README.md", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="PyROQ", - version="0.1.26", - author="Hong Qi", - author_email="hong.qi@ligo.org", - description="PyROQ is a Python-based code that can generate reduced basis and reduced order quadrature data of gravitational wave waveforms.", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/qihongcat/PyROQ", - packages=setuptools.find_packages(), - classifiers=[ - "Programming Language :: Python :: 3.6", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ], -) - diff --git a/Code/PyROQ.egg-info/PKG-INFO b/Code/PyROQ.egg-info/PKG-INFO deleted file mode 100644 index 9306f67..0000000 --- a/Code/PyROQ.egg-info/PKG-INFO +++ /dev/null @@ -1,14 +0,0 @@ -Metadata-Version: 2.1 -Name: PyROQ -Version: 0.1.25 -Summary: PyROQ is a Python-based code that can generate reduced basis and reduced order quadrature data of gravitational wave waveforms. -Home-page: https://github.com/qihongcat/PyROQ -Author: Hong Qi -Author-email: hong.qi@ligo.org -License: UNKNOWN -Description: UNKNOWN -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 3.6 -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Description-Content-Type: text/markdown diff --git a/Code/PyROQ.egg-info/SOURCES.txt b/Code/PyROQ.egg-info/SOURCES.txt deleted file mode 100644 index 39eb9e7..0000000 --- a/Code/PyROQ.egg-info/SOURCES.txt +++ /dev/null @@ -1,8 +0,0 @@ -README.md -setup.py -PyROQ/__init__.py -PyROQ/pyroq.py -PyROQ.egg-info/PKG-INFO -PyROQ.egg-info/SOURCES.txt -PyROQ.egg-info/dependency_links.txt -PyROQ.egg-info/top_level.txt \ No newline at end of file diff --git a/Code/PyROQ.egg-info/dependency_links.txt b/Code/PyROQ.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Code/PyROQ.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Code/PyROQ.egg-info/top_level.txt b/Code/PyROQ.egg-info/top_level.txt deleted file mode 100644 index b007305..0000000 --- a/Code/PyROQ.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -PyROQ diff --git a/Code/PyROQ/.ipynb_checkpoints/__init__-checkpoint.py b/Code/PyROQ/.ipynb_checkpoints/__init__-checkpoint.py deleted file mode 100644 index 3ad59d8..0000000 --- a/Code/PyROQ/.ipynb_checkpoints/__init__-checkpoint.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import pyroq - diff --git a/Code/PyROQ/__init__.pyc b/Code/PyROQ/__init__.pyc deleted file mode 100644 index 8e0f51ab980aada9ac12c738dbcfc571b664ea42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZSn%*(a$t88pC0~9a;X$K%K76B3|K*Y$9!@!Ws$PmTIz?j0s5Ujxrl*nWR5*i?) zgcV2>R2JnI`e}glmH;tB5Qxw~C5i=s{D8_J|3Llt_{_Y_lK6PNg31yOpr}o5eoARh LsvXF@VvsHXFh>^O diff --git a/Code/PyROQ/pyroq.pyc b/Code/PyROQ/pyroq.pyc deleted file mode 100644 index 2cd89198e712d79fe8de0ba1568b7629d6190422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19523 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 1] - #print(len(emp_nodes), "\nDuplicates indices:", dup) - emp_nodes = numpy.unique(emp_nodes) - ndim = len(emp_nodes) - #print(len(emp_nodes), "\n", emp_nodes) - V = numpy.transpose(known_bases[0:ndim, emp_nodes]) - inverse_V = numpy.linalg.pinv(V) - return numpy.array([ndim, inverse_V, emp_nodes]) - -def surroerror(ndim, inverse_V, emp_nodes, known_bases, test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant): - hp_test = generate_a_waveform_from_mcq(test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant) - Ci = numpy.dot(inverse_V, hp_test[emp_nodes]) - interpolantA = numpy.zeros(len(hp_test))+numpy.zeros(len(hp_test))*1j - #ndim = len(known_bases) - for j in numpy.arange(0, ndim): - tmp = numpy.multiply(Ci[j], known_bases[j]) - interpolantA += tmp - surro = (1-overlap_of_two_waveforms(hp_test, interpolantA))*deltaF - return surro - -def surros(tolerance, ndim, inverse_V, emp_nodes, known_bases, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant): # Here known_bases is known_bases_copy - test_points = generate_params_points(nts, nparams, params_low, params_high) - surros = numpy.zeros(nts) - count = 0 - for i in numpy.arange(0,nts): - test_mc = test_points[i,0] - test_q = test_points[i,1] - test_s1 = spherical_to_cartesian(test_points[i,2:5]) - test_s2 = spherical_to_cartesian(test_points[i,5:8]) - test_iota = test_points[i,8] - test_phiref = test_points[i,9] - test_ecc = 0 - test_lambda1 = 0 - test_lambda2 = 0 - if nparams == 11: test_ecc = test_points[i,10] - if nparams == 12: - test_lambda1 = test_points[i,10] - test_lambda2 = test_points[i,11] - surros[i] = surroerror(ndim, inverse_V, emp_nodes, known_bases[0:ndim], test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant) - if (surros[i] > tolerance): - count = count+1 - print(ndim, "basis elements gave", count, "bad points of surrogate error > ", tolerance) - if count == 0: val =0 - else: val = 1 - return val - -def roqs(tolerance, freq, ndimlow, ndimhigh, ndimstepsize, known_bases_copy, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant): - for num in np.arange(ndimlow, ndimhigh, ndimstepsize): - ndim, inverse_V, emp_nodes = empnodes(num, known_bases_copy) - if surros(tolerance, ndim, inverse_V, emp_nodes, known_bases_copy, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant)==0: - b_linear = numpy.dot(numpy.transpose(known_bases_copy[0:ndim]),inverse_V) - f_linear = freq[emp_nodes] - numpy.save('./B_linear.npy',numpy.transpose(b_linear)) - numpy.save('./fnodes_linear.npy',f_linear) - print("Number of linear basis elements is ", ndim, "and the linear ROQ data are saved in B_linear.npy") - break - return - -def testrep(b_linear, emp_nodes, test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant): - hp_test = generate_a_waveform_from_mcq(test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant) - hp_test_emp = hp_test[emp_nodes] - hp_rep = numpy.dot(b_linear,hp_test_emp) - diff = hp_rep - hp_test - rep_error = diff/numpy.sqrt(numpy.vdot(hp_test,hp_test)) - plt.plot(numpy.real(rep_error), label='Real part of h+') - plt.plot(numpy.imag(rep_error), label='Imaginary part of h+') - plt.xlabel('Waveform Node Number') - plt.ylabel('Fractional Representation Error') - plt.title('Rep Error with numpy.linalg.pinv()') - plt.legend(loc=0) - plt.show() - return - -def empnodes_quad(ndim_quad, known_quad_bases): - emp_nodes_quad = numpy.arange(0,ndim_quad)*100000000 - emp_nodes_quad[0] = numpy.argmax(numpy.absolute(known_quad_bases[0])) - c1_quad = known_quad_bases[1,emp_nodes_quad[0]]/known_quad_bases[0,1] - interp1_quad = numpy.multiply(c1_quad,known_quad_bases[0]) - diff1_quad = interp1_quad - known_quad_bases[1] - r1_quad = numpy.absolute(diff1_quad) - emp_nodes_quad[1] = numpy.argmax(r1_quad) - for k in numpy.arange(2,ndim_quad): - emp_tmp_quad = emp_nodes_quad[0:k] - Vtmp_quad = numpy.transpose(known_quad_bases[0:k,emp_tmp_quad]) - inverse_Vtmp_quad = numpy.linalg.pinv(Vtmp_quad) - e_to_interp_quad = known_quad_bases[k] - Ci_quad = numpy.dot(inverse_Vtmp_quad, e_to_interp_quad[emp_tmp_quad]) - interpolantA_quad = numpy.zeros(len(known_quad_bases[k]))+numpy.zeros(len(known_quad_bases[k]))*1j - for j in numpy.arange(0, k): - tmp_quad = numpy.multiply(Ci_quad[j], known_quad_bases[j]) - interpolantA_quad += tmp_quad - diff_quad = interpolantA_quad - known_quad_bases[k] - r_quad = numpy.absolute(diff_quad) - emp_nodes_quad[k] = numpy.argmax(r_quad) - emp_nodes_quad = sorted(emp_nodes_quad) - u_quad, c_quad = numpy.unique(emp_nodes_quad, return_counts=True) - dup_quad = u_quad[c_quad > 1] - #print(len(emp_nodes_quad), "\nduplicates quad indices:", dup_quad) - emp_nodes_quad = numpy.unique(emp_nodes_quad) - ndim_quad = len(emp_nodes_quad) - #print(len(emp_nodes_quad), "\n", emp_nodes_quad) - V_quad = numpy.transpose(known_quad_bases[0:ndim_quad,emp_nodes_quad]) - inverse_V_quad = numpy.linalg.pinv(V_quad) - return numpy.array([ndim_quad, inverse_V_quad, emp_nodes_quad]) - -def surroerror_quad(ndim_quad, inverse_V_quad, emp_nodes_quad, known_quad_bases, test_mc_quad, test_q_quad, test_s1_quad, test_s2_quad, test_ecc_quad, test_lambda1_quad, test_lambda2_quad, test_iota_quad, test_phiref_quad, distance, deltaF, f_min, f_max, waveFlags, approximant): - hp_test_quad = (numpy.absolute(generate_a_waveform_from_mcq(test_mc_quad, test_q_quad, test_s1_quad, test_s2_quad, test_ecc_quad, test_lambda1_quad, test_lambda2_quad, test_iota_quad, test_phiref_quad, distance, deltaF, f_min, f_max, waveFlags, approximant)))**2 - Ci_quad = numpy.dot(inverse_V_quad, hp_test_quad[emp_nodes_quad]) - interpolantA_quad = numpy.zeros(len(hp_test_quad))+numpy.zeros(len(hp_test_quad))*1j - #ndim_quad = len(known_quad_bases) - for j in numpy.arange(0, ndim_quad): - tmp_quad = numpy.multiply(Ci_quad[j], known_quad_bases[j]) - interpolantA_quad += tmp_quad - surro_quad = (1-overlap_of_two_waveforms(hp_test_quad, interpolantA_quad))*deltaF - return surro_quad - -def surros_quad(tolerance_quad, ndim_quad, inverse_V_quad, emp_nodes_quad, known_quad_bases, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant): - test_points = generate_params_points(nts, nparams, params_low, params_high) - surros = numpy.zeros(nts) - count = 0 - for i in numpy.arange(0,nts): - test_mc_quad = test_points[i,0] - test_q_quad = test_points[i,1] - test_s1_quad = spherical_to_cartesian(test_points[i,2:5]) - test_s2_quad = spherical_to_cartesian(test_points[i,5:8]) - test_iota_quad = test_points[i,8] - test_phiref_quad = test_points[i,9] - test_ecc_quad = 0 - test_lambda1_quad = 0 - test_lambda2_quad = 0 - if nparams == 11: test_ecc_quad = test_points[i,10] - if nparams == 12: - test_lambda1_quad = test_points[i,10] - test_lambda2_quad = test_points[i,11] - surros[i] = surroerror_quad(ndim_quad, inverse_V_quad, emp_nodes_quad, known_quad_bases[0:ndim_quad], test_mc_quad, test_q_quad, test_s1_quad, test_s2_quad, test_ecc_quad, test_lambda1_quad, test_lambda2_quad, test_iota_quad, test_phiref_quad, distance, deltaF, f_min, f_max, waveFlags, approximant) - if (surros[i] > tolerance_quad): - count = count+1 - print(ndim_quad, "basis elements gave", count, "bad points of surrogate error > ", tolerance_quad) - if count == 0: val =0 - else: val = 1 - return val - -def roqs_quad(tolerance_quad, freq, ndimlow_quad, ndimhigh_quad, ndimstepsize_quad, known_quad_bases_copy, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant): - for num in np.arange(ndimlow_quad, ndimhigh_quad, ndimstepsize_quad): - ndim_quad, inverse_V_quad, emp_nodes_quad = empnodes_quad(num, known_quad_bases_copy) - if surros_quad(tolerance_quad, ndim_quad, inverse_V_quad, emp_nodes_quad, known_quad_bases_copy, nts, nparams, params_low, params_high, distance, deltaF, f_min, f_max, waveFlags, approximant)==0: - b_quad = numpy.dot(numpy.transpose(known_quad_bases_copy[0:ndim_quad]), inverse_V_quad) - f_quad = freq[emp_nodes_quad] - numpy.save('./B_quadratic.npy', numpy.transpose(b_quad)) - numpy.save('./fnodes_quadratic.npy', f_quad) - print("Number of quadratic basis elements is ", ndim_quad, "and the linear ROQ data save in B_quadratic.npy") - break - return - -def testrep_quad(b_quad, emp_nodes_quad, test_mc_quad, test_q_quad, test_s1_quad, test_s2_quad, test_ecc_quad, test_lambda1_quad, test_lambda2_quad, test_iota_quad, test_phiref_quad, distance, deltaF, f_min, f_max, waveFlags, approximant): - hp_test_quad = (numpy.absolute(generate_a_waveform_from_mcq(test_mc_quad, test_q_quad, test_s1_quad, test_s2_quad, test_ecc_quad, test_lambda1_quad, test_lambda2_quad, test_iota_quad, test_phiref_quad, distance, deltaF, f_min, f_max, waveFlags, approximant)))**2 - hp_test_quad_emp = hp_test_quad[emp_nodes_quad] - hp_rep_quad = numpy.dot(b_quad,hp_test_quad_emp) - diff_quad = hp_rep_quad - hp_test_quad - rep_error_quad = diff_quad/numpy.vdot(hp_test_quad,hp_test_quad)**0.5 - plt.plot(numpy.real(rep_error_quad)) - plt.xlabel('Waveform Node Number') - plt.ylabel('Fractional Representation Error for Quadratic') - plt.title('Rep Error with numpy.linalg.pinv()') - plt.show() - return - -def surros_of_test_samples(nsamples, nparams, params_low, params_high, tolerance, b_linear, emp_nodes, distance, deltaF, f_min, f_max, waveFlags, approximant): - nts=nsamples - ndim = len(emp_nodes) - test_points = generate_params_points(nts, nparams, params_low, params_high) - surros = numpy.zeros(nts) - for i in numpy.arange(0,nts): - test_mc = test_points[i,0] - test_q = test_points[i,1] - test_s1 = spherical_to_cartesian(test_points[i,2:5]) - test_s2 = spherical_to_cartesian(test_points[i,5:8]) - test_iota = test_points[i,8] - test_phiref = test_points[i,9] - test_ecc = 0 - test_lambda1 = 0 - test_lambda2 = 0 - if nparams == 11: test_ecc = test_points[i,10] - if nparams == 12: - test_lambda1 = test_points[i,10] - test_lambda2 = test_points[i,11] - hp_test = generate_a_waveform_from_mcq(test_mc, test_q, test_s1, test_s2, test_ecc, test_lambda1, test_lambda2, test_iota, test_phiref, distance, deltaF, f_min, f_max, waveFlags, approximant) - hp_test_emp = hp_test[emp_nodes] - hp_rep = numpy.dot(b_linear,hp_test_emp) - surros[i] = (1-overlap_of_two_waveforms(hp_test, hp_rep))*deltaF - if (surros[i] > tolerance): - print("iter", i, surros[i], test_points[i]) - if i%100==0: - print("iter", i, surros[i]) - return surros \ No newline at end of file diff --git a/Code/dist/PyROQ-0.1.25-py3-none-any.whl b/Code/dist/PyROQ-0.1.25-py3-none-any.whl deleted file mode 100644 index ed1af259eabf9ff8f42a8315b5097a1d527a51dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6934 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 D*~XFK diff --git a/Code/dist/PyROQ-0.1.25.tar.gz b/Code/dist/PyROQ-0.1.25.tar.gz deleted file mode 100644 index e929db0d6043bbd16bac6a5f5c6eb6021b102df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 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 diff --git a/Tutorial/__pycache__/pyroq.cpython-36.pyc b/Tutorial/__pycache__/pyroq.cpython-36.pyc deleted file mode 100644 index 308999bd30cd6666983fe0dd8bf21fab0797c5c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19682 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 diff --git a/Tutorial/__pycache__/pyroq.cpython-37.pyc b/Tutorial/__pycache__/pyroq.cpython-37.pyc deleted file mode 100644 index 34a48a000c8ef1ddde136d52783a61aa482b7b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18471 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 U97=KLE+-G%w3BrPySd!|0qdCOH~;_u diff --git a/Tutorial/pyroq.pyc b/Tutorial/pyroq.pyc deleted file mode 100644 index 04138bdff78254d12e715a76fd1298f332aa697a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20831 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 aL)mQhsqE884I=;cYz`&6v%}fZH1$6>@V-?5 From b574f4de56a7880422e7d1c8040d7087f737afa1 Mon Sep 17 00:00:00 2001 From: Duncan Macleod Date: Wed, 27 Oct 2021 11:42:28 +0100 Subject: [PATCH 2/2] add gitignore file to prevent unnecessary files being introduced again --- Code/.gitignore | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Code/.gitignore diff --git a/Code/.gitignore b/Code/.gitignore new file mode 100644 index 0000000..4ab2ac4 --- /dev/null +++ b/Code/.gitignore @@ -0,0 +1,30 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# Testing / coverage +.pytest_cache/ +.coverage + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt