@@ -26,6 +26,19 @@ def pytest_configure(config):
2626 pytest ._test_options ["llama_inputs" ] = config .option .llama_inputs # type: ignore[attr-defined]
2727
2828 logging .basicConfig (stream = sys .stdout )
29+ seed , seed_label = _setup_random_seed ()
30+ config ._test_seed = seed
31+ config ._test_seed_label = seed_label
32+
33+ if os .environ .get ("TEST_RUNTIME_IS_NOT_OSS" , "0" ) != "1" :
34+ # This imports/uses torch early, which doesn't work in some Buck2 test environments.
35+ # Since this only makes randomness deterministic (reducing flakiness), it's mainly meant for
36+ # local/OSS project test runs.
37+ _set_random_seed (seed )
38+
39+
40+ def pytest_report_header (config ):
41+ return config ._test_seed_label
2942
3043
3144def pytest_collection_modifyitems (config , items ):
@@ -63,38 +76,44 @@ def pytest_sessionfinish(session, exitstatus):
6376
6477
6578@pytest .fixture (autouse = True )
66- def set_random_seed ():
79+ def set_random_seed (request ):
6780 """Control random numbers in Arm test suite. Default behavior is to use a
6881 fixed seed (0), which ensures reproducible tests. Use the env variable
69- ARM_TEST_SEED to set a custom seed, or set it to RANDOM for random seed
70- behavior .
82+ TEST_SEED to set a custom session seed, or set it to RANDOM to choose a
83+ random session seed .
7184
7285 Examples:
7386 As default use fixed seed (0) for reproducible tests
7487 pytest --config-file=/dev/null --verbose -s --color=yes backends/arm/test/ops/test_avg_pool.py -k <TESTCASE>
75- Use a random seed for each test
76- ARM_TEST_SEED =RANDOM pytest --config-file=/dev/null --verbose -s --color=yes backends/arm/test/ops/test_avg_pool.py -k <TESTCASE>
88+ Use a random seed for the test session
89+ TEST_SEED =RANDOM pytest --config-file=/dev/null --verbose -s --color=yes backends/arm/test/ops/test_avg_pool.py -k <TESTCASE>
7790 Rerun with a specific seed
78- ARM_TEST_SEED =3478246 pytest --config-file=/dev/null --verbose -s --color=yes backends/arm/test/ops/test_avg_pool.py -k <TESTCASE>
91+ TEST_SEED =3478246 pytest --config-file=/dev/null --verbose -s --color=yes backends/arm/test/ops/test_avg_pool.py -k <TESTCASE>
7992
8093 """
81- import torch
94+ _set_random_seed (request .config ._test_seed )
95+
8296
83- seed_env = os .environ .get ("ARM_TEST_SEED" , "0" )
97+ def _setup_random_seed ():
98+ seed_env = os .environ .get ("TEST_SEED" , "0" )
8499 if seed_env == "RANDOM" :
85100 random .seed () # reset seed, in case any other test has fiddled with it
86101 seed = random .randint (0 , 2 ** 32 - 1 ) # nosec B311 - non-crypto seed for tests
87- torch . manual_seed ( seed )
102+ seed_label = f"TEST_SEED=RANDOM using: { seed } "
88103 elif str .isdigit (seed_env ):
89104 seed = int (seed_env )
90- random .seed (seed )
91- torch .manual_seed (seed )
105+ seed_label = f"TEST_SEED={ seed } "
92106 else :
93- raise TypeError (
94- "ARM_TEST_SEED env variable must be integers or the string RANDOM"
95- )
107+ raise TypeError ("TEST_SEED env variable must be integers or the string RANDOM" )
108+
109+ return seed , seed_label
110+
111+
112+ def _set_random_seed (seed ):
113+ import torch
96114
97- print (f" ARM_TEST_SEED={ seed } " , end = " " )
115+ random .seed (seed )
116+ torch .manual_seed (seed )
98117
99118
100119# ==== End of Pytest fixtures =====
0 commit comments