mirror of
https://github.com/norandom/project_bookworm.git
synced 2024-11-22 08:43:42 +00:00
1433 lines
348 KiB
Plaintext
1433 lines
348 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "18d62071e34b0d53",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"# This is an experiment: create vectorized embeddings out of an EverNote DB (PDF, DOCX, HTML, TXT)\n",
|
||
|
"\n",
|
||
|
"* vectorize text, html files, pdfs and docx into one vector DB, split in tables (sqlite vss)\n",
|
||
|
"* use local self-hosted embeddings (CPU computed)\n",
|
||
|
" * for sentences \n",
|
||
|
"* query a local sqlite vss vector db, use cache from LangChain (sqlite)\n",
|
||
|
"* use OpenAI API and (Ollama op-prem self-hosted) Mistral for the response processing\n",
|
||
|
"* compare with LLMware Bling \n",
|
||
|
"\n",
|
||
|
"Due to cost reasons the OpenAI embeddings don't get used. So sorry :p "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "a8c8692786d83c00",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"## Dependencies\n",
|
||
|
"\n",
|
||
|
"* Cryptography is used to handle some PDF functions here (signatures)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"id": "bb34db1ea75a1edf",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:10:31.827945Z",
|
||
|
"start_time": "2024-03-21T15:10:29.646399Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Name: cryptography\r\n",
|
||
|
"Version: 42.0.5\r\n",
|
||
|
"Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers.\r\n",
|
||
|
"Home-page: \r\n",
|
||
|
"Author: \r\n",
|
||
|
"Author-email: The Python Cryptographic Authority and individual contributors <cryptography-dev@python.org>\r\n",
|
||
|
"License: Apache-2.0 OR BSD-3-Clause\r\n",
|
||
|
"Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages\r\n",
|
||
|
"Requires: cffi\r\n",
|
||
|
"Required-by: \r\n",
|
||
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"%pip show cryptography"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "297746c807e95fbf",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"* pikepdf is used to repair some PDFs"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"id": "ebc8af0183532fc2",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:12:47.900384Z",
|
||
|
"start_time": "2024-03-21T15:12:45.782477Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Name: pikepdf\r\n",
|
||
|
"Version: 8.13.0\r\n",
|
||
|
"Summary: Read and write PDFs with Python, powered by qpdf\r\n",
|
||
|
"Home-page: \r\n",
|
||
|
"Author: \r\n",
|
||
|
"Author-email: \"James R. Barlow\" <james@purplerock.ca>\r\n",
|
||
|
"License: MPL-2.0\r\n",
|
||
|
"Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages\r\n",
|
||
|
"Requires: Deprecated, lxml, packaging, Pillow\r\n",
|
||
|
"Required-by: \r\n",
|
||
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"%pip show pikepdf"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "7c7a7f6b0db3719e",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"* pypdf with all features is needed because this DB consists of 100+ PDFs "
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"id": "779f81e2ab00f73c",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:17:00.760871Z",
|
||
|
"start_time": "2024-03-21T15:16:58.635484Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Name: pypdf\r\n",
|
||
|
"Version: 4.0.2\r\n",
|
||
|
"Summary: A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files\r\n",
|
||
|
"Home-page: \r\n",
|
||
|
"Author: \r\n",
|
||
|
"Author-email: Mathieu Fenniak <biziqe@mathieu.fenniak.net>\r\n",
|
||
|
"License: \r\n",
|
||
|
"Location: /home/marius/miniconda3/envs/llm_langchain/lib/python3.11/site-packages\r\n",
|
||
|
"Requires: \r\n",
|
||
|
"Required-by: \r\n",
|
||
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"%pip show \"pypdf\""
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "ce1350d2d6e3ed63",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"## Text extraction\n",
|
||
|
"\n",
|
||
|
"* Here the html and text data is extracted into one txt\n",
|
||
|
"* The PDF and DOCX data is extracted into another txt\n",
|
||
|
"* the texts are normalized\n",
|
||
|
"* different encodings get handled\n",
|
||
|
"* difficult files get repaired\n",
|
||
|
"* exceptions get handled (UTF-16 issues, PDF reference errors)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 40,
|
||
|
"id": "b557444b8b1d4839",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-17T15:34:05.847778Z",
|
||
|
"start_time": "2024-03-17T15:25:49.787814Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4868/4877 [04:02<00:00, 20.10it/s]\u001b[A\n",
|
||
|
"\n",
|
||
|
"Processing files: 0%| | 1/4877 [00:00<16:09, 5.03it/s]\u001b[A\n",
|
||
|
"Processing files: 5%|███████▎ | 221/4877 [00:00<00:06, 731.58it/s]\u001b[A\n",
|
||
|
"Processing files: 6%|█████████▊ | 301/4877 [00:01<00:30, 149.67it/s]\u001b[A\n",
|
||
|
"Processing files: 7%|███████████▍ | 348/4877 [00:02<00:42, 105.60it/s]\u001b[A\n",
|
||
|
"Processing files: 8%|████████████▍ | 378/4877 [00:03<00:46, 97.05it/s]\u001b[A\n",
|
||
|
"Processing files: 8%|█████████████▏ | 400/4877 [00:03<00:50, 89.38it/s]\u001b[A\n",
|
||
|
"Processing files: 9%|█████████████▊ | 417/4877 [00:04<01:14, 59.57it/s]\u001b[A\n",
|
||
|
"Processing files: 9%|██████████████▏ | 429/4877 [00:04<01:12, 61.35it/s]\u001b[A\n",
|
||
|
"Processing files: 9%|██████████████▌ | 440/4877 [00:04<01:13, 60.08it/s]\u001b[A\n",
|
||
|
"Processing files: 9%|██████████████▊ | 449/4877 [00:04<01:13, 59.90it/s]\u001b[A\n",
|
||
|
"Processing files: 9%|███████████████ | 457/4877 [00:04<01:13, 59.74it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|███████████████▎ | 465/4877 [00:05<01:23, 53.14it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|███████████████▌ | 472/4877 [00:05<01:24, 52.08it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|███████████████▊ | 478/4877 [00:05<01:23, 52.37it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|███████████████▉ | 484/4877 [00:05<01:40, 43.93it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|████████████████▏ | 490/4877 [00:05<01:34, 46.36it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|████████████████▍ | 497/4877 [00:05<01:26, 50.42it/s]\u001b[A\n",
|
||
|
"Processing files: 10%|████████████████▊ | 510/4877 [00:05<01:07, 65.13it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|█████████████████ | 518/4877 [00:06<01:12, 59.99it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|█████████████████▍ | 527/4877 [00:06<01:09, 62.34it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|█████████████████▋ | 534/4877 [00:06<01:25, 50.93it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|█████████████████▊ | 540/4877 [00:06<01:31, 47.22it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|██████████████████ | 546/4877 [00:06<01:29, 48.47it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|██████████████████▏ | 552/4877 [00:06<01:42, 42.22it/s]\u001b[A\n",
|
||
|
"Processing files: 11%|██████████████████▍ | 557/4877 [00:07<01:46, 40.47it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|██████████████████▌ | 562/4877 [00:07<01:46, 40.50it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|██████████████████▋ | 567/4877 [00:07<01:49, 39.28it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|██████████████████▉ | 572/4877 [00:07<01:55, 37.37it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|███████████████████ | 576/4877 [00:07<02:11, 32.80it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|███████████████████▏ | 580/4877 [00:07<02:31, 28.42it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|███████████████████▏ | 583/4877 [00:08<02:36, 27.52it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|███████████████████▎ | 586/4877 [00:08<02:34, 27.77it/s]\u001b[A\n",
|
||
|
"Processing files: 12%|███████████████████▍ | 589/4877 [00:08<03:01, 23.58it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|████████████████████▏ | 612/4877 [00:08<01:03, 67.43it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|████████████████████▍ | 620/4877 [00:08<01:09, 61.13it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|████████████████████▋ | 628/4877 [00:08<01:06, 63.84it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|████████████████████▉ | 636/4877 [00:08<01:23, 51.04it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|█████████████████████▏ | 643/4877 [00:09<01:22, 51.24it/s]\u001b[A\n",
|
||
|
"Processing files: 13%|█████████████████████▌ | 655/4877 [00:09<01:04, 65.29it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|█████████████████████▉ | 665/4877 [00:09<00:59, 70.60it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|██████████████████████▏ | 673/4877 [00:09<02:00, 34.76it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|██████████████████████▍ | 679/4877 [00:09<01:56, 36.01it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|██████████████████████▋ | 688/4877 [00:10<01:37, 42.97it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|██████████████████████▉ | 696/4877 [00:10<01:29, 46.48it/s]\u001b[A\n",
|
||
|
"Processing files: 14%|███████████████████████▏ | 703/4877 [00:10<01:21, 51.02it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|███████████████████████▍ | 710/4877 [00:10<01:18, 52.86it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|███████████████████████▊ | 722/4877 [00:10<01:10, 59.09it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|████████████████████████ | 729/4877 [00:10<01:23, 49.86it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|████████████████████████▎ | 735/4877 [00:10<01:25, 48.25it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|████████████████████████▍ | 741/4877 [00:11<01:27, 47.03it/s]\u001b[A\n",
|
||
|
"Processing files: 15%|████████████████████████▊ | 750/4877 [00:11<01:16, 54.12it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|█████████████████████████ | 758/4877 [00:11<01:09, 59.23it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|█████████████████████████▎ | 766/4877 [00:11<01:07, 60.58it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|█████████████████████████▌ | 773/4877 [00:11<01:29, 45.79it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|█████████████████████████▋ | 780/4877 [00:11<01:21, 50.34it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|██████████████████████████ | 788/4877 [00:11<01:12, 56.10it/s]\u001b[A\n",
|
||
|
"Processing files: 16%|██████████████████████████▌ | 804/4877 [00:12<00:54, 74.41it/s]\u001b[A\n",
|
||
|
"Processing files: 17%|██████████████████████████▊ | 812/4877 [00:12<00:55, 73.20it/s]\u001b[A\n",
|
||
|
"Processing files: 17%|███████████████████████████ | 820/4877 [00:12<00:59, 67.93it/s]\u001b[A\n",
|
||
|
"Processing files: 17%|███████████████████████████▍ | 832/4877 [00:12<00:53, 75.87it/s]\u001b[A\n",
|
||
|
"Processing files: 17%|███████████████████████████▊ | 842/4877 [00:12<00:55, 72.26it/s]\u001b[A\n",
|
||
|
"Processing files: 17%|████████████████████████████ | 850/4877 [00:12<00:55, 72.96it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|████████████████████████████▎ | 858/4877 [00:12<01:04, 62.03it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|████████████████████████████▌ | 865/4877 [00:13<01:20, 49.57it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|████████████████████████████▊ | 871/4877 [00:13<01:19, 50.31it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|████████████████████████████▉ | 877/4877 [00:13<02:17, 29.09it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|█████████████████████████████ | 882/4877 [00:13<02:15, 29.42it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|█████████████████████████████▎ | 887/4877 [00:13<02:03, 32.41it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|█████████████████████████████▍ | 892/4877 [00:14<01:51, 35.60it/s]\u001b[A\n",
|
||
|
"Processing files: 18%|█████████████████████████████▋ | 901/4877 [00:14<01:27, 45.63it/s]\u001b[A\n",
|
||
|
"Processing files: 19%|█████████████████████████████▉ | 907/4877 [00:14<01:34, 42.07it/s]\u001b[A\n",
|
||
|
"Processing files: 19%|██████████████████████████████▎ | 917/4877 [00:14<01:16, 51.43it/s]\u001b[A\n",
|
||
|
"Processing files: 19%|██████████████████████████████▍ | 923/4877 [00:14<01:20, 49.27it/s]\u001b[A\n",
|
||
|
"Processing files: 19%|██████████████████████████████▊ | 934/4877 [00:14<01:07, 58.26it/s]\u001b[A\n",
|
||
|
"Processing files: 19%|███████████████████████████████▏ | 944/4877 [00:14<01:00, 64.53it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|███████████████████████████████▍ | 952/4877 [00:14<01:03, 62.07it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|███████████████████████████████▋ | 959/4877 [00:15<01:01, 63.80it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|███████████████████████████████▉ | 966/4877 [00:15<01:01, 64.05it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|████████████████████████████████▎ | 978/4877 [00:15<00:50, 77.28it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|████████████████████████████████▌ | 986/4877 [00:15<00:54, 71.40it/s]\u001b[A\n",
|
||
|
"Processing files: 20%|████████████████████████████████▊ | 994/4877 [00:15<01:01, 62.73it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|████████████████████████████████▊ | 1001/4877 [00:15<01:07, 57.76it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|█████████████████████████████████▏ | 1011/4877 [00:15<00:57, 67.00it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|█████████████████████████████████▍ | 1019/4877 [00:16<01:10, 54.55it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|█████████████████████████████████▋ | 1028/4877 [00:16<01:04, 59.88it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|█████████████████████████████████▉ | 1035/4877 [00:16<01:03, 60.19it/s]\u001b[A\n",
|
||
|
"Processing files: 21%|██████████████████████████████████▏ | 1043/4877 [00:16<01:01, 62.77it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|██████████████████████████████████▍ | 1050/4877 [00:16<01:18, 48.61it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|██████████████████████████████████▋ | 1057/4877 [00:16<01:11, 53.12it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|██████████████████████████████████▉ | 1065/4877 [00:16<01:04, 59.10it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|███████████████████████████████████▏ | 1072/4877 [00:16<01:03, 59.49it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|███████████████████████████████████▍ | 1079/4877 [00:17<01:06, 57.53it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|███████████████████████████████████▋ | 1086/4877 [00:17<01:13, 51.77it/s]\u001b[A\n",
|
||
|
"Processing files: 22%|███████████████████████████████████▊ | 1092/4877 [00:17<01:13, 51.37it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|████████████████████████████████████ | 1101/4877 [00:17<01:03, 59.28it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|████████████████████████████████████▍ | 1111/4877 [00:17<00:54, 69.29it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|████████████████████████████████████▊ | 1121/4877 [00:17<00:48, 77.41it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|█████████████████████████████████████ | 1130/4877 [00:17<00:48, 76.92it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|█████████████████████████████████████▎ | 1138/4877 [00:17<00:55, 67.09it/s]\u001b[A\n",
|
||
|
"Processing files: 23%|█████████████████████████████████████▌ | 1146/4877 [00:18<00:59, 62.20it/s]\u001b[A\n",
|
||
|
"Processing files: 24%|█████████████████████████████████████▉ | 1155/4877 [00:18<00:56, 65.32it/s]\u001b[A\n",
|
||
|
"Processing files: 24%|██████████████████████████████████████▎ | 1168/4877 [00:18<00:51, 72.04it/s]\u001b[A\n",
|
||
|
"Processing files: 24%|██████████████████████████████████████▋ | 1179/4877 [00:18<00:46, 80.16it/s]\u001b[A\n",
|
||
|
"Processing files: 24%|██████████████████████████████████████▉ | 1188/4877 [00:18<00:45, 80.44it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|███████████████████████████████████████▎ | 1197/4877 [00:18<01:09, 52.60it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|███████████████████████████████████████▍ | 1204/4877 [00:19<01:53, 32.25it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|███████████████████████████████████████▋ | 1211/4877 [00:19<01:41, 35.97it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|███████████████████████████████████████▉ | 1217/4877 [00:19<01:53, 32.33it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|████████████████████████████████████████ | 1223/4877 [00:19<01:40, 36.22it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|████████████████████████████████████████▎ | 1228/4877 [00:20<01:41, 36.05it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|████████████████████████████████████████▍ | 1233/4877 [00:20<01:47, 33.76it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|████████████████████████████████████████▌ | 1237/4877 [00:20<01:51, 32.69it/s]\u001b[A\n",
|
||
|
"Processing files: 25%|████████████████████████████████████████▋ | 1241/4877 [00:20<02:31, 24.04it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|████████████████████████████████████████▉ | 1248/4877 [00:20<01:57, 30.88it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|█████████████████████████████████████████▏ | 1254/4877 [00:20<01:41, 35.67it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|█████████████████████████████████████████▎ | 1259/4877 [00:20<01:34, 38.20it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|█████████████████████████████████████████▍ | 1264/4877 [00:21<01:32, 39.10it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|█████████████████████████████████████████▋ | 1270/4877 [00:21<01:23, 43.01it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|█████████████████████████████████████████▉ | 1280/4877 [00:21<01:06, 54.33it/s]\u001b[A\n",
|
||
|
"Processing files: 26%|██████████████████████████████████████████▎ | 1288/4877 [00:21<01:01, 58.46it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|██████████████████████████████████████████▋ | 1300/4877 [00:21<00:51, 69.19it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|██████████████████████████████████████████▉ | 1308/4877 [00:21<00:52, 68.36it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|███████████████████████████████████████████▏ | 1315/4877 [00:21<00:58, 60.84it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|███████████████████████████████████████████▎ | 1322/4877 [00:22<01:06, 53.52it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|███████████████████████████████████████████▋ | 1333/4877 [00:22<00:55, 63.33it/s]\u001b[A\n",
|
||
|
"Processing files: 27%|███████████████████████████████████████████▉ | 1340/4877 [00:22<00:56, 62.99it/s]\u001b[A\n",
|
||
|
"Processing files: 28%|████████████████████████████████████████████▍ | 1353/4877 [00:22<00:46, 75.10it/s]\u001b[A\n",
|
||
|
"Processing files: 28%|████████████████████████████████████████████▋ | 1363/4877 [00:22<00:45, 76.91it/s]\u001b[A\n",
|
||
|
"Processing files: 28%|████████████████████████████████████████████▉ | 1371/4877 [00:22<00:45, 76.29it/s]\u001b[A\n",
|
||
|
"Processing files: 28%|█████████████████████████████████████████████▏ | 1379/4877 [00:22<00:53, 65.70it/s]\u001b[A\n",
|
||
|
"Processing files: 28%|█████████████████████████████████████████████▍ | 1386/4877 [00:23<01:12, 48.21it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|█████████████████████████████████████████████▊ | 1395/4877 [00:23<01:03, 55.12it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████ | 1403/4877 [00:23<01:08, 50.81it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████▏ | 1409/4877 [00:23<01:23, 41.51it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████▍ | 1414/4877 [00:23<01:23, 41.53it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████▌ | 1419/4877 [00:23<01:26, 40.12it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████▋ | 1424/4877 [00:23<01:31, 37.60it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|██████████████████████████████████████████████▊ | 1428/4877 [00:24<02:07, 27.00it/s]\u001b[A\n",
|
||
|
"Processing files: 29%|███████████████████████████████████████████████ | 1433/4877 [00:24<02:01, 28.36it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▏ | 1440/4877 [00:24<01:38, 34.76it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▎ | 1444/4877 [00:24<01:35, 35.82it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▌ | 1450/4877 [00:24<01:34, 36.07it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▋ | 1454/4877 [00:25<01:58, 28.94it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▊ | 1458/4877 [00:25<02:07, 26.78it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|███████████████████████████████████████████████▉ | 1461/4877 [00:25<02:18, 24.65it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|████████████████████████████████████████████████ | 1464/4877 [00:25<02:30, 22.67it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|████████████████████████████████████████████████▏ | 1467/4877 [00:25<02:37, 21.69it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|████████████████████████████████████████████████▏ | 1470/4877 [00:25<02:42, 21.03it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|████████████████████████████████████████████████▎ | 1474/4877 [00:26<02:23, 23.64it/s]\u001b[A\n",
|
||
|
"Processing files: 30%|████████████████████████████████████████████████▋ | 1484/4877 [00:26<01:28, 38.17it/s]\u001b[A\n",
|
||
|
"Processing files: 31%|████████████████████████████████████████████████▉ | 1491/4877 [00:26<01:17, 43.96it/s]\u001b[A\n",
|
||
|
"Processing files: 31%|█████████████████████████████████████████████████▏ | 1498/4877 [00:26<01:09, 48.90it/s]\u001b[A\n",
|
||
|
"Processing files: 31%|█████████████████████████████████████████████████▌ | 1512/4877 [00:26<00:48, 69.68it/s]\u001b[A\n",
|
||
|
"Processing files: 31%|█████████████████████████████████████████████████▊ | 1520/4877 [00:26<00:59, 56.57it/s]\u001b[A\n",
|
||
|
"Processing files: 31%|██████████████████████████████████████████████████▏ | 1530/4877 [00:26<00:51, 64.71it/s]\u001b[A\n",
|
||
|
"Processing files: 32%|██████████████████████████████████████████████████▍ | 1538/4877 [00:26<00:51, 64.27it/s]\u001b[A\n",
|
||
|
"Processing files: 32%|██████████████████████████████████████████████████▊ | 1550/4877 [00:27<00:43, 75.69it/s]\u001b[A\n",
|
||
|
"Processing files: 32%|███████████████████████████████████████████████████▏ | 1559/4877 [00:27<00:52, 63.56it/s]\u001b[A\n",
|
||
|
"Processing files: 32%|███████████████████████████████████████████████████▍ | 1568/4877 [00:27<00:49, 66.67it/s]\u001b[A\n",
|
||
|
"Processing files: 32%|███████████████████████████████████████████████████▋ | 1576/4877 [00:27<00:49, 66.62it/s]\u001b[A\n",
|
||
|
"Processing files: 33%|████████████████████████████████████████████████████▏ | 1589/4877 [00:27<00:41, 78.87it/s]\u001b[A\n",
|
||
|
"Processing files: 33%|████████████████████████████████████████████████████▍ | 1599/4877 [00:27<00:41, 78.68it/s]\u001b[A\n",
|
||
|
"Processing files: 33%|████████████████████████████████████████████████████▊ | 1608/4877 [00:27<00:42, 77.05it/s]\u001b[A\n",
|
||
|
"Processing files: 33%|█████████████████████████████████████████████████████ | 1616/4877 [00:28<00:50, 64.42it/s]\u001b[A\n",
|
||
|
"Processing files: 33%|█████████████████████████████████████████████████████▍ | 1627/4877 [00:28<00:48, 66.45it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|█████████████████████████████████████████████████████▌ | 1634/4877 [00:28<00:58, 55.22it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|█████████████████████████████████████████████████████▊ | 1640/4877 [00:28<01:02, 51.41it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████ | 1646/4877 [00:29<01:49, 29.63it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████▏ | 1651/4877 [00:29<02:03, 26.04it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████▎ | 1655/4877 [00:29<02:33, 21.01it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████▍ | 1658/4877 [00:29<02:27, 21.85it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████▌ | 1664/4877 [00:29<01:58, 27.16it/s]\u001b[A\n",
|
||
|
"Processing files: 34%|██████████████████████████████████████████████████████▉ | 1674/4877 [00:29<01:22, 38.69it/s]\u001b[A\n",
|
||
|
"Processing files: 35%|███████████████████████████████████████████████████████▎ | 1686/4877 [00:30<01:00, 52.93it/s]\u001b[A\n",
|
||
|
"Processing files: 35%|███████████████████████████████████████████████████████▋ | 1697/4877 [00:30<00:51, 61.43it/s]\u001b[A\n",
|
||
|
"Processing files: 35%|███████████████████████████████████████████████████████▉ | 1705/4877 [00:30<00:49, 64.31it/s]\u001b[A\n",
|
||
|
"Processing files: 35%|████████████████████████████████████████████████████████▎ | 1716/4877 [00:30<00:43, 72.88it/s]\u001b[A\n",
|
||
|
"Processing files: 35%|████████████████████████████████████████████████████████▌ | 1724/4877 [00:30<00:47, 66.66it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|████████████████████████████████████████████████████████▊ | 1732/4877 [00:30<00:52, 59.58it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|█████████████████████████████████████████████████████████ | 1740/4877 [00:30<00:50, 62.31it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|█████████████████████████████████████████████████████████▍ | 1750/4877 [00:30<00:47, 65.83it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|█████████████████████████████████████████████████████████▋ | 1757/4877 [00:31<00:47, 65.33it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|█████████████████████████████████████████████████████████▊ | 1764/4877 [00:31<00:54, 57.02it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|██████████████████████████████████████████████████████████ | 1770/4877 [00:31<00:55, 56.05it/s]\u001b[A\n",
|
||
|
"Processing files: 36%|██████████████████████████████████████████████████████████▎ | 1776/4877 [00:31<01:01, 50.62it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|██████████████████████████████████████████████████████████▍ | 1782/4877 [00:31<01:06, 46.20it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|██████████████████████████████████████████████████████████▋ | 1787/4877 [00:32<01:38, 31.34it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|██████████████████████████████████████████████████████████▊ | 1791/4877 [00:32<01:35, 32.45it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|██████████████████████████████████████████████████████████▉ | 1795/4877 [00:32<02:14, 22.91it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████ | 1799/4877 [00:32<02:25, 21.13it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████ | 1802/4877 [00:32<02:16, 22.47it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████▏ | 1806/4877 [00:33<02:17, 22.30it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████▎ | 1809/4877 [00:33<02:12, 23.14it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████▌ | 1817/4877 [00:33<01:34, 32.26it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████▋ | 1821/4877 [00:33<01:44, 29.26it/s]\u001b[A\n",
|
||
|
"Processing files: 37%|███████████████████████████████████████████████████████████▊ | 1825/4877 [00:33<01:40, 30.46it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|████████████████████████████████████████████████████████████▎ | 1837/4877 [00:33<01:12, 41.98it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|████████████████████████████████████████████████████████████▍ | 1843/4877 [00:33<01:06, 45.75it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|████████████████████████████████████████████████████████████▋ | 1848/4877 [00:33<01:05, 46.47it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|████████████████████████████████████████████████████████████▊ | 1853/4877 [00:34<01:17, 39.26it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|████████████████████████████████████████████████████████████▉ | 1858/4877 [00:34<01:19, 37.89it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|█████████████████████████████████████████████████████████████ | 1862/4877 [00:34<01:24, 35.72it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|█████████████████████████████████████████████████████████████▏ | 1866/4877 [00:34<01:33, 32.09it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|█████████████████████████████████████████████████████████████▎ | 1870/4877 [00:34<01:50, 27.24it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|█████████████████████████████████████████████████████████████▍ | 1873/4877 [00:34<02:07, 23.62it/s]\u001b[A\n",
|
||
|
"Processing files: 38%|█████████████████████████████████████████████████████████████▌ | 1876/4877 [00:35<02:01, 24.66it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|█████████████████████████████████████████████████████████████▋ | 1882/4877 [00:35<01:37, 30.80it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|██████████████████████████████████████████████████████████████ | 1892/4877 [00:35<01:04, 46.25it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|██████████████████████████████████████████████████████████████▎ | 1901/4877 [00:35<00:53, 56.07it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|██████████████████████████████████████████████████████████████▌ | 1908/4877 [00:35<00:52, 56.30it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|██████████████████████████████████████████████████████████████▊ | 1915/4877 [00:35<00:54, 54.27it/s]\u001b[A\n",
|
||
|
"Processing files: 39%|███████████████████████████████████████████████████████████████ | 1921/4877 [00:35<00:56, 52.77it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|███████████████████████████████████████████████████████████████▏ | 1927/4877 [00:35<01:01, 48.00it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|███████████████████████████████████████████████████████████████▌ | 1937/4877 [00:36<00:51, 57.28it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|███████████████████████████████████████████████████████████████▋ | 1943/4877 [00:36<00:51, 57.05it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|███████████████████████████████████████████████████████████████▉ | 1949/4877 [00:36<00:58, 50.29it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|████████████████████████████████████████████████████████████████▏ | 1955/4877 [00:36<00:57, 50.95it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|████████████████████████████████████████████████████████████████▎ | 1961/4877 [00:36<01:00, 47.99it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|████████████████████████████████████████████████████████████████▍ | 1966/4877 [00:36<01:07, 43.36it/s]\u001b[A\n",
|
||
|
"Processing files: 40%|████████████████████████████████████████████████████████████████▋ | 1971/4877 [00:36<01:20, 36.12it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|████████████████████████████████████████████████████████████████▉ | 1978/4877 [00:37<01:10, 41.09it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|█████████████████████████████████████████████████████████████████ | 1983/4877 [00:37<01:11, 40.68it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|█████████████████████████████████████████████████████████████████▏ | 1988/4877 [00:37<01:30, 32.09it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|█████████████████████████████████████████████████████████████████▎ | 1992/4877 [00:37<01:52, 25.63it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|█████████████████████████████████████████████████████████████████▌ | 1997/4877 [00:37<01:39, 28.86it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|█████████████████████████████████████████████████████████████████▋ | 2004/4877 [00:37<01:18, 36.37it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|██████████████████████████████████████████████████████████████████ | 2012/4877 [00:37<01:03, 45.22it/s]\u001b[A\n",
|
||
|
"Processing files: 41%|██████████████████████████████████████████████████████████████████▎ | 2022/4877 [00:38<00:49, 57.77it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|██████████████████████████████████████████████████████████████████▊ | 2035/4877 [00:38<00:41, 68.86it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|███████████████████████████████████████████████████████████████████ | 2043/4877 [00:38<00:46, 60.83it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|███████████████████████████████████████████████████████████████████▎ | 2050/4877 [00:38<00:46, 61.24it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|███████████████████████████████████████████████████████████████████▍ | 2057/4877 [00:38<00:45, 62.20it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|███████████████████████████████████████████████████████████████████▋ | 2064/4877 [00:39<01:15, 37.48it/s]\u001b[A\n",
|
||
|
"Processing files: 42%|███████████████████████████████████████████████████████████████████▉ | 2070/4877 [00:39<01:21, 34.36it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|████████████████████████████████████████████████████████████████████ | 2075/4877 [00:39<01:19, 35.32it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|████████████████████████████████████████████████████████████████████▎ | 2082/4877 [00:39<01:11, 39.16it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|████████████████████████████████████████████████████████████████████▋ | 2092/4877 [00:39<00:55, 50.48it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|████████████████████████████████████████████████████████████████████▉ | 2100/4877 [00:39<00:50, 55.51it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|█████████████████████████████████████████████████████████████████████▏ | 2110/4877 [00:39<00:43, 63.74it/s]\u001b[A\n",
|
||
|
"Processing files: 43%|█████████████████████████████████████████████████████████████████████▌ | 2119/4877 [00:39<00:39, 69.68it/s]\u001b[A\n",
|
||
|
"Processing files: 44%|█████████████████████████████████████████████████████████████████████▊ | 2127/4877 [00:40<00:56, 48.98it/s]\u001b[A\n",
|
||
|
"Processing files: 44%|██████████████████████████████████████████████████████████████████████ | 2134/4877 [00:40<00:51, 53.13it/s]\u001b[A\n",
|
||
|
"Processing files: 44%|██████████████████████████████████████████████████████████████████████▏ | 2141/4877 [00:40<00:56, 48.60it/s]\u001b[A\n",
|
||
|
"Processing files: 44%|██████████████████████████████████████████████████████████████████████▌ | 2150/4877 [00:40<00:48, 56.70it/s]\u001b[A\n",
|
||
|
"Processing files: 44%|██████████████████████████████████████████████████████████████████████▉ | 2164/4877 [00:40<00:36, 73.84it/s]\u001b[A\n",
|
||
|
"Processing files: 45%|███████████████████████████████████████████████████████████████████████▍ | 2178/4877 [00:40<00:32, 84.30it/s]\u001b[A\n",
|
||
|
"Processing files: 45%|███████████████████████████████████████████████████████████████████████▊ | 2188/4877 [00:40<00:34, 77.53it/s]\u001b[A\n",
|
||
|
"Processing files: 45%|████████████████████████████████████████████████████████████████████████ | 2197/4877 [00:41<00:35, 75.97it/s]\u001b[A\n",
|
||
|
"Processing files: 45%|████████████████████████████████████████████████████████████████████████▎ | 2206/4877 [00:41<00:35, 74.56it/s]\u001b[A\n",
|
||
|
"Processing files: 45%|████████████████████████████████████████████████████████████████████████▋ | 2214/4877 [00:41<00:39, 66.69it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|████████████████████████████████████████████████████████████████████████▊ | 2221/4877 [00:41<00:39, 66.91it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|█████████████████████████████████████████████████████████████████████████ | 2228/4877 [00:41<00:42, 62.19it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|█████████████████████████████████████████████████████████████████████████▎ | 2235/4877 [00:41<00:43, 61.30it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|█████████████████████████████████████████████████████████████████████████▊ | 2248/4877 [00:41<00:33, 77.70it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|██████████████████████████████████████████████████████████████████████████ | 2258/4877 [00:41<00:31, 82.44it/s]\u001b[A\n",
|
||
|
"Processing files: 46%|██████████████████████████████████████████████████████████████████████████▎ | 2267/4877 [00:42<00:39, 66.16it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|██████████████████████████████████████████████████████████████████████████▋ | 2275/4877 [00:42<00:43, 60.00it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|██████████████████████████████████████████████████████████████████████████▊ | 2282/4877 [00:42<01:00, 43.00it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|███████████████████████████████████████████████████████████████████████████ | 2288/4877 [00:42<01:00, 43.00it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|███████████████████████████████████████████████████████████████████████████▏ | 2293/4877 [00:43<01:34, 27.46it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|███████████████████████████████████████████████████████████████████████████▍ | 2300/4877 [00:43<01:17, 33.11it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|███████████████████████████████████████████████████████████████████████████▋ | 2308/4877 [00:43<01:03, 40.50it/s]\u001b[A\n",
|
||
|
"Processing files: 47%|███████████████████████████████████████████████████████████████████████████▉ | 2315/4877 [00:43<00:56, 45.56it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|████████████████████████████████████████████████████████████████████████████▏ | 2321/4877 [00:43<01:02, 40.93it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|████████████████████████████████████████████████████████████████████████████▍ | 2331/4877 [00:43<00:48, 52.78it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|████████████████████████████████████████████████████████████████████████████▋ | 2338/4877 [00:43<00:46, 54.25it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|█████████████████████████████████████████████████████████████████████████████ | 2349/4877 [00:44<00:38, 65.44it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|█████████████████████████████████████████████████████████████████████████████▎ | 2357/4877 [00:44<00:44, 56.47it/s]\u001b[A\n",
|
||
|
"Processing files: 48%|█████████████████████████████████████████████████████████████████████████████▌ | 2365/4877 [00:44<00:41, 60.46it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|█████████████████████████████████████████████████████████████████████████████▊ | 2372/4877 [00:44<00:51, 48.86it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|██████████████████████████████████████████████████████████████████████████████ | 2378/4877 [00:44<00:53, 46.32it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|██████████████████████████████████████████████████████████████████████████████▏ | 2385/4877 [00:44<00:49, 50.68it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|██████████████████████████████████████████████████████████████████████████████▌ | 2394/4877 [00:44<00:45, 54.87it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|██████████████████████████████████████████████████████████████████████████████▋ | 2400/4877 [00:45<01:05, 37.96it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|██████████████████████████████████████████████████████████████████████████████▉ | 2405/4877 [00:45<01:02, 39.45it/s]\u001b[A\n",
|
||
|
"Processing files: 49%|███████████████████████████████████████████████████████████████████████████████ | 2410/4877 [00:45<01:01, 40.42it/s]\u001b[A\n",
|
||
|
"Processing files: 50%|███████████████████████████████████████████████████████████████████████████████▏ | 2415/4877 [00:46<03:26, 11.95it/s]\u001b[A\n",
|
||
|
"Processing files: 50%|███████████████████████████████████████████████████████████████████████████████▍ | 2423/4877 [00:46<02:21, 17.32it/s]\u001b[A\n",
|
||
|
"Processing files: 50%|███████████████████████████████████████████████████████████████████████████████▊ | 2431/4877 [00:46<01:43, 23.53it/s]\u001b[A\n",
|
||
|
"Processing files: 50%|███████████████████████████████████████████████████████████████████████████████▉ | 2438/4877 [00:47<01:24, 28.89it/s]\u001b[A\n",
|
||
|
"Processing files: 50%|████████████████████████████████████████████████████████████████████████████████▎ | 2449/4877 [00:47<00:59, 40.65it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|████████████████████████████████████████████████████████████████████████████████▊ | 2463/4877 [00:47<00:42, 57.21it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|█████████████████████████████████████████████████████████████████████████████████ | 2472/4877 [00:47<00:41, 58.55it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|█████████████████████████████████████████████████████████████████████████████████▎ | 2480/4877 [00:47<00:39, 60.15it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|█████████████████████████████████████████████████████████████████████████████████▌ | 2488/4877 [00:47<00:38, 61.60it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|█████████████████████████████████████████████████████████████████████████████████▉ | 2496/4877 [00:47<00:40, 59.09it/s]\u001b[A\n",
|
||
|
"Processing files: 51%|██████████████████████████████████████████████████████████████████████████████████ | 2503/4877 [00:47<00:39, 60.83it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|██████████████████████████████████████████████████████████████████████████████████▍ | 2512/4877 [00:48<00:36, 65.61it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|██████████████████████████████████████████████████████████████████████████████████▋ | 2520/4877 [00:48<00:35, 66.93it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|██████████████████████████████████████████████████████████████████████████████████▉ | 2528/4877 [00:48<00:34, 67.38it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|███████████████████████████████████████████████████████████████████████████████████▏ | 2535/4877 [00:48<00:34, 66.97it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|███████████████████████████████████████████████████████████████████████████████████▍ | 2544/4877 [00:48<00:33, 69.41it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|███████████████████████████████████████████████████████████████████████████████████▋ | 2552/4877 [00:48<00:37, 61.81it/s]\u001b[A\n",
|
||
|
"Processing files: 52%|███████████████████████████████████████████████████████████████████████████████████▉ | 2559/4877 [00:48<00:41, 56.48it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|████████████████████████████████████████████████████████████████████████████████████▏ | 2567/4877 [00:48<00:41, 55.52it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|████████████████████████████████████████████████████████████████████████████████████▍ | 2573/4877 [00:49<00:45, 51.10it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|████████████████████████████████████████████████████████████████████████████████████▌ | 2579/4877 [00:49<00:52, 43.79it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|████████████████████████████████████████████████████████████████████████████████████▊ | 2585/4877 [00:49<00:51, 44.53it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|████████████████████████████████████████████████████████████████████████████████████▉ | 2590/4877 [00:49<00:57, 39.51it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|█████████████████████████████████████████████████████████████████████████████████████▏ | 2595/4877 [00:49<01:02, 36.29it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|█████████████████████████████████████████████████████████████████████████████████████▎ | 2601/4877 [00:49<00:56, 40.29it/s]\u001b[A\n",
|
||
|
"Processing files: 53%|█████████████████████████████████████████████████████████████████████████████████████▍ | 2606/4877 [00:50<01:23, 27.22it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|█████████████████████████████████████████████████████████████████████████████████████▋ | 2610/4877 [00:50<01:44, 21.62it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|█████████████████████████████████████████████████████████████████████████████████████▋ | 2613/4877 [00:50<01:45, 21.44it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|█████████████████████████████████████████████████████████████████████████████████████▊ | 2617/4877 [00:50<01:42, 22.07it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|█████████████████████████████████████████████████████████████████████████████████████▉ | 2621/4877 [00:50<01:29, 25.15it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████ | 2625/4877 [00:51<01:40, 22.47it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▎ | 2630/4877 [00:51<01:29, 25.01it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▍ | 2633/4877 [00:51<02:10, 17.21it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▌ | 2639/4877 [00:51<01:42, 21.78it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▋ | 2643/4877 [00:52<01:38, 22.70it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▊ | 2646/4877 [00:52<01:40, 22.28it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|██████████████████████████████████████████████████████████████████████████████████████▉ | 2649/4877 [00:52<01:51, 20.03it/s]\u001b[A\n",
|
||
|
"Processing files: 54%|███████████████████████████████████████████████████████████████████████████████████████ | 2652/4877 [00:52<01:47, 20.72it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|███████████████████████████████████████████████████████████████████████████████████████▏ | 2659/4877 [00:52<01:25, 26.09it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|███████████████████████████████████████████████████████████████████████████████████████▍ | 2667/4877 [00:52<01:02, 35.22it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|███████████████████████████████████████████████████████████████████████████████████████▋ | 2671/4877 [00:52<01:03, 35.01it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|███████████████████████████████████████████████████████████████████████████████████████▉ | 2679/4877 [00:53<00:49, 44.20it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|████████████████████████████████████████████████████████████████████████████████████████ | 2684/4877 [00:53<00:51, 42.67it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|████████████████████████████████████████████████████████████████████████████████████████▎ | 2691/4877 [00:53<00:45, 48.57it/s]\u001b[A\n",
|
||
|
"Processing files: 55%|████████████████████████████████████████████████████████████████████████████████████████▍ | 2697/4877 [00:53<00:45, 47.62it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|████████████████████████████████████████████████████████████████████████████████████████▉ | 2710/4877 [00:53<00:32, 67.02it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|█████████████████████████████████████████████████████████████████████████████████████████▏ | 2718/4877 [00:53<00:50, 42.46it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|█████████████████████████████████████████████████████████████████████████████████████████▎ | 2724/4877 [00:53<00:48, 44.40it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|█████████████████████████████████████████████████████████████████████████████████████████▊ | 2736/4877 [00:54<00:36, 59.21it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|██████████████████████████████████████████████████████████████████████████████████████████ | 2744/4877 [00:54<00:43, 49.30it/s]\u001b[A\n",
|
||
|
"Processing files: 56%|██████████████████████████████████████████████████████████████████████████████████████████▎ | 2751/4877 [00:54<00:57, 36.92it/s]\u001b[A\n",
|
||
|
"Processing files: 57%|██████████████████████████████████████████████████████████████████████████████████████████▌ | 2760/4877 [00:54<00:47, 44.60it/s]\u001b[A\n",
|
||
|
"Processing files: 57%|██████████████████████████████████████████████████████████████████████████████████████████▉ | 2771/4877 [00:54<00:37, 55.99it/s]\u001b[A\n",
|
||
|
"Processing files: 57%|███████████████████████████████████████████████████████████████████████████████████████████▏ | 2781/4877 [00:54<00:34, 60.94it/s]\u001b[A\n",
|
||
|
"Processing files: 57%|███████████████████████████████████████████████████████████████████████████████████████████▌ | 2791/4877 [00:55<00:30, 67.42it/s]\u001b[A\n",
|
||
|
"Processing files: 57%|███████████████████████████████████████████████████████████████████████████████████████████▊ | 2799/4877 [00:55<00:31, 66.33it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|████████████████████████████████████████████████████████████████████████████████████████████ | 2807/4877 [00:55<00:30, 67.29it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|████████████████████████████████████████████████████████████████████████████████████████████▍ | 2816/4877 [00:55<00:30, 68.59it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|████████████████████████████████████████████████████████████████████████████████████████████▋ | 2824/4877 [00:55<00:40, 51.28it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|████████████████████████████████████████████████████████████████████████████████████████████▉ | 2834/4877 [00:55<00:36, 56.31it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|█████████████████████████████████████████████████████████████████████████████████████████████▏ | 2841/4877 [00:56<00:51, 39.57it/s]\u001b[A\n",
|
||
|
"Processing files: 58%|█████████████████████████████████████████████████████████████████████████████████████████████▌ | 2850/4877 [00:56<00:43, 46.57it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|█████████████████████████████████████████████████████████████████████████████████████████████▋ | 2857/4877 [00:56<00:39, 50.98it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|█████████████████████████████████████████████████████████████████████████████████████████████▉ | 2864/4877 [00:56<00:50, 40.17it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|██████████████████████████████████████████████████████████████████████████████████████████████▏ | 2870/4877 [00:56<00:46, 43.09it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|██████████████████████████████████████████████████████████████████████████████████████████████▎ | 2876/4877 [00:56<00:49, 40.45it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|██████████████████████████████████████████████████████████████████████████████████████████████▋ | 2886/4877 [00:57<00:38, 51.58it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|██████████████████████████████████████████████████████████████████████████████████████████████▉ | 2893/4877 [00:57<00:39, 50.15it/s]\u001b[A\n",
|
||
|
"Processing files: 59%|███████████████████████████████████████████████████████████████████████████████████████████████ | 2899/4877 [00:57<00:48, 40.81it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|███████████████████████████████████████████████████████████████████████████████████████████████▎ | 2906/4877 [00:57<00:43, 45.38it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|███████████████████████████████████████████████████████████████████████████████████████████████▌ | 2913/4877 [00:57<00:39, 50.11it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|███████████████████████████████████████████████████████████████████████████████████████████████▊ | 2919/4877 [00:57<00:39, 49.92it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|███████████████████████████████████████████████████████████████████████████████████████████████▉ | 2925/4877 [00:57<00:40, 47.94it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|████████████████████████████████████████████████████████████████████████████████████████████████▏ | 2931/4877 [00:58<00:52, 37.38it/s]\u001b[A\n",
|
||
|
"Processing files: 60%|████████████████████████████████████████████████████████████████████████████████████████████████▌ | 2943/4877 [00:58<00:36, 52.53it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|████████████████████████████████████████████████████████████████████████████████████████████████▊ | 2952/4877 [00:58<00:32, 58.79it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████ | 2959/4877 [00:58<00:34, 55.31it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████▎ | 2966/4877 [00:58<00:42, 44.77it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████▌ | 2972/4877 [00:59<00:46, 41.26it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████▋ | 2977/4877 [00:59<00:59, 32.08it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████▊ | 2981/4877 [00:59<01:07, 28.10it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|█████████████████████████████████████████████████████████████████████████████████████████████████▉ | 2985/4877 [00:59<01:09, 27.18it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|██████████████████████████████████████████████████████████████████████████████████████████████████ | 2990/4877 [00:59<01:00, 31.32it/s]\u001b[A\n",
|
||
|
"Processing files: 61%|██████████████████████████████████████████████████████████████████████████████████████████████████▎ | 2997/4877 [00:59<00:48, 38.96it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|██████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3004/4877 [00:59<00:41, 44.92it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|██████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3010/4877 [01:00<00:47, 39.57it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|██████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3015/4877 [01:00<00:46, 40.19it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|███████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3026/4877 [01:00<00:33, 55.80it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|███████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3035/4877 [01:00<00:29, 62.35it/s]\u001b[A\n",
|
||
|
"Processing files: 62%|███████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3042/4877 [01:00<00:32, 56.07it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|████████████████████████████████████████████████████████████████████████████████████████████████████ | 3049/4877 [01:00<00:32, 57.00it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3056/4877 [01:00<00:30, 59.29it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3065/4877 [01:00<00:30, 59.39it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3072/4877 [01:01<00:34, 52.86it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|█████████████████████████████████████████████████████████████████████████████████████████████████████ | 3082/4877 [01:01<00:29, 61.06it/s]\u001b[A\n",
|
||
|
"Processing files: 63%|█████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3093/4877 [01:01<00:25, 70.27it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|█████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3101/4877 [01:01<00:24, 71.88it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|█████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3109/4877 [01:01<00:24, 71.52it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3117/4877 [01:01<00:24, 73.27it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3125/4877 [01:01<00:29, 59.03it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3132/4877 [01:02<00:31, 56.11it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|██████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3138/4877 [01:02<00:33, 51.69it/s]\u001b[A\n",
|
||
|
"Processing files: 64%|███████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3144/4877 [01:02<00:40, 42.55it/s]\u001b[A\n",
|
||
|
"Processing files: 65%|███████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3151/4877 [01:02<00:38, 44.87it/s]\u001b[A\n",
|
||
|
"Processing files: 65%|███████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3165/4877 [01:02<00:26, 63.44it/s]\u001b[A\n",
|
||
|
"Processing files: 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3176/4877 [01:02<00:24, 70.74it/s]\u001b[A\n",
|
||
|
"Processing files: 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3185/4877 [01:02<00:24, 69.97it/s]\u001b[A\n",
|
||
|
"Processing files: 65%|████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3193/4877 [01:03<00:25, 66.42it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3202/4877 [01:03<00:23, 71.42it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3210/4877 [01:03<00:25, 64.16it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3217/4877 [01:03<00:31, 52.18it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3223/4877 [01:03<00:46, 35.52it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|█████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3229/4877 [01:03<00:41, 39.37it/s]\u001b[A\n",
|
||
|
"Processing files: 66%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3241/4877 [01:04<00:30, 53.55it/s]\u001b[A\n",
|
||
|
"Processing files: 67%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3254/4877 [01:04<00:23, 68.02it/s]\u001b[A\n",
|
||
|
"Processing files: 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3263/4877 [01:04<00:23, 70.01it/s]\u001b[A\n",
|
||
|
"Processing files: 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3271/4877 [01:04<00:32, 48.80it/s]\u001b[A\n",
|
||
|
"Processing files: 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3279/4877 [01:04<00:29, 53.59it/s]\u001b[A\n",
|
||
|
"Processing files: 67%|███████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3286/4877 [01:04<00:28, 56.55it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3296/4877 [01:04<00:24, 65.30it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3305/4877 [01:05<00:22, 68.40it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3313/4877 [01:05<00:22, 70.71it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3321/4877 [01:05<00:27, 55.90it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3328/4877 [01:05<00:37, 40.92it/s]\u001b[A\n",
|
||
|
"Processing files: 68%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3334/4877 [01:06<00:53, 28.86it/s]\u001b[A\n",
|
||
|
"Processing files: 69%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3343/4877 [01:06<00:40, 37.55it/s]\u001b[A\n",
|
||
|
"Processing files: 69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3357/4877 [01:06<00:28, 54.22it/s]\u001b[A\n",
|
||
|
"Processing files: 69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3367/4877 [01:06<00:24, 62.64it/s]\u001b[A\n",
|
||
|
"Processing files: 69%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3377/4877 [01:06<00:22, 66.00it/s]\u001b[A\n",
|
||
|
"Processing files: 69%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3387/4877 [01:06<00:20, 72.89it/s]\u001b[A\n",
|
||
|
"Processing files: 70%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3398/4877 [01:06<00:19, 76.09it/s]\u001b[A\n",
|
||
|
"Processing files: 70%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3407/4877 [01:07<00:35, 41.29it/s]\u001b[A\n",
|
||
|
"Processing files: 70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3415/4877 [01:07<00:31, 45.93it/s]\u001b[A\n",
|
||
|
"Processing files: 70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3428/4877 [01:07<00:25, 56.90it/s]\u001b[A\n",
|
||
|
"Processing files: 70%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3436/4877 [01:07<00:33, 43.56it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3442/4877 [01:08<00:34, 41.44it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3450/4877 [01:08<00:30, 47.49it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3456/4877 [01:08<00:37, 38.09it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3461/4877 [01:08<00:38, 37.05it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3466/4877 [01:08<00:36, 38.21it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3471/4877 [01:08<00:35, 39.63it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3476/4877 [01:08<00:41, 33.86it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3480/4877 [01:09<00:41, 33.89it/s]\u001b[A\n",
|
||
|
"Processing files: 71%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3486/4877 [01:09<00:36, 38.05it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3491/4877 [01:09<00:35, 38.51it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3497/4877 [01:09<00:33, 41.61it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3504/4877 [01:09<00:28, 47.61it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3509/4877 [01:09<00:32, 41.57it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3516/4877 [01:09<00:28, 46.94it/s]\u001b[A\n",
|
||
|
"Processing files: 72%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3533/4877 [01:09<00:18, 71.33it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3541/4877 [01:10<00:18, 72.63it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3549/4877 [01:10<00:18, 72.75it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3560/4877 [01:10<00:16, 81.78it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3569/4877 [01:10<00:17, 74.52it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3577/4877 [01:10<00:19, 65.90it/s]\u001b[A\n",
|
||
|
"Processing files: 73%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3584/4877 [01:10<00:24, 53.22it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3590/4877 [01:10<00:27, 47.13it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3597/4877 [01:11<00:25, 50.56it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3603/4877 [01:11<00:29, 43.26it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3612/4877 [01:11<00:25, 49.21it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3619/4877 [01:11<00:30, 41.01it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3624/4877 [01:11<00:32, 38.41it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3629/4877 [01:12<00:43, 28.93it/s]\u001b[A\n",
|
||
|
"Processing files: 74%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3633/4877 [01:12<00:43, 28.32it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3637/4877 [01:12<00:40, 30.33it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3641/4877 [01:12<00:40, 30.59it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3645/4877 [01:12<00:44, 27.44it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3653/4877 [01:12<00:32, 38.11it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3659/4877 [01:12<00:29, 40.89it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3664/4877 [01:13<00:36, 33.42it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3668/4877 [01:13<00:35, 34.45it/s]\u001b[A\n",
|
||
|
"Processing files: 75%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3677/4877 [01:13<00:25, 46.32it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3688/4877 [01:13<00:23, 51.56it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 3700/4877 [01:13<00:19, 60.77it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3708/4877 [01:13<00:17, 65.09it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3715/4877 [01:13<00:17, 65.78it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3723/4877 [01:14<00:19, 59.34it/s]\u001b[A\n",
|
||
|
"Processing files: 76%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3730/4877 [01:14<00:20, 57.08it/s]\u001b[A\n",
|
||
|
"Processing files: 77%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3736/4877 [01:14<00:20, 55.68it/s]\u001b[A\n",
|
||
|
"Processing files: 77%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3744/4877 [01:14<00:18, 60.10it/s]\u001b[A\n",
|
||
|
"Processing files: 77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3753/4877 [01:14<00:18, 62.12it/s]\u001b[A\n",
|
||
|
"Processing files: 77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3765/4877 [01:14<00:15, 74.08it/s]\u001b[A\n",
|
||
|
"Processing files: 77%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3774/4877 [01:14<00:15, 69.54it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3782/4877 [01:14<00:16, 66.79it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3790/4877 [01:15<00:16, 65.00it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3797/4877 [01:15<00:17, 60.76it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3809/4877 [01:15<00:14, 74.13it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3818/4877 [01:15<00:14, 72.79it/s]\u001b[A\n",
|
||
|
"Processing files: 78%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3827/4877 [01:15<00:13, 76.95it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3837/4877 [01:15<00:12, 81.41it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3847/4877 [01:15<00:12, 80.45it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3856/4877 [01:15<00:13, 74.25it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3864/4877 [01:16<00:15, 66.42it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3871/4877 [01:16<00:23, 43.61it/s]\u001b[A\n",
|
||
|
"Processing files: 79%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3877/4877 [01:16<00:22, 44.16it/s]\u001b[A\n",
|
||
|
"Processing files: 80%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3889/4877 [01:16<00:17, 57.98it/s]\u001b[A\n",
|
||
|
"Processing files: 80%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3896/4877 [01:16<00:16, 59.50it/s]\u001b[A\n",
|
||
|
"Processing files: 80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3903/4877 [01:16<00:19, 50.56it/s]\u001b[A\n",
|
||
|
"Processing files: 80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3909/4877 [01:17<00:19, 50.91it/s]\u001b[A\n",
|
||
|
"Processing files: 80%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3920/4877 [01:17<00:15, 60.35it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 3927/4877 [01:17<00:17, 53.46it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 3935/4877 [01:17<00:16, 57.04it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 3942/4877 [01:17<00:15, 58.79it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3954/4877 [01:17<00:13, 70.97it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 3962/4877 [01:17<00:15, 59.37it/s]\u001b[A\n",
|
||
|
"Processing files: 81%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3969/4877 [01:18<00:16, 54.87it/s]\u001b[A\n",
|
||
|
"Processing files: 82%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 3978/4877 [01:18<00:14, 62.21it/s]\u001b[A\n",
|
||
|
"Processing files: 82%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 3985/4877 [01:18<00:15, 59.21it/s]\u001b[A\n",
|
||
|
"Processing files: 82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 3997/4877 [01:18<00:13, 67.54it/s]\u001b[A\n",
|
||
|
"Processing files: 82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4005/4877 [01:18<00:12, 68.06it/s]\u001b[A\n",
|
||
|
"Processing files: 82%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4017/4877 [01:18<00:10, 79.89it/s]\u001b[A\n",
|
||
|
"Processing files: 83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4026/4877 [01:18<00:10, 82.11it/s]\u001b[A\n",
|
||
|
"Processing files: 83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4038/4877 [01:18<00:09, 87.58it/s]\u001b[A\n",
|
||
|
"Processing files: 83%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4052/4877 [01:18<00:08, 92.68it/s]\u001b[A\n",
|
||
|
"Processing files: 83%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4062/4877 [01:19<00:08, 93.45it/s]\u001b[A\n",
|
||
|
"Processing files: 83%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4072/4877 [01:19<00:10, 73.42it/s]\u001b[A\n",
|
||
|
"Processing files: 84%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4081/4877 [01:19<00:12, 62.43it/s]\u001b[A\n",
|
||
|
"Processing files: 84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4089/4877 [01:19<00:12, 65.25it/s]\u001b[A\n",
|
||
|
"Processing files: 84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4097/4877 [01:19<00:12, 60.43it/s]\u001b[A\n",
|
||
|
"Processing files: 84%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4106/4877 [01:19<00:11, 66.33it/s]\u001b[A\n",
|
||
|
"Processing files: 84%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4115/4877 [01:19<00:10, 70.09it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4125/4877 [01:20<00:10, 74.37it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4133/4877 [01:20<00:10, 71.00it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4141/4877 [01:20<00:15, 46.67it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4147/4877 [01:20<00:14, 49.00it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4155/4877 [01:20<00:13, 55.13it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4162/4877 [01:20<00:15, 46.99it/s]\u001b[A\n",
|
||
|
"Processing files: 85%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4169/4877 [01:21<00:13, 51.71it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4175/4877 [01:21<00:13, 51.51it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4181/4877 [01:21<00:13, 53.27it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4188/4877 [01:21<00:12, 53.04it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4194/4877 [01:21<00:13, 48.82it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4200/4877 [01:21<00:14, 47.73it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4205/4877 [01:21<00:14, 45.10it/s]\u001b[A\n",
|
||
|
"Processing files: 86%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4213/4877 [01:21<00:13, 50.33it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4219/4877 [01:22<00:13, 50.39it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4225/4877 [01:22<00:12, 52.12it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4231/4877 [01:22<00:12, 53.16it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4238/4877 [01:22<00:13, 46.93it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4243/4877 [01:22<00:15, 40.90it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4253/4877 [01:22<00:12, 50.13it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4259/4877 [01:23<00:15, 40.54it/s]\u001b[A\n",
|
||
|
"Processing files: 87%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4264/4877 [01:23<00:16, 37.16it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4269/4877 [01:23<00:15, 39.52it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4274/4877 [01:23<00:15, 38.76it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4286/4877 [01:23<00:10, 55.81it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4293/4877 [01:23<00:12, 45.66it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4299/4877 [01:23<00:15, 38.10it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4304/4877 [01:24<00:14, 39.54it/s]\u001b[A\n",
|
||
|
"Processing files: 88%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4309/4877 [01:24<00:13, 40.89it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4322/4877 [01:24<00:09, 59.74it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4331/4877 [01:24<00:08, 66.52it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4339/4877 [01:24<00:07, 67.29it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4347/4877 [01:24<00:07, 67.23it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4356/4877 [01:24<00:07, 66.35it/s]\u001b[A\n",
|
||
|
"Processing files: 89%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4363/4877 [01:25<00:09, 56.20it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4370/4877 [01:25<00:08, 56.37it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4376/4877 [01:25<00:09, 54.55it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4382/4877 [01:25<00:10, 47.58it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4388/4877 [01:25<00:09, 50.01it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4394/4877 [01:25<00:11, 42.43it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4402/4877 [01:25<00:09, 50.23it/s]\u001b[A\n",
|
||
|
"Processing files: 90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4411/4877 [01:26<00:12, 38.18it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4416/4877 [01:27<00:28, 16.28it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4424/4877 [01:27<00:20, 21.93it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4436/4877 [01:27<00:14, 31.38it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4444/4877 [01:27<00:11, 36.24it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4450/4877 [01:27<00:14, 30.46it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4455/4877 [01:27<00:12, 33.17it/s]\u001b[A\n",
|
||
|
"Processing files: 91%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4460/4877 [01:28<00:13, 30.88it/s]\u001b[A\n",
|
||
|
"Processing files: 92%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4471/4877 [01:28<00:09, 44.17it/s]\u001b[A\n",
|
||
|
"Processing files: 92%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4477/4877 [01:28<00:10, 38.92it/s]\u001b[A\n",
|
||
|
"Processing files: 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4485/4877 [01:28<00:08, 46.59it/s]\u001b[A\n",
|
||
|
"Processing files: 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4491/4877 [01:28<00:08, 47.89it/s]\u001b[A\n",
|
||
|
"Processing files: 92%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4508/4877 [01:28<00:04, 75.12it/s]\u001b[A\n",
|
||
|
"Processing files: 93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4517/4877 [01:28<00:05, 63.65it/s]\u001b[A\n",
|
||
|
"Processing files: 93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4525/4877 [01:29<00:05, 64.78it/s]\u001b[A\n",
|
||
|
"Processing files: 93%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4534/4877 [01:29<00:05, 68.25it/s]\u001b[A\n",
|
||
|
"Processing files: 93%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4548/4877 [01:29<00:03, 85.29it/s]\u001b[A\n",
|
||
|
"Processing files: 93%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4558/4877 [01:29<00:03, 83.73it/s]\u001b[A\n",
|
||
|
"Processing files: 94%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4570/4877 [01:29<00:03, 90.24it/s]\u001b[A\n",
|
||
|
"Processing files: 94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4580/4877 [01:29<00:03, 86.85it/s]\u001b[A\n",
|
||
|
"Processing files: 94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4590/4877 [01:29<00:03, 77.73it/s]\u001b[A\n",
|
||
|
"Processing files: 94%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4599/4877 [01:30<00:05, 55.07it/s]\u001b[A\n",
|
||
|
"Processing files: 94%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4606/4877 [01:30<00:07, 38.39it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4612/4877 [01:30<00:06, 41.53it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4621/4877 [01:30<00:05, 49.55it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4628/4877 [01:30<00:04, 51.50it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4641/4877 [01:30<00:03, 65.01it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4649/4877 [01:31<00:04, 53.61it/s]\u001b[A\n",
|
||
|
"Processing files: 95%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4656/4877 [01:31<00:03, 56.60it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4663/4877 [01:31<00:04, 51.69it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4675/4877 [01:31<00:03, 64.86it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4683/4877 [01:31<00:02, 64.94it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4691/4877 [01:31<00:02, 64.90it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4698/4877 [01:31<00:03, 52.37it/s]\u001b[A\n",
|
||
|
"Processing files: 96%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4704/4877 [01:32<00:04, 41.00it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4711/4877 [01:32<00:03, 44.31it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4721/4877 [01:32<00:02, 52.76it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4730/4877 [01:32<00:02, 58.76it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4737/4877 [01:32<00:02, 55.67it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4743/4877 [01:32<00:02, 48.62it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4749/4877 [01:37<00:28, 4.55it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4753/4877 [01:43<01:00, 2.04it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4754/4877 [01:58<01:00, 2.04it/s]\u001b[A\n",
|
||
|
"Processing files: 97%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4755/4877 [02:02<03:12, 1.58s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4756/4877 [02:08<03:52, 1.92s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4758/4877 [02:08<03:09, 1.60s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4760/4877 [02:09<02:41, 1.38s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4762/4877 [02:13<02:51, 1.49s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4763/4877 [02:17<03:23, 1.79s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4764/4877 [02:17<02:57, 1.58s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4765/4877 [02:18<02:29, 1.33s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4766/4877 [02:18<02:11, 1.18s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4767/4877 [02:18<01:45, 1.05it/s]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4768/4877 [02:19<01:43, 1.06it/s]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4769/4877 [02:26<04:19, 2.40s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4770/4877 [02:28<04:00, 2.25s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4771/4877 [02:31<04:20, 2.46s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4772/4877 [02:31<03:24, 1.95s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4773/4877 [02:33<03:23, 1.96s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4774/4877 [02:35<03:28, 2.03s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4775/4877 [02:36<02:32, 1.49s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4776/4877 [02:37<02:29, 1.48s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4777/4877 [02:39<02:39, 1.59s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4778/4877 [02:39<01:58, 1.19s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4779/4877 [02:42<02:56, 1.80s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4780/4877 [02:43<02:26, 1.51s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4781/4877 [02:45<02:42, 1.70s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4782/4877 [02:48<03:14, 2.05s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4783/4877 [02:52<04:00, 2.56s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4784/4877 [02:52<02:57, 1.91s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4785/4877 [02:54<02:55, 1.91s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4786/4877 [02:55<02:14, 1.48s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4787/4877 [02:56<01:51, 1.24s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4788/4877 [02:56<01:22, 1.08it/s]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4789/4877 [03:00<02:54, 1.99s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4791/4877 [03:02<02:10, 1.52s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4792/4877 [03:03<01:58, 1.39s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4793/4877 [03:04<01:41, 1.20s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4794/4877 [03:05<01:39, 1.20s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4795/4877 [03:07<01:50, 1.35s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4796/4877 [03:10<02:28, 1.84s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4797/4877 [03:12<02:29, 1.86s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4798/4877 [03:14<02:30, 1.91s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4799/4877 [03:15<02:11, 1.69s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4800/4877 [03:17<02:10, 1.70s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4801/4877 [03:17<01:48, 1.42s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4802/4877 [03:18<01:39, 1.33s/it]\u001b[A\n",
|
||
|
"Processing files: 98%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4803/4877 [03:22<02:35, 2.10s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4804/4877 [03:24<02:23, 1.97s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4805/4877 [03:26<02:17, 1.92s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4807/4877 [03:31<02:31, 2.16s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4808/4877 [03:32<02:05, 1.82s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4809/4877 [03:32<01:39, 1.46s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4810/4877 [03:33<01:22, 1.23s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4811/4877 [03:34<01:32, 1.40s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4812/4877 [03:42<03:29, 3.22s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4813/4877 [03:42<02:31, 2.36s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4814/4877 [03:43<01:58, 1.88s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4815/4877 [03:51<03:49, 3.69s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4816/4877 [03:54<03:24, 3.35s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4817/4877 [03:59<03:57, 3.96s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4818/4877 [04:00<02:54, 2.96s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4819/4877 [04:01<02:20, 2.43s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4821/4877 [04:06<02:16, 2.43s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4822/4877 [04:09<02:28, 2.70s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ | 4823/4877 [04:12<02:23, 2.65s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4825/4877 [04:17<02:18, 2.67s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4826/4877 [04:20<02:18, 2.72s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 4827/4877 [04:21<01:49, 2.18s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4828/4877 [04:23<01:46, 2.17s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4829/4877 [04:23<01:23, 1.74s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4830/4877 [04:34<03:11, 4.08s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 4831/4877 [04:39<03:32, 4.63s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4832/4877 [04:40<02:30, 3.33s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4833/4877 [04:40<01:52, 2.56s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4834/4877 [04:43<01:49, 2.54s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 4835/4877 [04:52<03:04, 4.39s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4836/4877 [04:52<02:08, 3.14s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4837/4877 [04:53<01:40, 2.52s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 4838/4877 [04:54<01:23, 2.15s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4839/4877 [04:56<01:19, 2.08s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4840/4877 [04:58<01:18, 2.11s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4841/4877 [05:00<01:14, 2.08s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 4842/4877 [05:01<01:03, 1.82s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4843/4877 [05:03<01:03, 1.88s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4844/4877 [05:04<00:50, 1.53s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4845/4877 [05:05<00:44, 1.40s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉ | 4846/4877 [05:09<01:01, 1.98s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4847/4877 [05:10<00:58, 1.94s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4848/4877 [05:12<00:54, 1.86s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4849/4877 [05:13<00:48, 1.72s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ | 4850/4877 [05:15<00:47, 1.75s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4851/4877 [05:17<00:46, 1.77s/it]\u001b[A\n",
|
||
|
"Processing files: 99%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4852/4877 [05:19<00:43, 1.73s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4853/4877 [05:27<01:30, 3.78s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏| 4854/4877 [05:28<01:06, 2.90s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4855/4877 [05:30<00:53, 2.44s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4856/4877 [05:36<01:13, 3.52s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎| 4857/4877 [05:46<01:51, 5.55s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4858/4877 [05:51<01:42, 5.38s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4859/4877 [05:53<01:20, 4.48s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4860/4877 [06:07<02:05, 7.36s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▍| 4861/4877 [06:11<01:37, 6.10s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4862/4877 [06:25<02:09, 8.66s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4863/4877 [06:33<01:56, 8.35s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4864/4877 [06:43<01:55, 8.88s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌| 4865/4877 [06:50<01:39, 8.33s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4866/4877 [06:51<01:07, 6.16s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4867/4877 [06:52<00:47, 4.70s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4868/4877 [06:55<00:36, 4.04s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋| 4869/4877 [07:13<01:06, 8.37s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4870/4877 [07:15<00:45, 6.45s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4871/4877 [07:16<00:27, 4.61s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4872/4877 [07:17<00:18, 3.69s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊| 4873/4877 [07:20<00:13, 3.26s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4874/4877 [07:21<00:08, 2.81s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4875/4877 [07:42<00:16, 8.24s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▉| 4876/4877 [07:46<00:06, 6.88s/it]\u001b[A\n",
|
||
|
"Processing files: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4877/4877 [08:15<00:00, 9.83it/s]\u001b[A\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import glob\n",
|
||
|
"import os\n",
|
||
|
"from concurrent.futures import ThreadPoolExecutor\n",
|
||
|
"import unicodedata # to normalize text\n",
|
||
|
"import html2text # to convert html to text\n",
|
||
|
"from langchain.document_loaders import PyPDFLoader, Docx2txtLoader\n",
|
||
|
"import pikepdf # to repair PDFs\n",
|
||
|
"from pathlib import Path\n",
|
||
|
"from tqdm.notebook import tqdm\n",
|
||
|
"from concurrent.futures import ThreadPoolExecutor, as_completed\n",
|
||
|
"\n",
|
||
|
"# todo: hardcoded paths\n",
|
||
|
"output_path = \"/home/marius/source/bookworm/export.txt\"\n",
|
||
|
"\n",
|
||
|
"def convert_html_to_text(html_blob: str) -> str:\n",
|
||
|
" \"\"\"\n",
|
||
|
" Converts a html blob into a string.\n",
|
||
|
" \"\"\"\n",
|
||
|
" h = html2text.HTML2Text()\n",
|
||
|
" h.mark_code = True\n",
|
||
|
" h.escape_snob = True\n",
|
||
|
" h.unicode_snob = True\n",
|
||
|
" # h.use_automatic_links = True \n",
|
||
|
" h.images_as_html = True\n",
|
||
|
" h.single_line_break = True\n",
|
||
|
" h.ignore_links = True\n",
|
||
|
" return h.handle(html_blob)\n",
|
||
|
"\n",
|
||
|
"def normalize_text(txt_blob: str) -> str:\n",
|
||
|
" \"\"\"\n",
|
||
|
" Normalize a text blob using NFKD normalization.\n",
|
||
|
" \"\"\"\n",
|
||
|
" return unicodedata.normalize(\"NFKD\", txt_blob)\n",
|
||
|
"\n",
|
||
|
"def repair_pdf(file_path: str) -> bool:\n",
|
||
|
" \"\"\"\n",
|
||
|
" Attempts to repair a PDF file using pikepdf.\n",
|
||
|
" \"\"\"\n",
|
||
|
" try:\n",
|
||
|
" with pikepdf.open(file_path, allow_overwriting_input=True) as pdf:\n",
|
||
|
" pdf.save(file_path)\n",
|
||
|
" return True\n",
|
||
|
" except pikepdf.PdfError as e:\n",
|
||
|
" print(f\"Failed to repair PDF {file_path}: {e}\")\n",
|
||
|
" return False\n",
|
||
|
"\n",
|
||
|
"def read_and_convert_file(file_path: str, is_html: bool, is_pdf: bool, is_docx: bool) -> str:\n",
|
||
|
" \"\"\"\n",
|
||
|
" Reads and converts a file from HTML, PDF, DOCX, or plain text to text.\n",
|
||
|
" \"\"\"\n",
|
||
|
" content = \"\"\n",
|
||
|
" if is_html:\n",
|
||
|
" try:\n",
|
||
|
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
||
|
" content = file.read()\n",
|
||
|
" return convert_html_to_text(content)\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Error reading {file_path}: {e}\")\n",
|
||
|
" return \"\"\n",
|
||
|
"\n",
|
||
|
" elif is_pdf:\n",
|
||
|
" try:\n",
|
||
|
" loader = PyPDFLoader(file_path)\n",
|
||
|
" # ... fixes \"Multiple definitions in dictionary at byte 0xb32 for key /ExtGState\" error\n",
|
||
|
" documents = loader.load()\n",
|
||
|
" content = \"\\n\".join(doc.page_content for doc in documents if hasattr(doc, 'page_content'))\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Error loading PDF {file_path}: {e}. Attempting to repair...\")\n",
|
||
|
" if repair_pdf(file_path):\n",
|
||
|
" try:\n",
|
||
|
" loader = PyPDFLoader(file_path)\n",
|
||
|
" documents = loader.load()\n",
|
||
|
" content = \"\\n\".join(doc.page_content for doc in documents if hasattr(doc, 'page_content'))\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Failed to process PDF {file_path} after repair: {e}\")\n",
|
||
|
" return \"\"\n",
|
||
|
" return normalize_text(content)\n",
|
||
|
"\n",
|
||
|
" elif is_docx:\n",
|
||
|
" try:\n",
|
||
|
" loader = Docx2txtLoader(file_path)\n",
|
||
|
" content = loader.load()\n",
|
||
|
" if isinstance(content, list):\n",
|
||
|
" content = \"\\n\".join(content)\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Error reading DOCX {file_path}: {e}\")\n",
|
||
|
" return \"\"\n",
|
||
|
" return normalize_text(content)\n",
|
||
|
"\n",
|
||
|
" else: # For plain text files\n",
|
||
|
" try:\n",
|
||
|
" with open(file_path, 'r', encoding='utf-8') as file:\n",
|
||
|
" return normalize_text(file.read())\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Error reading {file_path}: {e}\")\n",
|
||
|
" return \"\"\n",
|
||
|
"\n",
|
||
|
"def sanitize_text(text):\n",
|
||
|
" \"\"\"\n",
|
||
|
" Removes or replaces surrogate characters from a string.\n",
|
||
|
" \"\"\"\n",
|
||
|
" return text.encode('utf-8', 'replace').decode('utf-8')\n",
|
||
|
"\n",
|
||
|
"def append_to_output(data: str, is_pdf: bool, is_docx: bool, output_path: str):\n",
|
||
|
" \"\"\"\n",
|
||
|
" Appends sanitized data to an output file.\n",
|
||
|
" \"\"\"\n",
|
||
|
" sanitized_data = sanitize_text(data)\n",
|
||
|
" if is_pdf or is_docx:\n",
|
||
|
" output_path = str(Path(output_path).with_suffix('')) + \".documents.txt\"\n",
|
||
|
" \n",
|
||
|
" with open(output_path, \"a\", encoding='utf-8') as output_file:\n",
|
||
|
" output_file.write(sanitized_data)\n",
|
||
|
"\n",
|
||
|
"def process_file(file):\n",
|
||
|
" is_html = file.endswith('.html')\n",
|
||
|
" is_pdf = file.endswith('.pdf')\n",
|
||
|
" is_docx = file.endswith('.docx')\n",
|
||
|
" \n",
|
||
|
" file_content = read_and_convert_file(file, is_html, is_pdf, is_docx)\n",
|
||
|
" append_to_output(file_content, is_pdf, is_docx, output_path=output_path)\n",
|
||
|
"\n",
|
||
|
"def process_files_in_directory(directory: str):\n",
|
||
|
" txt_html_files = glob.glob(os.path.join(directory, \"*.txt\")) + glob.glob(os.path.join(directory, \"*.html\"))\n",
|
||
|
" pdf_docx_files = glob.glob(os.path.join(directory, \"img\", \"*.pdf\")) + glob.glob(os.path.join(directory, \"img\", \"*.docx\"))\n",
|
||
|
" all_files = txt_html_files + pdf_docx_files\n",
|
||
|
"\n",
|
||
|
" # Initialize the progress bar\n",
|
||
|
" pbar = tqdm(total=len(all_files), desc=\"Processing files\")\n",
|
||
|
"\n",
|
||
|
" with ThreadPoolExecutor(max_workers=3) as executor:\n",
|
||
|
" # Submit all files to the executor and store future objects\n",
|
||
|
" futures = [executor.submit(process_file, file) for file in all_files]\n",
|
||
|
" \n",
|
||
|
" # As tasks complete, update the progress bar\n",
|
||
|
" for future in as_completed(futures):\n",
|
||
|
" pbar.update(1) # Update the progress bar by one for each task completed\n",
|
||
|
"\n",
|
||
|
" # Ensure the progress bar is closed upon completion\n",
|
||
|
" pbar.close()\n",
|
||
|
"\n",
|
||
|
"process_files_in_directory(\"/home/marius/data/it-sec-research-extracted/IT sec research\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "e1bcc07f980c865f",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"## Chunking of the texts\n",
|
||
|
"\n",
|
||
|
"The texts need to get chunked (pre-processing) before the embedding process."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 51,
|
||
|
"id": "b14fb1c3219660ad",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-17T16:13:14.479469Z",
|
||
|
"start_time": "2024-03-17T16:13:14.476765Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"os.chdir(\"/home/marius/source/bookworm\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"id": "de8d9f18d8342c57",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:17:53.867414Z",
|
||
|
"start_time": "2024-03-21T15:17:32.731232Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Now you have 723845 chunks\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
|
||
|
"\n",
|
||
|
"def chunk_text_data():\n",
|
||
|
" \n",
|
||
|
" with open('/home/marius/source/bookworm/export.txt') as f:\n",
|
||
|
" text_notes = f.read()\n",
|
||
|
" \n",
|
||
|
" text_splitter = RecursiveCharacterTextSplitter(\n",
|
||
|
" chunk_size=100,\n",
|
||
|
" chunk_overlap=20,\n",
|
||
|
" length_function=len\n",
|
||
|
" )\n",
|
||
|
" \n",
|
||
|
" chunks = text_splitter.create_documents([text_notes])\n",
|
||
|
" print(f'Now you have {len(chunks)} chunks')\n",
|
||
|
" return chunks\n",
|
||
|
" \n",
|
||
|
"chunks = chunk_text_data()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "aea7ceb111fed5f3",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"### Embedding costs - why no OpenAI?\n",
|
||
|
"\n",
|
||
|
"The OpenAI API has a cost for the embeddings.\n",
|
||
|
"At this point there seems to be no way to pre-estimate the costs reliably. \n",
|
||
|
"The following calculation is flawed:"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"id": "afb2c8feb9ca0bb4",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:18:51.003585Z",
|
||
|
"start_time": "2024-03-21T15:18:31.411234Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Total Tokens: 15769414\n",
|
||
|
"Embedding Cost in USD: 473.08241999999996\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"def print_embedding_cost(texts):\n",
|
||
|
" import tiktoken\n",
|
||
|
" enc = tiktoken.encoding_for_model('gpt-4')\n",
|
||
|
" total_tokens = sum([len(enc.encode(page.page_content)) for page in texts])\n",
|
||
|
" print(f'Total Tokens: {total_tokens}')\n",
|
||
|
" print(f'Embedding Cost in USD: { (0.03 / 1_000) * total_tokens}')\n",
|
||
|
" \n",
|
||
|
"print_embedding_cost(chunks)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "8012516604037e2f",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"## Use Hugging Face Embeddings Sentence Transformers\n",
|
||
|
"\n",
|
||
|
"* use a self-hosted on-premises model for the embedding and vectorization\n",
|
||
|
"* configure it for the use with the CPU\n",
|
||
|
"\n",
|
||
|
"This model is from the Beijing Academy of Artificial Intelligence\n",
|
||
|
"* https://huggingface.co/BAAI/bge-large-en-v1.5 \n",
|
||
|
"* https://huggingface.co/docs/transformers/model_doc/auto \n",
|
||
|
"\n",
|
||
|
"It will produce embeddings of 1024 dimensions, roughly 500 less than OpenAI."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"id": "c1ca979bbc1610bb",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:19:15.167038Z",
|
||
|
"start_time": "2024-03-21T15:19:15.031139Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from langchain.embeddings import HuggingFaceEmbeddings\n",
|
||
|
"\n",
|
||
|
"modelPath = \"BAAI/bge-large-en-v1.5\"\n",
|
||
|
"\n",
|
||
|
"# Create a dictionary with model configuration options, specifying to use the CPU for computations\n",
|
||
|
"model_kwargs = {'device':'cpu'}\n",
|
||
|
"\n",
|
||
|
"# Create a dictionary with encoding options, specifically setting 'normalize_embeddings' to False\n",
|
||
|
"encode_kwargs = {'normalize_embeddings': True}"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 25,
|
||
|
"id": "3c2b9cd67f161714",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T15:42:28.163005Z",
|
||
|
"start_time": "2024-03-21T15:42:26.222594Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Initialize an instance of HuggingFaceEmbeddings with the specified parameters\n",
|
||
|
"# this model requires sentence_transformers\n",
|
||
|
"\n",
|
||
|
"embeddings = HuggingFaceEmbeddings(\n",
|
||
|
" model_name=modelPath, # Provide the pre-trained model's path\n",
|
||
|
" model_kwargs=model_kwargs, # Pass the model configuration options\n",
|
||
|
" encode_kwargs=encode_kwargs # Pass the encoding options\n",
|
||
|
" )\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 39,
|
||
|
"id": "3b9ff8cad49442cf",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T16:18:45.930652Z",
|
||
|
"start_time": "2024-03-21T16:18:42.989032Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"[0.02669697254896164, 0.017016947269439697, -0.0252668596804142, 0.027562297880649567, -0.036536093801259995, -0.04702713340520859, -0.008289276622235775, 0.027264799922704697, 0.0193538386374712, 0.09645088016986847, 0.04814787581562996, 0.020076178014278412, 0.04018039628863335, -0.05319904163479805, -0.0018393148202449083, 0.0004135535564273596, 0.0056005921214818954, -0.0007755732513032854, -0.01713593304157257, 0.046697087585926056, 0.02949507348239422, -0.002135329181328416, -0.06421148031949997, -0.0025980528444051743, -0.002175381872802973, -0.016258634626865387, 0.03560303896665573, 0.025036070495843887, 0.03057222068309784, 0.07080159336328506, -0.03819547966122627, -0.009489326737821102, 0.018622957170009613, -0.02314341999590397, -0.01928570494055748, 0.008893653750419617, 0.020412752404808998, -0.0026669444050639868, -0.04702509567141533, -0.07154359668493271, -0.00985659845173359, 0.0010672420030459762, 0.007422462571412325, -0.027616797015070915, -0.037166301161050797, -0.03903781622648239, -0.021067800000309944, 0.023234857246279716, -0.02984745241701603, -0.0003557372256182134, -0.0062873163260519505, 0.017065711319446564, 0.04882030934095383, -0.021840935572981834, 0.012029100209474564, 0.033996764570474625, -0.006590498611330986, 0.026026088744401932, -0.01962001994252205, 0.010742586106061935, 0.038518138229846954, -0.009543508291244507, 0.006120799575001001, -0.04429181292653084, 0.016838695853948593, 0.012138907797634602, -0.05647517368197441, 0.012697356753051281, -0.039533913135528564, 0.01181220356374979, -0.002553032711148262, 0.02627074159681797, -0.003673797706142068, -0.019179729744791985, -0.012743696570396423, 0.017957448959350586, -0.002778472378849983, 0.027680017054080963, -0.04603710398077965, 0.03110506199300289, -0.014483182691037655, 0.0061340732499957085, 0.023356124758720398, -0.027098359540104866, 0.025932958349585533, -0.054804012179374695, 0.021440045908093452, -0.0021313962060958147, 0.008103386498987675, -0.004042080603539944, 0.07958704978227615, 0.04686443880200386, 0.0025805693585425615, -0.024902688339352608, 0.0027323083486407995, 0.012498576194047928, -0.007472028490155935, 0.04842745512723923, -0.009689773432910442, -0.002272476674988866, 0.049017928540706635, 0.009563890285789967, -0.02213067188858986, 0.046894025057554245, -0.016963794827461243, -0.001712314086034894, -0.007016458548605442, 0.027962010353803635, -0.0058366162702441216, -0.03457598388195038, 0.026866907253861427, -0.0060468679293990135, 0.00999391358345747, 0.006039618514478207, -0.01602409966289997, 0.026533283293247223, -0.01798826828598976, 0.024779003113508224, 0.007074084132909775, -0.030575281009078026, 0.007484155241400003, 0.009421328082680702, 0.018538348376750946, -0.008937075734138489, -0.0016853661509230733, -0.037765245884656906, -0.008333210833370686, 0.029538191854953766, -0.05277511849999428, -0.008469143882393837, -0.011122306808829308, -0.013142808340489864, 0.018477508798241615, 0.029102321714162827, -0.050660859793424606, 0.020982826128602028, 0.02953541837632656, 0.009202391840517521, 0.005015721544623375, -0.014471577480435371, 0.005917319096624851, -0.02452758327126503, 0.034311287105083466, 0.06870651245117188, -0.004787039011716843, 0.03030187450349331, 0.02345900796353817, 0.00826261192560196, -0.008425573818385601, 0.019262364134192467, -0.041782982647418976, -0.01021308172494173, 0.020281389355659485, 0.05825428292155266, -0.02157139964401722, -0.004128106404095888, -0.0027353025507181883, 0.03297201544046402, -0.014398119412362576, 0.014553392305970192, 0.03983527049422264, 0.04522328823804855, -0.0227439533919096, 0.0208287313580513, -0.048643942922353745, 0.0009082997567020357, -0.006951106246560812, -0.035037606954574585, 0.01375054381787777, -0.01445818692445755, 0.029134731739759445, -0.022526120766997337, -0.008102713152766228, 0.003899186383932829, 0.041013214737176895, 0.01703835278749466, -0.0017122626304626465, -0.0034106560051441193, 0.004580703563988209, 0.04692504554986954, -0.015334389172494411, -0.04048878699541092, 0.013905854895710945, 0.04545815661
|
||
|
"1024\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"vector = embeddings.embed_query(chunks[0].page_content)\n",
|
||
|
"print(vector)\n",
|
||
|
"print(len(vector))"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"id": "b347fb5ee68daf60",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"source": [
|
||
|
"## Batch process the embedding\n",
|
||
|
"\n",
|
||
|
"Many data-science tasks require to split a larger processing operation into batch jobs.\n",
|
||
|
"Like in the good old Mainframe days.\n",
|
||
|
"\n",
|
||
|
"The vector DB: https://github.com/asg017/sqlite-vss \n",
|
||
|
"Basis: https://faiss.ai/ - a library for efficient similarity search and clustering of dense vectors.\n",
|
||
|
"\n",
|
||
|
"We add vectors of 1024 dimensions per chunk (sentence, line break delimited) to the DB.\n",
|
||
|
"The processing is done in batches of 50 chunks, using 3 threads."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 33,
|
||
|
"id": "b03bfcb6c666db1",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T16:04:44.572979Z",
|
||
|
"start_time": "2024-03-21T16:04:43.521107Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# we can use concurrent processing to speed up the embedding process\n",
|
||
|
"from concurrent.futures import ThreadPoolExecutor, as_completed\n",
|
||
|
"\n",
|
||
|
"from langchain_community.vectorstores import SQLiteVSS\n",
|
||
|
"import os\n",
|
||
|
"from tqdm.notebook import tqdm # Import tqdm for notebook\n",
|
||
|
"from typing import List\n",
|
||
|
"from langchain.schema.document import Document"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 38,
|
||
|
"id": "e6ffc345c26298ad",
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2024-03-21T16:10:22.121211Z",
|
||
|
"start_time": "2024-03-21T16:08:20.585372Z"
|
||
|
},
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"model_id": "d2afb7310af44a3c85a3b59e58be64e1",
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0
|
||
|
},
|
||
|
"text/plain": [
|
||
|
"Processing batches: 0%| | 0/14477 [00:00<?, ?it/s]"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"ename": "KeyboardInterrupt",
|
||
|
"evalue": "",
|
||
|
"output_type": "error",
|
||
|
"traceback": [
|
||
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
||
|
"Cell \u001b[0;32mIn[38], line 44\u001b[0m, in \u001b[0;36mvectorize_data_in_batches\u001b[0;34m(chunks, embeddings)\u001b[0m\n\u001b[1;32m 42\u001b[0m progress_bar \u001b[38;5;241m=\u001b[39m tqdm(total\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mlen\u001b[39m(futures), desc\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mProcessing batches\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 44\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfuture\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mas_completed\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfutures\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 45\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Each time a future completes, update the progress\u001b[39;49;00m\n\u001b[1;32m 46\u001b[0m \u001b[43m \u001b[49m\u001b[43mprogress_bar\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/_base.py:243\u001b[0m, in \u001b[0;36mas_completed\u001b[0;34m(fs, timeout)\u001b[0m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTimeoutError\u001b[39;00m(\n\u001b[1;32m 240\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m (of \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m) futures unfinished\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28mlen\u001b[39m(pending), total_futures))\n\u001b[0;32m--> 243\u001b[0m \u001b[43mwaiter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mevent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwait_timeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m waiter\u001b[38;5;241m.\u001b[39mlock:\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:629\u001b[0m, in \u001b[0;36mEvent.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 628\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m signaled:\n\u001b[0;32m--> 629\u001b[0m signaled \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cond\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwait\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m signaled\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:327\u001b[0m, in \u001b[0;36mCondition.wait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m timeout \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 327\u001b[0m \u001b[43mwaiter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 328\u001b[0m gotit \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n",
|
||
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: ",
|
||
|
"\nDuring handling of the above exception, another exception occurred:\n",
|
||
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
||
|
"Cell \u001b[0;32mIn[38], line 52\u001b[0m\n\u001b[1;32m 48\u001b[0m progress_bar\u001b[38;5;241m.\u001b[39mclose() \u001b[38;5;66;03m# Ensure the progress bar is closed at the end\u001b[39;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAll texts have been added to the database.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 52\u001b[0m \u001b[43mvectorize_data_in_batches\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchunks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43membeddings\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43membeddings\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;66;03m# todo : documents go to different table. \u001b[39;00m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# todo: similarity queries\u001b[39;00m\n",
|
||
|
"Cell \u001b[0;32mIn[38], line 37\u001b[0m, in \u001b[0;36mvectorize_data_in_batches\u001b[0;34m(chunks, embeddings)\u001b[0m\n\u001b[1;32m 33\u001b[0m batch_size \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m50\u001b[39m \u001b[38;5;66;03m# Adjust based on your needs and memory constraints\u001b[39;00m\n\u001b[1;32m 35\u001b[0m batches \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(divide_chunks(chunks, batch_size))\n\u001b[0;32m---> 37\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mThreadPoolExecutor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmax_workers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnum_workers\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mas\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mexecutor\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 38\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Wrap the 'submit' calls with 'tqdm' for immediate feedback\u001b[39;49;00m\n\u001b[1;32m 39\u001b[0m \u001b[43m \u001b[49m\u001b[43mfutures\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mexecutor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubmit\u001b[49m\u001b[43m(\u001b[49m\u001b[43madd_texts_in_batches\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mbatch\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mbatches\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 41\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Setup the tqdm progress bar\u001b[39;49;00m\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/_base.py:647\u001b[0m, in \u001b[0;36mExecutor.__exit__\u001b[0;34m(self, exc_type, exc_val, exc_tb)\u001b[0m\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__exit__\u001b[39m(\u001b[38;5;28mself\u001b[39m, exc_type, exc_val, exc_tb):\n\u001b[0;32m--> 647\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshutdown\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwait\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 648\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/concurrent/futures/thread.py:235\u001b[0m, in \u001b[0;36mThreadPoolExecutor.shutdown\u001b[0;34m(self, wait, cancel_futures)\u001b[0m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m wait:\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m t \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_threads:\n\u001b[0;32m--> 235\u001b[0m \u001b[43mt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:1119\u001b[0m, in \u001b[0;36mThread.join\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 1116\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcannot join current thread\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1118\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m timeout \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1119\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_wait_for_tstate_lock\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1120\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1121\u001b[0m \u001b[38;5;66;03m# the behavior of a negative timeout isn't documented, but\u001b[39;00m\n\u001b[1;32m 1122\u001b[0m \u001b[38;5;66;03m# historically .join(timeout=x) for x<0 has acted as if timeout=0\u001b[39;00m\n\u001b[1;32m 1123\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_wait_for_tstate_lock(timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mmax\u001b[39m(timeout, \u001b[38;5;241m0\u001b[39m))\n",
|
||
|
"File \u001b[0;32m~/miniconda3/envs/llm_langchain/lib/python3.11/threading.py:1139\u001b[0m, in \u001b[0;36mThread._wait_for_tstate_lock\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 1136\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[1;32m 1138\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1139\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43mlock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 1140\u001b[0m lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 1141\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_stop()\n",
|
||
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"def add_texts_in_batches(batch: List[Document], sqlite_table: str = \"evernote\", embeddings=embeddings) -> None:\n",
|
||
|
" \"\"\"\n",
|
||
|
" Using type hints is a good idea here, because error messages get swallowed by the ThreadPoolExecutor.\n",
|
||
|
" \n",
|
||
|
" The exception handling serves the same purpose. \n",
|
||
|
" \n",
|
||
|
" Create a new connection to the database within each thread,\n",
|
||
|
" then add a batch of texts. This ensures that the SQLite connection\n",
|
||
|
" is used in the thread where it was created.\n",
|
||
|
" \n",
|
||
|
" This needs sqlite-vss . \n",
|
||
|
" \"\"\"\n",
|
||
|
" try:\n",
|
||
|
" # Create a new connection for each batch\n",
|
||
|
" # sqlite isn't thread-safe afaik\n",
|
||
|
" \n",
|
||
|
" connection = SQLiteVSS.create_connection(db_file=\"/home/marius/source/bookworm/evernote.db\")\n",
|
||
|
"\n",
|
||
|
" local_db = SQLiteVSS(\n",
|
||
|
" table=sqlite_table,\n",
|
||
|
" embedding=embeddings,\n",
|
||
|
" connection=connection\n",
|
||
|
" )\n",
|
||
|
" local_db.add_documents(batch)\n",
|
||
|
" # sqlite here doesn't get closed.\n",
|
||
|
"\n",
|
||
|
" except Exception as e:\n",
|
||
|
" print(f\"Exception occurred in add_texts_in_batches: {e}\")\n",
|
||
|
"\n",
|
||
|
"def divide_chunks(chunks, n):\n",
|
||
|
" \"\"\"\n",
|
||
|
" Divide and conquer\n",
|
||
|
" \"\"\"\n",
|
||
|
" for i in range(0, len(chunks), n):\n",
|
||
|
" yield chunks[i:i + n]\n",
|
||
|
"\n",
|
||
|
"def vectorize_data_in_batches(chunks, embeddings):\n",
|
||
|
" num_workers = 3\n",
|
||
|
" batch_size = 50 # Adjust based on your needs and memory constraints\n",
|
||
|
"\n",
|
||
|
" batches = list(divide_chunks(chunks, batch_size))\n",
|
||
|
"\n",
|
||
|
" with ThreadPoolExecutor(max_workers=num_workers) as executor:\n",
|
||
|
" # Wrap the 'submit' calls with 'tqdm' for immediate feedback\n",
|
||
|
" futures = [executor.submit(add_texts_in_batches, batch) for batch in batches]\n",
|
||
|
" \n",
|
||
|
" # Setup the tqdm progress bar\n",
|
||
|
" progress_bar = tqdm(total=len(futures), desc=\"Processing batches\")\n",
|
||
|
" \n",
|
||
|
" for future in as_completed(futures):\n",
|
||
|
" # Each time a future completes, update the progress\n",
|
||
|
" progress_bar.update(1)\n",
|
||
|
" \n",
|
||
|
" progress_bar.close() # Ensure the progress bar is closed at the end\n",
|
||
|
"\n",
|
||
|
" print(\"All texts have been added to the database.\")\n",
|
||
|
" \n",
|
||
|
"vectorize_data_in_batches(chunks=chunks, embeddings=embeddings)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"id": "5f01a969c4aedac8",
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# todo : documents go to different table. \n",
|
||
|
"# todo: similarity queries"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 2
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython2",
|
||
|
"version": "2.7.6"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 5
|
||
|
}
|