Skip to content

Commit 6b592c2

Browse files
committed
feat: Series[float] +
1 parent dbd9ea5 commit 6b592c2

File tree

3 files changed

+160
-2
lines changed

3 files changed

+160
-2
lines changed

pandas-stubs/core/series.pyi

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,13 +1606,21 @@ class Series(IndexOpsMixin[S1], NDFrame):
16061606
@overload
16071607
def __add__(
16081608
self: Series[float],
1609-
other: int | Sequence[int] | np_ndarray_anyint | Series[int],
1609+
other: int | Sequence[int] | np_ndarray_anyint | np_ndarray_float | Series[int],
16101610
) -> Series[float]: ...
16111611
@overload
1612+
def __add__(
1613+
self: Series[float],
1614+
other: _T_COMPLEX | Sequence[_T_COMPLEX] | Series[_T_COMPLEX],
1615+
) -> Series[_T_COMPLEX]: ...
1616+
@overload
1617+
def __add__(self: Series[float], other: np_ndarray_complex) -> Series[complex]: ...
1618+
@overload
16121619
def __add__(self: Series[complex], other: Series[Never]) -> Series: ...
16131620
@overload
16141621
def __add__(
1615-
self: Series[complex], other: int | Sequence[int] | Series[int]
1622+
self: Series[complex],
1623+
other: _T_COMPLEX | Sequence[_T_COMPLEX] | Series[_T_COMPLEX],
16161624
) -> Series[complex]: ...
16171625
@overload
16181626
def __add__(self, other: S1 | Self) -> Self: ...
@@ -1669,6 +1677,12 @@ class Series(IndexOpsMixin[S1], NDFrame):
16691677
self: Series[int], other: _T_COMPLEX | Sequence[_T_COMPLEX]
16701678
) -> Series[_T_COMPLEX]: ...
16711679
@overload
1680+
def __radd__(self: Series[float], other: int | Sequence[int]) -> Series[float]: ...
1681+
@overload
1682+
def __radd__(
1683+
self: Series[float], other: _T_COMPLEX | Sequence[_T_COMPLEX]
1684+
) -> Series[_T_COMPLEX]: ...
1685+
@overload
16721686
def __radd__(self, other: S1 | Series[S1]) -> Self: ...
16731687
@overload
16741688
def __radd__(self, other: num | _str | _ListLike | Series) -> Series: ...
@@ -1794,6 +1808,30 @@ class Series(IndexOpsMixin[S1], NDFrame):
17941808
axis: int = ...,
17951809
) -> Series[complex]: ...
17961810
@overload
1811+
def add(
1812+
self: Series[float],
1813+
other: int | Sequence[int] | np_ndarray_anyint | np_ndarray_float | Series[int],
1814+
level: Level | None = ...,
1815+
fill_value: float | None = ...,
1816+
axis: int = ...,
1817+
) -> Series[float]: ...
1818+
@overload
1819+
def add(
1820+
self: Series[float],
1821+
other: _T_COMPLEX | Sequence[_T_COMPLEX] | Series[_T_COMPLEX],
1822+
level: Level | None = ...,
1823+
fill_value: float | None = ...,
1824+
axis: int = ...,
1825+
) -> Series[_T_COMPLEX]: ...
1826+
@overload
1827+
def add(
1828+
self: Series[float],
1829+
other: np_ndarray_complex,
1830+
level: Level | None = ...,
1831+
fill_value: float | None = ...,
1832+
axis: int = ...,
1833+
) -> Series[complex]: ...
1834+
@overload
17971835
def add(
17981836
self,
17991837
other: Series[S1] | Scalar,
@@ -2084,6 +2122,30 @@ class Series(IndexOpsMixin[S1], NDFrame):
20842122
axis: int = ...,
20852123
) -> Series[complex]: ...
20862124
@overload
2125+
def radd(
2126+
self: Series[float],
2127+
other: int | Sequence[int] | np_ndarray_anyint | np_ndarray_float | Series[int],
2128+
level: Level | None = ...,
2129+
fill_value: float | None = ...,
2130+
axis: int = ...,
2131+
) -> Series[float]: ...
2132+
@overload
2133+
def radd(
2134+
self: Series[float],
2135+
other: _T_COMPLEX | Sequence[_T_COMPLEX] | Series[_T_COMPLEX],
2136+
level: Level | None = ...,
2137+
fill_value: float | None = ...,
2138+
axis: int = ...,
2139+
) -> Series[_T_COMPLEX]: ...
2140+
@overload
2141+
def radd(
2142+
self: Series[float],
2143+
other: np_ndarray_complex,
2144+
level: Level | None = ...,
2145+
fill_value: float | None = ...,
2146+
axis: int = ...,
2147+
) -> Series[complex]: ...
2148+
@overload
20872149
def radd(
20882150
self,
20892151
other: Series[S1] | Scalar,

tests/series/arithmetic/float/__init__.py

Whitespace-only changes.
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
from typing import assert_type
2+
3+
import numpy as np
4+
import pandas as pd
5+
6+
from tests import check
7+
8+
left = pd.Series([1.0, 2.0, 3.0]) # left operand
9+
10+
11+
def test_add_py_scalar() -> None:
12+
"""Test pd.Series[float] + Python native scalars"""
13+
i, f, c = 1, 1.0, 1j
14+
15+
check(assert_type(left + i, "pd.Series[float]"), pd.Series, np.float64)
16+
check(assert_type(left + f, "pd.Series[float]"), pd.Series, np.float64)
17+
check(assert_type(left + c, "pd.Series[complex]"), pd.Series, np.complex128)
18+
19+
check(assert_type(i + left, "pd.Series[float]"), pd.Series, np.float64)
20+
check(assert_type(f + left, "pd.Series[float]"), pd.Series, np.float64)
21+
check(assert_type(c + left, "pd.Series[complex]"), pd.Series, np.complex128)
22+
23+
check(assert_type(left.add(i), "pd.Series[float]"), pd.Series, np.float64)
24+
check(assert_type(left.add(f), "pd.Series[float]"), pd.Series, np.float64)
25+
check(assert_type(left.add(c), "pd.Series[complex]"), pd.Series, np.complex128)
26+
27+
check(assert_type(left.radd(i), "pd.Series[float]"), pd.Series, np.float64)
28+
check(assert_type(left.radd(f), "pd.Series[float]"), pd.Series, np.float64)
29+
check(assert_type(left.radd(c), "pd.Series[complex]"), pd.Series, np.complex128)
30+
31+
32+
def test_add_py_sequence() -> None:
33+
"""Test pd.Series[float] + Python native sequence"""
34+
i, f, c = [2, 3, 5], [1.0, 2.0, 3.0], [1j, 1j, 4j]
35+
36+
check(assert_type(left + i, "pd.Series[float]"), pd.Series, np.float64)
37+
check(assert_type(left + f, "pd.Series[float]"), pd.Series, np.float64)
38+
check(assert_type(left + c, "pd.Series[complex]"), pd.Series, np.complex128)
39+
40+
check(assert_type(i + left, "pd.Series[float]"), pd.Series, np.float64)
41+
check(assert_type(f + left, "pd.Series[float]"), pd.Series, np.float64)
42+
check(assert_type(c + left, "pd.Series[complex]"), pd.Series, np.complex128)
43+
44+
check(assert_type(left.add(i), "pd.Series[float]"), pd.Series, np.float64)
45+
check(assert_type(left.add(f), "pd.Series[float]"), pd.Series, np.float64)
46+
check(assert_type(left.add(c), "pd.Series[complex]"), pd.Series, np.complex128)
47+
48+
check(assert_type(left.radd(i), "pd.Series[float]"), pd.Series, np.float64)
49+
check(assert_type(left.radd(f), "pd.Series[float]"), pd.Series, np.float64)
50+
check(assert_type(left.radd(c), "pd.Series[complex]"), pd.Series, np.complex128)
51+
52+
53+
def test_add_numpy_array() -> None:
54+
"""Test pd.Series[float] + numpy array"""
55+
i = np.array([2, 3, 5], np.int64)
56+
f = np.array([1.0, 2.0, 3.0], np.float64)
57+
c = np.array([1.1j, 2.2j, 4.1j], np.complex128)
58+
59+
check(assert_type(left + i, "pd.Series[float]"), pd.Series, np.float64)
60+
check(assert_type(left + f, "pd.Series[float]"), pd.Series, np.float64)
61+
check(assert_type(left + c, "pd.Series[complex]"), pd.Series, np.complex128)
62+
63+
# check(assert_type(i + l, "pd.Series[float]"), pd.Series, np.float64)
64+
# check(assert_type(f + l, "pd.Series[float]"), pd.Series, np.float64)
65+
# check(assert_type(c + l, "pd.Series[complex]"), pd.Series, np.complex128)
66+
67+
check(assert_type(left.add(i), "pd.Series[float]"), pd.Series, np.float64)
68+
check(assert_type(left.add(f), "pd.Series[float]"), pd.Series, np.float64)
69+
check(assert_type(left.add(c), "pd.Series[complex]"), pd.Series, np.complex128)
70+
71+
check(assert_type(left.radd(i), "pd.Series[float]"), pd.Series, np.float64)
72+
check(assert_type(left.radd(f), "pd.Series[float]"), pd.Series, np.float64)
73+
check(assert_type(left.radd(c), "pd.Series[complex]"), pd.Series, np.complex128)
74+
75+
76+
def test_add_pd_series() -> None:
77+
"""Test pd.Series[float] + pandas series"""
78+
i = pd.Series([2, 3, 5])
79+
f = pd.Series([1.0, 2.0, 3.0])
80+
c = pd.Series([1.1j, 2.2j, 4.1j])
81+
82+
check(assert_type(left + i, "pd.Series[float]"), pd.Series, np.float64)
83+
check(assert_type(left + f, "pd.Series[float]"), pd.Series, np.float64)
84+
check(assert_type(left + c, "pd.Series[complex]"), pd.Series, np.complex128)
85+
86+
check(assert_type(i + left, "pd.Series[float]"), pd.Series, np.float64)
87+
check(assert_type(f + left, "pd.Series[float]"), pd.Series, np.float64)
88+
check(assert_type(c + left, "pd.Series[complex]"), pd.Series, np.complex128)
89+
90+
check(assert_type(left.add(i), "pd.Series[float]"), pd.Series, np.float64)
91+
check(assert_type(left.add(f), "pd.Series[float]"), pd.Series, np.float64)
92+
check(assert_type(left.add(c), "pd.Series[complex]"), pd.Series, np.complex128)
93+
94+
check(assert_type(left.radd(i), "pd.Series[float]"), pd.Series, np.float64)
95+
check(assert_type(left.radd(f), "pd.Series[float]"), pd.Series, np.float64)
96+
check(assert_type(left.radd(c), "pd.Series[complex]"), pd.Series, np.complex128)

0 commit comments

Comments
 (0)