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

Commit 59c3a2a

Browse files
committed
refactor: use mutable ColumnClassification object in _flatten.py
1 parent 15bdf54 commit 59c3a2a

1 file changed

Lines changed: 21 additions & 20 deletions

File tree

bigframes/display/_flatten.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class FlattenResult:
5050
nested_columns: set[str]
5151

5252

53-
@dataclasses.dataclass(frozen=True)
53+
@dataclasses.dataclass
5454
class ColumnClassification:
5555
"""The result of classifying columns.
5656
@@ -107,40 +107,41 @@ def flatten_nested_data(
107107
result_df = dataframe.copy()
108108

109109
classification = _classify_columns(result_df)
110-
# Extract lists to allow modification by subsequent steps.
111-
# _flatten_array_of_struct_columns will modify array_columns to replace
112-
# the original array-of-struct column with the new flattened array columns.
113-
struct_columns = classification.struct_columns
114-
array_columns = classification.array_columns
115-
array_of_struct_columns = classification.array_of_struct_columns
116-
clear_on_continuation_cols = classification.clear_on_continuation_cols
117-
nested_originated_columns = classification.nested_originated_columns
118-
119-
result_df, array_columns = _flatten_array_of_struct_columns(
120-
result_df, array_of_struct_columns, array_columns, nested_originated_columns
110+
# Create a mutable structure to track column changes during flattening.
111+
# _flatten_array_of_struct_columns modifies the array_columns list.
112+
columns_info = dataclasses.replace(classification)
113+
114+
result_df, columns_info.array_columns = _flatten_array_of_struct_columns(
115+
result_df,
116+
columns_info.array_of_struct_columns,
117+
columns_info.array_columns,
118+
columns_info.nested_originated_columns,
121119
)
122120

123-
result_df, clear_on_continuation_cols = _flatten_struct_columns(
124-
result_df, struct_columns, clear_on_continuation_cols, nested_originated_columns
121+
result_df, columns_info.clear_on_continuation_cols = _flatten_struct_columns(
122+
result_df,
123+
columns_info.struct_columns,
124+
columns_info.clear_on_continuation_cols,
125+
columns_info.nested_originated_columns,
125126
)
126127

127128
# Now handle ARRAY columns (including the newly created ones from ARRAY of STRUCT)
128-
if not array_columns:
129+
if not columns_info.array_columns:
129130
return FlattenResult(
130131
dataframe=result_df,
131132
row_labels=None,
132133
continuation_rows=None,
133-
cleared_on_continuation=clear_on_continuation_cols,
134-
nested_columns=nested_originated_columns,
134+
cleared_on_continuation=columns_info.clear_on_continuation_cols,
135+
nested_columns=columns_info.nested_originated_columns,
135136
)
136137

137-
explode_result = _explode_array_columns(result_df, array_columns)
138+
explode_result = _explode_array_columns(result_df, columns_info.array_columns)
138139
return FlattenResult(
139140
dataframe=explode_result.dataframe,
140141
row_labels=explode_result.row_labels,
141142
continuation_rows=explode_result.continuation_rows,
142-
cleared_on_continuation=clear_on_continuation_cols,
143-
nested_columns=nested_originated_columns,
143+
cleared_on_continuation=columns_info.clear_on_continuation_cols,
144+
nested_columns=columns_info.nested_originated_columns,
144145
)
145146

146147

0 commit comments

Comments
 (0)