| Name | tinyshift JSON |
| Version |
1.1.1
JSON |
| download |
| home_page | None |
| Summary | A small toolbox for mlops |
| upload_time | 2025-11-04 15:39:25 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.10 |
| license | None |
| keywords |
mlops
toolbox
machine-learning
|
| VCS |
|
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# TinyShift
<p align="center">
<img src="https://github.com/user-attachments/assets/34668d33-459d-4dc3-b598-342130bf7db3" alt="tinyshift_full_logo" width="400" height="400">
</p>
**TinyShift** is a lightweight, sklearn-compatible Python library designed for **data drift detection**, **outlier identification**, and **MLOps monitoring** in production machine learning systems. The library provides modular, easy-to-use tools for detecting when data distributions or model performance change over time, with comprehensive visualization capabilities.
For enterprise-grade solutions, consider [Nannyml](https://github.com/NannyML/nannyml).
## Features
- **Data Drift Detection**: Categorical and continuous data drift monitoring with multiple distance metrics
- **Outlier Detection**: **HBOS**, **PCA-based** and **SPAD** outlier detection algorithms
- **Time Series Analysis**: Seasonality decomposition, trend analysis, and forecasting diagnostics
## Technologies Used
- **Python 3.10+**
- **Scikit-learn 1.3.0+**
- **Pandas 2.3.0+**
- **NumPy**
- **SciPy**
- **Statsmodels 0.14.5+**
- **Plotly 5.22.0+** (optional, for plotting)
## π¦ Installation
Install TinyShift using pip:
```bash
pip install tinyshift
```
### Development Installation
Clone and install from source:
```bash
git clone https://github.com/HeyLucasLeao/tinyshift.git
cd tinyshift
pip install -e .
```
## π Quick Start
### 1. Categorical Data Drift Detection
TinyShift provides sklearn-compatible drift detectors that follow the familiar `fit()` and `score()` pattern:
```python
import pandas as pd
from tinyshift.drift import CatDrift
# Load your data
df = pd.read_csv("data.csv")
reference_data = df[df["date"] < '2024-07-01']
analysis_data = df[df["date"] >= '2024-07-01']
# Initialize and fit the drift detector
detector = CatDrift(
freq="D", # Daily frequency
func="chebyshev", # Distance metric
drift_limit="auto", # Automatic threshold detection
method="expanding" # Comparison method
)
# Fit on reference data
detector.fit(reference_data)
# Score new data for drift
drift_scores = detector.predict(analysis_data)
print(drift_scores)
```
Available distance metrics for **categorical** data:
- `"chebyshev"`: Maximum absolute difference between distributions
- `"jensenshannon"`: Jensen-Shannon divergence
- `"psi"`: Population Stability Index
### 2. Continuous Data Drift Detection
For numerical features, use the continuous drift detector:
```python
from tinyshift.drift import ConDrift
# Initialize continuous drift detector
detector = ConDrift(
freq="W", # Weekly frequency
func="ws", # Wasserstein distance
drift_limit="auto",
method="expanding"
)
# Fit and score
detector.fit(reference_data)
drift_scores = detector.score(analysis_data)
```
### 3. Outlier Detection
TinyShift includes sklearn-compatible outlier detection algorithms:
```python
from tinyshift.outlier import SPAD, HBOS, PCAReconstructionError
# SPAD (Simple Probabilistic Anomaly Detector)
spad = SPAD(plus=True)
spad.fit(X_train)
outlier_scores = spad.decision_function(X_test)
outlier_labels = spad.predict(X_test)
# HBOS (Histogram-Based Outlier Score)
hbos = HBOS(dynamic_bins=True)
hbos.fit(X_train, nbins="fd")
scores = hbos.decision_function(X_test)
# PCA-based outlier detection
pca_detector = PCAReconstructionError()
pca_detector.fit(X_train)
pca_scores = pca_detector.decision_function(X_test)
```
### 4. Time Series Analysis and Diagnostics
TinyShift provides time series analysis capabilities:
```python
from tinyshift.plot import seasonal_decompose
from tinyshift.series import trend_significance, permutation_auto_mutual_information
# Seasonal decomposition with multiple periods
seasonal_decompose(
time_series,
periods=[7, 365], # Weekly and yearly patterns
width=1200,
height=800
)
# Test for significant trends
trend_result = trend_significance(time_series, alpha=0.05)
print(f"Significant trend: {trend_result}")
# Stationary Analysis
fig = stationarity_analysis(time_series)
```
### 5. Advanced Modeling Tools
```python
from tinyshift.modelling import filter_features_by_vif
from tinyshift.stats import bootstrap_bca_interval
# Detect multicollinearity
mask = filter_features_by_vif(X, trehshold=5, verbose=True)
X.columns[mask]
# Bootstrap confidence intervals
confidence_interval = bootstrap_bca_interval(
data,
statistic=np.mean,
alpha=0.05,
n_bootstrap=1000
)
```
## π Project Structure
```
tinyshift/
βββ association_mining/ # Market basket analysis tools
β βββ analyzer.py # Transaction pattern analysis
β βββ encoder.py # Data encoder
βββ drift/ # Data drift detection
β βββ base.py # Base drift detection classes
β βββ categorical.py # CatDrift for categorical features
β βββ continuous.py # ConDrift for numerical features
βββ examples/ # Jupyter notebook examples
β βββ drift.ipynb # Drift detection examples
β βββ outlier.ipynb # Outlier detection demos
β βββ series.ipynb # Time series analysis
β βββ transaction_analyzer.ipynb
βββ modelling/ # ML modeling utilities
β βββ multicollinearity.py # VIF-based multicollinearity detection
β βββ residualizer.py # Residualizer Feature
β βββ scaler.py # Custom scaling transformations
βββ outlier/ # Outlier detection algorithms
β βββ base.py # Base outlier detection classes
β βββ hbos.py # Histogram-Based Outlier Score
β βββ pca.py # PCA-based outlier detection
β βββ spad.py # Simple Probabilistic Anomaly Detector
βββ plot/ # Visualization capabilities
β βββ correlation.py # Correlation analysis plots
β βββ diagnostic.py # Time series diagnostics plots
βββ series/ # Time series analysis tools
β βββ forecastability.py # Forecast quality metrics
β βββ outlier.py # Time series outlier detection
β βββ stats.py # Statistical analysis functions
βββ stats/ # Statistical utilities
βββ bootstrap_bca.py # Bootstrap confidence intervals
βββ statistical_interval.py # Statistical interval estimation
βββ utils.py # General statistical utilities
```
```
tinyshift
βββ LICENSE
βββ README.md
βββ poetry.lock
βββ pyproject.toml
βββ tinyshift
βΒ Β βββ association_mining
βΒ Β βΒ Β βββ README.md
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ analyzer.py
βΒ Β βΒ Β βββ encoder.py
βΒ Β βββ examples
βΒ Β βΒ Β βββ outlier.ipynb
βΒ Β βΒ Β βββ tracker.ipynb
βΒ Β βΒ Β βββ transaction_analyzer.ipynb
βΒ Β βββ modelling
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ multicollinearity.py
βΒ Β βΒ Β βββ residualizer.py
βΒ Β βΒ Β βββ scaler.py
βΒ Β βββ outlier
βΒ Β βΒ Β βββ README.md
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ base.py
βΒ Β βΒ Β βββ hbos.py
βΒ Β βΒ Β βββ pca.py
βΒ Β βΒ Β βββ spad.py
βΒ Β βββ plot
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ correlation.py
βΒ Β βΒ Β βββ plot.py
βΒ Β βββ series
βΒ Β βΒ Β βββ README.md
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ forecastability.py
βΒ Β βΒ Β βββ outlier.py
βΒ Β βΒ Β βββ stats.py
βΒ Β βββ stats
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ bootstrap_bca.py
βΒ Β βΒ Β βββ series.py
βΒ Β βΒ Β βββ statistical_interval.py
βΒ Β βΒ Β βββ utils.py
βΒ Β βββ tests
βΒ Β βΒ Β βββ test.pca.py
βΒ Β βΒ Β βββ test_hbos.py
βΒ Β βΒ Β βββ test_spad.py
βΒ Β βββ drift
βΒ Β βββ __init__.py
βΒ Β βββ base.py
βΒ Β βββ categorical.py
βΒ Β βββ continuous.py
```
### Development Setup
```bash
git clone https://github.com/HeyLucasLeao/tinyshift.git
cd tinyshift
pip install -e ".[all]"
```
## π Requirements
- **Python**: 3.10+
- **Core Dependencies**:
- pandas (>2.3.0)
- scikit-learn (>1.3.0)
- statsmodels (>=0.14.5)
- **Optional Dependencies**:
- plotly (>5.22.0) - for visualization
- kaleido (<=0.2.1) - for static plot export
- nbformat (>=5.10.4) - for notebook support
## π License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## π Acknowledgments
- Inspired by [Nannyml](https://github.com/NannyML/nannyml)
Raw data
{
"_id": null,
"home_page": null,
"name": "tinyshift",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "mlops, toolbox, machine-learning",
"author": null,
"author_email": "Lucas Le\u00e3o <heylucasleao@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/53/48/191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c/tinyshift-1.1.1.tar.gz",
"platform": null,
"description": "# TinyShift\n<p align=\"center\">\n <img src=\"https://github.com/user-attachments/assets/34668d33-459d-4dc3-b598-342130bf7db3\" alt=\"tinyshift_full_logo\" width=\"400\" height=\"400\">\n</p>\n**TinyShift** is a lightweight, sklearn-compatible Python library designed for **data drift detection**, **outlier identification**, and **MLOps monitoring** in production machine learning systems. The library provides modular, easy-to-use tools for detecting when data distributions or model performance change over time, with comprehensive visualization capabilities.\n\nFor enterprise-grade solutions, consider [Nannyml](https://github.com/NannyML/nannyml).\n\n## Features\n\n- **Data Drift Detection**: Categorical and continuous data drift monitoring with multiple distance metrics\n- **Outlier Detection**: **HBOS**, **PCA-based** and **SPAD** outlier detection algorithms \n- **Time Series Analysis**: Seasonality decomposition, trend analysis, and forecasting diagnostics\n\n## Technologies Used\n\n- **Python 3.10+** \n- **Scikit-learn 1.3.0+**\n- **Pandas 2.3.0+** \n- **NumPy**\n- **SciPy**\n- **Statsmodels 0.14.5+**\n- **Plotly 5.22.0+** (optional, for plotting)\n\n## \ud83d\udce6 Installation\n\nInstall TinyShift using pip:\n\n```bash\npip install tinyshift\n```\n\n### Development Installation\n\nClone and install from source:\n\n```bash\ngit clone https://github.com/HeyLucasLeao/tinyshift.git\ncd tinyshift\npip install -e .\n```\n\n## \ud83d\udcd6 Quick Start\n\n### 1. Categorical Data Drift Detection\n\nTinyShift provides sklearn-compatible drift detectors that follow the familiar `fit()` and `score()` pattern:\n\n```python\nimport pandas as pd\nfrom tinyshift.drift import CatDrift\n\n# Load your data\ndf = pd.read_csv(\"data.csv\")\nreference_data = df[df[\"date\"] < '2024-07-01']\nanalysis_data = df[df[\"date\"] >= '2024-07-01'] \n\n# Initialize and fit the drift detector\ndetector = CatDrift(\n freq=\"D\", # Daily frequency\n func=\"chebyshev\", # Distance metric\n drift_limit=\"auto\", # Automatic threshold detection\n method=\"expanding\" # Comparison method\n)\n\n# Fit on reference data\ndetector.fit(reference_data)\n\n# Score new data for drift\ndrift_scores = detector.predict(analysis_data)\nprint(drift_scores)\n```\n\nAvailable distance metrics for **categorical** data:\n- `\"chebyshev\"`: Maximum absolute difference between distributions\n- `\"jensenshannon\"`: Jensen-Shannon divergence \n- `\"psi\"`: Population Stability Index\n\n### 2. Continuous Data Drift Detection\n\nFor numerical features, use the continuous drift detector:\n\n```python\nfrom tinyshift.drift import ConDrift\n\n# Initialize continuous drift detector\ndetector = ConDrift(\n freq=\"W\", # Weekly frequency \n func=\"ws\", # Wasserstein distance\n drift_limit=\"auto\",\n method=\"expanding\"\n)\n\n# Fit and score\ndetector.fit(reference_data)\ndrift_scores = detector.score(analysis_data)\n```\n\n### 3. Outlier Detection\n\nTinyShift includes sklearn-compatible outlier detection algorithms:\n\n```python\nfrom tinyshift.outlier import SPAD, HBOS, PCAReconstructionError\n\n# SPAD (Simple Probabilistic Anomaly Detector)\nspad = SPAD(plus=True)\nspad.fit(X_train)\n\noutlier_scores = spad.decision_function(X_test)\noutlier_labels = spad.predict(X_test)\n\n# HBOS (Histogram-Based Outlier Score)\nhbos = HBOS(dynamic_bins=True)\nhbos.fit(X_train, nbins=\"fd\")\nscores = hbos.decision_function(X_test)\n\n# PCA-based outlier detection\npca_detector = PCAReconstructionError()\npca_detector.fit(X_train)\npca_scores = pca_detector.decision_function(X_test)\n```\n### 4. Time Series Analysis and Diagnostics\n\nTinyShift provides time series analysis capabilities:\n\n```python\nfrom tinyshift.plot import seasonal_decompose\nfrom tinyshift.series import trend_significance, permutation_auto_mutual_information\n\n# Seasonal decomposition with multiple periods\nseasonal_decompose(\n time_series, \n periods=[7, 365], # Weekly and yearly patterns\n width=1200, \n height=800\n)\n\n# Test for significant trends\ntrend_result = trend_significance(time_series, alpha=0.05)\nprint(f\"Significant trend: {trend_result}\")\n\n# Stationary Analysis\nfig = stationarity_analysis(time_series)\n```\n\n### 5. Advanced Modeling Tools\n\n```python\nfrom tinyshift.modelling import filter_features_by_vif\nfrom tinyshift.stats import bootstrap_bca_interval\n\n# Detect multicollinearity\nmask = filter_features_by_vif(X, trehshold=5, verbose=True)\nX.columns[mask]\n\n# Bootstrap confidence intervals\nconfidence_interval = bootstrap_bca_interval(\n data, \n statistic=np.mean, \n alpha=0.05, \n n_bootstrap=1000\n)\n```\n\n## \ud83d\udcc1 Project Structure\n\n```\ntinyshift/\n\u251c\u2500\u2500 association_mining/ # Market basket analysis tools\n\u2502 \u251c\u2500\u2500 analyzer.py # Transaction pattern analysis\n\u2502 \u2514\u2500\u2500 encoder.py # Data encoder\n\u251c\u2500\u2500 drift/ # Data drift detection \n\u2502 \u251c\u2500\u2500 base.py # Base drift detection classes \n\u2502 \u251c\u2500\u2500 categorical.py # CatDrift for categorical features\n\u2502 \u2514\u2500\u2500 continuous.py # ConDrift for numerical features\n\u251c\u2500\u2500 examples/ # Jupyter notebook examples\n\u2502 \u251c\u2500\u2500 drift.ipynb # Drift detection examples\n\u2502 \u251c\u2500\u2500 outlier.ipynb # Outlier detection demos\n\u2502 \u251c\u2500\u2500 series.ipynb # Time series analysis\n\u2502 \u2514\u2500\u2500 transaction_analyzer.ipynb\n\u251c\u2500\u2500 modelling/ # ML modeling utilities\n\u2502 \u251c\u2500\u2500 multicollinearity.py # VIF-based multicollinearity detection\n\u2502 \u251c\u2500\u2500 residualizer.py # Residualizer Feature\n\u2502 \u2514\u2500\u2500 scaler.py # Custom scaling transformations\n\u251c\u2500\u2500 outlier/ # Outlier detection algorithms\n\u2502 \u251c\u2500\u2500 base.py # Base outlier detection classes\n\u2502 \u251c\u2500\u2500 hbos.py # Histogram-Based Outlier Score\n\u2502 \u251c\u2500\u2500 pca.py # PCA-based outlier detection \n\u2502 \u2514\u2500\u2500 spad.py # Simple Probabilistic Anomaly Detector\n\u251c\u2500\u2500 plot/ # Visualization capabilities \n\u2502 \u251c\u2500\u2500 correlation.py # Correlation analysis plots\n\u2502 \u2514\u2500\u2500 diagnostic.py # Time series diagnostics plots\n\u251c\u2500\u2500 series/ # Time series analysis tools\n\u2502 \u251c\u2500\u2500 forecastability.py # Forecast quality metrics\n\u2502 \u251c\u2500\u2500 outlier.py # Time series outlier detection\n\u2502 \u2514\u2500\u2500 stats.py # Statistical analysis functions\n\u2514\u2500\u2500 stats/ # Statistical utilities\n \u251c\u2500\u2500 bootstrap_bca.py # Bootstrap confidence intervals\n \u251c\u2500\u2500 statistical_interval.py # Statistical interval estimation\n \u2514\u2500\u2500 utils.py # General statistical utilities\n```\n\n```\ntinyshift\n\u251c\u2500\u2500 LICENSE\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 poetry.lock\n\u251c\u2500\u2500 pyproject.toml\n\u251c\u2500\u2500 tinyshift\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 association_mining\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 analyzer.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 encoder.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 examples\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier.ipynb\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 tracker.ipynb\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 transaction_analyzer.ipynb\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 modelling\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 multicollinearity.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 residualizer.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 scaler.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 base.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 hbos.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 pca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 spad.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 plot\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 correlation.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 plot.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 series\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 README.md\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 forecastability.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 outlier.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 stats.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 stats\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 bootstrap_bca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 series.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 statistical_interval.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 utils.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 tests\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 test.pca.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 test_hbos.py\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 test_spad.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 drift\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 base.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 categorical.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 continuous.py\n```\n\n\n### Development Setup\n\n```bash\ngit clone https://github.com/HeyLucasLeao/tinyshift.git\ncd tinyshift\npip install -e \".[all]\"\n```\n\n## \ud83d\udccb Requirements\n\n- **Python**: 3.10+\n- **Core Dependencies**: \n - pandas (>2.3.0)\n - scikit-learn (>1.3.0) \n - statsmodels (>=0.14.5)\n- **Optional Dependencies**:\n - plotly (>5.22.0) - for visualization\n - kaleido (<=0.2.1) - for static plot export\n - nbformat (>=5.10.4) - for notebook support\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Inspired by [Nannyml](https://github.com/NannyML/nannyml)\n\n",
"bugtrack_url": null,
"license": null,
"summary": "A small toolbox for mlops",
"version": "1.1.1",
"project_urls": null,
"split_keywords": [
"mlops",
" toolbox",
" machine-learning"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e1081f62ec95fc8e1817df3caa6b640b7fb49c8adf9198cc6190f81d73dbea1e",
"md5": "d8e89c4d787b16804f410b1c5e71defe",
"sha256": "9fc7ed26a58c3d5aaa9dcce0bd7b6fd71da741a8df6032d95dc91f5ed94f257e"
},
"downloads": -1,
"filename": "tinyshift-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d8e89c4d787b16804f410b1c5e71defe",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 66285,
"upload_time": "2025-11-04T15:39:24",
"upload_time_iso_8601": "2025-11-04T15:39:24.712629Z",
"url": "https://files.pythonhosted.org/packages/e1/08/1f62ec95fc8e1817df3caa6b640b7fb49c8adf9198cc6190f81d73dbea1e/tinyshift-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5348191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c",
"md5": "ffcc49f59273f90ac1c3b26353bc7847",
"sha256": "9bc4d8a62647fb0cf622816e41ea09fe89b62cd3b86cbadfc6e7e8e5c9e8a9d3"
},
"downloads": -1,
"filename": "tinyshift-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "ffcc49f59273f90ac1c3b26353bc7847",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 51250,
"upload_time": "2025-11-04T15:39:25",
"upload_time_iso_8601": "2025-11-04T15:39:25.866565Z",
"url": "https://files.pythonhosted.org/packages/53/48/191e3a06bf53374fe01de369aaa088d6980bd1f604b61980fdf6d0840a6c/tinyshift-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-04 15:39:25",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "tinyshift"
}