Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'''
Read the actual data from a PLY file.
'''
dtype = self.dtype(byte_order)
if text:
self._read_txt(stream)
elif _can_mmap(stream) and not self._have_list:
# Loading the data is straightforward. We will memory map
# the file in copy-on-write mode.
num_bytes = self.count * dtype.itemsize
offset = stream.tell()
stream.seek(0, 2)
max_bytes = stream.tell() - offset
if max_bytes < num_bytes:
raise PlyElementParseError("early end-of-file", self,
max_bytes // dtype.itemsize)
self._data = _np.memmap(stream, dtype,
'c', offset, self.count)
# Fix stream position
stream.seek(offset + self.count * dtype.itemsize)
else:
# A simple load is impossible.
self._read_bin(stream, byte_order)
self._check_sanity()
def test_assign_elements(tet_ply_txt):
test = PlyElement.describe(numpy.zeros(1, dtype=[('a', 'i4')]),
'test')
tet_ply_txt.elements = [test]
assert len(tet_ply_txt.elements) == 1
assert len(tet_ply_txt) == 1
assert 'vertex' not in tet_ply_txt
assert 'face' not in tet_ply_txt
assert 'test' in tet_ply_txt
for (k, elt) in enumerate(tet_ply_txt):
assert elt.name == 'test'
assert k == 0
def test_element_parse_error_repr():
prop = PlyProperty('x', 'f4')
elt = PlyElement('test', [prop], 0)
e = PlyElementParseError('text', elt, 0, prop)
assert repr(e)
def test_element_parse_error_repr():
prop = PlyProperty('x', 'f4')
elt = PlyElement('test', [prop], 0)
e = PlyElementParseError('text', elt, 0, prop)
assert repr(e)
def test_make2d():
a = numpy.empty(2, dtype=object)
a[:] = [numpy.array([0, 1, 2]), numpy.array([3, 4, 5])]
b = make2d(a)
assert b.shape == (2, 3)
assert (b == [[0, 1, 2], [3, 4, 5]]).all()
def test_assign_properties_error(tet_ply_txt):
vertex = tet_ply_txt['vertex']
with Raises(ValueError) as e:
vertex.properties = (vertex.properties +
(PlyProperty('xx', 'i4'),))
assert str(e) == "dangling property 'xx'"
def test_element_parse_error_repr():
prop = PlyProperty('x', 'f4')
elt = PlyElement('test', [prop], 0)
e = PlyElementParseError('text', elt, 0, prop)
assert repr(e)
def test_header_parse_error_repr():
e = PlyHeaderParseError('text', 11)
assert repr(e) == 'PlyHeaderParseError(\'text\', line=11)'
def test_header_parse_error(s, line):
with Raises(PlyHeaderParseError) as e:
PlyData.read(BytesIO(s))
assert e.exc_val.line == line
may contain list properties.
'''
self._data = _np.empty(self.count, dtype=self.dtype())
k = 0
for line in _islice(iter(stream.readline, b''), self.count):
fields = iter(line.strip().split())
for prop in self.properties:
try:
self._data[prop.name][k] = prop._from_fields(fields)
except StopIteration:
raise PlyElementParseError("early end-of-line",
self, k, prop)
except ValueError:
raise PlyElementParseError("malformed input",
self, k, prop)
try:
next(fields)
except StopIteration:
pass
else:
raise PlyElementParseError("expected end-of-line",
self, k)
k += 1
if k < self.count:
del self._data
raise PlyElementParseError("early end-of-file", self, k)