analytics-toolkit 1.3.8.2__tar.gz → 1.3.10.7__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.8.2 → analytics_toolkit-1.3.10.7}/PKG-INFO +22 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/README.md +21 -1
- analytics_toolkit-1.3.10.7/analytics_toolkit/__init__.py +3 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/__init__.py +6 -4
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/api.py +1 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/metrics.py +9 -3
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/outliers.py +19 -5
- analytics_toolkit-1.3.10.7/analytics_toolkit/ab_utils/planning.py +2454 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/validation.py +4 -4
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/general/logging.py +7 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/__init__.py +6 -3
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/connection/config.py +21 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/core/capabilities.py +9 -3
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/__init__.py +2 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/load/load_df.py +127 -12
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/load/load_sql_table.py +42 -5
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/load/models.py +4 -0
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql/dml/load/stage.py +258 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/__init__.py +2 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/api.py +1 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/create_table_from_sql.py +1 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/partitions.py +4 -4
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql/dml/table/write_modes.py +815 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/api.py +231 -137
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/attempt.py +64 -3
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/finalize.py +23 -12
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql/dml/transfer/flow/options.py +265 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/stage.py +2 -0
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql/dml/transfer/runtime/models.py +373 -0
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql/dml/transfer/staging.py +276 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/metadata/show_tables.py +21 -3
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/orchestration/async_sql.py +8 -6
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/orchestration/parallel_sql.py +8 -6
- analytics_toolkit-1.3.10.7/analytics_toolkit/sql_format/__init__.py +1533 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/PKG-INFO +22 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/SOURCES.txt +5 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/pyproject.toml +1 -1
- analytics_toolkit-1.3.10.7/tests/test_ab_utils_metrics.py +3453 -0
- analytics_toolkit-1.3.10.7/tests/test_agent_tools_mcp.py +1561 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_general_logging.py +36 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_rag_docs.py +185 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_architecture.py +3 -2
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_async.py +67 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_backend_adapters.py +3 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_connection_config.py +153 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_create_table_from_sql.py +1 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_drop_many_partitions.py +24 -20
- analytics_toolkit-1.3.10.7/tests/test_sql_format.py +644 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_improvements.py +175 -6
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_load_table.py +580 -1
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_parallel.py +67 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_show_tables.py +60 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_transfer_clickhouse.py +5 -7
- analytics_toolkit-1.3.10.7/tests/test_sql_transfer_row_batches.py +2297 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_transfer_schema.py +124 -3
- analytics_toolkit-1.3.8.2/analytics_toolkit/__init__.py +0 -3
- analytics_toolkit-1.3.8.2/analytics_toolkit/ab_utils/planning.py +0 -288
- analytics_toolkit-1.3.8.2/analytics_toolkit/sql/dml/load/stage.py +0 -85
- analytics_toolkit-1.3.8.2/analytics_toolkit/sql/dml/table/write_modes.py +0 -324
- analytics_toolkit-1.3.8.2/analytics_toolkit/sql/dml/transfer/runtime/models.py +0 -185
- analytics_toolkit-1.3.8.2/tests/test_ab_utils_metrics.py +0 -1468
- analytics_toolkit-1.3.8.2/tests/test_sql_transfer_row_batches.py +0 -1026
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/LICENSE +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/bootstrap.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/constants.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/cuped.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/formatter.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/parallel.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/ratio.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/rows.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/split.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/stats.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/cli.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/dates/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/dates/dates.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/dates/functions.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/excel/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/excel/long_format.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/general/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/general/read_file.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/base.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/clickhouse.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/dbapi.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/gp.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/registry.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/trino.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/_backend_adapters/utils.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/backend_adapters.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/clickhouse/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/clickhouse/lifecycle.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/clickhouse/options.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/clickhouse/wait.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/connection/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/connection/errors.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/connection/get_sql_connection.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/connection/protocols.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/core/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/core/identifiers.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/core/types.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/api.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/builders.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/clickhouse.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/extract_ddl.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/identifiers.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/models.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/ddl/schema.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/cancel_queries.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/execute_read.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/execute_sql.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/models.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/io/read_sql.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/load/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/_basic_ops.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/ch_create_table_as.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/drop_tables.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/maintenance.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/models.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/table/table_validation.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/flow/estimate.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/io/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/io/source.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/runtime/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/runtime/retry.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/dml/transfer/schema.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/labels.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/operation_runner.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/plan_steps.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/plans.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/execution/query_timing.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/metadata/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/metadata/table_info.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/orchestration/__init__.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/orchestration/pipeline.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/sql/orchestration/tasks.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/dependency_links.txt +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/entry_points.txt +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/requires.txt +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit.egg-info/top_level.txt +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/setup.cfg +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_ab_utils_format.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_ab_utils_parallel.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_ab_utils_split.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_dates.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_excel_long_format.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_general_read_file.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_cancel_queries.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_ch_create_table_as.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_drop_tables.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_execute_read.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_extract_ddl.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_gp_create_partitions.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/tests/test_sql_retries.py +0 -0
- {analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/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.
|
|
3
|
+
Version: 1.3.10.7
|
|
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.
|
|
78
|
+
**Version:** `1.3.10.7`<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>
|
|
@@ -103,6 +103,7 @@ pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
|
103
103
|
|
|
104
104
|
- `analytics_toolkit.ab_utils`: AB-test metric comparison helpers.
|
|
105
105
|
- `analytics_toolkit.sql`: SQL read, execute, load, and transfer helpers.
|
|
106
|
+
- `analytics_toolkit.sql_format`: SQL formatting, CTE rewrite, and Greenplum temp-table rewrite helpers.
|
|
106
107
|
- `analytics_toolkit.excel`: Excel report helpers for long-format dataframes.
|
|
107
108
|
- `analytics_toolkit.dates`: date and period helpers.
|
|
108
109
|
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
@@ -150,6 +151,25 @@ rows = sql.transfer(
|
|
|
150
151
|
- `sql.load_df`: load a pandas dataframe into a configured backend table.
|
|
151
152
|
- `sql.transfer`: move rows from a source query to a target table across backends.
|
|
152
153
|
|
|
154
|
+
## SQL Formatting
|
|
155
|
+
|
|
156
|
+
[SQL formatting guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql_format/index.md)
|
|
157
|
+
|
|
158
|
+
`sql_format.format_sql`, `sql_format.rewrite_with_ctes`, and
|
|
159
|
+
`sql_format.gp_rewrite_to_temp_tables` transform SQL text locally without
|
|
160
|
+
opening database connections. `GROUP BY` and `ORDER BY` clauses use SELECT-list
|
|
161
|
+
ordinals by default, with expression-based formatting available through
|
|
162
|
+
`group_by_format="expressions"` and `order_by_format="expressions"`.
|
|
163
|
+
|
|
164
|
+
```python
|
|
165
|
+
from analytics_toolkit import sql_format
|
|
166
|
+
|
|
167
|
+
formatted = sql_format.format_sql(
|
|
168
|
+
"select user_id, amount from orders where amount > 100",
|
|
169
|
+
dialect="postgres",
|
|
170
|
+
)
|
|
171
|
+
```
|
|
172
|
+
|
|
153
173
|
## AB Metrics
|
|
154
174
|
|
|
155
175
|
[All AB functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/functions/index.md)
|
|
@@ -6,7 +6,7 @@ Python toolkit for AB-test analysis, SQL workflows, Excel reports, and date help
|
|
|
6
6
|
|
|
7
7
|
[Documentation Overview](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/README.md)
|
|
8
8
|
|
|
9
|
-
**Version:** `1.3.
|
|
9
|
+
**Version:** `1.3.10.7`<br>
|
|
10
10
|
**Depends:** Python (`>=3.8,<3.15`)<br>
|
|
11
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
12
|
**Suggests:** [apache-airflow](https://pypi.org/project/apache-airflow/) (`>=2.4,<3`; optional extra `airflow`)<br>
|
|
@@ -34,6 +34,7 @@ pip install git+https://github.com/Karapsin/analytics_toolkit.git
|
|
|
34
34
|
|
|
35
35
|
- `analytics_toolkit.ab_utils`: AB-test metric comparison helpers.
|
|
36
36
|
- `analytics_toolkit.sql`: SQL read, execute, load, and transfer helpers.
|
|
37
|
+
- `analytics_toolkit.sql_format`: SQL formatting, CTE rewrite, and Greenplum temp-table rewrite helpers.
|
|
37
38
|
- `analytics_toolkit.excel`: Excel report helpers for long-format dataframes.
|
|
38
39
|
- `analytics_toolkit.dates`: date and period helpers.
|
|
39
40
|
- `analytics_toolkit.general`: shared logging and file path helpers.
|
|
@@ -81,6 +82,25 @@ rows = sql.transfer(
|
|
|
81
82
|
- `sql.load_df`: load a pandas dataframe into a configured backend table.
|
|
82
83
|
- `sql.transfer`: move rows from a source query to a target table across backends.
|
|
83
84
|
|
|
85
|
+
## SQL Formatting
|
|
86
|
+
|
|
87
|
+
[SQL formatting guide](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/sql_format/index.md)
|
|
88
|
+
|
|
89
|
+
`sql_format.format_sql`, `sql_format.rewrite_with_ctes`, and
|
|
90
|
+
`sql_format.gp_rewrite_to_temp_tables` transform SQL text locally without
|
|
91
|
+
opening database connections. `GROUP BY` and `ORDER BY` clauses use SELECT-list
|
|
92
|
+
ordinals by default, with expression-based formatting available through
|
|
93
|
+
`group_by_format="expressions"` and `order_by_format="expressions"`.
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
from analytics_toolkit import sql_format
|
|
97
|
+
|
|
98
|
+
formatted = sql_format.format_sql(
|
|
99
|
+
"select user_id, amount from orders where amount > 100",
|
|
100
|
+
dialect="postgres",
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
84
104
|
## AB Metrics
|
|
85
105
|
|
|
86
106
|
[All AB functions](https://github.com/Karapsin/analytics_toolkit/blob/main/docs/modules/ab_utils/functions/index.md)
|
{analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/__init__.py
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Utilities for AB-test related workflows."""
|
|
2
2
|
|
|
3
3
|
from .metrics import (
|
|
4
|
-
MdePlanningOptions,
|
|
5
4
|
RatioMetricSpec,
|
|
6
|
-
|
|
5
|
+
compute_mde,
|
|
6
|
+
compute_mde_from_sql,
|
|
7
|
+
compute_mde_sql_native,
|
|
7
8
|
compute_test_metrics,
|
|
8
9
|
format_ab_metrics,
|
|
9
10
|
parallel_compute_metrics,
|
|
@@ -12,9 +13,10 @@ from .metrics import (
|
|
|
12
13
|
from .split import do_split
|
|
13
14
|
|
|
14
15
|
__all__ = [
|
|
15
|
-
"MdePlanningOptions",
|
|
16
16
|
"RatioMetricSpec",
|
|
17
|
-
"
|
|
17
|
+
"compute_mde",
|
|
18
|
+
"compute_mde_from_sql",
|
|
19
|
+
"compute_mde_sql_native",
|
|
18
20
|
"compute_test_metrics",
|
|
19
21
|
"do_split",
|
|
20
22
|
"format_ab_metrics",
|
|
@@ -41,7 +41,7 @@ def compute_test_metrics(
|
|
|
41
41
|
bootstrap_progress: bool = False,
|
|
42
42
|
pre_exp_metrics_df: pd.DataFrame | None = None,
|
|
43
43
|
outliers_quantile: float = 0.999,
|
|
44
|
-
outliers_policy: str = "
|
|
44
|
+
outliers_policy: str = "non_zero_truncate",
|
|
45
45
|
) -> pd.DataFrame:
|
|
46
46
|
"""Compute per-metric experiment comparison statistics.
|
|
47
47
|
|
{analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/metrics.py
RENAMED
|
@@ -3,7 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
from .api import compute_test_metrics
|
|
4
4
|
from .formatter import format_ab_metrics
|
|
5
5
|
from .parallel import parallel_compute_metrics, parallel_compute_metrics_from_sql
|
|
6
|
-
from .planning import
|
|
6
|
+
from .planning import (
|
|
7
|
+
RatioMetricSpec,
|
|
8
|
+
compute_mde,
|
|
9
|
+
compute_mde_from_sql,
|
|
10
|
+
compute_mde_sql_native,
|
|
11
|
+
)
|
|
7
12
|
from .bootstrap import (
|
|
8
13
|
_apply_multiple_comparisons_adjustment,
|
|
9
14
|
_compute_bootstrap_family_max_statistics,
|
|
@@ -87,9 +92,10 @@ from .validation import (
|
|
|
87
92
|
__all__ = [
|
|
88
93
|
"DEFAULT_ALPHA",
|
|
89
94
|
"DEFAULT_POWER",
|
|
90
|
-
"MdePlanningOptions",
|
|
91
95
|
"RatioMetricSpec",
|
|
92
|
-
"
|
|
96
|
+
"compute_mde",
|
|
97
|
+
"compute_mde_from_sql",
|
|
98
|
+
"compute_mde_sql_native",
|
|
93
99
|
"compute_test_metrics",
|
|
94
100
|
"format_ab_metrics",
|
|
95
101
|
"parallel_compute_metrics",
|
{analytics_toolkit-1.3.8.2 → analytics_toolkit-1.3.10.7}/analytics_toolkit/ab_utils/outliers.py
RENAMED
|
@@ -50,7 +50,11 @@ def _build_outlier_context(
|
|
|
50
50
|
return {
|
|
51
51
|
"kind": "mean",
|
|
52
52
|
"metric_key": metric_key,
|
|
53
|
-
"cutoff": _compute_outlier_cutoff(
|
|
53
|
+
"cutoff": _compute_outlier_cutoff(
|
|
54
|
+
values,
|
|
55
|
+
outliers_quantile,
|
|
56
|
+
outliers_policy,
|
|
57
|
+
),
|
|
54
58
|
"policy": outliers_policy,
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -84,13 +88,23 @@ def _build_outlier_context(
|
|
|
84
88
|
"kind": "ratio",
|
|
85
89
|
"level": ratio_spec["level"],
|
|
86
90
|
"metric_key": metric_key,
|
|
87
|
-
"cutoff": _compute_outlier_cutoff(
|
|
91
|
+
"cutoff": _compute_outlier_cutoff(
|
|
92
|
+
values,
|
|
93
|
+
outliers_quantile,
|
|
94
|
+
outliers_policy,
|
|
95
|
+
),
|
|
88
96
|
"policy": outliers_policy,
|
|
89
97
|
}
|
|
90
98
|
|
|
91
99
|
|
|
92
|
-
def _compute_outlier_cutoff(
|
|
100
|
+
def _compute_outlier_cutoff(
|
|
101
|
+
values: pd.Series,
|
|
102
|
+
outliers_quantile: float,
|
|
103
|
+
outliers_policy: str,
|
|
104
|
+
) -> float:
|
|
93
105
|
nonmissing_values = values.dropna()
|
|
106
|
+
if outliers_policy == "non_zero_truncate":
|
|
107
|
+
nonmissing_values = nonmissing_values[nonmissing_values != 0]
|
|
94
108
|
if nonmissing_values.empty:
|
|
95
109
|
return math.nan
|
|
96
110
|
return float(nonmissing_values.quantile(outliers_quantile))
|
|
@@ -105,7 +119,7 @@ def _apply_outliers_to_values(
|
|
|
105
119
|
if outlier_mask.any() and outlier_context is not None:
|
|
106
120
|
cutoff = float(outlier_context["cutoff"])
|
|
107
121
|
policy = str(outlier_context["policy"])
|
|
108
|
-
if policy
|
|
122
|
+
if policy in {"truncate", "non_zero_truncate"}:
|
|
109
123
|
transformed.loc[outlier_mask] = cutoff
|
|
110
124
|
else:
|
|
111
125
|
transformed.loc[outlier_mask] = np.nan
|
|
@@ -127,7 +141,7 @@ def _apply_outliers_to_agg_ratio_components(
|
|
|
127
141
|
if outlier_mask.any() and outlier_context is not None:
|
|
128
142
|
cutoff = float(outlier_context["cutoff"])
|
|
129
143
|
policy = str(outlier_context["policy"])
|
|
130
|
-
if policy
|
|
144
|
+
if policy in {"truncate", "non_zero_truncate"}:
|
|
131
145
|
transformed_numerator.loc[outlier_mask] = cutoff * denominator.loc[outlier_mask]
|
|
132
146
|
else:
|
|
133
147
|
transformed_numerator.loc[outlier_mask] = np.nan
|