From 63cdd9da021080c51c51acb44514313746112fe1 Mon Sep 17 00:00:00 2001 From: Ishaan Desai Date: Fri, 24 Jan 2025 16:40:53 +0100 Subject: [PATCH] Fix bug where the Micro Manager cannot handle vector data provided by a micro simulation object --- .../run-adaptivity-tests-parallel.yml | 80 +++++++++++++++++++ ...st.yml => run-adaptivity-tests-serial.yml} | 38 +-------- micro_manager/adaptivity/adaptivity.py | 2 +- micro_manager/micro_manager.py | 6 +- 4 files changed, 86 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/run-adaptivity-tests-parallel.yml rename .github/workflows/{run-adaptivity-test.yml => run-adaptivity-tests-serial.yml} (64%) diff --git a/.github/workflows/run-adaptivity-tests-parallel.yml b/.github/workflows/run-adaptivity-tests-parallel.yml new file mode 100644 index 00000000..4f36e48a --- /dev/null +++ b/.github/workflows/run-adaptivity-tests-parallel.yml @@ -0,0 +1,80 @@ +name: Test adaptivity functionality in parallel +on: + push: + branches: + - main + - develop + pull_request: + branches: + - "*" +jobs: + adaptivity_integration_test_parallel: + name: Adaptivity integration test in parallel + runs-on: ubuntu-latest + container: precice/precice:nightly + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + path: micro-manager + + - name: Install sudo for MPI + working-directory: micro-manager + run: | + apt-get -qq update + apt-get -qq install sudo + + - name: Use mpi4py + uses: mpi4py/setup-mpi@v1 + + - name: Install dependencies + working-directory: micro-manager + run: | + apt-get -qq update + apt-get -qq install python3-dev python3-pip git python-is-python3 pkg-config + pip3 install --upgrade pip + + - name: Install Micro Manager + working-directory: micro-manager + run: pip3 install . + + - name: Run integration test with global adaptivity in parallel + timeout-minutes: 3 + working-directory: micro-manager/tests/integration/test_unit_cube + run: | + mpiexec -n 2 --allow-run-as-root micro-manager-precice micro-manager-config-global-adaptivity.json & + python3 unit_cube.py + + adaptivity_unit_tests_parallel: + name: Adaptivity unit tests in parallel + runs-on: ubuntu-latest + container: precice/precice:nightly + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + path: micro-manager + + - name: Install sudo for MPI + working-directory: micro-manager + run: | + apt-get -qq update + apt-get -qq install sudo + + - name: Use mpi4py + uses: mpi4py/setup-mpi@v1 + + - name: Install Dependencies + working-directory: micro-manager + run: | + apt-get -qq update + apt-get -qq install python3-dev python3-pip git python-is-python3 pkg-config + pip3 install --upgrade pip + + - name: Install Micro Manager + working-directory: micro-manager + run: pip3 install --user . + + - name: Run parallel unit tests + working-directory: micro-manager/tests/unit + run: mpiexec -n 2 --allow-run-as-root python3 -m unittest test_adaptivity_parallel.py diff --git a/.github/workflows/run-adaptivity-test.yml b/.github/workflows/run-adaptivity-tests-serial.yml similarity index 64% rename from .github/workflows/run-adaptivity-test.yml rename to .github/workflows/run-adaptivity-tests-serial.yml index e949a007..391968b6 100644 --- a/.github/workflows/run-adaptivity-test.yml +++ b/.github/workflows/run-adaptivity-tests-serial.yml @@ -1,4 +1,4 @@ -name: Test adaptivity functionality +name: Test adaptivity functionality in serial on: push: branches: @@ -9,7 +9,7 @@ on: - "*" jobs: adaptivity_integration_tests: - name: Run adaptivity integration tests + name: Adaptivity integration tests in serial runs-on: ubuntu-latest container: precice/precice:nightly steps: @@ -67,37 +67,3 @@ jobs: - name: Run unit tests working-directory: micro-manager/tests/unit run: python3 -m unittest test_adaptivity_serial.py - - adaptivity_unit_tests_parallel: - name: Run adaptivity unit tests in parallel - runs-on: ubuntu-latest - container: precice/precice:nightly - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - with: - path: micro-manager - - - name: Install sudo for MPI - working-directory: micro-manager - run: | - apt-get -qq update - apt-get -qq install sudo - - - name: Use mpi4py - uses: mpi4py/setup-mpi@v1 - - - name: Install Dependencies - working-directory: micro-manager - run: | - apt-get -qq update - apt-get -qq install python3-dev python3-pip git python-is-python3 pkg-config - pip3 install --upgrade pip - - - name: Install Micro Manager - working-directory: micro-manager - run: pip3 install --user . - - - name: Run unit tests - working-directory: micro-manager/tests/unit - run: mpiexec -n 2 --allow-run-as-root python3 -m unittest test_adaptivity_parallel.py diff --git a/micro_manager/adaptivity/adaptivity.py b/micro_manager/adaptivity/adaptivity.py index bcf156ef..83b00003 100644 --- a/micro_manager/adaptivity/adaptivity.py +++ b/micro_manager/adaptivity/adaptivity.py @@ -78,7 +78,7 @@ def _get_similarity_dists( data_diff = np.zeros_like(_similarity_dists) for name in data.keys(): - data_vals = data[name] + data_vals = np.array(data[name]) if data_vals.ndim == 1: # If the adaptivity data is a scalar for each simulation, # expand the dimension to make it a 2D array to unify the calculation. diff --git a/micro_manager/micro_manager.py b/micro_manager/micro_manager.py index a9e0b337..032bcaeb 100644 --- a/micro_manager/micro_manager.py +++ b/micro_manager/micro_manager.py @@ -98,7 +98,7 @@ def __init__(self, config_file: str) -> None: self._is_adaptivity_on = self._config.turn_on_adaptivity() if self._is_adaptivity_on: - self._data_for_adaptivity: Dict[str, np.ndarray] = dict() + self._data_for_adaptivity: Dict[str, list] = dict() self._adaptivity_data_names = self._config.get_data_for_adaptivity() @@ -357,7 +357,7 @@ def initialize(self) -> None: if self._is_adaptivity_on: for name in self._adaptivity_data_names: - self._data_for_adaptivity[name] = np.zeros((self._local_number_of_sims)) + self._data_for_adaptivity[name] = [0] * self._local_number_of_sims # Create lists of local and global IDs sim_id = np.sum(nms_all_ranks[: self._rank]) @@ -725,7 +725,7 @@ def _solve_micro_simulations_with_adaptivity( active_sim_ids = self._adaptivity_controller.get_active_sim_ids() inactive_sim_ids = self._adaptivity_controller.get_inactive_sim_ids() - micro_sims_output = [None] * self._local_number_of_sims + micro_sims_output = [0] * self._local_number_of_sims # Solve all active micro simulations for active_id in active_sim_ids: