From 1ae67b0a3579cf91d8c5f52f8b5dd531e34b5749 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sun, 17 Oct 2021 16:22:55 +0200 Subject: [PATCH 1/8] Added C compilation to SCons (not all work, though) --- .gitignore | 7 +++++++ SConscript | 11 ++++++++++ SConstruct | 21 +++++++++++++++++++ contents/IFS/code/c/SConscript | 3 +++ contents/barnsley/code/c/SConscript | 3 +++ contents/computus/code/c/SConscript | 3 +++ contents/cooley_tukey/code/c/SConscript | 4 ++++ .../euclidean_algorithm/code/c/SConscript | 4 ++++ contents/flood_fill/code/c/SConscript | 3 +++ .../forward_euler_method/code/c/SConscript | 3 +++ .../gaussian_elimination/code/c/SConscript | 4 ++++ contents/graham_scan/code/c/SConscript | 4 ++++ contents/huffman_encoding/code/c/SConscript | 3 +++ contents/jarvis_march/code/c/SConscript | 3 +++ .../monte_carlo_integration/code/c/SConscript | 4 ++++ contents/quantum_systems/code/c/SConscript | 3 +++ .../split-operator_method/code/c/SConscript | 3 +++ .../stable_marriage_problem/code/c/SConscript | 3 +++ contents/thomas_algorithm/code/c/SConscript | 3 +++ contents/tree_traversal/code/c/SConscript | 3 +++ contents/verlet_integration/code/c/SConscript | 3 +++ 21 files changed, 98 insertions(+) create mode 100644 SConscript create mode 100644 SConstruct create mode 100644 contents/IFS/code/c/SConscript create mode 100644 contents/barnsley/code/c/SConscript create mode 100644 contents/computus/code/c/SConscript create mode 100644 contents/cooley_tukey/code/c/SConscript create mode 100644 contents/euclidean_algorithm/code/c/SConscript create mode 100644 contents/flood_fill/code/c/SConscript create mode 100644 contents/forward_euler_method/code/c/SConscript create mode 100644 contents/gaussian_elimination/code/c/SConscript create mode 100644 contents/graham_scan/code/c/SConscript create mode 100644 contents/huffman_encoding/code/c/SConscript create mode 100644 contents/jarvis_march/code/c/SConscript create mode 100644 contents/monte_carlo_integration/code/c/SConscript create mode 100644 contents/quantum_systems/code/c/SConscript create mode 100644 contents/split-operator_method/code/c/SConscript create mode 100644 contents/stable_marriage_problem/code/c/SConscript create mode 100644 contents/thomas_algorithm/code/c/SConscript create mode 100644 contents/tree_traversal/code/c/SConscript create mode 100644 contents/verlet_integration/code/c/SConscript diff --git a/.gitignore b/.gitignore index db26e0ad0..231da8ea1 100644 --- a/.gitignore +++ b/.gitignore @@ -517,3 +517,10 @@ vscode/ # aspell *.bak + +# SCons intermidiate files +.sconsign.dblite +*.o + +# SCons build directory +build/ diff --git a/SConscript b/SConscript new file mode 100644 index 000000000..606ba04d8 --- /dev/null +++ b/SConscript @@ -0,0 +1,11 @@ +from pathlib import Path + +Import('*') + +for p in Path('contents').iterdir(): + if (q := (p / 'code')).exists(): + for path in q.iterdir(): + if path.stem in languages: + env.SConscript(path / 'SConscript', exports='env root_dir', + must_exist=0) + diff --git a/SConstruct b/SConstruct new file mode 100644 index 000000000..77b22e141 --- /dev/null +++ b/SConstruct @@ -0,0 +1,21 @@ +""" +SCons top-level build description (SConstruct) for the Arcane Algorithm Achive + +This provides Builder objects for each of the language implementations in the AAA; however, this work cannot be considered exhaustive until every language has been covered. + +Currently, the aim is to provide a way to compile or copy the implementation files to the build directory, as well as to provide ways to run them and capture their output. + +To run the compilation for all implmeentations in one language, e.g. Rust, run the command `scons build/c`, and the resulting executables will be available in the `cuild/c` directory, each in their respective algorithm directory, containing the executable.""" + +from pathlib import Path + +# Add other languages here when you want to add language targets +languages = ['c'] + +root_dir = Path.cwd() + +env = Environment() +env.C = env.Program + +SConscript('SConscript', exports='env languages root_dir') + diff --git a/contents/IFS/code/c/SConscript b/contents/IFS/code/c/SConscript new file mode 100644 index 000000000..5ede7b37a --- /dev/null +++ b/contents/IFS/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(target=f'{root_dir}/build/c/IFS/IFS', source='IFS.c') diff --git a/contents/barnsley/code/c/SConscript b/contents/barnsley/code/c/SConscript new file mode 100644 index 000000000..8ccd85175 --- /dev/null +++ b/contents/barnsley/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/barnsley/barnsley', 'barnsley.c') diff --git a/contents/computus/code/c/SConscript b/contents/computus/code/c/SConscript new file mode 100644 index 000000000..d06585474 --- /dev/null +++ b/contents/computus/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/computus/gauss_easter', 'gauss_easter.c') diff --git a/contents/cooley_tukey/code/c/SConscript b/contents/cooley_tukey/code/c/SConscript new file mode 100644 index 000000000..dd2249d5a --- /dev/null +++ b/contents/cooley_tukey/code/c/SConscript @@ -0,0 +1,4 @@ +Import('*') + +env.C(f'{root_dir}/build/c/cooley_tukey/cooley_tukey', 'fft.c', + LDFLAGS='-lfftw3') diff --git a/contents/euclidean_algorithm/code/c/SConscript b/contents/euclidean_algorithm/code/c/SConscript new file mode 100644 index 000000000..daf83dc39 --- /dev/null +++ b/contents/euclidean_algorithm/code/c/SConscript @@ -0,0 +1,4 @@ +Import('*') + +env.C(f'{root_dir}/build/c/euclidean_algorithm/euclidean_algorithm', + 'euclidean_example.c', LDFLAGS='-lm') diff --git a/contents/flood_fill/code/c/SConscript b/contents/flood_fill/code/c/SConscript new file mode 100644 index 000000000..5ed78db43 --- /dev/null +++ b/contents/flood_fill/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/flood_fill/flood_fill', 'flood_fill.c') diff --git a/contents/forward_euler_method/code/c/SConscript b/contents/forward_euler_method/code/c/SConscript new file mode 100644 index 000000000..933323848 --- /dev/null +++ b/contents/forward_euler_method/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/forward_euler_method/forward_euler', 'euler.c', LDFLAGS='-lm') diff --git a/contents/gaussian_elimination/code/c/SConscript b/contents/gaussian_elimination/code/c/SConscript new file mode 100644 index 000000000..c1013eb68 --- /dev/null +++ b/contents/gaussian_elimination/code/c/SConscript @@ -0,0 +1,4 @@ +Import('*') + +env.C(f'{root_dir}/build/c/gaussian_elimination/gaussian_elimination', 'gaussian_elimination.c') + diff --git a/contents/graham_scan/code/c/SConscript b/contents/graham_scan/code/c/SConscript new file mode 100644 index 000000000..b41dc94cd --- /dev/null +++ b/contents/graham_scan/code/c/SConscript @@ -0,0 +1,4 @@ +Import('*') + +env.C(f'{root_dir}/build/c/graham_scan/graham_scan', 'graham.c', + LDFLAGS='-lm') diff --git a/contents/huffman_encoding/code/c/SConscript b/contents/huffman_encoding/code/c/SConscript new file mode 100644 index 000000000..5239598df --- /dev/null +++ b/contents/huffman_encoding/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/huffman_encoding/huffman', 'huffman.c') diff --git a/contents/jarvis_march/code/c/SConscript b/contents/jarvis_march/code/c/SConscript new file mode 100644 index 000000000..4b6c491ae --- /dev/null +++ b/contents/jarvis_march/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/jarvis_march/jarvis_march', 'jarvis_march.c') diff --git a/contents/monte_carlo_integration/code/c/SConscript b/contents/monte_carlo_integration/code/c/SConscript new file mode 100644 index 000000000..aeaf69931 --- /dev/null +++ b/contents/monte_carlo_integration/code/c/SConscript @@ -0,0 +1,4 @@ +Import('*') + +env.C(f'{root_dir}/build/c/monte_carlo_integration/monte_carlo', + 'monte_carlo.c') diff --git a/contents/quantum_systems/code/c/SConscript b/contents/quantum_systems/code/c/SConscript new file mode 100644 index 000000000..2aad62e24 --- /dev/null +++ b/contents/quantum_systems/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/quantum_systems/energy/', 'energy.c') diff --git a/contents/split-operator_method/code/c/SConscript b/contents/split-operator_method/code/c/SConscript new file mode 100644 index 000000000..02300e99a --- /dev/null +++ b/contents/split-operator_method/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/split-op_method/split_op', 'split_op.c') diff --git a/contents/stable_marriage_problem/code/c/SConscript b/contents/stable_marriage_problem/code/c/SConscript new file mode 100644 index 000000000..026756a9c --- /dev/null +++ b/contents/stable_marriage_problem/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/stable_marriage/stable_marriage', 'stable_marriage.c') diff --git a/contents/thomas_algorithm/code/c/SConscript b/contents/thomas_algorithm/code/c/SConscript new file mode 100644 index 000000000..54734bec2 --- /dev/null +++ b/contents/thomas_algorithm/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/thomas_algorithm/thomas', 'thomas.c') diff --git a/contents/tree_traversal/code/c/SConscript b/contents/tree_traversal/code/c/SConscript new file mode 100644 index 000000000..6958c4edb --- /dev/null +++ b/contents/tree_traversal/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/tree_treaversal/tree_traversal', 'tree_traversal.c') diff --git a/contents/verlet_integration/code/c/SConscript b/contents/verlet_integration/code/c/SConscript new file mode 100644 index 000000000..1698eca3d --- /dev/null +++ b/contents/verlet_integration/code/c/SConscript @@ -0,0 +1,3 @@ +Import('*') + +env.C(f'{root_dir}/build/c/verlet_integration/verlet', 'verlet.c') From 6121a9f45e9d2ca8ba40973241d3dec1f2f92ec6 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Mon, 18 Oct 2021 20:21:17 +0200 Subject: [PATCH 2/8] First fully functional version of the build system for C code --- SConscript | 5 ++--- contents/IFS/code/c/SConscript | 3 +-- contents/barnsley/code/c/SConscript | 3 +-- contents/computus/code/c/SConscript | 3 +-- contents/cooley_tukey/code/c/SConscript | 5 ++--- contents/euclidean_algorithm/code/c/SConscript | 5 ++--- contents/flood_fill/code/c/SConscript | 3 +-- contents/forward_euler_method/code/c/SConscript | 3 +-- contents/gaussian_elimination/code/c/SConscript | 4 ++-- contents/graham_scan/code/c/SConscript | 4 +--- contents/huffman_encoding/code/c/SConscript | 3 +-- contents/jarvis_march/code/c/SConscript | 3 +-- contents/monte_carlo_integration/code/c/SConscript | 4 +--- contents/quantum_systems/code/c/SConscript | 3 +-- contents/split-operator_method/code/c/SConscript | 4 ++-- contents/stable_marriage_problem/code/c/SConscript | 3 +-- contents/thomas_algorithm/code/c/SConscript | 3 +-- contents/tree_traversal/code/c/SConscript | 3 +-- contents/verlet_integration/code/c/SConscript | 3 +-- 19 files changed, 24 insertions(+), 43 deletions(-) diff --git a/SConscript b/SConscript index 606ba04d8..be18b33d3 100644 --- a/SConscript +++ b/SConscript @@ -6,6 +6,5 @@ for p in Path('contents').iterdir(): if (q := (p / 'code')).exists(): for path in q.iterdir(): if path.stem in languages: - env.SConscript(path / 'SConscript', exports='env root_dir', - must_exist=0) - + env.SConscript(path / 'SConscript', exports='env', + must_exist=0) diff --git a/contents/IFS/code/c/SConscript b/contents/IFS/code/c/SConscript index 5ede7b37a..55cbe759a 100644 --- a/contents/IFS/code/c/SConscript +++ b/contents/IFS/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(target=f'{root_dir}/build/c/IFS/IFS', source='IFS.c') +env.C('#/build/c/IFS/IFS', 'IFS.c') diff --git a/contents/barnsley/code/c/SConscript b/contents/barnsley/code/c/SConscript index 8ccd85175..de3d64f02 100644 --- a/contents/barnsley/code/c/SConscript +++ b/contents/barnsley/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/barnsley/barnsley', 'barnsley.c') +env.C('#/build/c/bransley/barnsley', 'barnsley.c') diff --git a/contents/computus/code/c/SConscript b/contents/computus/code/c/SConscript index d06585474..1a6c7a1cf 100644 --- a/contents/computus/code/c/SConscript +++ b/contents/computus/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/computus/gauss_easter', 'gauss_easter.c') +env.C('#/build/c/computus/gauss_easter', 'gauss_easter.c') diff --git a/contents/cooley_tukey/code/c/SConscript b/contents/cooley_tukey/code/c/SConscript index dd2249d5a..322faf7cb 100644 --- a/contents/cooley_tukey/code/c/SConscript +++ b/contents/cooley_tukey/code/c/SConscript @@ -1,4 +1,3 @@ Import('*') - -env.C(f'{root_dir}/build/c/cooley_tukey/cooley_tukey', 'fft.c', - LDFLAGS='-lfftw3') +env.C('#/build/c/cooley_tukey/cooley_tukey', 'fft.c', + LIBS=['-lm', '-lfftw3']) diff --git a/contents/euclidean_algorithm/code/c/SConscript b/contents/euclidean_algorithm/code/c/SConscript index daf83dc39..187d369c7 100644 --- a/contents/euclidean_algorithm/code/c/SConscript +++ b/contents/euclidean_algorithm/code/c/SConscript @@ -1,4 +1,3 @@ Import('*') - -env.C(f'{root_dir}/build/c/euclidean_algorithm/euclidean_algorithm', - 'euclidean_example.c', LDFLAGS='-lm') +env.C('#/build/c/euclidean_algorithm/euclidean_algorithm', + 'euclidean_example.c', LIBS='-lm') diff --git a/contents/flood_fill/code/c/SConscript b/contents/flood_fill/code/c/SConscript index 5ed78db43..55880488c 100644 --- a/contents/flood_fill/code/c/SConscript +++ b/contents/flood_fill/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/flood_fill/flood_fill', 'flood_fill.c') +env.C('#/build/c/flood_fill/flood_fill', 'flood_fill.c') diff --git a/contents/forward_euler_method/code/c/SConscript b/contents/forward_euler_method/code/c/SConscript index 933323848..61bbd4d9d 100644 --- a/contents/forward_euler_method/code/c/SConscript +++ b/contents/forward_euler_method/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/forward_euler_method/forward_euler', 'euler.c', LDFLAGS='-lm') +env.C('#/build/c/forward_euler_method/forward_euler', 'euler.c', LIBS='-lm') diff --git a/contents/gaussian_elimination/code/c/SConscript b/contents/gaussian_elimination/code/c/SConscript index c1013eb68..b27c1aef4 100644 --- a/contents/gaussian_elimination/code/c/SConscript +++ b/contents/gaussian_elimination/code/c/SConscript @@ -1,4 +1,4 @@ Import('*') - -env.C(f'{root_dir}/build/c/gaussian_elimination/gaussian_elimination', 'gaussian_elimination.c') +env.C('#/build/c/gaussian_elimination/gaussian_elimination', + 'gaussian_elimination.c') diff --git a/contents/graham_scan/code/c/SConscript b/contents/graham_scan/code/c/SConscript index b41dc94cd..621ca39f5 100644 --- a/contents/graham_scan/code/c/SConscript +++ b/contents/graham_scan/code/c/SConscript @@ -1,4 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/graham_scan/graham_scan', 'graham.c', - LDFLAGS='-lm') +env.C('#/build/c/graham_scan/graham_scan', 'graham.c', LIBS='-lm') diff --git a/contents/huffman_encoding/code/c/SConscript b/contents/huffman_encoding/code/c/SConscript index 5239598df..3c29a8124 100644 --- a/contents/huffman_encoding/code/c/SConscript +++ b/contents/huffman_encoding/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/huffman_encoding/huffman', 'huffman.c') +env.C('#/build/c/huffman_encoding/huffman', 'huffman.c') diff --git a/contents/jarvis_march/code/c/SConscript b/contents/jarvis_march/code/c/SConscript index 4b6c491ae..0cc4b38fa 100644 --- a/contents/jarvis_march/code/c/SConscript +++ b/contents/jarvis_march/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/jarvis_march/jarvis_march', 'jarvis_march.c') +env.C('#/build/c/jarvis_march/jarvis_march', 'jarvis_march.c') diff --git a/contents/monte_carlo_integration/code/c/SConscript b/contents/monte_carlo_integration/code/c/SConscript index aeaf69931..cf6871d49 100644 --- a/contents/monte_carlo_integration/code/c/SConscript +++ b/contents/monte_carlo_integration/code/c/SConscript @@ -1,4 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/monte_carlo_integration/monte_carlo', - 'monte_carlo.c') +env.C('#/build/c/monte_carlo_integration/monte_carlo', 'monte_carlo.c') diff --git a/contents/quantum_systems/code/c/SConscript b/contents/quantum_systems/code/c/SConscript index 2aad62e24..b84b85bd6 100644 --- a/contents/quantum_systems/code/c/SConscript +++ b/contents/quantum_systems/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/quantum_systems/energy/', 'energy.c') +env.C('#/build/c/quantum_systems/energy', 'energy.c', LIBS=['-lm', '-lfftw3']) diff --git a/contents/split-operator_method/code/c/SConscript b/contents/split-operator_method/code/c/SConscript index 02300e99a..ec240fc68 100644 --- a/contents/split-operator_method/code/c/SConscript +++ b/contents/split-operator_method/code/c/SConscript @@ -1,3 +1,3 @@ Import('*') - -env.C(f'{root_dir}/build/c/split-op_method/split_op', 'split_op.c') +env.C('#/build/c/split-op_method/split_op', 'split_op.c', + LIBS=['-lm', '-lfftw3']) diff --git a/contents/stable_marriage_problem/code/c/SConscript b/contents/stable_marriage_problem/code/c/SConscript index 026756a9c..5bacbf90e 100644 --- a/contents/stable_marriage_problem/code/c/SConscript +++ b/contents/stable_marriage_problem/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/stable_marriage/stable_marriage', 'stable_marriage.c') +env.C('#/build/c/stable_marriage/stable_marriage', 'stable_marriage.c') diff --git a/contents/thomas_algorithm/code/c/SConscript b/contents/thomas_algorithm/code/c/SConscript index 54734bec2..0457b555a 100644 --- a/contents/thomas_algorithm/code/c/SConscript +++ b/contents/thomas_algorithm/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/thomas_algorithm/thomas', 'thomas.c') +env.C('#/build/c/thomas_algorithm/thomas', 'thomas.c') diff --git a/contents/tree_traversal/code/c/SConscript b/contents/tree_traversal/code/c/SConscript index 6958c4edb..e8552b201 100644 --- a/contents/tree_traversal/code/c/SConscript +++ b/contents/tree_traversal/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/tree_treaversal/tree_traversal', 'tree_traversal.c') +env.C('#/build/c/tree_traversal/tree_traversal', 'tree_traversal.c') diff --git a/contents/verlet_integration/code/c/SConscript b/contents/verlet_integration/code/c/SConscript index 1698eca3d..a8800f710 100644 --- a/contents/verlet_integration/code/c/SConscript +++ b/contents/verlet_integration/code/c/SConscript @@ -1,3 +1,2 @@ Import('*') - -env.C(f'{root_dir}/build/c/verlet_integration/verlet', 'verlet.c') +env.C('#/build/c/verlet_integration/verlet', 'verlet.c') From 37226ce94a21a40c19460e1388205dddc57957f8 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Mon, 18 Oct 2021 20:46:47 +0200 Subject: [PATCH 3/8] Simplified SConstruct file --- SConstruct | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/SConstruct b/SConstruct index 77b22e141..df000f732 100644 --- a/SConstruct +++ b/SConstruct @@ -9,13 +9,12 @@ To run the compilation for all implmeentations in one language, e.g. Rust, run t from pathlib import Path +env = Environment() + # Add other languages here when you want to add language targets languages = ['c'] -root_dir = Path.cwd() - -env = Environment() env.C = env.Program -SConscript('SConscript', exports='env languages root_dir') +SConscript('SConscript', exports='env languages') From 5740ed2e30dc6a1e88b0f17ea2e8e5df2a5f72db Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Tue, 19 Oct 2021 23:54:52 +0200 Subject: [PATCH 4/8] Simplified SConscript files SConscript files are now mostly universal for C programs. Additionally, the build hierarchy is now flattened (executables under the language folder) --- contents/IFS/code/c/SConscript | 6 +++++- contents/barnsley/code/c/SConscript | 6 +++++- contents/computus/code/c/SConscript | 6 +++++- contents/cooley_tukey/code/c/SConscript | 7 +++++-- contents/euclidean_algorithm/code/c/SConscript | 7 +++++-- contents/flood_fill/code/c/SConscript | 6 +++++- contents/forward_euler_method/code/c/SConscript | 6 +++++- contents/gaussian_elimination/code/c/SConscript | 6 ++++-- contents/graham_scan/code/c/SConscript | 6 +++++- contents/huffman_encoding/code/c/SConscript | 6 +++++- contents/jarvis_march/code/c/SConscript | 6 +++++- contents/monte_carlo_integration/code/c/SConscript | 6 +++++- contents/quantum_systems/code/c/SConscript | 6 +++++- contents/split-operator_method/code/c/SConscript | 7 +++++-- contents/stable_marriage_problem/code/c/SConscript | 6 +++++- contents/thomas_algorithm/code/c/SConscript | 6 +++++- contents/tree_traversal/code/c/SConscript | 6 +++++- contents/verlet_integration/code/c/SConscript | 6 +++++- 18 files changed, 89 insertions(+), 22 deletions(-) diff --git a/contents/IFS/code/c/SConscript b/contents/IFS/code/c/SConscript index 55cbe759a..fd696f9ce 100644 --- a/contents/IFS/code/c/SConscript +++ b/contents/IFS/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/IFS/IFS', 'IFS.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/barnsley/code/c/SConscript b/contents/barnsley/code/c/SConscript index de3d64f02..fd696f9ce 100644 --- a/contents/barnsley/code/c/SConscript +++ b/contents/barnsley/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/bransley/barnsley', 'barnsley.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/computus/code/c/SConscript b/contents/computus/code/c/SConscript index 1a6c7a1cf..fd696f9ce 100644 --- a/contents/computus/code/c/SConscript +++ b/contents/computus/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/computus/gauss_easter', 'gauss_easter.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/cooley_tukey/code/c/SConscript b/contents/cooley_tukey/code/c/SConscript index 322faf7cb..2cd13de37 100644 --- a/contents/cooley_tukey/code/c/SConscript +++ b/contents/cooley_tukey/code/c/SConscript @@ -1,3 +1,6 @@ Import('*') -env.C('#/build/c/cooley_tukey/cooley_tukey', 'fft.c', - LIBS=['-lm', '-lfftw3']) +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) diff --git a/contents/euclidean_algorithm/code/c/SConscript b/contents/euclidean_algorithm/code/c/SConscript index 187d369c7..fd696f9ce 100644 --- a/contents/euclidean_algorithm/code/c/SConscript +++ b/contents/euclidean_algorithm/code/c/SConscript @@ -1,3 +1,6 @@ Import('*') -env.C('#/build/c/euclidean_algorithm/euclidean_algorithm', - 'euclidean_example.c', LIBS='-lm') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/flood_fill/code/c/SConscript b/contents/flood_fill/code/c/SConscript index 55880488c..fd696f9ce 100644 --- a/contents/flood_fill/code/c/SConscript +++ b/contents/flood_fill/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/flood_fill/flood_fill', 'flood_fill.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/forward_euler_method/code/c/SConscript b/contents/forward_euler_method/code/c/SConscript index 61bbd4d9d..34a951e7f 100644 --- a/contents/forward_euler_method/code/c/SConscript +++ b/contents/forward_euler_method/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/forward_euler_method/forward_euler', 'euler.c', LIBS='-lm') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m') diff --git a/contents/gaussian_elimination/code/c/SConscript b/contents/gaussian_elimination/code/c/SConscript index b27c1aef4..fd696f9ce 100644 --- a/contents/gaussian_elimination/code/c/SConscript +++ b/contents/gaussian_elimination/code/c/SConscript @@ -1,4 +1,6 @@ Import('*') -env.C('#/build/c/gaussian_elimination/gaussian_elimination', - 'gaussian_elimination.c') +from pathlib import Path +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/graham_scan/code/c/SConscript b/contents/graham_scan/code/c/SConscript index 621ca39f5..34a951e7f 100644 --- a/contents/graham_scan/code/c/SConscript +++ b/contents/graham_scan/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/graham_scan/graham_scan', 'graham.c', LIBS='-lm') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m') diff --git a/contents/huffman_encoding/code/c/SConscript b/contents/huffman_encoding/code/c/SConscript index 3c29a8124..fd696f9ce 100644 --- a/contents/huffman_encoding/code/c/SConscript +++ b/contents/huffman_encoding/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/huffman_encoding/huffman', 'huffman.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/jarvis_march/code/c/SConscript b/contents/jarvis_march/code/c/SConscript index 0cc4b38fa..fd696f9ce 100644 --- a/contents/jarvis_march/code/c/SConscript +++ b/contents/jarvis_march/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/jarvis_march/jarvis_march', 'jarvis_march.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/monte_carlo_integration/code/c/SConscript b/contents/monte_carlo_integration/code/c/SConscript index cf6871d49..fd696f9ce 100644 --- a/contents/monte_carlo_integration/code/c/SConscript +++ b/contents/monte_carlo_integration/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/monte_carlo_integration/monte_carlo', 'monte_carlo.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/quantum_systems/code/c/SConscript b/contents/quantum_systems/code/c/SConscript index b84b85bd6..2cd13de37 100644 --- a/contents/quantum_systems/code/c/SConscript +++ b/contents/quantum_systems/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/quantum_systems/energy', 'energy.c', LIBS=['-lm', '-lfftw3']) +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) diff --git a/contents/split-operator_method/code/c/SConscript b/contents/split-operator_method/code/c/SConscript index ec240fc68..2cd13de37 100644 --- a/contents/split-operator_method/code/c/SConscript +++ b/contents/split-operator_method/code/c/SConscript @@ -1,3 +1,6 @@ Import('*') -env.C('#/build/c/split-op_method/split_op', 'split_op.c', - LIBS=['-lm', '-lfftw3']) +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) diff --git a/contents/stable_marriage_problem/code/c/SConscript b/contents/stable_marriage_problem/code/c/SConscript index 5bacbf90e..fd696f9ce 100644 --- a/contents/stable_marriage_problem/code/c/SConscript +++ b/contents/stable_marriage_problem/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/stable_marriage/stable_marriage', 'stable_marriage.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/thomas_algorithm/code/c/SConscript b/contents/thomas_algorithm/code/c/SConscript index 0457b555a..fd696f9ce 100644 --- a/contents/thomas_algorithm/code/c/SConscript +++ b/contents/thomas_algorithm/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/thomas_algorithm/thomas', 'thomas.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/tree_traversal/code/c/SConscript b/contents/tree_traversal/code/c/SConscript index e8552b201..fd696f9ce 100644 --- a/contents/tree_traversal/code/c/SConscript +++ b/contents/tree_traversal/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/tree_traversal/tree_traversal', 'tree_traversal.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) diff --git a/contents/verlet_integration/code/c/SConscript b/contents/verlet_integration/code/c/SConscript index a8800f710..fd696f9ce 100644 --- a/contents/verlet_integration/code/c/SConscript +++ b/contents/verlet_integration/code/c/SConscript @@ -1,2 +1,6 @@ Import('*') -env.C('#/build/c/verlet_integration/verlet', 'verlet.c') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c')) From e17e2c40a3e350f790b04b7ae8d204e687867f07 Mon Sep 17 00:00:00 2001 From: James Schloss Date: Wed, 20 Oct 2021 13:41:31 +0200 Subject: [PATCH 5/8] fixing chapter to use split-op code (#888) Removed the quantum_systems SConscript --- contents/quantum_systems/code/c++/energy.cpp | 59 ------------------ contents/quantum_systems/code/c/SConscript | 6 -- contents/quantum_systems/code/c/energy.c | 61 ------------------- .../quantum_systems/code/haskell/Energy.hs | 14 ----- contents/quantum_systems/code/julia/energy.jl | 18 ------ .../quantum_systems/code/python/energy.py | 17 ------ contents/quantum_systems/quantum_systems.md | 10 +-- 7 files changed, 5 insertions(+), 180 deletions(-) delete mode 100644 contents/quantum_systems/code/c++/energy.cpp delete mode 100644 contents/quantum_systems/code/c/SConscript delete mode 100644 contents/quantum_systems/code/c/energy.c delete mode 100644 contents/quantum_systems/code/haskell/Energy.hs delete mode 100644 contents/quantum_systems/code/julia/energy.jl delete mode 100644 contents/quantum_systems/code/python/energy.py diff --git a/contents/quantum_systems/code/c++/energy.cpp b/contents/quantum_systems/code/c++/energy.cpp deleted file mode 100644 index 15a58bd01..000000000 --- a/contents/quantum_systems/code/c++/energy.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include - -#include - -void fft(std::vector> &x, bool inverse) { - std::vector> y(x.size(), std::complex(0.0, 0.0)); - - fftw_plan p; - - fftw_complex *in = reinterpret_cast(x.data()); - fftw_complex *out = reinterpret_cast(y.data()); - - p = fftw_plan_dft_1d(x.size(), in, out, - (inverse ? FFTW_BACKWARD : FFTW_FORWARD), FFTW_ESTIMATE); - - - fftw_execute(p); - fftw_destroy_plan(p); - - for (size_t i = 0; i < x.size(); ++i) { - x[i] = y[i] / sqrt(static_cast(x.size())); - } -} - -double calculate_energy(std::vector> wfc, - std::vector> h_r, - std::vector> h_k, - double dx, size_t size) { - std::vector> wfc_k(wfc); - std::vector> wfc_c(size); - fft(wfc_k, false); - - for (size_t i = 0; i < size; ++i) { - wfc_c[i] = conj(wfc[i]); - } - - std::vector> energy_k(size); - std::vector> energy_r(size); - - for (size_t i = 0; i < size; ++i) { - energy_k[i] = wfc_k[i] * pow(h_k[i], 2); - } - - fft(energy_k, true); - - for (size_t i = 0; i < size; ++i) { - energy_k[i] *= 0.5 * wfc_c[i]; - energy_r[i] = wfc_c[i] * h_r[i] * wfc[i]; - } - - double energy_final = 0; - - for (size_t i = 0; i < size; ++i) { - energy_final += real(energy_k[i] + energy_r[i]); - } - - return energy_final * dx; -} diff --git a/contents/quantum_systems/code/c/SConscript b/contents/quantum_systems/code/c/SConscript deleted file mode 100644 index 2cd13de37..000000000 --- a/contents/quantum_systems/code/c/SConscript +++ /dev/null @@ -1,6 +0,0 @@ -Import('*') -from pathlib import Path - -dirname = Path.cwd().parents[1].stem - -env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS=['m', 'fftw3']) diff --git a/contents/quantum_systems/code/c/energy.c b/contents/quantum_systems/code/c/energy.c deleted file mode 100644 index 9086ffcd5..000000000 --- a/contents/quantum_systems/code/c/energy.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include -#include -#include - -#include - -void fft(double complex *x, int n, bool inverse) { - double complex y[n]; - memset(y, 0, sizeof(y)); - fftw_plan p; - - if (inverse) { - p = fftw_plan_dft_1d(n, (fftw_complex*)x, (fftw_complex*)y, - FFTW_BACKWARD, FFTW_ESTIMATE); - } else { - p = fftw_plan_dft_1d(n, (fftw_complex*)x, (fftw_complex*)y, - FFTW_FORWARD, FFTW_ESTIMATE); - } - - fftw_execute(p); - fftw_destroy_plan(p); - - for (size_t i = 0; i < n; ++i) { - x[i] = y[i] / sqrt((double)n); - } -} - -double calculate_energy(double complex *wfc, double complex *h_r, - double complex *h_k, double dx, size_t size) { - double complex wfc_k[size]; - double complex wfc_c[size]; - memcpy(wfc_k, wfc, sizeof(wfc_k)); - fft(wfc_k, size, false); - - for (size_t i = 0; i < size; ++i) { - wfc_c[i] = conj(wfc[i]); - } - - double complex energy_k[size]; - double complex energy_r[size]; - - for (size_t i = 0; i < size; ++i) { - energy_k[i] = wfc_k[i] * h_k[i]; - } - - fft(energy_k, size, true); - - for (size_t i = 0; i < size; ++i) { - energy_k[i] *= wfc_c[i]; - energy_r[i] = wfc_c[i] * h_r[i] * wfc[i]; - } - - double energy_final = 0; - - for (size_t i = 0; i < size; ++i) { - energy_final += creal(energy_k[i] + energy_r[i]); - } - - return energy_final * dx; -} diff --git a/contents/quantum_systems/code/haskell/Energy.hs b/contents/quantum_systems/code/haskell/Energy.hs deleted file mode 100644 index a024fd139..000000000 --- a/contents/quantum_systems/code/haskell/Energy.hs +++ /dev/null @@ -1,14 +0,0 @@ -import Data.Array.CArray -import Data.Complex -import Math.FFT (dft, idft) -- Binding to fftw - -type Vector = CArray Int (Complex Double) - -calculateEnergy :: Double -> Vector -> Vector -> Vector -> Double -calculateEnergy dx kin pot wfc = (* dx) . sum . map realPart $ elems total - where - total = liftArray2 (+) kineticE potentialE - potentialE = wfcConj .* pot .* wfc - kineticE = wfcConj .* idft (kin .* dft wfc) - wfcConj = liftArray conjugate wfc - a .* b = liftArray2 (*) a b diff --git a/contents/quantum_systems/code/julia/energy.jl b/contents/quantum_systems/code/julia/energy.jl deleted file mode 100644 index 3efce0cb7..000000000 --- a/contents/quantum_systems/code/julia/energy.jl +++ /dev/null @@ -1,18 +0,0 @@ -# We are calculating the energy to check -function calculate_energy(wfc, H_k, H_r, dx) - # Creating momentum and conjugate wavefunctions - wfc_k = fft(wfc) - wfc_c = conj(wfc) - - # Finding the momentum and real-space energy terms - energy_k = wfc_c.*ifft((H_k) .* wfc_k) - energy_r = wfc_c.* H_r .* wfc - - # Integrating over all space - energy_final = 0 - for i = 1:length(energy_k) - energy_final += real(energy_k[i] + energy_r[i]) - end - - return energy_final*dx -end diff --git a/contents/quantum_systems/code/python/energy.py b/contents/quantum_systems/code/python/energy.py deleted file mode 100644 index 328fa9950..000000000 --- a/contents/quantum_systems/code/python/energy.py +++ /dev/null @@ -1,17 +0,0 @@ -import numpy as np - - -def calculate_energy(wfc, H_k, H_r, dx): - """Calculate the energy .""" - # Creating momentum conjugate wavefunctions - wfc_k = np.fft.fft(wfc) - wfc_c = np.conj(wfc) - - # Finding the momentum and real-space energy terms - energy_k = 0.5 * wfc_c * np.fft.ifft((H_k ** 2) * wfc_k) - energy_r = wfc_c * H_r * wfc - - # Integrating over all space - energy_final = sum(energy_k + energy_r).real - - return energy_final * dx diff --git a/contents/quantum_systems/quantum_systems.md b/contents/quantum_systems/quantum_systems.md index a74c22068..a7a762ca5 100644 --- a/contents/quantum_systems/quantum_systems.md +++ b/contents/quantum_systems/quantum_systems.md @@ -226,15 +226,15 @@ This ultimately looks like this: {% method %} {% sample lang="jl" %} -[import, lang:"julia"](code/julia/energy.jl) +[import:114-132, lang:"julia"](../split-operator_method/code/julia/split_op.jl) {% sample lang="hs" %} -[import, lang:"haskell"](code/haskell/Energy.hs) +[import:75-82, lang:"haskell"](../split-operator_method/code/haskell/splitOp.hs) {% sample lang="c" %} -[import:29-, lang:"c"](code/c/energy.c) +[import:150-184, lang:"c"](../split-operator_method/code/c/split_op.c) {% sample lang="cpp" %} -[import:26-, lang:"cpp"](code/c++/energy.cpp) +[import:158-189, lang:"cpp"](../split-operator_method/code/c++/split_op.cpp) {% sample lang="py" %} -[import:4-17, lang:"python"](code/python/energy.py) +[import:98-112, lang:"python"](../split-operator_method/code/python/split_op.py) {% endmethod %} This calculation will be used in many different simulations of quantum systems to check our results. From 0018adfadf68c8747a85ee8c3a8886d8141ffddc Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sat, 23 Oct 2021 21:58:28 +0200 Subject: [PATCH 6/8] modified Dockerfile for ntindle --- .devcontainer/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index bc58ae358..43c8b9b3b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -6,7 +6,7 @@ FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} # [Optional] Uncomment this section to install additional OS packages. RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends build-essential software-properties-common xz-utils g++ sbcl julia python3 python3-pip python3-dev ghc openjdk-11-jdk rustc libssl-dev gfortran libxml2-dev libyaml-dev libgmp-dev libz-dev libncurses5 gnuplot nodejs npm lua5.3 ocaml php ruby-full gnu-smalltalk scratch + && apt-get -y install --no-install-recommends build-essential software-properties-common xz-utils g++ sbcl julia python3 python3-pip python3-dev ghc openjdk-11-jdk rustc libssl-dev gfortran libxml2-dev libyaml-dev libgmp-dev libz-dev libncurses5 gnuplot nodejs npm lua5.3 ocaml php ruby-full gnu-smalltalk scratch libfftw3-dev # Setup Crystal RUN echo 'deb http://download.opensuse.org/repositories/devel:/languages:/crystal/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/devel:languages:crystal.list @@ -102,6 +102,7 @@ ENV PATH=$PATH:~/swift/usr/bin RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install --no-install-recommends crystal dart nim powershell scala dotnet-sdk-5.0 r-base racket -RUN pip install wheel matplotlib numpy coconut +RUN pip install wheel matplotlib numpy coconut scons RUN sudo sh -c 'npm install -g typescript' + From 763e4eed9e423a51a292c5a3474610c827f36027 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sat, 23 Oct 2021 22:05:39 +0200 Subject: [PATCH 7/8] Changed my name in CONTRIBUTORS.md --- CONTRIBUTORS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index e3707e290..40a0a273a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -51,7 +51,7 @@ This file lists everyone, who contributed to this repo and wanted to show up her - Vincent Zalzal - Jonathan D B Van Schenck - James Goytia -- Amaras +- Sammy Plat - Jonathan Dönszelmann - Ishaan Verma - Delphi1024 From ce7535ec9a1a94e681cc42cefb25d310597dfad0 Mon Sep 17 00:00:00 2001 From: Sammy Plat Date: Sun, 24 Oct 2021 17:56:12 +0200 Subject: [PATCH 8/8] apparently forgot an algorithm --- contents/approximate_counting/code/c/SConscript | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 contents/approximate_counting/code/c/SConscript diff --git a/contents/approximate_counting/code/c/SConscript b/contents/approximate_counting/code/c/SConscript new file mode 100644 index 000000000..34a951e7f --- /dev/null +++ b/contents/approximate_counting/code/c/SConscript @@ -0,0 +1,6 @@ +Import('*') +from pathlib import Path + +dirname = Path.cwd().parents[1].stem + +env.C(f'#/build/c/{dirname}', Glob('*.c'), LIBS='m')