Skip to content

Commit e338117

Browse files
authored
Merge pull request #116 from spotify/formatting
Fix formatting
2 parents b00b594 + b334bad commit e338117

7 files changed

Lines changed: 59 additions & 48 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ classifiers = [
1818
dependencies = [
1919
"numpy>=1.21.0",
2020
"scipy>=1.9.0",
21-
"pandas>=1.4.0",
21+
"pandas>=1.4.0,<3",
2222
"statsmodels>=0.13.5",
2323
"chartify>=5.0.0",
2424
"ipywidgets>=8.0.0",

spotify_confidence/analysis/confidence_utils.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ def remove_group_columns(categorical_columns: Iterable, additional_column: Optio
4747
return list(od)
4848

4949

50-
def validate_categorical_columns(categorical_group_columns: Union[str, Iterable]) -> None:
50+
def validate_categorical_columns(
51+
categorical_group_columns: Union[str, Iterable],
52+
) -> None:
5153
if isinstance(categorical_group_columns, str):
5254
pass
5355
elif isinstance(categorical_group_columns, Iterable):
@@ -113,15 +115,15 @@ def validate_and_rename_columns(df: DataFrame, columns: Iterable[str]) -> DataFr
113115
if (df[column + SFX1].isna() == df[column + SFX2].isna()).all() and (
114116
df[column + SFX1][df[column + SFX1].notna()] == df[column + SFX2][df[column + SFX2].notna()]
115117
).all():
116-
df = df.rename(columns={column + SFX1: column}).drop(columns=[column + SFX2]) # type: ignore[union-attr,unused-ignore]
118+
df = df.rename(columns={column + SFX1: column}).drop(columns=[column + SFX2])
117119
else:
118120
raise ValueError(f"Values of {column} do not agree across levels: {df[[column + SFX1, column + SFX2]]}")
119121
return df
120122

121123

122124
def drop_and_rename_columns(df: DataFrame, columns: Iterable[str]) -> DataFrame:
123125
columns_dict = {col + SFX1: col for col in columns}
124-
return df.rename(columns=columns_dict).drop(columns=[col + SFX2 for col in columns]) # type: ignore[union-attr,unused-ignore]
126+
return df.rename(columns=columns_dict).drop(columns=[col + SFX2 for col in columns])
125127

126128

127129
def level2str(level: Union[str, Tuple]) -> str:
@@ -132,7 +134,10 @@ def level2str(level: Union[str, Tuple]) -> str:
132134

133135

134136
def validate_data(
135-
df: DataFrame, columns_that_must_exist, group_columns: Iterable, ordinal_group_column: Optional[str]
137+
df: DataFrame,
138+
columns_that_must_exist,
139+
group_columns: Iterable,
140+
ordinal_group_column: Optional[str],
136141
):
137142
"""Integrity check input dataframe."""
138143
for col in columns_that_must_exist:
@@ -201,7 +206,9 @@ def axis_format_precision(numbers: Series, absolute: bool, extra_zeros: int = 0)
201206

202207

203208
def to_finite(s: Series, lower_limit: float, upper_limit: float) -> Series:
204-
return s.clip(-100 * abs(lower_limit), 100 * abs(upper_limit))
209+
result = s.clip(-100 * abs(lower_limit), 100 * abs(upper_limit))
210+
assert result is not None
211+
return result
205212

206213

207214
def add_color_column(df: DataFrame, cols: Iterable) -> DataFrame:

spotify_confidence/analysis/frequentist/confidence_computers/confidence_computer.py

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -212,43 +212,45 @@ def _sufficient_statistics(self) -> DataFrame:
212212
self._sufficient = (
213213
self._df.groupby(groupby, sort=False, group_keys=True)
214214
.apply(
215-
lambda df: df.assign(
216-
**{
217-
POINT_ESTIMATE: lambda df: confidence_computers[
218-
df[self._method_column].values[0]
219-
].point_estimate(df, **kwargs)
220-
}
221-
)
222-
.assign(
223-
**{
224-
ORIGINAL_POINT_ESTIMATE: lambda df: (
225-
confidence_computers[ZTEST].point_estimate(df, **kwargs)
226-
if df[self._method_column].values[0] == ZTESTLINREG
227-
else confidence_computers[df[self._method_column].values[0]].point_estimate(
215+
lambda df: (
216+
df.assign(
217+
**{
218+
POINT_ESTIMATE: lambda df: confidence_computers[
219+
df[self._method_column].values[0]
220+
].point_estimate(df, **kwargs)
221+
}
222+
)
223+
.assign(
224+
**{
225+
ORIGINAL_POINT_ESTIMATE: lambda df: (
226+
confidence_computers[ZTEST].point_estimate(df, **kwargs)
227+
if df[self._method_column].values[0] == ZTESTLINREG
228+
else confidence_computers[df[self._method_column].values[0]].point_estimate(
229+
df, **kwargs
230+
)
231+
)
232+
}
233+
)
234+
.assign(
235+
**{
236+
VARIANCE: lambda df: confidence_computers[df[self._method_column].values[0]].variance(
228237
df, **kwargs
229238
)
230-
)
231-
}
232-
)
233-
.assign(
234-
**{
235-
VARIANCE: lambda df: confidence_computers[df[self._method_column].values[0]].variance(
239+
}
240+
)
241+
.assign(
242+
**{
243+
ORIGINAL_VARIANCE: lambda df: (
244+
confidence_computers[ZTEST].variance(df, **kwargs)
245+
if df[self._method_column].values[0] == ZTESTLINREG
246+
else confidence_computers[df[self._method_column].values[0]].variance(df, **kwargs)
247+
)
248+
}
249+
)
250+
.pipe(
251+
lambda df: confidence_computers[df[self._method_column].values[0]].add_point_estimate_ci(
236252
df, **kwargs
237253
)
238-
}
239-
)
240-
.assign(
241-
**{
242-
ORIGINAL_VARIANCE: lambda df: (
243-
confidence_computers[ZTEST].variance(df, **kwargs)
244-
if df[self._method_column].values[0] == ZTESTLINREG
245-
else confidence_computers[df[self._method_column].values[0]].variance(df, **kwargs)
246-
)
247-
}
248-
)
249-
.pipe(
250-
lambda df: confidence_computers[df[self._method_column].values[0]].add_point_estimate_ci(
251-
df, **kwargs
252254
)
253255
)
254256
)

spotify_confidence/analysis/frequentist/confidence_computers/sample_size_computer.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,12 @@ def _sufficient_statistics(self) -> DataFrame:
131131
self._sufficient = (
132132
self._df.groupby(groupby, sort=False, group_keys=True)
133133
.apply(
134-
lambda df: df.assign(**{POINT_ESTIMATE: lambda df: df[self._point_estimate_column]})
135-
.assign(**{ORIGINAL_POINT_ESTIMATE: lambda df: df[self._point_estimate_column]})
136-
.assign(**{VARIANCE: lambda df: df[self._var_column]})
137-
.assign(**{ORIGINAL_VARIANCE: lambda df: df[self._var_column]})
134+
lambda df: (
135+
df.assign(**{POINT_ESTIMATE: lambda df: df[self._point_estimate_column]})
136+
.assign(**{ORIGINAL_POINT_ESTIMATE: lambda df: df[self._point_estimate_column]})
137+
.assign(**{VARIANCE: lambda df: df[self._var_column]})
138+
.assign(**{ORIGINAL_VARIANCE: lambda df: df[self._var_column]})
139+
)
138140
)
139141
.pipe(reset_named_indices)
140142
)

spotify_confidence/analysis/frequentist/confidence_computers/z_test_computer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,9 @@ def adjusted_alphas_for_group(grp: DataFrame) -> Series:
163163
data=(
164164
df.assign(**{comparison_total_column: df[denominator + SFX1] + df[denominator + SFX2]})
165165
.assign(
166-
max_sample_size=lambda df: df[[comparison_total_column, final_expected_sample_size_column]]
167-
.max(axis=1)
168-
.max()
166+
max_sample_size=lambda df: (
167+
df[[comparison_total_column, final_expected_sample_size_column]].max(axis=1).max()
168+
)
169169
)
170170
.assign(sample_size_proportions=lambda df: df[comparison_total_column] / df["max_sample_size"])
171171
.pipe(adjusted_alphas_for_group)[ADJUSTED_ALPHA]

spotify_confidence/analysis/frequentist/sequential_bound_solver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def last_fcab(self):
123123

124124
def __eq__(self, other):
125125
if isinstance(other, ComputationState):
126-
return self._df.equals(other._df) and np.array_equal(self._last_fcab, other._last_fcab) # type: ignore[arg-type,unused-ignore]
126+
return self._df.equals(other._df) and np.array_equal(self._last_fcab, other._last_fcab)
127127
return False
128128

129129

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ deps =
2424
commands =
2525
ruff check
2626
ruff format --check
27-
ty check
27+
# don't run ty check - the type stubs for 3.9 are not good.
2828
pytest -n auto --no-cov --basetemp={envtmpdir} {posargs}

0 commit comments

Comments
 (0)