|
1 | | -from typing import Optional |
| 1 | +from typing import Optional, Sequence |
2 | 2 |
|
3 | 3 | import numpy |
4 | 4 |
|
5 | | -from openfisca_core.types import ArrayLike, Array |
6 | | - |
7 | 5 |
|
8 | 6 | def average_rate( |
9 | | - target: Array[float], |
10 | | - varying: ArrayLike[float], |
11 | | - trim: Optional[ArrayLike[float]] = None, |
12 | | - ) -> Array[float]: |
| 7 | + target: numpy.ndarray, |
| 8 | + varying: Sequence[float], |
| 9 | + trim: Optional[Sequence[float]] = None, |
| 10 | + ) -> numpy.ndarray: |
13 | 11 | """Computes the average rate of a target net income. |
14 | 12 |
|
15 | 13 | Given a ``target`` net income, and according to the ``varying`` gross |
@@ -41,32 +39,31 @@ def average_rate( |
41 | 39 |
|
42 | 40 | """ |
43 | 41 |
|
44 | | - average_rate: Array[float] |
45 | | - |
46 | | - average_rate = 1 - target / varying |
| 42 | + rate: numpy.ndarray |
| 43 | + rate = 1 - target / varying |
47 | 44 |
|
48 | 45 | if trim is not None: |
49 | 46 |
|
50 | | - average_rate = numpy.where( |
51 | | - average_rate <= max(trim), |
52 | | - average_rate, |
| 47 | + rate = numpy.where( |
| 48 | + rate <= max(trim), |
| 49 | + rate, |
53 | 50 | numpy.nan, |
54 | 51 | ) |
55 | 52 |
|
56 | | - average_rate = numpy.where( |
57 | | - average_rate >= min(trim), |
58 | | - average_rate, |
| 53 | + rate = numpy.where( |
| 54 | + rate >= min(trim), |
| 55 | + rate, |
59 | 56 | numpy.nan, |
60 | 57 | ) |
61 | 58 |
|
62 | | - return average_rate |
| 59 | + return rate |
63 | 60 |
|
64 | 61 |
|
65 | 62 | def marginal_rate( |
66 | | - target: Array[float], |
67 | | - varying: Array[float], |
68 | | - trim: Optional[ArrayLike[float]] = None, |
69 | | - ) -> Array[float]: |
| 63 | + target: numpy.ndarray, |
| 64 | + varying: numpy.ndarray, |
| 65 | + trim: Optional[numpy.ndarray] = None, |
| 66 | + ) -> numpy.ndarray: |
70 | 67 | """Computes the marginal rate of a target net income. |
71 | 68 |
|
72 | 69 | Given a ``target`` net income, and according to the ``varying`` gross |
@@ -98,26 +95,26 @@ def marginal_rate( |
98 | 95 |
|
99 | 96 | """ |
100 | 97 |
|
101 | | - marginal_rate: Array[float] |
| 98 | + rate: numpy.ndarray |
102 | 99 |
|
103 | | - marginal_rate = ( |
| 100 | + rate = ( |
104 | 101 | + 1 |
105 | 102 | - (target[:-1] - target[1:]) |
106 | 103 | / (varying[:-1] - varying[1:]) |
107 | 104 | ) |
108 | 105 |
|
109 | 106 | if trim is not None: |
110 | 107 |
|
111 | | - marginal_rate = numpy.where( |
112 | | - marginal_rate <= max(trim), |
113 | | - marginal_rate, |
| 108 | + rate = numpy.where( |
| 109 | + rate <= max(trim), |
| 110 | + rate, |
114 | 111 | numpy.nan, |
115 | 112 | ) |
116 | 113 |
|
117 | | - marginal_rate = numpy.where( |
118 | | - marginal_rate >= min(trim), |
119 | | - marginal_rate, |
| 114 | + rate = numpy.where( |
| 115 | + rate >= min(trim), |
| 116 | + rate, |
120 | 117 | numpy.nan, |
121 | 118 | ) |
122 | 119 |
|
123 | | - return marginal_rate |
| 120 | + return rate |
0 commit comments