Skip to content

Commit

Permalink
Fixed review comments from apache#1930
Browse files Browse the repository at this point in the history
  • Loading branch information
dsimmie committed May 6, 2018
1 parent be2bd39 commit b3f7cd7
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 83 deletions.
20 changes: 10 additions & 10 deletions python/pyarrow/builder.pxi
Expand Up @@ -38,16 +38,16 @@ cdef class StringBuilder:
for value in values:
self.append(value)

def length(self):
return self.builder.get().length()
def finish(self):
cdef shared_ptr[CArray] out
with nogil:
self.builder.get().Finish(&out)
return pyarrow_wrap_array(out)

def null_count(self):
return self.builder.get().null_count()
property null_count:

def finish(self):
return pyarrow_wrap_array(self._finish())
def __get__(self):
return self.builder.get().null_count()

cdef shared_ptr[CArray] _finish(self) nogil:
cdef shared_ptr[CArray] out
self.builder.get().Finish(&out)
return out
def __len__(self):
return self.builder.get().length()
89 changes: 16 additions & 73 deletions python/pyarrow/tests/test_builder.py
Expand Up @@ -15,99 +15,42 @@
# specific language governing permissions and limitations
# under the License.

import pytest
import pyarrow as pa
from pyarrow.lib import StringBuilder
import numpy as np
import pandas as pd


@pytest.fixture
def sbuilder():
return StringBuilder()
import pyarrow as pa
from pyarrow.lib import StringBuilder


def test_string_builder_append_string(sbuilder):
def test_string_builder_append_string():
sbuilder = StringBuilder()
sbuilder.append(b'jsaafakjh')
assert (sbuilder.length() == 1)
sbuilder.append('jsaafakjh')
assert (sbuilder.length() == 2)
arr = sbuilder.finish()
assert (sbuilder.length() == 0)
assert (isinstance(arr, pa.Array))
assert (arr.null_count == 0)
assert (arr.type == 'str')
assert(len(arr.to_pylist()) == 2)


def test_string_builder_append_none(sbuilder):
sbuilder.append(None)
assert (sbuilder.null_count() == 1)
for i in range(10):
sbuilder.append(None)
assert (sbuilder.null_count() == 11)
arr = sbuilder.finish()
assert (arr.null_count == 11)


def test_string_builder_append_nan(sbuilder):
sbuilder.append(np.nan)
sbuilder.append(np.nan)
assert (sbuilder.null_count() == 2)
arr = sbuilder.finish()
assert (arr.null_count == 2)


def test_string_builder_append_both(sbuilder):
sbuilder.append(np.nan)
sbuilder.append(None)
sbuilder.append("Some text")
sbuilder.append("Some text")
sbuilder.append(np.nan)
sbuilder.append(None)
assert (sbuilder.null_count() == 4)
assert (len(sbuilder) == 4)
arr = sbuilder.finish()
assert (arr.null_count == 4)
expected = [None, None, "Some text", "Some text", None, None]
assert (arr.to_pylist() == expected)
assert (len(sbuilder) == 0)
assert (sbuilder.null_count == 2)
assert (isinstance(arr, pa.Array))
assert (arr.null_count == 2)
assert (arr.type == 'str')
assert(len(arr.to_pylist()) == 4)


def test_string_builder_append_pylist(sbuilder):
def test_string_builder_append_pylist():
sbuilder = StringBuilder()
sbuilder.append_values([np.nan, None, "text", None, "other text"])
assert (sbuilder.null_count() == 3)
assert (sbuilder.null_count == 3)
arr = sbuilder.finish()
assert (arr.null_count == 3)
expected = [None, None, "text", None, "other text"]
assert (arr.to_pylist() == expected)


def test_string_builder_append_series(sbuilder):
sbuilder.append_values(
pd.Series([np.nan, None, "text", None, "other text"])
)
assert (sbuilder.null_count() == 3)
arr = sbuilder.finish()
assert (arr.null_count == 3)
expected = [None, None, "text", None, "other text"]
assert (arr.to_pylist() == expected)


def test_string_builder_append_numpy(sbuilder):
sbuilder.append_values(
np.asarray([np.nan, None, "text", None, "other text"])
)
assert (sbuilder.null_count() == 3)
arr = sbuilder.finish()
assert (arr.null_count == 3)
expected = [None, None, "text", None, "other text"]
assert (arr.to_pylist() == expected)


def test_string_builder_append_after_finish(sbuilder):
def test_string_builder_append_after_finish():
sbuilder = StringBuilder()
sbuilder.append_values([np.nan, None, "text", None, "other text"])
assert (sbuilder.null_count() == 3)
arr = sbuilder.finish()
sbuilder.append("No effect")
assert (arr.null_count == 3)
expected = [None, None, "text", None, "other text"]
assert (arr.to_pylist() == expected)

0 comments on commit b3f7cd7

Please sign in to comment.