@@ -667,6 +667,65 @@ def test_pull_non_existing_raises(self):
667667 with pytest .raises (FileNotFoundError ):
668668 results .pull (raise_on_missing = True )
669669
670+ def test_pull_strict (self , tmp_path ):
671+ handler = LocalFileHandler (tmp_path / "results.csv" )
672+
673+ headers_a = {"a" : float , "b" : str , "c" : int }
674+ results_a = ResultCollector (headers_a , handler = handler )
675+ results_a .new_row ()
676+ results_a .collect (a = 1.2 , b = "foo" , c = 3 )
677+ results_a .new_row ()
678+ results_a .collect (a = 4.5 , b = "bar" , c = 6 )
679+ results_a .push ()
680+
681+ headers_b = {"b" : str , "c" : int , "d" : float } # partially different headers
682+ results_b = ResultCollector (headers_b , handler = handler )
683+ results_b .pull (strict = False )
684+
685+ results_b .push ()
686+ results_a .pull (strict = False )
687+
688+ df_out_a = results_a .dataframe
689+ df_out_b = results_b .dataframe
690+
691+ df_expect_a = pd .DataFrame (
692+ data = {
693+ "a" : [None , None ],
694+ "b" : ["foo" , "bar" ],
695+ "c" : [3 , 6 ],
696+ },
697+ index = pd .Index ([0 , 1 ], dtype = "int64" ),
698+ ).astype ({"a" : "float64" , "b" : "string" , "c" : "Int64" })
699+
700+ df_expect_b = pd .DataFrame (
701+ data = {
702+ "b" : ["foo" , "bar" ],
703+ "c" : [3 , 6 ],
704+ "d" : [None , None ],
705+ },
706+ index = pd .Index ([0 , 1 ], dtype = "int64" ),
707+ ).astype ({"b" : "string" , "c" : "Int64" , "d" : "float64" })
708+
709+ # Remove `check_index_type=False` when issue with index type in `pull` is fixed
710+ pd .testing .assert_frame_equal (df_out_a , df_expect_a , check_index_type = False )
711+ pd .testing .assert_frame_equal (df_out_b , df_expect_b , check_index_type = False )
712+
713+ def test_pull_strict_raises (self , tmp_path ):
714+ handler = LocalFileHandler (tmp_path / "results.csv" )
715+
716+ headers_a = {"a" : float , "b" : str , "c" : int }
717+ results_a = ResultCollector (headers_a , handler = handler )
718+ results_a .new_row ()
719+ results_a .collect (a = 1.2 , b = "foo" , c = 3 )
720+ results_a .new_row ()
721+ results_a .collect (a = 4.5 , b = "bar" , c = 6 )
722+ results_a .push ()
723+
724+ headers_b = {"b" : str , "c" : int , "d" : float } # different headers
725+ results_b = ResultCollector (headers_b , handler = handler )
726+ with pytest .raises (ValueError ):
727+ results_b .pull ()
728+
670729 def test_push_auto (self , tmp_path ):
671730 handler = LocalFileHandler (tmp_path / "results.csv" )
672731 headers = {"a" : float , "b" : str , "c" : float , "d" : str }
0 commit comments