From fd32c9614735c4bee87d199d60a3ac79b35503a6 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Tue, 13 Sep 2022 21:34:42 -0500 Subject: [PATCH 01/15] Test for filtering ddf using isin with large list --- tests/benchmarks/test_dataframe.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 4d4f5ce00d..802483c3a1 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -1,5 +1,10 @@ +from cgitb import small from dask.sizeof import sizeof from dask.utils import format_bytes +from dask.dataframe import from_pandas + +import numpy as np +import pandas as pd from ..utils_test import cluster_memory, timeseries_of_size, wait @@ -58,3 +63,19 @@ def test_shuffle(small_client): shuf = df.shuffle(0, shuffle="tasks") result = shuf.size wait(result, small_client, 20 * 60) + + +def test_ddf_isin(small_client): + memory = cluster_memory(small_client) + + rs = np.random.RandomState(42) + n = 100_000_000 + a_column_unique_values = np.arange(1, n // 10) + df = pd.DataFrame({"A": rs.choice(a_column_unique_values, n), "B": rs.random(n)}) + + filter_values_list = sorted( + rs.choice(a_column_unique_values, len(a_column_unique_values) // 2).tolist() + ) + ddf = from_pandas(df, npartitions=8).persist() + tmp_ddf = ddf[ddf["A"].isin(filter_values_list)].copy() + wait(tmp_ddf, small_client, 20*60) \ No newline at end of file From 4b94f0d86b95501f850eaf376f3bb2ef7819237f Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 15 Sep 2022 14:49:54 -0500 Subject: [PATCH 02/15] testing isin --- tests/benchmark.db | Bin 0 -> 4096 bytes tests/benchmarks/benchmark.db | Bin 0 -> 4096 bytes tests/benchmarks/test_dataframe.py | 7 ++++--- 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 tests/benchmark.db create mode 100644 tests/benchmarks/benchmark.db diff --git a/tests/benchmark.db b/tests/benchmark.db new file mode 100644 index 0000000000000000000000000000000000000000..fba3fac4d5d40c0dc101177db925a700de0ca0a1 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}R))P*7lCU|@t|AO!{>KB<6_K`&mK7o7U}R))P*7lCU|@t|AO!{>KB<6_K`&mK7o Date: Thu, 29 Sep 2022 12:26:56 -0500 Subject: [PATCH 03/15] Moves filter isin to remote datasets --- tests/benchmarks/test_dataframe.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 06e5ba5cb1..bc27f663e0 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -3,6 +3,7 @@ from dask.utils import format_bytes import dask.array as da from dask.dataframe import from_pandas +import dask.dataframe as dd import numpy as np import pandas as pd @@ -69,14 +70,11 @@ def test_shuffle(small_client): def test_ddf_isin(small_client): # memory = cluster_memory(small_client) print(small_client.dashboard_link) - rs = np.random.RandomState(42) - n = 100_000_000 - a_column_unique_values = np.arange(1, n // 10) - df = pd.DataFrame({"A": rs.choice(a_column_unique_values, n), "B": rs.random(n)}) + ddf = dd.read_parquet("s3://coiled-datasets/h2o-benchmark/N_1e9_K_1e2_parquet/*.parquet", + columns=["id1", "id6"] + ) - filter_values_list = sorted( - rs.choice(a_column_unique_values, len(a_column_unique_values) // 2).tolist() - ) - ddf = from_pandas(df, npartitions=8).persist() - tmp_ddf = ddf[ddf["A"].isin(filter_values_list)].persist() + filter_values_list = pd.read_parquet("s3://coiled-runtime-ci/client-data/filter_isin.parquet") + filter_values_list = filter_values_list.id6.tolist() + tmp_ddf = ddf[ddf["id6"].isin(filter_values_list)].persist() wait(tmp_ddf, small_client, 20*60) \ No newline at end of file From 065d0cd20662552b36afd3df5e5054b83bd87313 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 29 Sep 2022 12:36:10 -0500 Subject: [PATCH 04/15] Update dataframe --- tests/benchmarks/test_dataframe.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index bc27f663e0..f3905d1ccf 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -68,8 +68,7 @@ def test_shuffle(small_client): def test_ddf_isin(small_client): - # memory = cluster_memory(small_client) - print(small_client.dashboard_link) + memory = cluster_memory(small_client) ddf = dd.read_parquet("s3://coiled-datasets/h2o-benchmark/N_1e9_K_1e2_parquet/*.parquet", columns=["id1", "id6"] ) From 6c21dff45abbbd195190c385f93dfa1749e1b32f Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 29 Sep 2022 12:38:56 -0500 Subject: [PATCH 05/15] update test.yml --- .github/workflows/tests.yml | 90 ++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 54ca6c629d..571a30f459 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,52 +31,52 @@ jobs: matrix: os: [ubuntu-latest] python-version: ["3.9"] - pytest_args: [tests] + pytest_args: [tests/benchmarks/test_dataframe.py::test_ddf_isin] runtime-version: [upstream, latest, "0.0.4", "0.1.0"] - include: - # Run stability tests on Python 3.8 - - pytest_args: tests/stability - python-version: "3.8" - runtime-version: upstream - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.8" - runtime-version: latest - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.8" - runtime-version: "0.0.4" - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.8" - runtime-version: "0.1.0" - os: ubuntu-latest - # Run stability tests on Python 3.10 - - pytest_args: tests/stability - python-version: "3.10" - runtime-version: upstream - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.10" - runtime-version: latest - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.10" - runtime-version: "0.0.4" - os: ubuntu-latest - - pytest_args: tests/stability - python-version: "3.10" - runtime-version: "0.1.0" - os: ubuntu-latest - # Run stability tests on Python Windows and MacOS (latest py39 only) - - pytest_args: tests/stability - python-version: "3.9" - runtime-version: latest - os: windows-latest - - pytest_args: tests/stability - python-version: "3.9" - runtime-version: latest - os: macos-latest + # include: + # # Run stability tests on Python 3.8 + # - pytest_args: tests/stability + # python-version: "3.8" + # runtime-version: upstream + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.8" + # runtime-version: latest + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.8" + # runtime-version: "0.0.4" + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.8" + # runtime-version: "0.1.0" + # os: ubuntu-latest + # # Run stability tests on Python 3.10 + # - pytest_args: tests/stability + # python-version: "3.10" + # runtime-version: upstream + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.10" + # runtime-version: latest + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.10" + # runtime-version: "0.0.4" + # os: ubuntu-latest + # - pytest_args: tests/stability + # python-version: "3.10" + # runtime-version: "0.1.0" + # os: ubuntu-latest + # # Run stability tests on Python Windows and MacOS (latest py39 only) + # - pytest_args: tests/stability + # python-version: "3.9" + # runtime-version: latest + # os: windows-latest + # - pytest_args: tests/stability + # python-version: "3.9" + # runtime-version: latest + # os: macos-latest steps: - name: Checkout From 66fd4a0687a37e7a2367477315a03d5cd7b91945 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 29 Sep 2022 13:52:33 -0500 Subject: [PATCH 06/15] linting --- tests/benchmarks/test_dataframe.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index f3905d1ccf..2b1634f765 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -1,12 +1,7 @@ -from cgitb import small -from dask.sizeof import sizeof -from dask.utils import format_bytes -import dask.array as da -from dask.dataframe import from_pandas import dask.dataframe as dd - -import numpy as np import pandas as pd +from dask.sizeof import sizeof +from dask.utils import format_bytes from ..utils_test import cluster_memory, timeseries_of_size, wait @@ -68,12 +63,14 @@ def test_shuffle(small_client): def test_ddf_isin(small_client): - memory = cluster_memory(small_client) - ddf = dd.read_parquet("s3://coiled-datasets/h2o-benchmark/N_1e9_K_1e2_parquet/*.parquet", - columns=["id1", "id6"] - ) + ddf = dd.read_parquet( + "s3://coiled-datasets/h2o-benchmark/N_1e9_K_1e2_parquet/*.parquet", + columns=["id1", "id6"], + ) - filter_values_list = pd.read_parquet("s3://coiled-runtime-ci/client-data/filter_isin.parquet") + filter_values_list = pd.read_parquet( + "s3://coiled-runtime-ci/client-data/filter_isin.parquet" + ) filter_values_list = filter_values_list.id6.tolist() tmp_ddf = ddf[ddf["id6"].isin(filter_values_list)].persist() - wait(tmp_ddf, small_client, 20*60) \ No newline at end of file + wait(tmp_ddf, small_client, 20 * 60) From 548a84b267965318fd5867ff8db7d531e4022380 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 29 Sep 2022 13:56:52 -0500 Subject: [PATCH 07/15] Linting --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 571a30f459..626e20e235 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,7 +31,7 @@ jobs: matrix: os: [ubuntu-latest] python-version: ["3.9"] - pytest_args: [tests/benchmarks/test_dataframe.py::test_ddf_isin] + pytest_args: [tests/benchmarks/test_dataframe.py] runtime-version: [upstream, latest, "0.0.4", "0.1.0"] # include: # # Run stability tests on Python 3.8 From 56e68b62933145c863d6bd17220d71447cc644b2 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Sun, 2 Oct 2022 21:34:55 -0500 Subject: [PATCH 08/15] Update test_isin to use timeseries --- tests/benchmarks/test_dataframe.py | 31 +++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 2b1634f765..b83c2d7669 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -1,7 +1,10 @@ +from cgitb import small import dask.dataframe as dd +import numpy as np import pandas as pd from dask.sizeof import sizeof from dask.utils import format_bytes +from dask.datasets import timeseries from ..utils_test import cluster_memory, timeseries_of_size, wait @@ -63,14 +66,24 @@ def test_shuffle(small_client): def test_ddf_isin(small_client): - ddf = dd.read_parquet( - "s3://coiled-datasets/h2o-benchmark/N_1e9_K_1e2_parquet/*.parquet", - columns=["id1", "id6"], + import time + print(small_client.dashboard_link) + n = 10_000_000 + s0 = time.time() + rs = np.random.RandomState(42) + ddf = timeseries(end="2000-05-01",dtypes={"A": float, "B": int}, seed=42) + ddf.A = ddf.A.mul(1e7) + ddf.A = ddf.A.astype(int).persist() + # start, stop = ddf.A.min().compute(), ddf.A.max().compute() + a_column_unique_values = np.arange(1, n // 10) + filter_values_list = sorted( + rs.choice(a_column_unique_values, len(a_column_unique_values) // 2).tolist() ) - - filter_values_list = pd.read_parquet( - "s3://coiled-runtime-ci/client-data/filter_isin.parquet" - ) - filter_values_list = filter_values_list.id6.tolist() - tmp_ddf = ddf[ddf["id6"].isin(filter_values_list)].persist() + print(f"Length of ddf: {len(ddf.index)}") + print(f"Lenght of filter_values_list: {len(filter_values_list)}") + print("Done making ddf...") + s1 = time.time() + tmp_ddf = ddf.loc[ddf["A"].isin(filter_values_list)] wait(tmp_ddf, small_client, 20 * 60) + print(f"Done is {time.time() - s1} seconds") + print(f"Total run time is: {time.time() - s0}") From dcc4a521a45d38282bf7ebc75fe88c71ab723a5d Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Sun, 2 Oct 2022 21:38:33 -0500 Subject: [PATCH 09/15] Cleaning up test_isin --- tests/benchmarks/test_dataframe.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index b83c2d7669..4fb7ae70b1 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -66,24 +66,19 @@ def test_shuffle(small_client): def test_ddf_isin(small_client): - import time - print(small_client.dashboard_link) + """ + Checks the efficiency of serializing a large list for filtering + a dask dataframe, and filtering the dataframe by column + based on that list + """ n = 10_000_000 - s0 = time.time() rs = np.random.RandomState(42) ddf = timeseries(end="2000-05-01",dtypes={"A": float, "B": int}, seed=42) ddf.A = ddf.A.mul(1e7) ddf.A = ddf.A.astype(int).persist() - # start, stop = ddf.A.min().compute(), ddf.A.max().compute() a_column_unique_values = np.arange(1, n // 10) filter_values_list = sorted( rs.choice(a_column_unique_values, len(a_column_unique_values) // 2).tolist() ) - print(f"Length of ddf: {len(ddf.index)}") - print(f"Lenght of filter_values_list: {len(filter_values_list)}") - print("Done making ddf...") - s1 = time.time() tmp_ddf = ddf.loc[ddf["A"].isin(filter_values_list)] wait(tmp_ddf, small_client, 20 * 60) - print(f"Done is {time.time() - s1} seconds") - print(f"Total run time is: {time.time() - s0}") From acdf054b50a29bb001926605c1af2d84416a156a Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Sun, 2 Oct 2022 21:47:47 -0500 Subject: [PATCH 10/15] Linting --- tests/benchmarks/test_dataframe.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 4fb7ae70b1..0f8d0fbab6 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -1,10 +1,9 @@ -from cgitb import small -import dask.dataframe as dd +from time import time + import numpy as np -import pandas as pd +from dask.datasets import timeseries from dask.sizeof import sizeof from dask.utils import format_bytes -from dask.datasets import timeseries from ..utils_test import cluster_memory, timeseries_of_size, wait @@ -71,9 +70,10 @@ def test_ddf_isin(small_client): a dask dataframe, and filtering the dataframe by column based on that list """ + start = time() n = 10_000_000 rs = np.random.RandomState(42) - ddf = timeseries(end="2000-05-01",dtypes={"A": float, "B": int}, seed=42) + ddf = timeseries(end="2000-05-01", dtypes={"A": float, "B": int}, seed=42) ddf.A = ddf.A.mul(1e7) ddf.A = ddf.A.astype(int).persist() a_column_unique_values = np.arange(1, n // 10) @@ -82,3 +82,4 @@ def test_ddf_isin(small_client): ) tmp_ddf = ddf.loc[ddf["A"].isin(filter_values_list)] wait(tmp_ddf, small_client, 20 * 60) + print(f"Total time to run test_isin: {time() - start} seconds") From 181196a3252e246f255a1fd107c28a81eb959994 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Wed, 5 Oct 2022 15:44:17 -0500 Subject: [PATCH 11/15] Removing print statements --- tests/benchmarks/test_dataframe.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 0f8d0fbab6..8e396b0f80 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -70,7 +70,6 @@ def test_ddf_isin(small_client): a dask dataframe, and filtering the dataframe by column based on that list """ - start = time() n = 10_000_000 rs = np.random.RandomState(42) ddf = timeseries(end="2000-05-01", dtypes={"A": float, "B": int}, seed=42) @@ -82,4 +81,3 @@ def test_ddf_isin(small_client): ) tmp_ddf = ddf.loc[ddf["A"].isin(filter_values_list)] wait(tmp_ddf, small_client, 20 * 60) - print(f"Total time to run test_isin: {time() - start} seconds") From 201bcec43b56711752e30f72aac2e5ef0f8d2379 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Wed, 5 Oct 2022 15:45:02 -0500 Subject: [PATCH 12/15] Linting --- tests/benchmarks/test_dataframe.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 8e396b0f80..6707da9117 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -1,5 +1,3 @@ -from time import time - import numpy as np from dask.datasets import timeseries from dask.sizeof import sizeof From be7deb4d22bff4c45eb34d4698b8742f6b81121a Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 6 Oct 2022 11:16:22 -0500 Subject: [PATCH 13/15] Aligns value of N across the test implementation --- tests/benchmarks/test_dataframe.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index 6707da9117..b84f251bda 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -68,12 +68,12 @@ def test_ddf_isin(small_client): a dask dataframe, and filtering the dataframe by column based on that list """ - n = 10_000_000 + N = 10_000_000 rs = np.random.RandomState(42) ddf = timeseries(end="2000-05-01", dtypes={"A": float, "B": int}, seed=42) - ddf.A = ddf.A.mul(1e7) + ddf.A = ddf.A.mul(N) ddf.A = ddf.A.astype(int).persist() - a_column_unique_values = np.arange(1, n // 10) + a_column_unique_values = np.arange(1, N // 10) filter_values_list = sorted( rs.choice(a_column_unique_values, len(a_column_unique_values) // 2).tolist() ) From 3407ca7e2a3b1a5e618b0e917387e4dab2307dd5 Mon Sep 17 00:00:00 2001 From: Greg Hayes Date: Thu, 6 Oct 2022 11:18:41 -0500 Subject: [PATCH 14/15] Adding comments --- tests/benchmarks/test_dataframe.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/benchmarks/test_dataframe.py b/tests/benchmarks/test_dataframe.py index b84f251bda..da1fc87239 100644 --- a/tests/benchmarks/test_dataframe.py +++ b/tests/benchmarks/test_dataframe.py @@ -66,7 +66,11 @@ def test_ddf_isin(small_client): """ Checks the efficiency of serializing a large list for filtering a dask dataframe, and filtering the dataframe by column - based on that list + based on that list. + + To get enough unique integers to make this meaningful, we need to create + colum 'A' as a float and then convert it to an int. This is caused by + the fact that random ints in timeseries() are drawn from a Poisson distribution. """ N = 10_000_000 rs = np.random.RandomState(42) From fc0b7f03e39476027add1aac31194eb51a9ea550 Mon Sep 17 00:00:00 2001 From: ncclementi Date: Fri, 7 Oct 2022 18:47:03 -0400 Subject: [PATCH 15/15] merge main and clean up --- .github/workflows/tests.yml | 90 ++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d4347f57b7..481d3b897a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,52 +31,52 @@ jobs: matrix: os: [ubuntu-latest] python-version: ["3.9"] - pytest_args: [tests/benchmarks/test_dataframe.py] + pytest_args: [tests] runtime-version: [upstream, latest, "0.0.4", "0.1.0"] - # include: - # # Run stability tests on Python 3.8 - # - pytest_args: tests/stability - # python-version: "3.8" - # runtime-version: upstream - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.8" - # runtime-version: latest - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.8" - # runtime-version: "0.0.4" - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.8" - # runtime-version: "0.1.0" - # os: ubuntu-latest - # # Run stability tests on Python 3.10 - # - pytest_args: tests/stability - # python-version: "3.10" - # runtime-version: upstream - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.10" - # runtime-version: latest - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.10" - # runtime-version: "0.0.4" - # os: ubuntu-latest - # - pytest_args: tests/stability - # python-version: "3.10" - # runtime-version: "0.1.0" - # os: ubuntu-latest - # # Run stability tests on Python Windows and MacOS (latest py39 only) - # - pytest_args: tests/stability - # python-version: "3.9" - # runtime-version: latest - # os: windows-latest - # - pytest_args: tests/stability - # python-version: "3.9" - # runtime-version: latest - # os: macos-latest + include: + # Run stability tests on Python 3.8 + - pytest_args: tests/stability + python-version: "3.8" + runtime-version: upstream + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.8" + runtime-version: latest + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.8" + runtime-version: "0.0.4" + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.8" + runtime-version: "0.1.0" + os: ubuntu-latest + # Run stability tests on Python 3.10 + - pytest_args: tests/stability + python-version: "3.10" + runtime-version: upstream + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.10" + runtime-version: latest + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.10" + runtime-version: "0.0.4" + os: ubuntu-latest + - pytest_args: tests/stability + python-version: "3.10" + runtime-version: "0.1.0" + os: ubuntu-latest + # Run stability tests on Python Windows and MacOS (latest py39 only) + - pytest_args: tests/stability + python-version: "3.9" + runtime-version: latest + os: windows-latest + - pytest_args: tests/stability + python-version: "3.9" + runtime-version: latest + os: macos-latest steps: - name: Checkout