From 95ed24aa14d3d20f0960f613e0964c2e4e62dba8 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Sun, 6 Oct 2024 22:47:14 -0300 Subject: [PATCH 01/16] Squashed commit of the following: commit c588872a345912c01791f52cf52fcb9b60292764 Author: gAldeia Date: Sun Oct 6 22:45:32 2024 -0300 pandas dataframe for `model`, numpy array for `fit` commit 0c1f8e4b69b61a4382d65feb42863c6060f97a4c Author: gAldeia Date: Sun Oct 6 18:56:02 2024 -0300 Misplaced values commit 61ea4d44d93863d83f78e6332cf4b2bf5377b10a Author: gAldeia Date: Sun Oct 6 18:48:11 2024 -0300 Using numpy arrays instead of dataframes commit f3cafc7765d729345316039b5b7867c8b84cc837 Author: gAldeia Date: Sun Oct 6 13:34:57 2024 -0300 Fixed methods that does not take X=None as argument in model function commit a9e3f128b5ef29db32cefa26749d10cc1e5b5cbe Author: gAldeia Date: Sun Oct 6 13:15:23 2024 -0300 Fix pysr commit db260003e93e9b286bac0f8ecc321d077c6c8d3a Author: gAldeia Date: Sun Oct 6 13:14:01 2024 -0300 Fix rils-rols commit bc7a17c3db5e507e1a0292de1559729f3ecebd0f Author: gAldeia Date: Sun Oct 6 13:13:21 2024 -0300 Fix tir commit 54c5ac412a91522860e904bb6411104a2deebe04 Author: gAldeia Date: Sun Oct 6 10:02:18 2024 -0300 Missing X argument in model commit 8db4acf981e1a7e73e1017a710eeeb014345b91b Author: gAldeia Date: Sat Oct 5 09:31:02 2024 -0300 Passing training data to algorithm.model in test_population commit 62f65490bb172f83fdd38b53745e3ac372eacb42 Author: gAldeia Date: Fri Oct 4 18:59:11 2024 -0300 Stop pushing image commit 508a7715c688fdc0de8d5d1211e862826cf84f47 Author: gAldeia Date: Fri Oct 4 18:49:40 2024 -0300 Removed incomplete line in test_population commit b2c33edc79ff6c20dbc781c2cc4aa342fb8a5354 Author: gAldeia Date: Fri Oct 4 18:16:40 2024 -0300 Fixed checkout code step commit 801ac46df3e59f727dff8e3f412f6c35036a01d4 Author: gAldeia Date: Fri Oct 4 18:04:16 2024 -0300 Removed loging in into dockerhub This is probably something we want to make a conditional check to run when pushing to master branch, but not docker-compose. Right now, as we do not have plans on merging this branch, I think we can leave as it is. I will open an issue regarding this. commit 5b943e9d36ab1d3292dc644ef6c35c02475f0247 Author: gAldeia Date: Fri Oct 4 17:47:15 2024 -0300 Subsampling in test_population y_train is a np.array, we can pass a list of indexes directly to the operator[]. X_train is a dataframe, and our sample_idx is a list of randomly sampled integers between [0, len(X_train)), so we should operate with iloc. --- .github/workflows/ci-docker.yml | 17 +++++++++-------- algorithms/tir/regressor.py | 2 +- experiment/methods/afp/regressor.py | 2 +- experiment/methods/eplex/regressor.py | 2 +- experiment/methods/gplearn/regressor.py | 2 +- experiment/methods/ps-tree/regressor.py | 2 +- experiment/methods/pysr/regressor.py | 2 +- experiment/methods/rils-rols/regressor.py | 2 +- experiment/methods/tir/regressor.py | 2 +- experiment/test_population.py | 17 +++++++---------- 10 files changed, 24 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 1d3e83b85..b5043003a 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -5,6 +5,7 @@ on: push: branches: - docker-compose + - main # paths: # - 'algorithms/**' # - 'experiment/**' @@ -54,11 +55,11 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Log in to Docker Hub - uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_KEY }} + # - name: Log in to Docker Hub + # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a + # with: + # username: ${{ secrets.DOCKERHUB_USERNAME }} + # password: ${{ secrets.DOCKERHUB_KEY }} - name: Make docker-compose.yml file run: bash scripts/make_docker_compose_file.sh @@ -71,9 +72,9 @@ jobs: - name: Test docker image run: docker compose run --build ${{ matrix.alg }} bash test.sh - - - name: Push docker image - run: docker compose push ${{ matrix.alg }} + # - + # name: Push docker image + # run: docker compose push ${{ matrix.alg }} ################################################################################ # tests ################################################################################ diff --git a/algorithms/tir/regressor.py b/algorithms/tir/regressor.py index 148dc3aa1..f1748100b 100644 --- a/algorithms/tir/regressor.py +++ b/algorithms/tir/regressor.py @@ -37,7 +37,7 @@ def model(e, X): def get_population(est): pop = [] - for i in range(min(100, length(est.front))): + for i in range(min(100, len(est.front))): pop.append(est.create_model_from(i)) return pop diff --git a/experiment/methods/afp/regressor.py b/experiment/methods/afp/regressor.py index ba75a290e..fd7361d0d 100644 --- a/experiment/methods/afp/regressor.py +++ b/experiment/methods/afp/regressor.py @@ -42,7 +42,7 @@ def complexity(est): return len(est.best_estimator_) -def model(est): +def model(est, X=None): return est.stack_2_eqn(est.best_estimator_) eval_kwargs = dict(use_dataframe=False) diff --git a/experiment/methods/eplex/regressor.py b/experiment/methods/eplex/regressor.py index b40cb1802..35f91d494 100644 --- a/experiment/methods/eplex/regressor.py +++ b/experiment/methods/eplex/regressor.py @@ -41,7 +41,7 @@ def complexity(est): return len(est.best_estimator_) -def model(est): +def model(est, X=None): return est.stack_2_eqn(est.best_estimator_) eval_kwargs = dict(use_dataframe=False) \ No newline at end of file diff --git a/experiment/methods/gplearn/regressor.py b/experiment/methods/gplearn/regressor.py index 3c070c342..32f3ddbbe 100755 --- a/experiment/methods/gplearn/regressor.py +++ b/experiment/methods/gplearn/regressor.py @@ -31,7 +31,7 @@ ) -def model(est): +def model(est, X=None): return str(est._program) def complexity(est): diff --git a/experiment/methods/ps-tree/regressor.py b/experiment/methods/ps-tree/regressor.py index b61b350fa..a567f702b 100644 --- a/experiment/methods/ps-tree/regressor.py +++ b/experiment/methods/ps-tree/regressor.py @@ -19,7 +19,7 @@ def complexity(est): return total_complexity -def model(e): +def model(e, X=None): return e.model() diff --git a/experiment/methods/pysr/regressor.py b/experiment/methods/pysr/regressor.py index 373443561..4bc1cda25 100644 --- a/experiment/methods/pysr/regressor.py +++ b/experiment/methods/pysr/regressor.py @@ -6,7 +6,7 @@ def complexity(est): return est.get_best()["complexity"] -def model(est): +def model(est, X=None): return str(est.sympy()) diff --git a/experiment/methods/rils-rols/regressor.py b/experiment/methods/rils-rols/regressor.py index 9f2b52ed8..d2149d170 100644 --- a/experiment/methods/rils-rols/regressor.py +++ b/experiment/methods/rils-rols/regressor.py @@ -7,6 +7,6 @@ # if there is still that requirement (as in paper), otherwise keep 1 million. est = RILSROLSRegressor(max_seconds=2*60*60, max_fit_calls=1000*1000, max_complexity=50, sample_size=0, verbose=True) -def model(est): +def model(est, X=None): return str(est.model_string()) diff --git a/experiment/methods/tir/regressor.py b/experiment/methods/tir/regressor.py index 8eba930c1..2d1072261 100644 --- a/experiment/methods/tir/regressor.py +++ b/experiment/methods/tir/regressor.py @@ -37,7 +37,7 @@ def model(e, X): def get_population(est): pop = [] - for i in range(length(est.front)): + for i in range(len(est.front)): pop.append(est.create_model_from(i)) return pop diff --git a/experiment/test_population.py b/experiment/test_population.py index 05b53fe4f..eaa1f3ee8 100644 --- a/experiment/test_population.py +++ b/experiment/test_population.py @@ -31,8 +31,6 @@ def test_population(ml): locals(), ['est','hyper_params','complexity']) - algorithm.get_population, - features, labels, feature_names = read_file( dataset, use_dataframe=True @@ -48,10 +46,10 @@ def test_population(ml): # Few samples to try to make it quick sample_idx = np.random.choice(np.arange(len(X_train)), size=10) - y_train = y_train.iloc[sample_idx] - X_train = X_train.iloc[sample_idx, :] + y_train = y_train[sample_idx] + X_train = X_train.iloc[sample_idx] - algorithm.est.fit(X_train, y_train) + algorithm.est.fit(X_train.values, y_train) if 'get_population' not in dir(algorithm): algorithm.get_population = lambda est: [est] @@ -59,14 +57,13 @@ def test_population(ml): algorithm.get_best_solution = lambda est: est population = algorithm.get_population(algorithm.est) - best_model = algorithm.get_best_solution(algorithm.est) - print(algorithm.model(best_model)) - print(algorithm.est.predict(X_train)) + print(algorithm.model(best_model, X_train)) + print(algorithm.est.predict(X_train.values)) # assert that population has at least 1 and no more than 100 individuals assert 1 <= len(population) <= 100, "Population size is not within the expected range" for p in population: - print(algorithm.model(p)) - print(p.predict(X_train)) + print(algorithm.model(p, X_train)) + print(p.predict(X_train.values)) From fab95277515c1c408f95bd6099f5ae2254357f70 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 10:57:53 -0300 Subject: [PATCH 02/16] Running docker build only for changed algorithms --- .github/workflows/ci-docker.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index b5043003a..46bdb4b5e 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -25,6 +25,21 @@ on: # APP: srbench jobs: + ################################################################################ + # Check for changed files + ################################################################################ + check-changes: + runs-on: ubuntu-latest + outputs: + changes-detected: ${{ steps.check.outputs.changes-detected }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - id: check + run: | + echo "::set-output name=changes-detected::$(git diff --name-only HEAD~1..HEAD | grep -E '^algorithms/' || git diff --name-only HEAD~1..HEAD | grep -E '^experiment/methods/')" + ################################################################################ # get a list of algorithms ################################################################################ @@ -43,6 +58,7 @@ jobs: build-and-test: runs-on: ubuntu-latest needs: + - check-changes - list-algs defaults: run: @@ -51,6 +67,7 @@ jobs: matrix: alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} fail-fast: false + if: needs.check-changes.outputs.changes-detected != '' steps: - name: Checkout code From 7eb5d90bab8f9c088df9b45bcdefb5946c1f03aa Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:06:16 -0300 Subject: [PATCH 03/16] print changes for debugging. stop using set-output --- .github/workflows/ci-docker.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 46bdb4b5e..98c9085dc 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -31,14 +31,21 @@ jobs: check-changes: runs-on: ubuntu-latest outputs: - changes-detected: ${{ steps.check.outputs.changes-detected }} + changed-algs: ${{ steps.check.outputs.changed-algs }} + unchanged-algs: ${{ steps.check.outputs.unchanged-algs }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - id: check run: | - echo "::set-output name=changes-detected::$(git diff --name-only HEAD~1..HEAD | grep -E '^algorithms/' || git diff --name-only HEAD~1..HEAD | grep -E '^experiment/methods/')" + echo "changed-algs=$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2)" >> $GITHUB_OUTPUT + echo "unchanged-algs=$(comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2))" >> $GITHUB_OUTPUT + echo "Changed Algorithms:" + git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 + echo "" + echo "Unchanged Algorithms:" + comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2) ################################################################################ # get a list of algorithms @@ -72,6 +79,12 @@ jobs: - name: Checkout code uses: actions/checkout@v3 + - + name: Print Changed Algorithms + run: echo "Changed Algorithms: ${{ needs.check-changes.outputs.changed-algs }}" + - + name: Print Unchanged Algorithms + run: echo "Unchanged Algorithms: ${{ needs.check-changes.outputs.unchanged-algs }}" # - name: Log in to Docker Hub # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # with: From 8a7c57c76ea72d957838c244f937552441ed1e53 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:10:39 -0300 Subject: [PATCH 04/16] Falling back to using set-output --- .github/workflows/ci-docker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 98c9085dc..1f676c325 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -39,8 +39,8 @@ jobs: fetch-depth: 0 - id: check run: | - echo "changed-algs=$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2)" >> $GITHUB_OUTPUT - echo "unchanged-algs=$(comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2))" >> $GITHUB_OUTPUT + echo "::set-output name=changed-algs::$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2)" + echo "::set-output name=unchanged-algs::$(comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2))" echo "Changed Algorithms:" git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 echo "" From 755c186034018bc75f3f7fe0c6d82143064e8e2f Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:11:36 -0300 Subject: [PATCH 05/16] Removed printing statements in build-and-test --- .github/workflows/ci-docker.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 1f676c325..0d38e7c1f 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -79,12 +79,6 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - - name: Print Changed Algorithms - run: echo "Changed Algorithms: ${{ needs.check-changes.outputs.changed-algs }}" - - - name: Print Unchanged Algorithms - run: echo "Unchanged Algorithms: ${{ needs.check-changes.outputs.unchanged-algs }}" # - name: Log in to Docker Hub # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # with: From 2a315852f0cb5052e3426cb894b3cd0479022a9d Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:13:36 -0300 Subject: [PATCH 06/16] Changing feat to check workflow correctness --- experiment/methods/feat/regressor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/experiment/methods/feat/regressor.py b/experiment/methods/feat/regressor.py index 56fe27f53..4f5293b85 100644 --- a/experiment/methods/feat/regressor.py +++ b/experiment/methods/feat/regressor.py @@ -17,6 +17,7 @@ functions=['+','-','*','/','^2','^3','sqrt','sin','cos','exp','log'], otype='f' ) + # want to tune your estimator? wrap it in a sklearn CV class. def model(est, X=None) -> str: From 4a8ed47c682a7263832b7058749c86bd3b37a655 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:22:35 -0300 Subject: [PATCH 07/16] Building only if there is a change --- .github/workflows/ci-docker.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 0d38e7c1f..269b141b5 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -43,7 +43,6 @@ jobs: echo "::set-output name=unchanged-algs::$(comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2))" echo "Changed Algorithms:" git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 - echo "" echo "Unchanged Algorithms:" comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2) @@ -93,8 +92,19 @@ jobs: # - # name: Build docker image # run: docker compose build ${{ matrix.alg }} + - + name: Check if algorithm has changed + id: check_algorithm + run: | + CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') + if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then + echo "::set-output name=should_run::true" + else + echo "::set-output name=should_run::false" + fi - name: Test docker image + if: steps.check_algorithm.outputs.should_run == 'true' run: docker compose run --build ${{ matrix.alg }} bash test.sh # - # name: Push docker image From 9bfca58e6e32bbc05a5153bccb30e0e00c886d84 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:22:59 -0300 Subject: [PATCH 08/16] Always try to make docker compose file --- .github/workflows/ci-docker.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 269b141b5..132127803 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -73,7 +73,6 @@ jobs: matrix: alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} fail-fast: false - if: needs.check-changes.outputs.changes-detected != '' steps: - name: Checkout code From 3d14dbe62ed34b0dda83e97f3bd259bf6bfc6043 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:25:05 -0300 Subject: [PATCH 09/16] Running make_docker_compose everytime can mislead test results --- .github/workflows/ci-docker.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 132127803..76747d3dd 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -77,6 +77,16 @@ jobs: - name: Checkout code uses: actions/checkout@v3 + - + name: Check if algorithm has changed + id: check_algorithm + run: | + CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') + if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then + echo "::set-output name=should_run::true" + else + echo "::set-output name=should_run::false" + fi # - name: Log in to Docker Hub # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # with: @@ -84,6 +94,7 @@ jobs: # password: ${{ secrets.DOCKERHUB_KEY }} - name: Make docker-compose.yml file + if: steps.check_algorithm.outputs.should_run == 'true' run: bash scripts/make_docker_compose_file.sh # - # name: Pull docker image @@ -91,16 +102,7 @@ jobs: # - # name: Build docker image # run: docker compose build ${{ matrix.alg }} - - - name: Check if algorithm has changed - id: check_algorithm - run: | - CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') - if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then - echo "::set-output name=should_run::true" - else - echo "::set-output name=should_run::false" - fi + - name: Test docker image if: steps.check_algorithm.outputs.should_run == 'true' From 8b48aec16f2971525d2899b3603c239c270749fe Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 11:33:29 -0300 Subject: [PATCH 10/16] setting status as skipped if an algorithm has no changes --- .github/workflows/ci-docker.yml | 111 ++++++++++++++------------------ 1 file changed, 50 insertions(+), 61 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 76747d3dd..3521a6cba 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -58,65 +58,54 @@ jobs: - id: set-matrix run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" - ################################################################################ - # build each algorithm in parallel and run tests - ################################################################################ - build-and-test: - runs-on: ubuntu-latest - needs: - - check-changes - - list-algs - defaults: - run: - shell: bash -l {0} - strategy: - matrix: - alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} - fail-fast: false - steps: - - - name: Checkout code - uses: actions/checkout@v3 - - - name: Check if algorithm has changed - id: check_algorithm - run: | - CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') - if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then - echo "::set-output name=should_run::true" - else - echo "::set-output name=should_run::false" - fi - # - name: Log in to Docker Hub - # uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_KEY }} - - - name: Make docker-compose.yml file - if: steps.check_algorithm.outputs.should_run == 'true' - run: bash scripts/make_docker_compose_file.sh - # - - # name: Pull docker image - # run: docker compose pull ${{ matrix.alg }} - # - - # name: Build docker image - # run: docker compose build ${{ matrix.alg }} +################################################################################ +# build each algorithm in parallel and run tests +################################################################################ +build-and-test: + runs-on: ubuntu-latest + needs: + - check-changes + - list-algs + defaults: + run: + shell: bash -l {0} + strategy: + matrix: + alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} + fail-fast: false + if: needs.check-changes.outputs.changes-detected != '' + steps: + - + name: Checkout code + uses: actions/checkout@v3 + - + name: Check if algorithm has changed + id: check_algorithm + run: | + CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') + if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then + echo "::set-output name=should_run::true" + else + echo "::set-output name=status::skipped" + fi + - + name: Build and Test Algorithm + if: steps.check_algorithm.outputs.should_run == 'true' + run: | + # Log in to Docker Hub + # docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_KEY }} + + # Make docker-compose.yml file + bash scripts/make_docker_compose_file.sh + + # Pull docker image + # docker compose pull ${{ matrix.alg }} + + # Build docker image + # docker compose build ${{ matrix.alg }} + + # Test docker image + docker compose run --build ${{ matrix.alg }} bash test.sh - - - name: Test docker image - if: steps.check_algorithm.outputs.should_run == 'true' - run: docker compose run --build ${{ matrix.alg }} bash test.sh - # - - # name: Push docker image - # run: docker compose push ${{ matrix.alg }} - ################################################################################ - # tests - ################################################################################ - # - - # name: Test Method - # run: | - # docker compose run ${{ matrix.alg }} bash test.sh - # - - # name: Push docker image - # run: docker compose push ${{ matrix.alg }} \ No newline at end of file + # Push docker image + # docker compose push ${{ matrix.alg }} From 56442547bcef57023ba5171ca419fa4f04429526 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:01:26 -0300 Subject: [PATCH 11/16] Rework workflow structure --- .github/workflows/ci-docker.yml | 135 ++++++++++++++------------------ 1 file changed, 60 insertions(+), 75 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 3521a6cba..01a1f74e6 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -1,54 +1,41 @@ name: Docker CI -# Controls when the action will run. on: push: branches: - docker-compose - main - # paths: - # - 'algorithms/**' - # - 'experiment/**' - # - '.github/workflows/**' + paths: + - 'algorithms/**' + - 'experiment/**' + - '.github/workflows/**' pull_request: branches: - docker-compose - # paths: - # - 'algorithms/**' - # - 'experiment/**' - # - '.github/workflows/**' - # workflow_dispatch: - -# env: -# USER: ${{ secrets.DOCKER_HUB_USERNAME }} -# PASS: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} -# APP: srbench + paths: + - 'algorithms/**' + - 'experiment/**' + - '.github/workflows/**' jobs: - ################################################################################ - # Check for changed files - ################################################################################ check-changes: runs-on: ubuntu-latest outputs: changed-algs: ${{ steps.check.outputs.changed-algs }} unchanged-algs: ${{ steps.check.outputs.unchanged-algs }} + changes-detected: ${{ steps.check.outputs.changes-detected }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - id: check run: | - echo "::set-output name=changed-algs::$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2)" - echo "::set-output name=unchanged-algs::$(comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2))" - echo "Changed Algorithms:" - git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 - echo "Unchanged Algorithms:" - comm -23 <(ls algorithms/) <(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2) - - ################################################################################ - # get a list of algorithms - ################################################################################ + CHANGED_ALGS=$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 | tr '\n' ',') + UNCHANGED_ALGS=$(comm -23 <(ls algorithms/) <(echo "$CHANGED_ALGS")) + echo "::set-output name=changed-algs::$CHANGED_ALGS" + echo "::set-output name=unchanged-algs::$UNCHANGED_ALGS" + echo "::set-output name=changes-detected::$(test -z "$CHANGED_ALGS" && echo "false" || echo "true")" + list-algs: runs-on: ubuntu-latest outputs: @@ -57,55 +44,53 @@ jobs: - uses: actions/checkout@v3 - id: set-matrix run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" - -################################################################################ -# build each algorithm in parallel and run tests -################################################################################ -build-and-test: - runs-on: ubuntu-latest - needs: - - check-changes - - list-algs - defaults: - run: - shell: bash -l {0} - strategy: - matrix: - alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} - fail-fast: false - if: needs.check-changes.outputs.changes-detected != '' - steps: - - - name: Checkout code - uses: actions/checkout@v3 - - - name: Check if algorithm has changed - id: check_algorithm - run: | - CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') - if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then - echo "::set-output name=should_run::true" - else - echo "::set-output name=status::skipped" - fi - - - name: Build and Test Algorithm - if: steps.check_algorithm.outputs.should_run == 'true' - run: | - # Log in to Docker Hub - # docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_KEY }} - # Make docker-compose.yml file - bash scripts/make_docker_compose_file.sh + build-and-test: + runs-on: ubuntu-latest + needs: + - check-changes + - list-algs + defaults: + run: + shell: bash -l {0} + strategy: + matrix: + alg: ${{ fromJson(needs.list-algs.outputs.matrix) }} + fail-fast: false + if: needs.check-changes.outputs.changes-detected == 'true' + steps: + - uses: actions/checkout@v3 + - name: Print changes detected status + run: echo "Changes detected: ${{ needs.check-changes.outputs.changes-detected }}" + - name: Check if algorithm has changed + id: check_algorithm + run: | + CHANGED_ALGS=$(echo "${{ needs.check-changes.outputs.changed-algs }}" | tr ',' '\n') + if [[ "$CHANGED_ALGS" == *"${{ matrix.alg }}"* ]]; then + echo "::set-output name=should_run::true" + else + echo "::set-output name=should_run::false" + echo "::set-output name=status::skipped" + fi + - name: Print should_run status + run: echo "Should run: ${{ steps.check_algorithm.outputs.should_run }}" + - name: Build and Test Algorithm + if: steps.check_algorithm.outputs.should_run == 'true' + run: | + # Log in to Docker Hub + # docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_KEY }} + + # Make docker-compose.yml file + bash scripts/make_docker_compose_file.sh - # Pull docker image - # docker compose pull ${{ matrix.alg }} + # Pull docker image + # docker compose pull ${{ matrix.alg }} - # Build docker image - # docker compose build ${{ matrix.alg }} + # Build docker image + # docker compose build ${{ matrix.alg }} - # Test docker image - docker compose run --build ${{ matrix.alg }} bash test.sh + # Test docker image + docker compose run --build ${{ matrix.alg }} bash test.sh - # Push docker image - # docker compose push ${{ matrix.alg }} + # Push docker image + # docker compose push ${{ matrix.alg }} From 7256144b08e1aa9dedcba6f6429b7580d15c72ea Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:10:16 -0300 Subject: [PATCH 12/16] Removed line with invalid yaml syntax --- .github/workflows/ci-docker.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 01a1f74e6..e7ed76798 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -60,8 +60,6 @@ jobs: if: needs.check-changes.outputs.changes-detected == 'true' steps: - uses: actions/checkout@v3 - - name: Print changes detected status - run: echo "Changes detected: ${{ needs.check-changes.outputs.changes-detected }}" - name: Check if algorithm has changed id: check_algorithm run: | From be1ff400a0c0c1348298d6a1390f46930be4aa70 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:12:33 -0300 Subject: [PATCH 13/16] Wrapping run command in multiline settings --- .github/workflows/ci-docker.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index e7ed76798..7c06c454c 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -71,7 +71,8 @@ jobs: echo "::set-output name=status::skipped" fi - name: Print should_run status - run: echo "Should run: ${{ steps.check_algorithm.outputs.should_run }}" + run: | + echo "Should run: ${{ steps.check_algorithm.outputs.should_run }}" - name: Build and Test Algorithm if: steps.check_algorithm.outputs.should_run == 'true' run: | From de6f63126fb4f05c532d869ebe6c355db8d9123c Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:29:51 -0300 Subject: [PATCH 14/16] Trying to improve checking and run a test --- .github/workflows/ci-docker.yml | 27 ++++++++++++++++++++------- experiment/methods/feat/regressor.py | 1 - 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 7c06c454c..a4599ef79 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -7,14 +7,14 @@ on: - main paths: - 'algorithms/**' - - 'experiment/**' + - 'experiment/methods/**' - '.github/workflows/**' pull_request: branches: - docker-compose paths: - 'algorithms/**' - - 'experiment/**' + - 'experiment/methods/**' - '.github/workflows/**' jobs: @@ -23,6 +23,8 @@ jobs: outputs: changed-algs: ${{ steps.check.outputs.changed-algs }} unchanged-algs: ${{ steps.check.outputs.unchanged-algs }} + changed-experiments: ${{ steps.check.outputs.changed-experiments }} + unchanged-experiments: ${{ steps.check.outputs.unchanged-experiments }} changes-detected: ${{ steps.check.outputs.changes-detected }} steps: - uses: actions/checkout@v3 @@ -32,23 +34,34 @@ jobs: run: | CHANGED_ALGS=$(git diff --name-only HEAD~1..HEAD | grep '^algorithms/' | cut -d '/' -f 2 | tr '\n' ',') UNCHANGED_ALGS=$(comm -23 <(ls algorithms/) <(echo "$CHANGED_ALGS")) + CHANGED_EXPERIMENTS=$(git diff --name-only HEAD~1..HEAD | grep '^experiment/methods/' | cut -d '/' -f 2 | tr '\n' ',') + UNCHANGED_EXPERIMENTS=$(comm -23 <(ls experiment/methods/) <(echo "$CHANGED_EXPERIMENTS")) echo "::set-output name=changed-algs::$CHANGED_ALGS" echo "::set-output name=unchanged-algs::$UNCHANGED_ALGS" - echo "::set-output name=changes-detected::$(test -z "$CHANGED_ALGS" && echo "false" || echo "true")" + echo "::set-output name=changed-experiments::$CHANGED_EXPERIMENTS" + echo "::set-output name=unchanged-experiments::$UNCHANGED_EXPERIMENTS" + echo "::set-output name=changes-detected::$(test -z "$CHANGED_ALGS$CHANGED_EXPERIMENTS" && echo "false" || echo "true")" - list-algs: + print-changes: runs-on: ubuntu-latest + needs: check-changes outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + changed-algorithms: ${{ steps.print.outputs.changed-algorithms }} steps: - uses: actions/checkout@v3 - - id: set-matrix - run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" + - id: print + run: | + echo "Changed algorithms:" + echo "${{ needs.check-changes.outputs.changed-algs }}" + echo "" + echo "Changed experiments:" + echo "${{ needs.check-changes.outputs.changed-experiments }}" build-and-test: runs-on: ubuntu-latest needs: - check-changes + - print-changes - list-algs defaults: run: diff --git a/experiment/methods/feat/regressor.py b/experiment/methods/feat/regressor.py index 4f5293b85..56fe27f53 100644 --- a/experiment/methods/feat/regressor.py +++ b/experiment/methods/feat/regressor.py @@ -17,7 +17,6 @@ functions=['+','-','*','/','^2','^3','sqrt','sin','cos','exp','log'], otype='f' ) - # want to tune your estimator? wrap it in a sklearn CV class. def model(est, X=None) -> str: From 48b6c2449717f08d7e1affe43191ce5ef2f62dec Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:32:09 -0300 Subject: [PATCH 15/16] Added missing job --- .github/workflows/ci-docker.yml | 9 +++++++++ experiment/methods/feat/regressor.py | 1 + 2 files changed, 10 insertions(+) diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index a4599ef79..eabf36ebf 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -18,6 +18,15 @@ on: - '.github/workflows/**' jobs: + list-algs: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v3 + - id: set-matrix + run: echo "::set-output name=matrix::$(ls algorithms/ | jq -R -s -c 'split("\n")[:-1]')" + check-changes: runs-on: ubuntu-latest outputs: diff --git a/experiment/methods/feat/regressor.py b/experiment/methods/feat/regressor.py index 56fe27f53..4f5293b85 100644 --- a/experiment/methods/feat/regressor.py +++ b/experiment/methods/feat/regressor.py @@ -17,6 +17,7 @@ functions=['+','-','*','/','^2','^3','sqrt','sin','cos','exp','log'], otype='f' ) + # want to tune your estimator? wrap it in a sklearn CV class. def model(est, X=None) -> str: From ea24cdacf2d014d530c03edb1ce46d47bb263da5 Mon Sep 17 00:00:00 2001 From: gAldeia Date: Thu, 10 Oct 2024 14:34:15 -0300 Subject: [PATCH 16/16] Modifying FEAT --- experiment/methods/feat/regressor.py | 1 - 1 file changed, 1 deletion(-) diff --git a/experiment/methods/feat/regressor.py b/experiment/methods/feat/regressor.py index 4f5293b85..56fe27f53 100644 --- a/experiment/methods/feat/regressor.py +++ b/experiment/methods/feat/regressor.py @@ -17,7 +17,6 @@ functions=['+','-','*','/','^2','^3','sqrt','sin','cos','exp','log'], otype='f' ) - # want to tune your estimator? wrap it in a sklearn CV class. def model(est, X=None) -> str: