diff --git a/examples/series/str/series_str_islower.py b/examples/series/str/series_str_islower.py new file mode 100644 index 000000000..45f3ffe2f --- /dev/null +++ b/examples/series/str/series_str_islower.py @@ -0,0 +1,39 @@ +# ***************************************************************************** +# Copyright (c) 2019, Intel Corporation All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ***************************************************************************** + +import pandas as pd +from numba import njit + + +@njit +def series_str_islower(): + series = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', '']) + out_series = series.str.islower() + + return out_series # Expect series of True, False, False, False + + +print(series_str_islower()) diff --git a/sdc/datatypes/hpat_pandas_stringmethods_functions.py b/sdc/datatypes/hpat_pandas_stringmethods_functions.py index 9bf31b68c..39334d248 100644 --- a/sdc/datatypes/hpat_pandas_stringmethods_functions.py +++ b/sdc/datatypes/hpat_pandas_stringmethods_functions.py @@ -1147,6 +1147,84 @@ def hpat_pandas_stringmethods_isalpha_impl(self): return hpat_pandas_stringmethods_isalpha_impl +@overload_method(StringMethodsType, 'islower') +def hpat_pandas_stringmethods_islower(self): + """ + Intel Scalable Dataframe Compiler User Guide + ******************************************** + Pandas API: pandas.Series.str.islower + + Limitations + ----------- + Series elements are expected to be Unicode strings. Elements cannot be NaN. + + Examples + -------- + .. literalinclude:: ../../../examples/series/str/series_str_islower.py + :language: python + :lines: 27- + :caption: Check if all the characters in the text are alphanumeric + :name: ex_series_str_islower + + .. command-output:: python ./series/str/series_str_islower.py + :cwd: ../../../examples + + .. seealso:: + :ref:`Series.str.isalpha ` + Check whether all characters are alphabetic. + :ref:`Series.str.isnumeric ` + Check whether all characters are numeric. + :ref:`Series.str.isalnum ` + Check whether all characters are alphanumeric. + :ref:`Series.str.isdigit ` + Check whether all characters are digits. + :ref:`Series.str.isdecimal ` + Check whether all characters are decimal. + :ref:`Series.str.isspace ` + Check whether all characters are whitespace. + :ref:`Series.str.islower ` + Check whether all characters are lowercase. + :ref:`Series.str.isupper ` + Check whether all characters are uppercase. + :ref:`Series.str.istitle ` + Check whether all characters are titlecase. + + Intel Scalable Dataframe Compiler Developer Guide + ************************************************* + + Pandas Series method :meth:`pandas.core.strings.StringMethods.islower()` implementation. + + Note: Unicode type of list elements are supported only. Numpy.NaN is not supported as elements. + + .. only:: developer + + Test: python -m sdc.runtests sdc.tests.test_series.TestSeries.test_series_islower_str + + Parameters + ---------- + self: :class:`pandas.core.strings.StringMethods` + input arg + + Returns + ------- + :obj:`pandas.Series` + returns :obj:`pandas.Series` object + """ + + ty_checker = TypeChecker('Method islower().') + ty_checker.check(self, StringMethodsType) + + def hpat_pandas_stringmethods_islower_impl(self): + item_count = len(self._data) + result = numpy.empty(item_count, numba.types.boolean) + for idx, item in enumerate(self._data._data): + result[idx] = item.islower() + + return pandas.Series(result, self._data._index, name=self._data._name) + + return hpat_pandas_stringmethods_islower_impl + + # _hpat_pandas_stringmethods_autogen_methods = sorted(dir(numba.types.misc.UnicodeType.__getattribute__.__qualname__)) _hpat_pandas_stringmethods_autogen_methods = ['upper', 'lower', 'lstrip', 'rstrip', 'strip'] """ diff --git a/sdc/tests/test_series.py b/sdc/tests/test_series.py index cd3744b35..984d41a0b 100644 --- a/sdc/tests/test_series.py +++ b/sdc/tests/test_series.py @@ -238,6 +238,10 @@ def isalpha_usecase(series): return series.str.isalpha() +def islower_usecase(series): + return series.str.islower() + + GLOBAL_VAL = 2 @@ -5524,6 +5528,17 @@ def test_series_isalpha_str(self): S = pd.Series(ser) pd.testing.assert_series_equal(cfunc(S), isalpha_usecase(S)) + @skip_sdc_jit("Series.str.islower is not supported yet") + def test_series_islower_str(self): + series = [['leopard', 'Golden Eagle', 'SNAKE', ''], + ['Hello world!', 'hello 123', 'mynameisPeter'] + ] + + cfunc = self.jit(islower_usecase) + for ser in series: + S = pd.Series(ser) + pd.testing.assert_series_equal(cfunc(S), islower_usecase(S)) + if __name__ == "__main__": unittest.main()