# NexR_qc
[![PyPI version](https://badge.fury.io/py/NexR-qc.svg)](https://badge.fury.io/py/NexR-qc)
<br><br>
## 요구사항
- python >= 3.6
- numpy
- pandas
- openpyxl
<br>
## 설치
### pip 설치
```
#!/bin/bash
pip install NexR_qc
```
### 정형데이터 QC
#### 디렉토리 기본 구성
- documents 하위 항목(테이블정의서, 컬럼정의서, 코드정의서)은 필수 항목은 아니지만, 테이블별 정확한 정보를 얻기위해서 작성되는 문서임 ([Github 링크](https://github.com/mata-1223/NexR_qc)의 document 폴더 내 문서 양식 참고)
- log, output 폴더는 초기에 생성되어 있지않아도 수행 결과로 자동 생성됨
- config.json 파일은 데이터 내 결측값을 커스텀하기 위한 파일로 초기에 생성되어 있지않아도 수행 결과로 자동 생성됨 (결측처리 default 값: "?", "na", "null", "Null", "NULL", " ", "[NULL]")
```
.
├── datasets/
│ ├── DataName
│ │ ├── 데이터_001.csv
│ │ ├── 데이터_002.csv
│ │ ├── 데이터_003.xlsx
│ │ ├── ...
├── documents/
│ ├── DataName
│ │ ├── 테이블정의서.xlsx
│ │ ├── 컬럼정의서.xlsx
│ │ └── 코드정의서.xlsx
├── log/
│ ├── DataName
│ │ ├── QualityCheck_yyyymmdd_hhmmss.log
│ │ ├── ...
├── output/
│ ├── DataName
│ │ └── QC결과서_yyyymmdd_hhmmss.xlsx
└── config.json
```
<br>
#### 예제 실행
```
#!bin/usr/python3
from pathlib import Path
from NexR_qc.QualityCheck import *
DataName = "data1"
PATH = {}
PATH.setdefault("ROOT", Path.cwd())
PATH.setdefault("DATA", PATH["ROOT"] / "datasets" / DataName)
ext_fmt = [".csv", ".xlsx", "xls", ".ftr", ".feather", ".pkl", ".pickle"]
if __name__ == "__main__":
Process = QualityCheck(DataName=DataName, PathDict=PATH)
```
<br>
#### Input / Output 정보
##### Input
* 데이터 타입: Dictionary 형태
* 상세 형상: {data_name1: Dataframe1, data_name2: Dataframe2,…}
* data_name: 데이터 테이블명 or 데이터 파일명
* Dataframe: 데이터를 불러온 Dataframe 형상
* 예시
![NexR_qc_Info_002](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_002.png)
##### Output
* 결과 파일 경로: output/QC_결과서.xlsx
* 예시
1) 예시 1: 테이블 리스트 시트
![NexR_qc_Info_003](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_003.png)
2) 예시 2: 데이터 별 QC 수행 결과 시트
![NexR_qc_Info_001](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_001.png)
### 이미지 데이터 QC
#### 디렉토리 기본 구성
- documents 하위 항목(데이터정의서)은 필수 항목은 아니지만, 테이블별 정확한 정보를 얻기위해서 작성되는 문서임 ([Github 링크](https://github.com/mata-1223/NexR_qc)의 document 폴더 내 문서 양식 참고)
* 초기 파일이 없는 경우 최초 모듈 실행으로 생성됨
- log, output 폴더는 초기에 생성되어 있지않아도 수행 결과로 자동 생성됨
##### 일반
```
.
├── datasets/
│ ├── DataName/
│ │ ├── (optional) train/
│ │ │ ├── img_00001.png
│ │ │ ├── img_00002.png
│ │ │ ├── img_00003.png
│ │ │ ├── ...
├── documents/
│ ├── DataName
│ │ └── (optional) 데이터정의서.xlsx
├── log/
│ ├── DataName
│ │ ├── QualityCheck_yyyymmdd_hhmmss.log
│ │ ├── ...
├── output/
│ ├── DataName
│ │ └── QC결과서_yyyymmdd_hhmmss.xlsx
```
<br>
##### 분류
```
.
├── datasets/
│ ├── DataName/
│ │ ├── train/
│ │ │ ├── 분류Class001명/
│ │ │ │ ├── img_00001.png
│ │ │ │ ├── img_00002.png
│ │ │ │ ├── ...
│ │ │ ├── 분류Class002명/
│ │ ├── 분류Class002명/
│ │ ├── 분류Class003명/
│ │ ├── ...
├── documents/
│ ├── DataName
│ │ └── (optional) 데이터정의서.xlsx
├── log/
│ ├── DataName
│ │ ├── QualityCheck_yyyymmdd_hhmmss.log
│ │ ├── ...
├── output/
│ ├── DataName
│ │ └── QC결과서_yyyymmdd_hhmmss.xlsx
└── config.json
```
<br>
##### 객체탐지
```
.
├── datasets/
│ ├── DataName/
│ │ ├── images/
│ │ │ ├── train/
│ │ │ │ ├── img_00001.png
│ │ │ │ ├── img_00002.png
│ │ │ │ ├── ...
│ │ │ ├── val/
│ │ │ │ ├── img_10001.png
│ │ │ │ ├── img_10002.png
│ │ │ │ ├── ...
│ │ ├── labels/
│ │ │ ├── train/
│ │ │ │ ├── img_00001.txt
│ │ │ │ ├── img_00002.txt
│ │ │ │ ├── ...
│ │ │ ├── val/
│ │ │ │ ├── img_10001.txt
│ │ │ │ ├── img_10002.txt
│ │ │ │ ├── ...
│ │ ├── ...
├── documents/
│ ├── DataName
│ │ └── (optional) 데이터정의서.xlsx
├── log/
│ ├── DataName
│ │ ├── QualityCheck_yyyymmdd_hhmmss.log
│ │ ├── ...
├── output/
│ ├── DataName
│ │ └── QC결과서_yyyymmdd_hhmmss.xlsx
└── DataName.yaml
```
<br>
#### 예제 실행
```
#!bin/usr/python3
from pathlib import Path
from NexR_qc.QualityCheck import *
DataName = "한국음식_sample2" # 분류 Case 예시
# DataName = "fire_smoke"
# DataName = "coco8"
# DataName = "AI_기반_아동_미술심리_진단을_위한_그림_데이터_구축"
PATH = {}
PATH.setdefault("ROOT", Path.cwd())
PATH.setdefault("DATA", PATH["ROOT"] / "datasets" / DataName)
PATH.setdefault("IMAGE", PATH["DATA"])
# PATH.setdefault("IMAGE", PATH["DATA"] / "images")
# PATH.setdefault("LABEL", PATH["DATA"] / "labels")
# PATH.setdefault("YAML", PATH["ROOT"] / "coco8.yaml")
# PATH.setdefault("YAML", PATH["ROOT"] / "fire_smoke.yaml")
logger_save = False
# mode = "일반"
mode = "분류"
# mode = "객체탐지"
if __name__ == "__main__":
Process = QualityCheck(DataName=DataName, DataType="image", Mode=mode, PathDict=PATH, logger_save=logger_save)
```
#### Output 형상
##### 일반
![NexR_qc_Info_004](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_004.png)
##### 분류
![NexR_qc_Info_005](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_005.png)
##### 객체탐지
![NexR_qc_Info_006](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_006.png)
Raw data
{
"_id": null,
"home_page": "https://github.com/mata-1223/NexR_qc",
"name": "NexR-qc",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "qc, NexR, mata.lee, NexR_qc, python, python tutorial, pypi",
"author": "mata.lee",
"author_email": "ldh3810@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/51/c5/475f021cc769dfaf8836df806d1cc324c567441b94974c6ea152fc2f215e/NexR_qc-0.0.13.tar.gz",
"platform": null,
"description": "# NexR_qc\n[![PyPI version](https://badge.fury.io/py/NexR-qc.svg)](https://badge.fury.io/py/NexR-qc)\n<br><br>\n\n## \uc694\uad6c\uc0ac\ud56d\n- python >= 3.6\n- numpy\n- pandas\n- openpyxl\n<br>\n\n## \uc124\uce58\n\n### pip \uc124\uce58\n```\n#!/bin/bash\npip install NexR_qc\n```\n\n### \uc815\ud615\ub370\uc774\ud130 QC\n\n#### \ub514\ub809\ud1a0\ub9ac \uae30\ubcf8 \uad6c\uc131\n- documents \ud558\uc704 \ud56d\ubaa9(\ud14c\uc774\ube14\uc815\uc758\uc11c, \uceec\ub7fc\uc815\uc758\uc11c, \ucf54\ub4dc\uc815\uc758\uc11c)\uc740 \ud544\uc218 \ud56d\ubaa9\uc740 \uc544\ub2c8\uc9c0\ub9cc, \ud14c\uc774\ube14\ubcc4 \uc815\ud655\ud55c \uc815\ubcf4\ub97c \uc5bb\uae30\uc704\ud574\uc11c \uc791\uc131\ub418\ub294 \ubb38\uc11c\uc784 ([Github \ub9c1\ud06c](https://github.com/mata-1223/NexR_qc)\uc758 document \ud3f4\ub354 \ub0b4 \ubb38\uc11c \uc591\uc2dd \ucc38\uace0)\n- log, output \ud3f4\ub354\ub294 \ucd08\uae30\uc5d0 \uc0dd\uc131\ub418\uc5b4 \uc788\uc9c0\uc54a\uc544\ub3c4 \uc218\ud589 \uacb0\uacfc\ub85c \uc790\ub3d9 \uc0dd\uc131\ub428\n- config.json \ud30c\uc77c\uc740 \ub370\uc774\ud130 \ub0b4 \uacb0\uce21\uac12\uc744 \ucee4\uc2a4\ud140\ud558\uae30 \uc704\ud55c \ud30c\uc77c\ub85c \ucd08\uae30\uc5d0 \uc0dd\uc131\ub418\uc5b4 \uc788\uc9c0\uc54a\uc544\ub3c4 \uc218\ud589 \uacb0\uacfc\ub85c \uc790\ub3d9 \uc0dd\uc131\ub428 (\uacb0\uce21\ucc98\ub9ac default \uac12: \"?\", \"na\", \"null\", \"Null\", \"NULL\", \" \", \"[NULL]\")\n\n```\n.\n\u251c\u2500\u2500 datasets/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 \ub370\uc774\ud130_001.csv\n\u2502 \u2502 \u251c\u2500\u2500 \ub370\uc774\ud130_002.csv\n\u2502 \u2502 \u251c\u2500\u2500 \ub370\uc774\ud130_003.xlsx\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 documents/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 \ud14c\uc774\ube14\uc815\uc758\uc11c.xlsx\n\u2502 \u2502 \u251c\u2500\u2500 \uceec\ub7fc\uc815\uc758\uc11c.xlsx\n\u2502 \u2502 \u2514\u2500\u2500 \ucf54\ub4dc\uc815\uc758\uc11c.xlsx\n\u251c\u2500\u2500 log/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 QualityCheck_yyyymmdd_hhmmss.log\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 output/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 QC\uacb0\uacfc\uc11c_yyyymmdd_hhmmss.xlsx\n\u2514\u2500\u2500 config.json\n``` \n<br>\n\n#### \uc608\uc81c \uc2e4\ud589 \n```\n#!bin/usr/python3\nfrom pathlib import Path\nfrom NexR_qc.QualityCheck import *\nDataName = \"data1\"\nPATH = {}\nPATH.setdefault(\"ROOT\", Path.cwd())\nPATH.setdefault(\"DATA\", PATH[\"ROOT\"] / \"datasets\" / DataName)\next_fmt = [\".csv\", \".xlsx\", \"xls\", \".ftr\", \".feather\", \".pkl\", \".pickle\"]\nif __name__ == \"__main__\":\n Process = QualityCheck(DataName=DataName, PathDict=PATH)\n```\n\n<br>\n\n#### Input / Output \uc815\ubcf4\n\n##### Input\n* \ub370\uc774\ud130 \ud0c0\uc785: Dictionary \ud615\ud0dc\n\t* \uc0c1\uc138 \ud615\uc0c1: {data_name1: Dataframe1, data_name2: Dataframe2,\u2026}\n\t\t* data_name: \ub370\uc774\ud130 \ud14c\uc774\ube14\uba85 or \ub370\uc774\ud130 \ud30c\uc77c\uba85 \n\t\t* Dataframe: \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc628 Dataframe \ud615\uc0c1\n* \uc608\uc2dc\n![NexR_qc_Info_002](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_002.png)\n\n##### Output\n* \uacb0\uacfc \ud30c\uc77c \uacbd\ub85c: output/QC_\uacb0\uacfc\uc11c.xlsx\n* \uc608\uc2dc\n1) \uc608\uc2dc 1: \ud14c\uc774\ube14 \ub9ac\uc2a4\ud2b8 \uc2dc\ud2b8\n![NexR_qc_Info_003](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_003.png)\n\n2) \uc608\uc2dc 2: \ub370\uc774\ud130 \ubcc4 QC \uc218\ud589 \uacb0\uacfc \uc2dc\ud2b8\n![NexR_qc_Info_001](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_001.png)\n\n### \uc774\ubbf8\uc9c0 \ub370\uc774\ud130 QC\n\n#### \ub514\ub809\ud1a0\ub9ac \uae30\ubcf8 \uad6c\uc131\n- documents \ud558\uc704 \ud56d\ubaa9(\ub370\uc774\ud130\uc815\uc758\uc11c)\uc740 \ud544\uc218 \ud56d\ubaa9\uc740 \uc544\ub2c8\uc9c0\ub9cc, \ud14c\uc774\ube14\ubcc4 \uc815\ud655\ud55c \uc815\ubcf4\ub97c \uc5bb\uae30\uc704\ud574\uc11c \uc791\uc131\ub418\ub294 \ubb38\uc11c\uc784 ([Github \ub9c1\ud06c](https://github.com/mata-1223/NexR_qc)\uc758 document \ud3f4\ub354 \ub0b4 \ubb38\uc11c \uc591\uc2dd \ucc38\uace0)\n * \ucd08\uae30 \ud30c\uc77c\uc774 \uc5c6\ub294 \uacbd\uc6b0 \ucd5c\ucd08 \ubaa8\ub4c8 \uc2e4\ud589\uc73c\ub85c \uc0dd\uc131\ub428\n- log, output \ud3f4\ub354\ub294 \ucd08\uae30\uc5d0 \uc0dd\uc131\ub418\uc5b4 \uc788\uc9c0\uc54a\uc544\ub3c4 \uc218\ud589 \uacb0\uacfc\ub85c \uc790\ub3d9 \uc0dd\uc131\ub428\n\n##### \uc77c\ubc18\n```\n.\n\u251c\u2500\u2500 datasets/\n\u2502 \u251c\u2500\u2500 DataName/\n\u2502 \u2502 \u251c\u2500\u2500 (optional) train/\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00001.png\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00002.png\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00003.png\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 documents/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 (optional) \ub370\uc774\ud130\uc815\uc758\uc11c.xlsx\n\u251c\u2500\u2500 log/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 QualityCheck_yyyymmdd_hhmmss.log\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 output/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 QC\uacb0\uacfc\uc11c_yyyymmdd_hhmmss.xlsx\n``` \n<br>\n\n##### \ubd84\ub958\n```\n.\n\u251c\u2500\u2500 datasets/\n\u2502 \u251c\u2500\u2500 DataName/\n\u2502 \u2502 \u251c\u2500\u2500 train/\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 \ubd84\ub958Class001\uba85/\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00001.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00002.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 \ubd84\ub958Class002\uba85/\n\u2502 \u2502 \u251c\u2500\u2500 \ubd84\ub958Class002\uba85/\n\u2502 \u2502 \u251c\u2500\u2500 \ubd84\ub958Class003\uba85/\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 documents/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 (optional) \ub370\uc774\ud130\uc815\uc758\uc11c.xlsx\n\u251c\u2500\u2500 log/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 QualityCheck_yyyymmdd_hhmmss.log\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 output/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 QC\uacb0\uacfc\uc11c_yyyymmdd_hhmmss.xlsx\n\u2514\u2500\u2500 config.json\n``` \n<br>\n\n##### \uac1d\uccb4\ud0d0\uc9c0\n```\n.\n\u251c\u2500\u2500 datasets/\n\u2502 \u251c\u2500\u2500 DataName/\n\u2502 \u2502 \u251c\u2500\u2500 images/\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 train/\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00001.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00002.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 val/\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_10001.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_10002.png\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u251c\u2500\u2500 labels/\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 train/\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00001.txt\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_00002.txt\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 val/\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_10001.txt\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 img_10002.txt\n\u2502 \u2502 \u2502 \u2502 \u251c\u2500\u2500 ...\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 documents/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 (optional) \ub370\uc774\ud130\uc815\uc758\uc11c.xlsx\n\u251c\u2500\u2500 log/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u251c\u2500\u2500 QualityCheck_yyyymmdd_hhmmss.log\n\u2502 \u2502 \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 output/\n\u2502 \u251c\u2500\u2500 DataName\n\u2502 \u2502 \u2514\u2500\u2500 QC\uacb0\uacfc\uc11c_yyyymmdd_hhmmss.xlsx\n\u2514\u2500\u2500 DataName.yaml\n``` \n<br>\n\n#### \uc608\uc81c \uc2e4\ud589\n```\n#!bin/usr/python3\nfrom pathlib import Path\nfrom NexR_qc.QualityCheck import *\nDataName = \"\ud55c\uad6d\uc74c\uc2dd_sample2\" # \ubd84\ub958 Case \uc608\uc2dc\n# DataName = \"fire_smoke\"\n# DataName = \"coco8\"\n# DataName = \"AI_\uae30\ubc18_\uc544\ub3d9_\ubbf8\uc220\uc2ec\ub9ac_\uc9c4\ub2e8\uc744_\uc704\ud55c_\uadf8\ub9bc_\ub370\uc774\ud130_\uad6c\ucd95\"\nPATH = {}\nPATH.setdefault(\"ROOT\", Path.cwd())\nPATH.setdefault(\"DATA\", PATH[\"ROOT\"] / \"datasets\" / DataName)\nPATH.setdefault(\"IMAGE\", PATH[\"DATA\"])\n# PATH.setdefault(\"IMAGE\", PATH[\"DATA\"] / \"images\")\n# PATH.setdefault(\"LABEL\", PATH[\"DATA\"] / \"labels\")\n# PATH.setdefault(\"YAML\", PATH[\"ROOT\"] / \"coco8.yaml\")\n# PATH.setdefault(\"YAML\", PATH[\"ROOT\"] / \"fire_smoke.yaml\")\nlogger_save = False\n# mode = \"\uc77c\ubc18\"\nmode = \"\ubd84\ub958\"\n# mode = \"\uac1d\uccb4\ud0d0\uc9c0\"\nif __name__ == \"__main__\":\n Process = QualityCheck(DataName=DataName, DataType=\"image\", Mode=mode, PathDict=PATH, logger_save=logger_save)\n```\n\n#### Output \ud615\uc0c1\n\n##### \uc77c\ubc18\n![NexR_qc_Info_004](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_004.png)\n\n##### \ubd84\ub958\n![NexR_qc_Info_005](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_005.png)\n\n##### \uac1d\uccb4\ud0d0\uc9c0\n![NexR_qc_Info_006](https://github.com/mata-1223/NexR_qc/blob/test/img/NexR_qc_Info_006.png)\n\n",
"bugtrack_url": null,
"license": null,
"summary": "PYPI package creation written by NexR-qc",
"version": "0.0.13",
"project_urls": {
"Homepage": "https://github.com/mata-1223/NexR_qc"
},
"split_keywords": [
"qc",
" nexr",
" mata.lee",
" nexr_qc",
" python",
" python tutorial",
" pypi"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "62a68984df3ae1024c8cef73237d1d112cb578c25b988b2e2b8ce57666062d6f",
"md5": "3f7f9d092f2bf57109ca740e94837544",
"sha256": "42350adc4df982509fb322944df620c55799729097269471140b0f4c7b5cbd41"
},
"downloads": -1,
"filename": "NexR_qc-0.0.13-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3f7f9d092f2bf57109ca740e94837544",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 27941,
"upload_time": "2024-10-21T06:26:59",
"upload_time_iso_8601": "2024-10-21T06:26:59.213353Z",
"url": "https://files.pythonhosted.org/packages/62/a6/8984df3ae1024c8cef73237d1d112cb578c25b988b2e2b8ce57666062d6f/NexR_qc-0.0.13-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "51c5475f021cc769dfaf8836df806d1cc324c567441b94974c6ea152fc2f215e",
"md5": "70372d84f191173189f80b2ac16fb40b",
"sha256": "c7c17a1e9df12ee005ff3c66f0624c9176b1b59b010526a12d018ff16c1b683d"
},
"downloads": -1,
"filename": "NexR_qc-0.0.13.tar.gz",
"has_sig": false,
"md5_digest": "70372d84f191173189f80b2ac16fb40b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 24736,
"upload_time": "2024-10-21T06:27:06",
"upload_time_iso_8601": "2024-10-21T06:27:06.351166Z",
"url": "https://files.pythonhosted.org/packages/51/c5/475f021cc769dfaf8836df806d1cc324c567441b94974c6ea152fc2f215e/NexR_qc-0.0.13.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-21 06:27:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mata-1223",
"github_project": "NexR_qc",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "nexr-qc"
}