"""Local snapshot isolation probe. Requires pylance==10.0.0 and pyarrow.
All writes stay in a newly created temporary dataset. No vacuum or restore.
"""
import json, pathlib, tempfile
import lance
import pyarrow as pa
schema = pa.schema([('id', pa.int64()), ('vector', pa.list_(pa.float32(), 3))])
def table(ids):
    return pa.Table.from_pylist([{'id': i, 'vector': [float(i), 0., 1.]} for i in ids], schema=schema)
def ids(ds):
    return sorted(ds.to_table(columns=['id'])['id'].to_pylist())
with tempfile.TemporaryDirectory(prefix='lance-probe-') as tmp:
    uri = str(pathlib.Path(tmp) / 'training.lance')
    old = lance.write_dataset(table([1, 2, 3]), uri)
    appended = lance.write_dataset(table([4]), uri, mode='append')
    before_delete = lance.dataset(uri)
    appended.delete('id = 2')
    latest = lance.dataset(uri)
    pinned = lance.dataset(uri, version=1)
    result = {'pylance': lance.__version__, 'pyarrow': pa.__version__,
      'original_handle': {'version': old.version, 'ids': ids(old)},
      'handle_opened_before_delete': {'version': before_delete.version, 'ids': ids(before_delete)},
      'fresh_handle': {'version': latest.version, 'ids': ids(latest)},
      'explicit_version_1': {'version': pinned.version, 'ids': ids(pinned)}}
    assert ids(old) == [1, 2, 3]
    assert ids(before_delete) == [1, 2, 3, 4]
    assert ids(latest) == [1, 3, 4]
    assert ids(pinned) == [1, 2, 3]
    assert latest.version == 3
    print(json.dumps(result, indent=2))
