@@ -3760,8 +3760,199 @@ def test_dt_methods(self):
3760
3760
3761
3761
tbl = self .s .addtable (table = 'datetime' , caslib = self .srcLib ,
3762
3762
** pd_dmh .args .addtable ).casTable
3763
- tbl ['dbldatetime' ] = tbl ['datetime' ] * 1.0
3764
- # tbl['sasdatetime'] = tbl['datetime'] / 1000000.
3763
+
3764
+ with self .assertRaises (TypeError ):
3765
+ self .table ['Model' ].dt .year
3766
+
3767
+ # year
3768
+ self .assertColsEqual (df .date .dt .year , tbl .date .dt .year , sort = True )
3769
+ self .assertColsEqual (df .time .dt .year , tbl .time .dt .year , sort = True )
3770
+ self .assertColsEqual (df .datetime .dt .year , tbl .datetime .dt .year , sort = True )
3771
+
3772
+ # month
3773
+ self .assertColsEqual (df .date .dt .month , tbl .date .dt .month , sort = True )
3774
+ self .assertColsEqual (df .time .dt .month , tbl .time .dt .month , sort = True )
3775
+ self .assertColsEqual (df .datetime .dt .month , tbl .datetime .dt .month , sort = True )
3776
+
3777
+ # day
3778
+ self .assertColsEqual (df .date .dt .day , tbl .date .dt .day , sort = True )
3779
+ self .assertColsEqual (df .time .dt .day , tbl .time .dt .day , sort = True )
3780
+ self .assertColsEqual (df .datetime .dt .day , tbl .datetime .dt .day , sort = True )
3781
+
3782
+ # hour
3783
+ self .assertColsEqual (df .date .dt .hour , tbl .date .dt .hour , sort = True )
3784
+ self .assertColsEqual (df .time .dt .hour , tbl .time .dt .hour , sort = True )
3785
+ self .assertColsEqual (df .datetime .dt .hour , tbl .datetime .dt .hour , sort = True )
3786
+
3787
+ # minute
3788
+ self .assertColsEqual (df .date .dt .minute , tbl .date .dt .minute , sort = True )
3789
+ self .assertColsEqual (df .time .dt .minute , tbl .time .dt .minute , sort = True )
3790
+ self .assertColsEqual (df .datetime .dt .minute , tbl .datetime .dt .minute , sort = True )
3791
+
3792
+ # second
3793
+ self .assertColsEqual (df .date .dt .second , tbl .date .dt .second , sort = True )
3794
+ self .assertColsEqual (df .time .dt .second , tbl .time .dt .second , sort = True )
3795
+ self .assertColsEqual (df .datetime .dt .second , tbl .datetime .dt .second , sort = True )
3796
+
3797
+ # microsecond
3798
+ # TODO: Needs to be implemented yet
3799
+ self .assertColsEqual (df .date .dt .microsecond ,
3800
+ tbl .date .dt .microsecond , sort = True )
3801
+ self .assertColsEqual (df .time .dt .microsecond ,
3802
+ tbl .time .dt .microsecond , sort = True )
3803
+ self .assertColsEqual (df .datetime .dt .microsecond ,
3804
+ tbl .datetime .dt .microsecond , sort = True )
3805
+
3806
+ # nanosecond
3807
+ # NOTE: nanosecond precision is not supported
3808
+ self .assertColsEqual (df .date .dt .nanosecond ,
3809
+ tbl .date .dt .nanosecond , sort = True )
3810
+ self .assertColsEqual (df .time .dt .nanosecond ,
3811
+ tbl .time .dt .nanosecond , sort = True )
3812
+ self .assertColsEqual (df .datetime .dt .nanosecond ,
3813
+ tbl .datetime .dt .nanosecond , sort = True )
3814
+
3815
+ # week
3816
+ self .assertColsEqual (df .date .dt .week ,
3817
+ tbl .date .dt .week , sort = True )
3818
+ self .assertColsEqual (df .time .dt .week ,
3819
+ tbl .time .dt .week , sort = True )
3820
+ self .assertColsEqual (df .datetime .dt .week ,
3821
+ tbl .datetime .dt .week , sort = True )
3822
+
3823
+ # weekofyear
3824
+ self .assertColsEqual (df .date .dt .weekofyear ,
3825
+ tbl .date .dt .weekofyear , sort = True )
3826
+ self .assertColsEqual (df .time .dt .weekofyear ,
3827
+ tbl .time .dt .weekofyear , sort = True )
3828
+ self .assertColsEqual (df .datetime .dt .weekofyear ,
3829
+ tbl .datetime .dt .weekofyear , sort = True )
3830
+
3831
+ # dayofweek
3832
+ self .assertColsEqual (df .date .dt .dayofweek ,
3833
+ tbl .date .dt .dayofweek , sort = True )
3834
+ self .assertColsEqual (df .time .dt .dayofweek ,
3835
+ tbl .time .dt .dayofweek , sort = True )
3836
+ self .assertColsEqual (df .datetime .dt .dayofweek ,
3837
+ tbl .datetime .dt .dayofweek , sort = True )
3838
+
3839
+ # weekday
3840
+ self .assertColsEqual (df .date .dt .weekday ,
3841
+ tbl .date .dt .weekday , sort = True )
3842
+ self .assertColsEqual (df .time .dt .weekday ,
3843
+ tbl .time .dt .weekday , sort = True )
3844
+ self .assertColsEqual (df .datetime .dt .weekday ,
3845
+ tbl .datetime .dt .weekday , sort = True )
3846
+
3847
+ # dayofyear
3848
+ self .assertColsEqual (df .date .dt .dayofyear ,
3849
+ tbl .date .dt .dayofyear , sort = True )
3850
+ self .assertColsEqual (df .time .dt .dayofyear ,
3851
+ tbl .time .dt .dayofyear , sort = True )
3852
+ self .assertColsEqual (df .datetime .dt .dayofyear ,
3853
+ tbl .datetime .dt .dayofyear , sort = True )
3854
+
3855
+ # quarter
3856
+ self .assertColsEqual (df .date .dt .quarter ,
3857
+ tbl .date .dt .quarter , sort = True )
3858
+ self .assertColsEqual (df .time .dt .quarter ,
3859
+ tbl .time .dt .quarter , sort = True )
3860
+ self .assertColsEqual (df .datetime .dt .quarter ,
3861
+ tbl .datetime .dt .quarter , sort = True )
3862
+
3863
+ # is_month_start
3864
+ self .assertColsEqual (df .date .dt .is_month_start ,
3865
+ tbl .date .dt .is_month_start , sort = True )
3866
+ self .assertColsEqual (df .time .dt .is_month_start ,
3867
+ tbl .time .dt .is_month_start , sort = True )
3868
+ self .assertColsEqual (df .datetime .dt .is_month_start ,
3869
+ tbl .datetime .dt .is_month_start , sort = True )
3870
+
3871
+ # is_month_end
3872
+ self .assertColsEqual (df .date .dt .is_month_end ,
3873
+ tbl .date .dt .is_month_end , sort = True )
3874
+ self .assertColsEqual (df .time .dt .is_month_end ,
3875
+ tbl .time .dt .is_month_end , sort = True )
3876
+ self .assertColsEqual (df .datetime .dt .is_month_end ,
3877
+ tbl .datetime .dt .is_month_end , sort = True )
3878
+
3879
+ # is_quarter_start
3880
+ self .assertColsEqual (df .date .dt .is_quarter_start ,
3881
+ tbl .date .dt .is_quarter_start , sort = True )
3882
+ self .assertColsEqual (df .time .dt .is_quarter_start ,
3883
+ tbl .time .dt .is_quarter_start , sort = True )
3884
+ self .assertColsEqual (df .datetime .dt .is_quarter_start ,
3885
+ tbl .datetime .dt .is_quarter_start , sort = True )
3886
+
3887
+ # is_quarter_end
3888
+ self .assertColsEqual (df .date .dt .is_quarter_end ,
3889
+ tbl .date .dt .is_quarter_end , sort = True )
3890
+ self .assertColsEqual (df .time .dt .is_quarter_end ,
3891
+ tbl .time .dt .is_quarter_end , sort = True )
3892
+ self .assertColsEqual (df .datetime .dt .is_quarter_end ,
3893
+ tbl .datetime .dt .is_quarter_end , sort = True )
3894
+
3895
+ # is_year_start
3896
+ self .assertColsEqual (df .date .dt .is_year_start ,
3897
+ tbl .date .dt .is_year_start , sort = True )
3898
+ self .assertColsEqual (df .time .dt .is_year_start ,
3899
+ tbl .time .dt .is_year_start , sort = True )
3900
+ self .assertColsEqual (df .datetime .dt .is_year_start ,
3901
+ tbl .datetime .dt .is_year_start , sort = True )
3902
+
3903
+ # is_year_end
3904
+ self .assertColsEqual (df .date .dt .is_year_end ,
3905
+ tbl .date .dt .is_year_end , sort = True )
3906
+ self .assertColsEqual (df .time .dt .is_year_end ,
3907
+ tbl .time .dt .is_year_end , sort = True )
3908
+ self .assertColsEqual (df .datetime .dt .is_year_end ,
3909
+ tbl .datetime .dt .is_year_end , sort = True )
3910
+
3911
+ # daysinmonth
3912
+ self .assertColsEqual (df .date .dt .daysinmonth ,
3913
+ tbl .date .dt .daysinmonth , sort = True )
3914
+ self .assertColsEqual (df .time .dt .daysinmonth ,
3915
+ tbl .time .dt .daysinmonth , sort = True )
3916
+ self .assertColsEqual (df .datetime .dt .daysinmonth ,
3917
+ tbl .datetime .dt .daysinmonth , sort = True )
3918
+
3919
+ # days_in_month
3920
+ self .assertColsEqual (df .date .dt .days_in_month ,
3921
+ tbl .date .dt .days_in_month , sort = True )
3922
+ self .assertColsEqual (df .time .dt .days_in_month ,
3923
+ tbl .time .dt .days_in_month , sort = True )
3924
+ self .assertColsEqual (df .datetime .dt .days_in_month ,
3925
+ tbl .datetime .dt .days_in_month , sort = True )
3926
+
3927
+ @unittest .skipIf (pd_version <= (0 , 14 , 0 ), 'Need newer version of Pandas' )
3928
+ def test_sas_dt_methods (self ):
3929
+ if self .s ._protocol in ['http' , 'https' ]:
3930
+ tm .TestCase .skipTest (self , 'REST does not support data messages' )
3931
+
3932
+ import swat .tests as st
3933
+
3934
+ myFile = os .path .join (os .path .dirname (st .__file__ ), 'datasources' , 'datetime.csv' )
3935
+
3936
+ df = pd .read_csv (myFile , parse_dates = [0 , 1 , 2 ])
3937
+ df .sort_values (['datetime' ], inplace = True )
3938
+ df2 = df [:]
3939
+
3940
+ from swat .cas .utils .datetime import (python2sas_date ,
3941
+ python2sas_time ,
3942
+ python2sas_datetime )
3943
+ df2 ['date' ] = df2 ['date' ].apply (python2sas_date )
3944
+ df2 ['datetime' ] = df2 ['datetime' ].apply (python2sas_datetime )
3945
+ df2 ['time' ] = df2 ['time' ].apply (python2sas_time )
3946
+
3947
+ from swat .cas import datamsghandlers as dmh
3948
+
3949
+ pd_dmh = dmh .PandasDataFrame (
3950
+ df2 ,
3951
+ formats = {'date' : 'nldate' , 'time' : 'nltime' , 'datetime' : 'nldatm' },
3952
+ labels = {'date' : 'Date' , 'time' : 'Time' , 'datetime' : 'Datetime' })
3953
+
3954
+ tbl = self .s .addtable (table = 'datetime' , caslib = self .srcLib ,
3955
+ ** pd_dmh .args .addtable ).casTable
3765
3956
3766
3957
with self .assertRaises (TypeError ):
3767
3958
self .table ['Model' ].dt .year
0 commit comments