[pypy-commit] pypy numpy-data-buffer: implement using separators for fromstring.
timo_jbo
noreply at buildbot.pypy.org
Mon Oct 3 16:37:18 CEST 2011
Author: Timo Paulssen <timonator at perpetuum-immobile.de>
Branch: numpy-data-buffer
Changeset: r47794:fb2e36c041b7
Date: 2011-10-03 16:36 +0200
http://bitbucket.org/pypy/pypy/changeset/fb2e36c041b7/
Log: implement using separators for fromstring.
diff --git a/lib_pypy/numpy/__init__.py b/lib_pypy/numpy/__init__.py
--- a/lib_pypy/numpy/__init__.py
+++ b/lib_pypy/numpy/__init__.py
@@ -113,7 +113,26 @@
def fromstring(s, dtype=float, count=-1, sep=''):
if sep:
- raise NotImplementedError("Cannot use fromstring with a separator yet")
+ import numpy as np
+ dtype = np.dtype(dtype)
+
+ parts = s.split(sep)
+ clean_parts = [part for part in parts if part]
+ if count >= 0:
+ clean_parts = clean_parts[:count]
+
+ if dtype.kind == "f":
+ cast_func = float
+ elif dtype.kind == "i":
+ cast_func = int
+ else:
+ raise TypeError("Can only read int-likes or float-likes from strings.")
+
+ result = empty(len(clean_parts), dtype=dtype)
+ for number, value in enumerate(clean_parts):
+ result[number] = cast_func(value)
+
+ return result
return __from_buffer_or_datastring(s, dtype, count)
diff --git a/lib_pypy/pypy_test/test_numpy.py b/lib_pypy/pypy_test/test_numpy.py
--- a/lib_pypy/pypy_test/test_numpy.py
+++ b/lib_pypy/pypy_test/test_numpy.py
@@ -97,6 +97,34 @@
for i in range(4):
assert a[i] == i
+ data = "0, 1, 2, 3, 4, 5, 6"
+ a = fromstring(data, dtype="i", sep=",")
+ assert len(a) == 7
+ assert list(a) == range(7)
+
+ data = "0,1,2,3,4,5,6"
+ a = fromstring(data, dtype="i", sep=",")
+ assert len(a) == 7
+ assert list(a) == range(7)
+
+ data = "0, 1, 2, 3, 4, 5, 6"
+ a = fromstring(data, dtype="i", sep=",")
+ assert len(a) == 7
+ assert list(a) == range(7)
+
+ data = "0 X 1 X 2 X 3 X 4 X 5 X 6"
+ a = fromstring(data, dtype="i", sep="X", count=4)
+ assert len(a) == 4
+ assert list(a) == range(4)
+
+ fdata = [f / 5.0 for f in range(10)]
+ data = ",".join(str(f) for f in fdata)
+ a = fromstring(data, dtype=float, sep=",")
+ assert list(a) == fdata
+
+ a = fromstring(data, dtype=float, sep=",", count=3)
+ assert list(a) == fdata[:3]
+
def test_frombuffer(self):
from numpy import frombuffer
import struct
More information about the pypy-commit
mailing list