@@ -2273,24 +2273,101 @@ def test_order(self):
22732273 self .assertTrue (ordered [::- 1 ].is_monotonic )
22742274 self .assert_numpy_array_equal (dexer , [0 , 2 , 1 ])
22752275
2276+ def test_asobject (self ):
2277+ idx = date_range (start = '2013-01-01' , periods = 4 , freq = 'M' , name = 'idx' )
2278+ expected = Index ([Timestamp ('2013-01-31' ), Timestamp ('2013-02-28' ),
2279+ Timestamp ('2013-03-31' ), Timestamp ('2013-04-30' )],
2280+ dtype = object , name = 'idx' )
2281+
2282+ result = idx .asobject
2283+ self .assertTrue (result .equals (expected ))
2284+ self .assertEqual (result .name , expected .name )
2285+
22762286 def test_insert (self ):
2277- idx = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-02' ])
2287+ idx = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-02' ], name = 'idx' )
22782288
22792289 result = idx .insert (2 , datetime (2000 , 1 , 5 ))
2280- exp = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-05' ,
2281- '2000-01-02' ])
2282- self .assertTrue (result .equals (exp ))
2290+ expected = DatetimeIndex (['2000-01-04' , '2000-01-01' , '2000-01-05' ,
2291+ '2000-01-02' ], name = 'idx' )
2292+ self .assertTrue (result .equals (expected ))
2293+ self .assertEqual (result .name , expected .name )
22832294
22842295 # insertion of non-datetime should coerce to object index
22852296 result = idx .insert (1 , 'inserted' )
22862297 expected = Index ([datetime (2000 , 1 , 4 ), 'inserted' , datetime (2000 , 1 , 1 ),
2287- datetime (2000 , 1 , 2 )])
2298+ datetime (2000 , 1 , 2 )], name = 'idx' )
22882299 self .assertNotIsInstance (result , DatetimeIndex )
22892300 tm .assert_index_equal (result , expected )
2301+ self .assertEqual (result .name , expected .name )
2302+
2303+ idx = date_range ('1/1/2000' , periods = 3 , freq = 'M' , name = 'idx' )
2304+
2305+ # preserve freq
2306+ expected_0 = DatetimeIndex (['1999-12-31' , '2000-01-31' , '2000-02-29' ,
2307+ '2000-03-31' ], name = 'idx' , freq = 'M' )
2308+ expected_3 = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2309+ '2000-04-30' ], name = 'idx' , freq = 'M' )
2310+
2311+ # reset freq to None
2312+ expected_1_nofreq = DatetimeIndex (['2000-01-31' , '2000-01-31' , '2000-02-29' ,
2313+ '2000-03-31' ], name = 'idx' , freq = None )
2314+ expected_3_nofreq = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2315+ '2000-01-02' ], name = 'idx' , freq = None )
2316+
2317+ cases = [(0 , datetime (1999 , 12 , 31 ), expected_0 ),
2318+ (- 3 , datetime (1999 , 12 , 31 ), expected_0 ),
2319+ (3 , datetime (2000 , 4 , 30 ), expected_3 ),
2320+ (1 , datetime (2000 , 1 , 31 ), expected_1_nofreq ),
2321+ (3 , datetime (2000 , 1 , 2 ), expected_3_nofreq )]
2322+
2323+ for n , d , expected in cases :
2324+ result = idx .insert (n , d )
2325+ self .assertTrue (result .equals (expected ))
2326+ self .assertEqual (result .name , expected .name )
2327+ self .assertEqual (result .freq , expected .freq )
22902328
2291- idx = date_range ('1/1/2000' , periods = 3 , freq = 'M' )
2292- result = idx .insert (3 , datetime (2000 , 4 , 30 ))
2293- self .assertEqual (result .freqstr , 'M' )
2329+ # reset freq to None
2330+ result = idx .insert (3 , datetime (2000 , 1 , 2 ))
2331+ expected = DatetimeIndex (['2000-01-31' , '2000-02-29' , '2000-03-31' ,
2332+ '2000-01-02' ], name = 'idx' , freq = None )
2333+ self .assertTrue (result .equals (expected ))
2334+ self .assertEqual (result .name , expected .name )
2335+ self .assertTrue (result .freq is None )
2336+
2337+ # GH 7299
2338+ _skip_if_no_pytz ()
2339+ import pytz
2340+
2341+ idx = date_range ('1/1/2000' , periods = 3 , freq = 'D' , tz = 'US/Pacific' , name = 'idx' )
2342+ with tm .assertRaises (ValueError ):
2343+ result = idx .insert (3 , pd .Timestamp ('2000-01-04' ))
2344+ with tm .assertRaises (ValueError ):
2345+ result = idx .insert (3 , datetime (2000 , 1 , 4 ))
2346+ with tm .assertRaises (ValueError ):
2347+ result = idx .insert (3 , pd .Timestamp ('2000-01-04' , tz = 'US/Eastern' ))
2348+ with tm .assertRaises (ValueError ):
2349+ result = idx .insert (3 , datetime (2000 , 1 , 4 , tzinfo = pytz .timezone ('US/Eastern' )))
2350+
2351+ # preserve freq
2352+ expected = date_range ('1/1/2000' , periods = 4 , freq = 'D' , tz = 'US/Pacific' , name = 'idx' )
2353+ for d in [pd .Timestamp ('2000-01-04' , tz = 'US/Pacific' ),
2354+ datetime (2000 , 1 , 4 , tzinfo = pytz .timezone ('US/Pacific' ))]:
2355+
2356+ result = idx .insert (3 , d )
2357+ self .assertTrue (result .equals (expected ))
2358+ self .assertEqual (result .name , expected .name )
2359+ self .assertEqual (result .freqstr , 'D' )
2360+
2361+ expected = DatetimeIndex (['2000-01-01' , '2000-01-02' , '2000-01-03' ,
2362+ '2000-01-02' ], name = 'idx' ,
2363+ tz = 'US/Pacific' , freq = None )
2364+ # reset freq to None
2365+ for d in [pd .Timestamp ('2000-01-02' , tz = 'US/Pacific' ),
2366+ datetime (2000 , 1 , 2 , tzinfo = pytz .timezone ('US/Pacific' ))]:
2367+ result = idx .insert (3 , d )
2368+ self .assertTrue (result .equals (expected ))
2369+ self .assertEqual (result .name , expected .name )
2370+ self .assertTrue (result .freq is None )
22942371
22952372 def test_delete (self ):
22962373 idx = date_range (start = '2000-01-01' , periods = 5 , freq = 'M' , name = 'idx' )
0 commit comments