def test_index_date_h(self) -> None:
        index = IndexDate.from_date_range('2017-12-15', '2018-02-15')

        post = index.loc[
            '2018':
            '2018-01-15']  # type: ignore  # https://github.com/python/typeshed/pull/3024
        self.assertEqual(len(post), 15)
        self.assertEqual(post[0], np.datetime64('2018-01-01'))  #type: ignore
        self.assertEqual(post[-1], np.datetime64('2018-01-15'))  #type: ignore
Exemple #2
0
    def test_index_datetime_init_a(self) -> None:

        dates = [
            datetime.date(*x) for x in product((2017, ), (
                4,
                5,
            ), range(1, 4))
        ]
        s1 = Series(range(len(dates)), index=IndexDate(dates))

        with self.assertRaises(ErrorInitIndex):
            index = IndexYearMonth(s1.index)

        with self.assertRaises(ErrorInitIndex):
            index = IndexYear(s1.index)  #type: ignore

        # can reuse the map if going from dt64 index to normal index
        # idx2 = Index(s1.index)
        # self.assertTrue(id(idx2._map) == id(s1.index._map)) #type: ignore

        idx3 = IndexDate(s1.index)
        self.assertTrue(id(idx3._map) == id(s1.index._map))  #type: ignore

        with self.assertRaises(ErrorInitIndex):
            index = IndexYear(idx3)  #type: ignore

        # from a date to a finer resolution has to create a new map
        idx4 = IndexMinute(idx3)
        self.assertTrue(id(idx4._map) != id(s1.index._map))  #type: ignore

        # a GO has to create a new map
        idx5 = IndexDateGO(s1.index)
        self.assertTrue(id(idx4._map) != id(s1.index._map))  #type: ignore

        # supplying a dtype to coerce the labels
        with self.assertRaises(ErrorInitIndex):
            idx6 = Index(s1.index, dtype='datetime64[Y]')

        with self.assertRaises(ErrorInitIndex):
            idx7 = Index(s1.index.values.astype('datetime64[Y]'))

        # final resolution from a normal index
        idx8 = IndexMinute(s1.index)
        self.assertTrue(id(idx8._map) != id(s1.index._map))  #type: ignore
 def test_index_date_n(self) -> None:
     index = IndexDate.from_date_range('2017-11-15', '2018-02-15')
     # NOTE: this type of selection should possibly not be permitted
     post = index.loc[['2017-12', '2018-02']]
     self.assertEqual(len(post), 46)
     self.assertEqual(post[0], np.datetime64('2017-12-01'))
     self.assertEqual(post[-1], np.datetime64('2018-02-15'))
     self.assertEqual(set(post.values.astype('datetime64[M]')),
                      {np.datetime64('2018-02'),
                       np.datetime64('2017-12')})
Exemple #4
0
    def test_index_date_loc_to_iloc_a(self):

        index = IndexDate.from_date_range('2018-01-01', '2018-03-01')

        self.assertEqual(index.loc_to_iloc(np.datetime64('2018-02-11')), 41)

        self.assertEqual(index.loc_to_iloc('2018-02-11'), 41)

        self.assertEqual(index.loc_to_iloc(slice('2018-02-11', '2018-02-24')),
                         slice(41, 55, None))
Exemple #5
0
    def test_index_date_loc_to_iloc_b(self) -> None:

        index = IndexDate.from_date_range('2018-01-01', '2018-03-01')

        # with self.assertRaises(RuntimeError):
        #     _ = index.loc_to_iloc(['2017-12-01', '2018-01-01', '2018-02-01'])

        post = index._loc_to_iloc(['2017-12-01', '2018-01-01', '2018-02-01'],
                                  partial_selection=True)
        self.assertEqual(post, [0, 31])
Exemple #6
0
    def test_index_datetime_loc(self) -> None:
        idx1 = IndexDate(())

        idx2 = idx1.iloc[[]]
        self.assertEqual(idx2.__class__, IndexDate)
        self.assertEqual(len(idx2), 0)

        idx3 = idx1.loc[[]]
        self.assertEqual(idx3.__class__, IndexDate)
        self.assertEqual(len(idx3), 0)
    def test_index_level_dtypes_b(self) -> None:
        idx1 = Index(('A', 'B'))
        idx2 = IndexDate.from_date_range('2019-01-05', '2019-01-08')
        idx3 = Index((1, 2))

        hidx = IndexHierarchy.from_product(idx1, idx2, idx3)

        self.assertEqual([dt.kind for dt in hidx._levels.dtype_per_depth()],
                ['U', 'M', 'i'],
                )
 def test_index_level_index_types_a(self) -> None:
     idx1 = Index(('A', 'B'))
     idx2 = IndexDate.from_date_range('2019-01-05', '2019-01-08')
     idx3 = Index((1, 2))
     hidx = IndexHierarchy.from_product(idx1, idx2, idx3)
     lvl = hidx._levels
     self.assertEqual(
             [it.__name__ for it in lvl.index_types()],
             ['Index', 'IndexDate', 'Index'])
     self.assertEqual(lvl.depth, next(lvl.depths()))
