66import numpy
77import vetiver
88
9+ import pytest
10+
911rng = pd .date_range ("1/1/2012" , periods = 10 , freq = "S" )
1012new = dict (x = range (len (rng )), y = range (len (rng )))
1113df = pd .DataFrame (new , index = rng )
@@ -41,17 +43,22 @@ def test_monitor(snapshot):
4143 snapshot .assert_match (m .to_json (), "test_monitor.json" )
4244
4345
44- def test_vetiver_pin_metrics ():
45- board = pins . board_temp ()
46- df_metrics_old = pd .DataFrame (
46+ @ pytest . fixture
47+ def df_metrics_old ():
48+ return pd .DataFrame (
4749 {
4850 "index" : pd .to_datetime (["2021-01-01" , "2021-01-02" ]),
4951 "n" : [1 , 2 ],
5052 "metric" : ["x" , "x" ],
51- "estimate" : [0.6 , 0.7 ],
53+ "estimate" : [0.1 , 0.2 ],
5254 }
5355 )
5456
57+
58+ def test_vetiver_pin_metrics_simple (df_metrics_old ):
59+ board = pins .board_temp ()
60+ board .pin_write (df_metrics_old , "test_metrics" , type = "csv" )
61+
5562 df_metrics_new = pd .DataFrame (
5663 {
5764 "index" : pd .to_datetime (["2021-01-03" , "2021-01-04" ]),
@@ -61,8 +68,53 @@ def test_vetiver_pin_metrics():
6168 }
6269 )
6370
64- board .pin_write (df_metrics_old , "test_metrics" , type = "arrow" )
65-
6671 df_res = vetiver .pin_metrics (board , df_metrics_new , "test_metrics" )
6772
6873 assert len (df_res ) == 4
74+ assert df_res .equals (pd .concat ([df_metrics_old , df_metrics_new ], ignore_index = True ))
75+
76+
77+ def test_vetiver_pin_metrics_overlap_error (df_metrics_old ):
78+ board = pins .board_temp ()
79+ board .pin_write (df_metrics_old , "test_metrics" , type = "csv" )
80+
81+ with pytest .raises (ValueError ) as exc_info :
82+ vetiver .pin_metrics (board , df_metrics_old , "test_metrics" )
83+
84+ assert "The new metrics overlap" in exc_info .value .args [0 ]
85+
86+
87+ def test_vetiver_pin_metrics_overwrite (df_metrics_old ):
88+ board = pins .board_temp ()
89+ board .pin_write (df_metrics_old , "test_metrics" , type = "csv" )
90+
91+ # first row should update existing metrics
92+ df_metrics_new = pd .DataFrame (
93+ {
94+ "index" : pd .to_datetime (["2021-01-01" , "2021-01-03" ]),
95+ "n" : [200 , 201 ],
96+ "metric" : ["y" , "y" ],
97+ "estimate" : [0.8 , 0.9 ],
98+ }
99+ )
100+
101+ df_res = vetiver .pin_metrics (board , df_metrics_new , "test_metrics" , overwrite = True )
102+ assert len (df_res ) == 3
103+
104+ df_dst = pd .concat ([df_metrics_old .iloc [[1 ], :], df_metrics_new ], ignore_index = True )
105+ assert df_res .equals (df_dst .sort_values ("index" ))
106+
107+
108+ def test_vetiver_pin_metrics_manual_pin_type (df_metrics_old ):
109+ board = pins .board_temp ()
110+ board .pin_write (df_metrics_old , "test_metrics" , type = "csv" )
111+
112+ df_res = vetiver .pin_metrics (
113+ board , df_metrics_old , "test_metrics" , overwrite = True , pin_type = "joblib"
114+ )
115+
116+ assert len (df_res ) == 2
117+
118+ meta = board .pin_meta ("test_metrics" )
119+
120+ assert meta .type == "joblib"
0 commit comments