From 064204ce8c930ea60822678ebf90d05ead8419b4 Mon Sep 17 00:00:00 2001
From: David Hendriks <davidhendriks93@gmail.com>
Date: Thu, 20 Feb 2020 23:56:44 +0000
Subject: [PATCH] reordered files and working on scaling

---
 binarycpython/utils/grid.py                   |  23 ++--
 binarycpython/utils/grid_options_defaults.py  |   2 +
 .../{ => profiling}/profile_run.txt           | Bin
 .../{ => profiling}/profile_test.txt          | Bin
 .../{ => profiling}/readout_profile.py        |   0
 .../scaling/generate_scaling_script.py        |  51 +++++++
 .../scaling/generate_test_script.py           |  12 ++
 ...ltiprocessing_via_population_comparison.py |   0
 tests/population/scaling/run_tests_astro1.sh  |  72 ----------
 tests/population/scaling/run_tests_astro2.sh  |  72 ----------
 .../population/scaling/run_tests_cluster2.sh  |  60 ---------
 ...n_tests_david-Lenovo-IdeaPad-S340-14IWL.sh |  24 ----
 .../comparison_result_astro1_ol.dat           | 115 ----------------
 .../comparison_result_astro2.dat              |  60 ---------
 .../comparison_result_cluster2.dat            |  50 -------
 ...result_david-Lenovo-IdeaPad-S340-14IWL.dat |   3 -
 .../comparison_result_laptop.dat              |  29 ----
 tests/population/scaling/scaling_script.py    | 126 ++++++++++++++++++
 tests/population/sizes_for_commands.png       | Bin 31669 -> 0 bytes
 19 files changed, 202 insertions(+), 497 deletions(-)
 rename tests/population/{ => profiling}/profile_run.txt (100%)
 rename tests/population/{ => profiling}/profile_test.txt (100%)
 rename tests/population/{ => profiling}/readout_profile.py (100%)
 create mode 100644 tests/population/scaling/generate_scaling_script.py
 rename tests/population/{ => scaling}/multiprocessing_via_population_comparison.py (100%)
 delete mode 100755 tests/population/scaling/run_tests_astro1.sh
 delete mode 100755 tests/population/scaling/run_tests_astro2.sh
 delete mode 100755 tests/population/scaling/run_tests_cluster2.sh
 delete mode 100755 tests/population/scaling/run_tests_david-Lenovo-IdeaPad-S340-14IWL.sh
 delete mode 100644 tests/population/scaling/scaling_results/comparison_result_astro1_ol.dat
 delete mode 100644 tests/population/scaling/scaling_results/comparison_result_astro2.dat
 delete mode 100644 tests/population/scaling/scaling_results/comparison_result_cluster2.dat
 delete mode 100644 tests/population/scaling/scaling_results/comparison_result_david-Lenovo-IdeaPad-S340-14IWL.dat
 delete mode 100644 tests/population/scaling/scaling_results/comparison_result_laptop.dat
 create mode 100644 tests/population/scaling/scaling_script.py
 delete mode 100644 tests/population/sizes_for_commands.png

diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py
index 2207af134..218faf66c 100644
--- a/binarycpython/utils/grid.py
+++ b/binarycpython/utils/grid.py
@@ -553,17 +553,16 @@ class Population(object):
         self.load_grid_function()
 
         for i, system in enumerate(self.grid_options["system_generator"](self)):
-            #full_system_dict = self.bse_options.copy()
-            #full_system_dict.update(system)
+            full_system_dict = self.bse_options.copy()
+            full_system_dict.update(system)
 
-            #binary_cmdline_string = self.return_argline(full_system_dict)
-            pass
-            # out = binary_c_python_api.run_population(
-            #     binary_cmdline_string,
-            #     self.grid_options["custom_logging_func_memaddr"],
-            #     self.grid_options["store_memaddr"],
-            # )
-            # print("{}/{}".format(i+1, total_starcount_run), binary_cmdline_string)
+            binary_cmdline_string = self.return_argline(full_system_dict)
+            out = binary_c_python_api.run_population(
+                binary_cmdline_string,
+                self.grid_options["custom_logging_func_memaddr"],
+                self.grid_options["store_memaddr"],
+            )
+            print("{}/{}".format(i+1, total_starcount_run), binary_cmdline_string)
 
         stop_lin = time.time()
 
@@ -792,8 +791,8 @@ class Population(object):
                 self.grid_options["custom_logging_func_memaddr"],
                 self.grid_options["store_memaddr"],
             )
-            if self.custom_options['parse_function']:
-                self.custom_options['parse_function'](self, out)
+            if self.grid_options['parse_function']:
+                self.grid_options['parse_function'](self, out)
 
         def yield_system():
             for i, system in enumerate(self.grid_options["system_generator"](self)):
