@@ -132,17 +132,23 @@ def test_select_column_doesnt_mutate_original_tf(self) -> None:
132132 assert col2_tf == expected
133133 assert_frame_equal (tf .df , original_df )
134134
135- def test_select_column_with_flags (self ) -> None :
135+ def test_select_column_does_not_auto_include_flags (self ) -> None :
136+ """Flag columns are not automatically included when selecting a data column."""
136137 tf = TimeFrame (self .df , time_name = "time" ).with_flag_system ("system" , {"A" : 1 , "B" : 2 , "C" : 4 })
137- tf .init_flag_column ("col1" , "system" , "flag_col" )
138-
139- expected = TimeFrame (self .df .select (["time" , "col1" ]), time_name = "time" ).with_flag_system (
140- "system" , {"A" : 1 , "B" : 2 , "C" : 4 }
141- )
142- expected .init_flag_column ("col1" , "system" , "flag_col" )
138+ tf .init_flag_column ("system" , "flag_col" )
143139
144140 result = tf .select (["col1" ])
145- assert result == expected
141+ assert "flag_col" not in result .df .columns
142+ assert "flag_col" not in result .flag_columns
143+
144+ def test_select_column_with_explicit_flag_column (self ) -> None :
145+ """Flag columns are preserved when explicitly included in select."""
146+ tf = TimeFrame (self .df , time_name = "time" ).with_flag_system ("system" , {"A" : 1 , "B" : 2 , "C" : 4 })
147+ tf .init_flag_column ("system" , "flag_col" )
148+
149+ result = tf .select (["col1" , "flag_col" ])
150+ assert "flag_col" in result .df .columns
151+ assert "flag_col" in result .flag_columns
146152
147153
148154class TestGetItem :
@@ -370,15 +376,15 @@ def test_init_flag_column_success(self) -> None:
370376 # Shouldn't have any flag columns to start with
371377 assert tf ._flag_manager ._flag_columns == {}
372378
373- tf .init_flag_column ("value" , " quality_control" , "flag_column" )
374- assert tf ._flag_manager ._flag_columns == {"flag_column" : FlagColumn ("flag_column" , "value" , flag_system )}
379+ tf .init_flag_column ("quality_control" , "flag_column" )
380+ assert tf ._flag_manager ._flag_columns == {"flag_column" : FlagColumn ("flag_column" , flag_system )}
375381
376382 assert "flag_column" in tf .flag_columns
377383
378384 def test_init_column_adds_to_metadata (self ) -> None :
379385 """Test that a new flag column gets added to the column metadata dict."""
380386 tf , flag_system = self .setup_tf ()
381- tf .init_flag_column ("value" , " quality_control" , "flag_column" )
387+ tf .init_flag_column ("quality_control" , "flag_column" )
382388 expected = {"time" : {}, "value" : {}, "existing_flags" : {}, "flag_column" : {}}
383389 assert tf .column_metadata == expected
384390
@@ -389,7 +395,7 @@ def test_init_flag_column_with_single_value(self) -> None:
389395 # Shouldn't have any flag columns to start with
390396 assert tf ._flag_manager ._flag_columns == {}
391397
392- tf .init_flag_column ("value" , " quality_control" , "flag_column" , 1 )
398+ tf .init_flag_column ("quality_control" , "flag_column" , 1 )
393399 expected_values = pl .Series ("flag_column" , [1 , 1 , 1 ], dtype = pl .Int64 )
394400 assert_series_equal (tf .df ["flag_column" ], expected_values )
395401
@@ -400,7 +406,7 @@ def test_init_flag_column_with_list_value(self) -> None:
400406 # Shouldn't have any flag columns to start with
401407 assert tf ._flag_manager ._flag_columns == {}
402408
403- tf .init_flag_column ("value" , " quality_control" , "flag_column" , [1 , 2 , 4 ])
409+ tf .init_flag_column ("quality_control" , "flag_column" , [1 , 2 , 4 ])
404410 expected_values = pl .Series ("flag_column" , [1 , 2 , 4 ], dtype = pl .Int64 )
405411 assert_series_equal (tf .df ["flag_column" ], expected_values )
406412
@@ -411,21 +417,43 @@ def test_with_no_flag_column_name(self) -> None:
411417 # Shouldn't have any flag columns to start with
412418 assert tf ._flag_manager ._flag_columns == {}
413419
414- tf .init_flag_column ("value" , " quality_control" )
415- default_name = "value__flag__quality_control "
420+ tf .init_flag_column ("quality_control" )
421+ default_name = "__flag__quality_control "
416422
417- assert tf ._flag_manager ._flag_columns == {default_name : FlagColumn (default_name , "value" , flag_system )}
423+ assert tf ._flag_manager ._flag_columns == {default_name : FlagColumn (default_name , flag_system )}
418424
419425 assert default_name in tf .flag_columns
420426
421427 def test_init_no_column_name_adds_to_metadata (self ) -> None :
422428 """Test that a new flag column gets added to the column metadata dict."""
423429 tf , flag_system = self .setup_tf ()
424430
425- tf .init_flag_column ("value" , " quality_control" )
426- expected = {"time" : {}, "value" : {}, "existing_flags" : {}, "value__flag__quality_control " : {}}
431+ tf .init_flag_column ("quality_control" )
432+ expected = {"time" : {}, "value" : {}, "existing_flags" : {}, "__flag__quality_control " : {}}
427433 assert tf .column_metadata == expected
428434
435+ def test_auto_name_collision_avoidance (self ) -> None :
436+ """Test that a numeric suffix is appended when the auto-generated name already exists."""
437+ tf , flag_system = self .setup_tf ()
438+
439+ tf .init_flag_column ("quality_control" )
440+ tf .init_flag_column ("quality_control" )
441+
442+ assert "__flag__quality_control" in tf .flag_columns
443+ assert "__flag__quality_control__1" in tf .flag_columns
444+
445+ def test_auto_name_collision_avoidance_multiple (self ) -> None :
446+ """Test that the numeric suffix increments correctly across multiple collisions."""
447+ tf , flag_system = self .setup_tf ()
448+
449+ tf .init_flag_column ("quality_control" )
450+ tf .init_flag_column ("quality_control" )
451+ tf .init_flag_column ("quality_control" )
452+
453+ assert "__flag__quality_control" in tf .flag_columns
454+ assert "__flag__quality_control__1" in tf .flag_columns
455+ assert "__flag__quality_control__2" in tf .flag_columns
456+
429457
430458class TestTimeSeriesEquality :
431459 def setUp (self ) -> None :
0 commit comments