analytics-toolkit 1.3.7.3__tar.gz → 1.3.7.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/PKG-INFO +92 -8
- analytics_toolkit-1.3.7.6/README.md +139 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/PKG-INFO +92 -8
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/pyproject.toml +1 -1
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_architecture.py +7 -3
- analytics_toolkit-1.3.7.3/README.md +0 -55
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/LICENSE +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/api.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/bootstrap.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/constants.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/cuped.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/formatter.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/metrics.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/outliers.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/parallel.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/planning.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/ratio.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/rows.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/split.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/stats.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/validation.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/cli.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/dates/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/dates/dates.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/dates/functions.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/excel/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/excel/long_format.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/logging.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/read_file.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/base.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/clickhouse.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/dbapi.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/gp.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/registry.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/trino.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/_backend_adapters/utils.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/backend_adapters.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/lifecycle.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/options.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/wait.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/config.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/errors.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/get_sql_connection.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/protocols.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/capabilities.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/identifiers.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/types.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/api.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/builders.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/clickhouse.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/extract_ddl.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/identifiers.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/models.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/schema.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/execute_read.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/execute_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/gp_cancel.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/models.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/read_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/load_df.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/load_sql_table.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/models.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/stage.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/_basic_ops.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/api.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/ch_create_table_as.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/ch_drop_table.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/ch_full_table_move.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/create_table_from_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/maintenance.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/models.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/partitions.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/table_validation.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/write_modes.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/api.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/attempt.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/estimate.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/finalize.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/flow/stage.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/io/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/io/source.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/runtime/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/runtime/models.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/runtime/retry.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/schema.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/labels.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/operation_runner.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/plan_steps.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/plans.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/query_timing.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/metadata/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/metadata/show_tables.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/metadata/table_info.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/__init__.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/async_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/parallel_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/pipeline.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/tasks.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/SOURCES.txt +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/dependency_links.txt +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/entry_points.txt +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/requires.txt +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/top_level.txt +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/setup.cfg +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_ab_utils_format.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_ab_utils_metrics.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_ab_utils_parallel.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_ab_utils_split.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_dates.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_excel_long_format.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_general_logging.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_general_read_file.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_async.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_backend_adapters.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_ch_create_table_as.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_ch_drop_table.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_ch_full_table_move.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_connection_config.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_create_table_from_sql.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_drop_many_partitions.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_execute_read.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_extract_ddl.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_gp_cancel.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_gp_create_partitions.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_improvements.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_load_table.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_parallel.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_retries.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_show_tables.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_clickhouse.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_row_batches.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_schema.py +0 -0
- {analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_source_batches.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: analytics-toolkit
|
|
3
|
-
Version: 1.3.7.
|
|
3
|
+
Version: 1.3.7.6
|
|
4
4
|
Summary: Shared Python utilities for SQL, Excel, and date helpers.
|
|
5
5
|
Author: analytics_toolkit contributors
|
|
6
6
|
License: MIT License
|
|
@@ -75,7 +75,7 @@ Python toolkit for AB-test analysis, SQL workflows, Excel reports, and date help
|
|
|
75
75
|
|
|
76
76
|
[Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
77
77
|
|
|
78
|
-
**Version:** `1.3.7.
|
|
78
|
+
**Version:** `1.3.7.6`<br>
|
|
79
79
|
**Depends:** Python (`>=3.8,<3.15`)<br>
|
|
80
80
|
**Imports:** [clickhouse-connect](https://pypi.org/project/clickhouse-connect/) (`>=0.5.14,<1`), [lz4](https://pypi.org/project/lz4/) (`>=4.3.2,<5`), [numpy](https://pypi.org/project/numpy/) (`>=1.24.2,<2`), [openpyxl](https://pypi.org/project/openpyxl/) (`>=3.1.1,<4`), [orjson](https://pypi.org/project/orjson/) (`>=3.8.7,<4`), [pandas](https://pypi.org/project/pandas/) (`>=1.4.4,<3`), [psycopg2-binary](https://pypi.org/project/psycopg2-binary/) (`>=2.9.5,<3`), [python-dateutil](https://pypi.org/project/python-dateutil/) (`>=2.8.2,<3`), [pytz](https://pypi.org/project/pytz/) (`>=2022.7`), [requests](https://pypi.org/project/requests/) (`>=2.28.2,<3`), [scipy](https://pypi.org/project/scipy/) (`>=1.10.1,<2`), [sqlglot](https://pypi.org/project/sqlglot/) (`>=20,<31`), [sqlparse](https://pypi.org/project/sqlparse/) (`>=0.4.3,<1`), [tqdm](https://pypi.org/project/tqdm/) (`>=4.65.0,<5`), [trino](https://pypi.org/project/trino/) (`>=0.320,<1`), [zstandard](https://pypi.org/project/zstandard/) (`>=0.20.0,<1`)<br>
|
|
81
81
|
**Suggests:** [apache-airflow](https://pypi.org/project/apache-airflow/) (`>=2.4,<3`; optional extra `airflow`)<br>
|
|
@@ -107,13 +107,97 @@ pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
|
107
107
|
- `analytics_toolkit.dates`: date and period helpers.
|
|
108
108
|
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
109
109
|
|
|
110
|
-
## SQL
|
|
110
|
+
## SQL Workflows
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
[All SQL functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/functions/index.md)
|
|
113
|
+
|
|
114
|
+
[SQL module guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/index.md)
|
|
115
|
+
|
|
116
|
+
`sql.transfer` streams query results between configured SQL backends, with
|
|
117
|
+
batching, retries, and table creation or replacement handled by one call.
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from analytics_toolkit import sql
|
|
121
|
+
|
|
122
|
+
rows = sql.transfer(
|
|
123
|
+
from_db="trino",
|
|
124
|
+
to_db="gp",
|
|
125
|
+
from_sql="select user_id, order_id, amount from iceberg.analytics.orders",
|
|
126
|
+
to_table="sandbox.orders_copy",
|
|
127
|
+
write_mode="replace",
|
|
128
|
+
batch_size=50_000,
|
|
129
|
+
progress=True,
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
- `sql.read` / `sql.read_sql`: run a query and return a dataframe.
|
|
134
|
+
- `sql.execute` / `sql.execute_sql`: run DDL or DML without returning a dataframe.
|
|
135
|
+
- `sql.execute_read`: run setup SQL and return the final result as a dataframe.
|
|
136
|
+
- `sql.load_df`: load a pandas dataframe into a configured backend table.
|
|
137
|
+
- `sql.transfer`: move rows from a source query to a target table across backends.
|
|
138
|
+
|
|
139
|
+
## AB Metrics
|
|
140
|
+
|
|
141
|
+
[All AB functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/functions/index.md)
|
|
142
|
+
|
|
143
|
+
[AB utilities guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/index.md)
|
|
144
|
+
|
|
145
|
+
`compute_test_metrics` compares experiment groups across mean and ratio metrics,
|
|
146
|
+
with optional CUPED statistics and bootstrap multiple-comparison adjustment.
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from analytics_toolkit.ab_utils import compute_test_metrics
|
|
150
|
+
|
|
151
|
+
result = compute_test_metrics(
|
|
152
|
+
experiment_df,
|
|
153
|
+
group="group_name",
|
|
154
|
+
control="control",
|
|
155
|
+
user_id="user_id",
|
|
156
|
+
ratio_metrics=[
|
|
157
|
+
{"name": "ctr", "numerator": "clicks", "denominator": "views"},
|
|
158
|
+
],
|
|
159
|
+
pre_exp_metrics_df=pre_experiment_df,
|
|
160
|
+
multiple_comparisons_adjustment=True,
|
|
161
|
+
multiple_comparisons_adjustment_resamples=1000,
|
|
162
|
+
)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Example output with CUPED and bootstrap columns enabled:
|
|
166
|
+
|
|
167
|
+
| metric_type | group_1 | group_2 | metric_name | n0 | n1 | outliers_cutoff | outliers_n_control | outliers_n_test | metric_control | metric_test | variance_control | variance_test | delta_abs | delta_relative | mde_abs | mde_relative | s.e. | p-value | s.e. CUPED | p-value CUPED | mde_abs CUPED | mde_relative CUPED | s.e. bootstrap | bootstrap_adj_p |
|
|
168
|
+
| --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
169
|
+
| mean | test | control | revenue | 10000 | 10050 | 250.0 | 3 | 4 | 12.40 | 13.10 | 45.20 | 47.80 | 0.70 | 0.056 | 0.42 | 0.034 | 0.15 | 0.003 | 0.11 | 0.001 | 0.31 | 0.025 | 0.14 | 0.012 |
|
|
170
|
+
| ratio | test | control | ctr | 10000 | 10050 | 1.0 | 0 | 0 | 0.082 | 0.087 | 0.0009 | 0.0010 | 0.005 | 0.061 | 0.003 | 0.037 | 0.001 | 0.008 | 0.001 | 0.006 | 0.002 | 0.024 | 0.001 | 0.019 |
|
|
171
|
+
|
|
172
|
+
## Date Helpers
|
|
173
|
+
|
|
174
|
+
[All date functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/functions/index.md)
|
|
175
|
+
|
|
176
|
+
[Date helpers guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/index.md)
|
|
177
|
+
|
|
178
|
+
Date helpers cover reporting ranges, period boundaries, offsets, and stable
|
|
179
|
+
string formatting for SQL and filenames.
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
from analytics_toolkit.dates import add_days, first_day, gen_dates_list, last_day
|
|
183
|
+
|
|
184
|
+
report_days = gen_dates_list("2026-06-01", "2026-06-07")
|
|
185
|
+
# ["2026-06-01", "2026-06-02", "2026-06-03", "2026-06-04", "2026-06-05", "2026-06-06", "2026-06-07"]
|
|
186
|
+
|
|
187
|
+
month_start = first_day("2026-06-08", "month")
|
|
188
|
+
# "2026-06-01"
|
|
189
|
+
|
|
190
|
+
month_end = last_day("2026-06-08", "month")
|
|
191
|
+
# "2026-06-30"
|
|
192
|
+
|
|
193
|
+
next_run = add_days("2026-06-08", 1)
|
|
194
|
+
# "2026-06-09"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
- `gen_dates_list`: build daily, weekly, monthly, or quarterly sequences.
|
|
198
|
+
- `first_day` / `last_day`: get week, month, or quarter boundaries.
|
|
199
|
+
- `add_days`, `add_weeks`, `add_months`, `add_quarters`: shift dates.
|
|
200
|
+
- `sanitize_date`: convert a date to compact `YYYYMMDD` text.
|
|
117
201
|
|
|
118
202
|
## Documentation
|
|
119
203
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# analytics_toolkit
|
|
2
|
+
|
|
3
|
+
Python toolkit for AB-test analysis, SQL workflows, Excel reports, and date helpers.
|
|
4
|
+
|
|
5
|
+
[Quick Start Guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/QUICK_START.md)
|
|
6
|
+
|
|
7
|
+
[Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
8
|
+
|
|
9
|
+
**Version:** `1.3.7.6`<br>
|
|
10
|
+
**Depends:** Python (`>=3.8,<3.15`)<br>
|
|
11
|
+
**Imports:** [clickhouse-connect](https://pypi.org/project/clickhouse-connect/) (`>=0.5.14,<1`), [lz4](https://pypi.org/project/lz4/) (`>=4.3.2,<5`), [numpy](https://pypi.org/project/numpy/) (`>=1.24.2,<2`), [openpyxl](https://pypi.org/project/openpyxl/) (`>=3.1.1,<4`), [orjson](https://pypi.org/project/orjson/) (`>=3.8.7,<4`), [pandas](https://pypi.org/project/pandas/) (`>=1.4.4,<3`), [psycopg2-binary](https://pypi.org/project/psycopg2-binary/) (`>=2.9.5,<3`), [python-dateutil](https://pypi.org/project/python-dateutil/) (`>=2.8.2,<3`), [pytz](https://pypi.org/project/pytz/) (`>=2022.7`), [requests](https://pypi.org/project/requests/) (`>=2.28.2,<3`), [scipy](https://pypi.org/project/scipy/) (`>=1.10.1,<2`), [sqlglot](https://pypi.org/project/sqlglot/) (`>=20,<31`), [sqlparse](https://pypi.org/project/sqlparse/) (`>=0.4.3,<1`), [tqdm](https://pypi.org/project/tqdm/) (`>=4.65.0,<5`), [trino](https://pypi.org/project/trino/) (`>=0.320,<1`), [zstandard](https://pypi.org/project/zstandard/) (`>=0.20.0,<1`)<br>
|
|
12
|
+
**Suggests:** [apache-airflow](https://pypi.org/project/apache-airflow/) (`>=2.4,<3`; optional extra `airflow`)<br>
|
|
13
|
+
**Install:** `pip install analytics-toolkit`<br>
|
|
14
|
+
**PyPI:** [pypi.org/project/analytics-toolkit](https://pypi.org/project/analytics-toolkit/)<br>
|
|
15
|
+
**License:** MIT<br>
|
|
16
|
+
**Source:** [github.com/Karapsin/analytics_toolkit](https://github.com/Karapsin/analytics_toolkit)<br>
|
|
17
|
+
**Issues:** [GitHub Issues](https://github.com/Karapsin/analytics_toolkit/issues)
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
From PyPI:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pip install analytics-toolkit
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
From GitHub:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Areas
|
|
34
|
+
|
|
35
|
+
- `analytics_toolkit.ab_utils`: AB-test metric comparison helpers.
|
|
36
|
+
- `analytics_toolkit.sql`: SQL read, execute, load, and transfer helpers.
|
|
37
|
+
- `analytics_toolkit.excel`: Excel report helpers for long-format dataframes.
|
|
38
|
+
- `analytics_toolkit.dates`: date and period helpers.
|
|
39
|
+
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
40
|
+
|
|
41
|
+
## SQL Workflows
|
|
42
|
+
|
|
43
|
+
[All SQL functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/functions/index.md)
|
|
44
|
+
|
|
45
|
+
[SQL module guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/index.md)
|
|
46
|
+
|
|
47
|
+
`sql.transfer` streams query results between configured SQL backends, with
|
|
48
|
+
batching, retries, and table creation or replacement handled by one call.
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from analytics_toolkit import sql
|
|
52
|
+
|
|
53
|
+
rows = sql.transfer(
|
|
54
|
+
from_db="trino",
|
|
55
|
+
to_db="gp",
|
|
56
|
+
from_sql="select user_id, order_id, amount from iceberg.analytics.orders",
|
|
57
|
+
to_table="sandbox.orders_copy",
|
|
58
|
+
write_mode="replace",
|
|
59
|
+
batch_size=50_000,
|
|
60
|
+
progress=True,
|
|
61
|
+
)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- `sql.read` / `sql.read_sql`: run a query and return a dataframe.
|
|
65
|
+
- `sql.execute` / `sql.execute_sql`: run DDL or DML without returning a dataframe.
|
|
66
|
+
- `sql.execute_read`: run setup SQL and return the final result as a dataframe.
|
|
67
|
+
- `sql.load_df`: load a pandas dataframe into a configured backend table.
|
|
68
|
+
- `sql.transfer`: move rows from a source query to a target table across backends.
|
|
69
|
+
|
|
70
|
+
## AB Metrics
|
|
71
|
+
|
|
72
|
+
[All AB functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/functions/index.md)
|
|
73
|
+
|
|
74
|
+
[AB utilities guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/index.md)
|
|
75
|
+
|
|
76
|
+
`compute_test_metrics` compares experiment groups across mean and ratio metrics,
|
|
77
|
+
with optional CUPED statistics and bootstrap multiple-comparison adjustment.
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from analytics_toolkit.ab_utils import compute_test_metrics
|
|
81
|
+
|
|
82
|
+
result = compute_test_metrics(
|
|
83
|
+
experiment_df,
|
|
84
|
+
group="group_name",
|
|
85
|
+
control="control",
|
|
86
|
+
user_id="user_id",
|
|
87
|
+
ratio_metrics=[
|
|
88
|
+
{"name": "ctr", "numerator": "clicks", "denominator": "views"},
|
|
89
|
+
],
|
|
90
|
+
pre_exp_metrics_df=pre_experiment_df,
|
|
91
|
+
multiple_comparisons_adjustment=True,
|
|
92
|
+
multiple_comparisons_adjustment_resamples=1000,
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Example output with CUPED and bootstrap columns enabled:
|
|
97
|
+
|
|
98
|
+
| metric_type | group_1 | group_2 | metric_name | n0 | n1 | outliers_cutoff | outliers_n_control | outliers_n_test | metric_control | metric_test | variance_control | variance_test | delta_abs | delta_relative | mde_abs | mde_relative | s.e. | p-value | s.e. CUPED | p-value CUPED | mde_abs CUPED | mde_relative CUPED | s.e. bootstrap | bootstrap_adj_p |
|
|
99
|
+
| --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
100
|
+
| mean | test | control | revenue | 10000 | 10050 | 250.0 | 3 | 4 | 12.40 | 13.10 | 45.20 | 47.80 | 0.70 | 0.056 | 0.42 | 0.034 | 0.15 | 0.003 | 0.11 | 0.001 | 0.31 | 0.025 | 0.14 | 0.012 |
|
|
101
|
+
| ratio | test | control | ctr | 10000 | 10050 | 1.0 | 0 | 0 | 0.082 | 0.087 | 0.0009 | 0.0010 | 0.005 | 0.061 | 0.003 | 0.037 | 0.001 | 0.008 | 0.001 | 0.006 | 0.002 | 0.024 | 0.001 | 0.019 |
|
|
102
|
+
|
|
103
|
+
## Date Helpers
|
|
104
|
+
|
|
105
|
+
[All date functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/functions/index.md)
|
|
106
|
+
|
|
107
|
+
[Date helpers guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/index.md)
|
|
108
|
+
|
|
109
|
+
Date helpers cover reporting ranges, period boundaries, offsets, and stable
|
|
110
|
+
string formatting for SQL and filenames.
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
from analytics_toolkit.dates import add_days, first_day, gen_dates_list, last_day
|
|
114
|
+
|
|
115
|
+
report_days = gen_dates_list("2026-06-01", "2026-06-07")
|
|
116
|
+
# ["2026-06-01", "2026-06-02", "2026-06-03", "2026-06-04", "2026-06-05", "2026-06-06", "2026-06-07"]
|
|
117
|
+
|
|
118
|
+
month_start = first_day("2026-06-08", "month")
|
|
119
|
+
# "2026-06-01"
|
|
120
|
+
|
|
121
|
+
month_end = last_day("2026-06-08", "month")
|
|
122
|
+
# "2026-06-30"
|
|
123
|
+
|
|
124
|
+
next_run = add_days("2026-06-08", 1)
|
|
125
|
+
# "2026-06-09"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- `gen_dates_list`: build daily, weekly, monthly, or quarterly sequences.
|
|
129
|
+
- `first_day` / `last_day`: get week, month, or quarter boundaries.
|
|
130
|
+
- `add_days`, `add_weeks`, `add_months`, `add_quarters`: shift dates.
|
|
131
|
+
- `sanitize_date`: convert a date to compact `YYYYMMDD` text.
|
|
132
|
+
|
|
133
|
+
## Documentation
|
|
134
|
+
|
|
135
|
+
- [Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
136
|
+
- [Quick Start](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/QUICK_START.md)
|
|
137
|
+
- [Airflow SQL Manual](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/AIRFLOW_SQL_MANUAL.md)
|
|
138
|
+
- [Module documentation](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/README.md)
|
|
139
|
+
- [Changelog](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/CHANGELOG.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: analytics-toolkit
|
|
3
|
-
Version: 1.3.7.
|
|
3
|
+
Version: 1.3.7.6
|
|
4
4
|
Summary: Shared Python utilities for SQL, Excel, and date helpers.
|
|
5
5
|
Author: analytics_toolkit contributors
|
|
6
6
|
License: MIT License
|
|
@@ -75,7 +75,7 @@ Python toolkit for AB-test analysis, SQL workflows, Excel reports, and date help
|
|
|
75
75
|
|
|
76
76
|
[Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
77
77
|
|
|
78
|
-
**Version:** `1.3.7.
|
|
78
|
+
**Version:** `1.3.7.6`<br>
|
|
79
79
|
**Depends:** Python (`>=3.8,<3.15`)<br>
|
|
80
80
|
**Imports:** [clickhouse-connect](https://pypi.org/project/clickhouse-connect/) (`>=0.5.14,<1`), [lz4](https://pypi.org/project/lz4/) (`>=4.3.2,<5`), [numpy](https://pypi.org/project/numpy/) (`>=1.24.2,<2`), [openpyxl](https://pypi.org/project/openpyxl/) (`>=3.1.1,<4`), [orjson](https://pypi.org/project/orjson/) (`>=3.8.7,<4`), [pandas](https://pypi.org/project/pandas/) (`>=1.4.4,<3`), [psycopg2-binary](https://pypi.org/project/psycopg2-binary/) (`>=2.9.5,<3`), [python-dateutil](https://pypi.org/project/python-dateutil/) (`>=2.8.2,<3`), [pytz](https://pypi.org/project/pytz/) (`>=2022.7`), [requests](https://pypi.org/project/requests/) (`>=2.28.2,<3`), [scipy](https://pypi.org/project/scipy/) (`>=1.10.1,<2`), [sqlglot](https://pypi.org/project/sqlglot/) (`>=20,<31`), [sqlparse](https://pypi.org/project/sqlparse/) (`>=0.4.3,<1`), [tqdm](https://pypi.org/project/tqdm/) (`>=4.65.0,<5`), [trino](https://pypi.org/project/trino/) (`>=0.320,<1`), [zstandard](https://pypi.org/project/zstandard/) (`>=0.20.0,<1`)<br>
|
|
81
81
|
**Suggests:** [apache-airflow](https://pypi.org/project/apache-airflow/) (`>=2.4,<3`; optional extra `airflow`)<br>
|
|
@@ -107,13 +107,97 @@ pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
|
107
107
|
- `analytics_toolkit.dates`: date and period helpers.
|
|
108
108
|
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
109
109
|
|
|
110
|
-
## SQL
|
|
110
|
+
## SQL Workflows
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
[All SQL functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/functions/index.md)
|
|
113
|
+
|
|
114
|
+
[SQL module guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql/index.md)
|
|
115
|
+
|
|
116
|
+
`sql.transfer` streams query results between configured SQL backends, with
|
|
117
|
+
batching, retries, and table creation or replacement handled by one call.
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from analytics_toolkit import sql
|
|
121
|
+
|
|
122
|
+
rows = sql.transfer(
|
|
123
|
+
from_db="trino",
|
|
124
|
+
to_db="gp",
|
|
125
|
+
from_sql="select user_id, order_id, amount from iceberg.analytics.orders",
|
|
126
|
+
to_table="sandbox.orders_copy",
|
|
127
|
+
write_mode="replace",
|
|
128
|
+
batch_size=50_000,
|
|
129
|
+
progress=True,
|
|
130
|
+
)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
- `sql.read` / `sql.read_sql`: run a query and return a dataframe.
|
|
134
|
+
- `sql.execute` / `sql.execute_sql`: run DDL or DML without returning a dataframe.
|
|
135
|
+
- `sql.execute_read`: run setup SQL and return the final result as a dataframe.
|
|
136
|
+
- `sql.load_df`: load a pandas dataframe into a configured backend table.
|
|
137
|
+
- `sql.transfer`: move rows from a source query to a target table across backends.
|
|
138
|
+
|
|
139
|
+
## AB Metrics
|
|
140
|
+
|
|
141
|
+
[All AB functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/functions/index.md)
|
|
142
|
+
|
|
143
|
+
[AB utilities guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/index.md)
|
|
144
|
+
|
|
145
|
+
`compute_test_metrics` compares experiment groups across mean and ratio metrics,
|
|
146
|
+
with optional CUPED statistics and bootstrap multiple-comparison adjustment.
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from analytics_toolkit.ab_utils import compute_test_metrics
|
|
150
|
+
|
|
151
|
+
result = compute_test_metrics(
|
|
152
|
+
experiment_df,
|
|
153
|
+
group="group_name",
|
|
154
|
+
control="control",
|
|
155
|
+
user_id="user_id",
|
|
156
|
+
ratio_metrics=[
|
|
157
|
+
{"name": "ctr", "numerator": "clicks", "denominator": "views"},
|
|
158
|
+
],
|
|
159
|
+
pre_exp_metrics_df=pre_experiment_df,
|
|
160
|
+
multiple_comparisons_adjustment=True,
|
|
161
|
+
multiple_comparisons_adjustment_resamples=1000,
|
|
162
|
+
)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Example output with CUPED and bootstrap columns enabled:
|
|
166
|
+
|
|
167
|
+
| metric_type | group_1 | group_2 | metric_name | n0 | n1 | outliers_cutoff | outliers_n_control | outliers_n_test | metric_control | metric_test | variance_control | variance_test | delta_abs | delta_relative | mde_abs | mde_relative | s.e. | p-value | s.e. CUPED | p-value CUPED | mde_abs CUPED | mde_relative CUPED | s.e. bootstrap | bootstrap_adj_p |
|
|
168
|
+
| --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
169
|
+
| mean | test | control | revenue | 10000 | 10050 | 250.0 | 3 | 4 | 12.40 | 13.10 | 45.20 | 47.80 | 0.70 | 0.056 | 0.42 | 0.034 | 0.15 | 0.003 | 0.11 | 0.001 | 0.31 | 0.025 | 0.14 | 0.012 |
|
|
170
|
+
| ratio | test | control | ctr | 10000 | 10050 | 1.0 | 0 | 0 | 0.082 | 0.087 | 0.0009 | 0.0010 | 0.005 | 0.061 | 0.003 | 0.037 | 0.001 | 0.008 | 0.001 | 0.006 | 0.002 | 0.024 | 0.001 | 0.019 |
|
|
171
|
+
|
|
172
|
+
## Date Helpers
|
|
173
|
+
|
|
174
|
+
[All date functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/functions/index.md)
|
|
175
|
+
|
|
176
|
+
[Date helpers guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/dates/index.md)
|
|
177
|
+
|
|
178
|
+
Date helpers cover reporting ranges, period boundaries, offsets, and stable
|
|
179
|
+
string formatting for SQL and filenames.
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
from analytics_toolkit.dates import add_days, first_day, gen_dates_list, last_day
|
|
183
|
+
|
|
184
|
+
report_days = gen_dates_list("2026-06-01", "2026-06-07")
|
|
185
|
+
# ["2026-06-01", "2026-06-02", "2026-06-03", "2026-06-04", "2026-06-05", "2026-06-06", "2026-06-07"]
|
|
186
|
+
|
|
187
|
+
month_start = first_day("2026-06-08", "month")
|
|
188
|
+
# "2026-06-01"
|
|
189
|
+
|
|
190
|
+
month_end = last_day("2026-06-08", "month")
|
|
191
|
+
# "2026-06-30"
|
|
192
|
+
|
|
193
|
+
next_run = add_days("2026-06-08", 1)
|
|
194
|
+
# "2026-06-09"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
- `gen_dates_list`: build daily, weekly, monthly, or quarterly sequences.
|
|
198
|
+
- `first_day` / `last_day`: get week, month, or quarter boundaries.
|
|
199
|
+
- `add_days`, `add_weeks`, `add_months`, `add_quarters`: shift dates.
|
|
200
|
+
- `sanitize_date`: convert a date to compact `YYYYMMDD` text.
|
|
117
201
|
|
|
118
202
|
## Documentation
|
|
119
203
|
|
|
@@ -58,20 +58,24 @@ def test_removed_sql_deep_module_files_stay_removed() -> None:
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
def test_sql_docs_state_facade_import_policy() -> None:
|
|
61
|
-
|
|
61
|
+
facade_import_docs = [
|
|
62
62
|
PROJECT_ROOT / "README.md",
|
|
63
63
|
PROJECT_ROOT / "docs" / "modules" / "sql" / "functions" / "index.md",
|
|
64
64
|
PROJECT_ROOT / "docs" / "AIRFLOW_SQL_MANUAL.md",
|
|
65
65
|
PROJECT_ROOT / "docs" / "modules" / "ab_utils" / "index.md",
|
|
66
66
|
]
|
|
67
|
+
deep_import_policy_docs = [
|
|
68
|
+
PROJECT_ROOT / "docs" / "modules" / "sql" / "functions" / "index.md",
|
|
69
|
+
PROJECT_ROOT / "docs" / "AIRFLOW_SQL_MANUAL.md",
|
|
70
|
+
]
|
|
67
71
|
|
|
68
72
|
assert not (PROJECT_ROOT / "docs" / "ANALYTICS_TOOLKIT_MANUAL.md").exists()
|
|
69
73
|
|
|
70
|
-
for path in
|
|
74
|
+
for path in facade_import_docs:
|
|
71
75
|
text = path.read_text()
|
|
72
76
|
assert "from analytics_toolkit import sql" in text
|
|
73
77
|
|
|
74
|
-
for path in
|
|
78
|
+
for path in deep_import_policy_docs:
|
|
75
79
|
text = path.read_text()
|
|
76
80
|
assert "Deep imports under" in text
|
|
77
81
|
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# analytics_toolkit
|
|
2
|
-
|
|
3
|
-
Python toolkit for AB-test analysis, SQL workflows, Excel reports, and date helpers.
|
|
4
|
-
|
|
5
|
-
[Quick Start Guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/QUICK_START.md)
|
|
6
|
-
|
|
7
|
-
[Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
8
|
-
|
|
9
|
-
**Version:** `1.3.7.3`<br>
|
|
10
|
-
**Depends:** Python (`>=3.8,<3.15`)<br>
|
|
11
|
-
**Imports:** [clickhouse-connect](https://pypi.org/project/clickhouse-connect/) (`>=0.5.14,<1`), [lz4](https://pypi.org/project/lz4/) (`>=4.3.2,<5`), [numpy](https://pypi.org/project/numpy/) (`>=1.24.2,<2`), [openpyxl](https://pypi.org/project/openpyxl/) (`>=3.1.1,<4`), [orjson](https://pypi.org/project/orjson/) (`>=3.8.7,<4`), [pandas](https://pypi.org/project/pandas/) (`>=1.4.4,<3`), [psycopg2-binary](https://pypi.org/project/psycopg2-binary/) (`>=2.9.5,<3`), [python-dateutil](https://pypi.org/project/python-dateutil/) (`>=2.8.2,<3`), [pytz](https://pypi.org/project/pytz/) (`>=2022.7`), [requests](https://pypi.org/project/requests/) (`>=2.28.2,<3`), [scipy](https://pypi.org/project/scipy/) (`>=1.10.1,<2`), [sqlglot](https://pypi.org/project/sqlglot/) (`>=20,<31`), [sqlparse](https://pypi.org/project/sqlparse/) (`>=0.4.3,<1`), [tqdm](https://pypi.org/project/tqdm/) (`>=4.65.0,<5`), [trino](https://pypi.org/project/trino/) (`>=0.320,<1`), [zstandard](https://pypi.org/project/zstandard/) (`>=0.20.0,<1`)<br>
|
|
12
|
-
**Suggests:** [apache-airflow](https://pypi.org/project/apache-airflow/) (`>=2.4,<3`; optional extra `airflow`)<br>
|
|
13
|
-
**Install:** `pip install analytics-toolkit`<br>
|
|
14
|
-
**PyPI:** [pypi.org/project/analytics-toolkit](https://pypi.org/project/analytics-toolkit/)<br>
|
|
15
|
-
**License:** MIT<br>
|
|
16
|
-
**Source:** [github.com/Karapsin/analytics_toolkit](https://github.com/Karapsin/analytics_toolkit)<br>
|
|
17
|
-
**Issues:** [GitHub Issues](https://github.com/Karapsin/analytics_toolkit/issues)
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
From PyPI:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
pip install analytics-toolkit
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
From GitHub:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Areas
|
|
34
|
-
|
|
35
|
-
- `analytics_toolkit.ab_utils`: AB-test metric comparison helpers.
|
|
36
|
-
- `analytics_toolkit.sql`: SQL read, execute, load, and transfer helpers.
|
|
37
|
-
- `analytics_toolkit.excel`: Excel report helpers for long-format dataframes.
|
|
38
|
-
- `analytics_toolkit.dates`: date and period helpers.
|
|
39
|
-
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
40
|
-
|
|
41
|
-
## SQL Import Policy
|
|
42
|
-
|
|
43
|
-
Supported SQL imports are `from analytics_toolkit import sql` or
|
|
44
|
-
`import analytics_toolkit.sql as sql`. Deep imports under
|
|
45
|
-
`analytics_toolkit.sql.*` are internal implementation details and may change;
|
|
46
|
-
call SQL helpers through the `sql` facade, for example `sql.create_sql_table(...)`
|
|
47
|
-
or `sql.transfer(...)`.
|
|
48
|
-
|
|
49
|
-
## Documentation
|
|
50
|
-
|
|
51
|
-
- [Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
52
|
-
- [Quick Start](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/QUICK_START.md)
|
|
53
|
-
- [Airflow SQL Manual](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/AIRFLOW_SQL_MANUAL.md)
|
|
54
|
-
- [Module documentation](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/README.md)
|
|
55
|
-
- [Changelog](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/CHANGELOG.md)
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/bootstrap.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/formatter.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/metrics.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/outliers.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/parallel.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/planning.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/ab_utils/validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/dates/functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/excel/long_format.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/logging.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/general/read_file.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/backend_adapters.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/options.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/clickhouse/wait.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/config.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/connection/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/capabilities.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/core/identifiers.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/builders.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/clickhouse.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/extract_ddl.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/ddl/identifiers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/execute_read.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/execute_sql.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/gp_cancel.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/models.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/io/read_sql.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/load_df.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/models.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/load/stage.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/table/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/dml/transfer/schema.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/__init__.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/labels.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/execution/plans.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/metadata/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/metadata/table_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit/sql/orchestration/tasks.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/requires.txt
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/analytics_toolkit.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_ch_create_table_as.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_ch_full_table_move.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_create_table_from_sql.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_drop_many_partitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_gp_create_partitions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_clickhouse.py
RENAMED
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_row_batches.py
RENAMED
|
File without changes
|
|
File without changes
|
{analytics_toolkit-1.3.7.3 → analytics_toolkit-1.3.7.6}/tests/test_sql_transfer_source_batches.py
RENAMED
|
File without changes
|