From 12111d00fee68bd3af2ff825b42cabac25a64644 Mon Sep 17 00:00:00 2001 From: Connor Duncan Date: Mon, 22 Jul 2024 12:50:38 -0500 Subject: [PATCH 1/2] Upgrade compatibility with polars 1.* --- python/polars_istr/_utils.py | 45 ++++++++---- python/polars_istr/cusip.py | 133 +++++------------------------------ python/polars_istr/iban.py | 99 +++----------------------- python/polars_istr/isin.py | 69 ++---------------- python/polars_istr/url.py | 99 +++----------------------- tests/test_correctness.py | 128 ++++++++++++++++----------------- 6 files changed, 138 insertions(+), 435 deletions(-) diff --git a/python/polars_istr/_utils.py b/python/polars_istr/_utils.py index 3ee4735..487c016 100644 --- a/python/polars_istr/_utils.py +++ b/python/polars_istr/_utils.py @@ -1,7 +1,31 @@ +import os +import re +from pathlib import Path +from typing import Any, Dict, List, Optional, Union + import polars as pl -from typing import Any, Optional, List, Dict + from .type_alias import StrOrExpr +_POLARS_LEGACY_SUPPORT = tuple(int(re.sub("[^0-9]", "", x)) for x in pl.__version__.split(".")) < ( + 0, + 20, + 16, +) +_IS_POLARS_V1 = pl.__version__.startswith("1") + +_PLUGIN_PATH = Path(__file__).parent + +_PLUGIN_LIB_LEGACY = os.path.join( + os.path.dirname(__file__), + next( + filter( + lambda file: file.endswith((".so", ".dll", ".pyd")), + os.listdir(os.path.dirname(__file__)), + ) + ), +) + def str_to_expr(x: StrOrExpr) -> pl.Expr: if isinstance(x, str): @@ -14,23 +38,20 @@ def str_to_expr(x: StrOrExpr) -> pl.Expr: def pl_plugin( *, - lib: str, symbol: str, - args: List[StrOrExpr], + args: List[Union[pl.Series, pl.Expr]], kwargs: Optional[Dict[str, Any]] = None, is_elementwise: bool = False, returns_scalar: bool = False, changes_length: bool = False, cast_to_supertype: bool = False, ) -> pl.Expr: - # pl.__version__ should always be a valid version number, so split returns always 3 strs - if tuple(int(x) for x in pl.__version__.split(".")) < (0, 20, 16): - # This will eventually be deprecated? - first = str_to_expr(args[0]) - return first.register_plugin( - lib=lib, + if _POLARS_LEGACY_SUPPORT: + # This will eventually be deprecated, yes + return args[0].register_plugin( + lib=_PLUGIN_LIB_LEGACY, symbol=symbol, - args=[str_to_expr(x) for x in args[1:]], + args=args[1:], kwargs=kwargs, is_elementwise=is_elementwise, returns_scalar=returns_scalar, @@ -41,8 +62,8 @@ def pl_plugin( from polars.plugins import register_plugin_function return register_plugin_function( - plugin_path=lib, - args=[str_to_expr(x) for x in args], + plugin_path=_PLUGIN_PATH, + args=args, function_name=symbol, kwargs=kwargs, is_elementwise=is_elementwise, diff --git a/python/polars_istr/cusip.py b/python/polars_istr/cusip.py index 7d08d18..f7499a6 100644 --- a/python/polars_istr/cusip.py +++ b/python/polars_istr/cusip.py @@ -1,12 +1,9 @@ from __future__ import annotations import polars as pl -from polars.utils.udfs import _get_shared_lib_location -from ._utils import pl_plugin, StrOrExpr +from ._utils import pl_plugin -_lib = _get_shared_lib_location(__file__) - -def cusip_extract_all(x: StrOrExpr) -> pl.Expr: +def cusip_extract_all(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns a struct containing country_code, issue_num, issuer_num, check_digit, or null, if it cannot be parsed. @@ -15,106 +12,98 @@ def cusip_extract_all(x: StrOrExpr) -> pl.Expr: """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_full", is_elementwise=True, ) -def cusip_issue_num(x: StrOrExpr) -> pl.Expr: +def cusip_issue_num(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns the issue number from the CUSIP, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_issue_num", is_elementwise=True, ) -def cusip_issuer_num(x: StrOrExpr) -> pl.Expr: +def cusip_issuer_num(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns the issuer number from the CUSIP, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_issuer_num", is_elementwise=True, ) -def cusip_check_digit(x: StrOrExpr) -> pl.Expr: +def cusip_check_digit(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns check digit from the CUSIP, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_check_digit", is_elementwise=True, ) -def cusip_country_code(x: StrOrExpr) -> pl.Expr: +def cusip_country_code(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns the country code from the CUSIP, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_country_code", is_elementwise=True, ) -def cusip_payload(x: StrOrExpr) -> pl.Expr: +def cusip_payload(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns the payload (CUSIP ex. check digit) from the CUSIP, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_payload", is_elementwise=True, ) -def cusip_is_private_issue(x: StrOrExpr) -> pl.Expr: +def cusip_is_private_issue(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns true if the issue number is reserved for private use. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_is_private_issue", is_elementwise=True, ) -def cusip_has_private_issuer(x: StrOrExpr) -> pl.Expr: +def cusip_has_private_issuer(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns true if the issuer is reserved for private use. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_cusip_has_private_issuer", is_elementwise=True, ) -def cusip_is_private_use(x: StrOrExpr) -> pl.Expr: +def cusip_is_private_use(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns True if either the issuer or issue number is reserved for private use. """ - return pl_plugin(args=[x], lib=_lib, symbol="pl_cusip_is_private_use", is_elementwise=True) + return pl_plugin(args=[x], symbol="pl_cusip_is_private_use", is_elementwise=True) -def cusip_is_cins(x: StrOrExpr) -> pl.Expr: +def cusip_is_cins(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns true if this CUSIP number is actually a CUSIP International Numbering System (CINS) number, @@ -123,10 +112,10 @@ def cusip_is_cins(x: StrOrExpr) -> pl.Expr: Null if unable to parse. """ - return pl_plugin(args=[x], lib=_lib, symbol="pl_cusip_is_cins", is_elementwise=True) + return pl_plugin(args=[x], symbol="pl_cusip_is_cins", is_elementwise=True) -def cusip_is_cins_base(x: StrOrExpr) -> pl.Expr: +def cusip_is_cins_base(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns true if this CUSIP identifier is actually a CUSIP International Numbering System (CINS) identifier (with the further restriction that @@ -135,10 +124,10 @@ def cusip_is_cins_base(x: StrOrExpr) -> pl.Expr: Null if unable to parse. """ - return pl_plugin(args=[x], lib=_lib, symbol="pl_cusip_is_cins_base", is_elementwise=True) + return pl_plugin(args=[x], symbol="pl_cusip_is_cins_base", is_elementwise=True) -def cusip_is_cins_extended(x: StrOrExpr) -> pl.Expr: +def cusip_is_cins_extended(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns true if this CUSIP identifier is actually a CUSIP International Numbering System (CINS) identifier (with the further restriction that @@ -147,92 +136,4 @@ def cusip_is_cins_extended(x: StrOrExpr) -> pl.Expr: Null if unable to parse. """ - return pl_plugin(args=[x], lib=_lib, symbol="pl_cusip_is_cins_extended", is_elementwise=True) - - -@pl.api.register_expr_namespace("cusip") -class CusipExt: - """ - This class contains tools for parsing CUSIP/CINS and Extended CINS format data. - - Polars Namespace: cusip - - Example: pl.col("cusip_cins_string").cusip.country_code() - """ - - def __init__(self, expr: pl.Expr): - self._expr: pl.Expr = expr - - def extract_all(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_full", - is_elementwise=True, - ) - - def issue_num(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_issue_num", - is_elementwise=True, - ) - - def issuer_num(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_issuer_num", - is_elementwise=True, - ) - - def check_digit(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_check_digit", - is_elementwise=True, - ) - - def country_code(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_country_code", - is_elementwise=True, - ) - - def payload(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_payload", - is_elementwise=True, - ) - - def is_private_issue(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_is_private_issue", - is_elementwise=True, - ) - - def has_private_issuer(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_cusip_has_private_issuer", - is_elementwise=True, - ) - - def is_private_use(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, symbol="pl_cusip_is_private_use", is_elementwise=True - ) - - def is_cins(self) -> pl.Expr: - return self._expr.register_plugin(lib=_lib, symbol="pl_cusip_is_cins", is_elementwise=True) - - def is_cins_base(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, symbol="pl_cusip_is_cins_base", is_elementwise=True - ) - - def is_cins_extended(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, symbol="pl_cusip_is_cins_extended", is_elementwise=True - ) + return pl_plugin(args=[x], symbol="pl_cusip_is_cins_extended", is_elementwise=True) diff --git a/python/polars_istr/iban.py b/python/polars_istr/iban.py index 595f6b6..def8fcf 100644 --- a/python/polars_istr/iban.py +++ b/python/polars_istr/iban.py @@ -1,175 +1,94 @@ from __future__ import annotations import polars as pl -from polars.utils.udfs import _get_shared_lib_location -from ._utils import pl_plugin, StrOrExpr +from ._utils import pl_plugin -_lib = _get_shared_lib_location(__file__) - -def iban_country_code(x: StrOrExpr) -> pl.Expr: +def iban_country_code(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns country code from the IBAN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_country_code", is_elementwise=True, ) -def iban_check_digits(x: StrOrExpr) -> pl.Expr: +def iban_check_digits(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns check digits from the IBAN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_check_digits", is_elementwise=True, ) -def iban_bban(x: StrOrExpr) -> pl.Expr: +def iban_bban(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns BBAN string from the IBAN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_bban", is_elementwise=True, ) -def iban_bank_id(x: StrOrExpr) -> pl.Expr: +def iban_bank_id(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns bank identifier from the BBAN portion of the IBAN string, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_bank_identifier", is_elementwise=True, ) -def iban_branch_id(x: StrOrExpr) -> pl.Expr: +def iban_branch_id(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns branch identifier from the BBAN portion of the IBAN string, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_branch_identifier", is_elementwise=True, ) -def iban_is_valid(x: StrOrExpr) -> pl.Expr: +def iban_is_valid(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns a boolean indicating whether the string is a valid IBAN string. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_is_valid", is_elementwise=True, ) -def iban_check(x: StrOrExpr) -> pl.Expr: +def iban_check(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns a string that explains whether the IBAN string is valid or not. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_check", is_elementwise=True, ) -def iban_extract_all(x: StrOrExpr) -> pl.Expr: +def iban_extract_all(x: pl.Series | pl.Expr) -> pl.Expr: """ Returns all information from IBAN and return as a struct. Running this can be faster than running the corresponding single queries together. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_iban_extract_all", is_elementwise=True, ) - - -@pl.api.register_expr_namespace("iban") -class IbanExt: - """ - This class contains tools for parsing IBAN format data. - - Polars Namespace: iban - - Example: pl.col("iban_str").iban.country_code() - """ - - def __init__(self, expr: pl.Expr): - self._expr: pl.Expr = expr - - def country_code(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_country_code", - is_elementwise=True, - ) - - def check_digits(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_check_digits", - is_elementwise=True, - ) - - def bban(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_bban", - is_elementwise=True, - ) - - def bank_id(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_bank_identifier", - is_elementwise=True, - ) - - def branch_id(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_branch_identifier", - is_elementwise=True, - ) - - def is_valid(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_is_valid", - is_elementwise=True, - ) - - def check(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_check", - is_elementwise=True, - ) - - def extract_all(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_iban_extract_all", - is_elementwise=True, - ) diff --git a/python/polars_istr/isin.py b/python/polars_istr/isin.py index 34d6ed2..244e2c5 100644 --- a/python/polars_istr/isin.py +++ b/python/polars_istr/isin.py @@ -1,117 +1,60 @@ from __future__ import annotations import polars as pl -from polars.utils.udfs import _get_shared_lib_location -from ._utils import pl_plugin, StrOrExpr +from ._utils import pl_plugin -_lib = _get_shared_lib_location(__file__) - -def isin_country_code(x: StrOrExpr) -> pl.Expr: +def isin_country_code(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns country code from the ISIN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_isin_country_code", is_elementwise=True, ) -def isin_check_digit(x: StrOrExpr) -> pl.Expr: +def isin_check_digit(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns check digits from the ISIN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_isin_check_digit", is_elementwise=True, ) -def isin_security_id(x: StrOrExpr) -> pl.Expr: +def isin_security_id(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the 9-digit security identifier of the ISIN, or null if it cannot be parsed. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_isin_security_id", is_elementwise=True, ) -def isin_is_valid(x: StrOrExpr) -> pl.Expr: +def isin_is_valid(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns a boolean indicating whether the string is a valid ISIN string. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_isin_is_valid", is_elementwise=True, ) -def isin_extract_all(x: StrOrExpr) -> pl.Expr: +def isin_extract_all(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns all information from ISIN and return as a struct. Empty string means the part cannot be extracted. Running this can be faster than running the corresponding single queries together. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_isin_full", is_elementwise=True, ) - - -@pl.api.register_expr_namespace("isin") -class IsinExt: - """ - This class contains tools for parsing ISIN format data. - - Polars Namespace: isin - - Example: pl.col("isin_str").isin.country_code() - """ - - def __init__(self, expr: pl.Expr): - self._expr: pl.Expr = expr - - def country_code(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_isin_country_code", - is_elementwise=True, - ) - - def check_digit(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_isin_check_digit", - is_elementwise=True, - ) - - def security_id(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_isin_security_id", - is_elementwise=True, - ) - - def is_valid(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_isin_is_valid", - is_elementwise=True, - ) - - def extract_all(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_isin_full", - is_elementwise=True, - ) diff --git a/python/polars_istr/url.py b/python/polars_istr/url.py index 25d6d6f..593de05 100644 --- a/python/polars_istr/url.py +++ b/python/polars_istr/url.py @@ -1,172 +1,91 @@ from __future__ import annotations import polars as pl -from polars.utils.udfs import _get_shared_lib_location -from ._utils import pl_plugin, StrOrExpr +from ._utils import pl_plugin -_lib = _get_shared_lib_location(__file__) - -def url_is_special(x: StrOrExpr) -> pl.Expr: +def url_is_special(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns a boolean indicating whether the URL has a special scheme or not. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_is_special", is_elementwise=True, ) -def url_host(x: StrOrExpr) -> pl.Expr: +def url_host(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the host of the URL, if possible. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_host", is_elementwise=True, ) -def url_path(x: StrOrExpr) -> pl.Expr: +def url_path(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the path part of the URL, if possible. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_path", is_elementwise=True, ) -def url_domain(x: StrOrExpr) -> pl.Expr: +def url_domain(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the domain of the URL, if possible. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_domain", is_elementwise=True, ) -def url_fragment(x: StrOrExpr) -> pl.Expr: +def url_fragment(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the fragment of the URL, if possible. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_fragment", is_elementwise=True, ) -def url_query(x: StrOrExpr) -> pl.Expr: +def url_query(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns the query part of the URL, if possible. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_query", is_elementwise=True, ) -def url_is_valid(x: StrOrExpr) -> pl.Expr: +def url_is_valid(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns a boolean indicating whether the string is a valid URL string. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_is_valid", is_elementwise=True, ) -def url_check(x: StrOrExpr) -> pl.Expr: +def url_check(x: pl.Expr | pl.Series) -> pl.Expr: """ Returns a string that explains whether the URL string is valid or not. """ return pl_plugin( args=[x], - lib=_lib, symbol="pl_url_check", is_elementwise=True, ) - - -@pl.api.register_expr_namespace("url") -class UrlExt: - """ - This class contains tools for parsing URL strings. - - Polars Namespace: url - - Example: pl.col("url_str").url.query() - """ - - def __init__(self, expr: pl.Expr): - self._expr: pl.Expr = expr - - def is_special(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_is_special", - is_elementwise=True, - ) - - def host(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_host", - is_elementwise=True, - ) - - def path(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_path", - is_elementwise=True, - ) - - def domain(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_domain", - is_elementwise=True, - ) - - def fragment(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_fragment", - is_elementwise=True, - ) - - def query(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_query", - is_elementwise=True, - ) - - def is_valid(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_is_valid", - is_elementwise=True, - ) - - def check(self) -> pl.Expr: - return self._expr.register_plugin( - lib=_lib, - symbol="pl_url_check", - is_elementwise=True, - ) diff --git a/tests/test_correctness.py b/tests/test_correctness.py index 1dea0b5..624c4bf 100644 --- a/tests/test_correctness.py +++ b/tests/test_correctness.py @@ -2,8 +2,8 @@ from polars.testing import assert_frame_equal from typing import List import pytest -import polars_istr # noqa: F401 from typing import Optional +from polars_istr import * # noqa: F403 # There are no valid test cases for Extended CINS or Private Issue(r) since I could not @@ -11,9 +11,9 @@ # If anyone has encountered one and would like it added to the tests, please raise an # issue. @pytest.mark.parametrize( - """df, issue_num, issuer_num, check_digit, country_code, - payload, is_private_issue, has_private_issuer, is_private_use, is_cins, - is_cins_base, is_cins_extended""", + """df,issue_num, issuer_num,check_digit,country_code, + payload,is_private_issue,has_private_issuer,is_private_use,is_cins, + is_cins_base,is_cins_extended""", [ ( pl.DataFrame( @@ -60,33 +60,33 @@ def test_cusip( is_cins_extended: List[str], ): test1 = df.select( - pl.col("cusip").cusip.issue_num().alias("issue_num"), - pl.col("cusip").cusip.issuer_num().alias("issuer_num"), - pl.col("cusip").cusip.check_digit().alias("check_digit"), - pl.col("cusip").cusip.country_code().alias("country_code"), - pl.col("cusip").cusip.payload().alias("payload"), - pl.col("cusip").cusip.is_private_issue().alias("is_private_issue"), - pl.col("cusip").cusip.has_private_issuer().alias("has_private_issuer"), - pl.col("cusip").cusip.is_private_use().alias("is_private_use"), - pl.col("cusip").cusip.is_cins().alias("is_cins"), - pl.col("cusip").cusip.is_cins_base().alias("is_cins_base"), - pl.col("cusip").cusip.is_cins_extended().alias("is_cins_extended"), + cusip_issue_num(pl.col("cusip")).alias("issue_num"), + cusip_issuer_num(pl.col("cusip")).alias("issuer_num"), + cusip_check_digit(pl.col("cusip")).alias("check_digit"), + cusip_country_code(pl.col("cusip")).alias("country_code"), + cusip_payload(pl.col("cusip")).alias("payload"), + cusip_is_private_issue(pl.col("cusip")).alias("is_private_issue"), + cusip_has_private_issuer(pl.col("cusip")).alias("has_private_issuer"), + cusip_is_private_use(pl.col("cusip")).alias("is_private_use"), + cusip_is_cins(pl.col("cusip")).alias("is_cins"), + cusip_is_cins_base(pl.col("cusip")).alias("is_cins_base"), + cusip_is_cins_extended(pl.col("cusip")).alias("is_cins_extended"), ) test2 = ( df.lazy() .select( - pl.col("cusip").cusip.issue_num().alias("issue_num"), - pl.col("cusip").cusip.issuer_num().alias("issuer_num"), - pl.col("cusip").cusip.check_digit().alias("check_digit"), - pl.col("cusip").cusip.country_code().alias("country_code"), - pl.col("cusip").cusip.payload().alias("payload"), - pl.col("cusip").cusip.is_private_issue().alias("is_private_issue"), - pl.col("cusip").cusip.has_private_issuer().alias("has_private_issuer"), - pl.col("cusip").cusip.is_private_use().alias("is_private_use"), - pl.col("cusip").cusip.is_cins().alias("is_cins"), - pl.col("cusip").cusip.is_cins_base().alias("is_cins_base"), - pl.col("cusip").cusip.is_cins_extended().alias("is_cins_extended"), + cusip_issue_num(pl.col("cusip")).alias("issue_num"), + cusip_issuer_num(pl.col("cusip")).alias("issuer_num"), + cusip_check_digit(pl.col("cusip")).alias("check_digit"), + cusip_country_code(pl.col("cusip")).alias("country_code"), + cusip_payload(pl.col("cusip")).alias("payload"), + cusip_is_private_issue(pl.col("cusip")).alias("is_private_issue"), + cusip_has_private_issuer(pl.col("cusip")).alias("has_private_issuer"), + cusip_is_private_use(pl.col("cusip")).alias("is_private_use"), + cusip_is_cins(pl.col("cusip")).alias("is_cins"), + cusip_is_cins_base(pl.col("cusip")).alias("is_cins_base"), + cusip_is_cins_extended(pl.col("cusip")).alias("is_cins_extended"), ) .collect() ) @@ -145,25 +145,25 @@ def test_iban1( branch_id: List[Optional[str]], ): test1 = df.select( - pl.col("iban").iban.country_code().alias("country_code"), - pl.col("iban").iban.check_digits().alias("check_digits"), - pl.col("iban").iban.check().alias("reason"), - pl.col("iban").iban.is_valid().alias("is_valid"), - pl.col("iban").iban.bban().alias("bban"), - pl.col("iban").iban.bank_id().alias("bank_id"), - pl.col("iban").iban.branch_id().alias("branch_id"), + iban_country_code(pl.col("iban")).alias("country_code"), + iban_check_digits(pl.col("iban")).alias("check_digits"), + iban_check(pl.col("iban")).alias("reason"), + iban_is_valid(pl.col("iban")).alias("is_valid"), + iban_bban(pl.col("iban")).alias("bban"), + iban_bank_id(pl.col("iban")).alias("bank_id"), + iban_branch_id(pl.col("iban")).alias("branch_id"), ) test2 = ( df.lazy() .select( - pl.col("iban").iban.country_code().alias("country_code"), - pl.col("iban").iban.check_digits().alias("check_digits"), - pl.col("iban").iban.check().alias("reason"), - pl.col("iban").iban.is_valid().alias("is_valid"), - pl.col("iban").iban.bban().alias("bban"), - pl.col("iban").iban.bank_id().alias("bank_id"), - pl.col("iban").iban.branch_id().alias("branch_id"), + iban_country_code(pl.col("iban")).alias("country_code"), + iban_check_digits(pl.col("iban")).alias("check_digits"), + iban_check(pl.col("iban")).alias("reason"), + iban_is_valid(pl.col("iban")).alias("is_valid"), + iban_bban(pl.col("iban")).alias("bban"), + iban_bank_id(pl.col("iban")).alias("bank_id"), + iban_branch_id(pl.col("iban")).alias("branch_id"), ) .collect() ) @@ -236,27 +236,27 @@ def test_url1( is_special: List[Optional[bool]], ): test1 = df.select( - pl.col("url").url.host().alias("host"), - pl.col("url").url.domain().alias("domain"), - pl.col("url").url.fragment().alias("fragment"), - pl.col("url").url.path().alias("path"), - pl.col("url").url.query().alias("query"), - pl.col("url").url.check().alias("check"), - pl.col("url").url.is_valid().alias("is_valid"), - pl.col("url").url.is_special().alias("is_special"), + url_host(pl.col("url")).alias("host"), + url_domain(pl.col("url")).alias("domain"), + url_fragment(pl.col("url")).alias("fragment"), + url_path(pl.col("url")).alias("path"), + url_query(pl.col("url")).alias("query"), + url_check(pl.col("url")).alias("check"), + url_is_valid(pl.col("url")).alias("is_valid"), + url_is_special(pl.col("url")).alias("is_special"), ) test2 = ( df.lazy() .select( - pl.col("url").url.host().alias("host"), - pl.col("url").url.domain().alias("domain"), - pl.col("url").url.fragment().alias("fragment"), - pl.col("url").url.path().alias("path"), - pl.col("url").url.query().alias("query"), - pl.col("url").url.check().alias("check"), - pl.col("url").url.is_valid().alias("is_valid"), - pl.col("url").url.is_special().alias("is_special"), + url_host(pl.col("url")).alias("host"), + url_domain(pl.col("url")).alias("domain"), + url_fragment(pl.col("url")).alias("fragment"), + url_path(pl.col("url")).alias("path"), + url_query(pl.col("url")).alias("query"), + url_check(pl.col("url")).alias("check"), + url_is_valid(pl.col("url")).alias("is_valid"), + url_is_special(pl.col("url")).alias("is_special"), ) .collect() ) @@ -309,18 +309,18 @@ def test_isin1( is_valid: List[Optional[str]], ): test1 = df.select( - pl.col("isin").isin.country_code().alias("country_code"), - pl.col("isin").isin.check_digit().alias("check_digit"), - pl.col("isin").isin.security_id().alias("security_id"), - pl.col("isin").isin.is_valid().alias("is_valid"), + isin_country_code(pl.col("isin")).alias("country_code"), + isin_check_digit(pl.col("isin")).alias("check_digit"), + isin_security_id(pl.col("isin")).alias("security_id"), + isin_is_valid(pl.col("isin")).alias("is_valid"), ) test2 = ( df.lazy() .select( - pl.col("isin").isin.country_code().alias("country_code"), - pl.col("isin").isin.check_digit().alias("check_digit"), - pl.col("isin").isin.security_id().alias("security_id"), - pl.col("isin").isin.is_valid().alias("is_valid"), + isin_country_code(pl.col("isin")).alias("country_code"), + isin_check_digit(pl.col("isin")).alias("check_digit"), + isin_security_id(pl.col("isin")).alias("security_id"), + isin_is_valid(pl.col("isin")).alias("is_valid"), ) .collect() ) From 69cd063a96e29da22f2b9200585080a14ff1a46c Mon Sep 17 00:00:00 2001 From: Connor Duncan Date: Mon, 22 Jul 2024 13:28:24 -0500 Subject: [PATCH 2/2] Bump version to 0.1.1 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f5cc2ca..a6b4aa6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "maturin" [project] name = "polars_istr" requires-python = ">=3.8" -version = "0.1.0" +version = "0.1.1" license = {file = "LICENSE.txt"} classifiers = [