Skip to content

Commit 4126dfa

Browse files
committed
add export
1 parent 34c1794 commit 4126dfa

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

probables/utilities.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import mmap
55
import string
66
from array import array
7+
from io import IOBase
78
from pathlib import Path
89
from struct import Struct
910
from typing import Literal, Union
@@ -214,3 +215,15 @@ def from_bytes(cls, data: bytes) -> "Bitarray":
214215
ba = Bitarray(size)
215216
ba._bitarray = bitarray
216217
return ba
218+
219+
def export(self, file: Union[Path, str, IOBase, mmap.mmap]) -> None:
220+
"""Export the bitarray to a file
221+
222+
Args:
223+
filename (str): Filename to export to"""
224+
if not isinstance(file, (IOBase, mmap.mmap)):
225+
file = resolve_path(file)
226+
with open(file, "wb") as filepointer:
227+
self.export(filepointer)
228+
else:
229+
file.write(self.to_bytes())

tests/test_utilities.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,22 @@ def test_bitarray_to_bytes(self):
171171
print(i)
172172
self.assertEqual(nba[i], 0 if i % 3 != 0 else 1)
173173

174+
def test_bitarray_export(self):
175+
with NamedTemporaryFile() as tmp:
176+
ba = Bitarray(100)
177+
for i in range(34):
178+
ba.set_bit(i * 3)
179+
ba.export(tmp.name)
180+
nba = Bitarray.from_bytes(tmp.read())
181+
self.assertEqual(nba.as_string(), ba.as_string())
182+
for i in range(100):
183+
self.assertEqual(ba[i], nba[i])
184+
print(i)
185+
self.assertEqual(nba[i], 0 if i % 3 != 0 else 1)
186+
174187
def test_bitarray_invalid_idx(self):
175188
"""use an invalid type in a jaccard index"""
176-
self.assertRaises(TypeError, lambda: Bitarray("100"))
189+
self.assertRaises(TypeError, lambda: Bitarray("100")) # type: ignore
177190
self.assertRaises(ValueError, lambda: Bitarray(-100))
178191
ba = Bitarray(10)
179192
self.assertRaises(IndexError, lambda: ba.set_bit(12))

0 commit comments

Comments
 (0)