1212from pathlib import Path
1313
1414import moira .moira_native as mn
15- from moira ._spk_body_kernel import _hermite_eval_3d , _hermite_eval_3d_with_derivative , SmallBodyKernel , small_body_readers_from_manifest
15+ from moira ._spk_body_kernel import _hermite_eval_3d , _hermite_eval_3d_with_derivative , small_body_readers_from_manifest
1616from moira ._kernel_paths import find_sovereign_small_body_manifest
1717
1818T0 = 2451545.0
@@ -239,7 +239,7 @@ def test_exact_node_queries(self):
239239# ------------------------------------------------------------------
240240
241241try :
242- from moira ._spk_body_kernel import SmallBodyKernel , small_body_readers_from_manifest
242+ from moira ._spk_body_kernel import small_body_readers_from_manifest
243243 from moira ._kernel_paths import find_sovereign_small_body_manifest
244244 _HAS_REAL_KERNEL_SUPPORT = True
245245except Exception :
@@ -248,15 +248,25 @@ def test_exact_node_queries(self):
248248
249249def _load_type13_data_from_segment (seg ):
250250 """Force load and return (epochs_jd, states, window_size) from a _Type13Segment."""
251- # Access the lazy _data property to populate it
252- data = seg ._data
253- epochs_jd , states , window_size = data # Note: our _data stores (states, epochs, ws) wait — check order
254- # From the code: self.__data = (states, epochs_jd, int(payload["window_size"]))
255- # So actually: states, epochs_jd, ws
256- states_list , epochs_list , ws = data
251+ states_list , epochs_list , ws = seg ._data
257252 return epochs_list , states_list , ws
258253
259254
255+ def _representative_kernel_sample (kernels ):
256+ """Return a catalog-size-independent first/middle/last kernel sample."""
257+ if len (kernels ) <= 3 :
258+ return list (kernels )
259+ indices = (0 , (len (kernels ) - 1 ) // 2 , len (kernels ) - 1 )
260+ return [kernels [index ] for index in indices ]
261+
262+
263+ def test_representative_kernel_sample_is_catalog_size_bounded ():
264+ kernels = list (range (399 ))
265+
266+ assert _representative_kernel_sample (kernels ) == [0 , 199 , 398 ]
267+ assert _representative_kernel_sample (kernels [:2 ]) == [0 , 1 ]
268+
269+
260270@pytest .mark .skipif (not _HAS_REAL_KERNEL_SUPPORT , reason = "SmallBodyKernel not importable" )
261271class TestType13RealKernelBoundaryAdversarial :
262272 """Adversarial tests on real sovereign Type 13 shards."""
@@ -278,6 +288,7 @@ def real_kernels(self):
278288 if manifest is None or not manifest .exists ():
279289 pytest .skip ("No sovereign Type 13 manifest found for real kernel testing" )
280290
291+ kernels = []
281292 try :
282293 kernels = small_body_readers_from_manifest (manifest )
283294 type13_kernels = []
@@ -290,9 +301,12 @@ def real_kernels(self):
290301 type13_kernels .append (k )
291302 if not type13_kernels :
292303 pytest .skip ("No Type 13 segments found in available sovereign kernels" )
293- return type13_kernels
304+ yield _representative_kernel_sample ( type13_kernels )
294305 except Exception as e :
295306 pytest .skip (f"Could not load sovereign Type 13 kernels: { e } " )
307+ finally :
308+ for kernel in kernels :
309+ kernel .close ()
296310
297311 def test_real_data_near_segment_right_edge (self , real_kernels ):
298312 """Attack the right boundary of real Type 13 segments with tiny offsets."""
0 commit comments