@@ -770,47 +770,120 @@ def test_subset_years(self):
770770 tc_test = tc .TCTracks .from_simulations_emanuel (TEST_TRACK_EMANUEL )
771771 for i in range (5 ):
772772 date = cftime .DatetimeProlepticGregorian (
773- 2000 + i , 2 , 20 , 0 , 0 , 0 , 0 , has_year_zero = True
773+ 2000 + i , 1 + i , 10 + i , 0 , 0 , 0 , 0 , has_year_zero = True
774774 )
775775 tc_test .data [i ]["time" ] = np .full (tc_test .data [i ].time .shape [0 ], date )
776776
777- tc_subset = tc_test .subset_year (start_year = 2001 , end_year = 2003 )
778-
779- self .assertEqual (len (tc_subset .data ), 3 )
777+ # correct calling of the function
778+ tc_subset = tc_test .subset_year (
779+ start_date = (2000 , False , False ), end_date = (2003 , False , False )
780+ )
781+ self .assertEqual (len (tc_subset .data ), 4 )
782+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
783+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
784+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().year , 2001 )
785+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().month , 2 )
786+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().year , 2002 )
787+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().month , 3 )
788+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().year , 2003 )
789+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().month , 4 )
790+ tc_subset = tc_test .subset_year (
791+ start_date = (2000 , False , False ), end_date = (2000 , False , False )
792+ )
793+ self .assertEqual (len (tc_subset .data ), 1 )
794+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
795+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
796+ tc_subset = tc_test .subset_year (
797+ start_date = (False , 1 , False ), end_date = (False , 4 , False )
798+ )
799+ self .assertEqual (len (tc_subset .data ), 4 )
800+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
801+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
802+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().year , 2001 )
803+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().month , 2 )
804+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().year , 2002 )
805+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().month , 3 )
806+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().year , 2003 )
807+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().month , 4 )
808+ tc_subset = tc_test .subset_year (
809+ start_date = (False , 3 , False ), end_date = (False , 3 , False )
810+ )
811+ self .assertEqual (len (tc_subset .data ), 1 )
812+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 3 )
813+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2002 )
814+ tc_subset = tc_test .subset_year (
815+ start_date = (False , False , 11 ), end_date = (False , False , 14 )
816+ )
817+ self .assertEqual (len (tc_subset .data ), 4 )
780818 self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2001 )
819+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 2 )
781820 self .assertEqual (tc_subset .data [1 ].time [0 ].item ().year , 2002 )
821+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().month , 3 )
782822 self .assertEqual (tc_subset .data [2 ].time [0 ].item ().year , 2003 )
783-
784- # Invalid input: non-integer start_year
785- with self .assertRaisesRegex (
786- TypeError , "Both start_year and end_year must be integers."
787- ):
788- tc_test .subset_year (start_year = "2000" , end_year = 2003 )
789-
790- # Invalid input: non-integer end_year
791- with self .assertRaisesRegex (
792- TypeError , "Both start_year and end_year must be integers."
793- ):
794- tc_test .subset_year (start_year = 2000 , end_year = None )
795-
796- # Invalid range: start_year greater than end_year
797- with self .assertRaisesRegex (
798- ValueError , r"start_year \(2005\) cannot be greater than end_year \(2000\)."
799- ):
800- tc_test .subset_year (start_year = 2005 , end_year = 2000 )
801-
802- # No tracks match the year range
803- with self .assertRaisesRegex (
804- ValueError , "No tracks found for the years between 2050 and 2060."
805- ):
806- tc_test .subset_year (start_year = 2050 , end_year = 2060 )
807-
808- # Empty data case
809- empty_tc = tc .TCTracks ()
810- with self .assertRaisesRegex (
811- TypeError , "self.data should be a non-empty list of tracks."
812- ):
813- empty_tc .subset_year (start_year = 2000 , end_year = 2010 )
823+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().month , 4 )
824+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().year , 2004 )
825+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().month , 5 )
826+ tc_subset = tc_test .subset_year (
827+ start_date = (False , False , 10 ), end_date = (False , False , 10 )
828+ )
829+ self .assertEqual (len (tc_subset .data ), 1 )
830+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
831+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
832+ tc_subset = tc_test .subset_year (
833+ start_date = (2000 , 1 , 10 ), end_date = (2000 , 1 , 13 )
834+ )
835+ self .assertEqual (len (tc_subset .data ), 1 )
836+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
837+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
838+ tc_subset = tc_test .subset_year (
839+ start_date = (2000 , 1 , 10 ), end_date = (2004 , 9 , 13 )
840+ )
841+ self .assertEqual (len (tc_subset .data ), 4 )
842+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().year , 2000 )
843+ self .assertEqual (tc_subset .data [0 ].time [0 ].item ().month , 1 )
844+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().year , 2001 )
845+ self .assertEqual (tc_subset .data [1 ].time [0 ].item ().month , 2 )
846+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().year , 2002 )
847+ self .assertEqual (tc_subset .data [2 ].time [0 ].item ().month , 3 )
848+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().year , 2003 )
849+ self .assertEqual (tc_subset .data [3 ].time [0 ].item ().month , 4 )
850+
851+ # improper calling
852+
853+ # self.assertEqual(tc_subset.data[0].time[0].item().year, 2001)
854+ # self.assertEqual(tc_subset.data[1].time[0].item().year, 2002)
855+ # self.assertEqual(tc_subset.data[2].time[0].item().year, 2003)
856+
857+ # # Invalid input: non-integer start_year
858+ # with self.assertRaisesRegex(
859+ # TypeError, "Both start_year and end_year must be integers."
860+ # ):
861+ # tc_test.subset_year(start_year="2000", end_year=2003)
862+
863+ # # Invalid input: non-integer end_year
864+ # with self.assertRaisesRegex(
865+ # TypeError, "Both start_year and end_year must be integers."
866+ # ):
867+ # tc_test.subset_year(start_year=2000, end_year=None)
868+
869+ # # Invalid range: start_year greater than end_year
870+ # with self.assertRaisesRegex(
871+ # ValueError, r"start_year \(2005\) cannot be greater than end_year \(2000\)."
872+ # ):
873+ # tc_test.subset_year(start_year=2005, end_year=2000)
874+
875+ # # No tracks match the year range
876+ # with self.assertRaisesRegex(
877+ # ValueError, "No tracks found for the years between 2050 and 2060."
878+ # ):
879+ # tc_test.subset_year(start_year=2050, end_year=2060)
880+
881+ # # Empty data case
882+ # empty_tc = tc.TCTracks()
883+ # with self.assertRaisesRegex(
884+ # TypeError, "self.data should be a non-empty list of tracks."
885+ # ):
886+ # empty_tc.subset_year(start_year=2000, end_year=2010)
814887
815888 def test_get_extent (self ):
816889 """Test extent/bounds attributes."""
0 commit comments