DmDSLab


NameDmDSLab JSON
Version 0.0.0 PyPI version JSON
download
home_pagehttps://github.com/Dmatryus/DmDSLab
SummaryData Science Laboratory Toolkit
upload_time2025-07-12 21:53:46
maintainerNone
docs_urlNone
authorDmatryus Detry
requires_python>=3.8
licenseApache-2.0
keywords data-science machine-learning preprocessing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
             # DmDSLab: библиотека инструментов для Data Science  
**DmDSLab** — набор готовых решений для автоматизации рутинных задач в Data Science проектах.  

---

## Модули
### Модуль структур данных (data)
Модуль предоставляет вспомогательные структуры данных для работы с наборами данных в ML-пайплайнах.

**Основные компоненты:**
- `ModelData` — именованный кортеж для хранения признаков (`features`) и целевого значения (`target`).
- `DataSplit` — именованный кортеж для разделения данных на обучающую (`train`), валидационную (`tuning`) и тестовую (`test`) выборки.

**Преимущества:**
- Упрощает организацию данных в проектах Data Science.
- Обеспечивает неизменяемость структур через `namedtuple`.
- 
Пример использования:
```python
from dmdslab.data import ModelData, DataSplit

# Создание экземпляра ModelData
data = ModelData(features=X, target=y)

# Разделение данных
split = DataSplit(train=train_data, tuning=val_data, test=test_data)
```


## Модуль загрузки данных (download)

Модуль предоставляет инструменты для загрузки данных из различных источников, с акцентом на работу с SQL-базами данных.

**Основные компоненты:**
- `DataLoader` — абстрактный класс для загрузки данных, который определяет базовый интерфейс.
- `SQLLoader` — реализация `DataLoader` для работы с SQL-запросами, поддерживающая параметризованные запросы и разделение данных на партиции.

**Преимущества:**
- Абстракция процесса загрузки данных.
- Поддержка сложных запросов с возможностью разделения на партиции.
- Автоматическая конкатенация результатов из разных запросов.
- Гибкая настройка через параметры конструктора.

Пример использования:
```python
from dmdslab.download import SQLLoader

# Создание экземпляра SQLLoader
loader = SQLLoader(
    connect=your_db_connection,
    query="SELECT * FROM table WHERE {}",
    template_field="date_column",
    partitions=[(None, "2023-01-01"), ("2023-01-01", "2023-12-31")]
)

# Загрузка данных
data = loader.download()
```

## Модуль предобработки данных (cleaning)

Модуль предоставляет функции для предобработки данных, включая удаление почти пустых строк, почти константных столбцов и дубликатов.

**Основные компоненты:**
- `drop_almost_empty_rows` — удаляет строки, содержащие более определённого процента пустых значений.
- `drop_almost_const_columns` — удаляет столбцы, содержащие более определённого процента константных значений.
- `drop_duplicates` — удаляет дубликаты строк или столбцов в зависимости от заданного режима.

**Преимущества:**
- Упрощает предобработку данных.
- Повышает качество данных за счёт удаления ненужных строк и столбцов.
- Гибкая настройка через параметры функций.

Пример использования:
```python
from dmdslab.cleaning import drop_almost_empty_rows, drop_almost_const_columns, drop_duplicates

# Создание экземпляра SQLLoader
df = pd.DataFrame(...)  # Ваша DataFrame

# Удаление почти пустых строк
df = drop_almost_empty_rows(df, threshold=0.8)

# Удаление почти константных столбцов
df = drop_almost_const_columns(df, threshold=0.9)

# Удаление дубликатов
df = drop_duplicates(df, mode='all')
```

**Лицензия**: Apache 2.0.  
**Автор**: [Dmatryus Detry](https://github.com/Dmatryus).  

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Dmatryus/DmDSLab",
    "name": "DmDSLab",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "data-science machine-learning preprocessing",
    "author": "Dmatryus Detry",
    "author_email": "dmatryus.sqrt49@yandex.ru",
    "download_url": "https://files.pythonhosted.org/packages/62/d6/0b9b964abd4ad75d0294de857245df8f3b78ee04593e77d69f9a0fcb1044/dmdslab-0.0.0.tar.gz",
    "platform": null,
    "description": " # DmDSLab: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f Data Science  \r\n**DmDSLab** \u2014 \u043d\u0430\u0431\u043e\u0440 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 Data Science \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.  \r\n\r\n---\r\n\r\n## \u041c\u043e\u0434\u0443\u043b\u0438\r\n### \u041c\u043e\u0434\u0443\u043b\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 (data)\r\n\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 ML-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0430\u0445.\r\n\r\n**\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:**\r\n- `ModelData` \u2014 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0440\u0442\u0435\u0436 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 (`features`) \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (`target`).\r\n- `DataSplit` \u2014 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0440\u0442\u0435\u0436 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e (`train`), \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e (`tuning`) \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e (`test`) \u0432\u044b\u0431\u043e\u0440\u043a\u0438.\r\n\r\n**\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:**\r\n- \u0423\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 Data Science.\r\n- \u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0447\u0435\u0440\u0435\u0437 `namedtuple`.\r\n- \r\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\r\n```python\r\nfrom dmdslab.data import ModelData, DataSplit\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ModelData\r\ndata = ModelData(features=X, target=y)\r\n\r\n# \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445\r\nsplit = DataSplit(train=train_data, tuning=val_data, test=test_data)\r\n```\r\n\r\n\r\n## \u041c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (download)\r\n\r\n\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u0441 \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 SQL-\u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\r\n\r\n**\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:**\r\n- `DataLoader` \u2014 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.\r\n- `SQLLoader` \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f `DataLoader` \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438.\r\n\r\n**\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:**\r\n- \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\r\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0438.\r\n- \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.\r\n- \u0413\u0438\u0431\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430.\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\r\n```python\r\nfrom dmdslab.download import SQLLoader\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 SQLLoader\r\nloader = SQLLoader(\r\n    connect=your_db_connection,\r\n    query=\"SELECT * FROM table WHERE {}\",\r\n    template_field=\"date_column\",\r\n    partitions=[(None, \"2023-01-01\"), (\"2023-01-01\", \"2023-12-31\")]\r\n)\r\n\r\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\r\ndata = loader.download()\r\n```\r\n\r\n## \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (cleaning)\r\n\r\n\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0447\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432.\r\n\r\n**\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:**\r\n- `drop_almost_empty_rows` \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.\r\n- `drop_almost_const_columns` \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.\r\n- `drop_duplicates` \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0441\u0442\u0440\u043e\u043a \u0438\u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430.\r\n\r\n**\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:**\r\n- \u0423\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.\r\n- \u041f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432.\r\n- \u0413\u0438\u0431\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439.\r\n\r\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\r\n```python\r\nfrom dmdslab.cleaning import drop_almost_empty_rows, drop_almost_const_columns, drop_duplicates\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 SQLLoader\r\ndf = pd.DataFrame(...)  # \u0412\u0430\u0448\u0430 DataFrame\r\n\r\n# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\r\ndf = drop_almost_empty_rows(df, threshold=0.8)\r\n\r\n# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432\r\ndf = drop_almost_const_columns(df, threshold=0.9)\r\n\r\n# \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432\r\ndf = drop_duplicates(df, mode='all')\r\n```\r\n\r\n**\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f**: Apache 2.0.  \r\n**\u0410\u0432\u0442\u043e\u0440**: [Dmatryus Detry](https://github.com/Dmatryus).  \r\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Data Science Laboratory Toolkit",
    "version": "0.0.0",
    "project_urls": {
        "Documentation": "https://github.com/Dmatryus/DmDSLab/wiki",
        "Homepage": "https://github.com/Dmatryus/DmDSLab",
        "Source": "https://github.com/Dmatryus/DmDSLab"
    },
    "split_keywords": [
        "data-science",
        "machine-learning",
        "preprocessing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7cb9118ad8c767e9336ab4c3457020eeb0038b2d1bb77bd8c4ac36f233439b9f",
                "md5": "2863647cf817ed9400e6906627107bfb",
                "sha256": "3d2d033fd8ca00dc916a74ecd9adc0f12d901f407d3bb0ccd62f28d4c9aac2fe"
            },
            "downloads": -1,
            "filename": "dmdslab-0.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2863647cf817ed9400e6906627107bfb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 9030,
            "upload_time": "2025-07-12T21:53:45",
            "upload_time_iso_8601": "2025-07-12T21:53:45.091742Z",
            "url": "https://files.pythonhosted.org/packages/7c/b9/118ad8c767e9336ab4c3457020eeb0038b2d1bb77bd8c4ac36f233439b9f/dmdslab-0.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "62d60b9b964abd4ad75d0294de857245df8f3b78ee04593e77d69f9a0fcb1044",
                "md5": "efe4a7e09319839de23ef2cf6d0d41bd",
                "sha256": "004afd0b3a3a262bb2162242d953ffc99f61db33c3ba864a04d71af50674ac5b"
            },
            "downloads": -1,
            "filename": "dmdslab-0.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "efe4a7e09319839de23ef2cf6d0d41bd",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 9190,
            "upload_time": "2025-07-12T21:53:46",
            "upload_time_iso_8601": "2025-07-12T21:53:46.120340Z",
            "url": "https://files.pythonhosted.org/packages/62/d6/0b9b964abd4ad75d0294de857245df8f3b78ee04593e77d69f9a0fcb1044/dmdslab-0.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-12 21:53:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Dmatryus",
    "github_project": "DmDSLab",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "dmdslab"
}
        
Elapsed time: 0.52329s