diff --git a/binarycpython/utils/grid_options_defaults.py b/binarycpython/utils/grid_options_defaults.py
index ea4119291..8210374b0 100644
--- a/binarycpython/utils/grid_options_defaults.py
+++ b/binarycpython/utils/grid_options_defaults.py
@@ -44,6 +44,8 @@ grid_options_defaults_dict = {
     # Probability:
     "weight": 1.0,  # weighting for the probability
     "repeat": 1.0,  # number of times to repeat each system (probability is adjusted to be 1/repeat)
+    "parse_function": None,
+
     ##
     # return_array_refs=>1, # quicker data parsing mode
     # sort_args=>1,
diff --git a/tests/population/profile_run.txt b/tests/population/profiling/profile_run.txt
similarity index 100%
rename from tests/population/profile_run.txt
rename to tests/population/profiling/profile_run.txt
diff --git a/tests/population/profile_test.txt b/tests/population/profiling/profile_test.txt
similarity index 100%
rename from tests/population/profile_test.txt
rename to tests/population/profiling/profile_test.txt
diff --git a/tests/population/readout_profile.py b/tests/population/profiling/readout_profile.py
similarity index 100%
rename from tests/population/readout_profile.py
rename to tests/population/profiling/readout_profile.py
diff --git a/tests/population/scaling/generate_scaling_script.py b/tests/population/scaling/generate_scaling_script.py
new file mode 100644
index 000000000..5286de381
--- /dev/null
+++ b/tests/population/scaling/generate_scaling_script.py
@@ -0,0 +1,51 @@
+# Script to generate the test script :P 
+import socket, psutil
+import numpy as np
+
+amount_of_cores = psutil.cpu_count(logical=False)
+amount_of_cpus = psutil.cpu_count()
+hostname = socket.gethostname()
+
+if amount_of_cpus <= 4:
+    stepsize = 1
+elif 4 < amount_of_cpus <= 24:
+    stepsize = 2
+elif 24 < amount_of_cpus <= 48:
+    stepsize = 4
+
+
+amt_repeat = 3 
+
+with open('run_scaling_{}.sh', .format(hostname), 'w') as f:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Generate the lines to run
+with open('run_tests_{}.sh'.format(hostname), 'w') as f:
+    command = ""
+    for cpu_count in np.arange(stepsize, amount_of_cpus + stepsize, stepsize):
+
+        command += "python3 evolve_population_comparing_with_multiprocessing.py 10 10 {} {}\n".format(cpu_count, hostname)
+        command += "python3 evolve_population_comparing_with_multiprocessing.py 20 20 {} {}\n".format(cpu_count, hostname)
+        command += "python3 evolve_population_comparing_with_multiprocessing.py 25 25 {} {}\n".format(cpu_count, hostname)
+        command += "python3 evolve_population_comparing_with_multiprocessing.py 35 35 {} {}\n".format(cpu_count, hostname)
+        command += "python3 evolve_population_comparing_with_multiprocessing.py 50 50 {} {}\n".format(cpu_count, hostname)
+
+        command += "\n"
+
+        f.write(command)
+        command = ""
diff --git a/tests/population/scaling/generate_test_script.py b/tests/population/scaling/generate_test_script.py
index 46bc6357a..5eec6a1ee 100644
--- a/tests/population/scaling/generate_test_script.py
+++ b/tests/population/scaling/generate_test_script.py
@@ -15,6 +15,18 @@ elif 24 < amount_of_cpus <= 48:
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
 # Generate the lines to run
 with open('run_tests_{}.sh'.format(hostname), 'w') as f:
     command = ""
diff --git a/tests/population/multiprocessing_via_population_comparison.py b/tests/population/scaling/multiprocessing_via_population_comparison.py
similarity index 100%
rename from tests/population/multiprocessing_via_population_comparison.py
rename to tests/population/scaling/multiprocessing_via_population_comparison.py
diff --git a/tests/population/scaling/run_tests_astro1.sh b/tests/population/scaling/run_tests_astro1.sh
deleted file mode 100755
index c71983827..000000000
--- a/tests/population/scaling/run_tests_astro1.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 4 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 4 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 4 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 4 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 4 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 8 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 8 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 8 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 8 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 8 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 12 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 12 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 12 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 12 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 12 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 16 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 16 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 16 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 16 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 16 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 20 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 20 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 20 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 20 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 20 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 24 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 24 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 24 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 24 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 24 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 28 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 28 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 28 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 28 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 28 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 32 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 32 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 32 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 32 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 32 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 36 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 36 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 36 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 36 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 36 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 40 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 40 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 40 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 40 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 40 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 44 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 44 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 44 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 44 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 44 astro1
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 48 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 48 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 48 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 48 astro1
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 48 astro1
-
diff --git a/tests/population/scaling/run_tests_astro2.sh b/tests/population/scaling/run_tests_astro2.sh
deleted file mode 100755
index 32bba7134..000000000
--- a/tests/population/scaling/run_tests_astro2.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 4 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 4 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 4 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 4 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 4 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 8 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 8 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 8 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 8 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 8 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 12 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 12 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 12 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 12 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 12 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 16 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 16 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 16 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 16 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 16 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 20 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 20 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 20 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 20 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 20 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 24 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 24 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 24 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 24 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 24 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 28 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 28 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 28 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 28 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 28 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 32 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 32 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 32 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 32 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 32 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 36 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 36 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 36 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 36 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 36 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 40 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 40 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 40 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 40 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 40 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 44 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 44 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 44 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 44 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 44 astro2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 48 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 48 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 48 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 48 astro2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 48 astro2
-
diff --git a/tests/population/scaling/run_tests_cluster2.sh b/tests/population/scaling/run_tests_cluster2.sh
deleted file mode 100755
index ea560061e..000000000
--- a/tests/population/scaling/run_tests_cluster2.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 4 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 4 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 4 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 4 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 4 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 8 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 8 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 8 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 8 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 8 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 12 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 12 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 12 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 12 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 12 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 16 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 16 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 16 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 16 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 16 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 20 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 20 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 20 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 20 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 20 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 24 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 24 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 24 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 24 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 24 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 28 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 28 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 28 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 28 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 28 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 32 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 32 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 32 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 32 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 32 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 36 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 36 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 36 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 36 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 36 cluster2
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 40 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 40 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 40 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 40 cluster2
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 40 cluster2
-
diff --git a/tests/population/scaling/run_tests_david-Lenovo-IdeaPad-S340-14IWL.sh b/tests/population/scaling/run_tests_david-Lenovo-IdeaPad-S340-14IWL.sh
deleted file mode 100755
index eba29c977..000000000
--- a/tests/population/scaling/run_tests_david-Lenovo-IdeaPad-S340-14IWL.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 1 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 1 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 1 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 1 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 1 david-Lenovo-IdeaPad-S340-14IWL
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 2 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 2 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 2 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 2 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 2 david-Lenovo-IdeaPad-S340-14IWL
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 3 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 3 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 3 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 3 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 3 david-Lenovo-IdeaPad-S340-14IWL
-
-python3 evolve_population_comparing_with_multiprocessing.py 10 10 4 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 20 20 4 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 25 25 4 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 35 35 4 david-Lenovo-IdeaPad-S340-14IWL
-python3 evolve_population_comparing_with_multiprocessing.py 50 50 4 david-Lenovo-IdeaPad-S340-14IWL
-
diff --git a/tests/population/scaling/scaling_results/comparison_result_astro1_ol.dat b/tests/population/scaling/scaling_results/comparison_result_astro1_ol.dat
deleted file mode 100644
index 073379c0f..000000000
--- a/tests/population/scaling/scaling_results/comparison_result_astro1_ol.dat
+++ /dev/null
@@ -1,115 +0,0 @@
-(4, 1000, 104.05427241325378, 27.00112748146057, 3.8537010161779057)
-(4, 1000, 102.54885578155518, 27.171754837036133, 3.7740976391328687)
-(4, 1000, 104.35686087608337, 26.782670736312866, 3.896432208106593)
-(4, 1000, 103.11598515510559, 27.192280530929565, 3.7921050806245336)
-(8, 1000, 102.20535063743591, 14.65907335281372, 6.972156300576681)
-(8, 1000, 101.34700274467468, 14.694567203521729, 6.896902871721575)
-(8, 1000, 102.19972801208496, 14.790043354034424, 6.910035729152001)
-(8, 1000, 102.87878012657166, 14.792370796203613, 6.95485406253979)
-(4, 2000, 207.57554006576538, 54.78886413574219, 3.788644706184937)
-(4, 2000, 202.786696434021, 54.18405818939209, 3.7425527583262794)
-(4, 2000, 206.4160861968994, 54.77799367904663, 3.7682301291705858)
-(4, 2000, 202.04300618171692, 54.89555263519287, 3.680498628447901)
-(8, 2000, 207.90165948867798, 29.321029663085938, 7.09053064907943)
-(8, 2000, 208.02890348434448, 28.802990436553955, 7.222475872516849)
-(8, 2000, 204.79240155220032, 29.379513025283813, 6.970585297855595)
-(8, 2000, 202.47611260414124, 29.069218397140503, 6.965309828352954)
-(16, 2000, 211.9178500175476, 14.980526447296143, 14.146221814240512)
-(16, 2000, 208.60417556762695, 15.031479835510254, 13.877820271216546)
-(16, 2000, 208.11063432693481, 15.369598150253296, 13.540408297760543)
-(16, 2000, 204.12664914131165, 15.360931396484375, 13.288689590009476)
-(4, 5000, 527.643744468689, 135.23606204986572, 3.901649726196038)
-(4, 5000, 517.9622015953064, 136.07963013648987, 3.8063169416009046)
-(4, 5000, 515.7305867671967, 135.84297394752502, 3.7965201421931396)
-(4, 1000, 102.62274122238159, 27.113038539886475, 3.784995955780148)
-(4, 1000, 105.12208247184753, 27.120686769485474, 3.8760848265142176)
-(4, 1000, 102.0183584690094, 27.36386466026306, 3.7282145535954663)
-(4, 1000, 105.0119206905365, 28.213557958602905, 3.722037498589084)
-(8, 1000, 103.68693804740906, 15.153008937835693, 6.842663293658605)
-(8, 1000, 103.08171725273132, 14.493562936782837, 7.112241324120718)
-(8, 1000, 104.6509165763855, 14.882857322692871, 7.03164145884926)
-(8, 1000, 104.8209400177002, 14.74099612236023, 7.110845098093478)
-(4, 2000, 203.6050124168396, 54.250617027282715, 3.7530451001957514)
-(4, 2000, 207.69856119155884, 54.04366207122803, 3.8431622364490767)
-(4, 2000, 203.5373842716217, 54.21375513076782, 3.75434949637179)
-(4, 2000, 200.93188166618347, 55.098068714141846, 3.646804440799046)
-(8, 2000, 208.2707359790802, 29.014343976974487, 7.178199036461479)
-(8, 2000, 205.94265794754028, 29.46466588973999, 6.989478812289957)
-(8, 2000, 208.62252259254456, 29.132497787475586, 7.161161535631658)
-(8, 2000, 208.0031316280365, 28.984196424484253, 7.176432583527722)
-(16, 2000, 207.22788381576538, 15.259207248687744, 13.58051440277715)
-(16, 2000, 202.91206169128418, 15.149047613143921, 13.394377446885146)
-(16, 2000, 204.83116912841797, 15.046677350997925, 13.613049868104813)
-(16, 2000, 205.0353970527649, 15.29837441444397, 13.402430316987182)
-(4, 5000, 512.5090374946594, 136.7362518310547, 3.7481577170031914)
-(4, 5000, 505.957435131073, 135.62525081634521, 3.7305548346318433)
-(4, 5000, 521.9210550785065, 135.70136737823486, 3.846100191634601)
-(4, 5000, 519.6273250579834, 134.2490532398224, 3.870621896526314)
-(8, 5000, 518.0830736160278, 72.1380262374878, 7.181830452505462)
-(8, 5000, 525.8384339809418, 71.64022922515869, 7.339988155653154)
-(8, 5000, 513.1743404865265, 71.90173530578613, 7.1371621046986045)
-(8, 5000, 510.9314661026001, 72.34414649009705, 7.062512876180519)
-(16, 5000, 516.7509648799896, 37.53547406196594, 13.767002490148501)
-(16, 5000, 510.0037705898285, 37.37641382217407, 13.645069669237815)
-(16, 5000, 523.5528612136841, 37.486063957214355, 13.966600009306234)
-(16, 5000, 511.19897866249084, 37.40828561782837, 13.665394449909224)
-(32, 5000, 521.0931882858276, 32.20561599731445, 16.18019628406674)
-(32, 5000, 518.6581602096558, 31.749494791030884, 16.33595002450794)
-(32, 5000, 520.9283559322357, 32.17886996269226, 16.188522360673105)
-(32, 5000, 514.1640427112579, 31.93514323234558, 16.100257918695846)
-(4, 1000, 104.42094922065735, 27.05269455909729, 3.8599093703049494)
-(4, 1000, 101.89992642402649, 27.551891088485718, 3.6984730411703666)
-(4, 1000, 104.2344958782196, 27.117160081863403, 3.8438573790009114)
-(4, 1000, 103.41772150993347, 27.27121353149414, 3.7921936033576795)
-(8, 1000, 102.33424353599548, 15.469272375106812, 6.615323659351424)
-(8, 1000, 104.04336977005005, 14.536758422851562, 7.1572607003288615)
-(8, 1000, 104.13553380966187, 14.583893775939941, 7.140447908463339)
-(8, 1000, 102.71817421913147, 14.484654664993286, 7.091516960178704)
-(4, 2000, 206.5037591457367, 53.54386067390442, 3.856721509182846)
-(4, 2000, 208.7819540500641, 54.52429246902466, 3.8291547601222606)
-(4, 2000, 202.39464044570923, 53.566444873809814, 3.77838478776227)
-(4, 2000, 209.63950848579407, 55.48546886444092, 3.778277678394931)
-(8, 2000, 207.04452681541443, 28.988551378250122, 7.142286074038121)
-(8, 2000, 207.26304173469543, 28.957362174987793, 7.157524932078272)
-(8, 2000, 203.83100771903992, 29.06782054901123, 7.012256298175524)
-(8, 2000, 202.653653383255, 28.714593410491943, 7.0575142919909135)
-(16, 2000, 210.743394613266, 14.946157217025757, 14.100172475985994)
-(16, 2000, 207.11285138130188, 15.00833535194397, 13.799854982216624)
-(16, 2000, 205.91337847709656, 15.33548092842102, 13.427252750546632)
-(16, 2000, 201.6581528186798, 15.01097583770752, 13.434046860039254)
-(32, 2000, 205.83645701408386, 13.055871725082397, 15.765814902932863)
-(32, 2000, 209.74389004707336, 13.278757095336914, 15.795445954857392)
-(32, 2000, 206.69286608695984, 13.06216049194336, 15.823788584931751)
-(32, 2000, 207.6377956867218, 13.04278039932251, 15.919749419188816)
-(4, 5000, 518.9882910251617, 134.86849451065063, 3.8481062082603508)
-(4, 5000, 522.838042974472, 135.0669686794281, 3.8709541502733447)
-(4, 5000, 512.6538271903992, 135.27970814704895, 3.7895840714938918)
-(4, 5000, 512.533979177475, 134.128422498703, 3.8212182744670025)
-(8, 5000, 511.6748743057251, 71.87646913528442, 7.1188092634692595)
-(8, 5000, 518.7212734222412, 72.16897344589233, 7.187593901569698)
-(8, 5000, 523.5697977542877, 72.60496044158936, 7.2112124925059256)
-(8, 5000, 515.9446866512299, 71.47919058799744, 7.2181103676048854)
-(16, 5000, 509.1269211769104, 37.47135615348816, 13.587096210007772)
-(16, 5000, 526.8645267486572, 37.16785931587219, 14.175272303714962)
-(16, 5000, 501.69326519966125, 36.7297477722168, 13.659044660773665)
-(16, 5000, 507.670964717865, 37.03483533859253, 13.707930927097744)
-(32, 5000, 513.9466030597687, 32.249024629592896, 15.93681077064738)
-(32, 5000, 511.34901881217957, 32.15395474433899, 15.90314544129933)
-(32, 5000, 514.7990386486053, 32.4391450881958, 15.869685753091387)
-(32, 5000, 507.6543724536896, 31.767980575561523, 15.980064305510751)
-(4, 10000, 1039.6945412158966, 270.35400342941284, 3.8456783625449518)
-(4, 10000, 1033.4089324474335, 270.86656308174133, 3.8151956472219655)
-(4, 10000, 1038.8110148906708, 268.79505014419556, 3.8646954783333953)
-(4, 10000, 1041.112842798233, 273.25793194770813, 3.8100004467481114)
-(8, 10000, 1022.0218458175659, 143.64133620262146, 7.115095646116066)
-(8, 10000, 1031.4755203723907, 144.16310334205627, 7.15492033994999)
-(8, 10000, 1034.291555404663, 143.88558387756348, 7.188291749121806)
-(8, 10000, 1034.9911291599274, 144.10508680343628, 7.182197048822341)
-(16, 10000, 1054.3339381217957, 73.39850378036499, 14.364515403157892)
-(16, 10000, 1010.6264357566833, 75.25770449638367, 13.428876717934529)
-(16, 10000, 1044.7247614860535, 74.02198815345764, 14.113708474300866)
-(16, 10000, 1042.1659934520721, 73.94862246513367, 14.093108954713081)
-(32, 10000, 1051.2897226810455, 63.89476823806763, 16.453455449811013)
-(32, 10000, 1050.2103514671326, 63.592018842697144, 16.514813817516313)
-(32, 10000, 1012.8798322677612, 65.41985893249512, 15.482757816902708)
-(32, 10000, 1025.2572581768036, 64.88021302223206, 15.80231029490433)
diff --git a/tests/population/scaling/scaling_results/comparison_result_astro2.dat b/tests/population/scaling/scaling_results/comparison_result_astro2.dat
deleted file mode 100644
index 983ea6b77..000000000
--- a/tests/population/scaling/scaling_results/comparison_result_astro2.dat
+++ /dev/null
@@ -1,60 +0,0 @@
-(4, 100, 14.10124158859253, 4.134139060974121, 3.4109258011436787)
-(4, 400, 61.055301666259766, 16.35676121711731, 3.7327256206666113)
-(4, 625, 95.8083848953247, 25.765241622924805, 3.718512960114394)
-(4, 1225, 191.25050354003906, 50.95959973335266, 3.7529828440718127)
-(4, 2500, 383.6548960208893, 103.80896878242493, 3.6957779324925037)
-(8, 100, 14.198569297790527, 2.543941020965576, 5.581328018525103)
-(8, 400, 60.321287631988525, 9.967990159988403, 6.051499516333662)
-(8, 625, 94.71923232078552, 15.711591720581055, 6.028621033775345)
-(8, 1225, 194.1308672428131, 30.583381414413452, 6.34759330932983)
-(8, 2500, 384.8839490413666, 61.58411884307861, 6.249727304243525)
-(12, 100, 14.217102766036987, 1.9129226207733154, 7.432136883973698)
-(12, 400, 60.82681107521057, 7.934520483016968, 7.666097933127044)
-(12, 625, 96.70819783210754, 12.379796743392944, 7.811775898802247)
-(12, 1225, 190.89420461654663, 23.577396154403687, 8.096492223586456)
-(12, 2500, 397.2485320568085, 47.053948640823364, 8.442405866702568)
-(16, 100, 13.985195875167847, 1.8815627098083496, 7.432755656914745)
-(16, 400, 61.11527132987976, 6.59982705116272, 9.260132251361469)
-(16, 625, 95.90889692306519, 9.987864971160889, 9.602542405208117)
-(16, 1225, 188.9516725540161, 19.277790546417236, 9.801521190877999)
-(16, 2500, 382.5960810184479, 40.0679407119751, 9.548683416717282)
-(20, 100, 14.192401885986328, 1.5446226596832275, 9.188264717608712)
-(20, 400, 61.247467041015625, 5.625759840011597, 10.886967944385157)
-(20, 625, 97.97649145126343, 9.02974557876587, 10.850415506906703)
-(20, 1225, 190.2177484035492, 17.080851078033447, 11.136315604798853)
-(20, 2500, 383.7110228538513, 34.42068696022034, 11.147686369458649)
-(24, 100, 14.295984745025635, 1.7024154663085938, 8.397471139065784)
-(24, 400, 60.98009443283081, 5.706386089324951, 10.68628961978361)
-(24, 625, 95.29834866523743, 8.202463388442993, 11.618259558404093)
-(24, 1225, 188.30058526992798, 16.213704109191895, 11.613668536307898)
-(24, 2500, 392.8527772426605, 33.833460569381714, 11.611368468709959)
-(28, 100, 14.291304349899292, 1.5414564609527588, 9.27129939243693)
-(28, 400, 60.64618754386902, 5.269887685775757, 11.50806073297586)
-(28, 625, 95.23345041275024, 8.036301612854004, 11.85040768758916)
-(28, 1225, 186.29137110710144, 16.276238441467285, 11.445603465262794)
-(28, 2500, 394.3067514896393, 32.23271560668945, 12.233122281754206)
-(32, 100, 14.191281080245972, 1.571908950805664, 9.028055392758208)
-(32, 400, 61.429462909698486, 5.237022876739502, 11.729844294272707)
-(32, 625, 96.13259482383728, 8.995407342910767, 10.68685287493944)
-(32, 1225, 192.896910905838, 16.203189611434937, 11.904872777005988)
-(32, 2500, 399.2666940689087, 32.46242141723633, 12.299350345347715)
-(36, 100, 13.927229166030884, 1.5818688869476318, 8.804287941274838)
-(36, 400, 60.33647704124451, 5.5185840129852295, 10.933325813156557)
-(36, 625, 95.46581268310547, 8.636940717697144, 11.053197631366793)
-(36, 1225, 194.48183345794678, 16.411016941070557, 11.850687508050305)
-(36, 2500, 387.9849512577057, 32.95813179016113, 11.772055337600458)
-(40, 100, 13.982583284378052, 1.6111986637115479, 8.67837318842349)
-(40, 400, 61.04871916770935, 5.691144943237305, 10.726966151205225)
-(40, 625, 94.21784400939941, 7.811094522476196, 12.062054010265824)
-(40, 1225, 190.91827774047852, 16.066108465194702, 11.883293216529696)
-(40, 2500, 388.0709626674652, 33.429218769073486, 11.608735619824982)
-(44, 100, 14.21125054359436, 1.737048625946045, 8.18126236152688)
-(44, 400, 61.47734880447388, 5.915903806686401, 10.391877693310295)
-(44, 625, 94.16870713233948, 8.427074670791626, 11.174542864646696)
-(44, 1225, 190.71016192436218, 15.719615697860718, 12.131986276885632)
-(44, 2500, 392.2753930091858, 33.89833736419678, 11.572113074297995)
-(48, 100, 14.414173126220703, 1.5484826564788818, 9.308578992416557)
-(48, 400, 61.174304723739624, 5.360774040222168, 11.411468617170883)
-(48, 625, 95.53823685646057, 9.054794549942017, 10.551121434011153)
-(48, 1225, 190.91729140281677, 15.882095575332642, 12.020913140665199)
-(48, 2500, 392.0420844554901, 33.41745948791504, 11.73165436460742)
diff --git a/tests/population/scaling/scaling_results/comparison_result_cluster2.dat b/tests/population/scaling/scaling_results/comparison_result_cluster2.dat
deleted file mode 100644
index 0b9138267..000000000
--- a/tests/population/scaling/scaling_results/comparison_result_cluster2.dat
+++ /dev/null
@@ -1,50 +0,0 @@
-(4, 100, 17.530393362045288, 4.754913568496704, 3.6867953769320843)
-(4, 400, 73.91634607315063, 19.321584463119507, 3.8255840877977714)
-(4, 625, 114.56839394569397, 30.45960521697998, 3.7613223523273636)
-(4, 1225, 231.09235262870789, 60.027222871780396, 3.8497925036833163)
-(4, 2500, 466.45902252197266, 122.86882734298706, 3.7963984243119464)
-(8, 100, 16.93968415260315, 2.813231945037842, 6.021431749515871)
-(8, 400, 73.41071081161499, 10.54165267944336, 6.9638711351938944)
-(8, 625, 111.85531425476074, 16.508870601654053, 6.775467380763997)
-(8, 1225, 225.93445348739624, 32.59254240989685, 6.93209049622316)
-(8, 2500, 460.64231610298157, 65.98871207237244, 6.980622922262476)
-(12, 100, 16.918346166610718, 2.0145938396453857, 8.397894321760027)
-(12, 400, 72.46919679641724, 7.917168617248535, 9.15342343960366)
-(12, 625, 114.03665566444397, 12.08104658126831, 9.439302704225812)
-(12, 1225, 228.76386547088623, 23.69902992248535, 9.652878882347748)
-(12, 2500, 468.6402156352997, 48.383867263793945, 9.685877589739237)
-(16, 100, 17.114651679992676, 1.863208293914795, 9.185581524024352)
-(16, 400, 72.29412269592285, 6.447221994400024, 11.213220633431982)
-(16, 625, 114.42502737045288, 10.020463705062866, 11.419134956063893)
-(16, 1225, 224.05144429206848, 19.879616022109985, 11.270411060398745)
-(16, 2500, 459.92475152015686, 39.26897215843201, 11.712166788185206)
-(20, 100, 17.14034938812256, 1.592360496520996, 10.764113669970431)
-(20, 400, 72.17513751983643, 6.184013605117798, 11.671244943592193)
-(20, 625, 116.0014705657959, 9.576918363571167, 12.112609313559998)
-(20, 1225, 229.0708658695221, 18.488805055618286, 12.389706375313486)
-(20, 2500, 465.14672780036926, 37.978049993515015, 12.247778068642175)
-(24, 100, 16.727715015411377, 1.609938621520996, 10.390281214328407)
-(24, 400, 73.3764419555664, 6.163752317428589, 11.904508516360663)
-(24, 625, 115.0853500366211, 9.489580869674683, 12.12754826763665)
-(24, 1225, 229.77985310554504, 18.294185161590576, 12.560267160079787)
-(24, 2500, 461.82390236854553, 36.947997093200684, 12.499294649277003)
-(28, 100, 16.906121969223022, 1.686905860900879, 10.021971208395968)
-(28, 400, 73.9054696559906, 6.208874225616455, 11.90319967363372)
-(28, 625, 116.12110328674316, 9.48776388168335, 12.239038063639141)
-(28, 1225, 228.12121391296387, 18.196850776672363, 12.536301842152058)
-(28, 2500, 466.3461253643036, 37.27383613586426, 12.511353102064888)
-(32, 100, 17.02801513671875, 1.699430227279663, 10.01983774525188)
-(32, 400, 72.43440103530884, 6.125530242919922, 11.825000965268398)
-(32, 625, 114.07859706878662, 9.18714451789856, 12.417198493670874)
-(32, 1225, 227.61294221878052, 18.364572763442993, 12.39413217779141)
-(32, 2500, 470.50201296806335, 37.635680198669434, 12.501488228308876)
-(36, 100, 16.765739679336548, 1.6341161727905273, 10.259821155007748)
-(36, 400, 71.90405225753784, 6.409330129623413, 11.218653245087664)
-(36, 625, 114.6719810962677, 9.576411962509155, 11.974420225988483)
-(36, 1225, 230.71015453338623, 18.751843690872192, 12.303331786286629)
-(36, 2500, 471.7755868434906, 37.441543102264404, 12.60032433906172)
-(40, 100, 16.983802556991577, 1.7513949871063232, 9.697299970609388)
-(40, 400, 73.24098634719849, 6.3537867069244385, 11.52713959808873)
-(40, 625, 114.03470826148987, 9.189575910568237, 12.409137197544357)
-(40, 1225, 228.31968879699707, 18.669682502746582, 12.229436079773071)
-(40, 2500, 460.6292335987091, 37.626529932022095, 12.242139640059928)
diff --git a/tests/population/scaling/scaling_results/comparison_result_david-Lenovo-IdeaPad-S340-14IWL.dat b/tests/population/scaling/scaling_results/comparison_result_david-Lenovo-IdeaPad-S340-14IWL.dat
deleted file mode 100644
index 702d34645..000000000
--- a/tests/population/scaling/scaling_results/comparison_result_david-Lenovo-IdeaPad-S340-14IWL.dat
+++ /dev/null
@@ -1,3 +0,0 @@
-(2, 225, 23.872895002365112, 17.51114845275879, 1.3632969343369403)
-(2, 625, 76.88419461250305, 63.15470623970032, 1.2173945409656914)
-(1, 100, 18.417582511901855, 19.06265616416931, 0.9661603479225548)
diff --git a/tests/population/scaling/scaling_results/comparison_result_laptop.dat b/tests/population/scaling/scaling_results/comparison_result_laptop.dat
deleted file mode 100644
index 64e82a8f4..000000000
--- a/tests/population/scaling/scaling_results/comparison_result_laptop.dat
+++ /dev/null
@@ -1,29 +0,0 @@
-(4, 100, 4.975594997406006, 2.3232288360595703)
-(4, 100, 4.787039518356323, 2.2747838497161865)
-(4, 100, 4.9317708015441895, 2.4268319606781006)
-(1, 100, 5.315765619277954, 5.674138784408569)
-(2, 100, 4.9390997886657715, 2.769941806793213)
-(2, 100, 5.208018779754639, 2.836611747741699)
-(2, 100, 5.186922311782837, 3.152923107147217)
-(4, 100, 5.072067499160767, 2.3781256675720215)
-(4, 100, 5.082597970962524, 2.3073325157165527)
-(4, 1000, 49.75706219673157, 30.233830213546753)
-(4, 1000, 53.46943283081055, 32.60539269447327)
-(4, 1000, 54.02741098403931, 30.801720142364502)
-(4, 1000, 55.66723918914795, 32.122862100601196)
-(4, 2000, 106.51247549057007, 61.482452392578125)
-(4, 2000, 109.3186149597168, 61.64964556694031)
-(4, 2000, 111.05836129188538, 91.57576203346252)
-(4, 2000, 121.61987137794495, 68.84247088432312)
-(4, 1000, 49.87850880622864, 30.613584995269775)
-(4, 1000, 52.58728384971619, 31.519263982772827)
-(4, 1000, 53.73133993148804, 31.784117937088013)
-(4, 1000, 54.716689348220825, 31.911094665527344)
-(4, 2000, 124.03876852989197, 62.09644532203674)
-(4, 2000, 103.91023874282837, 60.63083362579346)
-(4, 2000, 104.27078628540039, 61.83385968208313)
-(4, 2000, 104.66957712173462, 60.45007133483887)
-(4, 5000, 261.0527467727661, 154.01037573814392)
-(4, 5000, 259.3938636779785, 152.388818025589)
-(4, 5000, 260.7243824005127, 152.58654737472534)
-(4, 5000, 261.61197566986084, 152.4033432006836)
diff --git a/tests/population/scaling/scaling_script.py b/tests/population/scaling/scaling_script.py
new file mode 100644
index 000000000..2b64d3f42
--- /dev/null
+++ b/tests/population/scaling/scaling_script.py
@@ -0,0 +1,126 @@
+# Script to generate the test script :P 
+import socket, psutil
+import numpy as np
+import time
+import json
+
+from binarycpython.utils.grid import Population
+from binarycpython.utils.functions import get_help_all, get_help, create_hdf5
+
+
+import argparse
+
+amount_of_cores = psutil.cpu_count(logical=False)
+amount_of_cpus = psutil.cpu_count()
+hostname = socket.gethostname()
+
+if amount_of_cpus <= 4:
+    stepsize = 1
+elif 4 < amount_of_cpus <= 24:
+    stepsize = 2
+# elif 24 < amount_of_cpus <= 48:
+#     stepsize = 4
+
+cpu_list = [1]
+for i in range(1, int(amount_of_cpus/stepsize) + 1 ):
+    cpu_amt = i * stepsize 
+    if not cpu_amt in cpu_list:
+        cpu_list.append(i * stepsize)
+
+
+amt_repeats = 5
+
+resolution = {'M_1': 10, 'per': 10}
+total_systems = np.prod([el for el in resolution.values()])
+result_dir = 'scaling_results'
+
+
+test_pop = Population()
+
+test_pop.set(
+    verbose=1, 
+    binary=1,
+)
+
+test_pop.add_grid_variable(
+    name="M_1",
+    longname="log primary mass",
+    valuerange=[1, 100],
+    resolution="{}".format(resolution['M_1']),
+    spacingfunc="const(1, 100, {})".format(resolution['M_1']),
+    precode="",
+    # precode="M_1=math.exp(lnm1)",
+    probdist="Kroupa2001(M_1)",
+    # probdist='self.custom_options["extra_prob_function"](M_1)',
+    dphasevol="dlnm1",
+    parameter_name="M_1",
+    condition="",
+)
+
+test_pop.add_grid_variable(
+    name="period",
+    longname="period",
+    valuerange=["M_1", 20],
+    resolution="{}".format(resolution['per']),
+    spacingfunc="np.linspace(1, 10, {})".format(resolution['per']),
+    precode="orbital_period = period**2",
+    probdist="flat(orbital_period)",
+    parameter_name="orbital_period",
+    dphasevol="dper",
+    condition='self.grid_options["binary"]==1',
+)
+
+#######################################################################################
+
+# Scaling dict:
+result_dict = {}
+
+#
+result_dict['amt_systems'] = total_systems
+
+
+# Linear runs
+linear_times = []
+for repeat in range(amt_repeats):
+    total_lin_start = time.time()
+
+    evolve_lin_time = test_pop.test_evolve_population_lin()
+
+    total_lin_stop = time.time()
+
+    total_lin = total_lin_stop - total_lin_start
+
+    print("linear run with {} systems: {} of which {} spent on evolving the systems".format(total_systems, total_lin, evolve_lin_time))
+    linear_times.append(total_lin)
+
+
+result_dict['linear'] = linear_times
+
+#######################################################################################
+# MP runs
+mp_dict = {}
+for cpu_amt in cpu_list:
+
+    mp_times = []
+
+    test_pop.set(amt_cores=cpu_amt)
+
+    # 
+    for repeat in range(amt_repeats):
+        # MP
+        total_mp_start = time.time()
+
+        evolve_mp_time = test_pop.evolve_population_mp_chunks()
+        total_mp_stop = time.time()
+
+        total_mp = total_mp_stop - total_mp_start
+        mp_times.append(total_mp)
+        print("MP ({} nodes) run with {} systems: {} of which {} spent on evolving the systems".format(cpu_amt, total_systems, total_mp, evolve_mp_time))
+
+    mp_dict[cpu_amt] = mp_times
+
+result_dict['mp'] = mp_dict
+
+
+with open('scaling_results/{}_{}_systems.json'.format(hostname, total_systems), 'w') as f:
+    f.write(json.dumps(result_dict))
\ No newline at end of file
diff --git a/tests/population/sizes_for_commands.png b/tests/population/sizes_for_commands.png
deleted file mode 100644
index 7dc21fa6136512e49514a4b918220b4eea4839da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 31669
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

-- 
GitLab