Exemple #9
0
    def test_index_many_set_a(self) -> None:

        idx0 = Index(('1997-01-01', '1997-01-02'), name='foo')
        idx1 = IndexDate(('2020-01-01', '2020-01-02'), name='foo')
        idx2 = IndexDate(('2020-01-02', '2020-01-03'))

        post1 = index_many_set((idx0, idx1), Index, union=True)
        assert isinstance(post1, Index)

        self.assertEqual(post1.name, 'foo')
        self.assertEqual(post1.__class__, Index)

        # self.assertEqual(set(post1.values),
        #         {'1997-01-02',
        #         '1997-01-01',
        #         np.datetime64('2020-01-01'),
        #         np.datetime64('2020-01-02')})

        # the result of this operation is an unstable ordering
        values = set(post1.values)
        self.assertTrue('1997-01-01' in values)
        self.assertTrue('1997-01-02' in values)
        self.assertTrue(datetime.date(2020, 1, 1) in values)
        self.assertTrue(datetime.date(2020, 1, 2) in values)

        post2 = index_many_set((idx1, idx2), Index, union=True)
        assert isinstance(post2, Index)

        self.assertEqual(post2.name, None)
        self.assertEqual(post2.__class__, IndexDate)
        self.assertEqual(post2.values.tolist(), [
            datetime.date(2020, 1, 1),
            datetime.date(2020, 1, 2),
            datetime.date(2020, 1, 3)
        ])

        post3 = index_many_set((idx1, idx2), Index, union=False)
        assert isinstance(post3, Index)

        self.assertEqual(post3.name, None)
        self.assertEqual(post3.__class__, IndexDate)
        self.assertEqual(post3.values.tolist(), [datetime.date(2020, 1, 2)])
Exemple #10
0
    def test_index_datetime_iloc_searchsorted_a(self) -> None:
        dt64 = np.datetime64
        idx = IndexDate.from_date_range('2020-01-01', '2020-01-31')
        self.assertEqual(idx.iloc_searchsorted(dt64('2020-01-05')), 4)

        self.assertEqual(
            idx.iloc_searchsorted([dt64('2020-01-05'),
                                   dt64('2020-01-31')]).tolist(), [4, 30])
        self.assertEqual(
            idx.iloc_searchsorted(
                [dt64('2020-01-05'), dt64('2020-01-31')],
                side_left=False).tolist(), [5, 31])
Exemple #11
0
    def test_index_many_concat_a1(self) -> None:

        idx0 = Index(('1997-01-01', '1997-01-02'), name='foo')
        idx1 = IndexDate(('2020-01-01', '2020-01-02'), name='foo')
        idx2 = IndexDate(('2020-02-01', '2020-02-02'))

        post1 = index_many_concat((idx0, idx1), Index)
        assert isinstance(post1, Index)

        post1b = index_many_concat((idx0, idx1), Index, IndexDate)
        assert isinstance(post1b, IndexDate)

        post1c = index_many_concat((idx0, idx1, idx2), Index, IndexDate)
        assert isinstance(post1c, IndexDate)

        self.assertEqual(post1.values.tolist(), [
            '1997-01-01', '1997-01-02',
            datetime.date(2020, 1, 1),
            datetime.date(2020, 1, 2)
        ])
        self.assertEqual(post1.name, 'foo')
        self.assertEqual(post1.__class__, Index)
Exemple #12
0
    def test_index_date_series_a(self):

        s = Series(range(62),
                   index=IndexDate.from_year_month_range('2017-12', '2018-01'))

        self.assertEqual(s.sum(), 1891)
        self.assertEqual(s.loc[s.index == '2018-01'].sum(), 1426)
        self.assertEqual(s.loc[s.index == '2017-12'].sum(), 465)

        self.assertEqual(s['2018-01-24'], 54)

        self.assertEqual(s['2018-01-28':].to_pairs(),
                         ((np.datetime64('2018-01-28'), 58),
                          (np.datetime64('2018-01-29'), 59),
                          (np.datetime64('2018-01-30'), 60),
                          (np.datetime64('2018-01-31'), 61)))
Exemple #13
0
    def test_frame_iter_array_f(self) -> None:

        f = sf.Frame(np.arange(12).reshape(3,4),
                index=IndexDate.from_date_range('2020-01-01', '2020-01-03'))

        post = f.iter_array(axis=0).apply(np.sum, name='foo')
        self.assertEqual(post.name, 'foo')

        self.assertEqual(
                f.iter_array(axis=0).apply(np.sum).to_pairs(),
                ((0, 12), (1, 15), (2, 18), (3, 21))
                )

        self.assertEqual(
                f.iter_array(axis=1).apply(np.sum).to_pairs(),
                ((np.datetime64('2020-01-01'), 6), (np.datetime64('2020-01-02'), 22), (np.datetime64('2020-01-03'), 38))
                )
    def test_index_hierarchy_label_widths_at_depth(self) -> None:
        idx1 = Index(('A', 'B'), name='a')
        idx2 = IndexDate.from_date_range('2019-01-05', '2019-01-08', name='b')
        idx3 = Index((1, 2), name='c')
        hidx = IndexHierarchy.from_product(idx1, idx2, idx3)

        self.assertEqual(tuple(hidx.label_widths_at_depth(0)),
                         (('A', 8), ('B', 8)))

        self.assertEqual(tuple(hidx.label_widths_at_depth(1)),
                         ((np.datetime64('2019-01-05'), 2),
                          (np.datetime64('2019-01-06'), 2),
                          (np.datetime64('2019-01-07'), 0),
                          (np.datetime64('2019-01-08'), 2),
                          (np.datetime64('2019-01-05'), 2),
                          (np.datetime64('2019-01-06'), 2),
                          (np.datetime64('2019-01-07'), 0),
                          (np.datetime64('2019-01-08'), 2)))

        self.assertEqual(tuple(hidx.label_widths_at_depth(2)),
                         ((1, 1), (2, 1), (1, 1), (2, 1), (1, 1), (2, 1),
                          (1, 1), (2, 1), (1, 1), (2, 1), (1, 1), (2, 1),
                          (1, 1), (2, 1), (1, 1), (2, 1)))