@@ -95,7 +95,7 @@ def test_distance_class_onesided_matches_pairwise(small_adata: AnnData) -> None:
9595 )
9696 # Should match the row from pairwise matrix
9797 np .testing .assert_allclose (
98- onesided .values , pairwise_df .loc [group ].values , atol = 1e-5
98+ onesided .values , pairwise_df .loc [group ].values , atol = 1e-6
9999 )
100100 # Self-distance should be 0
101101 assert onesided .loc [group ] == pytest .approx (0.0 , abs = 1e-6 )
@@ -188,9 +188,9 @@ def test_distance_class_onesided_bootstrap_matches_pairwise(
188188 )
189189
190190 # Should match the corresponding row from pairwise
191- np .testing .assert_allclose (onesided .values , pairwise_df .loc ["g0" ].values , atol = 1e-6 )
191+ np .testing .assert_allclose (onesided .values , pairwise_df .loc ["g0" ].values , atol = 1e-7 )
192192 np .testing .assert_allclose (
193- onesided_var .values , pairwise_var_df .loc ["g0" ].values , atol = 1e-6
193+ onesided_var .values , pairwise_var_df .loc ["g0" ].values , atol = 1e-7
194194 )
195195
196196
@@ -260,7 +260,7 @@ def test_edistance_correctness_vs_cpu(small_adata: AnnData) -> None:
260260 np .testing .assert_allclose (
261261 actual ,
262262 expected ,
263- rtol = 1e-5 ,
263+ rtol = 1e-6 ,
264264 atol = 1e-6 ,
265265 err_msg = f"Mismatch for ({ g1 } , { g2 } ): GPU={ actual } , CPU={ expected } " ,
266266 )
@@ -293,7 +293,7 @@ def test_edistance_correctness_larger_dataset() -> None:
293293 expected = _compute_energy_distance_cpu (X , Y )
294294 actual = result_df .loc [g1 , g2 ]
295295 np .testing .assert_allclose (
296- actual , expected , rtol = 1e-5 , atol = 1e-6 , err_msg = f"Mismatch for ({ g1 } , { g2 } )"
296+ actual , expected , rtol = 1e-6 , atol = 1e-6 , err_msg = f"Mismatch for ({ g1 } , { g2 } )"
297297 )
298298
299299
@@ -330,7 +330,7 @@ def test_onesided_distances_correctness_vs_cpu(small_adata: AnnData) -> None:
330330 np .testing .assert_allclose (
331331 actual ,
332332 expected ,
333- rtol = 1e-5 ,
333+ rtol = 1e-6 ,
334334 atol = 1e-6 ,
335335 err_msg = f"Onesided mismatch for ({ selected_group } , { target_group } )" ,
336336 )
@@ -662,8 +662,8 @@ def test_contrast_distances_two_split_by() -> None:
662662 np .testing .assert_allclose (
663663 row ["edistance" ],
664664 expected ,
665- rtol = 1e-5 ,
666- atol = 1e-5 ,
665+ rtol = 1e-6 ,
666+ atol = 1e-6 ,
667667 )
668668
669669
@@ -818,7 +818,7 @@ def test_distance_call_api_vs_cpu_reference(small_adata: AnnData) -> None:
818818 np .testing .assert_allclose (
819819 actual ,
820820 expected ,
821- rtol = 1e-5 ,
821+ rtol = 1e-6 ,
822822 atol = 1e-6 ,
823823 err_msg = f"__call__ mismatch for ({ g1 } , { g2 } )" ,
824824 )
@@ -852,7 +852,7 @@ def test_distance_call_api_vs_pairwise(small_adata: AnnData) -> None:
852852 np .testing .assert_allclose (
853853 call_result ,
854854 pairwise_result ,
855- atol = 1e-5 ,
855+ atol = 1e-6 ,
856856 err_msg = f"__call__ vs pairwise mismatch for ({ g1 } , { g2 } )" ,
857857 )
858858
@@ -975,7 +975,7 @@ def test_distance_layer_key_basic() -> None:
975975 np .testing .assert_allclose (
976976 actual ,
977977 expected ,
978- rtol = 1e-5 ,
978+ rtol = 1e-6 ,
979979 atol = 1e-6 ,
980980 err_msg = f"layer_key mismatch for ({ g1 } , { g2 } )" ,
981981 )
@@ -1036,7 +1036,7 @@ def test_float64_matches_float32_results() -> None:
10361036 np .testing .assert_allclose (
10371037 result_f32 .values ,
10381038 result_f64 .values ,
1039- rtol = 1e-5 ,
1039+ rtol = 1e-6 ,
10401040 atol = 1e-6 ,
10411041 err_msg = "Float64 and float32 results should be similar" ,
10421042 )
@@ -1242,15 +1242,15 @@ def test_block_size_consistency() -> None:
12421242 np .testing .assert_allclose (
12431243 result .values ,
12441244 result_256 .values ,
1245- rtol = 1e-5 ,
1246- atol = 1e-6 ,
1245+ rtol = 1e-7 ,
1246+ atol = 1e-7 ,
12471247 err_msg = "256-block and 1024-block paths should produce identical results" ,
12481248 )
12491249 # Diagonal should be zero (self-distance)
12501250 np .testing .assert_allclose (
12511251 np .diag (result .values ),
12521252 0 ,
1253- atol = 1e-6 ,
1253+ atol = 1e-7 ,
12541254 err_msg = "Diagonal (self-distance) should be zero" ,
12551255 )
12561256
@@ -1312,7 +1312,7 @@ def test_distance_axioms(
13121312 np .testing .assert_allclose (
13131313 result_df .values ,
13141314 result_df .values .T ,
1315- atol = 1e-5 ,
1315+ atol = 1e-7 ,
13161316 err_msg = "Matrix should be symmetric" ,
13171317 )
13181318
@@ -1601,7 +1601,7 @@ def test_unequal_group_sizes() -> None:
16011601 Y = cpu_embedding [np .array (groups ) == g2 ]
16021602 expected = _compute_energy_distance_cpu (X , Y )
16031603 actual = result_df .loc [g1 , g2 ]
1604- np .testing .assert_allclose (actual , expected , rtol = 1e-5 , atol = 1e-6 )
1604+ np .testing .assert_allclose (actual , expected , rtol = 1e-6 , atol = 1e-6 )
16051605
16061606
16071607def test_distance_call_empty_array_error () -> None :
@@ -1884,8 +1884,8 @@ def test_multi_gpu_pairwise_matches_single_gpu() -> None:
18841884 np .testing .assert_allclose (
18851885 single_result .values ,
18861886 multi_result .values ,
1887- rtol = 1e-5 ,
1888- atol = 1e-6 ,
1887+ rtol = 1e-7 ,
1888+ atol = 1e-7 ,
18891889 err_msg = "Multi-GPU pairwise should match single-GPU" ,
18901890 )
18911891
@@ -1923,8 +1923,8 @@ def test_multi_gpu_onesided_matches_single_gpu() -> None:
19231923 np .testing .assert_allclose (
19241924 single_result .values ,
19251925 multi_result .values ,
1926- rtol = 1e-5 ,
1927- atol = 1e-6 ,
1926+ rtol = 1e-7 ,
1927+ atol = 1e-7 ,
19281928 err_msg = "Multi-GPU onesided should match single-GPU" ,
19291929 )
19301930
@@ -1976,16 +1976,16 @@ def test_multi_gpu_bootstrap_matches_single_gpu() -> None:
19761976 np .testing .assert_allclose (
19771977 single_df .values ,
19781978 multi_df .values ,
1979- rtol = 1e-5 ,
1980- atol = 1e-6 ,
1979+ rtol = 1e-7 ,
1980+ atol = 1e-7 ,
19811981 err_msg = "Multi-GPU bootstrap mean should match single-GPU" ,
19821982 )
19831983
19841984 np .testing .assert_allclose (
19851985 single_var .values ,
19861986 multi_var .values ,
1987- rtol = 1e-5 ,
1988- atol = 1e-6 ,
1987+ rtol = 1e-7 ,
1988+ atol = 1e-7 ,
19891989 err_msg = "Multi-GPU bootstrap variance should match single-GPU" ,
19901990 )
19911991
@@ -2035,16 +2035,16 @@ def test_multi_gpu_onesided_bootstrap_matches_single_gpu() -> None:
20352035 np .testing .assert_allclose (
20362036 single_dist .values ,
20372037 multi_dist .values ,
2038- rtol = 1e-5 ,
2039- atol = 1e-6 ,
2038+ rtol = 1e-7 ,
2039+ atol = 1e-7 ,
20402040 err_msg = "Multi-GPU onesided bootstrap mean should match single-GPU" ,
20412041 )
20422042
20432043 np .testing .assert_allclose (
20442044 single_var .values ,
20452045 multi_var .values ,
2046- rtol = 1e-5 ,
2047- atol = 1e-6 ,
2046+ rtol = 1e-7 ,
2047+ atol = 1e-7 ,
20482048 err_msg = "Multi-GPU onesided bootstrap variance should match single-GPU" ,
20492049 )
20502050
@@ -2068,7 +2068,7 @@ def test_single_gpu_fallback_unchanged(small_adata: AnnData) -> None:
20682068 np .testing .assert_allclose (
20692069 actual ,
20702070 expected ,
2071- rtol = 1e-5 ,
2071+ rtol = 1e-6 ,
20722072 atol = 1e-6 ,
20732073 err_msg = f"Single-GPU fallback mismatch for ({ g1 } , { g2 } )" ,
20742074 )
@@ -2104,7 +2104,7 @@ def test_small_group_count_works() -> None:
21042104 X = cpu_embedding_np [:cells_per_group ]
21052105 Y = cpu_embedding_np [cells_per_group :]
21062106 expected = _compute_energy_distance_cpu (X , Y )
2107- np .testing .assert_allclose (result .loc ["g0" , "g1" ], expected , rtol = 1e-5 , atol = 1e-6 )
2107+ np .testing .assert_allclose (result .loc ["g0" , "g1" ], expected , rtol = 1e-6 , atol = 1e-6 )
21082108
21092109
21102110def test_multi_gpu_with_more_gpus_than_pairs () -> None :
0 commit comments