Skip to content
This repository was archived by the owner on Apr 1, 2026. It is now read-only.

Commit cb94e06

Browse files
cleanup recursion limit stuff
1 parent 39c66f1 commit cb94e06

File tree

4 files changed

+18
-67
lines changed

4 files changed

+18
-67
lines changed

bigframes/core/blocks.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ def __init__(
140140
column_labels: typing.Union[pd.Index, typing.Iterable[Label]],
141141
index_labels: typing.Union[pd.Index, typing.Iterable[Label], None] = None,
142142
*,
143+
value_columns: Optional[Iterable[str]] = None,
143144
transpose_cache: Optional[Block] = None,
144145
):
145146
"""Construct a block object, will create default index if no index columns specified."""
@@ -158,7 +159,13 @@ def __init__(
158159
if index_labels
159160
else tuple([None for _ in index_columns])
160161
)
161-
self._expr = self._normalize_expression(expr, self._index_columns)
162+
if value_columns is None:
163+
value_columns = [
164+
col_id for col_id in expr.column_ids if col_id not in index_columns
165+
]
166+
self._expr = self._normalize_expression(
167+
expr, self._index_columns, value_columns
168+
)
162169
# Use pandas index to more easily replicate column indexing, especially for hierarchical column index
163170
self._column_labels = (
164171
column_labels.copy()
@@ -1114,13 +1121,15 @@ def project_exprs(
11141121
labels: Union[Sequence[Label], pd.Index],
11151122
drop=False,
11161123
) -> Block:
1117-
new_array, _ = self.expr.compute_values(exprs)
1124+
new_array, new_cols = self.expr.compute_values(exprs)
11181125
if drop:
11191126
new_array = new_array.drop_columns(self.value_columns)
11201127

1128+
new_val_cols = new_cols if drop else (*self.value_columns, *new_cols)
11211129
return Block(
11221130
new_array,
11231131
index_columns=self.index_columns,
1132+
value_columns=new_val_cols,
11241133
column_labels=labels
11251134
if drop
11261135
else self.column_labels.append(pd.Index(labels)),
@@ -1542,17 +1551,13 @@ def _get_labels_for_columns(self, column_ids: typing.Sequence[str]) -> pd.Index:
15421551
def _normalize_expression(
15431552
self,
15441553
expr: core.ArrayValue,
1545-
index_columns: typing.Sequence[str],
1546-
assert_value_size: typing.Optional[int] = None,
1554+
index_columns: Iterable[str],
1555+
value_columns: Iterable[str],
15471556
):
15481557
"""Normalizes expression by moving index columns to left."""
1549-
value_columns = [
1550-
col_id for col_id in expr.column_ids if col_id not in index_columns
1551-
]
1552-
if (assert_value_size is not None) and (
1553-
len(value_columns) != assert_value_size
1554-
):
1555-
raise ValueError("Unexpected number of value columns.")
1558+
normalized_ids = (*index_columns, *value_columns)
1559+
if tuple(expr.column_ids) == normalized_ids:
1560+
return expr
15561561
return expr.select_columns([*index_columns, *value_columns])
15571562

15581563
def grouped_head(

bigframes/pandas/__init__.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import datetime
2121
import inspect
2222
import sys
23-
import traceback
2423
import typing
2524
from typing import Literal, Optional, Sequence, Union
2625

@@ -370,19 +369,6 @@ def reset_session():
370369
# https://github.com/python/cpython/issues/112282
371370
sys.setrecursionlimit(max(10000000, sys.getrecursionlimit()))
372371

373-
374-
original_setrecursionlimit = sys.setrecursionlimit
375-
print(f"recursion limit set to {sys.getrecursionlimit()}")
376-
377-
378-
def patched_setrecursionlimit(n):
379-
print(f"\n[DEBUG] Recursion limit being set to {n} by:")
380-
traceback.print_stack()
381-
original_setrecursionlimit(n)
382-
383-
384-
sys.setrecursionlimit = patched_setrecursionlimit
385-
386372
if resource is not None:
387373
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_STACK)
388374
if soft_limit < hard_limit or hard_limit == resource.RLIM_INFINITY:

tests/system/small/test_dataframe.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5755,30 +5755,10 @@ def test_df_dot_operator_series(
57555755

57565756

57575757
def test_recursion_limit(scalars_df_index):
5758-
import sys
5759-
5760-
print(f"doing recursion test, recursion limit set to {sys.getrecursionlimit()}")
57615758
scalars_df_index = scalars_df_index[["int64_too", "int64_col", "float64_col"]]
57625759
for i in range(400):
57635760
scalars_df_index = scalars_df_index + 4
5764-
try:
5765-
scalars_df_index.to_pandas()
5766-
except Exception:
5767-
5768-
try:
5769-
import resource
5770-
except ImportError:
5771-
# resource is only available on Unix-like systems.
5772-
# https://docs.python.org/3/library/resource.html
5773-
resource = None # type: ignore
5774-
print(f"recursion limit: {sys.getrecursionlimit()}")
5775-
if resource is not None:
5776-
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_STACK)
5777-
print(f"stack limits: {soft_limit}, {hard_limit}")
5778-
else:
5779-
print("resource module not available")
5780-
raise
5781-
assert False
5761+
scalars_df_index.to_pandas()
57825762

57835763

57845764
@pytest.mark.skipif(

tests/unit/test_dataframe_polars.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4453,27 +4453,7 @@ def test_dataframe_explode_xfail(col_names):
44534453

44544454

44554455
def test_recursion_limit_unit(scalars_df_index):
4456-
import sys
4457-
4458-
print(f"doing recursion test, recursion limit set to {sys.getrecursionlimit()}")
44594456
scalars_df_index = scalars_df_index[["int64_too", "int64_col", "float64_col"]]
44604457
for i in range(400):
44614458
scalars_df_index = scalars_df_index + 4
4462-
try:
4463-
scalars_df_index.to_pandas()
4464-
except Exception:
4465-
4466-
try:
4467-
import resource
4468-
except ImportError:
4469-
# resource is only available on Unix-like systems.
4470-
# https://docs.python.org/3/library/resource.html
4471-
resource = None # type: ignore
4472-
print(f"recursion limit: {sys.getrecursionlimit()}")
4473-
if resource is not None:
4474-
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_STACK)
4475-
print(f"stack limits: {soft_limit}, {hard_limit}")
4476-
else:
4477-
print("resource module not available")
4478-
raise
4479-
assert False
4459+
scalars_df_index.to_pandas()

0 commit comments

Comments
 (0)