Skip to content

Commit 9087f54

Browse files
author
miranov25
committed
special treatment for constants - should be enver materialized but used
1 parent cfe72d4 commit 9087f54

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

UTILS/dfextensions/AliasDataFrame.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,13 @@ def __init__(self, df):
3232
self.df = df
3333
self.aliases = {}
3434
self.alias_dtypes = {} # Optional output types for each alias
35+
self.constant_aliases = set() # Optional set of constants that should not be materialized
3536

36-
def add_alias(self, name, expression, dtype=None):
37+
def add_alias(self, name, expression, dtype=None, is_constant=False):
38+
"""
39+
Add an alias expression to the DataFrame.
40+
Optionally specify output dtype and whether it's a constant (scalar-only).
41+
"""
3742
try:
3843
dummy_env = {k: 1 for k in list(self.df.columns) + list(self.aliases.keys())}
3944
dummy_env.update(self._default_functions())
@@ -43,6 +48,10 @@ def add_alias(self, name, expression, dtype=None):
4348
self.aliases[name] = expression
4449
if dtype is not None:
4550
self.alias_dtypes[name] = dtype
51+
if is_constant:
52+
if name in self._resolve_dependencies() and self._resolve_dependencies()[name]:
53+
print(f"[Alias warning] '{name}' marked as constant but has dependencies.")
54+
self.constant_aliases.add(name)
4655

4756
def _default_functions(self):
4857
import math
@@ -137,7 +146,8 @@ def materialize_alias0(self, name, dtype=None):
137146
result_dtype = dtype or self.alias_dtypes.get(name)
138147
if result_dtype is not None:
139148
result = result.astype(result_dtype)
140-
self.df[name] = result
149+
if name not in self.constant_aliases:
150+
self.df[name] = result
141151

142152
def materialize_alias(self, name, cleanTemporary=False, dtype=None):
143153
if name not in self.aliases:
@@ -160,6 +170,8 @@ def visit(n):
160170
original_columns = set(self.df.columns)
161171

162172
for alias in to_materialize:
173+
if alias in self.constant_aliases:
174+
continue
163175
local_env = {col: self.df[col] for col in self.df.columns}
164176
local_env.update({k: self.df[k] for k in self.aliases if k in self.df})
165177
try:
@@ -179,6 +191,8 @@ def visit(n):
179191
def materialize_all(self, dtype=None):
180192
order = self._topological_sort()
181193
for name in order:
194+
if name in self.constant_aliases:
195+
continue
182196
try:
183197
local_env = {col: self.df[col] for col in self.df.columns}
184198
local_env.update({k: self.df[k] for k in self.df.columns if k in self.aliases})

0 commit comments

Comments
 (0)