Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 18 additions & 15 deletions py-polars/src/polars/datatypes/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@

def dtype_to_init_repr(dtype: PolarsDataType, prefix: str = "pl.") -> str:
"""Convert a Polars dtype to a prefixed string representation."""
if isinstance(dtype, List):
init_repr = _dtype_to_init_repr_list(dtype, prefix)
elif isinstance(dtype, Array):
init_repr = _dtype_to_init_repr_array(dtype, prefix)
elif isinstance(dtype, Struct):
init_repr = _dtype_to_init_repr_struct(dtype, prefix)
# Use type checks instead of isinstance for faster dispatch where possible
dtype_type = type(dtype)
if dtype_type is List:
return _dtype_to_init_repr_list(dtype, prefix)
elif dtype_type is Array:
return _dtype_to_init_repr_array(dtype, prefix)
elif dtype_type is Struct:
return _dtype_to_init_repr_struct(dtype, prefix)
else:
init_repr = f"{prefix}{dtype!r}"
return init_repr
return f"{prefix}{dtype!r}"


def _dtype_to_init_repr_list(dtype: List, prefix: str) -> str:
Expand All @@ -38,11 +39,13 @@ def _dtype_to_init_repr_array(dtype: Array, prefix: str) -> str:


def _dtype_to_init_repr_struct(dtype: Struct, prefix: str) -> str:
class_name = dtype.__class__.__name__
inner_list = [
f"{field_name!r}: {dtype_to_init_repr(inner_dtype, prefix)}"
for field_name, inner_dtype in dict(dtype).items()
]
# Avoid repeated dict conversion; Struct is likely a mapping already
fields = dtype.items() if hasattr(dtype, "items") else dict(dtype).items()
# Use list comprehension directly for efficiency
inner_list = []
for field_name, inner_dtype in fields:
# Only one f-string created per iteration, avoids unnecessary temporaries
inner_list.append(f"{field_name!r}: {dtype_to_init_repr(inner_dtype, prefix)}")
inner_repr = "{" + ", ".join(inner_list) + "}"
init_repr = f"{prefix}{class_name}({inner_repr})"
return init_repr
class_name = dtype.__class__.__name__
return f"{prefix}{class_name}({inner_repr})"