From c61fa719c34116639de7f8837fa30c8e99d7281a Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sun, 15 Dec 2024 21:49:37 +0300 Subject: [PATCH 001/175] rqvae & k-core research --- .gitignore | 2 + configs/train/sasrec_train_config.json | 9 +- notebooks/AmazonBeautyDatasetStatistics.ipynb | 111 ++-- src/main.ipynb | 588 ++++++++++++++++++ src/main.py | 46 ++ src/rqvae.py | 128 ++++ todo.txt | 7 + 7 files changed, 830 insertions(+), 61 deletions(-) create mode 100644 src/main.ipynb create mode 100644 src/main.py create mode 100644 src/rqvae.py create mode 100644 todo.txt diff --git a/.gitignore b/.gitignore index 964fa39a..8b8e6f07 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ __pycache__ data/* tensorboard_logs/* +.venv +papers diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 1336b91c..32fd1db1 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -2,7 +2,7 @@ "experiment_name": "sasrec_test", "best_metric": "eval/ndcg@20", "dataset": { - "type": "sequence", + "type": "scientific", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, @@ -60,10 +60,9 @@ "type": "composite", "losses": [ { - "type": "sasrec", - "positive_prefix": "positive_embeddings", - "negative_prefix": "negative_embeddings", - "representation_prefix": "current_embeddings", + "type": "bpr", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", "output_prefix": "downstream_loss" } ], diff --git a/notebooks/AmazonBeautyDatasetStatistics.ipynb b/notebooks/AmazonBeautyDatasetStatistics.ipynb index a1a2c3d2..b59e40ac 100644 --- a/notebooks/AmazonBeautyDatasetStatistics.ipynb +++ b/notebooks/AmazonBeautyDatasetStatistics.ipynb @@ -174,21 +174,10 @@ "execution_count": 6, "id": "f3182b59", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, 1210271, (1210271,))" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "df.user_id = pd.factorize(df.user_id)[0] + 1\n", - "df.user_id.min(), df.user_id.max(), df.user_id.unique().shape" + "# df.user_id = pd.factorize(df.user_id)[0] + 1\n", + "# df.user_id.min(), df.user_id.max(), df.user_id.unique().shape" ] }, { @@ -196,21 +185,10 @@ "execution_count": 7, "id": "7225ddeb", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, 249274, (249274,))" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "df.item_id = pd.factorize(df.item_id)[0] + 1\n", - "df.item_id.min(), df.item_id.max(), df.item_id.unique().shape" + "# df.item_id = pd.factorize(df.item_id)[0] + 1\n", + "# df.item_id.min(), df.item_id.max(), df.item_id.unique().shape" ] }, { @@ -249,36 +227,36 @@ " \n", " \n", " 0\n", - " 1\n", - " 1\n", + " A39HTATAQ9V7YF\n", + " 0205616461\n", " 5.0\n", " 1369699200\n", " \n", " \n", " 1\n", - " 2\n", - " 2\n", + " A3JM6GV9MNOF9X\n", + " 0558925278\n", " 3.0\n", " 1355443200\n", " \n", " \n", " 2\n", - " 3\n", - " 2\n", + " A1Z513UWSAAO0F\n", + " 0558925278\n", " 5.0\n", " 1404691200\n", " \n", " \n", " 3\n", - " 4\n", - " 3\n", + " A1WMRR494NWEWV\n", + " 0733001998\n", " 4.0\n", " 1382572800\n", " \n", " \n", " 4\n", - " 5\n", - " 4\n", + " A3IAAVS479H7M7\n", + " 0737104473\n", " 1.0\n", " 1274227200\n", " \n", @@ -287,12 +265,12 @@ "" ], "text/plain": [ - " user_id item_id rating timestamp\n", - "0 1 1 5.0 1369699200\n", - "1 2 2 3.0 1355443200\n", - "2 3 2 5.0 1404691200\n", - "3 4 3 4.0 1382572800\n", - "4 5 4 1.0 1274227200" + " user_id item_id rating timestamp\n", + "0 A39HTATAQ9V7YF 0205616461 5.0 1369699200\n", + "1 A3JM6GV9MNOF9X 0558925278 3.0 1355443200\n", + "2 A1Z513UWSAAO0F 0558925278 5.0 1404691200\n", + "3 A1WMRR494NWEWV 0733001998 4.0 1382572800\n", + "4 A3IAAVS479H7M7 0737104473 1.0 1274227200" ] }, "execution_count": 8, @@ -314,7 +292,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2023070it [01:12, 28030.70it/s]" + "100%|██████████| 2023070/2023070 [01:14<00:00, 27172.73it/s]" ] }, { @@ -335,10 +313,10 @@ "source": [ "data = []\n", "\n", - "for _, row in tqdm(df.iterrows()):\n", + "for _, row in tqdm(df.iterrows(), total=len(df)):\n", " data.append({\n", - " 'user_id': int(row.user_id),\n", - " 'item_id': int(row.item_id),\n", + " 'user_id': row.user_id,\n", + " 'item_id': row.item_id,\n", " 'timestamp': int(row.timestamp)\n", " })\n", "\n", @@ -355,7 +333,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████████████████████████████████████████████████████████████████| 2023070/2023070 [00:04<00:00, 421809.17it/s]\n" + "100%|██████████| 2023070/2023070 [00:05<00:00, 375198.84it/s]\n" ] }, { @@ -432,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 18, "id": "dcc9f464", "metadata": {}, "outputs": [ @@ -440,8 +418,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████████████████████████████████████████████████████████████████| 1210271/1210271 [00:01<00:00, 840307.33it/s]\n", - "100%|██████████████████████████████████████████████████████████████████████| 249274/249274 [00:00<00:00, 571256.27it/s]\n" + "100%|██████████| 1210271/1210271 [00:01<00:00, 738179.23it/s]\n", + "100%|██████████| 249274/249274 [00:00<00:00, 486768.45it/s]\n" ] } ], @@ -494,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 19, "id": "16df848f", "metadata": {}, "outputs": [ @@ -520,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, "id": "90f7ccc1", "metadata": {}, "outputs": [], @@ -532,11 +510,32 @@ " ]))\n", " f.write('\\n')" ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "393b8b57", + "metadata": {}, + "outputs": [], + "source": [ + "from pickle import dump\n", + "\n", + "\n", + "dump(set(item_mapping.keys()), open('../data/Beauty/item_mapping.pkl', 'wb'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2eb5b656", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -550,7 +549,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/src/main.ipynb b/src/main.ipynb new file mode 100644 index 00000000..996961e5 --- /dev/null +++ b/src/main.ipynb @@ -0,0 +1,588 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import json\n", + "import gzip" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def parse(path):\n", + " g = gzip.open(path, \"rb\")\n", + " for l in g:\n", + " yield eval(l)\n", + "\n", + "\n", + "def getDF(path):\n", + " i = 0\n", + " df = {}\n", + " for d in parse(path):\n", + " df[i] = d\n", + " i += 1\n", + " return pd.DataFrame.from_dict(df, orient=\"index\")\n", + "\n", + "\n", + "df = getDF(\"../data/meta_Beauty.json.gz\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique items: 12101\n", + "Number of unique users: 22363\n" + ] + } + ], + "source": [ + "file_name = \"../data/reviews_Beauty_5.json\"\n", + "\n", + "unique_items = set()\n", + "unique_users = set()\n", + "\n", + "with open(file_name, \"r\") as file:\n", + " for line in file:\n", + " review = json.loads(line.strip())\n", + " unique_items.add(review[\"asin\"])\n", + " unique_users.add(review[\"reviewerID\"])\n", + "\n", + "print(f\"Number of unique items: {len(unique_items)}\")\n", + "print(f\"Number of unique users: {len(unique_users)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12101" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df[df['asin'].isin(unique_items)]\n", + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n", + "import torch\n", + "\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "model_name = \"google-t5/t5-small\"\n", + "\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def preprocess(row: pd.Series):\n", + " row = row.fillna('empty') # unknown?\n", + " # remove column description / title / cat?\n", + " return f\"Description: {row['description']}. Title: {row['title']}. Categories: {', '.join(row['categories'][0])}\"\n", + "\n", + "\n", + "df[\"combined_text\"] = df.apply(preprocess, axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def encode_text(text):\n", + " enc = tokenizer(text, return_tensors=\"pt\", truncation=True).to(device)\n", + "\n", + " output = model.encoder(\n", + " input_ids=enc[\"input_ids\"],\n", + " attention_mask=enc[\"attention_mask\"],\n", + " return_dict=True,\n", + " )\n", + "\n", + " embeddings = output.last_hidden_state.mean(\n", + " dim=1\n", + " ).squeeze() # mean over all tokens (mb CLS?)\n", + "\n", + " return embeddings.cpu().detach()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 12101/12101 [01:00<00:00, 199.89it/s]\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "\n", + "tqdm.pandas()\n", + "\n", + "with torch.no_grad():\n", + " df[\"embeddings\"] = df[\"combined_text\"].progress_apply(encode_text)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
asindescriptiontitleimUrlsalesRankcategoriespricerelatedbrandcombined_textembeddings
1157806397051An extensive range of 15 multiple vibrant long...WAWO 15 Color Professionl Makeup Eyeshadow Cam...http://ecx.images-amazon.com/images/I/41Rn18Oe...{'Beauty': 10486}[[Beauty, Makeup, Face, Concealers & Neutraliz...5.04{'also_bought': ['B00KR26VFE', 'B00E7LQHZ0', '...COKADescription: An extensive range of 15 multiple...[tensor(-0.0002), tensor(0.0026), tensor(0.008...
1799759091062Xtreme Brite Brightening gel is a highly conc...Xtreme Brite Brightening Gel 1oz.http://ecx.images-amazon.com/images/I/41QWW9v1...{'Beauty': 52254}[[Beauty, Hair Care, Styling Products, Creams,...19.99{'also_bought': ['B0054GLD1U', 'B003BRZCUC', '...Xtreme BriteDescription: Xtreme Brite Brightening gel is ...[tensor(0.0054), tensor(0.0238), tensor(-0.015...
1929788072216Prada Candy By Prada Eau De Parfum Spray 1.7 O...Prada Candy By Prada Eau De Parfum Spray 1.7 O...http://ecx.images-amazon.com/images/I/51iT2k6L...{'Beauty': 78916}[[Beauty, Fragrance, Women's, Eau de Parfum]]65.86{'also_bought': ['B006C5OHSI', 'B006P14842', '...PradaDescription: Prada Candy By Prada Eau De Parfu...[tensor(-0.0383), tensor(0.0212), tensor(-0.01...
5559790790961Versace Bright Crystal Perfume for Women 3 oz ...Versace Bright Crystal Eau de Toilette Spray f...http://ecx.images-amazon.com/images/I/418LYGLE...{'Beauty': 764}[[Beauty, Fragrance, Women's, Eau de Toilette]]52.33{'also_bought': ['B007P7OPQQ', 'B0017JT658', '...VersaceDescription: Versace Bright Crystal Perfume fo...[tensor(0.0284), tensor(0.0173), tensor(0.0334...
5879790794231STELLA For Women By STELLA MCCARTNEY 1.7 oz ED...Stella McCartney Stellahttp://ecx.images-amazon.com/images/I/31L2n60J...{'Beauty': 142503}[[Beauty, Fragrance, Women's, Eau de Parfum]]NaN{'also_bought': ['B0019M21OQ', 'B000E7YM8K', '...NaNDescription: STELLA For Women By STELLA MCCART...[tensor(0.0138), tensor(0.0021), tensor(0.0366...
\n", + "
" + ], + "text/plain": [ + " asin description \\\n", + "115 7806397051 An extensive range of 15 multiple vibrant long... \n", + "179 9759091062 Xtreme Brite Brightening gel is a highly conc... \n", + "192 9788072216 Prada Candy By Prada Eau De Parfum Spray 1.7 O... \n", + "555 9790790961 Versace Bright Crystal Perfume for Women 3 oz ... \n", + "587 9790794231 STELLA For Women By STELLA MCCARTNEY 1.7 oz ED... \n", + "\n", + " title \\\n", + "115 WAWO 15 Color Professionl Makeup Eyeshadow Cam... \n", + "179 Xtreme Brite Brightening Gel 1oz. \n", + "192 Prada Candy By Prada Eau De Parfum Spray 1.7 O... \n", + "555 Versace Bright Crystal Eau de Toilette Spray f... \n", + "587 Stella McCartney Stella \n", + "\n", + " imUrl salesRank \\\n", + "115 http://ecx.images-amazon.com/images/I/41Rn18Oe... {'Beauty': 10486} \n", + "179 http://ecx.images-amazon.com/images/I/41QWW9v1... {'Beauty': 52254} \n", + "192 http://ecx.images-amazon.com/images/I/51iT2k6L... {'Beauty': 78916} \n", + "555 http://ecx.images-amazon.com/images/I/418LYGLE... {'Beauty': 764} \n", + "587 http://ecx.images-amazon.com/images/I/31L2n60J... {'Beauty': 142503} \n", + "\n", + " categories price \\\n", + "115 [[Beauty, Makeup, Face, Concealers & Neutraliz... 5.04 \n", + "179 [[Beauty, Hair Care, Styling Products, Creams,... 19.99 \n", + "192 [[Beauty, Fragrance, Women's, Eau de Parfum]] 65.86 \n", + "555 [[Beauty, Fragrance, Women's, Eau de Toilette]] 52.33 \n", + "587 [[Beauty, Fragrance, Women's, Eau de Parfum]] NaN \n", + "\n", + " related brand \\\n", + "115 {'also_bought': ['B00KR26VFE', 'B00E7LQHZ0', '... COKA \n", + "179 {'also_bought': ['B0054GLD1U', 'B003BRZCUC', '... Xtreme Brite \n", + "192 {'also_bought': ['B006C5OHSI', 'B006P14842', '... Prada \n", + "555 {'also_bought': ['B007P7OPQQ', 'B0017JT658', '... Versace \n", + "587 {'also_bought': ['B0019M21OQ', 'B000E7YM8K', '... NaN \n", + "\n", + " combined_text \\\n", + "115 Description: An extensive range of 15 multiple... \n", + "179 Description: Xtreme Brite Brightening gel is ... \n", + "192 Description: Prada Candy By Prada Eau De Parfu... \n", + "555 Description: Versace Bright Crystal Perfume fo... \n", + "587 Description: STELLA For Women By STELLA MCCART... \n", + "\n", + " embeddings \n", + "115 [tensor(-0.0002), tensor(0.0026), tensor(0.008... \n", + "179 [tensor(0.0054), tensor(0.0238), tensor(-0.015... \n", + "192 [tensor(-0.0383), tensor(0.0212), tensor(-0.01... \n", + "555 [tensor(0.0284), tensor(0.0173), tensor(0.0334... \n", + "587 [tensor(0.0138), tensor(0.0021), tensor(0.0366... " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "embs = torch.stack(df[\"embeddings\"].tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([12101, 512])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "embs.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'loss': tensor(0.0125, device='cuda:0', grad_fn=),\n", + " 'recon_loss': tensor(0.0051, device='cuda:0'),\n", + " 'rqvae_loss': tensor(0.0074, device='cuda:0'),\n", + " 'unique/0': 31,\n", + " 'unique/1': 79,\n", + " 'unique/2': 46,\n", + " 'unique/3': 102}" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import random\n", + "\n", + "from rqvae import RQVAE\n", + "\n", + "\n", + "rqvae = RQVAE(\n", + " input_dim=embs.shape[1],\n", + " hidden_dim=128,\n", + " beta=0.25,\n", + " codebook_sizes=[256] * 4,\n", + " should_init_codebooks=False,\n", + " should_reinit_unused_clusters=False,\n", + ").to(device)\n", + "\n", + "\n", + "embs = {\"embedding\": embs.to(device)}\n", + "\n", + "rqvae.forward(embs)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "def get_cb_tuples(embeddings):\n", + " ind_lists = []\n", + " for cb in rqvae.codebooks:\n", + " dist = torch.cdist(rqvae.encoder(embeddings), cb)\n", + " ind_lists.append(dist.argmin(dim=-1).cpu().numpy())\n", + "\n", + " return zip(*ind_lists)\n", + "\n", + "\n", + "def search_similar_items(items_with_tuples, clust2search):\n", + " random.shuffle(items_with_tuples)\n", + " cnt = 0\n", + " similars = []\n", + " for item, clust_tuple in items_with_tuples:\n", + " if clust_tuple[: len(clust2search)] == clust2search:\n", + " similars.append((item, clust_tuple))\n", + " cnt += 1\n", + " if cnt >= 5:\n", + " return similars\n", + " return similars" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "cb_tuples = get_cb_tuples(embs[\"embedding\"])\n", + "items_with_tuples = list(zip(df[\"title\"], cb_tuples))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "104\n", + "item='Vasanti Cosmetics Brighten Up! Enzymatic Face Rejuvenator with Microderm Exfoliating Crystals - Treats Dull, Uneven Skintone' clust_tuple=(104, 249, 227, 132)\n", + "item='TEI SPA Oxyderm High Frequency Ozone Facial Tool' clust_tuple=(104, 249, 227, 136)\n", + "item='Jan Marini Benzoyl Peroxide 2.5%-8 oz' clust_tuple=(104, 142, 227, 132)\n", + "111\n", + "item='Babyliss Pro BABNT5548 2000 Watt Ionic Nano Titanium with Integrated Ion Generator Hair Dryer' clust_tuple=(111, 132, 227, 136)\n", + "112\n", + "item='10 Pcs Wearable Nail Soaker Acrylic Polish Remover Tool' clust_tuple=(112, 249, 227, 215)\n", + "item='IBD Just Gel JUPITER BLUE Soak Off Blue Green Nail Polish UV Manicure .5oz Salon' clust_tuple=(112, 249, 227, 136)\n", + "item='Ladies Beauty Box 6 Wheels Combo Set Nail Art Nailart Manicure Rhinestones Glitter Tips Deco + 2x Dotting Pen + Glue' clust_tuple=(112, 58, 227, 215)\n", + "item='Nail Soakers - 10pcs' clust_tuple=(112, 249, 227, 136)\n", + "item='IBD Just Gel GERBER DAISY Soak Off Pink Nail Polish UV Manicure Pedi .5 oz Salon' clust_tuple=(112, 249, 227, 136)\n", + "115\n", + "item='Nail Station' clust_tuple=(115, 249, 227, 136)\n", + "item=\"L'Oreal Paris EverStrong Thickening Shampoo, 8.5 Fluid Ounce\" clust_tuple=(115, 58, 227, 161)\n" + ] + } + ], + "source": [ + "for i in range(100, 120):\n", + " sim = search_similar_items(items_with_tuples, (i,))\n", + " if len(sim) == 0:\n", + " continue\n", + " print(i)\n", + " for item, clust_tuple in sim:\n", + " print(f\"{item=} {clust_tuple=}\")\n", + " \n", + "# TODO fix collisisons (remainder = last embedding, auto-increment 4th id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 1 2 3 0\n", + "# 1 2 3 1\n", + "# 4 5 6 0/2\n", + "# 4 5 6 1/3\n", + "\n", + "# Research last index aggregation\n", + "\n", + "# 1) last index = KMeans(last residuals, n=|last codebook|) - collision\n", + "# 2) auto increment last index (check paper)\n", + "# 3) decoder\n", + "# 4) [(1 2 3), (1 2 3)] single item -> ok\n", + "# 4.1) several -> get embeddings -> score. softmax(collisions), torch.logsoftmax(logits) -> score -> argmax" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# pos emb for item & codebook (000 111 222) - item\n", + "# codebook (012 012 012)\n", + "# splitting item ?" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(df, \"../data/df_with_embs.pt\")" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 361M\n", + "-rw-r--r-- 1 peter peter 53M дек 15 16:23 df_with_embs.pt\n", + "-rw-r--r-- 1 peter peter 154K дек 12 23:55 item_mapping.pkl\n", + "-rw-r--r-- 1 peter peter 95M дек 11 22:19 meta_Beauty.json.gz\n", + "-rw-r--r-- 1 peter peter 79M дек 12 23:37 ratings_Beauty.csv\n", + "-rw-r--r-- 1 peter peter 135M дек 15 15:33 reviews_Beauty_5.json\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + } + ], + "source": [ + "!ls -lh ../data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/main.py b/src/main.py new file mode 100644 index 00000000..21d47550 --- /dev/null +++ b/src/main.py @@ -0,0 +1,46 @@ +import torch +import typing +import random +import os + +from rqvae import RQVAE + +device = torch.device("cuda") + + +def get_cb_tuples(embeddings): + ind_lists = [] + for cb in rqvae.codebooks: + dist = torch.cdist(rqvae.encoder(embeddings), cb) + ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) + + return zip(*ind_lists) + + +def search_similar_items(items_with_tuples): + random.shuffle(items_with_tuples) + clust2search = (585,) + cnt = 0 + for item, clust_tuple in items_with_tuples: + if clust_tuple[: len(clust2search)] == clust2search: + print(item, clust_tuple) + cnt += 1 + if cnt >= 5: + break + + +# TODO: add T5 sentence construction from huggingface + + +embs = {"embedding": []} + +rqvae = RQVAE( + input_dim=200, + hidden_dim=128, + beta=0.25, + codebook_sizes=[256] * 4, + should_init_codebooks=False, + should_reinit_unused_clusters=False, +).to(device) + +rqvae.forward(embs) diff --git a/src/rqvae.py b/src/rqvae.py new file mode 100644 index 00000000..fb57a610 --- /dev/null +++ b/src/rqvae.py @@ -0,0 +1,128 @@ +import torch + +from sklearn.cluster import KMeans + +class RQVAE(torch.nn.Module): + def __init__( + self, + input_dim: int, + hidden_dim: int, + beta: float, + codebook_sizes: list[int], + should_init_codebooks=False, + should_reinit_unused_clusters=False + ): + super().__init__() + + # In original paper it is set to 0.25 + self.register_buffer('beta', torch.tensor(beta)) + + # Kmeans initialization + self.should_init_codebooks = should_init_codebooks + + # Trick with re-initing empty clusters + self.should_reinit_unused_clusters = should_reinit_unused_clusters + + self.mse_loss = torch.nn.MSELoss() + + # Enc and dec are mirrored copies of each other + self.encoder = self.make_encoding_tower(input_dim, hidden_dim) + self.decoder = self.make_encoding_tower(hidden_dim, input_dim) + + # Default initialization of codebook + self.codebooks = torch.nn.ParameterList() + for codebook_size in codebook_sizes: + cb = torch.FloatTensor(codebook_size, hidden_dim) + with torch.no_grad(): + torch.nn.init.trunc_normal_(cb, std=0.02, a=-2 * 0.02, b=2 * 0.02) + self.codebooks.append(cb) + + def make_encoding_tower(self, d1: int, d2: int): + return torch.nn.Linear(d1, d2, bias=False) + + # Get closest index for given embedding + @staticmethod + def get_codebook_indices(remainder, codebook): + dist = torch.cdist(remainder, codebook) + return dist.argmin(dim=-1) + + # Recursive k-means initialization + @staticmethod + def kmeans(embeddings, num_clusters, num_steps=300): + # Just dummy kmeans implementation to get some better initial point + embeddings = torch.nn.functional.normalize(embeddings, dim=-1) # ??? + closest_cluster = torch.randint(0, num_clusters, (embeddings.shape[0], ), device=embeddings.device) + cluster_centers = torch.zeros((num_clusters, embeddings.shape[1]), device=embeddings.device) + for clust_ind in range(num_clusters): + print(clust_ind, (closest_cluster == clust_ind).sum()) + cluster_centers[clust_ind] = embeddings[closest_cluster == clust_ind].mean(dim=0) + + for iter in range(num_steps): + dist = torch.cdist(embeddings, cluster_centers) + closest_cluster = dist.argmin(dim=-1) + print('Kmeans iter:', iter, closest_cluster.shape) + for clust_ind in range(num_clusters): + if clust_ind == 0: + print(clust_ind, (closest_cluster == clust_ind).sum()) + cluster_centers[clust_ind] = embeddings[closest_cluster == clust_ind].mean(dim=0) + + return cluster_centers + + def init_codebooks(self, embeddings): + with torch.no_grad(): + remainder = self.encoder(embeddings) + for codebook in self.codebooks: + codebook.data = self.kmeans(embeddings=remainder, num_clusters=codebook.shape[0]) + codebook_indices = self.get_codebook_indices(remainder, codebook) + codebook_vectors = codebook[codebook_indices] + remainder = remainder - codebook_vectors + + @staticmethod + def reinit_unused_clusters(remainder, codebook, codebook_indices): + with torch.no_grad(): + is_used = torch.full((codebook.shape[0], ), False, device=codebook.device) + unique_indices = codebook_indices.unique() + is_used[unique_indices] = True + rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(), )) + codebook[~is_used] = remainder[rand_input] + + def forward(self, inputs): + embeddings = inputs['embedding'] + if self.should_init_codebooks: + self.init_codebooks(embeddings) + self.should_init_codebooks = False + latent_vector = self.encoder(embeddings) + + latent_restored = 0 + rqvae_loss = 0 + num_unique_clusters = [] + remainder = latent_vector + for codebook in self.codebooks: + codebook_indices = self.get_codebook_indices(remainder, codebook) + codebook_vectors = codebook[codebook_indices] + + if self.should_reinit_unused_clusters: + self.reinit_unused_clusters(remainder, codebook, codebook_indices) + + num_unique_clusters.append(codebook_indices.unique().shape[0]) + rqvae_loss += self.beta * self.mse_loss(remainder, codebook_vectors.detach()) + rqvae_loss += self.mse_loss(codebook_vectors, remainder.detach()) + + latent_restored = latent_restored + codebook_vectors + remainder = remainder - codebook_vectors + + # Here we cast recon loss to latent vector + latent_restored = latent_vector + (latent_restored - latent_vector).detach() + embeddings_restored = self.decoder(latent_restored) + recon_loss = self.mse_loss(embeddings_restored, embeddings) + loss = (recon_loss + rqvae_loss).mean() + + return { + 'loss': loss, + 'recon_loss': recon_loss.mean().detach(), + 'rqvae_loss': rqvae_loss.mean().detach(), + **{ + f'unique/{i}': cnt + for i, cnt in enumerate(num_unique_clusters) + } + } \ No newline at end of file diff --git a/todo.txt b/todo.txt new file mode 100644 index 00000000..1b0975f2 --- /dev/null +++ b/todo.txt @@ -0,0 +1,7 @@ +1) no biases on leave one out strategy (обрезаем по строго временному порогу) +2) data: https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html#:~:text=image%20features-,Beauty,-reviews%20(2%2C023%2C070%20reviews + + +user_id & cb_ids -> repr +last 'seq' prediction +dataloader (semantic ids lens) \ No newline at end of file From 173944c3729a1bd75f489dbfc3ce0c921e0c8c30 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sun, 15 Dec 2024 22:00:34 +0300 Subject: [PATCH 002/175] setup python env for dev --- src/main.ipynb | 308 ++++--------------------------------------------- 1 file changed, 21 insertions(+), 287 deletions(-) diff --git a/src/main.ipynb b/src/main.ipynb index 996961e5..1f212eed 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -19,8 +19,8 @@ "source": [ "def parse(path):\n", " g = gzip.open(path, \"rb\")\n", - " for l in g:\n", - " yield eval(l)\n", + " for line in g:\n", + " yield eval(line)\n", "\n", "\n", "def getDF(path):\n", @@ -37,18 +37,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of unique items: 12101\n", - "Number of unique users: 22363\n" - ] - } - ], + "outputs": [], "source": [ "file_name = \"../data/reviews_Beauty_5.json\"\n", "\n", @@ -67,22 +58,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "12101" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "df = df[df['asin'].isin(unique_items)]\n", + "df = df[df[\"asin\"].isin(unique_items)]\n", "len(df)" ] }, @@ -109,7 +89,7 @@ "outputs": [], "source": [ "def preprocess(row: pd.Series):\n", - " row = row.fillna('empty') # unknown?\n", + " row = row.fillna(\"unknown\") # empty?\n", " # remove column description / title / cat?\n", " return f\"Description: {row['description']}. Title: {row['title']}. Categories: {', '.join(row['categories'][0])}\"\n", "\n", @@ -141,17 +121,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 12101/12101 [01:00<00:00, 199.89it/s]\n" - ] - } - ], + "outputs": [], "source": [ "from tqdm import tqdm\n", "\n", @@ -163,174 +135,9 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
asindescriptiontitleimUrlsalesRankcategoriespricerelatedbrandcombined_textembeddings
1157806397051An extensive range of 15 multiple vibrant long...WAWO 15 Color Professionl Makeup Eyeshadow Cam...http://ecx.images-amazon.com/images/I/41Rn18Oe...{'Beauty': 10486}[[Beauty, Makeup, Face, Concealers & Neutraliz...5.04{'also_bought': ['B00KR26VFE', 'B00E7LQHZ0', '...COKADescription: An extensive range of 15 multiple...[tensor(-0.0002), tensor(0.0026), tensor(0.008...
1799759091062Xtreme Brite Brightening gel is a highly conc...Xtreme Brite Brightening Gel 1oz.http://ecx.images-amazon.com/images/I/41QWW9v1...{'Beauty': 52254}[[Beauty, Hair Care, Styling Products, Creams,...19.99{'also_bought': ['B0054GLD1U', 'B003BRZCUC', '...Xtreme BriteDescription: Xtreme Brite Brightening gel is ...[tensor(0.0054), tensor(0.0238), tensor(-0.015...
1929788072216Prada Candy By Prada Eau De Parfum Spray 1.7 O...Prada Candy By Prada Eau De Parfum Spray 1.7 O...http://ecx.images-amazon.com/images/I/51iT2k6L...{'Beauty': 78916}[[Beauty, Fragrance, Women's, Eau de Parfum]]65.86{'also_bought': ['B006C5OHSI', 'B006P14842', '...PradaDescription: Prada Candy By Prada Eau De Parfu...[tensor(-0.0383), tensor(0.0212), tensor(-0.01...
5559790790961Versace Bright Crystal Perfume for Women 3 oz ...Versace Bright Crystal Eau de Toilette Spray f...http://ecx.images-amazon.com/images/I/418LYGLE...{'Beauty': 764}[[Beauty, Fragrance, Women's, Eau de Toilette]]52.33{'also_bought': ['B007P7OPQQ', 'B0017JT658', '...VersaceDescription: Versace Bright Crystal Perfume fo...[tensor(0.0284), tensor(0.0173), tensor(0.0334...
5879790794231STELLA For Women By STELLA MCCARTNEY 1.7 oz ED...Stella McCartney Stellahttp://ecx.images-amazon.com/images/I/31L2n60J...{'Beauty': 142503}[[Beauty, Fragrance, Women's, Eau de Parfum]]NaN{'also_bought': ['B0019M21OQ', 'B000E7YM8K', '...NaNDescription: STELLA For Women By STELLA MCCART...[tensor(0.0138), tensor(0.0021), tensor(0.0366...
\n", - "
" - ], - "text/plain": [ - " asin description \\\n", - "115 7806397051 An extensive range of 15 multiple vibrant long... \n", - "179 9759091062 Xtreme Brite Brightening gel is a highly conc... \n", - "192 9788072216 Prada Candy By Prada Eau De Parfum Spray 1.7 O... \n", - "555 9790790961 Versace Bright Crystal Perfume for Women 3 oz ... \n", - "587 9790794231 STELLA For Women By STELLA MCCARTNEY 1.7 oz ED... \n", - "\n", - " title \\\n", - "115 WAWO 15 Color Professionl Makeup Eyeshadow Cam... \n", - "179 Xtreme Brite Brightening Gel 1oz. \n", - "192 Prada Candy By Prada Eau De Parfum Spray 1.7 O... \n", - "555 Versace Bright Crystal Eau de Toilette Spray f... \n", - "587 Stella McCartney Stella \n", - "\n", - " imUrl salesRank \\\n", - "115 http://ecx.images-amazon.com/images/I/41Rn18Oe... {'Beauty': 10486} \n", - "179 http://ecx.images-amazon.com/images/I/41QWW9v1... {'Beauty': 52254} \n", - "192 http://ecx.images-amazon.com/images/I/51iT2k6L... {'Beauty': 78916} \n", - "555 http://ecx.images-amazon.com/images/I/418LYGLE... {'Beauty': 764} \n", - "587 http://ecx.images-amazon.com/images/I/31L2n60J... {'Beauty': 142503} \n", - "\n", - " categories price \\\n", - "115 [[Beauty, Makeup, Face, Concealers & Neutraliz... 5.04 \n", - "179 [[Beauty, Hair Care, Styling Products, Creams,... 19.99 \n", - "192 [[Beauty, Fragrance, Women's, Eau de Parfum]] 65.86 \n", - "555 [[Beauty, Fragrance, Women's, Eau de Toilette]] 52.33 \n", - "587 [[Beauty, Fragrance, Women's, Eau de Parfum]] NaN \n", - "\n", - " related brand \\\n", - "115 {'also_bought': ['B00KR26VFE', 'B00E7LQHZ0', '... COKA \n", - "179 {'also_bought': ['B0054GLD1U', 'B003BRZCUC', '... Xtreme Brite \n", - "192 {'also_bought': ['B006C5OHSI', 'B006P14842', '... Prada \n", - "555 {'also_bought': ['B007P7OPQQ', 'B0017JT658', '... Versace \n", - "587 {'also_bought': ['B0019M21OQ', 'B000E7YM8K', '... NaN \n", - "\n", - " combined_text \\\n", - "115 Description: An extensive range of 15 multiple... \n", - "179 Description: Xtreme Brite Brightening gel is ... \n", - "192 Description: Prada Candy By Prada Eau De Parfu... \n", - "555 Description: Versace Bright Crystal Perfume fo... \n", - "587 Description: STELLA For Women By STELLA MCCART... \n", - "\n", - " embeddings \n", - "115 [tensor(-0.0002), tensor(0.0026), tensor(0.008... \n", - "179 [tensor(0.0054), tensor(0.0238), tensor(-0.015... \n", - "192 [tensor(-0.0383), tensor(0.0212), tensor(-0.01... \n", - "555 [tensor(0.0284), tensor(0.0173), tensor(0.0334... \n", - "587 [tensor(0.0138), tensor(0.0021), tensor(0.0366... " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df.head()" ] @@ -346,46 +153,18 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([12101, 512])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "embs.shape" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'loss': tensor(0.0125, device='cuda:0', grad_fn=),\n", - " 'recon_loss': tensor(0.0051, device='cuda:0'),\n", - " 'rqvae_loss': tensor(0.0074, device='cuda:0'),\n", - " 'unique/0': 31,\n", - " 'unique/1': 79,\n", - " 'unique/2': 46,\n", - " 'unique/3': 102}" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import random\n", "\n", @@ -449,29 +228,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "104\n", - "item='Vasanti Cosmetics Brighten Up! Enzymatic Face Rejuvenator with Microderm Exfoliating Crystals - Treats Dull, Uneven Skintone' clust_tuple=(104, 249, 227, 132)\n", - "item='TEI SPA Oxyderm High Frequency Ozone Facial Tool' clust_tuple=(104, 249, 227, 136)\n", - "item='Jan Marini Benzoyl Peroxide 2.5%-8 oz' clust_tuple=(104, 142, 227, 132)\n", - "111\n", - "item='Babyliss Pro BABNT5548 2000 Watt Ionic Nano Titanium with Integrated Ion Generator Hair Dryer' clust_tuple=(111, 132, 227, 136)\n", - "112\n", - "item='10 Pcs Wearable Nail Soaker Acrylic Polish Remover Tool' clust_tuple=(112, 249, 227, 215)\n", - "item='IBD Just Gel JUPITER BLUE Soak Off Blue Green Nail Polish UV Manicure .5oz Salon' clust_tuple=(112, 249, 227, 136)\n", - "item='Ladies Beauty Box 6 Wheels Combo Set Nail Art Nailart Manicure Rhinestones Glitter Tips Deco + 2x Dotting Pen + Glue' clust_tuple=(112, 58, 227, 215)\n", - "item='Nail Soakers - 10pcs' clust_tuple=(112, 249, 227, 136)\n", - "item='IBD Just Gel GERBER DAISY Soak Off Pink Nail Polish UV Manicure Pedi .5 oz Salon' clust_tuple=(112, 249, 227, 136)\n", - "115\n", - "item='Nail Station' clust_tuple=(115, 249, 227, 136)\n", - "item=\"L'Oreal Paris EverStrong Thickening Shampoo, 8.5 Fluid Ounce\" clust_tuple=(115, 58, 227, 161)\n" - ] - } - ], + "outputs": [], "source": [ "for i in range(100, 120):\n", " sim = search_similar_items(items_with_tuples, (i,))\n", @@ -480,7 +237,7 @@ " print(i)\n", " for item, clust_tuple in sim:\n", " print(f\"{item=} {clust_tuple=}\")\n", - " \n", + "\n", "# TODO fix collisisons (remainder = last embedding, auto-increment 4th id)" ] }, @@ -526,32 +283,9 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "total 361M\n", - "-rw-r--r-- 1 peter peter 53M дек 15 16:23 df_with_embs.pt\n", - "-rw-r--r-- 1 peter peter 154K дек 12 23:55 item_mapping.pkl\n", - "-rw-r--r-- 1 peter peter 95M дек 11 22:19 meta_Beauty.json.gz\n", - "-rw-r--r-- 1 peter peter 79M дек 12 23:37 ratings_Beauty.csv\n", - "-rw-r--r-- 1 peter peter 135M дек 15 15:33 reviews_Beauty_5.json\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - } - ], + "outputs": [], "source": [ "!ls -lh ../data" ] @@ -580,7 +314,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.12.7" } }, "nbformat": 4, From 7e11d9a864f9c4e16cf40553d7acbf563d6f91c9 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 18 Dec 2024 20:26:03 +0300 Subject: [PATCH 003/175] use faiss as init codebook --- src/main.ipynb | 332 +++++++++++++++++++++++++--------------------- src/rqvae.py | 83 +++++------- src/rqvae_data.py | 79 +++++++++++ 3 files changed, 296 insertions(+), 198 deletions(-) create mode 100644 src/rqvae_data.py diff --git a/src/main.ipynb b/src/main.ipynb index 1f212eed..7203227e 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -4,147 +4,27 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import json\n", - "import gzip" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def parse(path):\n", - " g = gzip.open(path, \"rb\")\n", - " for line in g:\n", - " yield eval(line)\n", - "\n", - "\n", - "def getDF(path):\n", - " i = 0\n", - " df = {}\n", - " for d in parse(path):\n", - " df[i] = d\n", - " i += 1\n", - " return pd.DataFrame.from_dict(df, orient=\"index\")\n", - "\n", - "\n", - "df = getDF(\"../data/meta_Beauty.json.gz\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "file_name = \"../data/reviews_Beauty_5.json\"\n", - "\n", - "unique_items = set()\n", - "unique_users = set()\n", - "\n", - "with open(file_name, \"r\") as file:\n", - " for line in file:\n", - " review = json.loads(line.strip())\n", - " unique_items.add(review[\"asin\"])\n", - " unique_users.add(review[\"reviewerID\"])\n", - "\n", - "print(f\"Number of unique items: {len(unique_items)}\")\n", - "print(f\"Number of unique users: {len(unique_users)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df = df[df[\"asin\"].isin(unique_items)]\n", - "len(df)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/peter/university/diploma/GSRec/src/rqvae_data.py:77: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " df = torch.load(\"../data/df_with_embs.pt\")\n" + ] + } + ], "source": [ - "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n", "import torch\n", "\n", - "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - "model_name = \"google-t5/t5-small\"\n", - "\n", - "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", - "model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "def preprocess(row: pd.Series):\n", - " row = row.fillna(\"unknown\") # empty?\n", - " # remove column description / title / cat?\n", - " return f\"Description: {row['description']}. Title: {row['title']}. Categories: {', '.join(row['categories'][0])}\"\n", - "\n", - "\n", - "df[\"combined_text\"] = df.apply(preprocess, axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "def encode_text(text):\n", - " enc = tokenizer(text, return_tensors=\"pt\", truncation=True).to(device)\n", - "\n", - " output = model.encoder(\n", - " input_ids=enc[\"input_ids\"],\n", - " attention_mask=enc[\"attention_mask\"],\n", - " return_dict=True,\n", - " )\n", - "\n", - " embeddings = output.last_hidden_state.mean(\n", - " dim=1\n", - " ).squeeze() # mean over all tokens (mb CLS?)\n", - "\n", - " return embeddings.cpu().detach()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tqdm import tqdm\n", - "\n", - "tqdm.pandas()\n", + "from rqvae_data import get_data\n", "\n", - "with torch.no_grad():\n", - " df[\"embeddings\"] = df[\"combined_text\"].progress_apply(encode_text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df.head()" + "df = get_data()" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -153,42 +33,79 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([12101, 512])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "embs.shape" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 4/4 [00:08<00:00, 2.07s/it]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'loss': tensor(0.0057, device='cuda:0', grad_fn=),\n", + " 'recon_loss': tensor(0.0052, device='cuda:0'),\n", + " 'rqvae_loss': tensor(0.0005, device='cuda:0'),\n", + " 'unique/0': 256,\n", + " 'unique/1': 256,\n", + " 'unique/2': 256,\n", + " 'unique/3': 256}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import random\n", "\n", "from rqvae import RQVAE\n", "\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", "\n", "rqvae = RQVAE(\n", " input_dim=embs.shape[1],\n", " hidden_dim=128,\n", " beta=0.25,\n", " codebook_sizes=[256] * 4,\n", - " should_init_codebooks=False,\n", + " should_init_codebooks=True,\n", " should_reinit_unused_clusters=False,\n", ").to(device)\n", "\n", "\n", - "embs = {\"embedding\": embs.to(device)}\n", + "embs_dict = {\"embedding\": embs.to(device)}\n", "\n", - "rqvae.forward(embs)" + "rqvae.forward(embs_dict)" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -201,7 +118,7 @@ " return zip(*ind_lists)\n", "\n", "\n", - "def search_similar_items(items_with_tuples, clust2search):\n", + "def search_similar_items(items_with_tuples, clust2search, max_cnt=5):\n", " random.shuffle(items_with_tuples)\n", " cnt = 0\n", " similars = []\n", @@ -209,29 +126,146 @@ " if clust_tuple[: len(clust2search)] == clust2search:\n", " similars.append((item, clust_tuple))\n", " cnt += 1\n", - " if cnt >= 5:\n", + " if cnt >= max_cnt:\n", " return similars\n", " return similars" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "cb_tuples = get_cb_tuples(embs[\"embedding\"])\n", + "cb_tuples = get_cb_tuples(embs_dict[\"embedding\"])\n", "items_with_tuples = list(zip(df[\"title\"], cb_tuples))" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "220\n", + "item='Fairy Dust by Paris Hilton for Women - 3.4 Ounce EDP Spray' clust_tuple=(220, 212, 67, 88)\n", + "item='D & G Light Blue By Dolce & Gabbana For Men Eau De Toilette Spray, 4.2-Ounces' clust_tuple=(220, 212, 25, 49)\n", + "item='Halle Pure Orchid by Halle Berry Eau De Parfum Spray for Women, 1 Ounce' clust_tuple=(220, 212, 25, 88)\n", + "item='Armani Code By Giorgio Armani For Men. Eau De Toilette Spray 1.7 Ounces' clust_tuple=(220, 212, 25, 88)\n", + "item='Taj Sunset by Escada for Women, Eau de Toilette Spray, 3.4 Ounce' clust_tuple=(220, 212, 25, 200)\n", + "item='Tom Ford Black Orchid By Tom Ford For Women. Eau De Parfum Spray 3.4-Ounces' clust_tuple=(220, 212, 67, 88)\n", + "item='Beyonce Heat Rush by Beyonce, 3.4 Ounce' clust_tuple=(220, 62, 67, 200)\n", + "item='In Control Curious by Britney Spears for Women, Eau De Parfum Spray, 1.7 Ounce' clust_tuple=(220, 212, 25, 49)\n", + "item='Lacoste Style In Play By Lacoste For Men. Eau De Toilette Spray 1.6 Ounces' clust_tuple=(220, 212, 25, 88)\n", + "item='Very Irresistible Sensual By Givenchy For Women. Eau De Parfum Spray 1.7 Ounces' clust_tuple=(220, 212, 25, 88)\n", + "221\n", + "item='HD High-Definition Super Palettes (Super Palette- Warm)' clust_tuple=(221, 196, 121, 88)\n", + "item='Coastal Scents Go Makeup Palette, Moscow, 0.28 Oz' clust_tuple=(221, 62, 121, 10)\n", + "item='Coastal Scents Go Makeup Palette, Cairo, 0.28 Ounce' clust_tuple=(221, 196, 121, 10)\n", + "item='Coastal Scents Go Makeup Palette, London, 0.28 Oz' clust_tuple=(221, 196, 8, 10)\n", + "item='TEMPTU AIRbrush Makeup System 2.0 and Signature Starter Kit, Fair' clust_tuple=(221, 214, 195, 10)\n", + "item='Urban Decay Deluxe Shadow Box' clust_tuple=(221, 214, 121, 10)\n", + "item='Coastal Scents 88 Palette, Ultra Shimmer' clust_tuple=(221, 209, 195, 208)\n", + "item='Coastal Scents Go Makeup Palette, Sydney, 0.28 Ounce' clust_tuple=(221, 196, 121, 10)\n", + "item='NICKA K LIPSTICK WITH VITAMIN E MOODY BLACK #992' clust_tuple=(221, 196, 205, 163)\n", + "item='SHANY Glamour Girl Makeup Kit - 48 Eyeshadow / 4 Blush /2 Powder' clust_tuple=(221, 196, 121, 163)\n", + "222\n", + "item='Maybelline New York Instant Age Rewind Eraser Treatment Makeup, Medium Beige 300, 0.68 Fluid Ounce' clust_tuple=(222, 114, 196, 88)\n", + "item='Garnier Ultra-Lift 2-in-1 Wrinkle Reducer Serum and Moisturizer for Wrinkles and Firming, 1.7 Fluid Ounce' clust_tuple=(222, 214, 25, 88)\n", + "item='Hydrating with Peptides - A Renewal Complex - 1oz/30ml - A Professionally Formulated Combination of Unique Patented Peptides ArgirelineTM, Matrixyl® 3000, and Syn®-coll, Synergistically Work to Reduce Fine Lines and Wrinkles' clust_tuple=(222, 214, 25, 88)\n", + "item='Prevage MD Anti-Aging Treatment 30ml 1 Fluid Ounce' clust_tuple=(222, 196, 25, 88)\n", + "item=\"L'Oreal Paris Visible Lift Serum Absolute Advanced Age-Reversing Makeup, Nude Beige, 1.0 Ounces\" clust_tuple=(222, 196, 25, 88)\n", + "item='Keys Solar Rx Broad Spectrum SPF 30 Sunblock 3.4oz lotion by Keys Care' clust_tuple=(222, 112, 196, 88)\n", + "item='Eclos Restorative Eye Cream, 0.5-Ounce' clust_tuple=(222, 62, 25, 88)\n", + "item='New Mary Kay TimeWise Repair Volu-Firm 5 Product Set Adv Skin Care Full Size (Large)' clust_tuple=(222, 62, 25, 88)\n", + "item='LifeCell All In One Anti-Aging Treatment 2.54 oz' clust_tuple=(222, 62, 8, 88)\n", + "item='Bare Escentuals Active Cell Renewal Night Serum 1oz./30ml' clust_tuple=(222, 7, 25, 88)\n", + "223\n", + "item=\"OPI Euro Centrale Collection 2013, You're Such A Budapest\" clust_tuple=(223, 116, 110, 163)\n", + "item='Opi San Francisco Collection Fall & Winter 2013 Dinng Al Frisco' clust_tuple=(223, 116, 110, 49)\n", + "item='OPI The Amazing New Spider-Man Collection, My Boyfriend Scales Walls' clust_tuple=(223, 116, 110, 208)\n", + "item='Gelish - The Shadows Collection - The Perfect Silhouette # 01460' clust_tuple=(223, 116, 25, 208)\n", + "item='Gelish Holiday Collection - Just What I Wanted #01551 - 0.5oz' clust_tuple=(223, 116, 25, 208)\n", + "item='OPI Sheer Tints, Sheer Mini Hint of Tints' clust_tuple=(223, 110, 110, 208)\n", + "item='Cover Girl Invisible Cream Concealer, Tawny 185 -1 Ea' clust_tuple=(223, 116, 25, 208)\n", + "item='China Glaze Velvet Bow 1017/80517' clust_tuple=(223, 116, 25, 208)\n", + "item='Revlon Luxurious Color Satin Eye Shadow, Nude Slip, 0.08 Ounce' clust_tuple=(223, 116, 25, 208)\n", + "item=\"Harmony Gelish I'm Brighter Than You - #01559\" clust_tuple=(223, 110, 25, 49)\n", + "224\n", + "item='Paris Hilton Tease Women Eau De Parfum Spray, 1 Ounce' clust_tuple=(224, 214, 224, 163)\n", + "item='Pure Dkny Eau De Parfum Spray by Donna Karan, 3.4 Ounce' clust_tuple=(224, 110, 8, 163)\n", + "item='MARC JACOBS DAISY by Marc Jacobs EDT SPRAY 3.4 OZ' clust_tuple=(224, 214, 110, 10)\n", + "item='Fresh Eau de Parfum, Sugar Lemon, 1 oz' clust_tuple=(224, 110, 110, 163)\n", + "item='Calvin Klein One Shock for Him Men Eau De Toilette Spray, 3.4 Ounce' clust_tuple=(224, 110, 229, 163)\n", + "item='DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ' clust_tuple=(224, 110, 8, 163)\n", + "item='Guess By Parlux Fragrances For Women. Eau De Parfum Spray 2.5 Oz' clust_tuple=(224, 62, 8, 163)\n", + "item='Jimmy Choo Flash Eau de Parfum Spray for Women, 2 Ounce' clust_tuple=(224, 110, 25, 163)\n", + "item='Diesel Fuel For Life by Diesel For Men. Eau De Toilette Spray 1.7-Ounces' clust_tuple=(224, 110, 8, 163)\n", + "item='Millesime Imperial By Creed For Men. Millesime Spray 4.0-Ounce Bottle' clust_tuple=(224, 110, 8, 163)\n", + "225\n", + "item='TIGI Bed Head Manipulator Styling Cream 2.0 oz.' clust_tuple=(225, 110, 110, 208)\n", + "item='DEVA CURL Flexible Hold Hair Spray 10oz' clust_tuple=(225, 224, 8, 200)\n", + "item=\"Givenchy Phenomen'Eyes Mascara 1 Phenomen'Black 0.24 oz\" clust_tuple=(225, 214, 110, 208)\n", + "item='Macadamia Natural Oil Oil Infused Brush Set' clust_tuple=(225, 196, 25, 208)\n", + "item='Neutrogena Clean Replenishing Conditioner, 10.1 Ounce' clust_tuple=(225, 110, 25, 10)\n", + "item='Pump for 16 oz. Jar' clust_tuple=(225, 110, 110, 215)\n", + "item='China Glaze: Pink Voltage, 0.5 oz' clust_tuple=(225, 110, 151, 49)\n", + "item='S-Curl Activator and Moisturizer 32 oz' clust_tuple=(225, 110, 252, 200)\n", + "item='Jan Marini Antioxidant Daily Face Protectant SPF 30, Tinted, 2 oz' clust_tuple=(225, 110, 25, 188)\n", + "item='Olay Regenerist Micro Sculpting Cream - 1.7 oz' clust_tuple=(225, 110, 25, 163)\n", + "226\n", + "item='SODIAL(TM) Stainless Steel Extension Eyelash Applicator Tool Fish Tail Clip' clust_tuple=(226, 155, 67, 200)\n", + "item='E.l.f. Eyelash Curler' clust_tuple=(226, 209, 252, 88)\n", + "item='Red Cherry #138 False Eyelashes (Pack of 6 Pairs)' clust_tuple=(226, 226, 195, 200)\n", + "item='Ardell Fashion Lashes Pair - 113 (Pack of 4)' clust_tuple=(226, 155, 25, 208)\n", + "item='Makeup Geek - Pointed Crease Brush' clust_tuple=(226, 212, 252, 239)\n", + "item='10 Pairs of Reusable Thick False Eyelashes' clust_tuple=(226, 209, 252, 208)\n", + "item='Ardell Fashion Lashes Pair - 105 (Pack of 4)' clust_tuple=(226, 155, 25, 208)\n", + "item=\"Winstonia's 50 Pairs False Eyelashes Fake Lashes Bundle Set w/ Adhesive - Natural, Thick, Criss-Cross Designs for Day & Night\" clust_tuple=(226, 155, 25, 200)\n", + "item='Ardell Fashion Lashes - 120 Black Demi' clust_tuple=(226, 155, 25, 208)\n", + "item='10 Pairs of Long Black False Eyelashes Eye Lashes Makeup, Professional, Thin and Wispy' clust_tuple=(226, 209, 252, 200)\n", + "227\n", + "item='Joico K-Pak Intense Hydrator Treatment, 8.5 Ounce' clust_tuple=(227, 227, 25, 88)\n", + "item='Elasta Qp Soy Oyl UltraHydration Deep Conditioner, 32 oz' clust_tuple=(227, 4, 25, 163)\n", + "item='Biolage by Matrix Ultra-Hydrating Conditioning Balm 16.9 Ounces' clust_tuple=(227, 110, 25, 215)\n", + "item='Beautiful Collection Semi-Permanent Haircolor 175W Wine Brown' clust_tuple=(227, 62, 25, 200)\n", + "item='DIANE Imported Pure Bristle Professional Military Hair Brush (Model: 8114)' clust_tuple=(227, 110, 25, 255)\n", + "item='Kerastase Nutritive Bain Oleo-Relax Smoothing Shampoo For Dry and Rebellious Hair, 8.5 Ounce' clust_tuple=(227, 4, 25, 255)\n", + "item='Color Brilliance Permanent Creme Hair Color' clust_tuple=(227, 110, 8, 255)\n", + "item='Herbal Essesnces None of Your Frizzness Smoothing Conditioner By Clairol, 10.1 Ounce' clust_tuple=(227, 155, 25, 208)\n", + "item='Seche Vite Top Coat Professional Kit Size 4 oz' clust_tuple=(227, 110, 25, 200)\n", + "item='Doo Gro Stimulating Growth Oil' clust_tuple=(227, 110, 25, 163)\n", + "228\n", + "item='Clinique Even Better Eyes Dark Circle Corrector for Unisex, All Skin Types, 0.34 Ounce' clust_tuple=(228, 110, 25, 208)\n", + "item='Premier Dead Sea Eye Care Set(eye Serum + Eye Cream)' clust_tuple=(228, 20, 67, 77)\n", + "item='Avon Anew Genics Eye Treatment 0.5 oz' clust_tuple=(228, 110, 25, 239)\n", + "item='Image Skin Care Ageless Total Skin Bleaching Serum 1 oz' clust_tuple=(228, 110, 8, 239)\n", + "item=\"L'Oreal Infallible Eyeshadow, Gold Imperial 407\" clust_tuple=(228, 110, 8, 163)\n", + "item='vbeauté Eye Never Nourishing DNA Repair Eye Crème, 0.5 Ounce' clust_tuple=(228, 203, 203, 239)\n", + "item='Loreal Limited Edition Infallible Eyeshadow - 607 Blinged & Brilliant' clust_tuple=(228, 110, 8, 208)\n", + "item='Mary Kay® Ultimate MascaraTM: Black, 0.28 oz' clust_tuple=(228, 110, 8, 163)\n", + "item='Embryolisse Lait Crème Concentré 75 Ml(concentrated Creamy Lotion) 75 Ml' clust_tuple=(228, 110, 203, 239)\n", + "item=\"Skin Genesis Daily Eye Treatment Eye Serum Women Treatment by L'Oreal, 0.5 Ounce\" clust_tuple=(228, 110, 8, 208)\n", + "229\n", + "item='Debra Lynn Professional Plastic Cuticle Pusher' clust_tuple=(229, 110, 25, 239)\n", + "item='1800pcs Nail Art Rhinestones Round 1.5mm' clust_tuple=(229, 116, 110, 8)\n", + "item='OPI Nail Lacquer - Russian Navy Suede - 0.5 oz' clust_tuple=(229, 116, 25, 88)\n", + "item='gelish a petal for your thoughts 463 2013' clust_tuple=(229, 116, 110, 255)\n", + "item='144pcs Fimo Slice Lovely Animal Nail Art Decoration' clust_tuple=(229, 116, 194, 163)\n", + "item='Kleancolor Neon Night Life mini collection' clust_tuple=(229, 116, 25, 239)\n", + "item='Seche Nail Lacquer Lumiere' clust_tuple=(229, 116, 194, 255)\n", + "item='OPI RapiDry Spray Nail Polish Dryer' clust_tuple=(229, 110, 25, 255)\n", + "item='Essie Nail Color trophy wife 774' clust_tuple=(229, 116, 25, 239)\n", + "item='Orly Nail Bonder Nail Treatment-0.6 oz' clust_tuple=(229, 116, 229, 255)\n" + ] + } + ], "source": [ - "for i in range(100, 120):\n", - " sim = search_similar_items(items_with_tuples, (i,))\n", + "for i in range(220, 230):\n", + " sim = search_similar_items(items_with_tuples, (i,), 10)\n", " if len(sim) == 0:\n", " continue\n", " print(i)\n", diff --git a/src/rqvae.py b/src/rqvae.py index fb57a610..9f98b99f 100644 --- a/src/rqvae.py +++ b/src/rqvae.py @@ -1,27 +1,29 @@ import torch -from sklearn.cluster import KMeans +from tqdm import tqdm +import faiss + class RQVAE(torch.nn.Module): def __init__( - self, - input_dim: int, - hidden_dim: int, - beta: float, - codebook_sizes: list[int], - should_init_codebooks=False, - should_reinit_unused_clusters=False - ): + self, + input_dim: int, + hidden_dim: int, + beta: float, + codebook_sizes: list[int], + should_init_codebooks=False, + should_reinit_unused_clusters=False, + ): super().__init__() # In original paper it is set to 0.25 - self.register_buffer('beta', torch.tensor(beta)) + self.register_buffer("beta", torch.tensor(beta)) # Kmeans initialization self.should_init_codebooks = should_init_codebooks # Trick with re-initing empty clusters - self.should_reinit_unused_clusters = should_reinit_unused_clusters + self.should_reinit_unused_clusters = should_reinit_unused_clusters self.mse_loss = torch.nn.MSELoss() @@ -39,40 +41,24 @@ def __init__( def make_encoding_tower(self, d1: int, d2: int): return torch.nn.Linear(d1, d2, bias=False) - - # Get closest index for given embedding + @staticmethod def get_codebook_indices(remainder, codebook): dist = torch.cdist(remainder, codebook) return dist.argmin(dim=-1) - # Recursive k-means initialization - @staticmethod - def kmeans(embeddings, num_clusters, num_steps=300): - # Just dummy kmeans implementation to get some better initial point - embeddings = torch.nn.functional.normalize(embeddings, dim=-1) # ??? - closest_cluster = torch.randint(0, num_clusters, (embeddings.shape[0], ), device=embeddings.device) - cluster_centers = torch.zeros((num_clusters, embeddings.shape[1]), device=embeddings.device) - for clust_ind in range(num_clusters): - print(clust_ind, (closest_cluster == clust_ind).sum()) - cluster_centers[clust_ind] = embeddings[closest_cluster == clust_ind].mean(dim=0) - - for iter in range(num_steps): - dist = torch.cdist(embeddings, cluster_centers) - closest_cluster = dist.argmin(dim=-1) - print('Kmeans iter:', iter, closest_cluster.shape) - for clust_ind in range(num_clusters): - if clust_ind == 0: - print(clust_ind, (closest_cluster == clust_ind).sum()) - cluster_centers[clust_ind] = embeddings[closest_cluster == clust_ind].mean(dim=0) - - return cluster_centers - def init_codebooks(self, embeddings): with torch.no_grad(): remainder = self.encoder(embeddings) - for codebook in self.codebooks: - codebook.data = self.kmeans(embeddings=remainder, num_clusters=codebook.shape[0]) + for codebook in tqdm(self.codebooks): + embeddings_np = remainder.cpu().numpy() + n_clusters = codebook.shape[0] + + kmeans = faiss.Kmeans(d=embeddings_np.shape[1], k=n_clusters, niter=100) + kmeans.train(embeddings_np) + + codebook.data = torch.from_numpy(kmeans.centroids).to(codebook.device) + codebook_indices = self.get_codebook_indices(remainder, codebook) codebook_vectors = codebook[codebook_indices] remainder = remainder - codebook_vectors @@ -80,14 +66,14 @@ def init_codebooks(self, embeddings): @staticmethod def reinit_unused_clusters(remainder, codebook, codebook_indices): with torch.no_grad(): - is_used = torch.full((codebook.shape[0], ), False, device=codebook.device) + is_used = torch.full((codebook.shape[0],), False, device=codebook.device) unique_indices = codebook_indices.unique() is_used[unique_indices] = True - rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(), )) + rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) codebook[~is_used] = remainder[rand_input] def forward(self, inputs): - embeddings = inputs['embedding'] + embeddings = inputs["embedding"] if self.should_init_codebooks: self.init_codebooks(embeddings) self.should_init_codebooks = False @@ -105,7 +91,9 @@ def forward(self, inputs): self.reinit_unused_clusters(remainder, codebook, codebook_indices) num_unique_clusters.append(codebook_indices.unique().shape[0]) - rqvae_loss += self.beta * self.mse_loss(remainder, codebook_vectors.detach()) + rqvae_loss += self.beta * self.mse_loss( + remainder, codebook_vectors.detach() + ) rqvae_loss += self.mse_loss(codebook_vectors, remainder.detach()) latent_restored = latent_restored + codebook_vectors @@ -118,11 +106,8 @@ def forward(self, inputs): loss = (recon_loss + rqvae_loss).mean() return { - 'loss': loss, - 'recon_loss': recon_loss.mean().detach(), - 'rqvae_loss': rqvae_loss.mean().detach(), - **{ - f'unique/{i}': cnt - for i, cnt in enumerate(num_unique_clusters) - } - } \ No newline at end of file + "loss": loss, + "recon_loss": recon_loss.mean().detach(), + "rqvae_loss": rqvae_loss.mean().detach(), + **{f"unique/{i}": cnt for i, cnt in enumerate(num_unique_clusters)}, + } diff --git a/src/rqvae_data.py b/src/rqvae_data.py new file mode 100644 index 00000000..28b8f799 --- /dev/null +++ b/src/rqvae_data.py @@ -0,0 +1,79 @@ +import pandas as pd +import json +import gzip +from transformers import AutoTokenizer, AutoModelForSeq2SeqLM +import torch + +from tqdm import tqdm + +tqdm.pandas() + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +model_name = "google-t5/t5-small" + +tokenizer = AutoTokenizer.from_pretrained(model_name) +model = AutoModelForSeq2SeqLM.from_pretrained(model_name).to(device) + + +def parse(path): + g = gzip.open(path, "rb") + for line in g: + yield eval(line) + + +def getDF(path): + i = 0 + df = {} + for d in parse(path): + df[i] = d + i += 1 + return pd.DataFrame.from_dict(df, orient="index") + + +def encode_text(text): + enc = tokenizer(text, return_tensors="pt", truncation=True).to(device) + + output = model.encoder( + input_ids=enc["input_ids"], + attention_mask=enc["attention_mask"], + return_dict=True, + ) + + embeddings = output.last_hidden_state.mean( + dim=1 + ).squeeze() # mean over all tokens (mb CLS?) + + return embeddings.cpu().detach() + + +def preprocess(row: pd.Series): + row = row.fillna("unknown") # empty? + # remove column description / title / cat? + return f"Description: {row['description']}. Title: {row['title']}. Categories: {', '.join(row['categories'][0])}" + + +def get_data(cached=True): + if not cached: + df = getDF("../data/meta_Beauty.json.gz") + + file_name = "../data/reviews_Beauty_5.json" + + unique_items = set() + unique_users = set() + + with open(file_name, "r") as file: + for line in file: + review = json.loads(line.strip()) + unique_items.add(review["asin"]) + unique_users.add(review["reviewerID"]) + + df = df[df["asin"].isin(unique_items)] + + df["combined_text"] = df.apply(preprocess, axis=1) + + with torch.no_grad(): + df["embeddings"] = df["combined_text"].progress_apply(encode_text) + else: + df = torch.load("../data/df_with_embs.pt") + + return df From d1c2a9d97f8612c94a06f87efafcce607a0b8877 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 18 Dec 2024 21:40:49 +0300 Subject: [PATCH 004/175] use conda env --- src/main.ipynb | 318 ++++++++++++++++++---------------------------- src/rqvae.py | 9 +- src/rqvae_data.py | 27 +++- todo.txt | 23 ++++ 4 files changed, 180 insertions(+), 197 deletions(-) diff --git a/src/main.ipynb b/src/main.ipynb index 7203227e..f63aae02 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -4,16 +4,7 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/peter/university/diploma/GSRec/src/rqvae_data.py:77: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " df = torch.load(\"../data/df_with_embs.pt\")\n" - ] - } - ], + "outputs": [], "source": [ "import torch\n", "\n", @@ -60,7 +51,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 4/4 [00:08<00:00, 2.07s/it]\n" + "100%|██████████| 4/4 [00:07<00:00, 2.00s/it]\n" ] }, { @@ -81,8 +72,6 @@ } ], "source": [ - "import random\n", - "\n", "from rqvae import RQVAE\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", @@ -109,190 +98,146 @@ "metadata": {}, "outputs": [], "source": [ - "def get_cb_tuples(embeddings):\n", - " ind_lists = []\n", - " for cb in rqvae.codebooks:\n", - " dist = torch.cdist(rqvae.encoder(embeddings), cb)\n", - " ind_lists.append(dist.argmin(dim=-1).cpu().numpy())\n", - "\n", - " return zip(*ind_lists)\n", + "from rqvae_data import get_cb_tuples\n", "\n", "\n", - "def search_similar_items(items_with_tuples, clust2search, max_cnt=5):\n", - " random.shuffle(items_with_tuples)\n", - " cnt = 0\n", - " similars = []\n", - " for item, clust_tuple in items_with_tuples:\n", - " if clust_tuple[: len(clust2search)] == clust2search:\n", - " similars.append((item, clust_tuple))\n", - " cnt += 1\n", - " if cnt >= max_cnt:\n", - " return similars\n", - " return similars" + "cb_tuples = get_cb_tuples(rqvae, embs_dict[\"embedding\"])\n", + "items_with_tuples = list(zip(df[\"title\"].fillna(\"unknown\"), cb_tuples))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, - "outputs": [], - "source": [ - "cb_tuples = get_cb_tuples(embs_dict[\"embedding\"])\n", - "items_with_tuples = list(zip(df[\"title\"], cb_tuples))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "220\n", - "item='Fairy Dust by Paris Hilton for Women - 3.4 Ounce EDP Spray' clust_tuple=(220, 212, 67, 88)\n", - "item='D & G Light Blue By Dolce & Gabbana For Men Eau De Toilette Spray, 4.2-Ounces' clust_tuple=(220, 212, 25, 49)\n", - "item='Halle Pure Orchid by Halle Berry Eau De Parfum Spray for Women, 1 Ounce' clust_tuple=(220, 212, 25, 88)\n", - "item='Armani Code By Giorgio Armani For Men. Eau De Toilette Spray 1.7 Ounces' clust_tuple=(220, 212, 25, 88)\n", - "item='Taj Sunset by Escada for Women, Eau de Toilette Spray, 3.4 Ounce' clust_tuple=(220, 212, 25, 200)\n", - "item='Tom Ford Black Orchid By Tom Ford For Women. Eau De Parfum Spray 3.4-Ounces' clust_tuple=(220, 212, 67, 88)\n", - "item='Beyonce Heat Rush by Beyonce, 3.4 Ounce' clust_tuple=(220, 62, 67, 200)\n", - "item='In Control Curious by Britney Spears for Women, Eau De Parfum Spray, 1.7 Ounce' clust_tuple=(220, 212, 25, 49)\n", - "item='Lacoste Style In Play By Lacoste For Men. Eau De Toilette Spray 1.6 Ounces' clust_tuple=(220, 212, 25, 88)\n", - "item='Very Irresistible Sensual By Givenchy For Women. Eau De Parfum Spray 1.7 Ounces' clust_tuple=(220, 212, 25, 88)\n", - "221\n", - "item='HD High-Definition Super Palettes (Super Palette- Warm)' clust_tuple=(221, 196, 121, 88)\n", - "item='Coastal Scents Go Makeup Palette, Moscow, 0.28 Oz' clust_tuple=(221, 62, 121, 10)\n", - "item='Coastal Scents Go Makeup Palette, Cairo, 0.28 Ounce' clust_tuple=(221, 196, 121, 10)\n", - "item='Coastal Scents Go Makeup Palette, London, 0.28 Oz' clust_tuple=(221, 196, 8, 10)\n", - "item='TEMPTU AIRbrush Makeup System 2.0 and Signature Starter Kit, Fair' clust_tuple=(221, 214, 195, 10)\n", - "item='Urban Decay Deluxe Shadow Box' clust_tuple=(221, 214, 121, 10)\n", - "item='Coastal Scents 88 Palette, Ultra Shimmer' clust_tuple=(221, 209, 195, 208)\n", - "item='Coastal Scents Go Makeup Palette, Sydney, 0.28 Ounce' clust_tuple=(221, 196, 121, 10)\n", - "item='NICKA K LIPSTICK WITH VITAMIN E MOODY BLACK #992' clust_tuple=(221, 196, 205, 163)\n", - "item='SHANY Glamour Girl Makeup Kit - 48 Eyeshadow / 4 Blush /2 Powder' clust_tuple=(221, 196, 121, 163)\n", - "222\n", - "item='Maybelline New York Instant Age Rewind Eraser Treatment Makeup, Medium Beige 300, 0.68 Fluid Ounce' clust_tuple=(222, 114, 196, 88)\n", - "item='Garnier Ultra-Lift 2-in-1 Wrinkle Reducer Serum and Moisturizer for Wrinkles and Firming, 1.7 Fluid Ounce' clust_tuple=(222, 214, 25, 88)\n", - "item='Hydrating with Peptides - A Renewal Complex - 1oz/30ml - A Professionally Formulated Combination of Unique Patented Peptides ArgirelineTM, Matrixyl® 3000, and Syn®-coll, Synergistically Work to Reduce Fine Lines and Wrinkles' clust_tuple=(222, 214, 25, 88)\n", - "item='Prevage MD Anti-Aging Treatment 30ml 1 Fluid Ounce' clust_tuple=(222, 196, 25, 88)\n", - "item=\"L'Oreal Paris Visible Lift Serum Absolute Advanced Age-Reversing Makeup, Nude Beige, 1.0 Ounces\" clust_tuple=(222, 196, 25, 88)\n", - "item='Keys Solar Rx Broad Spectrum SPF 30 Sunblock 3.4oz lotion by Keys Care' clust_tuple=(222, 112, 196, 88)\n", - "item='Eclos Restorative Eye Cream, 0.5-Ounce' clust_tuple=(222, 62, 25, 88)\n", - "item='New Mary Kay TimeWise Repair Volu-Firm 5 Product Set Adv Skin Care Full Size (Large)' clust_tuple=(222, 62, 25, 88)\n", - "item='LifeCell All In One Anti-Aging Treatment 2.54 oz' clust_tuple=(222, 62, 8, 88)\n", - "item='Bare Escentuals Active Cell Renewal Night Serum 1oz./30ml' clust_tuple=(222, 7, 25, 88)\n", - "223\n", - "item=\"OPI Euro Centrale Collection 2013, You're Such A Budapest\" clust_tuple=(223, 116, 110, 163)\n", - "item='Opi San Francisco Collection Fall & Winter 2013 Dinng Al Frisco' clust_tuple=(223, 116, 110, 49)\n", - "item='OPI The Amazing New Spider-Man Collection, My Boyfriend Scales Walls' clust_tuple=(223, 116, 110, 208)\n", - "item='Gelish - The Shadows Collection - The Perfect Silhouette # 01460' clust_tuple=(223, 116, 25, 208)\n", - "item='Gelish Holiday Collection - Just What I Wanted #01551 - 0.5oz' clust_tuple=(223, 116, 25, 208)\n", - "item='OPI Sheer Tints, Sheer Mini Hint of Tints' clust_tuple=(223, 110, 110, 208)\n", - "item='Cover Girl Invisible Cream Concealer, Tawny 185 -1 Ea' clust_tuple=(223, 116, 25, 208)\n", - "item='China Glaze Velvet Bow 1017/80517' clust_tuple=(223, 116, 25, 208)\n", - "item='Revlon Luxurious Color Satin Eye Shadow, Nude Slip, 0.08 Ounce' clust_tuple=(223, 116, 25, 208)\n", - "item=\"Harmony Gelish I'm Brighter Than You - #01559\" clust_tuple=(223, 110, 25, 49)\n", - "224\n", - "item='Paris Hilton Tease Women Eau De Parfum Spray, 1 Ounce' clust_tuple=(224, 214, 224, 163)\n", - "item='Pure Dkny Eau De Parfum Spray by Donna Karan, 3.4 Ounce' clust_tuple=(224, 110, 8, 163)\n", - "item='MARC JACOBS DAISY by Marc Jacobs EDT SPRAY 3.4 OZ' clust_tuple=(224, 214, 110, 10)\n", - "item='Fresh Eau de Parfum, Sugar Lemon, 1 oz' clust_tuple=(224, 110, 110, 163)\n", - "item='Calvin Klein One Shock for Him Men Eau De Toilette Spray, 3.4 Ounce' clust_tuple=(224, 110, 229, 163)\n", - "item='DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ' clust_tuple=(224, 110, 8, 163)\n", - "item='Guess By Parlux Fragrances For Women. Eau De Parfum Spray 2.5 Oz' clust_tuple=(224, 62, 8, 163)\n", - "item='Jimmy Choo Flash Eau de Parfum Spray for Women, 2 Ounce' clust_tuple=(224, 110, 25, 163)\n", - "item='Diesel Fuel For Life by Diesel For Men. Eau De Toilette Spray 1.7-Ounces' clust_tuple=(224, 110, 8, 163)\n", - "item='Millesime Imperial By Creed For Men. Millesime Spray 4.0-Ounce Bottle' clust_tuple=(224, 110, 8, 163)\n", - "225\n", - "item='TIGI Bed Head Manipulator Styling Cream 2.0 oz.' clust_tuple=(225, 110, 110, 208)\n", - "item='DEVA CURL Flexible Hold Hair Spray 10oz' clust_tuple=(225, 224, 8, 200)\n", - "item=\"Givenchy Phenomen'Eyes Mascara 1 Phenomen'Black 0.24 oz\" clust_tuple=(225, 214, 110, 208)\n", - "item='Macadamia Natural Oil Oil Infused Brush Set' clust_tuple=(225, 196, 25, 208)\n", - "item='Neutrogena Clean Replenishing Conditioner, 10.1 Ounce' clust_tuple=(225, 110, 25, 10)\n", - "item='Pump for 16 oz. Jar' clust_tuple=(225, 110, 110, 215)\n", - "item='China Glaze: Pink Voltage, 0.5 oz' clust_tuple=(225, 110, 151, 49)\n", - "item='S-Curl Activator and Moisturizer 32 oz' clust_tuple=(225, 110, 252, 200)\n", - "item='Jan Marini Antioxidant Daily Face Protectant SPF 30, Tinted, 2 oz' clust_tuple=(225, 110, 25, 188)\n", - "item='Olay Regenerist Micro Sculpting Cream - 1.7 oz' clust_tuple=(225, 110, 25, 163)\n", - "226\n", - "item='SODIAL(TM) Stainless Steel Extension Eyelash Applicator Tool Fish Tail Clip' clust_tuple=(226, 155, 67, 200)\n", - "item='E.l.f. Eyelash Curler' clust_tuple=(226, 209, 252, 88)\n", - "item='Red Cherry #138 False Eyelashes (Pack of 6 Pairs)' clust_tuple=(226, 226, 195, 200)\n", - "item='Ardell Fashion Lashes Pair - 113 (Pack of 4)' clust_tuple=(226, 155, 25, 208)\n", - "item='Makeup Geek - Pointed Crease Brush' clust_tuple=(226, 212, 252, 239)\n", - "item='10 Pairs of Reusable Thick False Eyelashes' clust_tuple=(226, 209, 252, 208)\n", - "item='Ardell Fashion Lashes Pair - 105 (Pack of 4)' clust_tuple=(226, 155, 25, 208)\n", - "item=\"Winstonia's 50 Pairs False Eyelashes Fake Lashes Bundle Set w/ Adhesive - Natural, Thick, Criss-Cross Designs for Day & Night\" clust_tuple=(226, 155, 25, 200)\n", - "item='Ardell Fashion Lashes - 120 Black Demi' clust_tuple=(226, 155, 25, 208)\n", - "item='10 Pairs of Long Black False Eyelashes Eye Lashes Makeup, Professional, Thin and Wispy' clust_tuple=(226, 209, 252, 200)\n", - "227\n", - "item='Joico K-Pak Intense Hydrator Treatment, 8.5 Ounce' clust_tuple=(227, 227, 25, 88)\n", - "item='Elasta Qp Soy Oyl UltraHydration Deep Conditioner, 32 oz' clust_tuple=(227, 4, 25, 163)\n", - "item='Biolage by Matrix Ultra-Hydrating Conditioning Balm 16.9 Ounces' clust_tuple=(227, 110, 25, 215)\n", - "item='Beautiful Collection Semi-Permanent Haircolor 175W Wine Brown' clust_tuple=(227, 62, 25, 200)\n", - "item='DIANE Imported Pure Bristle Professional Military Hair Brush (Model: 8114)' clust_tuple=(227, 110, 25, 255)\n", - "item='Kerastase Nutritive Bain Oleo-Relax Smoothing Shampoo For Dry and Rebellious Hair, 8.5 Ounce' clust_tuple=(227, 4, 25, 255)\n", - "item='Color Brilliance Permanent Creme Hair Color' clust_tuple=(227, 110, 8, 255)\n", - "item='Herbal Essesnces None of Your Frizzness Smoothing Conditioner By Clairol, 10.1 Ounce' clust_tuple=(227, 155, 25, 208)\n", - "item='Seche Vite Top Coat Professional Kit Size 4 oz' clust_tuple=(227, 110, 25, 200)\n", - "item='Doo Gro Stimulating Growth Oil' clust_tuple=(227, 110, 25, 163)\n", - "228\n", - "item='Clinique Even Better Eyes Dark Circle Corrector for Unisex, All Skin Types, 0.34 Ounce' clust_tuple=(228, 110, 25, 208)\n", - "item='Premier Dead Sea Eye Care Set(eye Serum + Eye Cream)' clust_tuple=(228, 20, 67, 77)\n", - "item='Avon Anew Genics Eye Treatment 0.5 oz' clust_tuple=(228, 110, 25, 239)\n", - "item='Image Skin Care Ageless Total Skin Bleaching Serum 1 oz' clust_tuple=(228, 110, 8, 239)\n", - "item=\"L'Oreal Infallible Eyeshadow, Gold Imperial 407\" clust_tuple=(228, 110, 8, 163)\n", - "item='vbeauté Eye Never Nourishing DNA Repair Eye Crème, 0.5 Ounce' clust_tuple=(228, 203, 203, 239)\n", - "item='Loreal Limited Edition Infallible Eyeshadow - 607 Blinged & Brilliant' clust_tuple=(228, 110, 8, 208)\n", - "item='Mary Kay® Ultimate MascaraTM: Black, 0.28 oz' clust_tuple=(228, 110, 8, 163)\n", - "item='Embryolisse Lait Crème Concentré 75 Ml(concentrated Creamy Lotion) 75 Ml' clust_tuple=(228, 110, 203, 239)\n", - "item=\"Skin Genesis Daily Eye Treatment Eye Serum Women Treatment by L'Oreal, 0.5 Ounce\" clust_tuple=(228, 110, 8, 208)\n", - "229\n", - "item='Debra Lynn Professional Plastic Cuticle Pusher' clust_tuple=(229, 110, 25, 239)\n", - "item='1800pcs Nail Art Rhinestones Round 1.5mm' clust_tuple=(229, 116, 110, 8)\n", - "item='OPI Nail Lacquer - Russian Navy Suede - 0.5 oz' clust_tuple=(229, 116, 25, 88)\n", - "item='gelish a petal for your thoughts 463 2013' clust_tuple=(229, 116, 110, 255)\n", - "item='144pcs Fimo Slice Lovely Animal Nail Art Decoration' clust_tuple=(229, 116, 194, 163)\n", - "item='Kleancolor Neon Night Life mini collection' clust_tuple=(229, 116, 25, 239)\n", - "item='Seche Nail Lacquer Lumiere' clust_tuple=(229, 116, 194, 255)\n", - "item='OPI RapiDry Spray Nail Polish Dryer' clust_tuple=(229, 110, 25, 255)\n", - "item='Essie Nail Color trophy wife 774' clust_tuple=(229, 116, 25, 239)\n", - "item='Orly Nail Bonder Nail Treatment-0.6 oz' clust_tuple=(229, 116, 229, 255)\n" + "100\n", + "item='Axe Anti-dandruff Styling Cream, 3.2 Ounce' clust_tuple=(100, 224, 126, 160)\n", + "item='Enjoy Texture Cream, 8.8-Ounce (Packaging may Vary)' clust_tuple=(100, 199, 72, 78)\n", + "item='Dove Hair Styling Oxygen Moisture Leave In Foam, 5.1 Ounce' clust_tuple=(100, 224, 126, 109)\n", + "item='Suave Professionals Natural Infusion Seaweed and Lotus Blossom Leave-in Foam, 5 Ounce' clust_tuple=(100, 224, 126, 109)\n", + "item='Motions Naturally You, Deep Conditioning Masque, 8 Ounce' clust_tuple=(100, 224, 126, 160)\n", + "item='Axe Styling Spiked Up Look Gel, 6 Ounce' clust_tuple=(100, 224, 126, 160)\n", + "item='Just For Me Texture Softener' clust_tuple=(100, 190, 126, 160)\n", + "item='Axe Styling Messy Look Matte Gel, 6 Ounce' clust_tuple=(100, 199, 126, 160)\n", + "item='Motions At Home Oil Moisturizer Hair Lotion, 12-Ounce Bottles (Pack of 6)' clust_tuple=(100, 199, 126, 160)\n", + "item='Redken Hair Cleansing Cream Shampoo for All Hair Types, 10.1-Ounces' clust_tuple=(100, 199, 72, 195)\n", + "101\n", + "item='Alba Botanica Even Advanced Eye Makeup Remover, 4 Ounce Bottle' clust_tuple=(101, 45, 141, 78)\n", + "item='Alba Botanica Smooth Sugar Cane Hawaiian Body Polish, 10 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Deep Moisturizing Kukui Nut Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Revitalizing Sea Salt Hawaiian Body Scrub, 14.5 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Refining Aloe & Green Tea Hawaiian Oil Free Moisturizer, 3 Ounce Tubs' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Even Advanced Sea Kelp Facial Toner, 6 Ounce Bottles' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Aloe Vera Sunblock SPF 30, 4 Ounce' clust_tuple=(101, 45, 141, 78)\n", + "item='Alba Botanica Soothing Jasmine & Vitamin E Hawaiian Moisture Cream, 3 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Maximum Very Emollient Body Lotion, 12 Ounce Bottle' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Original Very Emollient Body Lotion, 32 Ounce Bottle' clust_tuple=(101, 45, 146, 78)\n", + "102\n", + "item='Mary Kay Mineral Powder Foundation Beige 2' clust_tuple=(102, 199, 141, 78)\n", + "item='Revlon Colorstay Aquatm Mineral Finishing Powder (Project Mermaid), Tranlscuent, 0.35 Ounce' clust_tuple=(102, 199, 141, 78)\n", + "item='Iman Cosmetics Second To None Stick Foundation, Clay 2' clust_tuple=(102, 229, 141, 78)\n", + "item='Maybelline Mineral Power Finishing Veil Bronzing Powder' clust_tuple=(102, 199, 141, 78)\n", + "item='Neutrogena Mineral Sheers Powder Foundation, Natural Ivory 20, 0.34 Ounce' clust_tuple=(102, 229, 141, 78)\n", + "item='Studio Tone Correcting Powder' clust_tuple=(102, 199, 141, 78)\n", + "item='Neutrogena Healthy Skin Blends, Pure 22, 0.02 Ounce' clust_tuple=(102, 199, 141, 78)\n", + "item='Physicians Formula Organic Wear 100% Natural Loose Powder, Translucent Light Organics, 0.77-Ounces' clust_tuple=(102, 229, 141, 78)\n", + "item='Revlon Colorstay Aquatm Mineral Finishing Powder (Project Mermaid), Translucent Light, 0.35 Ounce' clust_tuple=(102, 199, 141, 78)\n", + "item='Physicians Formula Mineral Wear Talc-Free Loose Powder, Translucent Medium, 0.49 Ounce' clust_tuple=(102, 229, 141, 78)\n", + "103\n", + "item='Goody Mosaic Perfect Wrap Curved Bobby Pins - 18 pk.' clust_tuple=(103, 53, 126, 75)\n", + "item='Rhinestones Crystal Wedding Bridal Pageant Princess Tiara Crown 3150' clust_tuple=(103, 199, 126, 78)\n", + "item='American Crew American Crew Fiber Fiber - 3 oz' clust_tuple=(103, 45, 72, 78)\n", + "item='Kingsley Shave Soap Bowl with Lid Dark Wood' clust_tuple=(103, 199, 126, 78)\n", + "item='Goody Comfort-flex Updo Barrette 1 Pc Colors May Vary - 2 Packs' clust_tuple=(103, 53, 126, 78)\n", + "item='BONAMART ® Lovely Vintage Jewelry Crystal Peacock Hair Clip' clust_tuple=(103, 191, 126, 78)\n", + "item='Goody Ouchless Scrunchie, Chenille and Cotton, 5 Count' clust_tuple=(103, 199, 126, 78)\n", + "item='Mixed Chicks Paddle Brush' clust_tuple=(103, 199, 91, 78)\n", + "item='Tangle Teezer Original Pink' clust_tuple=(103, 191, 126, 78)\n", + "item='Conair Bun Maker Set' clust_tuple=(103, 199, 126, 78)\n", + "104\n", + "item='Wet Ones Sensitive Skin Hand and Face Wipes Singles, 24-Count (Pack of 5)' clust_tuple=(104, 199, 126, 212)\n", + "item='RoC BRILLIANCE Night Recharging Moisturizer, Activating Serum & Recharging Creme' clust_tuple=(104, 229, 127, 78)\n", + "item='derma e - Pycnogenol & Hyaluronic Acid Eye Creme, .5 oz cream [Misc.]' clust_tuple=(104, 45, 127, 78)\n", + "item='Gratiae Lifting Facial Serum' clust_tuple=(104, 199, 126, 78)\n", + "item='Rogaine Regular Strength for Women Triple Pack' clust_tuple=(104, 191, 64, 195)\n", + "item='Slimquick Pure Weight Loss Extra Strength, 60 count' clust_tuple=(104, 191, 64, 109)\n", + "item='Organix, Theraneem Skin Lotion, 8 Ounce' clust_tuple=(104, 229, 126, 78)\n", + "item='Ambi Skincare Fade Cream, Oily Skin, 2 oz (57 g)' clust_tuple=(104, 199, 91, 78)\n", + "item='Nerium Ad - Age Defying Night Cream (30ml) One Bottle' clust_tuple=(104, 174, 72, 78)\n", + "item='Eucerin Redness Relief Soothing Cleanser, 6.8-Ounce Tubes (Pack of 3)' clust_tuple=(104, 229, 126, 224)\n", + "105\n", + "item='Jerdon JP910NB 6-Inch Tabletop Two-Sided Swivel Vanity Mirror with 10x Magnification, 11-Inch Height, Nickel Finish' clust_tuple=(105, 199, 126, 254)\n", + "item='4 Dozen (48) Long Pink Perm Rods' clust_tuple=(105, 224, 64, 212)\n", + "item='Mebco Tortoise Shower Detangler' clust_tuple=(105, 199, 126, 78)\n", + "item='WEN Cleansing Creme Shower Comb NEW By Chaz Dean' clust_tuple=(105, 224, 126, 75)\n", + "item='Phillips Light Touch 6 Hair Brush' clust_tuple=(105, 211, 126, 75)\n", + "item='Mason Pearson Detangling Comb' clust_tuple=(105, 53, 126, 75)\n", + "item='DEVA CURL Flexible Hold Hair Spray 10oz' clust_tuple=(105, 191, 126, 148)\n", + "item='Conair Mega Self Holding Rollers, 9 Count' clust_tuple=(105, 199, 41, 160)\n", + "item='Remington H-1015 Ceramic Compact, Large and Medium Roller' clust_tuple=(105, 224, 44, 155)\n", + "item='Simply Beautiful Tangle Teaser Brush - Professional Detangling Hairbrush - Pink, Black, Purple, Blue or Green (Black)' clust_tuple=(105, 199, 126, 195)\n", + "106\n", + "item='32 PCS Makeup Brush Set + Black Pouch Bag' clust_tuple=(106, 199, 141, 78)\n", + "item='Bare Escentuals Refillable Mirror Compact Lavender' clust_tuple=(106, 199, 126, 78)\n", + "item='SHANY Cosmetics Professional Cotton Makeup Apron with Makeup Artist Brush Belt, Light Weight, 8 Ounce' clust_tuple=(106, 199, 126, 78)\n", + "item='SuperNail Brush Cleaner - 2oz / 59ml' clust_tuple=(106, 199, 141, 78)\n", + "item='e.l.f. Cosmetics Eye Shadow Brush' clust_tuple=(106, 199, 141, 78)\n", + "item='Neewer® Fashion 16 Pcs Pro Purple Makeup Eye Shadow Brush Cosmetic Set Kit' clust_tuple=(106, 199, 141, 78)\n", + "item='Shiseido Perfect Foundation Brush (Boxed)' clust_tuple=(106, 199, 72, 78)\n", + "item='FantaSea Cosmetic Blending Sponge' clust_tuple=(106, 199, 126, 78)\n", + "item='elf Makeup Mist and Set, Clear, 2.02 Ounce and Stipple Brush' clust_tuple=(106, 199, 141, 78)\n", + "item='Seki Edge Folding Lash Pin Comb' clust_tuple=(106, 199, 126, 78)\n", + "107\n", + "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Hippie Chick"' clust_tuple=(107, 229, 126, 78)\n", + "item='Home Pedicure PediNova III - Electric Manicure Kit' clust_tuple=(107, 229, 127, 78)\n", + "item='Garnier Fructis Style Smoothing Milk, Strong, 5.1 Ounce Bottle' clust_tuple=(107, 229, 126, 78)\n", + "item='AquaBella Exfoliating Bath Cloth (Twin Pack) (colors will vary)' clust_tuple=(107, 45, 126, 78)\n", + "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Fashionista Collection, "diva"' clust_tuple=(107, 229, 126, 78)\n", + "item='My Konjac Sponge All Natural Fiber Wave Body Sponge' clust_tuple=(107, 45, 126, 78)\n", + "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Tough Love"' clust_tuple=(107, 229, 126, 78)\n", + "item='Super Solano Professional Hair Dryer - Black' clust_tuple=(107, 229, 141, 78)\n", + "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Flower Power"' clust_tuple=(107, 45, 126, 78)\n", + "item='EcoTools Ecopouf Bath Sponge, Assorted Colors (Pack of 6)' clust_tuple=(107, 199, 126, 78)\n", + "108\n", + "item='Deodorant Rosemary Mint 2.50 Ounces' clust_tuple=(108, 84, 64, 78)\n", + "item='LOREAL Collagen Filler Eye Treatment' clust_tuple=(108, 199, 91, 78)\n", + "item=\"Dr. King's Natural Medicine Anxiety and Nervousness, 2 Fluid Ounce\" clust_tuple=(108, 38, 64, 78)\n", + "item='NaturalCare Homeopathic Ultra Vein-Gard Leg Therapy Cream, 2.25-Ounce Package' clust_tuple=(108, 199, 41, 78)\n", + "item='Bumble and Bumble Leave in Conditioner (8 Ounces)' clust_tuple=(108, 199, 64, 224)\n", + "item='Avene Redness relief soothing cream SPF25, 1.35-Ounce Package' clust_tuple=(108, 190, 64, 224)\n", + "item=\"Burt's Bees Acne Targeted Spot Treatment, 0.26 Ounce Bottle\" clust_tuple=(108, 199, 41, 78)\n", + "item='Nizoral Anti-Dandruff Shampoo, 4 oz.' clust_tuple=(108, 211, 64, 160)\n", + "item=\"Dr. King's Natural Medicine Gout Symptom Formula, 2 Fluid Ounce\" clust_tuple=(108, 199, 41, 224)\n", + "item='Mary Kay Blemish Control Toner: Formula 3' clust_tuple=(108, 199, 64, 224)\n", + "109\n", + "item='ELMA&SANA Golden Argan Oil ® 100 Cold Pressed Virgin Organic Certified By Ecocert -1oz(30ml)' clust_tuple=(109, 84, 141, 78)\n", + "item='Skinceuticals Daily Moisturize Pore-minimizing Moisturizer For Normal Or Oily Skin, 2-Ounce Jar' clust_tuple=(109, 199, 141, 78)\n", + "item='Deep Sea Cosmetics Sensual Dead Sea Body Salt Scrub milk and honey scent' clust_tuple=(109, 84, 146, 78)\n", + "item='Shampoo Green Apple and Ginger 8 Ounces' clust_tuple=(109, 84, 72, 78)\n", + "item='Desert Essence Thoroughly Clean Face Wash - Original -- 8.5 fl oz' clust_tuple=(109, 84, 146, 78)\n", + "item='Natural Clear Skin Cleansing Sponge' clust_tuple=(109, 84, 141, 78)\n", + "item='ELMA&SANA® Golden Argan Oil 100% Pure Cold Pressed Virgin Organic Certified By Ecocert -4oz(120ml)' clust_tuple=(109, 84, 146, 78)\n", + "item='Body Lotion, Coconut & Papaya - 13oz' clust_tuple=(109, 84, 146, 78)\n", + "item='Eminence Wild Plum Eye Cream, 1.05 Ounce' clust_tuple=(109, 84, 72, 78)\n", + "item='Desert Essence Blemish Touch Concealer Light .33 oz' clust_tuple=(109, 199, 141, 78)\n" ] } ], "source": [ - "for i in range(220, 230):\n", + "from rqvae_data import search_similar_items\n", + "\n", + "\n", + "for i in range(100, 110):\n", " sim = search_similar_items(items_with_tuples, (i,), 10)\n", " if len(sim) == 0:\n", " continue\n", " print(i)\n", " for item, clust_tuple in sim:\n", - " print(f\"{item=} {clust_tuple=}\")\n", - "\n", - "# TODO fix collisisons (remainder = last embedding, auto-increment 4th id)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# 1 2 3 0\n", - "# 1 2 3 1\n", - "# 4 5 6 0/2\n", - "# 4 5 6 1/3\n", - "\n", - "# Research last index aggregation\n", - "\n", - "# 1) last index = KMeans(last residuals, n=|last codebook|) - collision\n", - "# 2) auto increment last index (check paper)\n", - "# 3) decoder\n", - "# 4) [(1 2 3), (1 2 3)] single item -> ok\n", - "# 4.1) several -> get embeddings -> score. softmax(collisions), torch.logsoftmax(logits) -> score -> argmax" + " print(f\"{item=} {clust_tuple=}\")" ] }, { @@ -300,29 +245,14 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "# pos emb for item & codebook (000 111 222) - item\n", - "# codebook (012 012 012)\n", - "# splitting item ?" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [], - "source": [ - "torch.save(df, \"../data/df_with_embs.pt\")" - ] + "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "!ls -lh ../data" - ] + "source": [] }, { "cell_type": "code", @@ -334,7 +264,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "gsrec", "language": "python", "name": "python3" }, @@ -348,7 +278,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.12.8" } }, "nbformat": 4, diff --git a/src/rqvae.py b/src/rqvae.py index 9f98b99f..be10ecee 100644 --- a/src/rqvae.py +++ b/src/rqvae.py @@ -17,7 +17,7 @@ def __init__( super().__init__() # In original paper it is set to 0.25 - self.register_buffer("beta", torch.tensor(beta)) + self.beta = beta # Kmeans initialization self.should_init_codebooks = should_init_codebooks @@ -54,7 +54,12 @@ def init_codebooks(self, embeddings): embeddings_np = remainder.cpu().numpy() n_clusters = codebook.shape[0] - kmeans = faiss.Kmeans(d=embeddings_np.shape[1], k=n_clusters, niter=100) + kmeans = faiss.Kmeans( + d=embeddings_np.shape[1], + k=n_clusters, + niter=1000, + gpu=torch.cuda.is_available(), + ) kmeans.train(embeddings_np) codebook.data = torch.from_numpy(kmeans.centroids).to(codebook.device) diff --git a/src/rqvae_data.py b/src/rqvae_data.py index 28b8f799..b31122da 100644 --- a/src/rqvae_data.py +++ b/src/rqvae_data.py @@ -3,6 +3,7 @@ import gzip from transformers import AutoTokenizer, AutoModelForSeq2SeqLM import torch +import random from tqdm import tqdm @@ -74,6 +75,30 @@ def get_data(cached=True): with torch.no_grad(): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: - df = torch.load("../data/df_with_embs.pt") + df = torch.load("../data/df_with_embs.pt", weights_only=False) return df + +def get_cb_tuples(rqvae, embeddings): + ind_lists = [] + for cb in rqvae.codebooks: + dist = torch.cdist(rqvae.encoder(embeddings), cb) + ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) + + return zip(*ind_lists) + + +def search_similar_items(items_with_tuples, clust2search, max_cnt=5): + random.shuffle(items_with_tuples) + cnt = 0 + similars = [] + for item, clust_tuple in items_with_tuples: + if clust_tuple[: len(clust2search)] == clust2search: + similars.append((item, clust_tuple)) + cnt += 1 + if cnt >= max_cnt: + return similars + return similars + + + diff --git a/todo.txt b/todo.txt index 1b0975f2..ca4034bd 100644 --- a/todo.txt +++ b/todo.txt @@ -2,6 +2,29 @@ 2) data: https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html#:~:text=image%20features-,Beauty,-reviews%20(2%2C023%2C070%20reviews + +# На чем обучать? То есть на каких данных запускать backward pass? +# train model + +# TODO fix collisisons (remainder = last embedding, auto-increment 4th id) + +# 1 2 3 0 +# 1 2 3 1 +# 4 5 6 0/2 +# 4 5 6 1/3 + +# Research last index aggregation + +# 1) last index = KMeans(last residuals, n=|last codebook|) - collision +# 2) auto increment last index (check paper) +# 3) decoder +# 4) [(1 2 3), (1 2 3)] single item -> ok +# 4.1) several -> get embeddings -> score. softmax(collisions), torch.logsoftmax(logits) -> score -> argmax + +# pos emb for item & codebook (000 111 222) - item +# codebook (012 012 012) +# splitting item ? + user_id & cb_ids -> repr last 'seq' prediction dataloader (semantic ids lens) \ No newline at end of file From 900d647f88ad00307e69f03ae3890617f8e7466c Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 18 Dec 2024 22:02:00 +0300 Subject: [PATCH 005/175] handle collisions --- src/collisions.py | 14 +++ src/main.ipynb | 276 +++++++++++++++++++++++----------------------- src/rqvae_data.py | 4 +- 3 files changed, 157 insertions(+), 137 deletions(-) create mode 100644 src/collisions.py diff --git a/src/collisions.py b/src/collisions.py new file mode 100644 index 00000000..263f76d7 --- /dev/null +++ b/src/collisions.py @@ -0,0 +1,14 @@ +def dedup(data): + count_dict = {} + + result = [] + for item in data: + code = item[2] + if code not in count_dict: + count_dict[code] = 0 + unique_index = count_dict[code] + count_dict[code] += 1 + new_last_element = (*code, unique_index) + result.append((item[0], item[1], new_last_element)) + + return result diff --git a/src/main.ipynb b/src/main.ipynb index f63aae02..e942991b 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -26,39 +26,19 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "torch.Size([12101, 512])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "embs.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 4/4 [00:07<00:00, 2.00s/it]\n" + "100%|██████████| 4/4 [00:07<00:00, 1.95s/it]\n" ] }, { "data": { "text/plain": [ - "{'loss': tensor(0.0057, device='cuda:0', grad_fn=),\n", - " 'recon_loss': tensor(0.0052, device='cuda:0'),\n", + "{'loss': tensor(0.0056, device='cuda:0', grad_fn=),\n", + " 'recon_loss': tensor(0.0051, device='cuda:0'),\n", " 'rqvae_loss': tensor(0.0005, device='cuda:0'),\n", " 'unique/0': 256,\n", " 'unique/1': 256,\n", @@ -66,7 +46,7 @@ " 'unique/3': 256}" ] }, - "execution_count": 4, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -94,20 +74,22 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ + "from collisions import dedup\n", "from rqvae_data import get_cb_tuples\n", "\n", "\n", - "cb_tuples = get_cb_tuples(rqvae, embs_dict[\"embedding\"])\n", - "items_with_tuples = list(zip(df[\"title\"].fillna(\"unknown\"), cb_tuples))" + "cb_tuples = list(get_cb_tuples(rqvae, embs_dict[\"embedding\"]))\n", + "items_with_tuples = list(zip(df[\"asin\"], df[\"title\"].fillna(\"unknown\"), cb_tuples))\n", + "items_with_tuples = dedup(items_with_tuples)" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -115,115 +97,108 @@ "output_type": "stream", "text": [ "100\n", - "item='Axe Anti-dandruff Styling Cream, 3.2 Ounce' clust_tuple=(100, 224, 126, 160)\n", - "item='Enjoy Texture Cream, 8.8-Ounce (Packaging may Vary)' clust_tuple=(100, 199, 72, 78)\n", - "item='Dove Hair Styling Oxygen Moisture Leave In Foam, 5.1 Ounce' clust_tuple=(100, 224, 126, 109)\n", - "item='Suave Professionals Natural Infusion Seaweed and Lotus Blossom Leave-in Foam, 5 Ounce' clust_tuple=(100, 224, 126, 109)\n", - "item='Motions Naturally You, Deep Conditioning Masque, 8 Ounce' clust_tuple=(100, 224, 126, 160)\n", - "item='Axe Styling Spiked Up Look Gel, 6 Ounce' clust_tuple=(100, 224, 126, 160)\n", - "item='Just For Me Texture Softener' clust_tuple=(100, 190, 126, 160)\n", - "item='Axe Styling Messy Look Matte Gel, 6 Ounce' clust_tuple=(100, 199, 126, 160)\n", - "item='Motions At Home Oil Moisturizer Hair Lotion, 12-Ounce Bottles (Pack of 6)' clust_tuple=(100, 199, 126, 160)\n", - "item='Redken Hair Cleansing Cream Shampoo for All Hair Types, 10.1-Ounces' clust_tuple=(100, 199, 72, 195)\n", + "item='Simple Protecting Light Moisturizer Spf 15, 4.2 Ounce' clust_tuple=(100, 43, 110, 111, 20)\n", + "item=\"POND'S Dry Skin Cream, 10.1-oz. (Pack of 3)\" clust_tuple=(100, 144, 110, 111, 0)\n", + "item='Kiss My Face Natural Mineral Lotion Sunscreen SPF 40 with Hydresia, 3 Fluid Ounce' clust_tuple=(100, 43, 110, 111, 16)\n", + "item=\"Pond's Luminous Moisture Day SPF 15 Lotion, 1.7 Ounce\" clust_tuple=(100, 43, 101, 111, 6)\n", + "item='St. Ives Facial Moisturizer, Timeless Skin Collagen Elastin, 10oz' clust_tuple=(100, 43, 110, 121, 2)\n", + "item='Clarins Cleansing Milk - Oily to Combination Skin, 7-Ounces Box' clust_tuple=(100, 43, 15, 111, 0)\n", + "item=\"POND'S Rejuveness Anti-Wrinkle Cream, 7-oz.\" clust_tuple=(100, 43, 110, 111, 9)\n", + "item='Olay Total Effects Blemish Control Salicylic Acid Acne Cleanser 5.0 Fl Oz (Pack of 3)' clust_tuple=(100, 144, 110, 111, 1)\n", + "item='Hydroxatone 90 Second Wrinkle Reducer' clust_tuple=(100, 43, 110, 31, 0)\n", + "item='Collagen Essence Full Face Mask 10 Pieces' clust_tuple=(100, 144, 88, 111, 0)\n", "101\n", - "item='Alba Botanica Even Advanced Eye Makeup Remover, 4 Ounce Bottle' clust_tuple=(101, 45, 141, 78)\n", - "item='Alba Botanica Smooth Sugar Cane Hawaiian Body Polish, 10 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Deep Moisturizing Kukui Nut Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Revitalizing Sea Salt Hawaiian Body Scrub, 14.5 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Refining Aloe & Green Tea Hawaiian Oil Free Moisturizer, 3 Ounce Tubs' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Even Advanced Sea Kelp Facial Toner, 6 Ounce Bottles' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Aloe Vera Sunblock SPF 30, 4 Ounce' clust_tuple=(101, 45, 141, 78)\n", - "item='Alba Botanica Soothing Jasmine & Vitamin E Hawaiian Moisture Cream, 3 Ounce Tub' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Maximum Very Emollient Body Lotion, 12 Ounce Bottle' clust_tuple=(101, 45, 146, 78)\n", - "item='Alba Botanica Original Very Emollient Body Lotion, 32 Ounce Bottle' clust_tuple=(101, 45, 146, 78)\n", + "item='Alba Botanica Fragrance Free SPF 30 Mineral Very Emollient Sunscreen, 4 Ounce Tube' clust_tuple=(101, 141, 88, 111, 10)\n", + "item='Alba Aloe Vera Sunblock SPF 30, 4 Ounce' clust_tuple=(101, 141, 88, 111, 6)\n", + "item='Alba Botanica Deep Moisturizing Kukui Nut Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 209, 88, 111, 2)\n", + "item='Alba Botanica Sparkling Mint Very Emollient Bath & Shower Gel, 32 Ounce Bottle' clust_tuple=(101, 209, 88, 111, 3)\n", + "item='Alba Botanica Leave-In Conditioner, 7 Ounce Tubes' clust_tuple=(101, 141, 88, 111, 7)\n", + "item='Alba Botanica Very Emollient Sunless Tanner, 4 Ounce Tube' clust_tuple=(101, 141, 88, 111, 14)\n", + "item='Alba Botanica Rejuvenating Papaya Mango Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 141, 88, 111, 13)\n", + "item='Alba Botanica Pure Lavender SPF 45 Very Emollient Sunscreen, 4 Ounce Tubes (Pack of 2)' clust_tuple=(101, 141, 88, 111, 16)\n", + "item='Alba Botanica Even Advanced Sea Mineral Cleansing Gel, 6 Ounce Bottles' clust_tuple=(101, 141, 88, 111, 4)\n", + "item='Own Products Rejuvenating Facial Cleanser' clust_tuple=(101, 43, 110, 111, 1)\n", "102\n", - "item='Mary Kay Mineral Powder Foundation Beige 2' clust_tuple=(102, 199, 141, 78)\n", - "item='Revlon Colorstay Aquatm Mineral Finishing Powder (Project Mermaid), Tranlscuent, 0.35 Ounce' clust_tuple=(102, 199, 141, 78)\n", - "item='Iman Cosmetics Second To None Stick Foundation, Clay 2' clust_tuple=(102, 229, 141, 78)\n", - "item='Maybelline Mineral Power Finishing Veil Bronzing Powder' clust_tuple=(102, 199, 141, 78)\n", - "item='Neutrogena Mineral Sheers Powder Foundation, Natural Ivory 20, 0.34 Ounce' clust_tuple=(102, 229, 141, 78)\n", - "item='Studio Tone Correcting Powder' clust_tuple=(102, 199, 141, 78)\n", - "item='Neutrogena Healthy Skin Blends, Pure 22, 0.02 Ounce' clust_tuple=(102, 199, 141, 78)\n", - "item='Physicians Formula Organic Wear 100% Natural Loose Powder, Translucent Light Organics, 0.77-Ounces' clust_tuple=(102, 229, 141, 78)\n", - "item='Revlon Colorstay Aquatm Mineral Finishing Powder (Project Mermaid), Translucent Light, 0.35 Ounce' clust_tuple=(102, 199, 141, 78)\n", - "item='Physicians Formula Mineral Wear Talc-Free Loose Powder, Translucent Medium, 0.49 Ounce' clust_tuple=(102, 229, 141, 78)\n", + "item='Finulite Cellulite Smoothing Massage Mitt' clust_tuple=(102, 43, 88, 72, 0)\n", + "item='Neutrogena Healthy Skin Liquid Makeup, Classic Ivory 10, 1 Ounce' clust_tuple=(102, 208, 110, 111, 1)\n", + "item='Miracle Skin Transformer Face - SPF 20 - Translucent' clust_tuple=(102, 43, 80, 111, 0)\n", + "item='Physicians Formula Super BB All-in-1 Beauty Balm Cream Light Medium -- 1.2 fl oz' clust_tuple=(102, 184, 110, 111, 0)\n", + "item='Mary Kay Mineral Powder Foundation Beige 2' clust_tuple=(102, 209, 80, 111, 0)\n", + "item='Deep Sea Cosmetics Sensual Dead Sea Body Salt Scrub milk and honey scent' clust_tuple=(102, 43, 88, 111, 2)\n", + "item='Garnier Skin Renew Miracle Skin Perfector Bb Cream, Combination To Oily Skin, Light/Medium, 2 Fluid Ounce' clust_tuple=(102, 152, 110, 111, 1)\n", + "item='Studio Tone Correcting Powder' clust_tuple=(102, 7, 110, 31, 0)\n", + "item='Garnier Skin Renew Miracle Skin Perfector B.B. Cream, Medium and Deep, 2.5 Fluid Ounce' clust_tuple=(102, 43, 88, 111, 5)\n", + "item='Maybelline Mineral Power Finishing Veil Bronzing Powder' clust_tuple=(102, 208, 110, 111, 0)\n", "103\n", - "item='Goody Mosaic Perfect Wrap Curved Bobby Pins - 18 pk.' clust_tuple=(103, 53, 126, 75)\n", - "item='Rhinestones Crystal Wedding Bridal Pageant Princess Tiara Crown 3150' clust_tuple=(103, 199, 126, 78)\n", - "item='American Crew American Crew Fiber Fiber - 3 oz' clust_tuple=(103, 45, 72, 78)\n", - "item='Kingsley Shave Soap Bowl with Lid Dark Wood' clust_tuple=(103, 199, 126, 78)\n", - "item='Goody Comfort-flex Updo Barrette 1 Pc Colors May Vary - 2 Packs' clust_tuple=(103, 53, 126, 78)\n", - "item='BONAMART ® Lovely Vintage Jewelry Crystal Peacock Hair Clip' clust_tuple=(103, 191, 126, 78)\n", - "item='Goody Ouchless Scrunchie, Chenille and Cotton, 5 Count' clust_tuple=(103, 199, 126, 78)\n", - "item='Mixed Chicks Paddle Brush' clust_tuple=(103, 199, 91, 78)\n", - "item='Tangle Teezer Original Pink' clust_tuple=(103, 191, 126, 78)\n", - "item='Conair Bun Maker Set' clust_tuple=(103, 199, 126, 78)\n", + "item='Spornette No.316 Deville Hair Brush' clust_tuple=(103, 43, 107, 111, 1)\n", + "item='Diane 2" Bobby Pins, Black, 1lb Box' clust_tuple=(103, 43, 110, 31, 5)\n", + "item='Spornette German Porcupine Oval Cushion Brush' clust_tuple=(103, 152, 88, 72, 0)\n", + "item='Diane 3" Hair Pins, Black, 32/card' clust_tuple=(103, 43, 107, 14, 1)\n", + "item='Spornette Large Smooth Operator, 4 Ounce' clust_tuple=(103, 66, 97, 111, 0)\n", + "item='10 Pcs Black Plastic Single Prong DIY Hairstyle Alligator Hair Clip 3.1" Long' clust_tuple=(103, 152, 97, 176, 0)\n", + "item='Diane Double Prong Clip 1.75 Inches, 80 Clips' clust_tuple=(103, 43, 88, 72, 2)\n", + "item='Aquasentials Long Handle Bath Brush (Clear Handle)' clust_tuple=(103, 152, 16, 31, 0)\n", + "item='The Wet Comb Detangling Hair Comb - Metallics Collection (Colors May Vary)' clust_tuple=(103, 190, 88, 111, 0)\n", + "item='Sexy Hair Hard Up Gel, Packaging May Vary, 16.9-Ounce Pump Bottle' clust_tuple=(103, 43, 88, 111, 0)\n", "104\n", - "item='Wet Ones Sensitive Skin Hand and Face Wipes Singles, 24-Count (Pack of 5)' clust_tuple=(104, 199, 126, 212)\n", - "item='RoC BRILLIANCE Night Recharging Moisturizer, Activating Serum & Recharging Creme' clust_tuple=(104, 229, 127, 78)\n", - "item='derma e - Pycnogenol & Hyaluronic Acid Eye Creme, .5 oz cream [Misc.]' clust_tuple=(104, 45, 127, 78)\n", - "item='Gratiae Lifting Facial Serum' clust_tuple=(104, 199, 126, 78)\n", - "item='Rogaine Regular Strength for Women Triple Pack' clust_tuple=(104, 191, 64, 195)\n", - "item='Slimquick Pure Weight Loss Extra Strength, 60 count' clust_tuple=(104, 191, 64, 109)\n", - "item='Organix, Theraneem Skin Lotion, 8 Ounce' clust_tuple=(104, 229, 126, 78)\n", - "item='Ambi Skincare Fade Cream, Oily Skin, 2 oz (57 g)' clust_tuple=(104, 199, 91, 78)\n", - "item='Nerium Ad - Age Defying Night Cream (30ml) One Bottle' clust_tuple=(104, 174, 72, 78)\n", - "item='Eucerin Redness Relief Soothing Cleanser, 6.8-Ounce Tubes (Pack of 3)' clust_tuple=(104, 229, 126, 224)\n", + "item='Fair & White Exclusive Gel Creme Whitenizer #08003' clust_tuple=(104, 43, 178, 111, 0)\n", + "item='RoC BRILLIANCE Eye Beautifier .3 fl. oz.' clust_tuple=(104, 60, 230, 111, 0)\n", + "item='RoC BRILLIANCE Night Recharging Moisturizer, Activating Serum & Recharging Creme' clust_tuple=(104, 43, 110, 111, 0)\n", "105\n", - "item='Jerdon JP910NB 6-Inch Tabletop Two-Sided Swivel Vanity Mirror with 10x Magnification, 11-Inch Height, Nickel Finish' clust_tuple=(105, 199, 126, 254)\n", - "item='4 Dozen (48) Long Pink Perm Rods' clust_tuple=(105, 224, 64, 212)\n", - "item='Mebco Tortoise Shower Detangler' clust_tuple=(105, 199, 126, 78)\n", - "item='WEN Cleansing Creme Shower Comb NEW By Chaz Dean' clust_tuple=(105, 224, 126, 75)\n", - "item='Phillips Light Touch 6 Hair Brush' clust_tuple=(105, 211, 126, 75)\n", - "item='Mason Pearson Detangling Comb' clust_tuple=(105, 53, 126, 75)\n", - "item='DEVA CURL Flexible Hold Hair Spray 10oz' clust_tuple=(105, 191, 126, 148)\n", - "item='Conair Mega Self Holding Rollers, 9 Count' clust_tuple=(105, 199, 41, 160)\n", - "item='Remington H-1015 Ceramic Compact, Large and Medium Roller' clust_tuple=(105, 224, 44, 155)\n", - "item='Simply Beautiful Tangle Teaser Brush - Professional Detangling Hairbrush - Pink, Black, Purple, Blue or Green (Black)' clust_tuple=(105, 199, 126, 195)\n", + "item=\"Wee Ones Baby Girls' Knot Genie Teeny Genie-Peaceful Pink\" clust_tuple=(105, 43, 170, 31, 0)\n", + "item='Remington Wet 2 Straight 2" Wide Plate Wet/Dry Ceramic Hair Straightening Iron with Tourmaline' clust_tuple=(105, 43, 110, 176, 0)\n", + "item='Remington S-9951 Frizz Therapy, Humidity Resistant Ceramic Flat Hairstyling Iron, 1 Inch' clust_tuple=(105, 43, 110, 176, 2)\n", + "item='John Frieda Sleek Finish 1 Inch Flat Iron' clust_tuple=(105, 43, 170, 31, 3)\n", + "item='Quick Beader for loading beads on hair' clust_tuple=(105, 43, 170, 31, 2)\n", + "item='Remington B90P Pearl Ceramic Paddle Hair Brush with Real Crushed Pearls' clust_tuple=(105, 105, 107, 31, 0)\n", + "item='Infiniti Professional Nano Tourmaline Ceramic Curling Iron, 1 1/2-Inch' clust_tuple=(105, 43, 107, 176, 1)\n", + "item='Remington S6500 Sleek and Curl Ceramic Pearl Multi-styler Hair Straightener, 1 Inch' clust_tuple=(105, 43, 110, 176, 5)\n", + "item='BaByliss PRO Nano Titanium Mini Straightening Iron (1 inch)' clust_tuple=(105, 208, 68, 31, 0)\n", + "item='Remington Ci96z1 Silk Ceramic Elliptical Waving Wand' clust_tuple=(105, 208, 170, 31, 2)\n", "106\n", - "item='32 PCS Makeup Brush Set + Black Pouch Bag' clust_tuple=(106, 199, 141, 78)\n", - "item='Bare Escentuals Refillable Mirror Compact Lavender' clust_tuple=(106, 199, 126, 78)\n", - "item='SHANY Cosmetics Professional Cotton Makeup Apron with Makeup Artist Brush Belt, Light Weight, 8 Ounce' clust_tuple=(106, 199, 126, 78)\n", - "item='SuperNail Brush Cleaner - 2oz / 59ml' clust_tuple=(106, 199, 141, 78)\n", - "item='e.l.f. Cosmetics Eye Shadow Brush' clust_tuple=(106, 199, 141, 78)\n", - "item='Neewer® Fashion 16 Pcs Pro Purple Makeup Eye Shadow Brush Cosmetic Set Kit' clust_tuple=(106, 199, 141, 78)\n", - "item='Shiseido Perfect Foundation Brush (Boxed)' clust_tuple=(106, 199, 72, 78)\n", - "item='FantaSea Cosmetic Blending Sponge' clust_tuple=(106, 199, 126, 78)\n", - "item='elf Makeup Mist and Set, Clear, 2.02 Ounce and Stipple Brush' clust_tuple=(106, 199, 141, 78)\n", - "item='Seki Edge Folding Lash Pin Comb' clust_tuple=(106, 199, 126, 78)\n", + "item='50 New Empty Clear Plastic Cosmetic Containers 5 Gram Size Pot Jars Eyshadow Container Lot' clust_tuple=(106, 112, 88, 72, 0)\n", + "item='Swisspers Cotton Rounds, 100 Count' clust_tuple=(106, 43, 110, 31, 7)\n", + "item='Lipstick - 10pc. Assorted Color Lipstick Set' clust_tuple=(106, 43, 110, 111, 7)\n", + "item='Clean & Clear Instant Oil-Absorbing Sheets 50 sheets' clust_tuple=(106, 43, 110, 111, 0)\n", + "item='Bare Escentuals Tapered Shadow Brush' clust_tuple=(106, 43, 110, 31, 2)\n", + "item='EZ Flow Grand Artist Oval 508 with Brush Cover' clust_tuple=(106, 43, 88, 111, 2)\n", + "item='Classic Cotton Balls Jumbo Size, 100 Count' clust_tuple=(106, 43, 88, 111, 0)\n", + "item='Sally Hansen Airbrush Leg Tan Glow,4.4 oz' clust_tuple=(106, 43, 110, 31, 1)\n", + "item='FantaSea Cosmetic Blending Sponge' clust_tuple=(106, 43, 110, 31, 6)\n", + "item='UBU Super Softy Extra Large and Soft Powder Brush' clust_tuple=(106, 43, 110, 31, 8)\n", "107\n", - "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Hippie Chick"' clust_tuple=(107, 229, 126, 78)\n", - "item='Home Pedicure PediNova III - Electric Manicure Kit' clust_tuple=(107, 229, 127, 78)\n", - "item='Garnier Fructis Style Smoothing Milk, Strong, 5.1 Ounce Bottle' clust_tuple=(107, 229, 126, 78)\n", - "item='AquaBella Exfoliating Bath Cloth (Twin Pack) (colors will vary)' clust_tuple=(107, 45, 126, 78)\n", - "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Fashionista Collection, "diva"' clust_tuple=(107, 229, 126, 78)\n", - "item='My Konjac Sponge All Natural Fiber Wave Body Sponge' clust_tuple=(107, 45, 126, 78)\n", - "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Tough Love"' clust_tuple=(107, 229, 126, 78)\n", - "item='Super Solano Professional Hair Dryer - Black' clust_tuple=(107, 229, 141, 78)\n", - "item='Betty Dain Stylish Design Mold Resistant Shower Cap, The Hipster Collection, "Flower Power"' clust_tuple=(107, 45, 126, 78)\n", - "item='EcoTools Ecopouf Bath Sponge, Assorted Colors (Pack of 6)' clust_tuple=(107, 199, 126, 78)\n", + "item='Weleda Calendula Shampoo and Body Wash, 6.8-Ounce' clust_tuple=(107, 209, 16, 111, 0)\n", + "item='Africana - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 111, 13)\n", + "item=\"Burt's Bees Radiance Facial Cleanser, 6 Fluid Ounce\" clust_tuple=(107, 95, 110, 111, 0)\n", + "item='Kimora Lee Simmons Baby Phat Goddess Eau de Parfum Spray for Women, 3.4 Ounce' clust_tuple=(107, 43, 110, 31, 1)\n", + "item='White Full - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 31, 6)\n", + "item='With Love by Hilary Duff for Women 3.3 oz Eau de Parfum Spray' clust_tuple=(107, 43, 88, 111, 1)\n", + "item=\"Burt's Bees Orange Essence Facial Cleanser, 4.3 Ounces\" clust_tuple=(107, 43, 110, 111, 0)\n", + "item='White Musk - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 31, 9)\n", + "item='Betsey Johnson Too Eau de Parfum Spray, 3.4 Ounce' clust_tuple=(107, 43, 110, 31, 3)\n", + "item=\"L'Oreal Paris EverStrong Bodify Shampoo, 8.5-Fluid Ounce\" clust_tuple=(107, 36, 16, 111, 1)\n", "108\n", - "item='Deodorant Rosemary Mint 2.50 Ounces' clust_tuple=(108, 84, 64, 78)\n", - "item='LOREAL Collagen Filler Eye Treatment' clust_tuple=(108, 199, 91, 78)\n", - "item=\"Dr. King's Natural Medicine Anxiety and Nervousness, 2 Fluid Ounce\" clust_tuple=(108, 38, 64, 78)\n", - "item='NaturalCare Homeopathic Ultra Vein-Gard Leg Therapy Cream, 2.25-Ounce Package' clust_tuple=(108, 199, 41, 78)\n", - "item='Bumble and Bumble Leave in Conditioner (8 Ounces)' clust_tuple=(108, 199, 64, 224)\n", - "item='Avene Redness relief soothing cream SPF25, 1.35-Ounce Package' clust_tuple=(108, 190, 64, 224)\n", - "item=\"Burt's Bees Acne Targeted Spot Treatment, 0.26 Ounce Bottle\" clust_tuple=(108, 199, 41, 78)\n", - "item='Nizoral Anti-Dandruff Shampoo, 4 oz.' clust_tuple=(108, 211, 64, 160)\n", - "item=\"Dr. King's Natural Medicine Gout Symptom Formula, 2 Fluid Ounce\" clust_tuple=(108, 199, 41, 224)\n", - "item='Mary Kay Blemish Control Toner: Formula 3' clust_tuple=(108, 199, 64, 224)\n", + "item='Moroccan Mint Scented Anti Cellulite Cream with Indian Ginseng, Oregano, Horsetail, Juniper Berry, Coffee, Caffeine and More,By Diva Stuff' clust_tuple=(108, 101, 88, 111, 2)\n", + "item=\"Dr. King's Natural Medicine Gout Symptom Formula, 2 Fluid Ounce\" clust_tuple=(108, 190, 88, 108, 1)\n", + "item='Kiss My Face Face Factor Sun Screen for Face and Neck, SPF 30, 2 Ounce Tube' clust_tuple=(108, 43, 110, 121, 0)\n", + "item='Wild Growth Hair Care System' clust_tuple=(108, 43, 101, 111, 2)\n", + "item='GrandeLASH MD Eyelash Enhancer for Length, Fullness, and Darkness,2 ml' clust_tuple=(108, 43, 101, 111, 3)\n", + "item=\"Dr. King's Natural Medicine Sciatic Nerve Formula , 2 Fluid Ounce\" clust_tuple=(108, 190, 88, 108, 2)\n", + "item=\"Smiles' Prid Homeopathic Drawing Salve, 18 GM, 1 each\" clust_tuple=(108, 190, 88, 121, 0)\n", + "item='Mederma Cream with SPF 30, 20 Grams' clust_tuple=(108, 101, 88, 111, 1)\n", + "item=\"Dr. King's Natural Medicine Advanced Arnica , 2 Fluid Ounce\" clust_tuple=(108, 190, 101, 108, 0)\n", + "item='IQ Natural Microdermabrasion Exfoliate Crystals Aluminum Oxide 1.5oz' clust_tuple=(108, 101, 101, 121, 0)\n", "109\n", - "item='ELMA&SANA Golden Argan Oil ® 100 Cold Pressed Virgin Organic Certified By Ecocert -1oz(30ml)' clust_tuple=(109, 84, 141, 78)\n", - "item='Skinceuticals Daily Moisturize Pore-minimizing Moisturizer For Normal Or Oily Skin, 2-Ounce Jar' clust_tuple=(109, 199, 141, 78)\n", - "item='Deep Sea Cosmetics Sensual Dead Sea Body Salt Scrub milk and honey scent' clust_tuple=(109, 84, 146, 78)\n", - "item='Shampoo Green Apple and Ginger 8 Ounces' clust_tuple=(109, 84, 72, 78)\n", - "item='Desert Essence Thoroughly Clean Face Wash - Original -- 8.5 fl oz' clust_tuple=(109, 84, 146, 78)\n", - "item='Natural Clear Skin Cleansing Sponge' clust_tuple=(109, 84, 141, 78)\n", - "item='ELMA&SANA® Golden Argan Oil 100% Pure Cold Pressed Virgin Organic Certified By Ecocert -4oz(120ml)' clust_tuple=(109, 84, 146, 78)\n", - "item='Body Lotion, Coconut & Papaya - 13oz' clust_tuple=(109, 84, 146, 78)\n", - "item='Eminence Wild Plum Eye Cream, 1.05 Ounce' clust_tuple=(109, 84, 72, 78)\n", - "item='Desert Essence Blemish Touch Concealer Light .33 oz' clust_tuple=(109, 199, 141, 78)\n" + "item='Moisturizer-Almond Aloe With SPF15 Earth Science 5 oz Cream' clust_tuple=(109, 209, 124, 20, 0)\n", + "item=\"Dr. Bronner's & All-One Organic Lotion for Hands & Body, Peppermint, 8-Ounce Pump Bottle\" clust_tuple=(109, 7, 110, 31, 0)\n", + "item='AUBREY Collagen Restorative Moisturizer 1.7 fl.oz' clust_tuple=(109, 7, 110, 111, 0)\n", + "item='Home Health Roll-On Deodorant Herbal Scent -- 3 fl oz' clust_tuple=(109, 152, 124, 111, 0)\n", + "item='Moisturizer-Daily Essential Jojoba/Aloe Desert Essence 4 oz Cream' clust_tuple=(109, 235, 110, 111, 0)\n", + "item='Reviva - Seaweed Soap, 4.5 oz bar soap' clust_tuple=(109, 60, 124, 111, 0)\n", + "item=\"Organic Peppermint Hair Conditioner and Style Creme Dr. Bronner's 6 oz Cream\" clust_tuple=(109, 209, 110, 111, 1)\n", + "item='Perfume-Bourbon Vanilla Ecco Bella Botanicals 1 oz Liquid' clust_tuple=(109, 235, 110, 111, 1)\n", + "item='Devoted Creations Forever Black 50XXX Tanning Lotion Instantly Dark Dramatic Bronzing Gelee 12.25 oz' clust_tuple=(109, 184, 110, 72, 0)\n", + "item='derma e Pycnognol Facial Toner, Fragrance Free, 6-Ounce Bottle' clust_tuple=(109, 152, 110, 185, 0)\n" ] } ], @@ -236,23 +211,54 @@ " if len(sim) == 0:\n", " continue\n", " print(i)\n", - " for item, clust_tuple in sim:\n", + " for asin, item, clust_tuple in sim:\n", " print(f\"{item=} {clust_tuple=}\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import Counter\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values(), bins=100)\n", + "plt.show()" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "12101" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(set(item[-1] for item in items_with_tuples))" + ] }, { "cell_type": "code", diff --git a/src/rqvae_data.py b/src/rqvae_data.py index b31122da..19fb23d1 100644 --- a/src/rqvae_data.py +++ b/src/rqvae_data.py @@ -92,9 +92,9 @@ def search_similar_items(items_with_tuples, clust2search, max_cnt=5): random.shuffle(items_with_tuples) cnt = 0 similars = [] - for item, clust_tuple in items_with_tuples: + for asin, item, clust_tuple in items_with_tuples: if clust_tuple[: len(clust2search)] == clust2search: - similars.append((item, clust_tuple)) + similars.append((asin, item, clust_tuple)) cnt += 1 if cnt >= max_cnt: return similars From 7ff12a0ddfda1421581a6a053563610d1442c97f Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 18 Dec 2024 22:12:43 +0300 Subject: [PATCH 006/175] add review md --- review.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ todo.txt | 30 ------------------------------ 2 files changed, 52 insertions(+), 30 deletions(-) create mode 100644 review.md delete mode 100644 todo.txt diff --git a/review.md b/review.md new file mode 100644 index 00000000..bfd3618d --- /dev/null +++ b/review.md @@ -0,0 +1,52 @@ +# Review + +## Links + +- [dataset](https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html) + +## Remarks + +- no biases on leave one out strategy (обрезаем по строго временному порогу) + +## Todo + +### Train + +- На чем обучать? То есть на каких данных запускать backward pass? +- train model + +### Collisions + +- fix collisisons +- last index = `KMeans(last residuals, n=|last codebook|)` - collision +- remainder = last embedding +- auto increment last index (check paper) +- Research last index aggregation + +#### possible collisions example + +- item1: 1 2 3 0 +- item2: 1 2 3 1 +- item3: 4 5 6 0/2 +- item4: 4 5 6 1/3 + +### Retreive + +- single item -> ok +- too many items -> get embeddings -> score. Softmax(collisions), torch.logsoftmax(logits) -> score -> argmax + +### Framework + +- positional emb for item & codebook +- splitting item ? + +### positional embeddings example + +- (000 111 222) - item +- (012 012 012) - codebook + +### Fixes in framework + +- user_id & codebook_ids -> repr ??? +- add last 'sequence' prediction, now only last item is supported +- dataloader (semantic ids lens) diff --git a/todo.txt b/todo.txt deleted file mode 100644 index ca4034bd..00000000 --- a/todo.txt +++ /dev/null @@ -1,30 +0,0 @@ -1) no biases on leave one out strategy (обрезаем по строго временному порогу) -2) data: https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html#:~:text=image%20features-,Beauty,-reviews%20(2%2C023%2C070%20reviews - - - -# На чем обучать? То есть на каких данных запускать backward pass? -# train model - -# TODO fix collisisons (remainder = last embedding, auto-increment 4th id) - -# 1 2 3 0 -# 1 2 3 1 -# 4 5 6 0/2 -# 4 5 6 1/3 - -# Research last index aggregation - -# 1) last index = KMeans(last residuals, n=|last codebook|) - collision -# 2) auto increment last index (check paper) -# 3) decoder -# 4) [(1 2 3), (1 2 3)] single item -> ok -# 4.1) several -> get embeddings -> score. softmax(collisions), torch.logsoftmax(logits) -> score -> argmax - -# pos emb for item & codebook (000 111 222) - item -# codebook (012 012 012) -# splitting item ? - -user_id & cb_ids -> repr -last 'seq' prediction -dataloader (semantic ids lens) \ No newline at end of file From 7c827a3c12836a3824d246bfc2f0c80090e8613d Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 00:14:26 +0300 Subject: [PATCH 007/175] add rqvae dataset --- configs/train/rqvae_train_config.json | 78 +++++++++++++ modeling/dataset/base.py | 68 +++++++++++ modeling/dataset/samplers/__init__.py | 1 + modeling/dataset/samplers/identity.py | 35 ++++++ modeling/train.py | 4 + src/main.ipynb | 161 ++++++++------------------ src/rqvae.py | 2 +- src/train.py | 41 +++++++ 8 files changed, 274 insertions(+), 116 deletions(-) create mode 100644 configs/train/rqvae_train_config.json create mode 100644 modeling/dataset/samplers/identity.py create mode 100644 src/train.py diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json new file mode 100644 index 00000000..4bdd6c10 --- /dev/null +++ b/configs/train/rqvae_train_config.json @@ -0,0 +1,78 @@ +{ + "experiment_name": "rqvae_beauty", + "best_metric": "eval/ndcg@20", + "dataset": { + "type": "rqvae", + "path_to_data_dir": "../data", + "name": "Beauty", + "samplers": { + "type": "identity" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 128, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "rqvae", + "user_prefix": "user", + "sequence_prefix": "item", + "labels_prefix": "labels", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.2, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 1e-4 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "ce", + "predictions_prefix": "logits", + "labels_prefix": "labels", + "output_prefix": "downstream_loss", + "weight": 1.0 + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + } + ] + } +} diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 9240cc2d..94b8884b 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -700,6 +700,74 @@ def meta(self): 'num_items': self.num_items, 'max_sequence_length': self.max_sequence_length } + +class RqVaeDataset(BaseDataset, config_name='rqvae'): + + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_items + ): + self._train_sampler = train_sampler + self._validation_sampler = validation_sampler + self._test_sampler = test_sampler + self._num_items = num_items + + @classmethod + def create_from_config(cls, config, **kwargs): + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + train_dataset, validation_dataset, test_dataset = [], [], [] + + dataset_path = os.path.join(data_dir_path, '{}.pt'.format('all_data')) + df = torch.load(dataset_path, weights_only=False) + + for _idx, sample in df.iterrows(): + train_dataset.append({ + 'item.id': sample['asin'], + 'item.embed': sample["embeddings"] + }) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + + train_sampler = TrainSampler.create_from_config( + config['samplers'], + dataset=train_dataset + ) + validation_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=validation_dataset + ) + test_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=test_dataset + ) + + return cls( + train_sampler=train_sampler, + validation_sampler=validation_sampler, + test_sampler=test_sampler, + num_items=len(df) + ) + + def get_samplers(self): + return self._train_sampler, self._validation_sampler, self._test_sampler + + @property + def num_items(self): + return self._num_items + + @property + def max_sequence_length(self): + return self._max_sequence_length + + @property + def meta(self): + return { + 'num_items': self.num_items + } class MultiDomainScientificDataset(ScientificDataset, config_name='multi_domain_scientific'): diff --git a/modeling/dataset/samplers/__init__.py b/modeling/dataset/samplers/__init__.py index c2bf473d..41773163 100644 --- a/modeling/dataset/samplers/__init__.py +++ b/modeling/dataset/samplers/__init__.py @@ -9,3 +9,4 @@ from .mclsr import MCLSRTrainSampler, MCLSRPredictionEvalSampler from .pop import PopTrainSampler, PopEvalSampler from .s3rec import S3RecPretrainTrainSampler, S3RecPretrainEvalSampler +from .identity import IdentityTrainSampler, IdentityEvalSampler diff --git a/modeling/dataset/samplers/identity.py b/modeling/dataset/samplers/identity.py new file mode 100644 index 00000000..ffe01e23 --- /dev/null +++ b/modeling/dataset/samplers/identity.py @@ -0,0 +1,35 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + +import copy + + +class IdentityTrainSampler(TrainSampler, config_name='identity'): + + def __init__(self, dataset): + super().__init__() + self._dataset = dataset + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + dataset=kwargs['dataset'] + ) + + def __getitem__(self, index): + sample = copy.deepcopy(self._dataset[index]) + return sample + + +class IdentityEvalSampler(EvalSampler, config_name='identity'): + def __init__(self, dataset): + self._dataset = dataset + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + dataset=kwargs['dataset'] + ) + + def __getitem__(self, index): + sample = copy.deepcopy(self._dataset[index]) + return sample \ No newline at end of file diff --git a/modeling/train.py b/modeling/train.py index b15672bf..0675d42a 100644 --- a/modeling/train.py +++ b/modeling/train.py @@ -96,6 +96,10 @@ def main(): dataset=test_sampler, **dataset.meta ) + + print(len(train_dataloader)) + + exit(0) model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) if 'checkpoint' in config: diff --git a/src/main.ipynb b/src/main.ipynb index e942991b..61c464a8 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -31,15 +31,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 4/4 [00:07<00:00, 1.95s/it]\n" + "100%|██████████| 4/4 [00:05<00:00, 1.38s/it]\n" ] }, { "data": { "text/plain": [ - "{'loss': tensor(0.0056, device='cuda:0', grad_fn=),\n", - " 'recon_loss': tensor(0.0051, device='cuda:0'),\n", - " 'rqvae_loss': tensor(0.0005, device='cuda:0'),\n", + "{'loss': tensor(0.0057, grad_fn=),\n", + " 'recon_loss': tensor(0.0052),\n", + " 'rqvae_loss': tensor(0.0005),\n", " 'unique/0': 256,\n", " 'unique/1': 256,\n", " 'unique/2': 256,\n", @@ -74,7 +74,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -96,109 +96,39 @@ "name": "stdout", "output_type": "stream", "text": [ - "100\n", - "item='Simple Protecting Light Moisturizer Spf 15, 4.2 Ounce' clust_tuple=(100, 43, 110, 111, 20)\n", - "item=\"POND'S Dry Skin Cream, 10.1-oz. (Pack of 3)\" clust_tuple=(100, 144, 110, 111, 0)\n", - "item='Kiss My Face Natural Mineral Lotion Sunscreen SPF 40 with Hydresia, 3 Fluid Ounce' clust_tuple=(100, 43, 110, 111, 16)\n", - "item=\"Pond's Luminous Moisture Day SPF 15 Lotion, 1.7 Ounce\" clust_tuple=(100, 43, 101, 111, 6)\n", - "item='St. Ives Facial Moisturizer, Timeless Skin Collagen Elastin, 10oz' clust_tuple=(100, 43, 110, 121, 2)\n", - "item='Clarins Cleansing Milk - Oily to Combination Skin, 7-Ounces Box' clust_tuple=(100, 43, 15, 111, 0)\n", - "item=\"POND'S Rejuveness Anti-Wrinkle Cream, 7-oz.\" clust_tuple=(100, 43, 110, 111, 9)\n", - "item='Olay Total Effects Blemish Control Salicylic Acid Acne Cleanser 5.0 Fl Oz (Pack of 3)' clust_tuple=(100, 144, 110, 111, 1)\n", - "item='Hydroxatone 90 Second Wrinkle Reducer' clust_tuple=(100, 43, 110, 31, 0)\n", - "item='Collagen Essence Full Face Mask 10 Pieces' clust_tuple=(100, 144, 88, 111, 0)\n", - "101\n", - "item='Alba Botanica Fragrance Free SPF 30 Mineral Very Emollient Sunscreen, 4 Ounce Tube' clust_tuple=(101, 141, 88, 111, 10)\n", - "item='Alba Aloe Vera Sunblock SPF 30, 4 Ounce' clust_tuple=(101, 141, 88, 111, 6)\n", - "item='Alba Botanica Deep Moisturizing Kukui Nut Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 209, 88, 111, 2)\n", - "item='Alba Botanica Sparkling Mint Very Emollient Bath & Shower Gel, 32 Ounce Bottle' clust_tuple=(101, 209, 88, 111, 3)\n", - "item='Alba Botanica Leave-In Conditioner, 7 Ounce Tubes' clust_tuple=(101, 141, 88, 111, 7)\n", - "item='Alba Botanica Very Emollient Sunless Tanner, 4 Ounce Tube' clust_tuple=(101, 141, 88, 111, 14)\n", - "item='Alba Botanica Rejuvenating Papaya Mango Hawaiian Body Cream, 6.5 Ounce Jar' clust_tuple=(101, 141, 88, 111, 13)\n", - "item='Alba Botanica Pure Lavender SPF 45 Very Emollient Sunscreen, 4 Ounce Tubes (Pack of 2)' clust_tuple=(101, 141, 88, 111, 16)\n", - "item='Alba Botanica Even Advanced Sea Mineral Cleansing Gel, 6 Ounce Bottles' clust_tuple=(101, 141, 88, 111, 4)\n", - "item='Own Products Rejuvenating Facial Cleanser' clust_tuple=(101, 43, 110, 111, 1)\n", - "102\n", - "item='Finulite Cellulite Smoothing Massage Mitt' clust_tuple=(102, 43, 88, 72, 0)\n", - "item='Neutrogena Healthy Skin Liquid Makeup, Classic Ivory 10, 1 Ounce' clust_tuple=(102, 208, 110, 111, 1)\n", - "item='Miracle Skin Transformer Face - SPF 20 - Translucent' clust_tuple=(102, 43, 80, 111, 0)\n", - "item='Physicians Formula Super BB All-in-1 Beauty Balm Cream Light Medium -- 1.2 fl oz' clust_tuple=(102, 184, 110, 111, 0)\n", - "item='Mary Kay Mineral Powder Foundation Beige 2' clust_tuple=(102, 209, 80, 111, 0)\n", - "item='Deep Sea Cosmetics Sensual Dead Sea Body Salt Scrub milk and honey scent' clust_tuple=(102, 43, 88, 111, 2)\n", - "item='Garnier Skin Renew Miracle Skin Perfector Bb Cream, Combination To Oily Skin, Light/Medium, 2 Fluid Ounce' clust_tuple=(102, 152, 110, 111, 1)\n", - "item='Studio Tone Correcting Powder' clust_tuple=(102, 7, 110, 31, 0)\n", - "item='Garnier Skin Renew Miracle Skin Perfector B.B. Cream, Medium and Deep, 2.5 Fluid Ounce' clust_tuple=(102, 43, 88, 111, 5)\n", - "item='Maybelline Mineral Power Finishing Veil Bronzing Powder' clust_tuple=(102, 208, 110, 111, 0)\n", - "103\n", - "item='Spornette No.316 Deville Hair Brush' clust_tuple=(103, 43, 107, 111, 1)\n", - "item='Diane 2" Bobby Pins, Black, 1lb Box' clust_tuple=(103, 43, 110, 31, 5)\n", - "item='Spornette German Porcupine Oval Cushion Brush' clust_tuple=(103, 152, 88, 72, 0)\n", - "item='Diane 3" Hair Pins, Black, 32/card' clust_tuple=(103, 43, 107, 14, 1)\n", - "item='Spornette Large Smooth Operator, 4 Ounce' clust_tuple=(103, 66, 97, 111, 0)\n", - "item='10 Pcs Black Plastic Single Prong DIY Hairstyle Alligator Hair Clip 3.1" Long' clust_tuple=(103, 152, 97, 176, 0)\n", - "item='Diane Double Prong Clip 1.75 Inches, 80 Clips' clust_tuple=(103, 43, 88, 72, 2)\n", - "item='Aquasentials Long Handle Bath Brush (Clear Handle)' clust_tuple=(103, 152, 16, 31, 0)\n", - "item='The Wet Comb Detangling Hair Comb - Metallics Collection (Colors May Vary)' clust_tuple=(103, 190, 88, 111, 0)\n", - "item='Sexy Hair Hard Up Gel, Packaging May Vary, 16.9-Ounce Pump Bottle' clust_tuple=(103, 43, 88, 111, 0)\n", - "104\n", - "item='Fair & White Exclusive Gel Creme Whitenizer #08003' clust_tuple=(104, 43, 178, 111, 0)\n", - "item='RoC BRILLIANCE Eye Beautifier .3 fl. oz.' clust_tuple=(104, 60, 230, 111, 0)\n", - "item='RoC BRILLIANCE Night Recharging Moisturizer, Activating Serum & Recharging Creme' clust_tuple=(104, 43, 110, 111, 0)\n", - "105\n", - "item=\"Wee Ones Baby Girls' Knot Genie Teeny Genie-Peaceful Pink\" clust_tuple=(105, 43, 170, 31, 0)\n", - "item='Remington Wet 2 Straight 2" Wide Plate Wet/Dry Ceramic Hair Straightening Iron with Tourmaline' clust_tuple=(105, 43, 110, 176, 0)\n", - "item='Remington S-9951 Frizz Therapy, Humidity Resistant Ceramic Flat Hairstyling Iron, 1 Inch' clust_tuple=(105, 43, 110, 176, 2)\n", - "item='John Frieda Sleek Finish 1 Inch Flat Iron' clust_tuple=(105, 43, 170, 31, 3)\n", - "item='Quick Beader for loading beads on hair' clust_tuple=(105, 43, 170, 31, 2)\n", - "item='Remington B90P Pearl Ceramic Paddle Hair Brush with Real Crushed Pearls' clust_tuple=(105, 105, 107, 31, 0)\n", - "item='Infiniti Professional Nano Tourmaline Ceramic Curling Iron, 1 1/2-Inch' clust_tuple=(105, 43, 107, 176, 1)\n", - "item='Remington S6500 Sleek and Curl Ceramic Pearl Multi-styler Hair Straightener, 1 Inch' clust_tuple=(105, 43, 110, 176, 5)\n", - "item='BaByliss PRO Nano Titanium Mini Straightening Iron (1 inch)' clust_tuple=(105, 208, 68, 31, 0)\n", - "item='Remington Ci96z1 Silk Ceramic Elliptical Waving Wand' clust_tuple=(105, 208, 170, 31, 2)\n", - "106\n", - "item='50 New Empty Clear Plastic Cosmetic Containers 5 Gram Size Pot Jars Eyshadow Container Lot' clust_tuple=(106, 112, 88, 72, 0)\n", - "item='Swisspers Cotton Rounds, 100 Count' clust_tuple=(106, 43, 110, 31, 7)\n", - "item='Lipstick - 10pc. Assorted Color Lipstick Set' clust_tuple=(106, 43, 110, 111, 7)\n", - "item='Clean & Clear Instant Oil-Absorbing Sheets 50 sheets' clust_tuple=(106, 43, 110, 111, 0)\n", - "item='Bare Escentuals Tapered Shadow Brush' clust_tuple=(106, 43, 110, 31, 2)\n", - "item='EZ Flow Grand Artist Oval 508 with Brush Cover' clust_tuple=(106, 43, 88, 111, 2)\n", - "item='Classic Cotton Balls Jumbo Size, 100 Count' clust_tuple=(106, 43, 88, 111, 0)\n", - "item='Sally Hansen Airbrush Leg Tan Glow,4.4 oz' clust_tuple=(106, 43, 110, 31, 1)\n", - "item='FantaSea Cosmetic Blending Sponge' clust_tuple=(106, 43, 110, 31, 6)\n", - "item='UBU Super Softy Extra Large and Soft Powder Brush' clust_tuple=(106, 43, 110, 31, 8)\n", - "107\n", - "item='Weleda Calendula Shampoo and Body Wash, 6.8-Ounce' clust_tuple=(107, 209, 16, 111, 0)\n", - "item='Africana - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 111, 13)\n", - "item=\"Burt's Bees Radiance Facial Cleanser, 6 Fluid Ounce\" clust_tuple=(107, 95, 110, 111, 0)\n", - "item='Kimora Lee Simmons Baby Phat Goddess Eau de Parfum Spray for Women, 3.4 Ounce' clust_tuple=(107, 43, 110, 31, 1)\n", - "item='White Full - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 31, 6)\n", - "item='With Love by Hilary Duff for Women 3.3 oz Eau de Parfum Spray' clust_tuple=(107, 43, 88, 111, 1)\n", - "item=\"Burt's Bees Orange Essence Facial Cleanser, 4.3 Ounces\" clust_tuple=(107, 43, 110, 111, 0)\n", - "item='White Musk - 6ml (.2 oz) Perfume Oil by Al-Rehab (Crown Perfumes)' clust_tuple=(107, 43, 110, 31, 9)\n", - "item='Betsey Johnson Too Eau de Parfum Spray, 3.4 Ounce' clust_tuple=(107, 43, 110, 31, 3)\n", - "item=\"L'Oreal Paris EverStrong Bodify Shampoo, 8.5-Fluid Ounce\" clust_tuple=(107, 36, 16, 111, 1)\n", - "108\n", - "item='Moroccan Mint Scented Anti Cellulite Cream with Indian Ginseng, Oregano, Horsetail, Juniper Berry, Coffee, Caffeine and More,By Diva Stuff' clust_tuple=(108, 101, 88, 111, 2)\n", - "item=\"Dr. King's Natural Medicine Gout Symptom Formula, 2 Fluid Ounce\" clust_tuple=(108, 190, 88, 108, 1)\n", - "item='Kiss My Face Face Factor Sun Screen for Face and Neck, SPF 30, 2 Ounce Tube' clust_tuple=(108, 43, 110, 121, 0)\n", - "item='Wild Growth Hair Care System' clust_tuple=(108, 43, 101, 111, 2)\n", - "item='GrandeLASH MD Eyelash Enhancer for Length, Fullness, and Darkness,2 ml' clust_tuple=(108, 43, 101, 111, 3)\n", - "item=\"Dr. King's Natural Medicine Sciatic Nerve Formula , 2 Fluid Ounce\" clust_tuple=(108, 190, 88, 108, 2)\n", - "item=\"Smiles' Prid Homeopathic Drawing Salve, 18 GM, 1 each\" clust_tuple=(108, 190, 88, 121, 0)\n", - "item='Mederma Cream with SPF 30, 20 Grams' clust_tuple=(108, 101, 88, 111, 1)\n", - "item=\"Dr. King's Natural Medicine Advanced Arnica , 2 Fluid Ounce\" clust_tuple=(108, 190, 101, 108, 0)\n", - "item='IQ Natural Microdermabrasion Exfoliate Crystals Aluminum Oxide 1.5oz' clust_tuple=(108, 101, 101, 121, 0)\n", - "109\n", - "item='Moisturizer-Almond Aloe With SPF15 Earth Science 5 oz Cream' clust_tuple=(109, 209, 124, 20, 0)\n", - "item=\"Dr. Bronner's & All-One Organic Lotion for Hands & Body, Peppermint, 8-Ounce Pump Bottle\" clust_tuple=(109, 7, 110, 31, 0)\n", - "item='AUBREY Collagen Restorative Moisturizer 1.7 fl.oz' clust_tuple=(109, 7, 110, 111, 0)\n", - "item='Home Health Roll-On Deodorant Herbal Scent -- 3 fl oz' clust_tuple=(109, 152, 124, 111, 0)\n", - "item='Moisturizer-Daily Essential Jojoba/Aloe Desert Essence 4 oz Cream' clust_tuple=(109, 235, 110, 111, 0)\n", - "item='Reviva - Seaweed Soap, 4.5 oz bar soap' clust_tuple=(109, 60, 124, 111, 0)\n", - "item=\"Organic Peppermint Hair Conditioner and Style Creme Dr. Bronner's 6 oz Cream\" clust_tuple=(109, 209, 110, 111, 1)\n", - "item='Perfume-Bourbon Vanilla Ecco Bella Botanicals 1 oz Liquid' clust_tuple=(109, 235, 110, 111, 1)\n", - "item='Devoted Creations Forever Black 50XXX Tanning Lotion Instantly Dark Dramatic Bronzing Gelee 12.25 oz' clust_tuple=(109, 184, 110, 72, 0)\n", - "item='derma e Pycnognol Facial Toner, Fragrance Free, 6-Ounce Bottle' clust_tuple=(109, 152, 110, 185, 0)\n" + "230\n", + "item='Nicole by OPI Nail Lacquer, Make Mine Lime, 0.5 Fluid Ounce' clust_tuple=(230, 230, 151, 95, 0)\n", + "231\n", + "item='Bundle Monster 5 Nail Art Nailart Manicure Wheels w/ 3D Designs Glitters Rhinestones Beads - total over 7000pc' clust_tuple=(231, 62, 31, 169, 0)\n", + "item='Bundle Monster 26pc Nail Art Image Manicure Stamping Plates-2013 CYO Collection' clust_tuple=(231, 62, 171, 126, 0)\n", + "item='MASH Set of 25 Nail Art Nailart Polish Stamp Stamping Manicure Image Plates Accessories Set Kit' clust_tuple=(231, 62, 101, 169, 1)\n", + "item='PUEEN 2013 Nail Art Stamp Collection Set 24E - LOVE ELEMENTS - NEW Unique Set of 24 Nailart Polish Stamping Manicure Image Plates Accessories Kit (Totaling 144 Images) with BONUS Storage Case' clust_tuple=(231, 60, 171, 95, 2)\n", + "item='Bundle Monster Nail Art Nailart Polish Stamp Stamping Manicure Image Plates Accessories Set Kit 25pc' clust_tuple=(231, 62, 171, 169, 2)\n", + "item='Konad Stamping Nail Art Set Care Ca' clust_tuple=(231, 62, 171, 95, 0)\n", + "item='Nail Art Plates Bundle - 40 PACK , Nail Polish Stamping Manicure Plates, 40 Different Plates A total of over 400 designs' clust_tuple=(231, 62, 101, 95, 1)\n", + "item='CICI&SISI Nail Art Stamp Collection Set Jumbo 2 - Set of 6 JUMBO Nailart Polish Stamping Manicure Image Plates Accessories Kit (Totaling 216 Images) All New Designs with FREE STAMPER & SCRAPER TOOLS SET PROMOTIONAL OFFER' clust_tuple=(231, 62, 171, 95, 7)\n", + "item='NAIL ART IMAGE PLATES POLISH STAMP STAMPING MIXED DESIGNS SET KIT 25pc' clust_tuple=(231, 62, 171, 95, 3)\n", + "232\n", + "item='KLEANCOLOR Nail Lacquer - Chunky Holo Black 236' clust_tuple=(232, 66, 118, 59, 0)\n", + "item='OPI Nail Lacquer, DS Reflection, 0.5-Fluid Ounce' clust_tuple=(232, 116, 151, 107, 0)\n", + "item='Revlon Sheer Nail Enamel, Sheer Rose 011' clust_tuple=(232, 33, 171, 180, 0)\n", + "item=\"OPI Nail Polish Nicki Minaj Collection - Did It On 'Em\" clust_tuple=(232, 62, 151, 95, 1)\n", + "item='Opi Nail Polish Nicki Minaj Save Me Nl N17 .5 Oz' clust_tuple=(232, 62, 151, 95, 0)\n", + "item='Sensationail Invincible Gel Polish 71587 Pink Chiffon' clust_tuple=(232, 116, 151, 198, 0)\n", + "item='Nabi Nail Polish Purple Jumbo Glitter 161 - 15mL' clust_tuple=(232, 66, 151, 180, 0)\n", + "item='Jade Is The New Black, NLH45, OPI, Hong Kong / Nail Polish / Lacquer / Enamel' clust_tuple=(232, 131, 171, 95, 0)\n", + "233\n", + "234\n", + "item='Orly Nail Lacquer, Terracotta, 0.6 Fluid Ounce' clust_tuple=(234, 62, 151, 169, 0)\n", + "item='LA Colors Nail Art Polish - 48 Colors! NEW!' clust_tuple=(234, 170, 171, 95, 0)\n", + "item='Del Sol - Color Changing Nail Polish - Reckless' clust_tuple=(234, 60, 171, 95, 0)\n", + "item='Kleancolor - Neon Brights - 6 Nail Lacquer Colors' clust_tuple=(234, 62, 151, 95, 0)\n", + "item='Kleancolor - 6 Awesome Nail Lacquers - Set 14' clust_tuple=(234, 62, 151, 95, 1)\n", + "235\n", + "236\n", + "237\n", + "238\n", + "239\n" ] } ], @@ -206,23 +136,24 @@ "from rqvae_data import search_similar_items\n", "\n", "\n", - "for i in range(100, 110):\n", + "for i in range(230, 240):\n", " sim = search_similar_items(items_with_tuples, (i,), 10)\n", " if len(sim) == 0:\n", " continue\n", " print(i)\n", " for asin, item, clust_tuple in sim:\n", - " print(f\"{item=} {clust_tuple=}\")" + " if 'nail' in item.lower():\n", + " print(f\"{item=} {clust_tuple=}\")" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGdCAYAAADjWSL8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKh1JREFUeJzt3X9w1PWdx/HXmpAVYvI9QtzdbAkxThHBoNcGL4Q68jvAEVN/TKFy3cKUAakSTIFTwLsp7VSC3hTaG06OMo6cgBeno7HeQVPDKbEMhB/RnIBIcQoaapagTXYTmttg+NwfHb/jEsAkBpNPeD5mvjP5fr7v/e7n8xmGfc1nv9/veowxRgAAAJa5rrc7AAAA0B2EGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlRJ7uwNXy4ULF/TRRx8pJSVFHo+nt7sDAAA6wRij5uZmBYNBXXfdldda+m2I+eijj5SZmdnb3QAAAN1QV1enoUOHXrGm34aYlJQUSX+dhNTU1F7uDQAA6IxoNKrMzEz3c/xK+m2I+ewrpNTUVEIMAACW6cylIFzYCwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGClxN7ugK1uWrEjbv/U2pm91BMAAK5NrMQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALBSl0LMxo0bdfvttys1NVWpqanKz8/Xb3/7W/f4vHnz5PF44raxY8fGnSMWi6m4uFjp6elKTk5WUVGRTp8+HVfT2NioUCgkx3HkOI5CoZCampq6P0oAANDvdCnEDB06VGvXrtWhQ4d06NAhTZo0Sd/+9rd19OhRt2b69Omqr693t507d8ado6SkROXl5SorK9OePXvU0tKiwsJCtbe3uzVz5sxRbW2tKioqVFFRodraWoVCoS85VAAA0J906Tkx99xzT9z+k08+qY0bN6q6ulq33XabJMnr9SoQCFzy9ZFIRM8++6y2bt2qKVOmSJK2bdumzMxM7dq1S9OmTdOxY8dUUVGh6upq5eXlSZI2b96s/Px8HT9+XCNGjOjyIAEAQP/T7Wti2tvbVVZWpnPnzik/P99t3717t3w+n2655RYtWLBADQ0N7rGamhqdP39eBQUFblswGFROTo727t0rSdq3b58cx3EDjCSNHTtWjuO4NZcSi8UUjUbjNgAA0H91OcQcPnxYN9xwg7xerxYtWqTy8nKNGjVKkjRjxgxt375dr7/+un7+85/r4MGDmjRpkmKxmCQpHA4rKSlJgwcPjjun3+9XOBx2a3w+X4f39fl8bs2llJaWutfQOI6jzMzMrg4NAABYpMs/OzBixAjV1taqqalJL730kubOnauqqiqNGjVKs2fPdutycnI0ZswYZWVlaceOHbr//vsve05jjDwej7v/+b8vV3OxlStXaunSpe5+NBolyAAA0I91OcQkJSXp61//uiRpzJgxOnjwoH75y19q06ZNHWozMjKUlZWlEydOSJICgYDa2trU2NgYtxrT0NCgcePGuTVnzpzpcK6zZ8/K7/dftl9er1der7erwwEAAJb60s+JMca4Xxdd7JNPPlFdXZ0yMjIkSbm5uRowYIAqKyvdmvr6eh05csQNMfn5+YpEIjpw4IBbs3//fkUiEbcGAACgSysxq1at0owZM5SZmanm5maVlZVp9+7dqqioUEtLi1avXq0HHnhAGRkZOnXqlFatWqX09HTdd999kiTHcTR//nwtW7ZMQ4YMUVpampYvX67Ro0e7dyuNHDlS06dP14IFC9zVnYULF6qwsJA7kwAAgKtLIebMmTMKhUKqr6+X4zi6/fbbVVFRoalTp6q1tVWHDx/W888/r6amJmVkZGjixIl68cUXlZKS4p5j/fr1SkxM1KxZs9Ta2qrJkydry5YtSkhIcGu2b9+uJUuWuHcxFRUVacOGDT00ZAAA0B94jDGmtztxNUSjUTmOo0gkotTU1B4//00rdsTtn1o7s8ffAwCAa01XPr/57SQAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAK3UpxGzcuFG33367UlNTlZqa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", "text/plain": [ "
" ] @@ -242,7 +173,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -251,7 +182,7 @@ "12101" ] }, - "execution_count": 16, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -284,7 +215,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.8" + "version": "3.11.11" } }, "nbformat": 4, diff --git a/src/rqvae.py b/src/rqvae.py index be10ecee..cfd4f902 100644 --- a/src/rqvae.py +++ b/src/rqvae.py @@ -57,7 +57,7 @@ def init_codebooks(self, embeddings): kmeans = faiss.Kmeans( d=embeddings_np.shape[1], k=n_clusters, - niter=1000, + niter=100, gpu=torch.cuda.is_available(), ) kmeans.train(embeddings_np) diff --git a/src/train.py b/src/train.py new file mode 100644 index 00000000..46560dfe --- /dev/null +++ b/src/train.py @@ -0,0 +1,41 @@ +def train_rqvae(): + data = torch.randn(1000, 10) # 1000 samples, 10 features + train_dataset = MyDataset(data) + train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) + + # Initialize model, optimizer, and loss function + model = RQVAE(input_dim=10, latent_dim=5) + optimizer = optim.Adam(model.parameters(), lr=1e-3) + + # Training loop + epochs = 10 + for epoch in range(epochs): + model.train() # Set model to training mode + running_loss = 0.0 + for batch_idx, batch_data in enumerate(train_loader): + batch_data = batch_data.float() # Ensure the data is in float32 format + optimizer.zero_grad() # Zero the gradients + + # Forward pass + recon_batch, z = model(batch_data) + + # Compute the loss (e.g., MSE loss for reconstruction + KL divergence for VAE) + # Replace with your actual loss calculation + reconstruction_loss = F.mse_loss(recon_batch, batch_data, reduction='sum') + # Example of a simple KL divergence term for VAE (replace with your method) + kl_loss = -0.5 * torch.sum(1 + z - z.pow(2) - z.exp()) # Example KL loss + + # Total loss (can combine reconstruction and KL losses) + loss = reconstruction_loss + kl_loss + + # Backpropagation + loss.backward() + optimizer.step() + + running_loss += loss.item() + + # Print statistics at the end of the epoch + avg_loss = running_loss / len(train_loader.dataset) + print(f"Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.4f}") + + print("Training finished!") \ No newline at end of file From 51410aeb690c13dd567de9c8159c50dbacb829fb Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 14:45:28 +0300 Subject: [PATCH 008/175] rqvae training implemented --- .gitignore | 1 + configs/train/rqvae_train_config.json | 42 +++---- modeling/dataloader/batch_processors.py | 8 ++ modeling/dataset/base.py | 5 +- modeling/loss/base.py | 39 +++++++ modeling/models/__init__.py | 1 + modeling/models/base.py | 7 ++ modeling/models/rqvae.py | 148 ++++++++++++++++++++++++ modeling/train.py | 4 - review.md | 4 + src/main.ipynb | 138 +++++++--------------- 11 files changed, 271 insertions(+), 126 deletions(-) create mode 100644 modeling/models/rqvae.py diff --git a/.gitignore b/.gitignore index 8b8e6f07..90acddb5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ data/* tensorboard_logs/* .venv papers +checkpoints/* diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index 4bdd6c10..d5d25308 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "best_metric": "eval/ndcg@20", + "train_steps_num": 6000, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", @@ -14,7 +14,7 @@ "type": "torch", "batch_size": 128, "batch_processor": { - "type": "basic" + "type": "embed" }, "drop_last": false, "shuffle": true @@ -23,7 +23,7 @@ "type": "torch", "batch_size": 256, "batch_processor": { - "type": "basic" + "type": "embed" }, "drop_last": false, "shuffle": false @@ -31,17 +31,12 @@ }, "model": { "type": "rqvae", - "user_prefix": "user", - "sequence_prefix": "item", - "labels_prefix": "labels", - "candidate_prefix": "candidates", - "embedding_dim": 64, - "num_heads": 2, - "num_layers": 2, - "dim_feedforward": 256, - "dropout": 0.2, - "activation": "gelu", - "layer_norm_eps": 1e-9, + "input_dim": 512, + "hidden_dim": 128, + "n_iter": 100, + "codebook_sizes": [256, 256, 256, 256], + "should_init_codebooks": true, + "should_reinit_unused_clusters": false, "initializer_range": 0.02 }, "optimizer": { @@ -50,19 +45,16 @@ "type": "adam", "lr": 1e-4 }, - "clip_grad_threshold": 5.0 + "clip_grad_threshold": 5.0, + "scheduler": { + "type": "step", + "step_size": 100, + "gamma": 0.98 + } }, "loss": { - "type": "composite", - "losses": [ - { - "type": "ce", - "predictions_prefix": "logits", - "labels_prefix": "labels", - "output_prefix": "downstream_loss", - "weight": 1.0 - } - ], + "type": "rqvae_loss", + "beta": 0.25, "output_prefix": "loss" }, "callback": { diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 436f98fe..9991a073 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -12,6 +12,14 @@ class IdentityBatchProcessor(BaseBatchProcessor, config_name='identity'): def __call__(self, batch): return torch.tensor(batch) + +class EmbedBatchProcessor(BaseBatchProcessor, config_name='embed'): + + def __call__(self, batch): + ids = torch.tensor([entry['item.id'] for entry in batch]) + embeds = torch.stack([entry['item.embed'] for entry in batch]) + + return {'ids': ids, 'embeddings': embeds} class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 94b8884b..ca9e451c 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -725,7 +725,7 @@ def create_from_config(cls, config, **kwargs): for _idx, sample in df.iterrows(): train_dataset.append({ - 'item.id': sample['asin'], + 'item.id': sample['asin_numeric'], 'item.embed': sample["embeddings"] }) @@ -766,7 +766,8 @@ def max_sequence_length(self): @property def meta(self): return { - 'num_items': self.num_items + 'num_items': self.num_items, + 'train_sampler': self._train_sampler } diff --git a/modeling/loss/base.py b/modeling/loss/base.py index d6bc56aa..ee7c1879 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -104,6 +104,45 @@ def forward(self, inputs): inputs[self._output_prefix] = loss.cpu().item() return loss + +class RqVaeLoss(TorchLoss, config_name='rqvae_loss'): + + def __init__(self, beta, output_prefix=None): + super().__init__() + self.beta = beta + self._output_prefix = output_prefix + + self._loss = nn.MSELoss() + + @classmethod + def create_from_config(cls, config, **kwargs): + # 0.25 is default Beta in paper + return cls( + beta = config.get('beta', 0.25), + output_prefix = config['output_prefix'], + ) + + def forward(self, inputs): + embeddings = inputs["embeddings"] + embeddings_restored = inputs["embeddings_restored"] + remainders = inputs["remainders"] + codebooks_vectors = inputs["codebooks_vectors"] + + rqvae_loss = 0 + + for remainder, codebook_vectors in zip(remainders, codebooks_vectors): + rqvae_loss += self.beta * self._loss( + remainder, codebook_vectors.detach() + ) + rqvae_loss += self._loss(codebook_vectors, remainder.detach()) + + recon_loss = self._loss(embeddings_restored, embeddings) + loss = (recon_loss + rqvae_loss).mean() # TODO mean? + + if self._output_prefix is not None: + inputs[self._output_prefix] = loss.cpu().item() + + return loss class BinaryCrossEntropyLoss(TorchLoss, config_name='bce'): diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index afed8466..e52aed9e 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -15,3 +15,4 @@ from .sasrec import SasRecModel, SasRecInBatchModel from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel +from .rqvae import RqVaeModel diff --git a/modeling/models/base.py b/modeling/models/base.py index e09a0eb4..28be6a98 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -27,6 +27,13 @@ def _init_weights(self, initializer_range): ) elif 'bias' in key: nn.init.zeros_(value.data) + elif 'codebook' in key: + nn.init.trunc_normal_( + value.data, + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range + ) else: raise ValueError(f'Unknown transformer weight: {key}') diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py new file mode 100644 index 00000000..616ca023 --- /dev/null +++ b/modeling/models/rqvae.py @@ -0,0 +1,148 @@ +from models.base import TorchModel + +import torch +import torch.nn as nn + +import torch + +from tqdm import tqdm +import faiss + +class RqVaeModel(TorchModel, config_name='rqvae'): + + def __init__( + self, + all_data, + input_dim: int, + hidden_dim: int, + n_iter: int, + codebook_sizes: list[int], + should_init_codebooks, + should_reinit_unused_clusters, + initializer_range + ): + super().__init__() + + self.n_iter = n_iter + + # Kmeans initialization + self.should_init_codebooks = should_init_codebooks + + # Trick with re-initing empty clusters + self.should_reinit_unused_clusters = should_reinit_unused_clusters + + # Enc and dec are mirrored copies of each other + self.encoder = self.make_encoding_tower(input_dim, hidden_dim) + self.decoder = self.make_encoding_tower(hidden_dim, input_dim) + + # Default initialization of codebook + self.codebooks = torch.nn.ParameterList() + for codebook_size in codebook_sizes: + cb = torch.FloatTensor(codebook_size, hidden_dim) + self.codebooks.append(cb) + + self._init_weights(initializer_range) + + embeddings = torch.stack([entry['item.embed'] for entry in all_data._dataset]) + + if self.should_init_codebooks: + self.init_codebooks(embeddings) + print('Codebooks initialized with Faiss Kmeans') + self.should_init_codebooks = False + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + all_data=kwargs['train_sampler'], + input_dim=config['input_dim'], + hidden_dim=config['hidden_dim'], + n_iter=config['n_iter'], + codebook_sizes=config['codebook_sizes'], + should_init_codebooks=config.get('should_init_codebooks', False), + should_reinit_unused_clusters=config.get('should_reinit_unused_clusters', False), + initializer_range=config.get('initializer_range', 0.02) + ) + + def make_encoding_tower(self, d1: int, d2: int): + return torch.nn.Linear(d1, d2, bias=False) + + @staticmethod + def get_codebook_indices(remainder, codebook): + dist = torch.cdist(remainder, codebook) + return dist.argmin(dim=-1) + + def init_codebooks(self, embeddings): + with torch.no_grad(): + remainder = self.encoder(embeddings) + for codebook in self.codebooks: + embeddings_np = remainder.cpu().numpy() + n_clusters = codebook.shape[0] + + kmeans = faiss.Kmeans( + d=embeddings_np.shape[1], + k=n_clusters, + niter=self.n_iter, + gpu=torch.cuda.is_available(), + ) + kmeans.train(embeddings_np) + + codebook.data = torch.from_numpy(kmeans.centroids).to(codebook.device) + + codebook_indices = self.get_codebook_indices(remainder, codebook) + codebook_vectors = codebook[codebook_indices] + remainder = remainder - codebook_vectors + + @staticmethod + def reinit_unused_clusters(remainder, codebook, codebook_indices): + with torch.no_grad(): + is_used = torch.full((codebook.shape[0],), False, device=codebook.device) + unique_indices = codebook_indices.unique() + is_used[unique_indices] = True + rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) + codebook[~is_used] = remainder[rand_input] + + def train_pass(self, embeddings): + latent_vector = self.encoder(embeddings) + + latent_restored = 0 + + num_unique_clusters = [] + remainder = latent_vector + + remainders = [] + codebooks_vectors = [] + + for codebook in self.codebooks: + remainders.append(remainder) + + codebook_indices = self.get_codebook_indices(remainder, codebook) + codebook_vectors = codebook[codebook_indices] + + if self.should_reinit_unused_clusters: + self.reinit_unused_clusters(remainder, codebook, codebook_indices) + + num_unique_clusters.append(codebook_indices.unique().shape[0]) + + codebooks_vectors.append(codebook_vectors) + + latent_restored = latent_restored + codebook_vectors + remainder = remainder - codebook_vectors + + # Here we cast recon loss to latent vector + latent_restored = latent_vector + (latent_restored - latent_vector).detach() + embeddings_restored = self.decoder(latent_restored) + + return { + "embeddings": embeddings, + "embeddings_restored": embeddings_restored, + "remainders": remainders, + "codebooks_vectors": codebooks_vectors + } + + def forward(self, inputs): + embeddings = inputs["embeddings"] + + if self.training: # training mode + return self.train_pass(embeddings) + else: # eval mode + raise NotImplementedError("No eval mode for RqVae model!") diff --git a/modeling/train.py b/modeling/train.py index 0675d42a..b15672bf 100644 --- a/modeling/train.py +++ b/modeling/train.py @@ -96,10 +96,6 @@ def main(): dataset=test_sampler, **dataset.meta ) - - print(len(train_dataloader)) - - exit(0) model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) if 'checkpoint' in config: diff --git a/review.md b/review.md index bfd3618d..572accc1 100644 --- a/review.md +++ b/review.md @@ -1,5 +1,9 @@ # Review +## Todos + +- TODO backward on mean loss? in `RqVae` + ## Links - [dataset](https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html) diff --git a/src/main.ipynb b/src/main.ipynb index 61c464a8..f6d7b18b 100644 --- a/src/main.ipynb +++ b/src/main.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -24,33 +24,18 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:05<00:00, 1.38s/it]\n" - ] - }, - { - "data": { - "text/plain": [ - "{'loss': tensor(0.0057, grad_fn=),\n", - " 'recon_loss': tensor(0.0052),\n", - " 'rqvae_loss': tensor(0.0005),\n", - " 'unique/0': 256,\n", - " 'unique/1': 256,\n", - " 'unique/2': 256,\n", - " 'unique/3': 256}" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "embs.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "from rqvae import RQVAE\n", "\n", @@ -89,49 +74,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "230\n", - "item='Nicole by OPI Nail Lacquer, Make Mine Lime, 0.5 Fluid Ounce' clust_tuple=(230, 230, 151, 95, 0)\n", - "231\n", - "item='Bundle Monster 5 Nail Art Nailart Manicure Wheels w/ 3D Designs Glitters Rhinestones Beads - total over 7000pc' clust_tuple=(231, 62, 31, 169, 0)\n", - "item='Bundle Monster 26pc Nail Art Image Manicure Stamping Plates-2013 CYO Collection' clust_tuple=(231, 62, 171, 126, 0)\n", - "item='MASH Set of 25 Nail Art Nailart Polish Stamp Stamping Manicure Image Plates Accessories Set Kit' clust_tuple=(231, 62, 101, 169, 1)\n", - "item='PUEEN 2013 Nail Art Stamp Collection Set 24E - LOVE ELEMENTS - NEW Unique Set of 24 Nailart Polish Stamping Manicure Image Plates Accessories Kit (Totaling 144 Images) with BONUS Storage Case' clust_tuple=(231, 60, 171, 95, 2)\n", - "item='Bundle Monster Nail Art Nailart Polish Stamp Stamping Manicure Image Plates Accessories Set Kit 25pc' clust_tuple=(231, 62, 171, 169, 2)\n", - "item='Konad Stamping Nail Art Set Care Ca' clust_tuple=(231, 62, 171, 95, 0)\n", - "item='Nail Art Plates Bundle - 40 PACK , Nail Polish Stamping Manicure Plates, 40 Different Plates A total of over 400 designs' clust_tuple=(231, 62, 101, 95, 1)\n", - "item='CICI&SISI Nail Art Stamp Collection Set Jumbo 2 - Set of 6 JUMBO Nailart Polish Stamping Manicure Image Plates Accessories Kit (Totaling 216 Images) All New Designs with FREE STAMPER & SCRAPER TOOLS SET PROMOTIONAL OFFER' clust_tuple=(231, 62, 171, 95, 7)\n", - "item='NAIL ART IMAGE PLATES POLISH STAMP STAMPING MIXED DESIGNS SET KIT 25pc' clust_tuple=(231, 62, 171, 95, 3)\n", - "232\n", - "item='KLEANCOLOR Nail Lacquer - Chunky Holo Black 236' clust_tuple=(232, 66, 118, 59, 0)\n", - "item='OPI Nail Lacquer, DS Reflection, 0.5-Fluid Ounce' clust_tuple=(232, 116, 151, 107, 0)\n", - "item='Revlon Sheer Nail Enamel, Sheer Rose 011' clust_tuple=(232, 33, 171, 180, 0)\n", - "item=\"OPI Nail Polish Nicki Minaj Collection - Did It On 'Em\" clust_tuple=(232, 62, 151, 95, 1)\n", - "item='Opi Nail Polish Nicki Minaj Save Me Nl N17 .5 Oz' clust_tuple=(232, 62, 151, 95, 0)\n", - "item='Sensationail Invincible Gel Polish 71587 Pink Chiffon' clust_tuple=(232, 116, 151, 198, 0)\n", - "item='Nabi Nail Polish Purple Jumbo Glitter 161 - 15mL' clust_tuple=(232, 66, 151, 180, 0)\n", - "item='Jade Is The New Black, NLH45, OPI, Hong Kong / Nail Polish / Lacquer / Enamel' clust_tuple=(232, 131, 171, 95, 0)\n", - "233\n", - "234\n", - "item='Orly Nail Lacquer, Terracotta, 0.6 Fluid Ounce' clust_tuple=(234, 62, 151, 169, 0)\n", - "item='LA Colors Nail Art Polish - 48 Colors! NEW!' clust_tuple=(234, 170, 171, 95, 0)\n", - "item='Del Sol - Color Changing Nail Polish - Reckless' clust_tuple=(234, 60, 171, 95, 0)\n", - "item='Kleancolor - Neon Brights - 6 Nail Lacquer Colors' clust_tuple=(234, 62, 151, 95, 0)\n", - "item='Kleancolor - 6 Awesome Nail Lacquers - Set 14' clust_tuple=(234, 62, 151, 95, 1)\n", - "235\n", - "236\n", - "237\n", - "238\n", - "239\n" - ] - } - ], + "outputs": [], "source": [ "from rqvae_data import search_similar_items\n", "\n", @@ -148,20 +93,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGdCAYAAADjWSL8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKh1JREFUeJzt3X9w1PWdx/HXmpAVYvI9QtzdbAkxThHBoNcGL4Q68jvAEVN/TKFy3cKUAakSTIFTwLsp7VSC3hTaG06OMo6cgBeno7HeQVPDKbEMhB/RnIBIcQoaapagTXYTmttg+NwfHb/jEsAkBpNPeD5mvjP5fr7v/e7n8xmGfc1nv9/veowxRgAAAJa5rrc7AAAA0B2EGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlRJ7uwNXy4ULF/TRRx8pJSVFHo+nt7sDAAA6wRij5uZmBYNBXXfdldda+m2I+eijj5SZmdnb3QAAAN1QV1enoUOHXrGm34aYlJQUSX+dhNTU1F7uDQAA6IxoNKrMzEz3c/xK+m2I+ewrpNTUVEIMAACW6cylIFzYCwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGClxN7ugK1uWrEjbv/U2pm91BMAAK5NrMQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALBSl0LMxo0bdfvttys1NVWpqanKz8/Xb3/7W/f4vHnz5PF44raxY8fGnSMWi6m4uFjp6elKTk5WUVGRTp8+HVfT2NioUCgkx3HkOI5CoZCampq6P0oAANDvdCnEDB06VGvXrtWhQ4d06NAhTZo0Sd/+9rd19OhRt2b69Omqr693t507d8ado6SkROXl5SorK9OePXvU0tKiwsJCtbe3uzVz5sxRbW2tKioqVFFRodraWoVCoS85VAAA0J906Tkx99xzT9z+k08+qY0bN6q6ulq33XabJMnr9SoQCFzy9ZFIRM8++6y2bt2qKVOmSJK2bdumzMxM7dq1S9OmTdOxY8dUUVGh6upq5eXlSZI2b96s/Px8HT9+XCNGjOjyIAEAQP/T7Wti2tvbVVZWpnPnzik/P99t3717t3w+n2655RYtWLBADQ0N7rGamhqdP39eBQUFblswGFROTo727t0rSdq3b58cx3EDjCSNHTtWjuO4NZcSi8UUjUbjNgAA0H91OcQcPnxYN9xwg7xerxYtWqTy8nKNGjVKkjRjxgxt375dr7/+un7+85/r4MGDmjRpkmKxmCQpHA4rKSlJgwcPjjun3+9XOBx2a3w+X4f39fl8bs2llJaWutfQOI6jzMzMrg4NAABYpMs/OzBixAjV1taqqalJL730kubOnauqqiqNGjVKs2fPdutycnI0ZswYZWVlaceOHbr//vsve05jjDwej7v/+b8vV3OxlStXaunSpe5+NBolyAAA0I91OcQkJSXp61//uiRpzJgxOnjwoH75y19q06ZNHWozMjKUlZWlEydOSJICgYDa2trU2NgYtxrT0NCgcePGuTVnzpzpcK6zZ8/K7/dftl9er1der7erwwEAAJb60s+JMca4Xxdd7JNPPlFdXZ0yMjIkSbm5uRowYIAqKyvdmvr6eh05csQNMfn5+YpEIjpw4IBbs3//fkUiEbcGAACgSysxq1at0owZM5SZmanm5maVlZVp9+7dqqioUEtLi1avXq0HHnhAGRkZOnXqlFatWqX09HTdd999kiTHcTR//nwtW7ZMQ4YMUVpampYvX67Ro0e7dyuNHDlS06dP14IFC9zVnYULF6qwsJA7kwAAgKtLIebMmTMKhUKqr6+X4zi6/fbbVVFRoalTp6q1tVWHDx/W888/r6amJmVkZGjixIl68cUXlZKS4p5j/fr1SkxM1KxZs9Ta2qrJkydry5YtSkhIcGu2b9+uJUuWuHcxFRUVacOGDT00ZAAA0B94jDGmtztxNUSjUTmOo0gkotTU1B4//00rdsTtn1o7s8ffAwCAa01XPr/57SQAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAKxFiAACAlQgxAADASoQYAABgJUIMAACwEiEGAABYiRADAACsRIgBAABWIsQAAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACsRYgAAgJUIMQAAwEqEGAAAYCVCDAAAsBIhBgAAWIkQAwAArESIAQAAViLEAAAAK3UpxGzcuFG33367UlNTlZqa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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from collections import Counter\n", "import matplotlib.pyplot as plt\n", @@ -173,24 +107,38 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "12101" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "len(set(item[-1] for item in items_with_tuples))" ] }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import preprocessing\n", + "\n", + "labels = df['asin']\n", + "\n", + "le = preprocessing.LabelEncoder()\n", + "targets = le.fit_transform(labels)\n", + "\n", + "df['asin_numeric'] = targets" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(df, './all_data.pt')" + ] + }, { "cell_type": "code", "execution_count": null, From 7e17fd6604498b5c3c95b4fe7de8d6dd115db544 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 14:50:24 +0300 Subject: [PATCH 009/175] revert unneded changes --- configs/train/sasrec_train_config.json | 9 +- notebooks/AmazonBeautyDatasetStatistics.ipynb | 111 ++++++++-------- src/rqvae.py | 118 ------------------ src/train.py | 41 ------ 4 files changed, 61 insertions(+), 218 deletions(-) delete mode 100644 src/rqvae.py delete mode 100644 src/train.py diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 32fd1db1..1336b91c 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -2,7 +2,7 @@ "experiment_name": "sasrec_test", "best_metric": "eval/ndcg@20", "dataset": { - "type": "scientific", + "type": "sequence", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, @@ -60,9 +60,10 @@ "type": "composite", "losses": [ { - "type": "bpr", - "positive_prefix": "positive_scores", - "negative_prefix": "negative_scores", + "type": "sasrec", + "positive_prefix": "positive_embeddings", + "negative_prefix": "negative_embeddings", + "representation_prefix": "current_embeddings", "output_prefix": "downstream_loss" } ], diff --git a/notebooks/AmazonBeautyDatasetStatistics.ipynb b/notebooks/AmazonBeautyDatasetStatistics.ipynb index b59e40ac..a1a2c3d2 100644 --- a/notebooks/AmazonBeautyDatasetStatistics.ipynb +++ b/notebooks/AmazonBeautyDatasetStatistics.ipynb @@ -174,10 +174,21 @@ "execution_count": 6, "id": "f3182b59", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 1210271, (1210271,))" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# df.user_id = pd.factorize(df.user_id)[0] + 1\n", - "# df.user_id.min(), df.user_id.max(), df.user_id.unique().shape" + "df.user_id = pd.factorize(df.user_id)[0] + 1\n", + "df.user_id.min(), df.user_id.max(), df.user_id.unique().shape" ] }, { @@ -185,10 +196,21 @@ "execution_count": 7, "id": "7225ddeb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 249274, (249274,))" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# df.item_id = pd.factorize(df.item_id)[0] + 1\n", - "# df.item_id.min(), df.item_id.max(), df.item_id.unique().shape" + "df.item_id = pd.factorize(df.item_id)[0] + 1\n", + "df.item_id.min(), df.item_id.max(), df.item_id.unique().shape" ] }, { @@ -227,36 +249,36 @@ " \n", " \n", " 0\n", - " A39HTATAQ9V7YF\n", - " 0205616461\n", + " 1\n", + " 1\n", " 5.0\n", " 1369699200\n", " \n", " \n", " 1\n", - " A3JM6GV9MNOF9X\n", - " 0558925278\n", + " 2\n", + " 2\n", " 3.0\n", " 1355443200\n", " \n", " \n", " 2\n", - " A1Z513UWSAAO0F\n", - " 0558925278\n", + " 3\n", + " 2\n", " 5.0\n", " 1404691200\n", " \n", " \n", " 3\n", - " A1WMRR494NWEWV\n", - " 0733001998\n", + " 4\n", + " 3\n", " 4.0\n", " 1382572800\n", " \n", " \n", " 4\n", - " A3IAAVS479H7M7\n", - " 0737104473\n", + " 5\n", + " 4\n", " 1.0\n", " 1274227200\n", " \n", @@ -265,12 +287,12 @@ "" ], "text/plain": [ - " user_id item_id rating timestamp\n", - "0 A39HTATAQ9V7YF 0205616461 5.0 1369699200\n", - "1 A3JM6GV9MNOF9X 0558925278 3.0 1355443200\n", - "2 A1Z513UWSAAO0F 0558925278 5.0 1404691200\n", - "3 A1WMRR494NWEWV 0733001998 4.0 1382572800\n", - "4 A3IAAVS479H7M7 0737104473 1.0 1274227200" + " user_id item_id rating timestamp\n", + "0 1 1 5.0 1369699200\n", + "1 2 2 3.0 1355443200\n", + "2 3 2 5.0 1404691200\n", + "3 4 3 4.0 1382572800\n", + "4 5 4 1.0 1274227200" ] }, "execution_count": 8, @@ -292,7 +314,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 2023070/2023070 [01:14<00:00, 27172.73it/s]" + "2023070it [01:12, 28030.70it/s]" ] }, { @@ -313,10 +335,10 @@ "source": [ "data = []\n", "\n", - "for _, row in tqdm(df.iterrows(), total=len(df)):\n", + "for _, row in tqdm(df.iterrows()):\n", " data.append({\n", - " 'user_id': row.user_id,\n", - " 'item_id': row.item_id,\n", + " 'user_id': int(row.user_id),\n", + " 'item_id': int(row.item_id),\n", " 'timestamp': int(row.timestamp)\n", " })\n", "\n", @@ -333,7 +355,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 2023070/2023070 [00:05<00:00, 375198.84it/s]\n" + "100%|████████████████████████████████████████████████████████████████████| 2023070/2023070 [00:04<00:00, 421809.17it/s]\n" ] }, { @@ -410,7 +432,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 11, "id": "dcc9f464", "metadata": {}, "outputs": [ @@ -418,8 +440,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 1210271/1210271 [00:01<00:00, 738179.23it/s]\n", - "100%|██████████| 249274/249274 [00:00<00:00, 486768.45it/s]\n" + "100%|████████████████████████████████████████████████████████████████████| 1210271/1210271 [00:01<00:00, 840307.33it/s]\n", + "100%|██████████████████████████████████████████████████████████████████████| 249274/249274 [00:00<00:00, 571256.27it/s]\n" ] } ], @@ -472,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 12, "id": "16df848f", "metadata": {}, "outputs": [ @@ -498,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 13, "id": "90f7ccc1", "metadata": {}, "outputs": [], @@ -510,32 +532,11 @@ " ]))\n", " f.write('\\n')" ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "393b8b57", - "metadata": {}, - "outputs": [], - "source": [ - "from pickle import dump\n", - "\n", - "\n", - "dump(set(item_mapping.keys()), open('../data/Beauty/item_mapping.pkl', 'wb'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2eb5b656", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -549,7 +550,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.9.17" } }, "nbformat": 4, diff --git a/src/rqvae.py b/src/rqvae.py deleted file mode 100644 index cfd4f902..00000000 --- a/src/rqvae.py +++ /dev/null @@ -1,118 +0,0 @@ -import torch - -from tqdm import tqdm -import faiss - - -class RQVAE(torch.nn.Module): - def __init__( - self, - input_dim: int, - hidden_dim: int, - beta: float, - codebook_sizes: list[int], - should_init_codebooks=False, - should_reinit_unused_clusters=False, - ): - super().__init__() - - # In original paper it is set to 0.25 - self.beta = beta - - # Kmeans initialization - self.should_init_codebooks = should_init_codebooks - - # Trick with re-initing empty clusters - self.should_reinit_unused_clusters = should_reinit_unused_clusters - - self.mse_loss = torch.nn.MSELoss() - - # Enc and dec are mirrored copies of each other - self.encoder = self.make_encoding_tower(input_dim, hidden_dim) - self.decoder = self.make_encoding_tower(hidden_dim, input_dim) - - # Default initialization of codebook - self.codebooks = torch.nn.ParameterList() - for codebook_size in codebook_sizes: - cb = torch.FloatTensor(codebook_size, hidden_dim) - with torch.no_grad(): - torch.nn.init.trunc_normal_(cb, std=0.02, a=-2 * 0.02, b=2 * 0.02) - self.codebooks.append(cb) - - def make_encoding_tower(self, d1: int, d2: int): - return torch.nn.Linear(d1, d2, bias=False) - - @staticmethod - def get_codebook_indices(remainder, codebook): - dist = torch.cdist(remainder, codebook) - return dist.argmin(dim=-1) - - def init_codebooks(self, embeddings): - with torch.no_grad(): - remainder = self.encoder(embeddings) - for codebook in tqdm(self.codebooks): - embeddings_np = remainder.cpu().numpy() - n_clusters = codebook.shape[0] - - kmeans = faiss.Kmeans( - d=embeddings_np.shape[1], - k=n_clusters, - niter=100, - gpu=torch.cuda.is_available(), - ) - kmeans.train(embeddings_np) - - codebook.data = torch.from_numpy(kmeans.centroids).to(codebook.device) - - codebook_indices = self.get_codebook_indices(remainder, codebook) - codebook_vectors = codebook[codebook_indices] - remainder = remainder - codebook_vectors - - @staticmethod - def reinit_unused_clusters(remainder, codebook, codebook_indices): - with torch.no_grad(): - is_used = torch.full((codebook.shape[0],), False, device=codebook.device) - unique_indices = codebook_indices.unique() - is_used[unique_indices] = True - rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) - codebook[~is_used] = remainder[rand_input] - - def forward(self, inputs): - embeddings = inputs["embedding"] - if self.should_init_codebooks: - self.init_codebooks(embeddings) - self.should_init_codebooks = False - latent_vector = self.encoder(embeddings) - - latent_restored = 0 - rqvae_loss = 0 - num_unique_clusters = [] - remainder = latent_vector - for codebook in self.codebooks: - codebook_indices = self.get_codebook_indices(remainder, codebook) - codebook_vectors = codebook[codebook_indices] - - if self.should_reinit_unused_clusters: - self.reinit_unused_clusters(remainder, codebook, codebook_indices) - - num_unique_clusters.append(codebook_indices.unique().shape[0]) - rqvae_loss += self.beta * self.mse_loss( - remainder, codebook_vectors.detach() - ) - rqvae_loss += self.mse_loss(codebook_vectors, remainder.detach()) - - latent_restored = latent_restored + codebook_vectors - remainder = remainder - codebook_vectors - - # Here we cast recon loss to latent vector - latent_restored = latent_vector + (latent_restored - latent_vector).detach() - embeddings_restored = self.decoder(latent_restored) - recon_loss = self.mse_loss(embeddings_restored, embeddings) - loss = (recon_loss + rqvae_loss).mean() - - return { - "loss": loss, - "recon_loss": recon_loss.mean().detach(), - "rqvae_loss": rqvae_loss.mean().detach(), - **{f"unique/{i}": cnt for i, cnt in enumerate(num_unique_clusters)}, - } diff --git a/src/train.py b/src/train.py deleted file mode 100644 index 46560dfe..00000000 --- a/src/train.py +++ /dev/null @@ -1,41 +0,0 @@ -def train_rqvae(): - data = torch.randn(1000, 10) # 1000 samples, 10 features - train_dataset = MyDataset(data) - train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) - - # Initialize model, optimizer, and loss function - model = RQVAE(input_dim=10, latent_dim=5) - optimizer = optim.Adam(model.parameters(), lr=1e-3) - - # Training loop - epochs = 10 - for epoch in range(epochs): - model.train() # Set model to training mode - running_loss = 0.0 - for batch_idx, batch_data in enumerate(train_loader): - batch_data = batch_data.float() # Ensure the data is in float32 format - optimizer.zero_grad() # Zero the gradients - - # Forward pass - recon_batch, z = model(batch_data) - - # Compute the loss (e.g., MSE loss for reconstruction + KL divergence for VAE) - # Replace with your actual loss calculation - reconstruction_loss = F.mse_loss(recon_batch, batch_data, reduction='sum') - # Example of a simple KL divergence term for VAE (replace with your method) - kl_loss = -0.5 * torch.sum(1 + z - z.pow(2) - z.exp()) # Example KL loss - - # Total loss (can combine reconstruction and KL losses) - loss = reconstruction_loss + kl_loss - - # Backpropagation - loss.backward() - optimizer.step() - - running_loss += loss.item() - - # Print statistics at the end of the epoch - avg_loss = running_loss / len(train_loader.dataset) - print(f"Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.4f}") - - print("Training finished!") \ No newline at end of file From 1186e4fbfeddcb21fd1a42c772c99f6f361021a7 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 14:55:19 +0300 Subject: [PATCH 010/175] add eval pass for rqvae (from checkpoint) --- modeling/models/rqvae.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 616ca023..b105d9e3 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -138,6 +138,13 @@ def train_pass(self, embeddings): "remainders": remainders, "codebooks_vectors": codebooks_vectors } + + def eval_pass(self, embeddings): + ind_lists = [] + for cb in self.codebooks: + dist = torch.cdist(self.encoder(embeddings), cb) + ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) + return zip(*ind_lists) def forward(self, inputs): embeddings = inputs["embeddings"] @@ -145,4 +152,4 @@ def forward(self, inputs): if self.training: # training mode return self.train_pass(embeddings) else: # eval mode - raise NotImplementedError("No eval mode for RqVae model!") + return self.eval_pass(embeddings) From fba00ba567be8cab1ba1dc65e628c807485986eb Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 21:48:49 +0300 Subject: [PATCH 011/175] e2e model --- configs/train/rqvae_train_config.json | 8 +- configs/train/tiger_train_config.json | 72 ++ modeling/main.ipynb | 1270 +++++++++++++++++++++++++ modeling/models/rqvae.py | 12 +- modeling/models/tiger.py | 96 ++ modeling/rqvae/__init__.py | 0 {src => modeling/rqvae}/collisions.py | 0 {src => modeling/rqvae}/rqvae_data.py | 10 +- review.md | 7 +- src/main.ipynb | 171 ---- src/main.py | 46 - 11 files changed, 1455 insertions(+), 237 deletions(-) create mode 100644 configs/train/tiger_train_config.json create mode 100644 modeling/main.ipynb create mode 100644 modeling/models/tiger.py create mode 100644 modeling/rqvae/__init__.py rename {src => modeling/rqvae}/collisions.py (100%) rename {src => modeling/rqvae}/rqvae_data.py (88%) delete mode 100644 src/main.ipynb delete mode 100644 src/main.py diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index d5d25308..e9f3fe2f 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_steps_num": 6000, + "train_steps_num": 2000, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", @@ -12,7 +12,7 @@ "dataloader": { "train": { "type": "torch", - "batch_size": 128, + "batch_size": 256, "batch_processor": { "type": "embed" }, @@ -36,7 +36,7 @@ "n_iter": 100, "codebook_sizes": [256, 256, 256, 256], "should_init_codebooks": true, - "should_reinit_unused_clusters": false, + "should_reinit_unused_clusters": true, "initializer_range": 0.02 }, "optimizer": { @@ -49,7 +49,7 @@ "scheduler": { "type": "step", "step_size": 100, - "gamma": 0.98 + "gamma": 0.96 } }, "loss": { diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json new file mode 100644 index 00000000..23e7ef6b --- /dev/null +++ b/configs/train/tiger_train_config.json @@ -0,0 +1,72 @@ +{ + "experiment_name": "tiger_beauty", + "train_steps_num": 5000, + "dataset": { + "type": "rqvae", + "path_to_data_dir": "../data", + "name": "Beauty", + "samplers": { + "type": "identity" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 128, + "batch_processor": { + "type": "embed" + }, + "drop_last": false, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "embed" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "emb_dim": 512, + "n_tokens": 256, + "n_codebooks": 4, + "nhead": 8, + "num_encoder_layers": 6, + "num_decoder_layers": 6, + "dim_feedforward": 2048, + "dropout": 0.1 + }, + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 1e-4 + }, + "clip_grad_threshold": 5.0, + "scheduler": { + "type": "step", + "step_size": 100, + "gamma": 0.98 + } + }, + "loss": { + "type": "rqvae_loss", + "beta": 0.25, + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + } + ] + } +} diff --git a/modeling/main.ipynb b/modeling/main.ipynb new file mode 100644 index 00000000..db47d562 --- /dev/null +++ b/modeling/main.ipynb @@ -0,0 +1,1270 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "from rqvae.rqvae_data import get_data\n", + "\n", + "df = get_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "embs = torch.stack(df[\"embeddings\"].tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "from utils import DEVICE\n", + "from models.base import BaseModel\n", + "\n", + "config = json.load(open(\"../configs/train/tiger_train_config.json\"))\n", + "\n", + "rqvae_train_config = json.load(open(config['rqvae_train_config_path']))\n", + "rq_vae_config = rqvae_train_config['model']\n", + "rq_vae_config['should_init_codebooks'] = False\n", + "\n", + "rqvae_model = BaseModel.create_from_config(rq_vae_config).to(DEVICE)\n", + "\n", + "rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True))\n", + "rqvae_model.eval()\n", + "\n", + "ids = df.asin_numeric.tolist()\n", + "\n", + "embs_dict = {\"ids\": torch.tensor(ids).to(DEVICE), \"embeddings\": embs.to(DEVICE)}\n", + "\n", + "semantic_ids = list(rqvae_model.forward(embs_dict))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from rqvae.collisions import dedup\n", + "\n", + "items_with_tuples = list(zip(df[\"asin\"], df[\"title\"].fillna(\"unknown\"), semantic_ids))\n", + "items_with_tuples = dedup(items_with_tuples)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(86, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (224, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (80, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (141, 254, 84, 6),\n", + " (68, 254, 84, 6),\n", + " (1, 254, 243, 5),\n", + " (224, 254, 243, 6),\n", + " (74, 254, 84, 6),\n", + " (244, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (127, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (230, 254, 243, 5),\n", + " (184, 254, 12, 5),\n", + " (143, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (230, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (150, 254, 243, 6),\n", + " (77, 254, 243, 5),\n", + " (144, 254, 243, 6),\n", + " (249, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (223, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (144, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (46, 254, 243, 6),\n", + " (175, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (9, 254, 243, 6),\n", + " (68, 254, 243, 6),\n", + " (254, 254, 243, 6),\n", + " (122, 254, 12, 5),\n", + " (109, 254, 243, 6),\n", + " (3, 254, 243, 5),\n", + " (77, 254, 243, 5),\n", + " (140, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (176, 254, 12, 5),\n", + " (70, 254, 153, 5),\n", + " (166, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (226, 254, 243, 6),\n", + " (122, 254, 12, 5),\n", + " (57, 254, 243, 5),\n", + " (194, 254, 243, 6),\n", + " (62, 254, 243, 5),\n", + " (252, 254, 139, 199),\n", + " (226, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (161, 254, 139, 199),\n", + " (7, 254, 12, 5),\n", + " (51, 254, 12, 5),\n", + " (7, 254, 12, 5),\n", + " (184, 254, 12, 5),\n", + " (174, 254, 243, 6),\n", + " (224, 254, 243, 5),\n", + " (229, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (176, 254, 12, 5),\n", + " (44, 254, 243, 5),\n", + " (96, 254, 243, 5),\n", + " (117, 254, 243, 6),\n", + " (102, 254, 243, 5),\n", + " (206, 254, 139, 6),\n", + " (224, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (232, 254, 243, 199),\n", + " (254, 254, 243, 6),\n", + " (85, 254, 243, 5),\n", + " (3, 254, 243, 5),\n", + " (21, 254, 217, 199),\n", + " (144, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (153, 254, 139, 199),\n", + " (161, 254, 139, 199),\n", + " (19, 254, 243, 6),\n", + " (153, 254, 139, 199),\n", + " (19, 254, 243, 6),\n", + " (242, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (199, 254, 243, 6),\n", + " (168, 254, 243, 5),\n", + " (212, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (212, 254, 243, 6),\n", + " (165, 254, 243, 5),\n", + " (123, 254, 243, 5),\n", + " (85, 254, 243, 5),\n", + " (198, 254, 243, 6),\n", + " (198, 254, 243, 5),\n", + " (144, 254, 243, 5),\n", + " (21, 254, 139, 199),\n", + " (117, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (212, 254, 243, 6),\n", + " (128, 254, 243, 5),\n", + " (242, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (85, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (86, 254, 84, 6),\n", + " (141, 254, 84, 6),\n", + " (91, 254, 139, 6),\n", + " (63, 254, 243, 6),\n", + " (141, 254, 84, 6),\n", + " (92, 254, 12, 5),\n", + " (224, 254, 243, 5),\n", + " (61, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (117, 254, 243, 6),\n", + " (141, 254, 84, 6),\n", + " (109, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (69, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (143, 254, 243, 6),\n", + " (176, 254, 12, 5),\n", + " (143, 254, 243, 6),\n", + " (91, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (242, 254, 243, 6),\n", + " (95, 254, 243, 6),\n", + " (88, 254, 243, 6),\n", + " (189, 254, 243, 5),\n", + " (48, 254, 84, 6),\n", + " (253, 254, 84, 6),\n", + " (19, 254, 243, 6),\n", + " (143, 254, 243, 6),\n", + " (214, 254, 243, 5),\n", + " (81, 254, 139, 5),\n", + " (122, 254, 243, 5),\n", + " (101, 254, 84, 6),\n", + " (235, 254, 243, 6),\n", + " (135, 254, 243, 5),\n", + " (175, 254, 243, 6),\n", + " (138, 254, 139, 6),\n", + " (86, 254, 84, 6),\n", + " (86, 254, 84, 6),\n", + " (13, 254, 139, 5),\n", + " (117, 254, 243, 6),\n", + " (212, 254, 243, 6),\n", + " (122, 254, 12, 5),\n", + " (130, 254, 243, 6),\n", + " (117, 254, 243, 6),\n", + " (16, 254, 243, 6),\n", + " (239, 254, 243, 6),\n", + " (141, 254, 84, 6),\n", + " (132, 254, 243, 5),\n", + " (153, 254, 217, 199),\n", + " (48, 254, 243, 6),\n", + " (154, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (226, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (198, 254, 243, 5),\n", + " (70, 254, 153, 5),\n", + " (128, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (198, 254, 243, 5),\n", + " (229, 254, 243, 5),\n", + " (14, 254, 243, 6),\n", + " (122, 254, 153, 5),\n", + " (176, 254, 153, 5),\n", + " (235, 254, 243, 6),\n", + " (252, 254, 139, 199),\n", + " (88, 254, 243, 6),\n", + " (190, 254, 84, 6),\n", + " (23, 254, 243, 6),\n", + " (211, 254, 139, 5),\n", + " (137, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (86, 254, 84, 6),\n", + " (46, 254, 243, 6),\n", + " (221, 254, 243, 6),\n", + " (226, 254, 243, 6),\n", + " (135, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (224, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (212, 254, 243, 6),\n", + " (70, 254, 243, 5),\n", + " (161, 254, 139, 199),\n", + " (236, 254, 139, 6),\n", + " (91, 254, 139, 6),\n", + " (44, 254, 243, 5),\n", + " (4, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (231, 254, 243, 5),\n", + " (221, 254, 243, 6),\n", + " (168, 254, 243, 5),\n", + " (88, 254, 243, 6),\n", + " (46, 254, 243, 6),\n", + " (143, 254, 243, 6),\n", + " (193, 254, 243, 5),\n", + " (231, 254, 243, 5),\n", + " (230, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (213, 254, 243, 5),\n", + " (48, 254, 139, 6),\n", + " (23, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (211, 254, 243, 5),\n", + " (224, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (134, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (90, 254, 243, 5),\n", + " (91, 254, 139, 6),\n", + " (109, 254, 243, 6),\n", + " (3, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (86, 254, 84, 5),\n", + " (184, 254, 12, 5),\n", + " (1, 254, 139, 5),\n", + " (218, 254, 12, 5),\n", + " (86, 254, 139, 6),\n", + " (58, 254, 243, 5),\n", + " (60, 254, 139, 5),\n", + " (13, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (56, 254, 243, 6),\n", + " (241, 254, 243, 6),\n", + " (163, 254, 243, 6),\n", + " (207, 254, 243, 5),\n", + " (152, 254, 243, 6),\n", + " (85, 254, 243, 6),\n", + " (180, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (110, 254, 243, 6),\n", + " (137, 254, 243, 5),\n", + " (180, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (193, 254, 243, 5),\n", + " (85, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (187, 254, 136, 50),\n", + " (43, 254, 243, 6),\n", + " (178, 254, 243, 5),\n", + " (233, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (143, 254, 243, 6),\n", + " (174, 254, 243, 6),\n", + " (160, 254, 243, 5),\n", + " (226, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (100, 254, 243, 6),\n", + " (100, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (21, 254, 139, 199),\n", + " (88, 254, 243, 6),\n", + " (224, 254, 243, 6),\n", + " (143, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (224, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (156, 254, 243, 6),\n", + " (28, 254, 243, 6),\n", + " (0, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (218, 254, 12, 5),\n", + " (229, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (169, 254, 243, 6),\n", + " (122, 254, 243, 5),\n", + " (28, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (235, 254, 243, 6),\n", + " (48, 254, 139, 5),\n", + " (187, 254, 243, 50),\n", + " (60, 254, 243, 5),\n", + " (13, 254, 139, 5),\n", + " (224, 254, 243, 5),\n", + " (143, 254, 243, 6),\n", + " (85, 254, 243, 5),\n", + " (56, 254, 243, 6),\n", + " (199, 254, 243, 6),\n", + " (88, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (59, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (34, 254, 139, 5),\n", + " (61, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (187, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (134, 254, 243, 5),\n", + " (39, 254, 243, 6),\n", + " (35, 254, 243, 5),\n", + " (246, 254, 139, 6),\n", + " (106, 254, 243, 5),\n", + " (212, 254, 243, 6),\n", + " (229, 254, 243, 5),\n", + " (148, 254, 243, 5),\n", + " (46, 254, 243, 6),\n", + " (86, 254, 139, 5),\n", + " (218, 254, 12, 5),\n", + " (106, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (58, 254, 139, 5),\n", + " (160, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (174, 254, 243, 6),\n", + " (242, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (174, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (229, 254, 243, 6),\n", + " (0, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (88, 254, 243, 6),\n", + " (137, 254, 243, 5),\n", + " (198, 254, 243, 5),\n", + " (184, 254, 12, 5),\n", + " (178, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (155, 254, 139, 199),\n", + " (244, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (100, 254, 243, 6),\n", + " (203, 254, 243, 5),\n", + " (144, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (46, 254, 243, 6),\n", + " (134, 254, 243, 5),\n", + " (51, 254, 12, 5),\n", + " (106, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (221, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (252, 254, 139, 199),\n", + " (168, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (35, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (35, 254, 84, 5),\n", + " (35, 254, 84, 5),\n", + " (137, 254, 243, 5),\n", + " (65, 254, 243, 5),\n", + " (198, 254, 84, 5),\n", + " (10, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (5, 254, 243, 5),\n", + " (65, 254, 243, 5),\n", + " (67, 254, 136, 50),\n", + " (214, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (242, 254, 243, 6),\n", + " (10, 254, 243, 5),\n", + " (32, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (10, 254, 243, 5),\n", + " (56, 254, 84, 6),\n", + " (116, 254, 243, 5),\n", + " (116, 254, 243, 5),\n", + " (88, 254, 243, 6),\n", + " (60, 254, 243, 5),\n", + " (207, 254, 139, 5),\n", + " (174, 254, 243, 6),\n", + " (121, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (178, 254, 243, 5),\n", + " (60, 254, 139, 5),\n", + " (176, 254, 12, 5),\n", + " (223, 254, 243, 6),\n", + " (155, 254, 139, 199),\n", + " (73, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (127, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (253, 254, 243, 6),\n", + " (212, 254, 243, 6),\n", + " (3, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (77, 254, 243, 5),\n", + " (6, 254, 84, 199),\n", + " (146, 254, 243, 6),\n", + " (73, 254, 243, 5),\n", + " (143, 254, 243, 6),\n", + " (85, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (235, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (34, 254, 243, 5),\n", + " (163, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (163, 254, 243, 6),\n", + " (10, 254, 243, 5),\n", + " (28, 254, 243, 6),\n", + " (57, 254, 243, 5),\n", + " (146, 254, 243, 6),\n", + " (224, 254, 243, 5),\n", + " (171, 254, 243, 5),\n", + " (157, 254, 243, 6),\n", + " (46, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (253, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (232, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (135, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (214, 254, 243, 5),\n", + " (232, 254, 243, 6),\n", + " (140, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (65, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (165, 254, 243, 5),\n", + " (132, 254, 243, 5),\n", + " (13, 254, 139, 5),\n", + " (134, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (56, 254, 243, 6),\n", + " (85, 254, 243, 5),\n", + " (229, 254, 243, 5),\n", + " (7, 254, 12, 5),\n", + " (212, 254, 243, 6),\n", + " (38, 254, 12, 5),\n", + " (38, 254, 12, 5),\n", + " (105, 254, 243, 5),\n", + " (207, 254, 139, 6),\n", + " (154, 254, 243, 6),\n", + " (19, 254, 243, 6),\n", + " (235, 254, 243, 6),\n", + " (224, 254, 243, 5),\n", + " (229, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (88, 254, 243, 6),\n", + " (138, 254, 243, 6),\n", + " (134, 254, 243, 5),\n", + " (22, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (242, 254, 243, 6),\n", + " (145, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (235, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (81, 254, 139, 5),\n", + " (96, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (13, 254, 139, 5),\n", + " (70, 254, 243, 5),\n", + " (163, 254, 243, 6),\n", + " (160, 254, 243, 5),\n", + " (49, 254, 243, 5),\n", + " (227, 254, 139, 5),\n", + " (211, 254, 139, 5),\n", + " (244, 254, 243, 5),\n", + " (211, 254, 243, 5),\n", + " (79, 254, 243, 5),\n", + " (100, 254, 243, 6),\n", + " (60, 254, 139, 5),\n", + " (163, 254, 243, 6),\n", + " (179, 254, 84, 5),\n", + " (230, 254, 243, 5),\n", + " (127, 254, 243, 5),\n", + " (61, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (217, 254, 243, 6),\n", + " (128, 254, 243, 5),\n", + " (22, 254, 243, 159),\n", + " (178, 254, 243, 5),\n", + " (82, 254, 136, 5),\n", + " (178, 254, 243, 5),\n", + " (162, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (41, 254, 243, 6),\n", + " (60, 254, 139, 5),\n", + " (217, 254, 243, 6),\n", + " (224, 254, 243, 6),\n", + " (56, 254, 243, 6),\n", + " (199, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (218, 254, 12, 5),\n", + " (44, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (1, 254, 243, 5),\n", + " (4, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (224, 254, 243, 6),\n", + " (187, 254, 243, 5),\n", + " (58, 254, 243, 5),\n", + " (1, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (25, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (58, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (62, 254, 243, 5),\n", + " (158, 254, 136, 159),\n", + " (252, 254, 139, 199),\n", + " (207, 254, 139, 6),\n", + " (130, 254, 243, 6),\n", + " (253, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (60, 254, 139, 6),\n", + " (13, 254, 139, 5),\n", + " (178, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (233, 254, 243, 5),\n", + " (218, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (143, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (130, 254, 243, 6),\n", + " (134, 254, 243, 5),\n", + " (198, 254, 84, 6),\n", + " (242, 254, 243, 6),\n", + " (242, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (31, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (125, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (224, 254, 243, 6),\n", + " (235, 254, 243, 6),\n", + " (86, 254, 243, 6),\n", + " (156, 254, 243, 6),\n", + " (156, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (157, 254, 243, 6),\n", + " (156, 254, 243, 6),\n", + " (46, 254, 243, 6),\n", + " (102, 254, 243, 5),\n", + " (31, 254, 243, 6),\n", + " (211, 254, 139, 5),\n", + " (218, 254, 12, 5),\n", + " (106, 254, 243, 5),\n", + " (241, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (158, 254, 136, 50),\n", + " (108, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (108, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (97, 254, 243, 159),\n", + " (169, 254, 243, 5),\n", + " (211, 254, 243, 5),\n", + " (165, 254, 243, 5),\n", + " (96, 254, 243, 5),\n", + " (105, 254, 243, 5),\n", + " (46, 254, 243, 6),\n", + " (198, 254, 243, 6),\n", + " (137, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (229, 254, 243, 5),\n", + " (85, 254, 243, 5),\n", + " (1, 254, 139, 5),\n", + " (70, 254, 243, 5),\n", + " (214, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (1, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (224, 254, 243, 5),\n", + " (69, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (91, 254, 139, 5),\n", + " (91, 254, 139, 5),\n", + " (105, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (60, 254, 243, 5),\n", + " (3, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (13, 254, 243, 5),\n", + " (1, 254, 139, 5),\n", + " (137, 254, 243, 5),\n", + " (199, 254, 84, 6),\n", + " (242, 254, 243, 6),\n", + " (137, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (63, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (56, 254, 84, 6),\n", + " (111, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (120, 254, 12, 5),\n", + " (58, 254, 139, 5),\n", + " (146, 254, 243, 6),\n", + " (41, 254, 243, 5),\n", + " (1, 254, 243, 5),\n", + " (163, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (105, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (105, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (132, 254, 243, 5),\n", + " (132, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (185, 254, 243, 159),\n", + " (185, 254, 136, 159),\n", + " (3, 254, 243, 5),\n", + " (137, 254, 243, 159),\n", + " (106, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (159, 254, 243, 159),\n", + " (0, 254, 243, 5),\n", + " (105, 254, 243, 5),\n", + " (122, 254, 243, 5),\n", + " (180, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (91, 254, 139, 5),\n", + " (109, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " (255, 254, 243, 5),\n", + " (122, 254, 153, 5),\n", + " (191, 254, 84, 6),\n", + " (176, 254, 12, 5),\n", + " (244, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (41, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (176, 254, 153, 5),\n", + " (44, 254, 243, 5),\n", + " (79, 254, 243, 5),\n", + " (70, 254, 243, 5),\n", + " (253, 254, 243, 6),\n", + " (239, 254, 243, 6),\n", + " (234, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (88, 254, 243, 6),\n", + " (102, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (168, 254, 243, 5),\n", + " (74, 254, 84, 6),\n", + " (44, 254, 243, 5),\n", + " (173, 254, 243, 5),\n", + " (199, 254, 243, 6),\n", + " (60, 254, 243, 5),\n", + " (218, 254, 12, 5),\n", + " (13, 254, 243, 5),\n", + " (13, 254, 139, 5),\n", + " (58, 254, 243, 5),\n", + " (13, 254, 139, 5),\n", + " (226, 254, 243, 6),\n", + " (85, 254, 243, 6),\n", + " (198, 254, 243, 5),\n", + " (242, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (191, 254, 243, 6),\n", + " (51, 254, 12, 5),\n", + " (193, 254, 243, 5),\n", + " (88, 254, 243, 6),\n", + " (156, 254, 243, 6),\n", + " (91, 254, 139, 5),\n", + " (143, 254, 243, 6),\n", + " (32, 254, 243, 5),\n", + " (13, 254, 243, 5),\n", + " (96, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (86, 254, 243, 6),\n", + " (241, 254, 243, 6),\n", + " (46, 254, 243, 6),\n", + " (198, 254, 243, 5),\n", + " (221, 254, 243, 6),\n", + " (167, 254, 243, 5),\n", + " (214, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (226, 254, 243, 6),\n", + " (131, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (163, 254, 243, 6),\n", + " (194, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (177, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (13, 254, 243, 5),\n", + " (61, 254, 243, 5),\n", + " (25, 254, 243, 5),\n", + " (85, 254, 243, 5),\n", + " (1, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (218, 254, 12, 5),\n", + " (161, 254, 139, 199),\n", + " (0, 254, 243, 5),\n", + " (14, 254, 243, 6),\n", + " (178, 254, 243, 5),\n", + " (222, 254, 243, 6),\n", + " (184, 254, 12, 5),\n", + " (178, 254, 243, 5),\n", + " (105, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (231, 254, 243, 5),\n", + " (132, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (109, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (143, 254, 243, 6),\n", + " (213, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (131, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (19, 254, 243, 6),\n", + " (78, 254, 139, 199),\n", + " (67, 254, 136, 50),\n", + " (78, 254, 139, 199),\n", + " (60, 254, 139, 6),\n", + " (78, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (155, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (18, 254, 139, 199),\n", + " (168, 254, 243, 5),\n", + " (143, 254, 243, 6),\n", + " (135, 254, 243, 5),\n", + " (78, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (78, 254, 139, 199),\n", + " (18, 254, 139, 199),\n", + " (78, 254, 139, 199),\n", + " (73, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (252, 254, 139, 199),\n", + " (139, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (106, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (137, 254, 243, 5),\n", + " (18, 254, 139, 199),\n", + " (155, 254, 139, 199),\n", + " (18, 254, 139, 199),\n", + " (73, 254, 243, 5),\n", + " (252, 254, 139, 199),\n", + " (73, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (132, 254, 243, 5),\n", + " (70, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (122, 254, 153, 5),\n", + " (143, 254, 243, 6),\n", + " (193, 254, 243, 5),\n", + " (212, 254, 243, 6),\n", + " (176, 254, 12, 5),\n", + " (135, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (201, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (71, 254, 153, 5),\n", + " (128, 254, 243, 5),\n", + " (1, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (120, 254, 12, 5),\n", + " (137, 254, 243, 5),\n", + " (163, 254, 243, 6),\n", + " (242, 254, 243, 6),\n", + " (110, 254, 243, 6),\n", + " (0, 254, 243, 5),\n", + " (23, 254, 243, 6),\n", + " (63, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (21, 254, 139, 199),\n", + " (22, 254, 243, 5),\n", + " (70, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (178, 254, 243, 5),\n", + " (131, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (241, 254, 243, 6),\n", + " (122, 254, 12, 5),\n", + " (109, 254, 243, 6),\n", + " (60, 254, 139, 5),\n", + " (177, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (86, 254, 139, 6),\n", + " (135, 254, 243, 5),\n", + " (136, 254, 243, 6),\n", + " (61, 254, 243, 5),\n", + " (38, 254, 12, 5),\n", + " (60, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (74, 254, 84, 6),\n", + " (218, 254, 12, 5),\n", + " (186, 254, 243, 6),\n", + " (167, 254, 243, 5),\n", + " (148, 254, 243, 5),\n", + " (229, 254, 243, 6),\n", + " (135, 254, 243, 6),\n", + " (60, 254, 139, 5),\n", + " (40, 254, 243, 5),\n", + " (250, 254, 243, 6),\n", + " (144, 254, 243, 6),\n", + " (132, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (41, 254, 139, 5),\n", + " (244, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (193, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (218, 254, 12, 5),\n", + " (1, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (62, 254, 243, 6),\n", + " (128, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (226, 254, 243, 6),\n", + " (194, 254, 243, 6),\n", + " (62, 254, 243, 6),\n", + " (158, 254, 243, 50),\n", + " (40, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (242, 254, 243, 6),\n", + " (111, 254, 243, 5),\n", + " (247, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (68, 254, 243, 6),\n", + " (146, 254, 243, 6),\n", + " (163, 254, 243, 6),\n", + " (143, 254, 243, 6),\n", + " (184, 254, 12, 5),\n", + " (97, 254, 243, 159),\n", + " (211, 254, 243, 5),\n", + " (167, 254, 243, 5),\n", + " (201, 254, 243, 5),\n", + " (91, 254, 139, 5),\n", + " (111, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (82, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (134, 254, 243, 5),\n", + " (86, 254, 84, 6),\n", + " (168, 254, 243, 5),\n", + " (148, 254, 243, 5),\n", + " (128, 254, 243, 5),\n", + " (122, 254, 12, 5),\n", + " (18, 254, 139, 199),\n", + " (111, 254, 243, 5),\n", + " (214, 254, 243, 5),\n", + " (13, 254, 243, 5),\n", + " (25, 254, 243, 5),\n", + " (230, 254, 243, 6),\n", + " (244, 254, 243, 5),\n", + " (140, 254, 243, 5),\n", + " (120, 254, 12, 5),\n", + " (216, 254, 243, 5),\n", + " (123, 254, 243, 6),\n", + " (241, 254, 243, 6),\n", + " (224, 254, 243, 5),\n", + " (63, 254, 243, 6),\n", + " (226, 254, 243, 6),\n", + " (96, 254, 243, 5),\n", + " (207, 254, 139, 6),\n", + " (86, 254, 84, 6),\n", + " (0, 254, 243, 5),\n", + " (57, 254, 243, 5),\n", + " (173, 254, 243, 5),\n", + " (173, 254, 243, 5),\n", + " (230, 254, 243, 5),\n", + " (160, 254, 243, 5),\n", + " (231, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (212, 254, 243, 6),\n", + " (211, 254, 243, 5),\n", + " (79, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (25, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (111, 254, 243, 5),\n", + " (102, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (148, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (79, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (73, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (40, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (42, 254, 243, 5),\n", + " (0, 254, 243, 5),\n", + " (68, 254, 243, 6),\n", + " (79, 254, 243, 5),\n", + " (135, 254, 243, 6),\n", + " (44, 254, 243, 5),\n", + " (130, 254, 243, 6),\n", + " (68, 254, 243, 6),\n", + " (106, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (106, 254, 243, 5),\n", + " (122, 254, 243, 5),\n", + " (234, 254, 243, 6),\n", + " (25, 254, 243, 5),\n", + " (178, 254, 243, 5),\n", + " (44, 254, 243, 5),\n", + " (61, 254, 243, 5),\n", + " (61, 254, 243, 5),\n", + " (36, 254, 243, 6),\n", + " (213, 254, 243, 5),\n", + " (244, 254, 243, 5),\n", + " (252, 254, 139, 199),\n", + " (252, 254, 139, 199),\n", + " (244, 254, 243, 5),\n", + " (51, 254, 12, 5),\n", + " (0, 254, 243, 5),\n", + " (176, 254, 12, 5),\n", + " (111, 254, 243, 5),\n", + " (132, 254, 153, 5),\n", + " (230, 254, 243, 5),\n", + " (168, 254, 243, 5),\n", + " (232, 254, 243, 6),\n", + " (109, 254, 243, 6),\n", + " ...]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "semantic_ids" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "item='OPI Pink Shatter, Pink of Hearts 2011 - NLE58' clust_tuple=(0, 254, 243, 5, 112)\n", + "item='Laura Mercier Secret Concealer # 1 0.08oz' clust_tuple=(0, 254, 243, 5, 5)\n", + "item='Alterna Caviar Anti-Aging Replenishing Moisture Conditioner for Unisex, 8.5 Ounce' clust_tuple=(0, 254, 243, 5, 124)\n", + "item=\"L'oreal Professional Paris Absolut Repair Cellular Lactic Acid Shampoo, 8.45-Ounce Bottle\" clust_tuple=(0, 254, 243, 5, 23)\n", + "item='NEW! Style Edit Conceal Spray 2 oz. BLACK/DARK BROWN (Conceal your gray between color services)' clust_tuple=(0, 254, 243, 5, 143)\n", + "1\n", + "item='BabyGanics Fine and Handy Foaming Hand Soap, Apple, 250 Ml, 8.45-Ounce (Pack of 2), Packaging May Vary' clust_tuple=(1, 254, 243, 5, 49)\n", + "item='TRESemme Thermal Creations Heat Tamer Spray, 8 Ounce (Pack of 6)' clust_tuple=(1, 254, 243, 5, 27)\n", + "item='Ardell Brow and Lash Growth Accelerator, 0.25-Ounce (Pack of 3)' clust_tuple=(1, 254, 243, 5, 26)\n", + "item='Maybelline New York Lash Stiletto Ultimate Length Washable Mascara, Brownish Black 952, 0.22 Fluid Ounce' clust_tuple=(1, 254, 243, 5, 33)\n", + "item='Natural Beige Cleansing Facial Sponges - 12 Pack' clust_tuple=(1, 254, 243, 5, 51)\n", + "2\n", + "item='Sigma F86 - Tapered Kabuki TM' clust_tuple=(2, 254, 243, 5, 8)\n", + "item='Pantene Pro-V Ultimate 10 Bb Creme 5.1 Fl Oz' clust_tuple=(2, 254, 243, 5, 10)\n", + "item='Swisspers Cotton Rounds, 80-Count (Pack of 6)' clust_tuple=(2, 254, 243, 5, 4)\n", + "item='Axe Personal 6 Piece Travel Kit Gift Set Shower Gel, Bodyspray, Deodorant, Shampoo, Conditioner, Styling Putty' clust_tuple=(2, 254, 139, 5, 4)\n", + "item='Professional Vitamin C Serum 20% + E + Hyaluronic Acid + Ferulic Acid for Face - Contains Highly Effective Antioxidants Making a Potent Facial Anti Aging Skin Care Product - Boosting Collagen Creation Smoothing Wrinkles and Fine Lines and Fading Age Spots' clust_tuple=(2, 254, 153, 5, 0)\n", + "3\n", + "item='Gena Healthy Hoof, 1 Ounce' clust_tuple=(3, 254, 243, 5, 19)\n", + "item='Revlon Colorsilk Color Burgundy 48' clust_tuple=(3, 254, 243, 5, 9)\n", + "item='Body Drench Quick Tan Instant Self Tanner Bronzing Spray, Medium/Dark, 6 Ounce' clust_tuple=(3, 254, 243, 5, 74)\n", + "item='John Frieda Radiant Red Colour Protecting Conditioner, 8.45 Ounces (Pack of 2)' clust_tuple=(3, 254, 243, 5, 68)\n", + "item='Almay Wake-up Hydrating Makeup, Ivory, 0.35-Ounce' clust_tuple=(3, 254, 243, 5, 59)\n", + "4\n", + "item='Cucumber Infused Facial Cleansing Wipes, 33 Count' clust_tuple=(4, 254, 243, 5, 8)\n", + "item='Touch Back by Colormark Temporary Hair Color Marker Rich Black' clust_tuple=(4, 254, 243, 5, 4)\n", + "item='Got2b Fat-tastic Thickening Plumping Mousse, 8.5-Ounce' clust_tuple=(4, 254, 243, 6, 3)\n", + "item='ECOCO Eco Style Gel, Blue, 32 Ounce' clust_tuple=(4, 254, 243, 5, 3)\n", + "item='Andis Tangerine Twist Nano Ceramic Flat Iron,1-Inch' clust_tuple=(4, 254, 243, 5, 7)\n", + "5\n", + "item='Essie Nail Polish Go Ginza #825' clust_tuple=(5, 254, 243, 5, 25)\n", + "item='O.P.I Gelcolor Collection Nail Gel Lacquer, Alpine Snow, 0.5 Fluid Ounce' clust_tuple=(5, 254, 243, 5, 18)\n", + "item=\"It's A 10 Miracle Moisture Shampoo, 10-Ounce Bottle\" clust_tuple=(5, 254, 243, 5, 5)\n", + "item='China Glaze Nail Polish, Urban-Night, 0.5 Ounce' clust_tuple=(5, 254, 243, 5, 15)\n", + "item='OPI: Lacquer M44 Anti-Bleak, 0.5 oz' clust_tuple=(5, 254, 243, 5, 27)\n", + "6\n", + "item='The Body Shop Vitamin E Face Mist, 3.3-Fluid Ounce' clust_tuple=(6, 254, 84, 6, 0)\n", + "item='Blinc Black Mascara - Two Full-Size Tubes' clust_tuple=(6, 254, 84, 6, 1)\n", + "item='Duo Lash Adhesive - Clear, 0.25-Ounce (Pack of 2)' clust_tuple=(6, 254, 84, 6, 3)\n", + "item='THERA PEARL Eye-ssential Mask' clust_tuple=(6, 254, 84, 6, 2)\n", + "item='Duo Lash Adhesive, Clear, 0.25 Ounce' clust_tuple=(6, 254, 84, 199, 0)\n", + "7\n", + "item='Suave Professionals Shampoo, Rosemary Mint for All Hair Types, 12.6 Ounce Bottles (Pack of 6)' clust_tuple=(7, 254, 12, 5, 17)\n", + "item='Pantene Pro-V Smooth Shampoo 12.6 Fl Oz (Pack of 6)' clust_tuple=(7, 254, 12, 5, 22)\n", + "item='Dove Damage Therapy Intensive Repair Daily Super Conditioner, 8 Ounce (Pack of 3)' clust_tuple=(7, 254, 12, 5, 18)\n", + "item='Suave Professionals Conditioner, Humectant - 12.6 Ounce' clust_tuple=(7, 254, 12, 5, 1)\n", + "item='Motions At Home Lavish Conditioning Shampoo, 13 Ounce Bottles (Pack of 6)' clust_tuple=(7, 254, 12, 5, 7)\n", + "8\n", + "item='Snooki Instant Sunless Self Tanning Body Bronzing Spray 7.5z' clust_tuple=(8, 254, 243, 6, 16)\n", + "item='Wet N Wild Lipstick Bare It All #902C' clust_tuple=(8, 254, 243, 6, 11)\n", + "item='KoKo du lait Daily Leave In Moisturizing Detangler For Wavy, Curly, Kinky, Relaxed & Chemically Treated Hair' clust_tuple=(8, 254, 243, 6, 15)\n", + "item='Solia 1875W Thermal Ionic Hair Dryer' clust_tuple=(8, 254, 243, 6, 1)\n", + "item=\"L'Oreal EverPure UV Protect Spray 8.5 fl oz (250 ml)\" clust_tuple=(8, 254, 243, 6, 7)\n", + "9\n", + "item='Peter Thomas Roth Anti-Aging Cellular Eye Repair Gel .76 oz' clust_tuple=(9, 254, 243, 6, 2)\n", + "item='WELLA Brilliance Shampoo for Fine to Normal Colored Hair 10.1oz' clust_tuple=(9, 254, 243, 6, 11)\n", + "item='Watts Beauty Moisturizing Hyaluronic Acid Advanced Skin Gel, 2.0 Ounce' clust_tuple=(9, 254, 243, 6, 15)\n", + "item='WEN® Fig Cleansing Conditioner 32oz' clust_tuple=(9, 254, 243, 6, 4)\n", + "item='Skinceuticals Blemish plus Age Defense Acne Treatment, 1 Fluid Ounce' clust_tuple=(9, 254, 243, 6, 13)\n" + ] + } + ], + "source": [ + "from rqvae.rqvae_data import search_similar_items\n", + "\n", + "\n", + "for i in range(0, 10):\n", + " sim = search_similar_items(items_with_tuples, (i,), 5)\n", + " if len(sim) == 0:\n", + " continue\n", + " print(i)\n", + " for asin, item, clust_tuple in sim:\n", + " # if 'nail' in item.lower():\n", + " print(f\"{item=} {clust_tuple=}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from collections import Counter\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values(), bins=100)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12101" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(set(item[-1] for item in items_with_tuples))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# from sklearn import preprocessing\n", + "\n", + "# labels = df['asin']\n", + "\n", + "# le = preprocessing.LabelEncoder()\n", + "# targets = le.fit_transform(labels)\n", + "\n", + "# df['asin_numeric'] = targets\n", + "\n", + "# torch.save(df, './all_data.pt')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "gsrec", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index b105d9e3..314df443 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,18 +1,16 @@ from models.base import TorchModel import torch -import torch.nn as nn import torch -from tqdm import tqdm import faiss class RqVaeModel(TorchModel, config_name='rqvae'): def __init__( self, - all_data, + train_sampler, input_dim: int, hidden_dim: int, n_iter: int, @@ -43,9 +41,11 @@ def __init__( self._init_weights(initializer_range) - embeddings = torch.stack([entry['item.embed'] for entry in all_data._dataset]) - if self.should_init_codebooks: + if train_sampler is None: + raise AttributeError("Train sampler is None") + + embeddings = torch.stack([entry['item.embed'] for entry in train_sampler._dataset]) self.init_codebooks(embeddings) print('Codebooks initialized with Faiss Kmeans') self.should_init_codebooks = False @@ -53,7 +53,7 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - all_data=kwargs['train_sampler'], + train_sampler=kwargs.get('train_sampler'), input_dim=config['input_dim'], hidden_dim=config['hidden_dim'], n_iter=config['n_iter'], diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py new file mode 100644 index 00000000..e92df225 --- /dev/null +++ b/modeling/models/tiger.py @@ -0,0 +1,96 @@ +import json +import torch +import torch.nn as nn +import torch.nn.functional as F + +from modeling.utils import DEVICE +from models.base import BaseModel, TorchModel + + +class TigerModel(TorchModel, config_name='tiger'): + def __init__( + self, + rqvae_encoder, + emb_dim, + n_tokens, + n_codebooks, + nhead, + num_encoder_layers, + num_decoder_layers, + dim_feedforward, + dropout + ): + super().__init__() + + self.rqvae_encoder = rqvae_encoder + self.emb_dim = emb_dim + self.n_tokens = n_tokens + + self.position_embeddings = nn.Embedding(n_codebooks, emb_dim) + self.item_embeddings = nn.Embedding(n_tokens, emb_dim) + + self.transformer = nn.Transformer( + d_model=emb_dim, + nhead=nhead, + num_encoder_layers=num_encoder_layers, + num_decoder_layers=num_decoder_layers, + dim_feedforward=dim_feedforward, + dropout=dropout + ) + + self.proj = nn.Linear(emb_dim, n_tokens) + + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_train_config = json.load(open(config['rqvae_train_config_path'])) + + rqvae_model = BaseModel.create_from_config(rqvae_train_config['model']).to(DEVICE) + rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) + rqvae_model.eval() + + return cls( + rqvae_encoder=rqvae_model, + emb_dim=config['emb_dim'], + n_tokens=config['n_tokens'], + n_codebooks=config['n_codebooks'], + nhead=config['nhead'], + num_encoder_layers=config['num_encoder_layers'], + num_decoder_layers=config['num_decoder_layers'], + dim_feedforward=config['dim_feedforward'], + dropout=config['dropout'] + ) + + def forward(self, user_item_history): + # Get item embeddings from RQVAE encoder + item_sequence = self.rqvae_encoder(user_item_history) + + # Convert item sequence to embeddings (embedding size is emb_dim) + item_embs = self.item_embeddings(item_sequence) + + # Add positional embeddings (positions are in the range [0, 3] for each tuple in the sequence) + positions = torch.arange(0, item_embs.size(1), device=item_embs.device).unsqueeze(0) + position_embs = self.position_embeddings(positions) + + # Add position embeddings to item embeddings + embeddings = item_embs + position_embs + + # Transformer expects the input to be in (seq_len, batch, embedding_dim) format + embeddings = embeddings.permute(1, 0, 2) # Convert to (seq_len, batch, emb_dim) + + # Create the target sequence for the transformer decoder + # You can shift the sequence for training as needed (e.g., teacher forcing) + target = embeddings.clone() # Use input embeddings as target for now + + # Pass through the transformer (using embeddings as both input and target) + transformer_output = self.transformer(embeddings, target) + + # Project the output back to token space (256 possible values for each codebook) + logits = self.proj(transformer_output) + + # Apply softmax to get probabilities (for cross-entropy loss) + return logits + + def compute_loss(self, logits, target): + # Compute cross-entropy loss + loss = F.cross_entropy(logits.view(-1, self.n_tokens), target.view(-1)) + return loss diff --git a/modeling/rqvae/__init__.py b/modeling/rqvae/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/collisions.py b/modeling/rqvae/collisions.py similarity index 100% rename from src/collisions.py rename to modeling/rqvae/collisions.py diff --git a/src/rqvae_data.py b/modeling/rqvae/rqvae_data.py similarity index 88% rename from src/rqvae_data.py rename to modeling/rqvae/rqvae_data.py index 19fb23d1..170c4e18 100644 --- a/src/rqvae_data.py +++ b/modeling/rqvae/rqvae_data.py @@ -75,18 +75,10 @@ def get_data(cached=True): with torch.no_grad(): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: - df = torch.load("../data/df_with_embs.pt", weights_only=False) + df = torch.load("../data/Beauty/all_data.pt", weights_only=False) return df -def get_cb_tuples(rqvae, embeddings): - ind_lists = [] - for cb in rqvae.codebooks: - dist = torch.cdist(rqvae.encoder(embeddings), cb) - ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) - - return zip(*ind_lists) - def search_similar_items(items_with_tuples, clust2search, max_cnt=5): random.shuffle(items_with_tuples) diff --git a/review.md b/review.md index 572accc1..45523828 100644 --- a/review.md +++ b/review.md @@ -2,7 +2,12 @@ ## Todos +- posterior collapse (как будто все сваливается в один индекс в кодбуке) +- обязательно использование reinit unused clusters +- в Amazon датасете пофиг на rating? получается учитываются только implicit действия? +- TODO какой базовый класс использовать для e2e модели? (LastPred?) - TODO backward on mean loss? in `RqVae` +- TODO имя для модели (tiger) ## Links @@ -14,7 +19,7 @@ ## Todo -### Train +### Train full encoder-decoder - На чем обучать? То есть на каких данных запускать backward pass? - train model diff --git a/src/main.ipynb b/src/main.ipynb deleted file mode 100644 index f6d7b18b..00000000 --- a/src/main.ipynb +++ /dev/null @@ -1,171 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "from rqvae_data import get_data\n", - "\n", - "df = get_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "embs = torch.stack(df[\"embeddings\"].tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "embs.shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from rqvae import RQVAE\n", - "\n", - "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - "\n", - "\n", - "rqvae = RQVAE(\n", - " input_dim=embs.shape[1],\n", - " hidden_dim=128,\n", - " beta=0.25,\n", - " codebook_sizes=[256] * 4,\n", - " should_init_codebooks=True,\n", - " should_reinit_unused_clusters=False,\n", - ").to(device)\n", - "\n", - "\n", - "embs_dict = {\"embedding\": embs.to(device)}\n", - "\n", - "rqvae.forward(embs_dict)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from collisions import dedup\n", - "from rqvae_data import get_cb_tuples\n", - "\n", - "\n", - "cb_tuples = list(get_cb_tuples(rqvae, embs_dict[\"embedding\"]))\n", - "items_with_tuples = list(zip(df[\"asin\"], df[\"title\"].fillna(\"unknown\"), cb_tuples))\n", - "items_with_tuples = dedup(items_with_tuples)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from rqvae_data import search_similar_items\n", - "\n", - "\n", - "for i in range(230, 240):\n", - " sim = search_similar_items(items_with_tuples, (i,), 10)\n", - " if len(sim) == 0:\n", - " continue\n", - " print(i)\n", - " for asin, item, clust_tuple in sim:\n", - " if 'nail' in item.lower():\n", - " print(f\"{item=} {clust_tuple=}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from collections import Counter\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values(), bins=100)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "len(set(item[-1] for item in items_with_tuples))" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn import preprocessing\n", - "\n", - "labels = df['asin']\n", - "\n", - "le = preprocessing.LabelEncoder()\n", - "targets = le.fit_transform(labels)\n", - "\n", - "df['asin_numeric'] = targets" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "torch.save(df, './all_data.pt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "gsrec", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/src/main.py b/src/main.py deleted file mode 100644 index 21d47550..00000000 --- a/src/main.py +++ /dev/null @@ -1,46 +0,0 @@ -import torch -import typing -import random -import os - -from rqvae import RQVAE - -device = torch.device("cuda") - - -def get_cb_tuples(embeddings): - ind_lists = [] - for cb in rqvae.codebooks: - dist = torch.cdist(rqvae.encoder(embeddings), cb) - ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) - - return zip(*ind_lists) - - -def search_similar_items(items_with_tuples): - random.shuffle(items_with_tuples) - clust2search = (585,) - cnt = 0 - for item, clust_tuple in items_with_tuples: - if clust_tuple[: len(clust2search)] == clust2search: - print(item, clust_tuple) - cnt += 1 - if cnt >= 5: - break - - -# TODO: add T5 sentence construction from huggingface - - -embs = {"embedding": []} - -rqvae = RQVAE( - input_dim=200, - hidden_dim=128, - beta=0.25, - codebook_sizes=[256] * 4, - should_init_codebooks=False, - should_reinit_unused_clusters=False, -).to(device) - -rqvae.forward(embs) From 8ec8ea5553d46348a1743dca15f551b7aa530c14 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 23 Dec 2024 22:03:15 +0300 Subject: [PATCH 012/175] add todo --- modeling/models/tiger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index e92df225..98a852db 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -6,7 +6,7 @@ from modeling.utils import DEVICE from models.base import BaseModel, TorchModel - +# TODO finish tiger model class TigerModel(TorchModel, config_name='tiger'): def __init__( self, From a65976701320044c32e913210ae43b23375b9d79 Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 24 Dec 2024 14:09:06 +0300 Subject: [PATCH 013/175] fix collapse (correct infer) --- configs/train/rqvae_train_config.json | 2 +- modeling/main.ipynb | 1178 ++----------------------- modeling/models/rqvae.py | 9 +- review.md | 4 +- 4 files changed, 97 insertions(+), 1096 deletions(-) diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index e9f3fe2f..ba2cfb05 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_steps_num": 2000, + "train_steps_num": 1024, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", diff --git a/modeling/main.ipynb b/modeling/main.ipynb index db47d562..7f6194b7 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -59,1032 +59,14 @@ "from rqvae.collisions import dedup\n", "\n", "items_with_tuples = list(zip(df[\"asin\"], df[\"title\"].fillna(\"unknown\"), semantic_ids))\n", - "items_with_tuples = dedup(items_with_tuples)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(86, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (224, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (80, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (141, 254, 84, 6),\n", - " (68, 254, 84, 6),\n", - " (1, 254, 243, 5),\n", - " (224, 254, 243, 6),\n", - " (74, 254, 84, 6),\n", - " (244, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (127, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (230, 254, 243, 5),\n", - " (184, 254, 12, 5),\n", - " (143, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (230, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (150, 254, 243, 6),\n", - " (77, 254, 243, 5),\n", - " (144, 254, 243, 6),\n", - " (249, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (223, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (144, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (46, 254, 243, 6),\n", - " (175, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (9, 254, 243, 6),\n", - " (68, 254, 243, 6),\n", - " (254, 254, 243, 6),\n", - " (122, 254, 12, 5),\n", - " (109, 254, 243, 6),\n", - " (3, 254, 243, 5),\n", - " (77, 254, 243, 5),\n", - " (140, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (176, 254, 12, 5),\n", - " (70, 254, 153, 5),\n", - " (166, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (226, 254, 243, 6),\n", - " (122, 254, 12, 5),\n", - " (57, 254, 243, 5),\n", - " (194, 254, 243, 6),\n", - " (62, 254, 243, 5),\n", - " (252, 254, 139, 199),\n", - " (226, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (161, 254, 139, 199),\n", - " (7, 254, 12, 5),\n", - " (51, 254, 12, 5),\n", - " (7, 254, 12, 5),\n", - " (184, 254, 12, 5),\n", - " (174, 254, 243, 6),\n", - " (224, 254, 243, 5),\n", - " (229, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (176, 254, 12, 5),\n", - " (44, 254, 243, 5),\n", - " (96, 254, 243, 5),\n", - " (117, 254, 243, 6),\n", - " (102, 254, 243, 5),\n", - " (206, 254, 139, 6),\n", - " (224, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (232, 254, 243, 199),\n", - " (254, 254, 243, 6),\n", - " (85, 254, 243, 5),\n", - " (3, 254, 243, 5),\n", - " (21, 254, 217, 199),\n", - " (144, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (153, 254, 139, 199),\n", - " (161, 254, 139, 199),\n", - " (19, 254, 243, 6),\n", - " (153, 254, 139, 199),\n", - " (19, 254, 243, 6),\n", - " (242, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (199, 254, 243, 6),\n", - " (168, 254, 243, 5),\n", - " (212, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (212, 254, 243, 6),\n", - " (165, 254, 243, 5),\n", - " (123, 254, 243, 5),\n", - " (85, 254, 243, 5),\n", - " (198, 254, 243, 6),\n", - " (198, 254, 243, 5),\n", - " (144, 254, 243, 5),\n", - " (21, 254, 139, 199),\n", - " (117, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (212, 254, 243, 6),\n", - " (128, 254, 243, 5),\n", - " (242, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (85, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (86, 254, 84, 6),\n", - " (141, 254, 84, 6),\n", - " (91, 254, 139, 6),\n", - " (63, 254, 243, 6),\n", - " (141, 254, 84, 6),\n", - " (92, 254, 12, 5),\n", - " (224, 254, 243, 5),\n", - " (61, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (117, 254, 243, 6),\n", - " (141, 254, 84, 6),\n", - " (109, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (69, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (143, 254, 243, 6),\n", - " (176, 254, 12, 5),\n", - " (143, 254, 243, 6),\n", - " (91, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (242, 254, 243, 6),\n", - " (95, 254, 243, 6),\n", - " (88, 254, 243, 6),\n", - " (189, 254, 243, 5),\n", - " (48, 254, 84, 6),\n", - " (253, 254, 84, 6),\n", - " (19, 254, 243, 6),\n", - " (143, 254, 243, 6),\n", - " (214, 254, 243, 5),\n", - " (81, 254, 139, 5),\n", - " (122, 254, 243, 5),\n", - " (101, 254, 84, 6),\n", - " (235, 254, 243, 6),\n", - " (135, 254, 243, 5),\n", - " (175, 254, 243, 6),\n", - " (138, 254, 139, 6),\n", - " (86, 254, 84, 6),\n", - " (86, 254, 84, 6),\n", - " (13, 254, 139, 5),\n", - " (117, 254, 243, 6),\n", - " (212, 254, 243, 6),\n", - " (122, 254, 12, 5),\n", - " (130, 254, 243, 6),\n", - " (117, 254, 243, 6),\n", - " (16, 254, 243, 6),\n", - " (239, 254, 243, 6),\n", - " (141, 254, 84, 6),\n", - " (132, 254, 243, 5),\n", - " (153, 254, 217, 199),\n", - " (48, 254, 243, 6),\n", - " (154, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (226, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (198, 254, 243, 5),\n", - " (70, 254, 153, 5),\n", - " (128, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (198, 254, 243, 5),\n", - " (229, 254, 243, 5),\n", - " (14, 254, 243, 6),\n", - " (122, 254, 153, 5),\n", - " (176, 254, 153, 5),\n", - " (235, 254, 243, 6),\n", - " (252, 254, 139, 199),\n", - " (88, 254, 243, 6),\n", - " (190, 254, 84, 6),\n", - " (23, 254, 243, 6),\n", - " (211, 254, 139, 5),\n", - " (137, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (86, 254, 84, 6),\n", - " (46, 254, 243, 6),\n", - " (221, 254, 243, 6),\n", - " (226, 254, 243, 6),\n", - " (135, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (224, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (212, 254, 243, 6),\n", - " (70, 254, 243, 5),\n", - " (161, 254, 139, 199),\n", - " (236, 254, 139, 6),\n", - " (91, 254, 139, 6),\n", - " (44, 254, 243, 5),\n", - " (4, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (231, 254, 243, 5),\n", - " (221, 254, 243, 6),\n", - " (168, 254, 243, 5),\n", - " (88, 254, 243, 6),\n", - " (46, 254, 243, 6),\n", - " (143, 254, 243, 6),\n", - " (193, 254, 243, 5),\n", - " (231, 254, 243, 5),\n", - " (230, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (213, 254, 243, 5),\n", - " (48, 254, 139, 6),\n", - " (23, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (211, 254, 243, 5),\n", - " (224, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (134, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (90, 254, 243, 5),\n", - " (91, 254, 139, 6),\n", - " (109, 254, 243, 6),\n", - " (3, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (86, 254, 84, 5),\n", - " (184, 254, 12, 5),\n", - " (1, 254, 139, 5),\n", - " (218, 254, 12, 5),\n", - " (86, 254, 139, 6),\n", - " (58, 254, 243, 5),\n", - " (60, 254, 139, 5),\n", - " (13, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (56, 254, 243, 6),\n", - " (241, 254, 243, 6),\n", - " (163, 254, 243, 6),\n", - " (207, 254, 243, 5),\n", - " (152, 254, 243, 6),\n", - " (85, 254, 243, 6),\n", - " (180, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (110, 254, 243, 6),\n", - " (137, 254, 243, 5),\n", - " (180, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (193, 254, 243, 5),\n", - " (85, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (187, 254, 136, 50),\n", - " (43, 254, 243, 6),\n", - " (178, 254, 243, 5),\n", - " (233, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (143, 254, 243, 6),\n", - " (174, 254, 243, 6),\n", - " (160, 254, 243, 5),\n", - " (226, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (100, 254, 243, 6),\n", - " (100, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (21, 254, 139, 199),\n", - " (88, 254, 243, 6),\n", - " (224, 254, 243, 6),\n", - " (143, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (224, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (156, 254, 243, 6),\n", - " (28, 254, 243, 6),\n", - " (0, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (218, 254, 12, 5),\n", - " (229, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (169, 254, 243, 6),\n", - " (122, 254, 243, 5),\n", - " (28, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (235, 254, 243, 6),\n", - " (48, 254, 139, 5),\n", - " (187, 254, 243, 50),\n", - " (60, 254, 243, 5),\n", - " (13, 254, 139, 5),\n", - " (224, 254, 243, 5),\n", - " (143, 254, 243, 6),\n", - " (85, 254, 243, 5),\n", - " (56, 254, 243, 6),\n", - " (199, 254, 243, 6),\n", - " (88, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (59, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (34, 254, 139, 5),\n", - " (61, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (187, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (134, 254, 243, 5),\n", - " (39, 254, 243, 6),\n", - " (35, 254, 243, 5),\n", - " (246, 254, 139, 6),\n", - " (106, 254, 243, 5),\n", - " (212, 254, 243, 6),\n", - " (229, 254, 243, 5),\n", - " (148, 254, 243, 5),\n", - " (46, 254, 243, 6),\n", - " (86, 254, 139, 5),\n", - " (218, 254, 12, 5),\n", - " (106, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (58, 254, 139, 5),\n", - " (160, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (174, 254, 243, 6),\n", - " (242, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (174, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (229, 254, 243, 6),\n", - " (0, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (88, 254, 243, 6),\n", - " (137, 254, 243, 5),\n", - " (198, 254, 243, 5),\n", - " (184, 254, 12, 5),\n", - " (178, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (155, 254, 139, 199),\n", - " (244, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (100, 254, 243, 6),\n", - " (203, 254, 243, 5),\n", - " (144, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (46, 254, 243, 6),\n", - " (134, 254, 243, 5),\n", - " (51, 254, 12, 5),\n", - " (106, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (221, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (252, 254, 139, 199),\n", - " (168, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (35, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (35, 254, 84, 5),\n", - " (35, 254, 84, 5),\n", - " (137, 254, 243, 5),\n", - " (65, 254, 243, 5),\n", - " (198, 254, 84, 5),\n", - " (10, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (5, 254, 243, 5),\n", - " (65, 254, 243, 5),\n", - " (67, 254, 136, 50),\n", - " (214, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (242, 254, 243, 6),\n", - " (10, 254, 243, 5),\n", - " (32, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (10, 254, 243, 5),\n", - " (56, 254, 84, 6),\n", - " (116, 254, 243, 5),\n", - " (116, 254, 243, 5),\n", - " (88, 254, 243, 6),\n", - " (60, 254, 243, 5),\n", - " (207, 254, 139, 5),\n", - " (174, 254, 243, 6),\n", - " (121, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (178, 254, 243, 5),\n", - " (60, 254, 139, 5),\n", - " (176, 254, 12, 5),\n", - " (223, 254, 243, 6),\n", - " (155, 254, 139, 199),\n", - " (73, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (127, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (253, 254, 243, 6),\n", - " (212, 254, 243, 6),\n", - " (3, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (77, 254, 243, 5),\n", - " (6, 254, 84, 199),\n", - " (146, 254, 243, 6),\n", - " (73, 254, 243, 5),\n", - " (143, 254, 243, 6),\n", - " (85, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (235, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (34, 254, 243, 5),\n", - " (163, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (163, 254, 243, 6),\n", - " (10, 254, 243, 5),\n", - " (28, 254, 243, 6),\n", - " (57, 254, 243, 5),\n", - " (146, 254, 243, 6),\n", - " (224, 254, 243, 5),\n", - " (171, 254, 243, 5),\n", - " (157, 254, 243, 6),\n", - " (46, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (253, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (232, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (135, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (214, 254, 243, 5),\n", - " (232, 254, 243, 6),\n", - " (140, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (65, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (165, 254, 243, 5),\n", - " (132, 254, 243, 5),\n", - " (13, 254, 139, 5),\n", - " (134, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (56, 254, 243, 6),\n", - " (85, 254, 243, 5),\n", - " (229, 254, 243, 5),\n", - " (7, 254, 12, 5),\n", - " (212, 254, 243, 6),\n", - " (38, 254, 12, 5),\n", - " (38, 254, 12, 5),\n", - " (105, 254, 243, 5),\n", - " (207, 254, 139, 6),\n", - " (154, 254, 243, 6),\n", - " (19, 254, 243, 6),\n", - " (235, 254, 243, 6),\n", - " (224, 254, 243, 5),\n", - " (229, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (88, 254, 243, 6),\n", - " (138, 254, 243, 6),\n", - " (134, 254, 243, 5),\n", - " (22, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (242, 254, 243, 6),\n", - " (145, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (235, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (81, 254, 139, 5),\n", - " (96, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (13, 254, 139, 5),\n", - " (70, 254, 243, 5),\n", - " (163, 254, 243, 6),\n", - " (160, 254, 243, 5),\n", - " (49, 254, 243, 5),\n", - " (227, 254, 139, 5),\n", - " (211, 254, 139, 5),\n", - " (244, 254, 243, 5),\n", - " (211, 254, 243, 5),\n", - " (79, 254, 243, 5),\n", - " (100, 254, 243, 6),\n", - " (60, 254, 139, 5),\n", - " (163, 254, 243, 6),\n", - " (179, 254, 84, 5),\n", - " (230, 254, 243, 5),\n", - " (127, 254, 243, 5),\n", - " (61, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (217, 254, 243, 6),\n", - " (128, 254, 243, 5),\n", - " (22, 254, 243, 159),\n", - " (178, 254, 243, 5),\n", - " (82, 254, 136, 5),\n", - " (178, 254, 243, 5),\n", - " (162, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (41, 254, 243, 6),\n", - " (60, 254, 139, 5),\n", - " (217, 254, 243, 6),\n", - " (224, 254, 243, 6),\n", - " (56, 254, 243, 6),\n", - " (199, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (218, 254, 12, 5),\n", - " (44, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (1, 254, 243, 5),\n", - " (4, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (224, 254, 243, 6),\n", - " (187, 254, 243, 5),\n", - " (58, 254, 243, 5),\n", - " (1, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (25, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (58, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (62, 254, 243, 5),\n", - " (158, 254, 136, 159),\n", - " (252, 254, 139, 199),\n", - " (207, 254, 139, 6),\n", - " (130, 254, 243, 6),\n", - " (253, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (60, 254, 139, 6),\n", - " (13, 254, 139, 5),\n", - " (178, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (233, 254, 243, 5),\n", - " (218, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (143, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (130, 254, 243, 6),\n", - " (134, 254, 243, 5),\n", - " (198, 254, 84, 6),\n", - " (242, 254, 243, 6),\n", - " (242, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (31, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (125, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (224, 254, 243, 6),\n", - " (235, 254, 243, 6),\n", - " (86, 254, 243, 6),\n", - " (156, 254, 243, 6),\n", - " (156, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (157, 254, 243, 6),\n", - " (156, 254, 243, 6),\n", - " (46, 254, 243, 6),\n", - " (102, 254, 243, 5),\n", - " (31, 254, 243, 6),\n", - " (211, 254, 139, 5),\n", - " (218, 254, 12, 5),\n", - " (106, 254, 243, 5),\n", - " (241, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (158, 254, 136, 50),\n", - " (108, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (108, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (97, 254, 243, 159),\n", - " (169, 254, 243, 5),\n", - " (211, 254, 243, 5),\n", - " (165, 254, 243, 5),\n", - " (96, 254, 243, 5),\n", - " (105, 254, 243, 5),\n", - " (46, 254, 243, 6),\n", - " (198, 254, 243, 6),\n", - " (137, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (229, 254, 243, 5),\n", - " (85, 254, 243, 5),\n", - " (1, 254, 139, 5),\n", - " (70, 254, 243, 5),\n", - " (214, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (1, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (224, 254, 243, 5),\n", - " (69, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (91, 254, 139, 5),\n", - " (91, 254, 139, 5),\n", - " (105, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (60, 254, 243, 5),\n", - " (3, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (13, 254, 243, 5),\n", - " (1, 254, 139, 5),\n", - " (137, 254, 243, 5),\n", - " (199, 254, 84, 6),\n", - " (242, 254, 243, 6),\n", - " (137, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (63, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (56, 254, 84, 6),\n", - " (111, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (120, 254, 12, 5),\n", - " (58, 254, 139, 5),\n", - " (146, 254, 243, 6),\n", - " (41, 254, 243, 5),\n", - " (1, 254, 243, 5),\n", - " (163, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (105, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (105, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (132, 254, 243, 5),\n", - " (132, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (185, 254, 243, 159),\n", - " (185, 254, 136, 159),\n", - " (3, 254, 243, 5),\n", - " (137, 254, 243, 159),\n", - " (106, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (159, 254, 243, 159),\n", - " (0, 254, 243, 5),\n", - " (105, 254, 243, 5),\n", - " (122, 254, 243, 5),\n", - " (180, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (91, 254, 139, 5),\n", - " (109, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " (255, 254, 243, 5),\n", - " (122, 254, 153, 5),\n", - " (191, 254, 84, 6),\n", - " (176, 254, 12, 5),\n", - " (244, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (41, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (176, 254, 153, 5),\n", - " (44, 254, 243, 5),\n", - " (79, 254, 243, 5),\n", - " (70, 254, 243, 5),\n", - " (253, 254, 243, 6),\n", - " (239, 254, 243, 6),\n", - " (234, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (88, 254, 243, 6),\n", - " (102, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (168, 254, 243, 5),\n", - " (74, 254, 84, 6),\n", - " (44, 254, 243, 5),\n", - " (173, 254, 243, 5),\n", - " (199, 254, 243, 6),\n", - " (60, 254, 243, 5),\n", - " (218, 254, 12, 5),\n", - " (13, 254, 243, 5),\n", - " (13, 254, 139, 5),\n", - " (58, 254, 243, 5),\n", - " (13, 254, 139, 5),\n", - " (226, 254, 243, 6),\n", - " (85, 254, 243, 6),\n", - " (198, 254, 243, 5),\n", - " (242, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (191, 254, 243, 6),\n", - " (51, 254, 12, 5),\n", - " (193, 254, 243, 5),\n", - " (88, 254, 243, 6),\n", - " (156, 254, 243, 6),\n", - " (91, 254, 139, 5),\n", - " (143, 254, 243, 6),\n", - " (32, 254, 243, 5),\n", - " (13, 254, 243, 5),\n", - " (96, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (86, 254, 243, 6),\n", - " (241, 254, 243, 6),\n", - " (46, 254, 243, 6),\n", - " (198, 254, 243, 5),\n", - " (221, 254, 243, 6),\n", - " (167, 254, 243, 5),\n", - " (214, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (226, 254, 243, 6),\n", - " (131, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (163, 254, 243, 6),\n", - " (194, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (177, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (13, 254, 243, 5),\n", - " (61, 254, 243, 5),\n", - " (25, 254, 243, 5),\n", - " (85, 254, 243, 5),\n", - " (1, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (218, 254, 12, 5),\n", - " (161, 254, 139, 199),\n", - " (0, 254, 243, 5),\n", - " (14, 254, 243, 6),\n", - " (178, 254, 243, 5),\n", - " (222, 254, 243, 6),\n", - " (184, 254, 12, 5),\n", - " (178, 254, 243, 5),\n", - " (105, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (231, 254, 243, 5),\n", - " (132, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (109, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (143, 254, 243, 6),\n", - " (213, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (131, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (19, 254, 243, 6),\n", - " (78, 254, 139, 199),\n", - " (67, 254, 136, 50),\n", - " (78, 254, 139, 199),\n", - " (60, 254, 139, 6),\n", - " (78, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (155, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (18, 254, 139, 199),\n", - " (168, 254, 243, 5),\n", - " (143, 254, 243, 6),\n", - " (135, 254, 243, 5),\n", - " (78, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (78, 254, 139, 199),\n", - " (18, 254, 139, 199),\n", - " (78, 254, 139, 199),\n", - " (73, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (252, 254, 139, 199),\n", - " (139, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (106, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (137, 254, 243, 5),\n", - " (18, 254, 139, 199),\n", - " (155, 254, 139, 199),\n", - " (18, 254, 139, 199),\n", - " (73, 254, 243, 5),\n", - " (252, 254, 139, 199),\n", - " (73, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (132, 254, 243, 5),\n", - " (70, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (122, 254, 153, 5),\n", - " (143, 254, 243, 6),\n", - " (193, 254, 243, 5),\n", - " (212, 254, 243, 6),\n", - " (176, 254, 12, 5),\n", - " (135, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (201, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (71, 254, 153, 5),\n", - " (128, 254, 243, 5),\n", - " (1, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (120, 254, 12, 5),\n", - " (137, 254, 243, 5),\n", - " (163, 254, 243, 6),\n", - " (242, 254, 243, 6),\n", - " (110, 254, 243, 6),\n", - " (0, 254, 243, 5),\n", - " (23, 254, 243, 6),\n", - " (63, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (21, 254, 139, 199),\n", - " (22, 254, 243, 5),\n", - " (70, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (178, 254, 243, 5),\n", - " (131, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (241, 254, 243, 6),\n", - " (122, 254, 12, 5),\n", - " (109, 254, 243, 6),\n", - " (60, 254, 139, 5),\n", - " (177, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (86, 254, 139, 6),\n", - " (135, 254, 243, 5),\n", - " (136, 254, 243, 6),\n", - " (61, 254, 243, 5),\n", - " (38, 254, 12, 5),\n", - " (60, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (74, 254, 84, 6),\n", - " (218, 254, 12, 5),\n", - " (186, 254, 243, 6),\n", - " (167, 254, 243, 5),\n", - " (148, 254, 243, 5),\n", - " (229, 254, 243, 6),\n", - " (135, 254, 243, 6),\n", - " (60, 254, 139, 5),\n", - " (40, 254, 243, 5),\n", - " (250, 254, 243, 6),\n", - " (144, 254, 243, 6),\n", - " (132, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (41, 254, 139, 5),\n", - " (244, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (193, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (218, 254, 12, 5),\n", - " (1, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (62, 254, 243, 6),\n", - " (128, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (226, 254, 243, 6),\n", - " (194, 254, 243, 6),\n", - " (62, 254, 243, 6),\n", - " (158, 254, 243, 50),\n", - " (40, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (242, 254, 243, 6),\n", - " (111, 254, 243, 5),\n", - " (247, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (68, 254, 243, 6),\n", - " (146, 254, 243, 6),\n", - " (163, 254, 243, 6),\n", - " (143, 254, 243, 6),\n", - " (184, 254, 12, 5),\n", - " (97, 254, 243, 159),\n", - " (211, 254, 243, 5),\n", - " (167, 254, 243, 5),\n", - " (201, 254, 243, 5),\n", - " (91, 254, 139, 5),\n", - " (111, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (82, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (134, 254, 243, 5),\n", - " (86, 254, 84, 6),\n", - " (168, 254, 243, 5),\n", - " (148, 254, 243, 5),\n", - " (128, 254, 243, 5),\n", - " (122, 254, 12, 5),\n", - " (18, 254, 139, 199),\n", - " (111, 254, 243, 5),\n", - " (214, 254, 243, 5),\n", - " (13, 254, 243, 5),\n", - " (25, 254, 243, 5),\n", - " (230, 254, 243, 6),\n", - " (244, 254, 243, 5),\n", - " (140, 254, 243, 5),\n", - " (120, 254, 12, 5),\n", - " (216, 254, 243, 5),\n", - " (123, 254, 243, 6),\n", - " (241, 254, 243, 6),\n", - " (224, 254, 243, 5),\n", - " (63, 254, 243, 6),\n", - " (226, 254, 243, 6),\n", - " (96, 254, 243, 5),\n", - " (207, 254, 139, 6),\n", - " (86, 254, 84, 6),\n", - " (0, 254, 243, 5),\n", - " (57, 254, 243, 5),\n", - " (173, 254, 243, 5),\n", - " (173, 254, 243, 5),\n", - " (230, 254, 243, 5),\n", - " (160, 254, 243, 5),\n", - " (231, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (212, 254, 243, 6),\n", - " (211, 254, 243, 5),\n", - " (79, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (25, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (111, 254, 243, 5),\n", - " (102, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (148, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (79, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (73, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (40, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (42, 254, 243, 5),\n", - " (0, 254, 243, 5),\n", - " (68, 254, 243, 6),\n", - " (79, 254, 243, 5),\n", - " (135, 254, 243, 6),\n", - " (44, 254, 243, 5),\n", - " (130, 254, 243, 6),\n", - " (68, 254, 243, 6),\n", - " (106, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (106, 254, 243, 5),\n", - " (122, 254, 243, 5),\n", - " (234, 254, 243, 6),\n", - " (25, 254, 243, 5),\n", - " (178, 254, 243, 5),\n", - " (44, 254, 243, 5),\n", - " (61, 254, 243, 5),\n", - " (61, 254, 243, 5),\n", - " (36, 254, 243, 6),\n", - " (213, 254, 243, 5),\n", - " (244, 254, 243, 5),\n", - " (252, 254, 139, 199),\n", - " (252, 254, 139, 199),\n", - " (244, 254, 243, 5),\n", - " (51, 254, 12, 5),\n", - " (0, 254, 243, 5),\n", - " (176, 254, 12, 5),\n", - " (111, 254, 243, 5),\n", - " (132, 254, 153, 5),\n", - " (230, 254, 243, 5),\n", - " (168, 254, 243, 5),\n", - " (232, 254, 243, 6),\n", - " (109, 254, 243, 6),\n", - " ...]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "semantic_ids" + "items_with_tuples = dedup(items_with_tuples)\n", + "\n", + "assert len(df) == len(set(item[-1] for item in items_with_tuples))" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -1092,65 +74,33 @@ "output_type": "stream", "text": [ "0\n", - "item='OPI Pink Shatter, Pink of Hearts 2011 - NLE58' clust_tuple=(0, 254, 243, 5, 112)\n", - "item='Laura Mercier Secret Concealer # 1 0.08oz' clust_tuple=(0, 254, 243, 5, 5)\n", - "item='Alterna Caviar Anti-Aging Replenishing Moisture Conditioner for Unisex, 8.5 Ounce' clust_tuple=(0, 254, 243, 5, 124)\n", - "item=\"L'oreal Professional Paris Absolut Repair Cellular Lactic Acid Shampoo, 8.45-Ounce Bottle\" clust_tuple=(0, 254, 243, 5, 23)\n", - "item='NEW! Style Edit Conceal Spray 2 oz. BLACK/DARK BROWN (Conceal your gray between color services)' clust_tuple=(0, 254, 243, 5, 143)\n", + "item='Revlon Beyond Natural Smoothing Primer, Clear, 0.85 Ounce' clust_tuple=(0, 33, 46, 141, 0)\n", + "item='Color Club Magic Attraction 843 Nail Polish' clust_tuple=(0, 228, 117, 102, 0)\n", + "item='Color Club Wild at Heart 871 Nail Polish' clust_tuple=(0, 228, 83, 106, 0)\n", "1\n", - "item='BabyGanics Fine and Handy Foaming Hand Soap, Apple, 250 Ml, 8.45-Ounce (Pack of 2), Packaging May Vary' clust_tuple=(1, 254, 243, 5, 49)\n", - "item='TRESemme Thermal Creations Heat Tamer Spray, 8 Ounce (Pack of 6)' clust_tuple=(1, 254, 243, 5, 27)\n", - "item='Ardell Brow and Lash Growth Accelerator, 0.25-Ounce (Pack of 3)' clust_tuple=(1, 254, 243, 5, 26)\n", - "item='Maybelline New York Lash Stiletto Ultimate Length Washable Mascara, Brownish Black 952, 0.22 Fluid Ounce' clust_tuple=(1, 254, 243, 5, 33)\n", - "item='Natural Beige Cleansing Facial Sponges - 12 Pack' clust_tuple=(1, 254, 243, 5, 51)\n", + "item='Natural Beauty White / Brightening Essence Full Face Mask 10 Pcs' clust_tuple=(1, 210, 157, 13, 0)\n", + "item='OGX Conditioner, Nourishing Coconut Milk, 13oz' clust_tuple=(1, 50, 213, 95, 0)\n", + "item='BurnOut Eco-sensitive Zinc Oxide Sunscreen SPF 35 (3 oz)' clust_tuple=(1, 119, 46, 204, 0)\n", + "item='Kerastase Reflection Chroma Riche Luminous Softening Essence, 4.2 Ounce' clust_tuple=(1, 119, 3, 229, 0)\n", + "item='KINeSYS Performance Sunscreen, SPF 30, Spray, Mango Scent, 4-Ounce Bottles' clust_tuple=(1, 242, 54, 95, 0)\n", "2\n", - "item='Sigma F86 - Tapered Kabuki TM' clust_tuple=(2, 254, 243, 5, 8)\n", - "item='Pantene Pro-V Ultimate 10 Bb Creme 5.1 Fl Oz' clust_tuple=(2, 254, 243, 5, 10)\n", - "item='Swisspers Cotton Rounds, 80-Count (Pack of 6)' clust_tuple=(2, 254, 243, 5, 4)\n", - "item='Axe Personal 6 Piece Travel Kit Gift Set Shower Gel, Bodyspray, Deodorant, Shampoo, Conditioner, Styling Putty' clust_tuple=(2, 254, 139, 5, 4)\n", - "item='Professional Vitamin C Serum 20% + E + Hyaluronic Acid + Ferulic Acid for Face - Contains Highly Effective Antioxidants Making a Potent Facial Anti Aging Skin Care Product - Boosting Collagen Creation Smoothing Wrinkles and Fine Lines and Fading Age Spots' clust_tuple=(2, 254, 153, 5, 0)\n", + "item='Pink Sugar by Aquolina for Women - 3.4 Ounce EDT Spray' clust_tuple=(2, 173, 246, 41, 0)\n", + "item='Guess By Parlux Fragrances For Men. Eau De Toilette Spray 2.5 Oz.' clust_tuple=(2, 104, 233, 139, 0)\n", + "item='Black Xs By Paco Rabanne For Men, Eau De Toilette Spray, 3.4-Ounce Bottle' clust_tuple=(2, 177, 233, 95, 0)\n", + "item='Incanto Shine By Salvatore Ferragamo For Women, Eau De Toilette Spray, 3.4-Ounce Bottle' clust_tuple=(2, 128, 185, 76, 0)\n", + "item='Versace Man Eau Fraiche By Gianni Versace For Men Edt Spray 3.4 Oz' clust_tuple=(2, 148, 81, 107, 0)\n", "3\n", - "item='Gena Healthy Hoof, 1 Ounce' clust_tuple=(3, 254, 243, 5, 19)\n", - "item='Revlon Colorsilk Color Burgundy 48' clust_tuple=(3, 254, 243, 5, 9)\n", - "item='Body Drench Quick Tan Instant Self Tanner Bronzing Spray, Medium/Dark, 6 Ounce' clust_tuple=(3, 254, 243, 5, 74)\n", - "item='John Frieda Radiant Red Colour Protecting Conditioner, 8.45 Ounces (Pack of 2)' clust_tuple=(3, 254, 243, 5, 68)\n", - "item='Almay Wake-up Hydrating Makeup, Ivory, 0.35-Ounce' clust_tuple=(3, 254, 243, 5, 59)\n", + "item='HDE® Facial Pore Cleanser Cleaner Blackhead Acne Remover' clust_tuple=(3, 106, 111, 172, 0)\n", + "item=\"Best Anti Aging Cream Reduces Wrinkels in Women and Men - Clinical Strength Bio-Peptide Wrinkle Cream Reduces Deep Wrinkles, Smooths Fine Lines and "Crow's Feet" - Tighten, Rejuvinate, and Rebuild Youthful, Healthy Skin - Boost Collagen and Ultra-Moisturize with Peptides Made For Your Skin - Great For Face, Under Eyes and Decolletage. You Love It Or We Buy It Back No Hassle Money Back Guarantee. [Reduced Price For Summer! Take 65% Off Automatically at Checkout!]★ 2oz Jar (60ml)\" clust_tuple=(3, 90, 239, 106, 0)\n", + "item='Raw African Black soap Imported From Ghana 4oz' clust_tuple=(3, 145, 185, 168, 0)\n", + "item='Skin Obsession 20% TCA Home Chemical Peel for face and body removes lines, sun damage and signs of aging' clust_tuple=(3, 207, 151, 96, 0)\n", + "item='Skin Obsession 25% TCA Chemical Peel for Home Use 1 fl oz (30 ml)' clust_tuple=(3, 207, 47, 44, 0)\n", "4\n", - "item='Cucumber Infused Facial Cleansing Wipes, 33 Count' clust_tuple=(4, 254, 243, 5, 8)\n", - "item='Touch Back by Colormark Temporary Hair Color Marker Rich Black' clust_tuple=(4, 254, 243, 5, 4)\n", - "item='Got2b Fat-tastic Thickening Plumping Mousse, 8.5-Ounce' clust_tuple=(4, 254, 243, 6, 3)\n", - "item='ECOCO Eco Style Gel, Blue, 32 Ounce' clust_tuple=(4, 254, 243, 5, 3)\n", - "item='Andis Tangerine Twist Nano Ceramic Flat Iron,1-Inch' clust_tuple=(4, 254, 243, 5, 7)\n", - "5\n", - "item='Essie Nail Polish Go Ginza #825' clust_tuple=(5, 254, 243, 5, 25)\n", - "item='O.P.I Gelcolor Collection Nail Gel Lacquer, Alpine Snow, 0.5 Fluid Ounce' clust_tuple=(5, 254, 243, 5, 18)\n", - "item=\"It's A 10 Miracle Moisture Shampoo, 10-Ounce Bottle\" clust_tuple=(5, 254, 243, 5, 5)\n", - "item='China Glaze Nail Polish, Urban-Night, 0.5 Ounce' clust_tuple=(5, 254, 243, 5, 15)\n", - "item='OPI: Lacquer M44 Anti-Bleak, 0.5 oz' clust_tuple=(5, 254, 243, 5, 27)\n", - "6\n", - "item='The Body Shop Vitamin E Face Mist, 3.3-Fluid Ounce' clust_tuple=(6, 254, 84, 6, 0)\n", - "item='Blinc Black Mascara - Two Full-Size Tubes' clust_tuple=(6, 254, 84, 6, 1)\n", - "item='Duo Lash Adhesive - Clear, 0.25-Ounce (Pack of 2)' clust_tuple=(6, 254, 84, 6, 3)\n", - "item='THERA PEARL Eye-ssential Mask' clust_tuple=(6, 254, 84, 6, 2)\n", - "item='Duo Lash Adhesive, Clear, 0.25 Ounce' clust_tuple=(6, 254, 84, 199, 0)\n", - "7\n", - "item='Suave Professionals Shampoo, Rosemary Mint for All Hair Types, 12.6 Ounce Bottles (Pack of 6)' clust_tuple=(7, 254, 12, 5, 17)\n", - "item='Pantene Pro-V Smooth Shampoo 12.6 Fl Oz (Pack of 6)' clust_tuple=(7, 254, 12, 5, 22)\n", - "item='Dove Damage Therapy Intensive Repair Daily Super Conditioner, 8 Ounce (Pack of 3)' clust_tuple=(7, 254, 12, 5, 18)\n", - "item='Suave Professionals Conditioner, Humectant - 12.6 Ounce' clust_tuple=(7, 254, 12, 5, 1)\n", - "item='Motions At Home Lavish Conditioning Shampoo, 13 Ounce Bottles (Pack of 6)' clust_tuple=(7, 254, 12, 5, 7)\n", - "8\n", - "item='Snooki Instant Sunless Self Tanning Body Bronzing Spray 7.5z' clust_tuple=(8, 254, 243, 6, 16)\n", - "item='Wet N Wild Lipstick Bare It All #902C' clust_tuple=(8, 254, 243, 6, 11)\n", - "item='KoKo du lait Daily Leave In Moisturizing Detangler For Wavy, Curly, Kinky, Relaxed & Chemically Treated Hair' clust_tuple=(8, 254, 243, 6, 15)\n", - "item='Solia 1875W Thermal Ionic Hair Dryer' clust_tuple=(8, 254, 243, 6, 1)\n", - "item=\"L'Oreal EverPure UV Protect Spray 8.5 fl oz (250 ml)\" clust_tuple=(8, 254, 243, 6, 7)\n", - "9\n", - "item='Peter Thomas Roth Anti-Aging Cellular Eye Repair Gel .76 oz' clust_tuple=(9, 254, 243, 6, 2)\n", - "item='WELLA Brilliance Shampoo for Fine to Normal Colored Hair 10.1oz' clust_tuple=(9, 254, 243, 6, 11)\n", - "item='Watts Beauty Moisturizing Hyaluronic Acid Advanced Skin Gel, 2.0 Ounce' clust_tuple=(9, 254, 243, 6, 15)\n", - "item='WEN® Fig Cleansing Conditioner 32oz' clust_tuple=(9, 254, 243, 6, 4)\n", - "item='Skinceuticals Blemish plus Age Defense Acne Treatment, 1 Fluid Ounce' clust_tuple=(9, 254, 243, 6, 13)\n" + "item='Philosophy When Hope is Not Enough Firming and Lifting Serum for Unisex, 1 Ounce' clust_tuple=(4, 247, 239, 194, 0)\n", + "item='DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ' clust_tuple=(4, 182, 111, 5, 0)\n", + "item='Victorinox By Swiss Army For Men 125 Years Eau-de-toilette Spray, 3.4-Ounce' clust_tuple=(4, 128, 239, 5, 0)\n", + "item='Givenchy Play for Men by Givenchy 3.3 oz 100 ml EDT Spray' clust_tuple=(4, 50, 19, 168, 0)\n", + "item='Jilbere Hot Air Brush' clust_tuple=(4, 15, 47, 194, 0)\n" ] } ], @@ -1158,24 +108,24 @@ "from rqvae.rqvae_data import search_similar_items\n", "\n", "\n", - "for i in range(0, 10):\n", + "for i in range(5):\n", " sim = search_similar_items(items_with_tuples, (i,), 5)\n", " if len(sim) == 0:\n", " continue\n", " print(i)\n", " for asin, item, clust_tuple in sim:\n", - " # if 'nail' in item.lower():\n", + " # if 'shampoo' in item.lower():\n", " print(f\"{item=} {clust_tuple=}\")" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAGgCAYAAACjXc14AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAALGFJREFUeJzt3X9wVfWd//FXzC9CJjkSILncNWJ0shEalrXBDcEf0AIBS0gd3YINe8WWAi4CjcDyY11XdKYJoIJTsyq6VKyiOF2NawuNxBWjFAIYSCsIaNcIQRKC9nITfpjE8Pn+4XK+vSQEgonJ/fh8zJwZ7jnv87mfTz6cOS8+3HMTZowxAgAAsNBl3d0BAACArkLQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADW6nDQeeeddzRx4kR5vV6FhYXptddec481Nzdr0aJFGjJkiGJjY+X1enXnnXfqyJEjQW00NjZqzpw56tevn2JjY5Wbm6vDhw8H1fj9fvl8PjmOI8dx5PP5dPz48aCaQ4cOaeLEiYqNjVW/fv00d+5cNTU1dXRIAADAUhEdPeHkyZMaOnSofvKTn+j2228POnbq1Cnt2rVL999/v4YOHSq/36/8/Hzl5ubqvffec+vy8/P129/+VuvXr1ffvn01f/585eTkqKKiQuHh4ZKkvLw8HT58WCUlJZKkGTNmyOfz6be//a0kqaWlRRMmTFD//v21ZcsWff7555o6daqMMXr88ccvaixnzpzRkSNHFBcXp7CwsI7+KAAAQDcwxqihoUFer1eXXXaBNRvzNUgyxcXF7dbs2LHDSDIHDx40xhhz/PhxExkZadavX+/WfPrpp+ayyy4zJSUlxhhjPvjgAyPJlJeXuzXbtm0zksz+/fuNMcZs3LjRXHbZZebTTz91a1566SUTHR1tAoHARfW/urraSGJjY2NjY2MLwa26uvqC9/oOr+h0VCAQUFhYmC6//HJJUkVFhZqbm5Wdne3WeL1epaena+vWrRo3bpy2bdsmx3GUmZnp1gwfPlyO42jr1q1KS0vTtm3blJ6eLq/X69aMGzdOjY2Nqqio0Pe+971WfWlsbFRjY6P72vzfL26vrq5WfHx8Zw8dAAB0gfr6eiUnJysuLu6CtV0adL744gstXrxYeXl5bpCora1VVFSU+vTpE1SblJSk2tpatyYxMbFVe4mJiUE1SUlJQcf79OmjqKgot+ZchYWFevDBB1vtj4+PJ+gAABBiLuZjJ1321FVzc7PuuOMOnTlzRk888cQF640xQR1uq/OXUvPXlixZokAg4G7V1dUXMxQAABCiuiToNDc3a9KkSaqqqlJpaWnQaonH41FTU5P8fn/QOXV1de4Kjcfj0dGjR1u1e+zYsaCac1du/H6/mpubW630nBUdHe2u3rCKAwCA/To96JwNOR999JHefPNN9e3bN+h4RkaGIiMjVVpa6u6rqanRnj17NGLECElSVlaWAoGAduzY4dZs375dgUAgqGbPnj2qqalxazZt2qTo6GhlZGR09rAAAEAI6vBndE6cOKE///nP7uuqqipVVlYqISFBXq9X//iP/6hdu3bpd7/7nVpaWtxVl4SEBEVFRclxHE2bNk3z589X3759lZCQoAULFmjIkCEaM2aMJGnQoEEaP368pk+frtWrV0v66vHynJwcpaWlSZKys7M1ePBg+Xw+Pfzww/rLX/6iBQsWaPr06azUAACAr1zUc9h/ZfPmzW0+4jV16lRTVVV13kfANm/e7LZx+vRpM3v2bJOQkGBiYmJMTk6OOXToUND7fP7552bKlCkmLi7OxMXFmSlTphi/3x9Uc/DgQTNhwgQTExNjEhISzOzZs80XX3xx0WMJBAJG0kU/jg4AALpfR+7fYcb83zPW30L19fVyHEeBQIBVIAAAQkRH7t/8risAAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFod/hUQuHhXLd7Q3V3osE+WTejuLgAA0GlY0QEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADW6nDQeeeddzRx4kR5vV6FhYXptddeCzpujNHSpUvl9XoVExOjUaNGae/evUE1jY2NmjNnjvr166fY2Fjl5ubq8OHDQTV+v18+n0+O48hxHPl8Ph0/fjyo5tChQ5o4caJiY2PVr18/zZ07V01NTR0dEgAAsFSHg87Jkyc1dOhQFRUVtXl8xYoVWrlypYqKirRz5055PB6NHTtWDQ0Nbk1+fr6Ki4u1fv16bdmyRSdOnFBOTo5aWlrcmry8PFVWVqqkpEQlJSWqrKyUz+dzj7e0tGjChAk6efKktmzZovXr1+uVV17R/PnzOzokAABgqTBjjLnkk8PCVFxcrFtvvVXSV6s5Xq9X+fn5WrRokaSvVm+SkpK0fPlyzZw5U4FAQP3799fzzz+vyZMnS5KOHDmi5ORkbdy4UePGjdO+ffs0ePBglZeXKzMzU5JUXl6urKws7d+/X2lpafr973+vnJwcVVdXy+v1SpLWr1+vu+66S3V1dYqPj79g/+vr6+U4jgKBwEXVd9RVizd0eptd7ZNlE7q7CwAAtKsj9+9O/YxOVVWVamtrlZ2d7e6Ljo7WyJEjtXXrVklSRUWFmpubg2q8Xq/S09Pdmm3btslxHDfkSNLw4cPlOE5QTXp6uhtyJGncuHFqbGxURUVFm/1rbGxUfX190AYAAOzVqUGntrZWkpSUlBS0PykpyT1WW1urqKgo9enTp92axMTEVu0nJiYG1Zz7Pn369FFUVJRbc67CwkL3Mz+O4yg5OfkSRgkAAEJFlzx1FRYWFvTaGNNq37nOrWmr/lJq/tqSJUsUCATcrbq6ut0+AQCA0NapQcfj8UhSqxWVuro6d/XF4/GoqalJfr+/3ZqjR4+2av/YsWNBNee+j9/vV3Nzc6uVnrOio6MVHx8ftAEAAHt1atBJSUmRx+NRaWmpu6+pqUllZWUaMWKEJCkjI0ORkZFBNTU1NdqzZ49bk5WVpUAgoB07drg127dvVyAQCKrZs2ePampq3JpNmzYpOjpaGRkZnTksAAAQoiI6esKJEyf05z//2X1dVVWlyspKJSQk6Morr1R+fr4KCgqUmpqq1NRUFRQUqHfv3srLy5MkOY6jadOmaf78+erbt68SEhK0YMECDRkyRGPGjJEkDRo0SOPHj9f06dO1evVqSdKMGTOUk5OjtLQ0SVJ2drYGDx4sn8+nhx9+WH/5y1+0YMECTZ8+nZUaAAAg6RKCznvvvafvfe977ut58+ZJkqZOnaq1a9dq4cKFOn36tGbNmiW/36/MzExt2rRJcXFx7jmrVq1SRESEJk2apNOnT2v06NFau3atwsPD3Zp169Zp7ty57tNZubm5Qd/dEx4erg0bNmjWrFm64YYbFBMTo7y8PD3yyCMd/ykAAAArfa3v0Ql1fI9Oa3yPDgCgp+u279EBAADoSQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWp0edL788kv927/9m1JSUhQTE6Orr75aDz30kM6cOePWGGO0dOlSeb1excTEaNSoUdq7d29QO42NjZozZ4769eun2NhY5ebm6vDhw0E1fr9fPp9PjuPIcRz5fD4dP368s4cEAABCVKcHneXLl+upp55SUVGR9u3bpxUrVujhhx/W448/7tasWLFCK1euVFFRkXbu3CmPx6OxY8eqoaHBrcnPz1dxcbHWr1+vLVu26MSJE8rJyVFLS4tbk5eXp8rKSpWUlKikpESVlZXy+XydPSQAABCiwowxpjMbzMnJUVJSktasWePuu/3229W7d289//zzMsbI6/UqPz9fixYtkvTV6k1SUpKWL1+umTNnKhAIqH///nr++ec1efJkSdKRI0eUnJysjRs3aty4cdq3b58GDx6s8vJyZWZmSpLKy8uVlZWl/fv3Ky0t7YJ9ra+vl+M4CgQCio+P78wfgyTpqsUbOr3NrvbJsgnd3QUAANrVkft3p6/o3Hjjjfqf//kfffjhh5KkP/7xj9qyZYt+8IMfSJKqqqpUW1ur7Oxs95zo6GiNHDlSW7dulSRVVFSoubk5qMbr9So9Pd2t2bZtmxzHcUOOJA0fPlyO47g1AADg2y2isxtctGiRAoGArr32WoWHh6ulpUW/+MUv9OMf/1iSVFtbK0lKSkoKOi8pKUkHDx50a6KiotSnT59WNWfPr62tVWJiYqv3T0xMdGvO1djYqMbGRvd1fX39JY4SAACEgk5f0Xn55Zf1wgsv6MUXX9SuXbv03HPP6ZFHHtFzzz0XVBcWFhb02hjTat+5zq1pq769dgoLC90PLjuOo+Tk5IsdFgAACEGdHnT+5V/+RYsXL9Ydd9yhIUOGyOfz6d5771VhYaEkyePxSFKrVZe6ujp3lcfj8aipqUl+v7/dmqNHj7Z6/2PHjrVaLTpryZIlCgQC7lZdXf31BgsAAHq0Tg86p06d0mWXBTcbHh7uPl6ekpIij8ej0tJS93hTU5PKyso0YsQISVJGRoYiIyODampqarRnzx63JisrS4FAQDt27HBrtm/frkAg4NacKzo6WvHx8UEbAACwV6d/RmfixIn6xS9+oSuvvFLf+c53tHv3bq1cuVI//elPJX313035+fkqKChQamqqUlNTVVBQoN69eysvL0+S5DiOpk2bpvnz56tv375KSEjQggULNGTIEI0ZM0aSNGjQII0fP17Tp0/X6tWrJUkzZsxQTk7ORT1xBQAA7NfpQefxxx/X/fffr1mzZqmurk5er1czZ87Uv//7v7s1Cxcu1OnTpzVr1iz5/X5lZmZq06ZNiouLc2tWrVqliIgITZo0SadPn9bo0aO1du1ahYeHuzXr1q3T3Llz3aezcnNzVVRU1NlDAgAAIarTv0cnlPA9Oq3xPToAgJ6uW79HBwAAoKcg6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGt1SdD59NNP9U//9E/q27evevfurb//+79XRUWFe9wYo6VLl8rr9SomJkajRo3S3r17g9pobGzUnDlz1K9fP8XGxio3N1eHDx8OqvH7/fL5fHIcR47jyOfz6fjx410xJAAAEII6Pej4/X7dcMMNioyM1O9//3t98MEHevTRR3X55Ze7NStWrNDKlStVVFSknTt3yuPxaOzYsWpoaHBr8vPzVVxcrPXr12vLli06ceKEcnJy1NLS4tbk5eWpsrJSJSUlKikpUWVlpXw+X2cPCQAAhKgwY4zpzAYXL16sP/zhD3r33XfbPG6MkdfrVX5+vhYtWiTpq9WbpKQkLV++XDNnzlQgEFD//v31/PPPa/LkyZKkI0eOKDk5WRs3btS4ceO0b98+DR48WOXl5crMzJQklZeXKysrS/v371daWtoF+1pfXy/HcRQIBBQfH99JP4H/76rFGzq9za72ybIJ3d0FAADa1ZH7d6ev6Lz++usaNmyYfvSjHykxMVHXXXednnnmGfd4VVWVamtrlZ2d7e6Ljo7WyJEjtXXrVklSRUWFmpubg2q8Xq/S09Pdmm3btslxHDfkSNLw4cPlOI5bAwAAvt06Peh8/PHHevLJJ5Wamqo33nhDd999t+bOnatf//rXkqTa2lpJUlJSUtB5SUlJ7rHa2lpFRUWpT58+7dYkJia2ev/ExES35lyNjY2qr68P2gAAgL0iOrvBM2fOaNiwYSooKJAkXXfdddq7d6+efPJJ3XnnnW5dWFhY0HnGmFb7znVuTVv17bVTWFioBx988KLHAgAAQlunr+gMGDBAgwcPDto3aNAgHTp0SJLk8XgkqdWqS11dnbvK4/F41NTUJL/f327N0aNHW73/sWPHWq0WnbVkyRIFAgF3q66uvoQRAgCAUNHpQeeGG27QgQMHgvZ9+OGHGjhwoCQpJSVFHo9HpaWl7vGmpiaVlZVpxIgRkqSMjAxFRkYG1dTU1GjPnj1uTVZWlgKBgHbs2OHWbN++XYFAwK05V3R0tOLj44M2AABgr07/r6t7771XI0aMUEFBgSZNmqQdO3bo6aef1tNPPy3pq/9uys/PV0FBgVJTU5WamqqCggL17t1beXl5kiTHcTRt2jTNnz9fffv2VUJCghYsWKAhQ4ZozJgxkr5aJRo/frymT5+u1atXS5JmzJihnJyci3riCgAA2K/Tg87111+v4uJiLVmyRA899JBSUlL02GOPacqUKW7NwoULdfr0ac2aNUt+v1+ZmZnatGmT4uLi3JpVq1YpIiJCkyZN0unTpzV69GitXbtW4eHhbs26des0d+5c9+ms3NxcFRUVdfaQAABAiOr079EJJXyPTmt8jw4AoKfr1u/RAQAA6CkIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYK0uDzqFhYUKCwtTfn6+u88Yo6VLl8rr9SomJkajRo3S3r17g85rbGzUnDlz1K9fP8XGxio3N1eHDx8OqvH7/fL5fHIcR47jyOfz6fjx4109JAAAECK6NOjs3LlTTz/9tP7u7/4uaP+KFSu0cuVKFRUVaefOnfJ4PBo7dqwaGhrcmvz8fBUXF2v9+vXasmWLTpw4oZycHLW0tLg1eXl5qqysVElJiUpKSlRZWSmfz9eVQwIAACGky4LOiRMnNGXKFD3zzDPq06ePu98Yo8cee0z33XefbrvtNqWnp+u5557TqVOn9OKLL0qSAoGA1qxZo0cffVRjxozRddddpxdeeEHvv/++3nzzTUnSvn37VFJSov/8z/9UVlaWsrKy9Mwzz+h3v/udDhw40FXDAgAAIaTLgs4999yjCRMmaMyYMUH7q6qqVFtbq+zsbHdfdHS0Ro4cqa1bt0qSKioq1NzcHFTj9XqVnp7u1mzbtk2O4ygzM9OtGT58uBzHcWvO1djYqPr6+qANAADYK6IrGl2/fr127dqlnTt3tjpWW1srSUpKSgran5SUpIMHD7o1UVFRQStBZ2vOnl9bW6vExMRW7ScmJro15yosLNSDDz7Y8QEBAICQ1OkrOtXV1fr5z3+uF154Qb169TpvXVhYWNBrY0yrfec6t6at+vbaWbJkiQKBgLtVV1e3+34AACC0dXrQqaioUF1dnTIyMhQREaGIiAiVlZXpl7/8pSIiItyVnHNXXerq6txjHo9HTU1N8vv97dYcPXq01fsfO3as1WrRWdHR0YqPjw/aAACAvTo96IwePVrvv/++Kisr3W3YsGGaMmWKKisrdfXVV8vj8ai0tNQ9p6mpSWVlZRoxYoQkKSMjQ5GRkUE1NTU12rNnj1uTlZWlQCCgHTt2uDXbt29XIBBwawAAwLdbp39GJy4uTunp6UH7YmNj1bdvX3d/fn6+CgoKlJqaqtTUVBUUFKh3797Ky8uTJDmOo2nTpmn+/Pnq27evEhIStGDBAg0ZMsT9cPOgQYM0fvx4TZ8+XatXr5YkzZgxQzk5OUpLS+vsYQEAgBDUJR9GvpCFCxfq9OnTmjVrlvx+vzIzM7Vp0ybFxcW5NatWrVJERIQmTZqk06dPa/To0Vq7dq3Cw8PdmnXr1mnu3Lnu01m5ubkqKir6xscDAAB6pjBjjOnuTnSX+vp6OY6jQCDQJZ/XuWrxhk5vs6t9smxCd3cBAIB2deT+ze+6AgAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAa3V60CksLNT111+vuLg4JSYm6tZbb9WBAweCaowxWrp0qbxer2JiYjRq1Cjt3bs3qKaxsVFz5sxRv379FBsbq9zcXB0+fDioxu/3y+fzyXEcOY4jn8+n48ePd/aQAABAiOr0oFNWVqZ77rlH5eXlKi0t1Zdffqns7GydPHnSrVmxYoVWrlypoqIi7dy5Ux6PR2PHjlVDQ4Nbk5+fr+LiYq1fv15btmzRiRMnlJOTo5aWFrcmLy9PlZWVKikpUUlJiSorK+Xz+Tp7SAAAIESFGWNMV77BsWPHlJiYqLKyMt18880yxsjr9So/P1+LFi2S9NXqTVJSkpYvX66ZM2cqEAiof//+ev755zV58mRJ0pEjR5ScnKyNGzdq3Lhx2rdvnwYPHqzy8nJlZmZKksrLy5WVlaX9+/crLS3tgn2rr6+X4zgKBAKKj4/v9LFftXhDp7fZ1T5ZNqG7uwAAQLs6cv/u8s/oBAIBSVJCQoIkqaqqSrW1tcrOznZroqOjNXLkSG3dulWSVFFRoebm5qAar9er9PR0t2bbtm1yHMcNOZI0fPhwOY7j1pyrsbFR9fX1QRsAALBXlwYdY4zmzZunG2+8Uenp6ZKk2tpaSVJSUlJQbVJSknustrZWUVFR6tOnT7s1iYmJrd4zMTHRrTlXYWGh+3kex3GUnJz89QYIAAB6tC4NOrNnz9af/vQnvfTSS62OhYWFBb02xrTad65za9qqb6+dJUuWKBAIuFt1dfXFDAMAAISoLgs6c+bM0euvv67NmzfriiuucPd7PB5JarXqUldX567yeDweNTU1ye/3t1tz9OjRVu977NixVqtFZ0VHRys+Pj5oAwAA9ur0oGOM0ezZs/Xqq6/qrbfeUkpKStDxlJQUeTwelZaWuvuamppUVlamESNGSJIyMjIUGRkZVFNTU6M9e/a4NVlZWQoEAtqxY4dbs337dgUCAbcGAAB8u0V0doP33HOPXnzxRf33f/+34uLi3JUbx3EUExOjsLAw5efnq6CgQKmpqUpNTVVBQYF69+6tvLw8t3batGmaP3+++vbtq4SEBC1YsEBDhgzRmDFjJEmDBg3S+PHjNX36dK1evVqSNGPGDOXk5FzUE1cAAMB+nR50nnzySUnSqFGjgvY/++yzuuuuuyRJCxcu1OnTpzVr1iz5/X5lZmZq06ZNiouLc+tXrVqliIgITZo0SadPn9bo0aO1du1ahYeHuzXr1q3T3Llz3aezcnNzVVRU1NlDAgAAIarLv0enJ+N7dFrje3QAAD1dj/oeHQAAgO5C0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYi6AAAAGsRdAAAgLUIOgAAwFoEHQAAYC2CDgAAsBZBBwAAWIugAwAArEXQAQAA1iLoAAAAaxF0AACAtQg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALAWQQcAAFiLoAMAAKxF0AEAANYK+aDzxBNPKCUlRb169VJGRobefffd7u4SAADoIUI66Lz88svKz8/Xfffdp927d+umm27SLbfcokOHDnV31wAAQA8Q0kFn5cqVmjZtmn72s59p0KBBeuyxx5ScnKwnn3yyu7sGAAB6gIju7sClampqUkVFhRYvXhy0Pzs7W1u3bm3znMbGRjU2NrqvA4GAJKm+vr5L+nim8VSXtNuVrrz3N93dhQ7b8+C47u4CAOAbdPa+bYy5YG3IBp3PPvtMLS0tSkpKCtqflJSk2traNs8pLCzUgw8+2Gp/cnJyl/QR3wznse7uAQCgOzQ0NMhxnHZrQjbonBUWFhb02hjTat9ZS5Ys0bx589zXx48f18CBA3Xo0KEL/qBCUX19vZKTk1VdXa34+Pju7k6XsH2Mto9Psn+MjC/02T7GUByfMUYNDQ3yer0XrA3ZoNOvXz+Fh4e3Wr2pq6trtcpzVnR0tKKjo1vtdxwnZCb3UsTHx1s9Psn+Mdo+Psn+MTK+0Gf7GENtfBe7QBGyH0aOiopSRkaGSktLg/aXlpZqxIgR3dQrAADQk4Tsio4kzZs3Tz6fT8OGDVNWVpaefvppHTp0SHfffXd3dw0AAPQAIR10Jk+erM8//1wPPfSQampqlJ6ero0bN2rgwIEXdX50dLQeeOCBNv87ywa2j0+yf4y2j0+yf4yML/TZPkbbxxdmLubZLAAAgBAUsp/RAQAAuBCCDgAAsBZBBwAAWIugAwAArGV90HniiSeUkpKiXr16KSMjQ++++2679WVlZcrIyFCvXr109dVX66mnnvqGetoxhYWFuv766xUXF6fExETdeuutOnDgQLvnvP322woLC2u17d+//xvqdccsXbq0VV89Hk+754TK/EnSVVdd1eZ83HPPPW3Wh8L8vfPOO5o4caK8Xq/CwsL02muvBR03xmjp0qXyer2KiYnRqFGjtHfv3gu2+8orr2jw4MGKjo7W4MGDVVxc3EUjaF9742tubtaiRYs0ZMgQxcbGyuv16s4779SRI0fabXPt2rVtzusXX3zRxaNp7ULzd9ddd7Xq5/Dhwy/Ybk+ZP+nCY2xrLsLCwvTwww+ft82eNIcXc28I9euwo6wOOi+//LLy8/N13333affu3brpppt0yy236NChQ23WV1VV6Qc/+IFuuukm7d69W//6r/+quXPn6pVXXvmGe35hZWVluueee1ReXq7S0lJ9+eWXys7O1smTJy947oEDB1RTU+Nuqamp30CPL813vvOdoL6+//77560NpfmTpJ07dwaN7eyXX/7oRz9q97yePH8nT57U0KFDVVRU1ObxFStWaOXKlSoqKtLOnTvl8Xg0duxYNTQ0nLfNbdu2afLkyfL5fPrjH/8on8+nSZMmafv27V01jPNqb3ynTp3Srl27dP/992vXrl169dVX9eGHHyo3N/eC7cbHxwfNaU1NjXr16tUVQ2jXheZPksaPHx/Uz40bN7bbZk+aP+nCYzx3Hn71q18pLCxMt99+e7vt9pQ5vJh7Q6hfhx1mLPYP//AP5u677w7ad+2115rFixe3Wb9w4UJz7bXXBu2bOXOmGT58eJf1sbPU1dUZSaasrOy8NZs3bzaSjN/v/+Y69jU88MADZujQoRddH8rzZ4wxP//5z80111xjzpw50+bxUJs/Saa4uNh9febMGePxeMyyZcvcfV988YVxHMc89dRT521n0qRJZvz48UH7xo0bZ+64445O73NHnDu+tuzYscNIMgcPHjxvzbPPPmscx+ncznWCtsY3depU88Mf/rBD7fTU+TPm4ubwhz/8ofn+97/fbk1PnUNjWt8bbLsOL4a1KzpNTU2qqKhQdnZ20P7s7Gxt3bq1zXO2bdvWqn7cuHF677331Nzc3GV97QyBQECSlJCQcMHa6667TgMGDNDo0aO1efPmru7a1/LRRx/J6/UqJSVFd9xxhz7++OPz1oby/DU1NemFF17QT3/60/P+UtqzQmn+/lpVVZVqa2uD5ig6OlojR4487zUpnX9e2zunpwgEAgoLC9Pll1/ebt2JEyc0cOBAXXHFFcrJydHu3bu/mQ5egrfffluJiYn627/9W02fPl11dXXt1ofy/B09elQbNmzQtGnTLljbU+fw3HvDt/E6tDbofPbZZ2ppaWn1Cz6TkpJa/SLQs2pra9us//LLL/XZZ591WV+/LmOM5s2bpxtvvFHp6ennrRswYICefvppvfLKK3r11VeVlpam0aNH65133vkGe3vxMjMz9etf/1pvvPGGnnnmGdXW1mrEiBH6/PPP26wP1fmTpNdee03Hjx/XXXfddd6aUJu/c5297jpyTZ49r6Pn9ARffPGFFi9erLy8vHZ/UeK1116rtWvX6vXXX9dLL72kXr166YYbbtBHH330Dfb24txyyy1at26d3nrrLT366KPauXOnvv/976uxsfG854Tq/EnSc889p7i4ON12223t1vXUOWzr3vBtuw6lEP8VEBfj3H8dG2Pa/RdzW/Vt7e9JZs+erT/96U/asmVLu3VpaWlKS0tzX2dlZam6ulqPPPKIbr755q7uZofdcsst7p+HDBmirKwsXXPNNXruuec0b968Ns8JxfmTpDVr1uiWW26R1+s9b02ozd/5dPSavNRzulNzc7PuuOMOnTlzRk888US7tcOHDw/6QO8NN9yg7373u3r88cf1y1/+squ72iGTJ092/5yenq5hw4Zp4MCB2rBhQ7thINTm76xf/epXmjJlygU/a9NT57C9e8O34To8y9oVnX79+ik8PLxV2qyrq2uVSs/yeDxt1kdERKhv375d1tevY86cOXr99de1efNmXXHFFR0+f/jw4d3+r46LFRsbqyFDhpy3v6E4f5J08OBBvfnmm/rZz37W4XNDaf7OPjHXkWvy7HkdPac7NTc3a9KkSaqqqlJpaWm7qzltueyyy3T99deHxLwOGDBAAwcObLevoTZ/Z7377rs6cODAJV2XPWEOz3dv+LZch3/N2qATFRWljIwM90mWs0pLSzVixIg2z8nKympVv2nTJg0bNkyRkZFd1tdLYYzR7Nmz9eqrr+qtt95SSkrKJbWze/duDRgwoJN71zUaGxu1b9++8/Y3lObvrz377LNKTEzUhAkTOnxuKM1fSkqKPB5P0Bw1NTWprKzsvNekdP55be+c7nI25Hz00Ud68803LylgG2NUWVkZEvP6+eefq7q6ut2+htL8/bU1a9YoIyNDQ4cO7fC53TmHF7o3fBuuw1a64xPQ35T169ebyMhIs2bNGvPBBx+Y/Px8Exsbaz755BNjjDGLFy82Pp/Prf/4449N7969zb333ms++OADs2bNGhMZGWn+67/+q7uGcF7//M//bBzHMW+//bapqalxt1OnTrk1545v1apVpri42Hz44Ydmz549ZvHixUaSeeWVV7pjCBc0f/588/bbb5uPP/7YlJeXm5ycHBMXF2fF/J3V0tJirrzySrNo0aJWx0Jx/hoaGszu3bvN7t27jSSzcuVKs3v3bvepo2XLlhnHccyrr75q3n//ffPjH//YDBgwwNTX17tt+Hy+oCcj//CHP5jw8HCzbNkys2/fPrNs2TITERFhysvLe9T4mpubTW5urrniiitMZWVl0HXZ2Nh43vEtXbrUlJSUmP/93/81u3fvNj/5yU9MRESE2b59e48aX0NDg5k/f77ZunWrqaqqMps3bzZZWVnmb/7mb0Jm/oy58N9RY4wJBAKmd+/e5sknn2yzjZ48hxdzbwj167CjrA46xhjzH//xH2bgwIEmKirKfPe73w16/Hrq1Klm5MiRQfVvv/22ue6660xUVJS56qqrzvsXvbtJanN79tln3Zpzx7d8+XJzzTXXmF69epk+ffqYG2+80WzYsOGb7/xFmjx5shkwYICJjIw0Xq/X3HbbbWbv3r3u8VCev7PeeOMNI8kcOHCg1bFQnL+zj8Cfu02dOtUY89WjrQ888IDxeDwmOjra3Hzzzeb9998PamPkyJFu/Vm/+c1vTFpamomMjDTXXnttt4W79sZXVVV13uty8+bNbhvnji8/P99ceeWVJioqyvTv399kZ2ebrVu3fvODM+2P79SpUyY7O9v079/fREZGmiuvvNJMnTrVHDp0KKiNnjx/xlz476gxxqxevdrExMSY48ePt9lGT57Di7k3hPp12FFhxvzfpzUBAAAsY+1ndAAAAAg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALDW/wMhPwLu9rHL3wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1189,40 +139,88 @@ "import matplotlib.pyplot as plt\n", "\n", "\n", - "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values(), bins=100)\n", + "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values())\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# # raw full ids\n", + "# full_duplicates = Counter(item[-1][:-1] for item in items_with_tuples).items()\n", + "# duplicated = [(semantic_id, amount) for (semantic_id, amount) in full_duplicates if amount > 1]\n", + "# duplicated" + ] + }, + { + "cell_type": "code", + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "12101" + "Counter({1: 11195, 2: 316, 3: 44, 4: 12, 5: 3, 6: 3, 9: 2, 7: 2, 8: 1, 21: 1})" ] }, - "execution_count": 13, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "len(set(item[-1] for item in items_with_tuples))" + "# collison counters - (how many item have same full semantic id): amount of such sets\n", + "vals = Counter(item[-1][:-1] for item in items_with_tuples).values()\n", + "Counter(vals)" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 21, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({0: 11579,\n", + " 1: 384,\n", + " 2: 68,\n", + " 3: 24,\n", + " 4: 12,\n", + " 5: 9,\n", + " 6: 6,\n", + " 7: 4,\n", + " 8: 3,\n", + " 10: 1,\n", + " 11: 1,\n", + " 17: 1,\n", + " 12: 1,\n", + " 15: 1,\n", + " 19: 1,\n", + " 13: 1,\n", + " 14: 1,\n", + " 9: 1,\n", + " 18: 1,\n", + " 16: 1,\n", + " 20: 1})" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# dedup idxes\n", + "Counter(item[-1][4] for item in items_with_tuples)" + ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 314df443..de4bbf58 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -141,9 +141,12 @@ def train_pass(self, embeddings): def eval_pass(self, embeddings): ind_lists = [] - for cb in self.codebooks: - dist = torch.cdist(self.encoder(embeddings), cb) - ind_lists.append(dist.argmin(dim=-1).cpu().numpy()) + remainder = self.encoder(embeddings) + for codebook in self.codebooks: + codebook_indices = self.get_codebook_indices(remainder, codebook) + codebook_vectors = codebook[codebook_indices] + ind_lists.append(codebook_indices.cpu().numpy()) + remainder = remainder - codebook_vectors return zip(*ind_lists) def forward(self, inputs): diff --git a/review.md b/review.md index 45523828..5977c185 100644 --- a/review.md +++ b/review.md @@ -2,8 +2,8 @@ ## Todos -- posterior collapse (как будто все сваливается в один индекс в кодбуке) -- обязательно использование reinit unused clusters +- posterior collapse (как будто все сваливается в один индекс в кодбуке) (fixed eval code) +- обязательно использование reinit unused clusters! - в Amazon датасете пофиг на rating? получается учитываются только implicit действия? - TODO какой базовый класс использовать для e2e модели? (LastPred?) - TODO backward on mean loss? in `RqVae` From 2cf409ec108c12cd841588311511c8608464fc27 Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 24 Dec 2024 23:56:19 +0300 Subject: [PATCH 014/175] add tiger draft, todospks, review marks --- configs/train/tiger_train_config.json | 133 ++++++++++++++---- modeling/dataloader/__init__.py | 2 +- modeling/dataloader/batch_processors.py | 59 +++++++- modeling/loss/base.py | 2 +- modeling/main.ipynb | 175 +++++++++++------------- modeling/models/base.py | 4 +- modeling/models/bert4rec.py | 2 +- modeling/models/tiger.py | 32 ++--- review.md | 13 +- 9 files changed, 269 insertions(+), 153 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 23e7ef6b..4ed3bc0e 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,62 +1,77 @@ { - "experiment_name": "tiger_beauty", - "train_steps_num": 5000, + "experiment_name": "tiger", + "best_metric": "eval/ndcg@20", "dataset": { - "type": "rqvae", + "type": "scientific", "path_to_data_dir": "../data", "name": "Beauty", + "max_sequence_length": 50, "samplers": { - "type": "identity" + "num_negatives_val": 100, + "type": "next_item_prediction", + "negative_sampler_type": "random" } }, "dataloader": { "train": { "type": "torch", - "batch_size": 128, + "batch_size": 256, "batch_processor": { - "type": "embed" + "type": "rqvae", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "embs_extractor_path": "../data/Beauty/embs_extractor.pt" }, - "drop_last": false, + "drop_last": true, "shuffle": true }, "validation": { "type": "torch", "batch_size": 256, "batch_processor": { - "type": "embed" + "type": "rqvae", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "embs_extractor_path": "../data/Beauty/embs_extractor.pt" }, "drop_last": false, "shuffle": false } }, "model": { - "emb_dim": 512, - "n_tokens": 256, - "n_codebooks": 4, - "nhead": 8, - "num_encoder_layers": 6, - "num_decoder_layers": 6, - "dim_feedforward": 2048, - "dropout": 0.1 + "type": "sasrec", + "sequence_prefix": "item", + "positive_prefix": "positive", + "negative_prefix": "negative", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "use_ce": true, + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 }, - "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "optimizer": { "type": "basic", "optimizer": { "type": "adam", - "lr": 1e-4 + "lr": 0.001 }, - "clip_grad_threshold": 5.0, - "scheduler": { - "type": "step", - "step_size": 100, - "gamma": 0.98 - } + "clip_grad_threshold": 5.0 }, "loss": { - "type": "rqvae_loss", - "beta": 0.25, + "type": "composite", + "losses": [ + { + "type": "bpr", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", + "output_prefix": "downstream_loss" + } + ], "output_prefix": "loss" }, "callback": { @@ -66,6 +81,70 @@ "type": "metric", "on_step": 1, "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 64, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + } + } } ] } diff --git a/modeling/dataloader/__init__.py b/modeling/dataloader/__init__.py index 63583bd1..1036b559 100644 --- a/modeling/dataloader/__init__.py +++ b/modeling/dataloader/__init__.py @@ -1,2 +1,2 @@ from .base import BaseDataloader, SplitDataloader -from .batch_processors import BaseBatchProcessor, IdentityBatchProcessor +from .batch_processors import BaseBatchProcessor, IdentityBatchProcessor, RqVaeProcessor diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 9991a073..8429ec7a 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,5 +1,8 @@ +import json import torch -from utils import MetaParent +from models.base import BaseModel +from utils import DEVICE, MetaParent +import itertools class BaseBatchProcessor(metaclass=MetaParent): @@ -20,6 +23,60 @@ def __call__(self, batch): embeds = torch.stack([entry['item.embed'] for entry in batch]) return {'ids': ids, 'embeddings': embeds} + +class RqVaeProcessor(BaseBatchProcessor, config_name='rqvae'): + def __init__(self, rqvae, embs_extractor): + self._rqvae = rqvae + self._embs_extractor = embs_extractor + + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_train_config = json.load(open(config['rqvae_train_config_path'])) + rqvae_train_config['model']['should_init_codebooks'] = False + + rqvae_model = BaseModel.create_from_config(rqvae_train_config['model']).to(DEVICE) + rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) + rqvae_model.eval() + + embs_extractor = torch.load(config['embs_extractor_path'], weights_only=True) + + return cls(rqvae_model, embs_extractor) + + def get_semantic_ids(self, item_ids): + embs = torch.stack([self._embs_extractor.get(item_id, torch.ones((512,))) for item_id in item_ids]) # TODOPK fix + semantic_ids = self._rqvae({"embeddings": embs}) + return list(semantic_ids) + + def __call__(self, batch): + processed_batch = {} + + for key in batch[0].keys(): + if key.endswith('.ids'): + prefix = key.split('.')[0] + assert '{}.length'.format(prefix) in batch[0] + + processed_batch[f'{prefix}.ids'] = [] + processed_batch[f'{prefix}.length'] = [] + + # item_ids = list(itertools.chain(*semantic_ids)) + # length = len(item_ids) # sample[f'{prefix}.length'] + + for sample in batch: + item_ids = sample[f'{prefix}.ids'] + length = sample[f'{prefix}.length'] + + if prefix != 'user': + semantic_ids = self.get_semantic_ids(item_ids) + item_ids = list(itertools.chain(*semantic_ids)) + length = len(semantic_ids) + + processed_batch[f'{prefix}.ids'].extend(item_ids) + processed_batch[f'{prefix}.length'].append(length) + + for part, values in processed_batch.items(): + processed_batch[part] = torch.tensor(values, dtype=torch.long) + + return processed_batch class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): diff --git a/modeling/loss/base.py b/modeling/loss/base.py index ee7c1879..65a145ea 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -137,7 +137,7 @@ def forward(self, inputs): rqvae_loss += self._loss(codebook_vectors, remainder.detach()) recon_loss = self._loss(embeddings_restored, embeddings) - loss = (recon_loss + rqvae_loss).mean() # TODO mean? + loss = (recon_loss + rqvae_loss).mean() # TODOPK mean? if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() diff --git a/modeling/main.ipynb b/modeling/main.ipynb index 7f6194b7..8fddbbd4 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -66,44 +66,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n", - "item='Revlon Beyond Natural Smoothing Primer, Clear, 0.85 Ounce' clust_tuple=(0, 33, 46, 141, 0)\n", - "item='Color Club Magic Attraction 843 Nail Polish' clust_tuple=(0, 228, 117, 102, 0)\n", - "item='Color Club Wild at Heart 871 Nail Polish' clust_tuple=(0, 228, 83, 106, 0)\n", - "1\n", - "item='Natural Beauty White / Brightening Essence Full Face Mask 10 Pcs' clust_tuple=(1, 210, 157, 13, 0)\n", - "item='OGX Conditioner, Nourishing Coconut Milk, 13oz' clust_tuple=(1, 50, 213, 95, 0)\n", - "item='BurnOut Eco-sensitive Zinc Oxide Sunscreen SPF 35 (3 oz)' clust_tuple=(1, 119, 46, 204, 0)\n", - "item='Kerastase Reflection Chroma Riche Luminous Softening Essence, 4.2 Ounce' clust_tuple=(1, 119, 3, 229, 0)\n", - "item='KINeSYS Performance Sunscreen, SPF 30, Spray, Mango Scent, 4-Ounce Bottles' clust_tuple=(1, 242, 54, 95, 0)\n", - "2\n", - "item='Pink Sugar by Aquolina for Women - 3.4 Ounce EDT Spray' clust_tuple=(2, 173, 246, 41, 0)\n", - "item='Guess By Parlux Fragrances For Men. Eau De Toilette Spray 2.5 Oz.' clust_tuple=(2, 104, 233, 139, 0)\n", - "item='Black Xs By Paco Rabanne For Men, Eau De Toilette Spray, 3.4-Ounce Bottle' clust_tuple=(2, 177, 233, 95, 0)\n", - "item='Incanto Shine By Salvatore Ferragamo For Women, Eau De Toilette Spray, 3.4-Ounce Bottle' clust_tuple=(2, 128, 185, 76, 0)\n", - "item='Versace Man Eau Fraiche By Gianni Versace For Men Edt Spray 3.4 Oz' clust_tuple=(2, 148, 81, 107, 0)\n", - "3\n", - "item='HDE® Facial Pore Cleanser Cleaner Blackhead Acne Remover' clust_tuple=(3, 106, 111, 172, 0)\n", - "item=\"Best Anti Aging Cream Reduces Wrinkels in Women and Men - Clinical Strength Bio-Peptide Wrinkle Cream Reduces Deep Wrinkles, Smooths Fine Lines and "Crow's Feet" - Tighten, Rejuvinate, and Rebuild Youthful, Healthy Skin - Boost Collagen and Ultra-Moisturize with Peptides Made For Your Skin - Great For Face, Under Eyes and Decolletage. You Love It Or We Buy It Back No Hassle Money Back Guarantee. [Reduced Price For Summer! Take 65% Off Automatically at Checkout!]★ 2oz Jar (60ml)\" clust_tuple=(3, 90, 239, 106, 0)\n", - "item='Raw African Black soap Imported From Ghana 4oz' clust_tuple=(3, 145, 185, 168, 0)\n", - "item='Skin Obsession 20% TCA Home Chemical Peel for face and body removes lines, sun damage and signs of aging' clust_tuple=(3, 207, 151, 96, 0)\n", - "item='Skin Obsession 25% TCA Chemical Peel for Home Use 1 fl oz (30 ml)' clust_tuple=(3, 207, 47, 44, 0)\n", - "4\n", - "item='Philosophy When Hope is Not Enough Firming and Lifting Serum for Unisex, 1 Ounce' clust_tuple=(4, 247, 239, 194, 0)\n", - "item='DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ' clust_tuple=(4, 182, 111, 5, 0)\n", - "item='Victorinox By Swiss Army For Men 125 Years Eau-de-toilette Spray, 3.4-Ounce' clust_tuple=(4, 128, 239, 5, 0)\n", - "item='Givenchy Play for Men by Givenchy 3.3 oz 100 ml EDT Spray' clust_tuple=(4, 50, 19, 168, 0)\n", - "item='Jilbere Hot Air Brush' clust_tuple=(4, 15, 47, 194, 0)\n" - ] - } - ], + "outputs": [], "source": [ "from rqvae.rqvae_data import search_similar_items\n", "\n", @@ -120,20 +85,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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a9us//LLL/XZZ591WV+/LmOM5s2bpxtvvFHp6ennrRswYICefvppvfLKK3r11VeVlpam0aNH65133vkGe3vxMjMz9etf/1pvvPGGnnnmGdXW1mrEiBH6/PPP26wP1fmTpNdee03Hjx/XXXfddd6aUJu/c5297jpyTZ49r6Pn9ARffPGFFi9erLy8vHZ/UeK1116rtWvX6vXXX9dLL72kXr166YYbbtBHH330Dfb24txyyy1at26d3nrrLT366KPauXOnvv/976uxsfG854Tq/EnSc889p7i4ON12223t1vXUOWzr3vBtuw6lEP8VEBfj3H8dG2Pa/RdzW/Vt7e9JZs+erT/96U/asmVLu3VpaWlKS0tzX2dlZam6ulqPPPKIbr755q7uZofdcsst7p+HDBmirKwsXXPNNXruuec0b968Ns8JxfmTpDVr1uiWW26R1+s9b02ozd/5dPSavNRzulNzc7PuuOMOnTlzRk888US7tcOHDw/6QO8NN9yg7373u3r88cf1y1/+squ72iGTJ092/5yenq5hw4Zp4MCB2rBhQ7thINTm76xf/epXmjJlygU/a9NT57C9e8O34To8y9oVnX79+ik8PLxV2qyrq2uVSs/yeDxt1kdERKhv375d1tevY86cOXr99de1efNmXXHFFR0+f/jw4d3+r46LFRsbqyFDhpy3v6E4f5J08OBBvfnmm/rZz37W4XNDaf7OPjHXkWvy7HkdPac7NTc3a9KkSaqqqlJpaWm7qzltueyyy3T99deHxLwOGDBAAwcObLevoTZ/Z7377rs6cODAJV2XPWEOz3dv+LZch3/N2qATFRWljIwM90mWs0pLSzVixIg2z8nKympVv2nTJg0bNkyRkZFd1tdLYYzR7Nmz9eqrr+qtt95SSkrKJbWze/duDRgwoJN71zUaGxu1b9++8/Y3lObvrz377LNKTEzUhAkTOnxuKM1fSkqKPB5P0Bw1NTWprKzsvNekdP55be+c7nI25Hz00Ud68803LylgG2NUWVkZEvP6+eefq7q6ut2+htL8/bU1a9YoIyNDQ4cO7fC53TmHF7o3fBuuw1a64xPQ35T169ebyMhIs2bNGvPBBx+Y/Px8Exsbaz755BNjjDGLFy82Pp/Prf/4449N7969zb333ms++OADs2bNGhMZGWn+67/+q7uGcF7//M//bBzHMW+//bapqalxt1OnTrk1545v1apVpri42Hz44Ydmz549ZvHixUaSeeWVV7pjCBc0f/588/bbb5uPP/7YlJeXm5ycHBMXF2fF/J3V0tJirrzySrNo0aJWx0Jx/hoaGszu3bvN7t27jSSzcuVKs3v3bvepo2XLlhnHccyrr75q3n//ffPjH//YDBgwwNTX17tt+Hy+oCcj//CHP5jw8HCzbNkys2/fPrNs2TITERFhysvLe9T4mpubTW5urrniiitMZWVl0HXZ2Nh43vEtXbrUlJSUmP/93/81u3fvNj/5yU9MRESE2b59e48aX0NDg5k/f77ZunWrqaqqMps3bzZZWVnmb/7mb0Jm/oy58N9RY4wJBAKmd+/e5sknn2yzjZ48hxdzbwj167CjrA46xhjzH//xH2bgwIEmKirKfPe73w16/Hrq1Klm5MiRQfVvv/22ue6660xUVJS56qqrzvsXvbtJanN79tln3Zpzx7d8+XJzzTXXmF69epk+ffqYG2+80WzYsOGb7/xFmjx5shkwYICJjIw0Xq/X3HbbbWbv3r3u8VCev7PeeOMNI8kcOHCg1bFQnL+zj8Cfu02dOtUY89WjrQ888IDxeDwmOjra3Hzzzeb9998PamPkyJFu/Vm/+c1vTFpamomMjDTXXnttt4W79sZXVVV13uty8+bNbhvnji8/P99ceeWVJioqyvTv399kZ2ebrVu3fvODM+2P79SpUyY7O9v079/fREZGmiuvvNJMnTrVHDp0KKiNnjx/xlz476gxxqxevdrExMSY48ePt9lGT57Di7k3hPp12FFhxvzfpzUBAAAsY+1ndAAAAAg6AADAWgQdAABgLYIOAACwFkEHAABYi6ADAACsRdABAADWIugAAABrEXQAAIC1CDoAAMBaBB0AAGAtgg4AALDW/wMhPwLu9rHL3wAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from collections import Counter\n", "import matplotlib.pyplot as plt\n", @@ -157,20 +111,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Counter({1: 11195, 2: 316, 3: 44, 4: 12, 5: 3, 6: 3, 9: 2, 7: 2, 8: 1, 21: 1})" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# collison counters - (how many item have same full semantic id): amount of such sets\n", "vals = Counter(item[-1][:-1] for item in items_with_tuples).values()\n", @@ -179,40 +122,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Counter({0: 11579,\n", - " 1: 384,\n", - " 2: 68,\n", - " 3: 24,\n", - " 4: 12,\n", - " 5: 9,\n", - " 6: 6,\n", - " 7: 4,\n", - " 8: 3,\n", - " 10: 1,\n", - " 11: 1,\n", - " 17: 1,\n", - " 12: 1,\n", - " 15: 1,\n", - " 19: 1,\n", - " 13: 1,\n", - " 14: 1,\n", - " 9: 1,\n", - " 18: 1,\n", - " 16: 1,\n", - " 20: 1})" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# dedup idxes\n", "Counter(item[-1][4] for item in items_with_tuples)" @@ -236,6 +148,75 @@ "# torch.save(df, './all_data.pt')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from utils import create_masked_tensor\n", + "\n", + "\n", + "embeddings = torch.rand((11, 2))\n", + "print(embeddings)\n", + "\n", + "lengths = torch.tensor([3, 1, 2, 5])\n", + "\n", + "padded_embeddings, mask = create_masked_tensor(embeddings, lengths)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "padded_embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mask" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "mapping = pd.read_csv(\"../data/Beauty/ratings_Beauty_full.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "deduped_mapping = mapping.drop_duplicates(subset=['item_id', 'raw_item_id'])\n", + "\n", + "semantic_ids_extractor = {}\n", + "for idx, row in pd.merge(deduped_mapping, df, 'inner', left_on='raw_item_id', right_on='asin').iterrows():\n", + " semantic_ids_extractor[row['item_id']] = row['embeddings']" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(semantic_ids_extractor, \"../data/Beauty/embs_extractor.pt\")" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/modeling/models/base.py b/modeling/models/base.py index 28be6a98..07c04fef 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -109,7 +109,7 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( + positions = torch.arange( # TODOPK why inverted? (not 0...n) start=seq_len - 1, end=-1, step=-1, device=mask.device )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) @@ -135,7 +135,7 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): embeddings = torch.cat((cls_token_expanded, embeddings), dim=1) mask = torch.cat((torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), dim=1) - if self._is_causal: + if self._is_causal: # TODOPK causal? causal_mask = torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( src=embeddings, diff --git a/modeling/models/bert4rec.py b/modeling/models/bert4rec.py index 40f1d331..273e1da7 100644 --- a/modeling/models/bert4rec.py +++ b/modeling/models/bert4rec.py @@ -81,7 +81,7 @@ def forward(self, inputs): if self.training: # training mode all_sample_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_batch_events) embeddings = embeddings[mask] # (all_batch_events, num_items) - labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) + labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) # TODOPK change that it accepts semantic ids (what is nonzero) needed_logits = embeddings[labels_mask] # (non_zero_events, num_items) needed_labels = all_sample_labels[labels_mask] # (non_zero_events) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 98a852db..2cef46d1 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -3,26 +3,23 @@ import torch.nn as nn import torch.nn.functional as F -from modeling.utils import DEVICE -from models.base import BaseModel, TorchModel +from models.base import TorchModel -# TODO finish tiger model +# TODOPK finish tiger model class TigerModel(TorchModel, config_name='tiger'): def __init__( - self, - rqvae_encoder, - emb_dim, - n_tokens, - n_codebooks, - nhead, - num_encoder_layers, - num_decoder_layers, - dim_feedforward, + self, + emb_dim, + n_tokens, + n_codebooks, + nhead, + num_encoder_layers, + num_decoder_layers, + dim_feedforward, dropout ): super().__init__() - self.rqvae_encoder = rqvae_encoder self.emb_dim = emb_dim self.n_tokens = n_tokens @@ -30,7 +27,7 @@ def __init__( self.item_embeddings = nn.Embedding(n_tokens, emb_dim) self.transformer = nn.Transformer( - d_model=emb_dim, + d_model=emb_dim, nhead=nhead, num_encoder_layers=num_encoder_layers, num_decoder_layers=num_decoder_layers, @@ -42,14 +39,7 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - rqvae_train_config = json.load(open(config['rqvae_train_config_path'])) - - rqvae_model = BaseModel.create_from_config(rqvae_train_config['model']).to(DEVICE) - rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) - rqvae_model.eval() - return cls( - rqvae_encoder=rqvae_model, emb_dim=config['emb_dim'], n_tokens=config['n_tokens'], n_codebooks=config['n_codebooks'], diff --git a/review.md b/review.md index 5977c185..4010105a 100644 --- a/review.md +++ b/review.md @@ -2,11 +2,20 @@ ## Todos +- check TODOPK +- у нас авторегрессионный next item prediciton? то есть: + +1) items (10) +2) semantic_ids (40) +3) prediciting 11th item (next 4 semantic ids) +4) if single - ok +5) if several? +6) if nothing? + - posterior collapse (как будто все сваливается в один индекс в кодбуке) (fixed eval code) -- обязательно использование reinit unused clusters! +- обязательно использование reinit unused clusters! (mark) - в Amazon датасете пофиг на rating? получается учитываются только implicit действия? - TODO какой базовый класс использовать для e2e модели? (LastPred?) -- TODO backward on mean loss? in `RqVae` - TODO имя для модели (tiger) ## Links From f63d617e995bbb887d84f3f975958aa6ea5fd7fc Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 25 Dec 2024 00:26:11 +0300 Subject: [PATCH 015/175] fix item_id mapping --- configs/train/tiger_train_config.json | 1 + modeling/dataloader/batch_processors.py | 2 +- modeling/main.ipynb | 40 +----- notebooks/AmazonBeautyDatasetStatistics.ipynb | 121 ++++++++++++------ 4 files changed, 90 insertions(+), 74 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 4ed3bc0e..ca17cb44 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,5 +1,6 @@ { "experiment_name": "tiger", + "train_steps_num": 1024, "best_metric": "eval/ndcg@20", "dataset": { "type": "scientific", diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 8429ec7a..e9f64e50 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -43,7 +43,7 @@ def create_from_config(cls, config, **kwargs): return cls(rqvae_model, embs_extractor) def get_semantic_ids(self, item_ids): - embs = torch.stack([self._embs_extractor.get(item_id, torch.ones((512,))) for item_id in item_ids]) # TODOPK fix + embs = torch.stack([self._embs_extractor[item_id] for item_id in item_ids]) semantic_ids = self._rqvae({"embeddings": embs}) return list(semantic_ids) diff --git a/modeling/main.ipynb b/modeling/main.ipynb index 8fddbbd4..e03fc168 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -148,6 +148,13 @@ "# torch.save(df, './all_data.pt')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -184,39 +191,6 @@ "mask" ] }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "mapping = pd.read_csv(\"../data/Beauty/ratings_Beauty_full.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "deduped_mapping = mapping.drop_duplicates(subset=['item_id', 'raw_item_id'])\n", - "\n", - "semantic_ids_extractor = {}\n", - "for idx, row in pd.merge(deduped_mapping, df, 'inner', left_on='raw_item_id', right_on='asin').iterrows():\n", - " semantic_ids_extractor[row['item_id']] = row['embeddings']" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "torch.save(semantic_ids_extractor, \"../data/Beauty/embs_extractor.pt\")" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/notebooks/AmazonBeautyDatasetStatistics.ipynb b/notebooks/AmazonBeautyDatasetStatistics.ipynb index a1a2c3d2..11fd2925 100644 --- a/notebooks/AmazonBeautyDatasetStatistics.ipynb +++ b/notebooks/AmazonBeautyDatasetStatistics.ipynb @@ -29,7 +29,7 @@ "outputs": [], "source": [ "path_to_df = '../data/Beauty/ratings_Beauty.csv'\n", - "df = pd.read_csv(path_to_df, names=['user_id', 'item_id', 'rating', 'timestamp'])" + "df = pd.read_csv(path_to_df, names=['raw_user_id', 'raw_item_id', 'rating', 'timestamp'])" ] }, { @@ -59,8 +59,8 @@ " \n", " \n", " \n", - " user_id\n", - " item_id\n", + " raw_user_id\n", + " raw_item_id\n", " rating\n", " timestamp\n", " \n", @@ -106,7 +106,7 @@ "" ], "text/plain": [ - " user_id item_id rating timestamp\n", + " raw_user_id raw_item_id rating timestamp\n", "0 A39HTATAQ9V7YF 0205616461 5.0 1369699200\n", "1 A3JM6GV9MNOF9X 0558925278 3.0 1355443200\n", "2 A1Z513UWSAAO0F 0558925278 5.0 1404691200\n", @@ -132,10 +132,10 @@ { "data": { "text/plain": [ - "user_id 0\n", - "item_id 0\n", - "rating 0\n", - "timestamp 0\n", + "raw_user_id 0\n", + "raw_item_id 0\n", + "rating 0\n", + "timestamp 0\n", "dtype: int64" ] }, @@ -166,7 +166,7 @@ } ], "source": [ - "df.user_id.max(), df.user_id.unique().shape" + "df.raw_user_id.max(), df.raw_user_id.unique().shape" ] }, { @@ -187,7 +187,7 @@ } ], "source": [ - "df.user_id = pd.factorize(df.user_id)[0] + 1\n", + "df['user_id'] = pd.factorize(df.raw_user_id)[0] + 1\n", "df.user_id.min(), df.user_id.max(), df.user_id.unique().shape" ] }, @@ -209,7 +209,7 @@ } ], "source": [ - "df.item_id = pd.factorize(df.item_id)[0] + 1\n", + "df['item_id'] = pd.factorize(df.raw_item_id)[0] + 1\n", "df.item_id.min(), df.item_id.max(), df.item_id.unique().shape" ] }, @@ -240,59 +240,71 @@ " \n", " \n", " \n", - " user_id\n", - " item_id\n", + " raw_user_id\n", + " raw_item_id\n", " rating\n", " timestamp\n", + " user_id\n", + " item_id\n", " \n", " \n", " \n", " \n", " 0\n", - " 1\n", - " 1\n", + " A39HTATAQ9V7YF\n", + " 0205616461\n", " 5.0\n", " 1369699200\n", + " 1\n", + " 1\n", " \n", " \n", " 1\n", - " 2\n", - " 2\n", + " A3JM6GV9MNOF9X\n", + " 0558925278\n", " 3.0\n", " 1355443200\n", + " 2\n", + " 2\n", " \n", " \n", " 2\n", - " 3\n", - " 2\n", + " A1Z513UWSAAO0F\n", + " 0558925278\n", " 5.0\n", " 1404691200\n", + " 3\n", + " 2\n", " \n", " \n", " 3\n", - " 4\n", - " 3\n", + " A1WMRR494NWEWV\n", + " 0733001998\n", " 4.0\n", " 1382572800\n", + " 4\n", + " 3\n", " \n", " \n", " 4\n", - " 5\n", - " 4\n", + " A3IAAVS479H7M7\n", + " 0737104473\n", " 1.0\n", " 1274227200\n", + " 5\n", + " 4\n", " \n", " \n", "\n", "" ], "text/plain": [ - " user_id item_id rating timestamp\n", - "0 1 1 5.0 1369699200\n", - "1 2 2 3.0 1355443200\n", - "2 3 2 5.0 1404691200\n", - "3 4 3 4.0 1382572800\n", - "4 5 4 1.0 1274227200" + " raw_user_id raw_item_id rating timestamp user_id item_id\n", + "0 A39HTATAQ9V7YF 0205616461 5.0 1369699200 1 1\n", + "1 A3JM6GV9MNOF9X 0558925278 3.0 1355443200 2 2\n", + "2 A1Z513UWSAAO0F 0558925278 5.0 1404691200 3 2\n", + "3 A1WMRR494NWEWV 0733001998 4.0 1382572800 4 3\n", + "4 A3IAAVS479H7M7 0737104473 1.0 1274227200 5 4" ] }, "execution_count": 8, @@ -306,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "5701edda", "metadata": {}, "outputs": [ @@ -314,7 +326,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2023070it [01:12, 28030.70it/s]" + "2023070it [02:18, 14586.26it/s]" ] }, { @@ -347,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "c8f9aabc", "metadata": {}, "outputs": [ @@ -355,7 +367,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████████████████████████████████████████████████████████████████| 2023070/2023070 [00:04<00:00, 421809.17it/s]\n" + "100%|██████████| 2023070/2023070 [00:07<00:00, 275645.12it/s]\n" ] }, { @@ -432,7 +444,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "dcc9f464", "metadata": {}, "outputs": [ @@ -440,8 +452,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|████████████████████████████████████████████████████████████████████| 1210271/1210271 [00:01<00:00, 840307.33it/s]\n", - "100%|██████████████████████████████████████████████████████████████████████| 249274/249274 [00:00<00:00, 571256.27it/s]\n" + "100%|██████████| 1210271/1210271 [00:01<00:00, 814485.15it/s] \n", + "100%|██████████| 249274/249274 [00:00<00:00, 538388.70it/s]\n" ] } ], @@ -494,7 +506,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "16df848f", "metadata": {}, "outputs": [ @@ -520,7 +532,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "90f7ccc1", "metadata": {}, "outputs": [], @@ -532,11 +544,40 @@ " ]))\n", " f.write('\\n')" ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "83cb36e1", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pandas as pd\n", + "\n", + "deduped_mapping = df.drop_duplicates(subset=['item_id', 'raw_item_id'])\n", + "\n", + "embs = torch.load('../data/df_with_embs.pt')\n", + "\n", + "semantic_ids_extractor = {}\n", + "for idx, row in pd.merge(deduped_mapping, embs, 'inner', left_on='raw_item_id', right_on='asin').iterrows():\n", + " semantic_ids_extractor[item_mapping[row['item_id']]] = row['embeddings']\n", + " \n", + "torch.save(semantic_ids_extractor, '../data/Beauty/id_to_emb.pt')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39c64b10", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "gsrec", "language": "python", "name": "python3" }, @@ -550,7 +591,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.17" + "version": "3.11.11" } }, "nbformat": 4, From 55fc204feb925070ae1e23e58458ba73a04b873f Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 25 Dec 2024 00:54:17 +0300 Subject: [PATCH 016/175] use idx instead of mapping in dataset --- modeling/dataset/base.py | 6 ++--- notebooks/AmazonBeautyDatasetStatistics.ipynb | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index ca9e451c..8fa712fc 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -720,12 +720,12 @@ def create_from_config(cls, config, **kwargs): data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, '{}.pt'.format('all_data')) + dataset_path = os.path.join(data_dir_path, '{}.pt'.format('data_full')) df = torch.load(dataset_path, weights_only=False) - for _idx, sample in df.iterrows(): + for idx, sample in df.iterrows(): train_dataset.append({ - 'item.id': sample['asin_numeric'], + 'item.id': idx, 'item.embed': sample["embeddings"] }) diff --git a/notebooks/AmazonBeautyDatasetStatistics.ipynb b/notebooks/AmazonBeautyDatasetStatistics.ipynb index 11fd2925..c613e17d 100644 --- a/notebooks/AmazonBeautyDatasetStatistics.ipynb +++ b/notebooks/AmazonBeautyDatasetStatistics.ipynb @@ -547,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 52, "id": "83cb36e1", "metadata": {}, "outputs": [], @@ -559,17 +559,27 @@ "\n", "embs = torch.load('../data/df_with_embs.pt')\n", "\n", - "semantic_ids_extractor = {}\n", - "for idx, row in pd.merge(deduped_mapping, embs, 'inner', left_on='raw_item_id', right_on='asin').iterrows():\n", - " semantic_ids_extractor[item_mapping[row['item_id']]] = row['embeddings']\n", + "merged = pd.merge(deduped_mapping, embs, 'inner', left_on='raw_item_id', right_on='asin')\n", + "merged['item_id'] = merged['item_id'].map(lambda x: item_mapping[x])\n", " \n", - "torch.save(semantic_ids_extractor, '../data/Beauty/id_to_emb.pt')" + "assert len(merged) == len(merged.item_id.unique())\n", + "merged = merged.set_index('item_id')\n", + "\n", + "torch.save(merged, '../data/Beauty/data_full.pt')" ] }, { "cell_type": "code", "execution_count": null, - "id": "39c64b10", + "id": "670cfd1f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "587feb1f", "metadata": {}, "outputs": [], "source": [] From f401727c9db99d979b7ae6c670ba291c281ba0ed Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 25 Dec 2024 02:05:28 +0300 Subject: [PATCH 017/175] fix tiger & get autoregression --- configs/train/tiger_train_config.json | 6 +- image.png | Bin 0 -> 191122 bytes modeling/dataloader/batch_processors.py | 6 +- modeling/dataset/base.py | 121 +++++++++++++++++ modeling/models/__init__.py | 1 + modeling/models/sasrec.py | 2 +- modeling/models/tiger.py | 171 +++++++++++++----------- review.md | 3 + 8 files changed, 227 insertions(+), 83 deletions(-) create mode 100644 image.png diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index ca17cb44..d2fb5a97 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -3,7 +3,7 @@ "train_steps_num": 1024, "best_metric": "eval/ndcg@20", "dataset": { - "type": "scientific", + "type": "rqvae_scientific", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, @@ -21,7 +21,7 @@ "type": "rqvae", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/embs_extractor.pt" + "embs_extractor_path": "../data/Beauty/data_full.pt" }, "drop_last": true, "shuffle": true @@ -33,7 +33,7 @@ "type": "rqvae", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/embs_extractor.pt" + "embs_extractor_path": "../data/Beauty/data_full.pt" }, "drop_last": false, "shuffle": false diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed39e36f80ab091591aa525a09ec3e6a090640b GIT binary patch literal 191122 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%0A3L! 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

G^emS4Pg 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 literal 0 HcmV?d00001 diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index e9f64e50..ddf6c92b 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -38,12 +38,12 @@ def create_from_config(cls, config, **kwargs): rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) rqvae_model.eval() - embs_extractor = torch.load(config['embs_extractor_path'], weights_only=True) + embs_extractor = torch.load(config['embs_extractor_path']) return cls(rqvae_model, embs_extractor) def get_semantic_ids(self, item_ids): - embs = torch.stack([self._embs_extractor[item_id] for item_id in item_ids]) + embs = torch.stack([self._embs_extractor.loc[item_id]['embeddings'] for item_id in item_ids]) semantic_ids = self._rqvae({"embeddings": embs}) return list(semantic_ids) @@ -68,7 +68,7 @@ def __call__(self, batch): if prefix != 'user': semantic_ids = self.get_semantic_ids(item_ids) item_ids = list(itertools.chain(*semantic_ids)) - length = len(semantic_ids) + length = len(item_ids) processed_batch[f'{prefix}.ids'].extend(item_ids) processed_batch[f'{prefix}.length'].append(length) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 8fa712fc..1eee92ff 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -701,6 +701,127 @@ def meta(self): 'max_sequence_length': self.max_sequence_length } +class RqvaeScientificDataset(BaseDataset, config_name='rqvae_scientific'): + + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length + ): + self._train_sampler = train_sampler + self._validation_sampler = validation_sampler + self._test_sampler = test_sampler + self._num_users = num_users + self._num_items = num_items + self._max_sequence_length = max_sequence_length + + @classmethod + def create_from_config(cls, config, **kwargs): + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + max_sequence_length = config['max_sequence_length'] + max_user_idx, max_item_idx = 0, 0 + train_dataset, validation_dataset, test_dataset = [], [], [] + + dataset_path = os.path.join(data_dir_path, '{}.txt'.format('all_data')) + with open(dataset_path, 'r') as f: + data = f.readlines() + + for sample in data: + sample = sample.strip('\n').split(' ') + user_idx = int(sample[0]) + item_ids = [int(item_id) for item_id in sample[1:]] + + max_user_idx = max(max_user_idx, user_idx) + max_item_idx = max(max_item_idx, max(item_ids)) + + assert len(item_ids) >= 5 + + train_dataset.append({ + 'user.ids': [user_idx], + 'user.length': 1, + 'item.ids': item_ids[:-2][-max_sequence_length:], + 'item.length': len(item_ids[:-2][-max_sequence_length:]) + }) + assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) + validation_dataset.append({ + 'user.ids': [user_idx], + 'user.length': 1, + 'item.ids': item_ids[:-1][-max_sequence_length:], + 'item.length': len(item_ids[:-1][-max_sequence_length:]) + }) + assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) + test_dataset.append({ + 'user.ids': [user_idx], + 'user.length': 1, + 'item.ids': item_ids[-max_sequence_length:], + 'item.length': len(item_ids[-max_sequence_length:]) + }) + assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user idx: {}'.format(max_user_idx)) + logger.info('Max item idx: {}'.format(max_item_idx)) + logger.info('Max sequence length: {}'.format(max_sequence_length)) + logger.info('{} dataset sparsity: {}'.format( + config['name'], (len(train_dataset) + len(test_dataset)) / max_user_idx / max_item_idx + )) + + train_sampler = TrainSampler.create_from_config( + config['samplers'], + dataset=train_dataset, + num_users=max_user_idx, + num_items=max_item_idx + ) + validation_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=validation_dataset, + num_users=max_user_idx, + num_items=max_item_idx + ) + test_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=test_dataset, + num_users=max_user_idx, + num_items=max_item_idx + ) + + return cls( + train_sampler=train_sampler, + validation_sampler=validation_sampler, + test_sampler=test_sampler, + num_users=max_user_idx, + num_items=max_item_idx, + max_sequence_length=max_sequence_length + ) + + def get_samplers(self): + return self._train_sampler, self._validation_sampler, self._test_sampler + + @property + def num_users(self): + return self._num_users + + @property + def num_items(self): + return self._num_items + + @property + def max_sequence_length(self): + return self._max_sequence_length + + @property + def meta(self): + return { + 'num_users': self.num_users, + 'num_items': self.num_items * 4, # TODOPK + 'max_sequence_length': self.max_sequence_length * 4 # TODOPK + } + class RqVaeDataset(BaseDataset, config_name='rqvae'): def __init__( diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index e52aed9e..3fc87499 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -16,3 +16,4 @@ from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel from .rqvae import RqVaeModel +from .tiger import TigerModel diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 061ea1d0..ec5221dc 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -102,7 +102,7 @@ def forward(self, inputs): k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + return indices.repeat(4, 2) # TODOPK class SasRecInBatchModel(SasRecModel, config_name='sasrec_in_batch'): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 2cef46d1..dddaf8d3 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,86 +1,105 @@ -import json +from models.base import SequentialTorchModel + import torch -import torch.nn as nn -import torch.nn.functional as F -from models.base import TorchModel -# TODOPK finish tiger model -class TigerModel(TorchModel, config_name='tiger'): +class TigerModel(SequentialTorchModel, config_name='tiger'): + def __init__( - self, - emb_dim, - n_tokens, - n_codebooks, - nhead, - num_encoder_layers, - num_decoder_layers, - dim_feedforward, - dropout + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): - super().__init__() - - self.emb_dim = emb_dim - self.n_tokens = n_tokens - - self.position_embeddings = nn.Embedding(n_codebooks, emb_dim) - self.item_embeddings = nn.Embedding(n_tokens, emb_dim) - - self.transformer = nn.Transformer( - d_model=emb_dim, - nhead=nhead, - num_encoder_layers=num_encoder_layers, - num_decoder_layers=num_decoder_layers, + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, dim_feedforward=dim_feedforward, - dropout=dropout + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True ) - - self.proj = nn.Linear(emb_dim, n_tokens) - + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + + self._init_weights(initializer_range) + @classmethod def create_from_config(cls, config, **kwargs): return cls( - emb_dim=config['emb_dim'], - n_tokens=config['n_tokens'], - n_codebooks=config['n_codebooks'], - nhead=config['nhead'], - num_encoder_layers=config['num_encoder_layers'], - num_decoder_layers=config['num_decoder_layers'], - dim_feedforward=config['dim_feedforward'], - dropout=config['dropout'] - ) - - def forward(self, user_item_history): - # Get item embeddings from RQVAE encoder - item_sequence = self.rqvae_encoder(user_item_history) - - # Convert item sequence to embeddings (embedding size is emb_dim) - item_embs = self.item_embeddings(item_sequence) - - # Add positional embeddings (positions are in the range [0, 3] for each tuple in the sequence) - positions = torch.arange(0, item_embs.size(1), device=item_embs.device).unsqueeze(0) - position_embs = self.position_embeddings(positions) - - # Add position embeddings to item embeddings - embeddings = item_embs + position_embs - - # Transformer expects the input to be in (seq_len, batch, embedding_dim) format - embeddings = embeddings.permute(1, 0, 2) # Convert to (seq_len, batch, emb_dim) - - # Create the target sequence for the transformer decoder - # You can shift the sequence for training as needed (e.g., teacher forcing) - target = embeddings.clone() # Use input embeddings as target for now - - # Pass through the transformer (using embeddings as both input and target) - transformer_output = self.transformer(embeddings, target) - - # Project the output back to token space (256 possible values for each codebook) - logits = self.proj(transformer_output) - - # Apply softmax to get probabilities (for cross-entropy loss) - return logits - - def compute_loss(self, logits, target): - # Compute cross-entropy loss - loss = F.cross_entropy(logits.view(-1, self.n_tokens), target.view(-1)) - return loss + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) + ) + + def forward(self, inputs): + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + all_positive_sample_embeddings = self._item_embeddings( + all_positive_sample_events + ) # (all_batch_events, embedding_dim) + + all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) + + all_scores = torch.einsum( + 'ad,nd->an', + all_sample_embeddings, + all_embeddings + ) # (all_batch_events, num_items + 2) + positive_scores = torch.gather( + input=all_scores, + dim=1, + index=all_positive_sample_events[..., None] + ) # (all_batch_items, 1) + + return { + 'positive_scores': positive_scores, + 'negative_scores': all_scores + } + else: # eval mode + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf + + _, indices = torch.topk( + candidate_scores, + k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices.repeat(4, 1) diff --git a/review.md b/review.md index 4010105a..4516e347 100644 --- a/review.md +++ b/review.md @@ -18,6 +18,9 @@ - TODO какой базовый класс использовать для e2e модели? (LastPred?) - TODO имя для модели (tiger) +Почему одинаковые длины? +![alt text](image.png) + ## Links - [dataset](https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html) From 155b224893bb591566b550b21937f5a346f70b82 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 28 Dec 2024 20:51:18 +0300 Subject: [PATCH 018/175] update reviews --- configs/train/tiger_train_config.json | 5 ++-- image.png | Bin 191122 -> 0 bytes modeling/loss/base.py | 3 ++- modeling/models/base.py | 5 ++-- modeling/models/bert4rec.py | 2 +- modeling/models/sasrec.py | 2 +- modeling/models/tiger.py | 2 ++ review.md | 32 ++++++++++++++++---------- 8 files changed, 32 insertions(+), 19 deletions(-) delete mode 100644 image.png diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index d2fb5a97..ac332d8a 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -9,7 +9,7 @@ "max_sequence_length": 50, "samplers": { "num_negatives_val": 100, - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, @@ -40,8 +40,9 @@ } }, "model": { - "type": "sasrec", + "type": "tiger", "sequence_prefix": "item", + "predictions_prefix": "predictions", "positive_prefix": "positive", "negative_prefix": "negative", "candidate_prefix": "candidates", diff --git a/image.png b/image.png deleted file mode 100644 index 8ed39e36f80ab091591aa525a09ec3e6a090640b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191122 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%0A3L! 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

G^emS4Pg zB_3OT_plU4$kk}LR${LP;@GP@IIq!P*ei=r&X>QI92YultFG%V78~!KLq6CMK;D?v zbzP9t6i&rsw=-mNf?Y)cHtV$u#fdI86b^>HlzZS<0j(2>zK{JbHa9(S`=!OQE@bjs zV`bk;?7y@C21KMpI($xFblOt|DExT!knKU5jrhrQgSTu}z2jTM9n%;L9YPf_%8$?j@~>PPZ@zvlUzJJPdP{hCQ*0jct)SXX>ol+F5>(??SKrJOH^6DfWMv zX4jjmw(|x2xOd(>g47v7#0qt-R!L%AX$MY^K$J-#c%&wpFS%o)OU>TixFu+4d^rAa zjLe49tw%SaknP>_siLi+M>gO=fpYpxkdOV4mV!omt*5?XaXsS)JB~}Cd>3Qy0vu-r zEzkY^EJ}SX`LO_S6HVq|r-M{RHIkTfcJ8=XiGg(s6o()8i2TpM>TF#f-{kTbWk;9U zmmfoDN$RE3eGXUAQ-h>Rk!?#^T;@O|Ax3UTXuwc=!~lVdbEiHtKtHca&~D|;leN#bSeY%d3Lu)5iB`4iI$)_C&Eqn8~vSwof1E)Jx6C=jE<|O=ddL=Lnwl z*f_>EsM;in;7FBsIGX*&MNP=ex?}mis1HvHR4Sv?uc_CJH1PGl1}`B@t_z31$ex&V|Qbu;zVP~Jd4 zNmYHdp$>>dR{FR>d{d&E`4k!ER^=iZ2uMn6Y2w_cnsX!Eg{=C_*#+&x^O;C7tMsjLR-t-1uOPy^X8Wiu6D8$SwhNM5xMHMm+Uh6xAXAu1b-_>HCjwg|AflQAvcAJczo# zcp}Kh@-CnfFqp-buX3hu`EieUWjT~Jsy=H~?N|3kWh=awjD4Ls9QZL#8r$YRnEPA6 z-9)l0Z+d%BS~GwUAimT%dzq+WR0Y;)#Km~lEAz+DQ#jIVB+O3@kzPwcwInky`*RT< z9e^prml;iokY0dH4ZyWz=S=lO&`Dl>94pco2-6q}$I!o9pxpaoftZYujpl956F=02A1q)Rr&WzJ?qYPt@UwYS1rA(yrF{J5y<7r92X`$b}>4vr3m>#A3z+#hUs&!6?KjVt$hJ-^>bPzkG;tTE?$55A} z7*bhEkZ(Op7yLP#(7R2YJ}T;azPIEKM=)y6(~HMsYLJuYxlG!38gYJ&ywmo@2y$w9 zwiAt#eYWNgVR@!dUT>pfigC+-F7EXXlRI*dHB-_D^|&a$gavsgQ#~Q8z$h^6jKC}@ zp|e`Ct-}E4t?A}^S%an$X{{8-L*s34{U7JY`>*p8#z!<#?_5*W@D9EB>S7&_MhJpJ z?@}xW!ETXdxBUgAF?h#vABJHW0OHWyahccgdPu+ucr|DO%jnUWVpb9a-NWuRcndW= z?n>s|gz*5K#c;}$ZGqB}E*O0C1imP6=Q&*#h;9^CZ_|>Zz62!`v}(JZLX4K(BMX&! z#nzmD#ARzz7X{SNkwb%ih$rcZu8ydb*~N#DBR0XD7oE@1J)&OnEqW}l9~63#%Vr5a zJuL#dTQ)mPaqLLCX^X;&aM?Qi)h{DcdT%MAYJX0-Y((Km6SaWu0)DG8dzm9OCFn;OV#x2~Ao`iiMl;d-K#%Emmh{fQ66qR33SD3(|a-W8*2W@w-*=|GNY`RZs zzs+vNW`sAH)j{G&H@YLy3#*n9#S<@tQ=iT529zsEW;)V-;I3ZljYZEAPs}RP8!xzd zA{c~H*Yy>{w^|YN1_PiRhZ5tM%n&<*@hA2qkU-Vdf`+prQPy$JisJMHT z)V{aS&|v@KSN{6xlJAb@Dr9gA7dNZdq_WBFDKumDg6jja(O98)9e(UV)e6eyOm-3G zd9!!JlCVX2oXh2;T@w^>-DUgE0mBzcE5{YA0D`T9iX+Jv!5EliQak~sXXf-DtEz1s zgppQ&vF(<>JT={y+&fSLQ(aoLrb9b;+Ch$A_PSCB^d5vX8kM$?vn>Y2;BJ-nid-A& zml^i(RbEOEPW1k@ys~B&z^aD!ad`)WX!4jL>i7)sroYz|kXbN0A!gjBGN;Yqa~a8E zT5}-xntEK+8xx>ZZEq^98tGU%VY_X;x4i0=JHd*tCL2=#@R(&9CbLy&&rlEx&}e&a z9ZnXncj%3qKs5-K`_?>0aIEhX#>~;cYmnYn>rj=NV!f*>mC?9}Lq+M}?qgwT zpJ``?Or4Va63tPT9)MKnXzO7lR~S1DRDirdf!Ad2ZrI(AbY_-!?6GipHeGBA@IPKF_jmd4@_Y055zGtS+m)*|Rzsl+(`TBUvp!l|q5xgLjr|4T$ ze~*Yl$n`RK)nw!pl%PaLw{)RabX==4zo+b7MuUP6GQxoj^SO<|-$&-t>2`*D5Up=SjzwR`VO2okf zn)~=4AtL1J?aC}~+h5yE4?pJay-r%ItmsZ49 zT1|pJw8?{+p5~lykD+(Z$*Z4mf8VDZ&BJne^~LJd1LU5kv}8z?g)FeSZ_cdYPC;shL*U{e0N6%BYC|0D{Y4kTR2qYcR)Vcx$hczdkZx z(6u65zD^Y<1n&V1Phm&0#70V)RR1M2yBVPM zSRi9dpHnR2SuL5sg763lVQmv7@-(p=h0r=Kv@?yC*nCi|j>76qrk)R|R!>L2d3&y! z?iQ50*z9JD+Gd2HcDrGBn85iR6G-@|iS}(35XQNt^@8LrRIw>s$S*#n%^!1w4irh* z4Q2`xowJ%1!B;EtgH{z@vqTT6+~n=+n~z+&-}}lZn#-|Zf0yt8yltjPq!+Pg3)}FX z1VazQk)ph^K^#RdsA?Lp-u^`H>h2(WHoR*~@OEXX2*jz%g?3S*bdO--kEXP1zu%={ zHh`j~WuR1^T*hbVAet{EWoU475()5x_k5A^EA2l$^NRX2ylLZ^^I}H&Vz}^4YiYBi z;0ie%YiFTt_onfmPJ(XRq7NnWrdA*>>Sn4Nfb+;g=yzVd<4G|xIp3cHN(??@p9FLT zDM2X(oai==SfHdXOCIP^mCEnam>KPZ^42`9)?DOY~EwXb$_N{*ag$@dsOC{nt z1CMDXNfE(i}YkDwPU1Lf2bqm2{UQ80}OKZ<1N+x?P!K)&y~@mXbs+ zXSQZSDqzLoUo|Z$nX=Su06gH`D2$HRyO2PQVPpq(B@RJXZVV}_=$O7`G%rcL$Qqz* zR**}M*Z7)+;_Lu_&DuDQMbBlanY$XuHNmBVj$HMeAMvPomoALg&=GND)%i-nR9Ug0o=^FJHRylF5UP8wHY4}JqXK%ZLors+|uaod3tF3 ztif{wkQ>jqN=#-HHpglz)ok65b&|fR;p^X$U`jG&2{HrcgezkemDMVr{UBWCX2QD@ zcEOyN+KYHV1NHeJ^M*APH7?j&u>V6K`f-j?w$kK@_=QLoWSNLB#sc%Fv&sm3`zh8Y9 z{Ur^}M`u`~spCk{g}~woxIbjBo!Ykt1b#lxM=oNUM@ z=RNO(yd!|SzdgKmu>A6CF&~|_J z#d-vSU~e5ZBLx}8OeG$omfAn|D95Usp37pGy1(j_n){({rfvTe?wy{FVDJ#>qJp7V zA``4ap;O1`cThKxsxn8D<=*~*-Ue`E!1X2VUQXzpO}2gwdS5Oq-RUc=VK<}zrQB7B zSHduU&uqbsC>rU|_NW8qHizm2-SiQ9hYfFBEYCBN+*~ZtHyrkqKtGDF%15}&XpU}M z-`h6>U+AdXfNB2RJS=s}utMob8<~Y-GbLM0dx+$2;m^l{e8CV8aCM4v`GwVG1j!O=o=^fJwZ z6t5?~*GX)Q4C0lB;@OYZO_DW_acLR-}LH8h+|tYE}6Dm1+Obj;Uq=CLM4 zE4fdCf-&c?q4p|@jJ{C1LlWC8_ZS5_Tc&QXc_c_Xuky^mK79&;IKD%SLT#;E_M1Qd zjA}f{|1p4P$<#q80u~&l1$@Di99A;R>20V^L`DlL;mM4~Tjb*jBaj^%}k8Evzrc~C}6#*2<0W|0DrKa>U+~e7KdXm+tS{}Z^l84ivTN<`=soh zkG;y4u3$M$UmTMd1a!#spj@Q}}F2fd!EO zaRF_98p)sS3rLbbCEl%i#1~xND=S!h9}-J3VDz!aPyZic)YT&~O3s3PY&ZPm3F$Uf z-|_-E!Ns1{k%a~+aOs66Jx2CslW@ut&*e-t#4G+>R3e3&5QENG4_WMLKYm9~D9ehP zR#jz^%}^NaA__}KuP^4i_Cdiw7zHCcTQrI+CsD9SnLgh`{(Mepr5>E!mya*MsMLP& z@*^j&;y*N%TlygHA#8Ws=IKb{gNii`Z7cP4F5gnZR|Vm*cXM^@V+;W)6f=FDi&K9+O^#P z@+{EGC1If2Oll1gIrC^Uno5I}E4qiMH=pBAx41*YS=XRLCmIuSI?BnS@4qELUWxn} z$Yl4Uygo7}*C5;FkC@b5a+!k_`BzMuQb*?$B*u5Sib=kIW6`KlR2!0|rDxmC9e4yT z;IM8RPc&JKbC4}UKA|D`o0T|yAP8S*aOI|aL8>vb!f!+NNQD^TW1OleQ03H927XXg zyx%PE&Nc`S=j`B2bz_RF8CPj(ESDMb;gqz6YbvCP z01cSFl|1b9+v8QaycwcXtdnWm_3rN?{pKRp5U?WqMPGyyer{vi@G+*F=Dw{?HNVgC zd!oh=ANj&;cd-xuei-#>I!)aAt^yJNm^41iFT&{n^z2(&D4eH{YW6KvN9d>VMyeIx z+_{`@biLBDzu?3MXMTyabeDPk6m*ZWJz}xi;S?KkEbA@>Xt<7kt1o-zEy(>=zkP!} zd-UR`Gl}ZMo>5Ko58Hp!|6^QI&hcZF&Nqq* z>bnG_Fd|Wu2#RVpnTFc{d|{b+F13Bs(W<^ZE?=ur-oc<|s|yo`;r^(gIYp;u(zWnQ zi}N{}nc87=0z3_&XuqRQEpPVO6lLM#ljTuILz0nRK6nN>$=cWs)H z#cE`QIsnoBwcX+$mx0!)gyA;#7wxJSfH90B&OhHQxN1C+i|M!D=Z{Rh+R z3CSX=`*5ZxFJQ@vqhBo@YFz>#j`-bV=%4c;Vnk~^y8<%uT0P?hwE9CiQq-+}MWyx@dXSi6ik0%Q9pzJlgVN9eD8Hp-u3GGlvq z$d9@O3mTRhOD(9}Uc%v|JEmQxU^XQaL?Z)_V|GJ^vQvaSVKnA~2B+{{{+Hh`$Me;U z(b-(oc~ePT-dRV}tt_Dw+4~l%-=P^yd4LVw9y{_FVE(lo8=r#>8j~94Xv(V$4eR}L zG*9az8cE7Cca*)E7HCus?8r$#woC!KoznYVn_#cGjjA+xz&1&!bzgD!w*Zy`6rYJ@ zs5A)ERcBGE3~9_R#b~w%^XVB+khdo$Mq>Xz!rn3{uI*d*ju3)FLU0cu5F|JRcMI+g z!L^a#?(V_e9YP513GVJ1+@*2no$S5;=brc6UFTNy7pl6t>9xjMYtAvA-}Btfn$@$Z zB3~$fhY<>XGts?NXNCoYyYXVGF$%?4EwMk=K*a5FUt9jb4r>7_Fx-JAm+W5hWwtRd zTL+`ja_Zl7v1>K!3Z)c8NGNRteedZ-EaVmDa61_hdF7YFWFqIQsfO^T8x@rco4by5 zVZfbMqxOl-#vn8BDrh)tcFA56uVO*a|<^Np%mmW2#wAh?D>!1##7s$cii9V5Ru zoQMO3YEet4_yeLrdYb zB<{eHo5K_C>q~TzQx}tb=vIxWIoSRD#e!8JT!;rqj1A#WAxg(xy}wp|K@=kLxX~wT z*18G^OtkQV($$5{$e6bQ|QN5y5aisB7J=VbKyM<g5YWjNn?ntJ##PKQ!e-v3uGXFbqN+Fj?~XgH}CcPh8I3pX+sni`lypjA>^JBOA-K zctI|KyF}}9n}~T^&d>a*^N})3?b^F@4kqKt5+~G7>4XfJJdD1!- z%vnnp;SDPjWK?3aty8cD{+G+kP=_!v6k4SGz1smnalx8$v9=9p_iAVzI;ZXOJqbhd^wt2>Uyq!iE9-!a7Q zbXcn1jw6;@wb%|xOwiB3{*pzSj;Ao2yZU*l58FsJDoK161+0|7Bgb4WM?7nH>fx4;56%P zRfR#*vbnx*?b>m_mrr9iKv)}06{)azFm1q|bN*bGbB7$m+qvs6I+`U7XS5;u>j#}P zglPLWepe_C@}rFjVz19(C>{}+c+5DQv zASactqus8G%OB#cMwW|>qZL$Nq+wCJH|y1Tvoc9aCZ)i%xf_=Bb~ z$pVyh<^=<~AKiQ42CWtaTvu2N6dPD*v|?udBEh15{1*w9bvH^f7S*D)QS0vXv!7$6 z1svg`d+#$-a^iRuRjB^9<*i*GSjnU7C^H*!K=NJA;m$tNCKfwD=PZG-K?$LpEOB(n ziGIa3bZ5f|dCjibLb#ZSy?<03mUYo4R8w4Q4*QU;vvab~H8k(DVnR8u|J&^Dy(%bG zFL!3oAG@R8SW1x*nPMe~8#HyqvfB|t1l0`(RzFj_hFd>KfTx;&!L>MSz&A4S)?t$6 z=mJp6-l&tM;;^HVCK9pE^fW0VU2`3FLsTDI=Bseo%iIQoCCY47a^v?7ilAV0{vP8R z99}8bqQA*4-7>@NJJkE)!oDoX1#D)T-e5{y{TQHTU>FViJxk|m`0g9803q!!vzJ9l zj>P2g+tu;zZ0hXDm;wxF=k2C6Us;SFmx&OLjN6ITfbG&Rpn!=~+P~OHw)B71CbDG# zmVBPFx}0ELPY(Q}fxg-j)?qO#9}XW=Bp6K}Rwp6U`IjqlVyx_RqCaimIQK z*QLQfw*+yK3g1SGf!0i>sjGU^cdy35sZzM}&jE_gd=8sjUDM2Ke_vD8S{r(uZ?yjz zunmCBGSqf|NIX@9VJHOc zkAegkHE@2=MZe1F54eOcn;y@0Iu6l?W+wLZx%MXv_Tw;;1UQ;LZ2?YJt#g)TOt50? zF8nVTC^844R)q;F0YdJTj|puX3k4$niMs+FV8J|YYU+OE^)kbJ=I7B}roa!rtt{Y@ z=xg$6I}jCiIlyE|I~QU8!(J_0ljs&&yf%O>tB|9BGi%Nq1WvJkgodzSiBb7`WKwn; z&+QZPj>2THvNR#LvRO<(biZ6iGoNcFXujIOgOAv^Jjb8OoKJP&3;LG(gf->-V5T(P zGiLe$NQPf+7n%|o_K!%b>ho>C%}`EX{4v1S5M#YgI|>~ZKy3ppSoEypz08+HzV`dA zJC=KxX5Th49_mZ6DyqXHOu%a6g*7E-#3z&Lxv?AG%O7(DHA^TjTOJ6(%ySo^+I*(s zH>4)k>+K5kr`h)=%=_zI+E4EsXTk}zyIe&+pOaT0d7ww|WY0b;mR3w}JG~qBTJIWj zyIlTor($W;(+FaLQ1_WyFh^F>)wPVHLd}fCvQ^tv&cLva(MXDd+(IA*t>*3E-68(o z8&>S2Y9BlRhOrptbV1S?J4IZwoHD0+SQiSe!7t5t@H{e6toWK#hYaG68z1B}PSilc zyF?Px2TJVYoRMt)e9t3$!GWamiDaF((jgZTM_kxfG=C2&$x2_f=yipTNRQ1f$VHNK zl`e`0i84LKoJFO(fepjuoi#a`qe0vl3fTSLpq2gF@;A_DYUL+b5UYiS{fF#wVV6u| z@j@r(Kao_lm9eAS<<@vv``e#r-=T-{Zzykf2MqKx%YPjLC9E?+0**qZJo6pPt%dy0 zsgPinyvGvfn+u&{v*2`M$ff1_3$fYy3$YPyY&=2*()@}BoC>3X6!@8n0G7P#ziGZ; zN-3c2(%I{{ds9*86YP!`yDjvR)u8+{DJX8+M*E*ezs$z0LjF{lV23y+IS!3Hq%j?` zsny7oozUwA$HZstm@8za?rDQ^w*9sRD?09FT3x78qC&qlmX8WdF~}&{QhcekZtE}A z@z)%@z+l}@-8^cRDy z|IhQgD$iuTV_#&N6B3eyZ8FSprDOu^YN3;jqpj?Ryb&f~%W{XBCzXx@X2++)*>`oD z=~Hc>ZYle+(8-ZvNE*jWsrD8jO(T-4Vm9#~H8V!tVsjMXNCu=q@aD=Fl}alT4V!@~ zwcdYvEbS!mr;?+Prs4B)!vPnd<@-pXzHv^G<$>niGYL@>sgr-{3WIVZFp2kbduK1_ z;n8d+#5XAu+~CE?$Cg0PA>_6%={l42yzaM;HZz7Cc9}OWdO5orZCl}vjr%r;sOOls zaS#eC0qS>NE@-p=#MDnA!~(55*#SI7t_in;x`GUMM;!%SLj2nmz6$fPJY&* z4IpQk6}|`Iby+j}i{8g$ommW+C>A#<^kKwD{20#?2h>^kmYVNEJ3>tIuMZ#DHfuCr z;kZM+zmgh&pPLM={0S+)q-t?oscp-}!;LmJhkd98EAEzSn}rXN~p2Mw>n#DZ7yPe&#Ke5XEcP|NKj-t5KS!#jJMJ3kZc?y?< z6r#w($N;s1>eNpIm9scXcB|-m(Wor%v{x&hBl*tfl}j@d@q{E_VBfT&xZ4FvO?=B0 z{{j-+>lb=6vVgMQu*6+#DE5ZW*aRU6y0}hk0UD_sL!tv-q zttVFMw3VgV!-5C}{l`EZ?%j%={b!Oo4Ct5D5DWnR2J85oX40r?=D=Z zpP_TvS+pCT@2Rfb`R^q$a^+IDU9I~u5b(6P?+R@!RGBH)9xmSGFz;Z^3FS#l86PM? z+AZ-ydKEs^?%Q-Sy&gb}BE)!x)5tZaj*nn{)AZKY7=uz_I7^kQ@n%}@!5?rVW;&sI zxvK7fb?}zrZ<>A_{yA~T<_qusw)iGq7NSlNNuT|pX+F*MSj>2wE+>mx5{?otkkzrI znWa=+pvv@Nv=PJyfkC!?IRfswg{zV7?WOe(|9O7}ArWBHRV5&5i;f&*t)?yO`?6hU zFoo^9LD*tLOR5htCAAG(G4=mr$((KyS37;k#p}J#@j@az9RWfqI+*3^U=fSQC~Ln(vGW4yM>S?Bw73g!kZ@wRdzS~ zBoo2dTLPK&hHF9-%+Bw0crj4owe1rRY!}WF&*mWIQX$1VHVJh^>~!3zo@K5^WD=?D z7^$S(3Vxr=gjMdosq*BUt=O9fcK7FZ&=Ou2Tmz?8Tleb_G{TP9Vi!uA{lU3?GVwWIZUi8_Ls@~KXYcp|t*FmEUUB^?xcdymRCxrd21y~S)d-KAO0 zh-4dCZwlzxCVV2vIY)MaMoV)Ui1q$aehF{ql-Wh1+){)4UMj^HXL1XgRa>fbwgO>J zS;Cg4=t>4cP=g!}ID6Ohf=+p6Te*5W4|p)XFP+;*`ahR|nNaqB)9M1`toSE~WO8S| z_57gq>hI_e5I%;k6+O}7rTeTTtm|bWzSgwS6@&gfXlcI!V&F_;GY75HzdRoj|ns4Pv^-=EB@Vz z*E&5zj8rOziT4{drJ{!On?uyr5XhXIrPW*H+^NA(5Y^D`+hKNNC5Kth%S06tg;|-c zM)o1b6o`3L(bQ{9`Aa{ekGLPjAzR=A&-? zN0KinPo+i2D*76?!9atzPMJ9!yO;c|Mfz%nE$Qy(g=j@cEGMJ$TY1mfGm5z1Z2d#c zu@`tB{OwKCYFa)#aG7}k1t=L_YL&HN-6s{DGk>I1x;{44^Gwr;qE?G?)#l4E)=H*r zM-xs0%vcj|d}Gy6R^@kMsuhMWQo1ypO+-DpTrcS^Rp3ff+!c&(d#w!q)jN_zd`G@vDL9?#1=gl|)IUE&6QU_q+CK{busJxM%Fztl}g4YSgh)dEnk{ zL83L6P`;G3pFYa`=8(<1n#HbSQ?#o@v3Su>EINCtVL3?xMV{ZX8=K^K_L9SP>j^5b z4G~9K3Q8m=G+}nX^n~suRxlf_cJg3!504!dIAB?}VM}xON|seJ@?!}5_;;4X%r?=9 zv^aiwN+IyOt6f&Q5t@BwaBly6f%D#V)hI9d2DyC>joH+fkep>QMAIEuqWW#n@b9RH zE{EC!NH(uP9GjW_^pb_FNulr?o&J%`z=r|BU%cR!?bpdfP-9pVEt$lwgk>2Q``72P_BL!P`XRVZ7*Q(h&P zh*)!@n%1EtHh)8D`;L*-jqsB3;9HGXL~TrEW~tRPl`9G=;%qzQKr}`Gj}O={Kc2s z^>!(oKH6T;KESCF5OZmD?Wq_<-C$!6hE8QQlv{#_WKrKY%4az3vjbgb@@Ak7IyE3? z+kh#)UiIOS&0jrmibeRQbn0%54r50$NX4i)DME~iuvCj6iPbXG42jPHe`$-=>G)md z{)XGm8)KW#z?lG!`6IAkAMrexDl5w~?MAZuAj-$%ga9)D@Goe{OI^UwOl(O0?UFLw zSurDM39Q`tnN@WpP)Z0XKWaB~p1S7dW4;H=#yA5KO1=KxtXBzdAGX#&EJ$rOWiqhS zc?xDY6^_{}TAA79fm*W={#ezr#brE$dXZr4luA45qBSBzR8#3BCir9cv%pK$)LQ|b z2Brc8SaY9(>MdX$+hN?y{a7-IQ}FPhV48;c%C`I1vDc$rfk3odGR&B;;P6$h0-r7!Z6!ZZ8zScU1Ymm@K)QYV_l}v5&jo4 zSJCG|a~~Yi?9cpb1NN3G%M%x%sW|3~EQ^!$i5S8fs7`Fq7vsflwNKwelXK%?)cc-*z&8XXe z5zVRfsMIi~G<)b7M#u*7jb628eQF2Z*I23m zW)hVqZIeCqqU+M4pTqYl{jBogl4xlWSC{_^WH>*qQb~kMpkP}#46Wxl*O%AuV7@L=sL{=f=ws;6gZtu}hqpq( zI|qf-k9FfMn3z3Lr~!zv&d@~MJVX9a=xRH>V)?dL`h*~w-D<=e%acFxfX65^7=e?B z@=)ONnt`BF8~z9VdOdcZ#gP~ITTHzxt9QVI(FF;<&XhMAb{cg~}8x#Cy_w%TN2DXZk+ z0`i&F;_gE{7x?4A^s6GvIp2AuIu+a-R}9SQ^72OysQASTkF9t^34LMkb2xRJP@rn zqhV$$$0VA9Iofb}7+Ep3iG_n2KaEa@6U^wt6pv~jk+nEMn06m-b8|b=iBewJ5X=aB z+~OrQzNFAc*9yaRB}H086ZMf2-SA{B&Y2>l?d5~Gh>oltF%M{8G$;_2b+~UHCG>N_ zN~?ww@%%6B9-fle?RI`LbQ4!>$#rs~L0lN_D|m)e+=SR3Kb1GgoHu+#Ji%qLI zm8S)`z{we@a~;Pa+3M-FYejk@#<=^49gV+y-Nu zK`YB$UW$12jc7eik}0b`h0Uq=%TApQY`N@>H!b=I~- zYFTm!9>9rL; zh3Cxbn%Sph2R^+t!go*tdC9H}8|e?l2enoAryaDi}loNo7cg&B2)hP;TRv(nz*?;aMgh8kPP)2e?jewXbA zx(va?P3jIbTaV*9J3mV9;zJDUzC7<*h|dzp8Svrr(VFnt_zx>*uq&3iI1E_146(8> z9LCwvJ{q8-po8o%HGTXKEa$iB>)-2*3amVYP-iQhM}EJ2PiqV@04lg0cKfu^Z$pE6J-)Y`^bs)^T&kwv%(CQ`QkvU0U`Er+TSIn~iC67X_w|Y1 zPhR_7;2ZQI4VDF8C6qH&wj>cyGx>Icy#TB6{IRK^Iu6Tthzp%-{ zyH=`i{m-1Ov;`2W_vX*Z_cR+Ca}0dhvC`i-W0!KzhOg-jD(OVeq*mK;aP`R%>-pok zVcYFge)#cqog*)@o9W2<0GI#M#(BePI7fzMdb1i6Bbel7`^3+U!Dz7-Dvo*`$}GDm zT#D&nyQS~!*C_w0+#VbFIZnuP!N`*EzNmWy(jx4ekqRsYFTlT7X} z`TV=~zj>}T!EzCO2AF$3hFnaJS}x>a+#a>*44B`FNGnYhUwE&F5$ZJ(PX`3mID;^q z?@_t|u^6Sc8Zpmwi+|W30PL|c)gotR1f-)Bu_!230xy+Glp1hFD;fZ#Ua9g^M@+a^ z`G#mE?HJp4;DV+Yo>4pYlVe#Ax<@PJlu3F2%9mY+*|6{DpXtRK2O>>uy)*6tBx#Sk zbM*;>%*xC}aN})c2{Xsg+T4vQ^fd=hPKGcAjb!In-NWVWeT392Vi!6k<0l=jyN}Yc z%@coLJw8LJ!X}(&sm*`ZzW7WmP&S*_@u^Arsl`Ym8_3dbVa`Y8(RfKJ; z?L}IVtUyH?yWQ(WcbD8#Z$||Ev|@EEO66vv$2nO7tH(!t9(VqssURI|y3BOP-d9bJQKy8H`W3!OU8%%WzGvZi|+BD_Un@;v=U;1dlye>LWl>SBR)HUqsbYa&OLv-L93GI+r$sfy7D;?!?F{plQ7_#bvAsT?*MorI?L(g=TP;71Ffi37tJPL-5h9c)o33bqxjWB!TQMuz8R!yVK ziwC+DuXDlikYIW|6WWg`*hubYinV~=A4X`oy+#D4&LWH)SNT~>MU){pO~4o+s6f5q zYpvaCRUxx(BMWm^=izM3cX}`zF1a5WNMqWs(ee}Ds4DJc=9-$J+|V=3>*p4t2kP z@@>GIELI%|p#A~U>TCCh2N9+>eYMf1GQd0 zs5@G~nAB>&<3-JBC|M+QmRliKXtZ#rhVSlLCR_M2uKoV`&C{}9oj1uO7U=W9NQMTF zlW%%;o$!a*)Ip&6W`E*yAX4K))pLjz7Ea+(AGe#7(QIH#C0ixmiLXY@`Mn2$byoD) zounCVkWPpDDqCam;QpM6b&U@gO8Nlzmt7s8WzJWOZJ_59)+IyVhy*MHpTo!N^F6 zgqE8Yr430KhbFTK1R#yPNHpXOB>eVE-IajDF8KAHj8?6(gm*(=k5vgRh2C>FpG^;* z)UgS|&MfWgF?2_%tFlm#)&hh=Un^8Ut`09{j3eg44}fFgeS39mGH3`aLmr)LnMY~% z{{!f~^Y7GVwJk_kEdq!HLk1U|+u(obybqJ*moJg227&-GrN=TzDiVg9UChwQY!9TP z)TkeNjz_gI?v#X7DI~}Dl!>DQ>vKI?!uY^?icPvJX8j^9$! zGOPYuQyk6y0!tpKK-o7+_$@p6p)ZcsFOjj0m3f6MGV`0Em}^KJ%^z^CVjr>pr2FpshWl;B z+|I0(G1RKBVUh6*((_vHzaEdne*)QyYu#zjk2m_tqz~vd^ZUam2dW|JnaYQY7Tup! zRA#x~y}C3UJXmP>Q@>jl0Ic}cJ-%Syb%o<09=1F*BR%>ez_Sx_-#*8`f(D|Q8~6bi z9^{P}E>Cl(FIIqo7S8)_#7p#4~ zTBfZfI>uk2+7i|=rMS#zS*pV^OYQ4kfWlyz)+hsFBb&lVQVnac6e{T@)X$9kO`MPT z)lkZwB?5(_m`ly(H}Q`n-`bpKK6ElSA}5Q$^#HSn+$qF!o{HzB{{axCQ2aTL7M^}` zILCjCa}LZ>tY^RS<5MwaPh!D7l?K!P{qcldF^mWAyU#0 zBVT0{A$Tk$SSG%xXd_nkhP1YS2J#+pO6Mf|zj4Z1#s7g*_M`ba(`Wbf_!libimv{P z*y0NS%R{i7n5_00-fTRg$GGbV48YPdmT2og@b$o6B?Fp>(3xm*>DMPMkw>_FzK6qi z_cu;@(6@Uh9RtG;?nivS$xH6VS=6s!UWI6TNxa>Oi#(j^Hj^*UTdyjdbPv6WGYsoB zC%`a+m`Vg(;FG?}Y<%vPvga}Ej`z+hRP{zQ!mc{_N=3ia^V2E*hHl~cQ`sn^tpuvCv*)x247^uTCa;g zliv^0mZYp3P<1)kT}wdTQ$lI zRd@22zC|XADfhDYq}pU6vdxkdMyb;DQNM9mr;)%QXQ1E0UOd_PEYA+qEoNJSh3nbEYMqT zuxUw1So$f5CP?iL!w^)WE(aqmtd;!iX!cDzjh)e~bz_O-0PcIxOqPZIeBir*M1pr| z7!@Z(_?f-%G!2=#pRnJWsUSa-`fT$Dh9U5+6gD2hgx2Ljh%32gmRSvaK=c*=$}8hS zLcz|qfx_6slF%gI3^1Yqp8N!HWh$9Mc$88+an!PM9Fl4khALGtu5HU}J?O(K=IttO zz*89`Ij{7T;nBSgf<8~#n94C4cqp!qLB24+VqQWA^?o@D?d>b$1%gMWZ-8CJ%acMZ zZq2m)Og&%3|IK9n1L4~}8)%dcp!7mFtKD*xRrM27?z6rRsa2Woo&~YKXSWY-g#KZo zp>jmS3#Tu7Y)fMeXVE(9*>CG$Kp%<}xI`e&s2@r&TwG%(JgTs+#X8w(6g0 zVP_N9Vy_8%SqY)|@jmh5MT0Zq|MFrTZ5@p-=zB>kr8h+YnuRZKE5^68HMACI4%_^^ z{LKS>XT$qD&SAR?^_HTYo^g*N(>rJ8?rqJ*p;&bL{mIzD^a|~utoC(6S^$o_M+;&d zN;4co3eRWPIA~n-j#31Ep4M$~QK5WZU~GfSIB^??W%*Qv5p5B*QhSds8)9AKPa64> zejry$)X`#&ym={|68q7u0yk&Dsbdkwx_T-IeMT)I%7>g@7zs~mqP<%7I2gNnwd9kL zSr5nIum=l-q1P14&~FI#u7TA33nu~F*Y-grqo>D$)>2a8AQ__KRM>iPmL56)uS;ev zko}gxzwY{G9AST@+tGnsVPGr2IdtxeDHh}Iig-hUNdS(=Y7$gR>81{&Go|d1Ub{1- z*XwYx8F8Hfziz?Jqu}ap;bXI_Vc%SN@tL)qgROlM?W&Sn9<7~h-|&*#EB)Jr>g#&P zl`aQ)S5`YFOOx@4#w!a`1(X1t!SX%tmS-@n?5*4B9(C5kk5gtdIc?CcHj3(7rc8Cezx_(0A&MJlf^8{H8y zy@@bXe^h|RLl*b273(oDoWbW-M5dJI)?$+{GKbVV@rSmIydzHTIPvw@Mk>~HNt*^V zoidGPK`{S2nMF|^g3ooVSoFJhFFRqeVD5-Z@z84etZlilV~4I*7;$x?NrA{fonf)m zJm9|#OjWj80eZs^d98VJ^iC`H$f|c>Ad}0*o$m7rLnx}i+CHaK$QX!IsFkpc$pB+p zg=z^LcJ~$Eg*s>9?XXtLU`V-RgP?l^bTcMjnb?EHQEiI%Gm-iJiW$#(HKX4A_3X>x zkIk={1`l_aYBh?=4%fbzsZ)hwtxld(kAL3R?KG-3s$!Lbbl!~5)gM*+8FZk2ouGRA z)|)awS*ejH5TX(gft@K_*Qj0y(Znql_dLvFC+0gqjyueomoS{@*n8iVLK?->VpP1p zy}hId_NG{KUwLx+ofHZ+6mLj4;*D$vbFNc(>tB`26;&%0Y9t!w4UW3QH|lkv ze8!K)F8cJWe)0JA6sZV`eB))VV}?ff{TA|@8y#{uPtQXbeZI~DCatCdo{Js|f>v{Q zm}4U!h@^L4fPJ~4OO|HI%tu2NziMWmtSf^I&3>aD@t|WR`|Gcq82ZoZAkYPcrRyUf z&kGp3%`GktkIk4GifBmBYa?p%#yH}aFG}#dC4RAJ{=r`SuE|mVFnexPG;!N^aJ=58 zQ1+E5nMvuE(y2ibo70Prmz#R84Rs2kgPn^G2}@}uV$sut5*y)Jhw!gh;?)5bBvugXY}MpJ`$2rMIjl-zy7@!ACLjL^IljN82R||Rjlzd#utga7V567G$R%P z0WaX6_Oro?34ET2e1WrA-;zPBZN8jp;)oO!Lz9t$rvI#{?%CLMPR={i(b^#S)f)4e zy~!(lDMY@UCAb13`0}S^$l_?5Df(9fn9@X{JkDHX{-?xfDKL&VEF$s673uivh-XK< z_vUaL)dCGF6?P*ZC(W@KOZexK_(pCShCgmFp5?Z8cZ**4XsRS zRwQmet+R)Q_@3UA9!*x7^rnS-+*-#vnx*sBcfNZc{Jic^R^t9LI>H190loCO&0jo4 zd-AmJHQd?|Y#%@KZ@S75c(jmAxJq$)-YU^3WAzXw-$A6x5EM}~r{|BSlPQq>ZIPTV zIGrlG1yEvic-~0*SMP%v-dlAMOcZ=wr(}tGL?#XPmn_j?QQi+{oB;o*y-8 zGhmld{_TUFJj;7^R7^aU)$!ccXn}+4dw-#PzOkNRUe^^rnE*(rELdJ}pqf~?9#ERC zp{4p#><+R&MxGBOQ=JrD**QgbJEG#Tk$aY>X!k+lCw}(D{5v!~~djJm7Q&CUl z252v<$W(_omdW<0L3mcI6=Sc}^%GXoQr&>$jX2|g;kjw2uMP_e%B+oFNs&9a`ApP1$h}P$hGX!Fdfo@FczW5Z zhmh>7Dm@OBO8WWrnX(dlQ7h8@;86j5B=)~u3%?{m0nWoh8P_E1tGFH zhG%0ekXe}}ZofkY_rdt&mYlUU{cMr9NdNZ5Phc9~{!!+8&%p5QplOqkqb=Q|*{9mA zyDQyQ;>Fb!i-|i(j8SVc3TZ(l-K`qFAeWH1~YvC2e%Vjiud{6oh zDlP1WwkyWh2Mvc3lw3!_^fnAkN2WycnAwp1Ifr$Z!;vu7d!ZmJvhL~4k4WI35ixLi zZGpkTSw2HiI&-J6;jPFZ-2Mvo-!6ndG+r66^pluOB&IYkJWlh8p?6h1P!U4+giD#r zUCUZ8l)WYCIR{tq&7o9>5Jem7NY{O}s)En4MG7*J(jwvbnW+s9b*b8JaPe)$p5Ha< z_ybUg@-!RlN5Eit+_>hz^@lA;AKL0#?E?8H1Gd+dC%3}hNQdPfOLrIYRYemNH~K6f z8q5cUkaKJDge|JYvDU?3LdB1+NVdsej;Ic`R+A6)^*IoM&Q`f-^h7z3M69f=%=Z#t zVC3fLK{qm$O1B7?H))#VXsFn+Z^1sFOpEP&!GQxfM$uTr&XuS#2Aj^tgx_6~8WMtVnO`&0@A1(=s%@XGAcF)Wqn}JwzbMTv~q)& z`RBQ%mJa8|03#(cP+6y53W0>86KW?WK?wn~P11dNKl7!-VHnN&{iF{n=J)Vku2gX@ zm-BH4p?r5j8!$R`n7wI3J)LQJ*k_`7%lB_jBK{EGVK@derLvJ~HW!G>GqP~0oY7p% zYLfvF3>VF<_V8*TooDI2#(Cp(UBz_PJAaEeZ^K8b?&cs&_U7MYV=yrZwSqvtr{H>@ zpNY;-K)2fG1-fmYAR?@N!E*q{)D-meQIAQ%=!1mZ=8he~>nlqL4WCdVUnC;qP0CN0 zDi(^Z=GmKg+(NO>c9)huYM>mkqB^`tbXal%MQ|IzR7d1Woqs^$*{v*A!G# z;zWBDOC{xpeF^eZI=SWPS0?X;1O;VM1KEq5W>e?lZlo8lIB7x&l+4ttdyw)B8@r}4 zo59upmCmP7af$CZ7<8X*V%cr?R8&k@??F%-MOCOpVeYA5$`1kU{# z--m9iid1f!B*2#m7`2~ko$XHLlc%|UPJUPSb)BJu^QJ^{_gIO?X0v~y6{LuZaI{a# zHQK!i;n<(8&IL*|Q)mcQi{xRcM&XrW0H36=@Y(OHwI$wTyfj zaM>LGu}rE^W*<*(i*T>Zi-<{`;ig+9h*7?vvWdkm+vI#!St*~N`?%X4z1;)r`11;a z^kD5i%ZGDyO7&`LE@(UY?70@cr2fq6>y1QyY`bSem{`cFC-p&qUA>)BFMY`l7&lB^hY6v^V>-e%%tLpO%Z0uaKNEx9m`$gqEGJgG4 z7vXvzMiUX6&U~M>eenoBrYGFLtuVbZ-lN5MBT38Ecx>P#`-2g?DHD}lb#;^cXze@T z+L;`;u^!(bcax8J0$d~g>+KG|cNB)N_4FiR|I|(qV`R!SW=I_yFIA71Yxk{pCJVfz zj*@D=Y>dJ#C&Seiwm-&s3AAa-D`86HR=$k`h|()9^rn^HwC<#7yF>BWyzLKXvW2NG z^vk*8C{b`qFUt{7mAyl$!;h}WtgSU6JF57EPW;u%Woa?d$-Bq&KZ!{Z@sHOQWn5!3*~q?lYgEcY^1=nuOqP*-XWzam$)^{hp>; zedQLNos`Ri+retJ|7U?N% zZAalS_bj7~>Di*Qs?yTSlmxOB^EY=L0mQVuDmgF@r(+N8WsBOCVs8-{X2_+3OS`V8 z+bi;|vxS)~G?oRMvc-(4j;!8yH$ty>Pp4Wit8vOix29T%pkAjPZawHf7vUJhg*7?!>+!%AGMFa|N8OQ82x6JvYqakeWmniCX_c(Mr} zRa9ImdUoACwcTvywjeqj-S@R?e@M)wS{hTo5$DD*l#MFfjS#Wy+-2fB{QCJduwpNW z{>0ihLY7ZsQa*r`r$MW|r02|Xe2FRqnpb&VM<~Zik+L`9U`4|2anQKaLGbU(%r}qs zxB@EVQwTL82H42p3?$HNrneV9400Ui6t1{pH-`!$*?mo2<+=RhrgmE9Q9gFCqCI>} zc&7YNYg(a+MxMgzK&V(K=g8dy@c9@>=NppI+-bezVI#!yGp|OHz!9TE3>nVs4^!0L7g1B9YBzLx#EBjzGJxkkJI} zZFCgJ?{&tjk11&|y%`uVhp*3ek^8L4hts3a&C{v7x4OJdTR7jJ>Me!RV~OhVfX32d zk`l$*wjXb7yz_<8T+(la(twJF;)?|CGEkU`kt2*FH=6Xwz7COK1)Bzc`|n%pUoiZi zBbVD!iEg^|KKFUt_H?yJ&s|f!e=n@cB~xrDxjv7@c3;2yee67j^|ij7QJ!2FE^`d^ zAc{hK-*^KSt(F8(BP)7KuczdMv}li$%idO*i5M?miy1o|JFRv~Q`k*X)0FO6v6z(Q zov@;+MlPR-Nrfzr)!_R!f)L*-gO8BJ4w%J{fc1%g__V9(? z>VE!e_T0_XJuT%yo9`(U(}2UlT^g?)yN4q^Uznru#%44v?5jwmHOpVuY#lG|4F;70 z+NPWV#lDHbV~v;shj^~MxXi_MC{eF>D6PcvWdayJ;eBYW&%bTq6U2yfU~rWGyq8Xr zh>D8({_O*ljHJ8PAW$?X-HKH_viuqN4c6^#TcP+OCIfKslm zdIAT4Yo^KIe4VhYnhG%-LsB^`ifSZ%APdrH1RG=fbH+U@qrHG6;?-RjiKVA&P@*F5 zP#lTUdlYZt?8B?0fB&cWo_O~&2kX5?|3JAz81~`etLxGt*D2szCR=-B>cWzkEQ&70 z`6HK&G#YKiT$-a+d)KM#Uw&_3{Lp8>rcR=VLFmlqU-M_>(P6YV^#MG?D9(uJcu%lu z1kws@Yz>1J{rOhRGnA$VVUO35aQ?r#t~4B~_77Jt6^cqo5>mue!jPEP9)-p-%-Cg& zHA`g=k+tk(UnUvbkag@^vKxCs8f1vbDirtzjMy>-1q%k zZud{)Bo>ieJJ83ER7}(_d)%L25!a8rgkPKYTCS~vS3nu~mgU@2`JBt42O8%v zU2YNhDcQQ9YHl+=1OOz+LjBDAS4-nKsnolON=d}h3F-m&@wo$-oguCqpp~!w8^Z=4 z(&?DTOQ-ZI?2S|slhXa;{kcV-^vOzk?i8hR791N*jF}cmp%X!pc^E`IwwE(an}P%e zS4Q#7&a-`*3c{|-m-IiF`ppQzgFI*2gSZMZOE;Y2BOr`&tt0FT>zMQxVnL#29MBx~ zn+D|>%3NM*98CW~y1QMhYQCWrW<9oYtp-w~?0fI7wkNDz9&p{)V8aCa;k&-jucXZn zuB7SV2`q%r9&+?j00;F22gY+mPN^?fCyy1(D^{2qDlJTlPEAcsDBsi2NwIU7 z?{jivljHDzJW0ubETHj*?o4mb=hFhTeCHDX`b#4&&%I!<-Q? zff_r~ofxQnimA9xWYzOcCY#@C{aZT7N%H+jGJR%twk9ArDr1JJ0j4J#IvX;I&2k>R zxqi(RiDbQ28#hsMl|YloK9C*qOW(kKe81EklwK+a_997J#MsXBKNkss)+w|^FQacV z8EQ?TZ0u79D>IR?;TJWp97D>9OZ3nu%6P}O{J~> z$MZ)IGX@yw1BV@ z`;!b*?D@xJ@984N2v*lC(i;Ir$DR}MzJkDh^-BvvlKpu`HvUmFIcU7KWH0 z)}g!jb5EB(>~8W}e`@Z~?}HR>Wis=ZhZu!aarL`88okwaK- zrms&E35Y5<*a-bjF!pZ_o2Y}i(itKZu{yX}$Kqpw{LLF|T)PEXQxCSsJX{9WxV$qi ziapi>RKB#srKjR~w;-`y*9zfp97%3h2x9E7_wtw2)*xVHNmMTfxn6bjv+ z9^mVqp!F8GQfnHUYi0o{4C)5Wa~}taTiBlR2W0JhS+xDXPKp(hx&f4=x zbeNG>$qLXXecU(eq76U$EDu0%q1nIkfk-cdVH$E}jLz36_dh}gZyHJnl|8j}f%xcMa3 zp(64aFpp2xcQ1HBYnR2{#1u0}RHA278Lzgop!q79>V9L^rTK7u08R**( zmr0s{d6~@l<#&$041!Vtb7zjx+z@EL!OVQ|jtS`*Ub%M}9UJ_!f-1vOg0*LbN6 zq7FUHB_7(?NMEt8HL&)5%e#3<9eBzyW_GKie7%2B_~$>5tkG;FGxKRED$;a7G$nY| zpA;Hwze~UvX2eV_egIl-t{(3Am=nS}8FS-!{+?B;u0U}!pW$Y$^ty93xYl_gnFUa7 z_8GjrcGEP^D{ zgZnMy`*5uMrs7-8!u@@Q7%bMl(md%#`wiVlI55Z6DS3#6C0<#$CwL%lY>u;MaN1gA zpXckjB~o1(aafLEu^zF93O~a*&?0*2wXls|*LzTmVDx*^ZJBFtYYAuVkXb4AOQKgH zUte>$Qlhvz>-|HMDT(@8&iH^T&fgBLUr?&sE?syE#XhrGM&{;2@rRCi2O%iszlEBi zsQ3?Gk!781Sr+we+8#SSW=XwhL4KrSoS=?MxYp?MhN~#C$fJnuDE6xEWKG)71h%(^#+c+G_hM8V+-hKBIkw*AClwg47lws=LlWZ`&9$z|6vO4-5ozs)}xjI_)Xmy@W^=0%6jTkw{QNdbk$c_UM5ew$*&HUis@*lKqPcHl+Rr>Mn)VZqxG3Uul2hVI z1K+93|Ed#@&+1mKdsVLmazJrz$-T>C9#$_TsOGU`8`QuRyE0yv$j8YdisdtLUv>pb zjQ=*Txph*6hs2`s^vsc$N3NvNi+~**4e5)pS}I$*`d1G9Z5FD5_cPwxGs;npF21pFS{gDV!uKl1$t45fj- diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 65a145ea..11aa2a9b 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -137,7 +137,8 @@ def forward(self, inputs): rqvae_loss += self._loss(codebook_vectors, remainder.detach()) recon_loss = self._loss(embeddings_restored, embeddings) - loss = (recon_loss + rqvae_loss).mean() # TODOPK mean? + # print(recon_loss.shape, rqvae_loss.shape) # TODOPK + loss = (recon_loss + rqvae_loss).mean(dim=0) if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() diff --git a/modeling/models/base.py b/modeling/models/base.py index 07c04fef..937f9fd5 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -109,7 +109,7 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( # TODOPK why inverted? (not 0...n) + positions = torch.arange( # TODOPK invert decoder (position.reverse) start=seq_len - 1, end=-1, step=-1, device=mask.device )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) @@ -123,6 +123,7 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + # embeddings = embeddings + codebook_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -135,7 +136,7 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): embeddings = torch.cat((cls_token_expanded, embeddings), dim=1) mask = torch.cat((torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), dim=1) - if self._is_causal: # TODOPK causal? + if self._is_causal: causal_mask = torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( src=embeddings, diff --git a/modeling/models/bert4rec.py b/modeling/models/bert4rec.py index 273e1da7..40f1d331 100644 --- a/modeling/models/bert4rec.py +++ b/modeling/models/bert4rec.py @@ -81,7 +81,7 @@ def forward(self, inputs): if self.training: # training mode all_sample_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_batch_events) embeddings = embeddings[mask] # (all_batch_events, num_items) - labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) # TODOPK change that it accepts semantic ids (what is nonzero) + labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) needed_logits = embeddings[labels_mask] # (non_zero_events, num_items) needed_labels = all_sample_labels[labels_mask] # (non_zero_events) diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index ec5221dc..061ea1d0 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -102,7 +102,7 @@ def forward(self, inputs): k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices.repeat(4, 2) # TODOPK + return indices class SasRecInBatchModel(SasRecModel, config_name='sasrec_in_batch'): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index dddaf8d3..9e388281 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -53,6 +53,8 @@ def create_from_config(cls, config, **kwargs): ) def forward(self, inputs): + print(inputs) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) diff --git a/review.md b/review.md index 4516e347..379c4656 100644 --- a/review.md +++ b/review.md @@ -2,24 +2,32 @@ ## Todos -- check TODOPK -- у нас авторегрессионный next item prediciton? то есть: +- next_item_pred / last_item_pred (какие задачи учим и как именно) # can be both tasks +- предсказываем item = предсказываем 4 semantic id? # yes +- как составить датасет для обучения # (map item seq -> semantic id seq) +- берем правдивые semantic id # yes + +- у нас авторегрессионный next item prediction? # no (teacher learning) + +то есть: 1) items (10) -2) semantic_ids (40) -3) prediciting 11th item (next 4 semantic ids) +2) semantic_ids (40) -> (1, 2, 3, 4) +3) predicting 11th item (next 4 semantic ids) 4) if single - ok -5) if several? -6) if nothing? +5) if several? -> dedup # let length be 5 in rqvae, dedup -> 4 + closest by dist +6) if nothing? take all by longest prefix (closest by L^2 / COS / dot) + +encoder -> (b_size x 40 x emb_dim) +target -> (b_size x 4) [(1, 2, 3, 4); (29, 6, 7, 4); ...] +decoder: (bos, 1, 2, 3) -> (1, 2, 3, 4) # causal mask so (bos -> 1), (bos, 1 -> 2), ... + \___ learnable embed - posterior collapse (как будто все сваливается в один индекс в кодбуке) (fixed eval code) - обязательно использование reinit unused clusters! (mark) -- в Amazon датасете пофиг на rating? получается учитываются только implicit действия? -- TODO какой базовый класс использовать для e2e модели? (LastPred?) -- TODO имя для модели (tiger) - -Почему одинаковые длины? -![alt text](image.png) +- в Amazon датасете пофиг на rating? получается учитываются только implicit действия? # байтовый датасет (любое взаимодействие) +- TODO какой базовый класс использовать для seq2seq модели? (LastPred?) # use encoder from SequentialTorchModel +- TODO имя для модели (tiger) # tmp ## Links From 0ab69ddf970bec5976d994322db1f8487a4ca7a5 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 30 Dec 2024 15:01:34 +0300 Subject: [PATCH 019/175] add codebook embeddings --- configs/train/tiger_train_config.json | 1 + modeling/dataset/base.py | 16 ++++++--- modeling/models/base.py | 50 ++++++++++++++++++--------- modeling/models/tiger.py | 39 ++++++++++++++++++--- review.md | 2 ++ 5 files changed, 82 insertions(+), 26 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index ac332d8a..04c76b30 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -5,6 +5,7 @@ "dataset": { "type": "rqvae_scientific", "path_to_data_dir": "../data", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "name": "Beauty", "max_sequence_length": 50, "samplers": { diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 1eee92ff..b7c8ef70 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -1,4 +1,5 @@ from collections import defaultdict +import json from tqdm import tqdm @@ -710,7 +711,8 @@ def __init__( test_sampler, num_users, num_items, - max_sequence_length + max_sequence_length, + semantic_id_length ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -718,6 +720,7 @@ def __init__( self._num_users = num_users self._num_items = num_items self._max_sequence_length = max_sequence_length + self._semantic_id_length = semantic_id_length @classmethod def create_from_config(cls, config, **kwargs): @@ -789,6 +792,9 @@ def create_from_config(cls, config, **kwargs): num_users=max_user_idx, num_items=max_item_idx ) + + rqvae_config = json.load(open(config['rqvae_train_config_path'])) + semantic_id_length = len(rqvae_config['model']['codebook_sizes']) return cls( train_sampler=train_sampler, @@ -796,7 +802,8 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_idx, num_items=max_item_idx, - max_sequence_length=max_sequence_length + max_sequence_length=max_sequence_length, + semantic_id_length=semantic_id_length ) def get_samplers(self): @@ -818,8 +825,9 @@ def max_sequence_length(self): def meta(self): return { 'num_users': self.num_users, - 'num_items': self.num_items * 4, # TODOPK - 'max_sequence_length': self.max_sequence_length * 4 # TODOPK + 'num_items': self.num_items * self._semantic_id_length, + 'max_sequence_length': self.max_sequence_length * self._semantic_id_length, + 'semantic_id_length': self._semantic_id_length } class RqVaeDataset(BaseDataset, config_name='rqvae'): diff --git a/modeling/models/base.py b/modeling/models/base.py index 937f9fd5..ccd02ce7 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -80,7 +80,7 @@ def __init__( embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value # TODOPK embedding_dim=embedding_dim ) @@ -98,7 +98,7 @@ def __init__( ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): + def _apply_sequential_encoder(self, events, lengths, add_cls_token=False, add_codebook_embeddings=False): embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( @@ -108,22 +108,18 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): batch_size = mask.shape[0] seq_len = mask.shape[1] - - positions = torch.arange( # TODOPK invert decoder (position.reverse) - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) - - positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) - position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths - ) # (batch_size, seq_len, embedding_dim) - assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - + + position_embeddings = self._get_position_embeddings( + embeddings, lengths, mask, batch_size, seq_len + ) # (batch_size, seq_len, embedding_dim) + + if add_codebook_embeddings: + codebook_embeddings = self._get_codebook_embeddings( + embeddings, lengths, mask, batch_size, seq_len + ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + codebook_embeddings + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) - # embeddings = embeddings + codebook_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -150,7 +146,27 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): ) # (batch_size, seq_len, embedding_dim) return embeddings, mask + + def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): + raise NotImplementedError + def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): + positions = torch.arange( # TODOPK invert decoder (position.reverse) + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + + positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) + + positions = positions[positions_mask] # (all_batch_events) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings, _ = create_masked_tensor( + data=position_embeddings, + lengths=lengths + ) # (batch_size, seq_len, embedding_dim) + assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) + + return position_embeddings + @staticmethod def _add_cls_token(items, lengths, cls_token_id=0): num_items = items.shape[0] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 9e388281..56a68a0a 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,6 +1,8 @@ +from utils import create_masked_tensor from models.base import SequentialTorchModel import torch +from torch import nn class TigerModel(SequentialTorchModel, config_name='tiger'): @@ -15,6 +17,7 @@ def __init__( num_heads, num_layers, dim_feedforward, + semantic_id_length, dropout=0.0, activation='relu', layer_norm_eps=1e-9, @@ -34,6 +37,12 @@ def __init__( ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix + self._semantic_id_length = semantic_id_length + + self._codebook_embeddings = nn.Embedding( + num_embeddings=semantic_id_length, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim + ) self._init_weights(initializer_range) @@ -48,18 +57,17 @@ def create_from_config(cls, config, **kwargs): num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), num_layers=config['num_layers'], dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + semantic_id_length=kwargs['semantic_id_length'], dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - print(inputs) - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) - + embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths + all_sample_events, all_sample_lengths, add_codebook_embeddings=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) if self.training: # training mode @@ -104,4 +112,25 @@ def forward(self, inputs): k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices.repeat(4, 1) + return indices.repeat(self._semantic_id_length, 1) + + def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): + positions = torch.arange( # TODOPK invert decoder (position.reverse) + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + + positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) + + positions = positions[positions_mask] # (all_batch_events) + + positions = positions.flip(-1) % self._semantic_id_length # (all_batch_events) + # flip so first item has (0, 1, 2, 3) not (3, 2, 1, 0) semantic_id embeddings + + position_embeddings = self._codebook_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings, _ = create_masked_tensor( + data=position_embeddings, + lengths=lengths + ) # (batch_size, seq_len, embedding_dim) + assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) + + return position_embeddings diff --git a/review.md b/review.md index 379c4656..242aaa95 100644 --- a/review.md +++ b/review.md @@ -2,6 +2,8 @@ ## Todos +- max_sequence_length (TODOPK), why +1? не смог найти где дописывается в батч сама длина + - next_item_pred / last_item_pred (какие задачи учим и как именно) # can be both tasks - предсказываем item = предсказываем 4 semantic id? # yes - как составить датасет для обучения # (map item seq -> semantic id seq) From e24e0a9f47f634f51879ed846289ea3595b92768 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 30 Dec 2024 22:13:41 +0300 Subject: [PATCH 020/175] draft seq2seq model run --- configs/train/tiger_train_config.json | 16 +- modeling/dataloader/batch_processors.py | 14 +- modeling/dataset/base.py | 140 +- modeling/main.ipynb | 2710 ++++++++++++++++++++++- modeling/models/tiger.py | 189 +- modeling/rqvae/rqvae_data.py | 2 +- modeling/trie.py | 41 + review.md | 12 + 8 files changed, 2948 insertions(+), 176 deletions(-) create mode 100644 modeling/trie.py diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 04c76b30..17441ba3 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -42,11 +42,10 @@ }, "model": { "type": "tiger", + "trie": "../data/Beauty/trie.pkl", "sequence_prefix": "item", - "predictions_prefix": "predictions", - "positive_prefix": "positive", - "negative_prefix": "negative", - "candidate_prefix": "candidates", + "predictions_prefix": "logits", + "labels_prefix": "labels", "embedding_dim": 64, "num_heads": 2, "num_layers": 2, @@ -69,10 +68,11 @@ "type": "composite", "losses": [ { - "type": "bpr", - "positive_prefix": "positive_scores", - "negative_prefix": "negative_scores", - "output_prefix": "downstream_loss" + "type": "ce", + "predictions_prefix": "logits", + "labels_prefix": "semantic.labels", + "output_prefix": "downstream_loss", + "weight": 1.0 } ], "output_prefix": "loss" diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index ddf6c92b..2c3948a2 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -58,6 +58,9 @@ def __call__(self, batch): processed_batch[f'{prefix}.ids'] = [] processed_batch[f'{prefix}.length'] = [] + processed_batch[f'semantic.{prefix}.ids'] = [] + processed_batch[f'semantic.{prefix}.length'] = [] + # item_ids = list(itertools.chain(*semantic_ids)) # length = len(item_ids) # sample[f'{prefix}.length'] @@ -65,14 +68,15 @@ def __call__(self, batch): item_ids = sample[f'{prefix}.ids'] length = sample[f'{prefix}.length'] - if prefix != 'user': - semantic_ids = self.get_semantic_ids(item_ids) - item_ids = list(itertools.chain(*semantic_ids)) - length = len(item_ids) - processed_batch[f'{prefix}.ids'].extend(item_ids) processed_batch[f'{prefix}.length'].append(length) + if prefix != 'user': + semantic_ids = self.get_semantic_ids(item_ids) + semantic_ids = list(itertools.chain(*semantic_ids)) + processed_batch[f'semantic.{prefix}.ids'].extend(semantic_ids) + processed_batch[f'semantic.{prefix}.length'].append(len(semantic_ids)) + for part, values in processed_batch.items(): processed_batch[part] = torch.tensor(values, dtype=torch.long) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index b7c8ef70..ee81fe90 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -702,132 +702,60 @@ def meta(self): 'max_sequence_length': self.max_sequence_length } -class RqvaeScientificDataset(BaseDataset, config_name='rqvae_scientific'): +class RqvaeScientificDataset(ScientificDataset, config_name='rqvae_scientific'): def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, - semantic_id_length + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, + semantic_id_arr ): - self._train_sampler = train_sampler - self._validation_sampler = validation_sampler - self._test_sampler = test_sampler - self._num_users = num_users - self._num_items = num_items - self._max_sequence_length = max_sequence_length - self._semantic_id_length = semantic_id_length - - @classmethod - def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - max_sequence_length = config['max_sequence_length'] - max_user_idx, max_item_idx = 0, 0 - train_dataset, validation_dataset, test_dataset = [], [], [] - - dataset_path = os.path.join(data_dir_path, '{}.txt'.format('all_data')) - with open(dataset_path, 'r') as f: - data = f.readlines() - - for sample in data: - sample = sample.strip('\n').split(' ') - user_idx = int(sample[0]) - item_ids = [int(item_id) for item_id in sample[1:]] - - max_user_idx = max(max_user_idx, user_idx) - max_item_idx = max(max_item_idx, max(item_ids)) - - assert len(item_ids) >= 5 - - train_dataset.append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[:-2][-max_sequence_length:], - 'item.length': len(item_ids[:-2][-max_sequence_length:]) - }) - assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) - validation_dataset.append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[:-1][-max_sequence_length:], - 'item.length': len(item_ids[:-1][-max_sequence_length:]) - }) - assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) - test_dataset.append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[-max_sequence_length:], - 'item.length': len(item_ids[-max_sequence_length:]) - }) - assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) - - logger.info('Train dataset size: {}'.format(len(train_dataset))) - logger.info('Test dataset size: {}'.format(len(test_dataset))) - logger.info('Max user idx: {}'.format(max_user_idx)) - logger.info('Max item idx: {}'.format(max_item_idx)) - logger.info('Max sequence length: {}'.format(max_sequence_length)) - logger.info('{} dataset sparsity: {}'.format( - config['name'], (len(train_dataset) + len(test_dataset)) / max_user_idx / max_item_idx - )) - - train_sampler = TrainSampler.create_from_config( - config['samplers'], - dataset=train_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - validation_sampler = EvalSampler.create_from_config( - config['samplers'], - dataset=validation_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - test_sampler = EvalSampler.create_from_config( - config['samplers'], - dataset=test_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - - rqvae_config = json.load(open(config['rqvae_train_config_path'])) - semantic_id_length = len(rqvae_config['model']['codebook_sizes']) - - return cls( + super().__init__( train_sampler=train_sampler, validation_sampler=validation_sampler, test_sampler=test_sampler, - num_users=max_user_idx, - num_items=max_item_idx, + num_users=num_users, + num_items=num_items, max_sequence_length=max_sequence_length, - semantic_id_length=semantic_id_length ) + self._semantic_id_arr = semantic_id_arr - def get_samplers(self): - return self._train_sampler, self._validation_sampler, self._test_sampler - - @property - def num_users(self): - return self._num_users + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_config = json.load(open(config['rqvae_train_config_path'])) + semantic_id_arr = rqvae_config['model']['codebook_sizes'] + + scientific_instance = ScientificDataset.create_from_config(config, **kwargs) + + return cls( + train_sampler=scientific_instance._train_sampler, + validation_sampler=scientific_instance._validation_sampler, + test_sampler=scientific_instance._test_sampler, + num_users=scientific_instance.num_users, + num_items=scientific_instance.num_items, + max_sequence_length=scientific_instance.max_sequence_length, + semantic_id_arr=semantic_id_arr, + ) @property def num_items(self): - return self._num_items + return self._semantic_id_arr[0] # TODOPK? @property def max_sequence_length(self): - return self._max_sequence_length + return self._max_sequence_length * len(self._semantic_id_arr) @property def meta(self): return { 'num_users': self.num_users, - 'num_items': self.num_items * self._semantic_id_length, - 'max_sequence_length': self.max_sequence_length * self._semantic_id_length, - 'semantic_id_length': self._semantic_id_length + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length, + 'semantic_id_arr': self._semantic_id_arr } class RqVaeDataset(BaseDataset, config_name='rqvae'): diff --git a/modeling/main.ipynb b/modeling/main.ipynb index e03fc168..57fe551c 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -34,22 +34,2698 @@ "\n", "config = json.load(open(\"../configs/train/tiger_train_config.json\"))\n", "\n", - "rqvae_train_config = json.load(open(config['rqvae_train_config_path']))\n", + "batch_proc_config = config['dataloader']['train']['batch_processor']\n", + "\n", + "rqvae_train_config = json.load(open(batch_proc_config['rqvae_train_config_path']))\n", "rq_vae_config = rqvae_train_config['model']\n", "rq_vae_config['should_init_codebooks'] = False\n", "\n", "rqvae_model = BaseModel.create_from_config(rq_vae_config).to(DEVICE)\n", "\n", - "rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True))\n", + "rqvae_model.load_state_dict(torch.load(batch_proc_config['rqvae_checkpoint_path'], weights_only=True))\n", "rqvae_model.eval()\n", "\n", - "ids = df.asin_numeric.tolist()\n", + "ids = df.index.tolist()\n", "\n", "embs_dict = {\"ids\": torch.tensor(ids).to(DEVICE), \"embeddings\": embs.to(DEVICE)}\n", "\n", "semantic_ids = list(rqvae_model.forward(embs_dict))" ] }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('7806397051',\n", + " 'WAWO 15 Color Professionl Makeup Eyeshadow Camouflage Facial Concealer Neutral Palette',\n", + " (13, 66, 216, 169, 0)),\n", + " ('9759091062', 'Xtreme Brite Brightening Gel 1oz.', (132, 120, 59, 169, 0)),\n", + " ('9788072216',\n", + " 'Prada Candy By Prada Eau De Parfum Spray 1.7 Oz For Women',\n", + " (250, 134, 192, 152, 0)),\n", + " ('9790790961',\n", + " 'Versace Bright Crystal Eau de Toilette Spray for Women, 3 Ounce',\n", + " (63, 173, 70, 37, 0)),\n", + " ('9790794231', 'Stella McCartney Stella', (58, 80, 40, 27, 0)),\n", + " ('B00004TMFE',\n", + " 'Avalon Biotin B-Complex Thickening Conditioner, 14 Ounce',\n", + " (38, 178, 162, 34, 0)),\n", + " ('B00004TUBL',\n", + " 'Better Living Classic Two Chamber Dispenser, White',\n", + " (226, 59, 24, 116, 0)),\n", + " ('B00004TUBV',\n", + " 'Better Living The Ulti-Mate Dispenser',\n", + " (174, 189, 124, 99, 0)),\n", + " ('B00004U9UY',\n", + " 'Crabtree & Evelyn 2792 Gardeners Hand Therapy (100ml, 3.4 oz)',\n", + " (38, 145, 226, 206, 0)),\n", + " ('B00004U9V2',\n", + " \"Crabtree & Evelyn - Gardener's Ultra-Moisturising Hand Therapy Pump - 250g/8.8 OZ\",\n", + " (216, 161, 162, 182, 0)),\n", + " ('B000050B6U', 'Instant Heat Curling Iron, 1-Inch', (174, 77, 140, 27, 0)),\n", + " ('B000052WY7',\n", + " 'Maybelline New York Expert Wear Brow & Eyeliner, 151 Velvet Black , .011 oz (310 mg)',\n", + " (228, 89, 201, 195, 0)),\n", + " ('B000052WYD',\n", + " 'Maybelline New York Cover Stick Concealer, Ivory, Light 2, 0.16 Ounce',\n", + " (110, 131, 34, 13, 0)),\n", + " ('B000052WYL',\n", + " 'Maybelline New York Expert Eyes Moisturizing Eye Makeup Remover, 2.3 Fl. Oz.',\n", + " (123, 131, 70, 37, 0)),\n", + " ('B000052WYN',\n", + " 'Maybelline New York Ultra-Liner Liquid Liner, Waterproof, Black 135L-01 , .25 fl oz (7.3 ml)',\n", + " (3, 135, 44, 12, 0)),\n", + " ('B000052X9G',\n", + " 'Nullo Internal Deodorant, Coated Caplets, 135 Caplets',\n", + " (71, 247, 246, 91, 0)),\n", + " ('B000052XIA',\n", + " 'Vagisil Anti-Itch Creme, Original Formula - 1 oz',\n", + " (205, 173, 132, 171, 0)),\n", + " ('B000052XW5',\n", + " 'Pretty Feet & Hands Rough Skin Remover-Exfoliant, 3-Ounce Bottles (Pack of 3)',\n", + " (194, 47, 234, 60, 0)),\n", + " ('B000052XYQ', 'DHS Clear Shampoo 8 Fl Oz', (69, 8, 226, 103, 0)),\n", + " ('B000052XZP',\n", + " 'Neutrogena T-Gel Shampoo, Stubborn Itch Control, 4.4 Ounce',\n", + " (70, 103, 201, 76, 0)),\n", + " ('B000052XZX',\n", + " 'Neutrogena T/Sal Shampoo, Scalp Build-up Control, 4.5 fl oz',\n", + " (167, 173, 65, 103, 0)),\n", + " ('B000052Y25',\n", + " 'DHS Conditioning Rinse With Panthenol 8 fl oz',\n", + " (44, 159, 254, 27, 0)),\n", + " ('B000052Y33',\n", + " 'Alberto VO5 Moisturizing Hot Oil Treatment, 0.5 Ounce, 2-Count Tubes (Pack of 6)',\n", + " (13, 134, 153, 159, 0)),\n", + " ('B000052Y5F',\n", + " 'Konsyl Pharmaceuticals Psyllium Fiber 15.9 oz',\n", + " (127, 173, 122, 236, 0)),\n", + " ('B000052Y6Z',\n", + " 'Williams Lectric Shave Electric Razor Pre-Shave, Original, 3 fl oz',\n", + " (99, 105, 192, 202, 0)),\n", + " ('B000052YJC',\n", + " 'Buf-Puf Double-Sided Body Sponge - 1 ea',\n", + " (230, 47, 162, 99, 0)),\n", + " ('B000052YJD',\n", + " 'Buf-Puf Reusable Facial Sponge, Extra Gentle, - 1 ea',\n", + " (71, 173, 163, 68, 0)),\n", + " ('B000052YJH',\n", + " 'Buf-Puf Reusable Facial Sponge (Pack of 6)',\n", + " (245, 173, 219, 34, 0)),\n", + " ('B000052YJM',\n", + " 'Clean & Clear ESSENTIALS Dual Action Moisturizer, 4 Ounce',\n", + " (154, 180, 29, 37, 0)),\n", + " ('B000052YJX',\n", + " 'Neutrogena OntheSpot Acne Treatment, Vanishing Formula, 0.75 Ounce',\n", + " (93, 145, 227, 77, 0)),\n", + " ('B000052YKI',\n", + " 'Purpose Dual Treatment Moisture Lotion with SPF 15 4 fl oz (120 ml)',\n", + " (196, 161, 250, 76, 0)),\n", + " ('B000052YKM',\n", + " 'Stri-Dex Medicated Pads, Maximum Strength, 90-Count Containers, (Pack of 3)',\n", + " (6, 66, 67, 241, 0)),\n", + " ('B000052YKS',\n", + " 'Basis Cleaner Clean Face Wash, 6 Fluid Ounces',\n", + " (40, 100, 67, 170, 0)),\n", + " ('B000052YKY',\n", + " 'Cetaphil Gentle Cleansing Bar, Antibacterial - 4.5 oz',\n", + " (102, 59, 11, 219, 0)),\n", + " ('B000052YL1',\n", + " 'Cuticura Medicated Anti-Bacterial Bar Soap, Original Formula - 5.25 oz bar',\n", + " (71, 167, 192, 202, 0)),\n", + " ('B000052YLX',\n", + " 'Purpose Gentle Cleansing Bar 6 oz (170 g)',\n", + " (128, 80, 65, 77, 0)),\n", + " ('B000052YM0',\n", + " 'Fruit Of The Earth 100% Aloe Vera 6oz. Gel Tube',\n", + " (117, 47, 162, 159, 0)),\n", + " ('B000052YM3',\n", + " 'Alpha Hydrox AHA Enhanced Cream 2 oz.',\n", + " (82, 134, 216, 103, 0)),\n", + " ('B000052YM4',\n", + " 'Alpha Hydrox Foaming Face Wash -- 6 fl oz',\n", + " (69, 47, 219, 103, 0)),\n", + " ('B000052YM7',\n", + " 'Alpha Hydrox Enhanced Lotion 10 percent Glycolic AHA -- 6 fl oz Anti-Wrinkle',\n", + " (100, 46, 246, 53, 0)),\n", + " ('B000052YM8',\n", + " 'Alpha Hydrox Oil Free Treatment 10 Percent AHA 1.7 fl oz.',\n", + " (205, 134, 147, 152, 0)),\n", + " ('B000052YMG', 'Aquanil Cleanser 16 fl oz.', (71, 47, 59, 143, 0)),\n", + " ('B000052YMQ',\n", + " 'Cetaphil Moisturizing Cream, Fragrance Free - 16 oz',\n", + " (167, 134, 226, 37, 0)),\n", + " ('B000052YMR',\n", + " 'Cetaphil Moisturizing Cream, 3.0 - Ounces Tube (Pack of 3)',\n", + " (2, 2, 226, 76, 0)),\n", + " ('B000052YMS',\n", + " 'Cetaphil Moisturizing Lotion, Fragrance Free - 16 fl oz',\n", + " (56, 134, 122, 15, 0)),\n", + " ('B000052YMT',\n", + " 'Cetaphil Gentle Skin Cleanser, 4.0 -Ounce Bottles (Pack of 6)',\n", + " (56, 21, 201, 160, 0)),\n", + " ('B000052YMV',\n", + " 'Cetaphil Gentle Skin Cleanser - 16 fl oz',\n", + " (56, 96, 65, 15, 0)),\n", + " ('B000052YMX',\n", + " 'Complex 15 Therapeutic Moisturizing Face Cream - 2.5 Ounce',\n", + " (56, 3, 59, 160, 0)),\n", + " ('B000052YN5',\n", + " 'DML Daily Facial Moisturizer, SPF 25 - 1.5 Oz',\n", + " (71, 134, 208, 60, 0)),\n", + " ('B000052YN7', 'DML Moisturizing Lotion 16 oz.', (117, 134, 234, 103, 0)),\n", + " ('B000052YOL',\n", + " 'Neutrogena Healthy Skin Anti-Wrinkle Cream, SPF 15, 1.4 Ounce',\n", + " (99, 120, 162, 231, 0)),\n", + " ('B000052YOR',\n", + " 'Neutrogena Body Oil, Light Sesame Formula, 8.5 Ounce',\n", + " (139, 173, 122, 99, 0)),\n", + " ('B000052YOX',\n", + " 'Neutrogena Oil-Free Moisture, Sensitive Skin, 4 Ounce',\n", + " (99, 202, 231, 169, 0)),\n", + " ('B000052YP4',\n", + " 'Neutrogena Light Night Cream, 2.25 Ounce',\n", + " (99, 3, 27, 241, 0)),\n", + " ('B000052YP6',\n", + " 'Neutrogena Norwegian Formula Hand Cream, Fragrance-Free (2 Ounce)',\n", + " (117, 47, 71, 91, 0)),\n", + " ('B000052YQ0',\n", + " 'Olay Complete All Day Moisturizer With Sunscreen Broad Spectrum SPF 15 Normal 4 Fl Oz',\n", + " (215, 202, 139, 15, 0)),\n", + " ('B000052YQ2',\n", + " 'Olay Complete All Day Moisturizer With Sunscreen Broad Spectrum SPF 15 - Sensitive 4 Fl Oz',\n", + " (93, 129, 216, 13, 0)),\n", + " ('B000052YQN', \"POND'S Cold Cream Cleanser, 3.5 oz.\", (70, 23, 65, 76, 0)),\n", + " ('B000052YQU',\n", + " \"POND'S Dry Skin Cream Facial Moisturizer, 3.9-Ounce (Packaging May Vary)\",\n", + " (99, 159, 67, 99, 0)),\n", + " ('B000052Z5B',\n", + " 'Coty Airspun Face Powder, Naturally Neutral, 2.3 oz',\n", + " (201, 180, 201, 135, 0)),\n", + " ('B000052Z8D',\n", + " 'Max Factor Pan-Stik Ultra Creamy Makeup, Sun Tone 137 .5 oz (14 g)',\n", + " (188, 122, 254, 37, 0)),\n", + " ('B000052ZB1',\n", + " 'Neutrogena Intensified Day Moisture, SPF 15, 2.25 Ounce',\n", + " (44, 120, 234, 169, 0)),\n", + " ('B000052ZB2',\n", + " 'Neutrogena Extra Gentle Cleanser, 6.7 Ounce',\n", + " (44, 115, 71, 195, 0)),\n", + " ('B000052ZB4',\n", + " 'Neutrogena Deep Clean Facial Cleanser, Normal to Oily Skin, 6.7 Ounce',\n", + " (239, 211, 192, 170, 0)),\n", + " ('B000052ZBD',\n", + " 'Neutrogena Rainbath Gel, Original, 16 Ounce',\n", + " (71, 64, 201, 114, 0)),\n", + " ('B000052ZBH',\n", + " 'Almay One Coat Nourishing Mascara, Thickening, Black 402, 0.4-Ounce Package',\n", + " (13, 66, 27, 236, 0)),\n", + " ('B000052ZBP',\n", + " 'Almay Moisturizing Eye Makeup Remover Pads, 80-Pads',\n", + " (194, 89, 27, 162, 0)),\n", + " ('B000052ZTY',\n", + " 'Hugo By Hugo Boss For Men. Eau De Toilette Spray 1.3 Ounces',\n", + " (8, 55, 10, 163, 0)),\n", + " ('B00005302B',\n", + " 'Jergen Extra Moisturizing Liquid Hand Wash 7.5 Oz',\n", + " (28, 100, 122, 91, 0)),\n", + " ('B00005304H', 'Q-tips Cotton Swabs, 500 Count', (172, 159, 155, 169, 0)),\n", + " ('B0000530ED',\n", + " \"L'Oreal Paris Feria Hair Color, 36 Dark Burgundy Brown/Chocolate Cherry\",\n", + " (52, 167, 122, 170, 0)),\n", + " ('B0000530EZ',\n", + " 'Aussie Hair Insurance Leave-In Conditioner 8 Fl Oz (Pack of 3)',\n", + " (223, 103, 234, 116, 0)),\n", + " ('B0000530G6',\n", + " 'Suave Professionals Conditioner, Humectant - 12.6 Ounce',\n", + " (223, 103, 192, 219, 0)),\n", + " ('B0000530LO',\n", + " 'Suave Naturals Shampoo, Daily Clarifying - 22.5oz.',\n", + " (75, 247, 71, 60, 0)),\n", + " ('B0000530LP',\n", + " 'Suave Shampoo, Daily Clarifying - 12oz.',\n", + " (41, 120, 234, 91, 0)),\n", + " ('B0000530LV',\n", + " 'Suave Naturals Shampoo, Sun Ripened Strawberry 22.5oz',\n", + " (71, 145, 11, 202, 0)),\n", + " ('B0000530M0',\n", + " 'Suave Professionals Humectant Moisture Shampoo , 12.6 fl Ounce (373 ml)',\n", + " (70, 4, 41, 77, 0)),\n", + " ('B0000530NA',\n", + " 'Olay Daily Care Refreshing Toner, 7.2-Fluid Ounce',\n", + " (78, 134, 67, 195, 0)),\n", + " ('B0000530O9',\n", + " 'Olay Age Defying Classic Eye Gel 0.5 Oz',\n", + " (204, 255, 27, 241, 0)),\n", + " ('B0000531GD',\n", + " 'Maybelline New York Shine Free Oil Control Pressed Powder, Ivory - 1 ea',\n", + " (107, 68, 33, 104, 0)),\n", + " ('B0000531GV',\n", + " 'Maybelline New York Expert Eyes 100% Oil-Free Eye Makeup Remover, 2.3 Fl. Oz.',\n", + " (127, 122, 11, 76, 0)),\n", + " ('B0000531II',\n", + " 'Maybelline New York Shine Free Oil Control Loose Powder, Light, 0.7 Ounce',\n", + " (177, 122, 41, 76, 0)),\n", + " ('B0000531NU',\n", + " \"Maybelline New York Volum' Express - Waterproof Mascara, Very Black - .34 fl oz\",\n", + " (194, 159, 75, 76, 0)),\n", + " ('B0000531SW',\n", + " \"L'Oreal Paris Visible Lift Line-Minimizing & Tone-Enhancing Makeup, Soft Ivory, 1.25 Ounces\",\n", + " (92, 96, 11, 27, 0)),\n", + " ('B0000531WZ',\n", + " 'Revlon Super Lustrous Creme Lipstick, Fire and Ice 720, 0.15 Ounce',\n", + " (70, 122, 55, 170, 0)),\n", + " ('B00005321Z',\n", + " \"Revlon Eterna '27' Moisture Cream with Progenitin, 2 Ounce\",\n", + " (250, 234, 73, 37, 0)),\n", + " ('B0000532AN', 'Revlon Lash Curlers, 1 Count', (192, 161, 41, 194, 0)),\n", + " ('B0000532VT',\n", + " 'Neutrogena Clean Conditioner, Replenishing , 10.1 Fluid Ounce',\n", + " (17, 202, 138, 169, 0)),\n", + " ('B0000532YN',\n", + " 'Kiss My Face Bar Soap, 8.0 oz, Pure Olive Oil. 1-Bar',\n", + " (110, 2, 70, 104, 0)),\n", + " ('B00005333G',\n", + " \"L'Oreal Paris Hydra-Renewal Continuous Moisture Cream, 1.7 Ounce\",\n", + " (44, 8, 139, 37, 0)),\n", + " ('B00005333I',\n", + " \"L'Oreal Paris Eye Defense, 0.5 Fluid Ounce\",\n", + " (133, 211, 192, 15, 0)),\n", + " ('B0000533CC',\n", + " 'Instead 12 Hour Feminine Protection Cup 24 ea',\n", + " (172, 129, 163, 169, 0)),\n", + " ('B0000534VO',\n", + " 'Clean & Clear Continuous Control Acne Cleanser, 5 oz (141g)',\n", + " (44, 103, 24, 236, 0)),\n", + " ('B0000535CH',\n", + " \"Nature's Cure Two-part Acne Treatment System for Women 60 Tablets 1 Oz Cream\",\n", + " (12, 47, 132, 15, 0)),\n", + " ('B0000535OF',\n", + " 'Alpha Hydrox Night Replenishing Cream 2 oz.',\n", + " (71, 180, 122, 206, 0)),\n", + " ('B0000535RA',\n", + " 'Neutrogena Pore Refining Toner, Alpha and Beta Hydroxy Formula, 8.5 Ounce',\n", + " (44, 4, 10, 100, 0)),\n", + " ('B0000535RC',\n", + " 'NeutrogenaClear Pore Oil Eliminating Astringent, 8 Ounce',\n", + " (133, 4, 65, 104, 0)),\n", + " ('B0000535RD',\n", + " 'Neutrogena Body Clear Body Wash for Clean, Clear Skin, 8.5 Ounce',\n", + " (128, 120, 201, 77, 0)),\n", + " ('B0000535U2', 'Jason C-Effects Creme, 2 Ounces', (50, 196, 219, 202, 0)),\n", + " ('B0000535UA', 'Jason Shampoo, Tea Tree, 17.5 Ounce', (50, 115, 140, 169, 0)),\n", + " ('B0000535UM',\n", + " 'Jason Thin-To-Thick Extra Volume Shampoo, 8 Ounce',\n", + " (172, 115, 140, 169, 0)),\n", + " ('B0000535UN',\n", + " 'Thin to Thick Extra Volume Conditioner 8 oz',\n", + " (102, 66, 65, 15, 0)),\n", + " ('B0000535UT',\n", + " 'Jason Purifying Tea Tree Body Wash 30 fl oz',\n", + " (71, 1, 162, 143, 0)),\n", + " ('B0000535UX',\n", + " 'Jason Pure Natural Hand Soap, Purifying Tea Tree, 16 Ounce',\n", + " (172, 196, 140, 13, 0)),\n", + " ('B0000535VH',\n", + " 'Alpha Hydrox Optimum Series, Retinol Night ResQ, Anti-Wrinkle Firming Complex - 1.05 oz',\n", + " (205, 159, 139, 103, 0)),\n", + " ('B000053676',\n", + " 'Avalon Organics Vitamin C Revitalizing Eye Creme, 1 Ounce Bottle',\n", + " (71, 3, 41, 15, 0)),\n", + " ('B0000536A3',\n", + " 'Tommy Hilfiger Tommy Cologne Spray for Men - 3.4 Fluid Ounces',\n", + " (182, 62, 201, 219, 0)),\n", + " ('B0000536EK',\n", + " \"Mother's Special Blend All Natural Skin Toning Oil, 8-Ounce Bottle\",\n", + " (102, 173, 70, 91, 0)),\n", + " ('B0000536EW',\n", + " 'Aveeno Anti-Itch Concentrated Lotion, 4 Ounce',\n", + " (127, 62, 163, 159, 0)),\n", + " ('B0000536F0',\n", + " 'Aveeno Moisturizing Bar with Natural Colloidal Oatmeal for Dry Skin, Fragrance Free, 3.5 oz',\n", + " (161, 96, 246, 103, 0)),\n", + " ('B0000536M2',\n", + " \"Maybelline New York Full 'N Soft Mascara, Very Black, 0.28 Oz.\",\n", + " (65, 66, 208, 160, 0)),\n", + " ('B0000536M3',\n", + " \"Maybelline Full' N Soft Mascara: Brownish Black #302\",\n", + " (28, 120, 59, 169, 0)),\n", + " ('B0000536P3',\n", + " 'Olay Total Effects 7-In-1 Anti-Aging Daily Moisturizer 1.7 Fl. Oz.',\n", + " (167, 96, 11, 53, 0)),\n", + " ('B0000536P4',\n", + " 'Olay Total Effects Anti-Aging Fragrance Free Moisturizer 1.7 Fl Oz',\n", + " (21, 96, 11, 53, 0)),\n", + " ('B00005375C',\n", + " 'Aveeno Daily Moisturizing Lotion, 8 Ounce',\n", + " (239, 89, 192, 99, 0)),\n", + " ('B0000537NH',\n", + " 'Neutrogena Sensitive Skin Sunscreen Lotion, SPF 30, 4 Ounce',\n", + " (132, 202, 246, 53, 0)),\n", + " ('B0000537SD', 'ZapZyt Acne Treatment Gel, 1 oz', (93, 173, 227, 217, 0)),\n", + " ('B000053L6W',\n", + " 'Clubman Pinaud Virgin Island Bay Rum, 12 Ounce',\n", + " (94, 115, 201, 76, 0)),\n", + " ('B000056I89',\n", + " 'Cetaphil Daily Facial Cleanser, Normal to Oily Skin - 8 fl oz',\n", + " (44, 4, 37, 34, 0)),\n", + " ('B000056W5Y',\n", + " \"Palmer's Cocoa Butter Formula Massage Cream for Stretch Marks, 4.4 Ounce\",\n", + " (127, 103, 59, 202, 0)),\n", + " ('B000056W74',\n", + " \"Palmer's Cocoa Butter Formula Moisturizing Body Oil with Vitamin E -- 8.5 fl oz\",\n", + " (196, 211, 139, 76, 0)),\n", + " ('B00005A43X',\n", + " 'Conair Supreme 2-In-1 Hot Air Styling Brush',\n", + " (67, 149, 163, 27, 0)),\n", + " ('B00005A443',\n", + " 'Conair Double-Sided Battery-Operated Lighted Makeup Mirror, Polished Chrome Finish',\n", + " (36, 4, 67, 219, 0)),\n", + " ('B00005A9WP',\n", + " 'Coanir Facial Sauna System with Timer',\n", + " (174, 131, 27, 160, 0)),\n", + " ('B00005AVC7',\n", + " 'Clean & Clear Instant Oil-Absorbing Sheets 50 sheets',\n", + " (28, 131, 192, 219, 0)),\n", + " ('B00005B9FV',\n", + " 'Eucerin Q10 Anti-Wrinkle Sensitive Skin Lotion SPF, 4 Ounce',\n", + " (196, 245, 116, 170, 0)),\n", + " ('B00005CDSP',\n", + " 'Revlon Perfect Heat 1-1/2inch Curling Iron',\n", + " (174, 66, 153, 100, 0)),\n", + " ('B00005IBW0',\n", + " 'St. Ives, Sensitive Skin Apricot Scrub, 6-Ounce (Pack of 6)',\n", + " (70, 46, 118, 184, 0)),\n", + " ('B00005LBRT',\n", + " 'Avalon Organics Lavender Luminosity Daily Moisturizer, 2 Ounce',\n", + " (104, 234, 67, 34, 0)),\n", + " ('B00005NAOD',\n", + " 'Eucerin Q10 Anti-Wrinkle Sensitive Skin Creme, 1.7 Ounce Jar',\n", + " (196, 245, 56, 152, 0)),\n", + " ('B00005NAOJ',\n", + " 'Cetaphil Gentle Cleansing Bar - 4.5 oz',\n", + " (71, 47, 70, 143, 0)),\n", + " ('B00005NASR',\n", + " 'Ecco Bella Original Organic Water-Free Herbal Body Lotion, Vanilla, 8-Ounce Bottle',\n", + " (107, 47, 162, 99, 0)),\n", + " ('B00005NFBD',\n", + " 'Freeman Facial Masque, Purifying - 6 fl oz',\n", + " (93, 173, 254, 103, 0)),\n", + " ('B00005NFBJ',\n", + " 'Freeman Cucumber Facial Peel-Off Mask - 6 oz',\n", + " (117, 135, 24, 91, 0)),\n", + " ('B00005O0MZ',\n", + " 'Conair 1875 Watt Ionic Conditioning Hair Dryer',\n", + " (174, 149, 124, 60, 0)),\n", + " ('B00005R1H2',\n", + " 'Skin Success Eventone Fade Milk with Vitamin E and Alpha Hydroxy - 8.5 Fluid Ounces',\n", + " (205, 173, 122, 160, 0)),\n", + " ('B00005R1H3',\n", + " 'Skin Success Eventone Fade Cream, For Oily Skin - 2.7 oz',\n", + " (167, 173, 22, 236, 0)),\n", + " ('B00005REAQ',\n", + " 'Alba BotanicaTM Even Advanced Natural Moisturizer Sea Moss SPF 15 -- 2 fl oz',\n", + " (154, 100, 27, 77, 0)),\n", + " ('B00005REAT',\n", + " 'Body Bath Honey Mango Alba Botanica 12 oz Liquid',\n", + " (109, 4, 3, 116, 0)),\n", + " ('B00005S81T',\n", + " 'Skin Success Eventone Fade Cream, Regular - 2.7 oz',\n", + " (167, 173, 11, 170, 0)),\n", + " ('B00005T83D',\n", + " \"Palmer's Cocoa Butter Formula, Cream Soap Bar with Vitamin E, 3.5 oz - 1 ea\",\n", + " (44, 173, 11, 77, 0)),\n", + " ('B00005TZU8',\n", + " 'DreamTime Inner Peace Eye Pillow, Lavender Velvet',\n", + " (144, 3, 24, 206, 0)),\n", + " ('B00005UN90',\n", + " 'Suave Naturals Body Wash, Ocean Breeze - 12oz.',\n", + " (70, 202, 139, 53, 0)),\n", + " ('B00005UQSP',\n", + " 'EO Shampoo for Fine/Oily Hair, Rosemary & Mint, 8 fl oz (240 ml)',\n", + " (173, 180, 22, 34, 0)),\n", + " ('B00005V5OU',\n", + " 'Neutrogena Healthy Defense Daily Moisturizer, SPF 30, Light Tint 1.7 Ounce',\n", + " (44, 24, 33, 169, 0)),\n", + " ('B00005V5OW',\n", + " 'Maybelline Lash Discovery Washable Mascara, Very Black - .16 fl oz',\n", + " (200, 255, 153, 195, 0)),\n", + " ('B00005V5P6',\n", + " 'Maybelline New York Purestay Powder & Foundation SPF 15, Ivory - .34 oz',\n", + " (221, 103, 254, 160, 0)),\n", + " ('B0000632EE',\n", + " 'Fallene Total Block UVA/UVB Complete Broad Spectrum Sun Protection, SPF 65 Clear, 2 fl Ounces (59 ml)',\n", + " (52, 109, 122, 125, 0)),\n", + " ('B0000632EN',\n", + " 'Aveeno Positively Radiant Skin Brightening Daily Scrub, 5 Ounce',\n", + " (40, 118, 226, 27, 0)),\n", + " ('B00006598X',\n", + " 'Aquis Microfiber Hair Towel, Lisse Crepe, Pink (19 x 39-Inches)',\n", + " (28, 120, 11, 114, 0)),\n", + " ('B000065DJY',\n", + " 'Revlon Perfect Heat 1875W Shine Boosting Hair Dryer, RV484',\n", + " (144, 66, 226, 99, 0)),\n", + " ('B000065DK4',\n", + " 'Vidal Sassoon VS184C Three-Barrel Waver',\n", + " (4, 247, 67, 219, 0)),\n", + " ('B000066CKS',\n", + " 'Badger - Healing Balm For Hardworking Hands',\n", + " (12, 96, 139, 206, 0)),\n", + " ('B0000682T7', 'Badger Balm, Sleep Balm - 2 oz', (120, 47, 67, 99, 0)),\n", + " ('B0000683O5',\n", + " 'CoverGirl Lipslicks Lip Gloss, Clear - .14 oz',\n", + " (216, 96, 163, 116, 0)),\n", + " ('B000068U49',\n", + " 'Kingsley Shave Soap Bowl with Lid Dark Wood',\n", + " (116, 103, 49, 34, 0)),\n", + " ('B00006FDU6',\n", + " 'Conair Straight Waves 3-in-1 Specialty Styler',\n", + " (220, 161, 24, 34, 0)),\n", + " ('B00006FE30',\n", + " 'Neutrogena Clear Pore Cleanser/Mask, 4.2 Fluid Ounce (125 ml)',\n", + " (99, 202, 22, 75, 0)),\n", + " ('B00006FRW7',\n", + " 'Aveeno Clear Complexion Daily Moisturizer, 4 Ounce',\n", + " (239, 196, 24, 76, 0)),\n", + " ('B00006IGL3',\n", + " 'Kiss My Face Organics Break Out, Botanical Acne Gel, 1 fl oz',\n", + " (133, 96, 192, 15, 0)),\n", + " ('B00006IGL8',\n", + " 'Kiss My Face Deep Cleansing Mask Pore Shrink , 2 Fluid Ounce',\n", + " (233, 122, 41, 37, 0)),\n", + " ('B00006IV22',\n", + " 'Conair 1875 Watt Dual Voltage Folding Handle Hair Dryer',\n", + " (148, 145, 71, 76, 0)),\n", + " ('B00006IV2E',\n", + " 'Conair BC40JBC Hot Brush, White, 0.75 Inch',\n", + " (36, 202, 94, 170, 0)),\n", + " ('B00006IV2F', 'Instant Heat Hot Brush, 3/4-Inch', (30, 180, 163, 195, 0)),\n", + " ('B00006IV30', 'Conair Instant Heat Travel Hairsetter', (220, 96, 24, 37, 0)),\n", + " ('B00006JN4F',\n", + " \"L'Oreal Paris Superior Preference Hair Color, LB-01 Extra Light Ash Blonde\",\n", + " (52, 180, 122, 170, 0)),\n", + " ('B00006JT6O',\n", + " 'Olay Total Effects Anti-Aging Night Firming Treatment - 1.7 Fl Oz',\n", + " (133, 180, 216, 75, 0)),\n", + " ('B00006K14U',\n", + " 'Nivea for Men Energy Face Scrub, 4.4 Ounce Tube',\n", + " (70, 122, 122, 13, 0)),\n", + " ('B00006L9KV',\n", + " 'Thicker Fuller Hair Revitalizing Shampoo-12 oz',\n", + " (144, 202, 37, 53, 0)),\n", + " ('B00006L9KW',\n", + " 'Thicker Fuller Hair Weightless Conditioner-12 oz',\n", + " (71, 47, 226, 100, 0)),\n", + " ('B00007FCQ1',\n", + " 'Blue Lizard Australian Sunscreen, Regular, SPF 30+, 8.75-Ounce Bottle',\n", + " (28, 178, 162, 37, 0)),\n", + " ('B00007KQF3',\n", + " 'Barielle Nail Strengthener Cream, 1 Ounce',\n", + " (28, 255, 71, 184, 0)),\n", + " ('B00007M0CP',\n", + " 'Conair Xtreme Instant Heat Multisized Hot Rollers, Pink',\n", + " (67, 68, 153, 152, 0)),\n", + " ('B000087L6T', 'Rose Milk Skin Care Lotion - 8 fl oz', (99, 96, 192, 170, 0)),\n", + " ('B000089SA4', 'Soap Glycerine Vitamin-E 4 Ounces', (17, 173, 246, 138, 0)),\n", + " ('B00008BNZ4',\n", + " 'Wahl 79900B Clip-N-Trim 23-Piece Complete Haircut Kit',\n", + " (105, 115, 33, 182, 0)),\n", + " ('B00008CMOQ',\n", + " 'Queen Helene Mint Julep Masque, 8 Ounce',\n", + " (12, 62, 122, 103, 0)),\n", + " ('B00008CMOR',\n", + " 'Queen Helene Original Formula Antioxidant Grape Seed Extract Peel Off Masque -- 6 oz',\n", + " (167, 145, 41, 103, 0)),\n", + " ('B00008CMOS',\n", + " 'Queen Helene Masque, Mud Pack - 8 oz',\n", + " (128, 52, 122, 184, 0)),\n", + " ('B00008DPP8',\n", + " 'Softsoap Naturals Moisturizing Liquid Hand Soap with Milk & Honey, Pump - 7.5 fl oz',\n", + " (132, 196, 67, 159, 0)),\n", + " ('B00008J2XQ',\n", + " 'Aveeno Active Naturals Skin Relief Hand Cream, 3.5 Ounce',\n", + " (102, 8, 24, 159, 0)),\n", + " ('B00008KA7P',\n", + " 'No Rinse Shampoo - 16 floz (473.1 mL)',\n", + " (99, 66, 201, 202, 0)),\n", + " ('B00008KA8D',\n", + " 'Revlon ColorStay Overtime Liquid Lipcolor, Keep Blushing',\n", + " (120, 122, 70, 195, 0)),\n", + " ('B00008MNZH',\n", + " 'Eucerin Daily Protection Moisturizing Face Lotion, Broad Spectrum SPF 30',\n", + " (99, 202, 67, 13, 0)),\n", + " ('B00008MOQE',\n", + " 'Maybelline Great Lash Mascara, Very Black -.43 Fluid Ounce',\n", + " (194, 59, 82, 195, 0)),\n", + " ('B00008MOQJ',\n", + " 'Maybelline Great Lash Curved - Very Black',\n", + " (80, 196, 59, 103, 0)),\n", + " ('B00008MOQN',\n", + " 'Maybelline Great Lash Waterproof Mascara, Very Black- .43 Fluid Ounce',\n", + " (80, 255, 59, 231, 0)),\n", + " ('B00008O2X5',\n", + " 'Almay Anti-Perspirant & Deodorant, Clear Gel, Fragrance Free - 2.25 oz',\n", + " (102, 131, 11, 15, 0)),\n", + " ('B00008PC1O',\n", + " 'Sun-In Spray-In Hair Lightener, Original - 4.7 fl oz',\n", + " (199, 202, 11, 38, 0)),\n", + " ('B00008ZPG9',\n", + " 'Olay Regenerist Deep Hydration Regenerating Cream Facial Moisturirzer 1.7 Fl Oz',\n", + " (99, 17, 71, 195, 0)),\n", + " ('B00008ZPGA',\n", + " 'Olay Regenerist Regenerating Serum Moisturizer 1.7 Fl Oz',\n", + " (99, 22, 65, 13, 0)),\n", + " ('B000092OX4',\n", + " 'Olay Regenerist Regenerating Lotion With Sunscreen Broad Spectrum SPF 15 2.5 Fl Oz',\n", + " (252, 129, 227, 103, 0)),\n", + " ('B000093A0U',\n", + " 'Hugo By Hugo Boss For Women. Eau De Toilette Spray 1.3 Ounces',\n", + " (31, 4, 27, 34, 0)),\n", + " ('B000093I60', 'No-Rinse Body Bath, 16 oz', (141, 161, 124, 195, 0)),\n", + " ('B000094Q6C',\n", + " 'Tournmaline Ceramic Curling Iron, 3/4-Inch',\n", + " (45, 66, 24, 100, 0)),\n", + " ('B000094ZDX',\n", + " 'Conair 1600 Watt Folding Handle Hair Dryer',\n", + " (195, 77, 33, 116, 0)),\n", + " ('B0000950LF',\n", + " 'Promensil Menopausal Relief Supplement Tablets, 60-Count Box',\n", + " (12, 234, 226, 159, 0)),\n", + " ('B000095SDS', 'Scalpicin Max Dermatology', (98, 47, 174, 114, 0)),\n", + " ('B00009WO0W', \"Weleda Children's Tooth Gel, 1.7 oz\", (56, 77, 163, 27, 0)),\n", + " ('B0000AFUTL',\n", + " 'Jerdon JP7506CF 8-Inch Two-Sided Swivel Wall Mount Mirror with 5x Magnification, 13.5-Inch Extension, Chrome Finish',\n", + " (36, 4, 163, 125, 0)),\n", + " ('B0000AJ3PT',\n", + " 'Aveeno Active Naturals Creamy Moisturizing Oil, 12 Ounce',\n", + " (239, 152, 71, 34, 0)),\n", + " ('B0000AJ3PU',\n", + " 'Aveeno Active Naturals Stress Relief Moisturizing Lotion, 12 Ounce',\n", + " (56, 47, 65, 170, 0)),\n", + " ('B0000AJ3Q3',\n", + " \"L'Oreal Paris Double Extend Mascara, Blackest Black, 0.33 Ounces\",\n", + " (192, 121, 122, 101, 0)),\n", + " ('B0000AN9L9',\n", + " 'Neutrogena Transparent Facial Bar Bonus Pack, Original Formula - 6 ea, 3.5 oz each, total 21 oz',\n", + " (102, 59, 124, 236, 0)),\n", + " ('B0000AS54S',\n", + " 'Udderly Smooth Udder Cream, Skin Moisturizer, 4 Ounce Tube',\n", + " (128, 141, 139, 219, 0)),\n", + " ('B0000BV14G',\n", + " 'Cool Water By Davidoff Eau-de-toilette Spray, 1.7-Ounce',\n", + " (119, 115, 163, 15, 0)),\n", + " ('B0000C0XL8',\n", + " 'Desert Essence Organic Jojoba Oil -- 4 fl oz',\n", + " (69, 173, 216, 206, 0)),\n", + " ('B0000C4COV',\n", + " 'derma e Soothing Skin Treatment, Tea Tree & E Antiseptic Crème, 4 oz (113 g)',\n", + " (133, 21, 147, 206, 0)),\n", + " ('B0000CC64W',\n", + " 'Olay Regenerist Daily Regenerating Serum - Fragrance Free Moisturizer 1.7 Fl Oz',\n", + " (99, 46, 162, 34, 0)),\n", + " ('B0000CDVN6', 'Conair Spiral Styler, 0.75 Inch', (17, 249, 155, 159, 0)),\n", + " ('B0000CNR0E',\n", + " 'Household Essentials Travel Tie Case, Black',\n", + " (36, 96, 226, 152, 0)),\n", + " ('B0000CNR0J',\n", + " 'Household Essentials Grooming Travel Bag Organizer, Black',\n", + " (36, 180, 24, 27, 0)),\n", + " ('B0000UJJH0',\n", + " 'Desert Essence Tea Tree Oil 100% Pure, 2-Ounce',\n", + " (39, 135, 208, 77, 0)),\n", + " ('B0000UTUS8',\n", + " 'Aquis Microfiber Hair Turban, Lisse Crepe, Patented Design, White',\n", + " (28, 77, 192, 91, 0)),\n", + " ('B0000UTUVU',\n", + " \"Mrs. Meyer's Clean Day Dish Soap, Lavender, 16 Ounce Bottle\",\n", + " (149, 211, 226, 91, 0)),\n", + " ('B0000UTUW4',\n", + " \"Mrs. Meyer's Clean Day Liquid Hand Soap, Lavender, 12.5 Ounce Bottle\",\n", + " (6, 21, 201, 160, 0)),\n", + " ('B0000VC1YC',\n", + " 'Neutrogena Body Oil, Light Sesame Formula, 32 Ounce',\n", + " (94, 129, 59, 219, 0)),\n", + " ('B0000XMQTA',\n", + " 'Irene Gari Cover Your Grey for Women Touch Up Stick Medium Brown',\n", + " (193, 242, 192, 169, 0)),\n", + " ('B0000Y3C3I', 'Afirm 3X', (21, 47, 163, 188, 0)),\n", + " ('B0000Y3COC', 'PanOxyl Bar 10% - 4 oz - 1 Bar', (93, 4, 216, 118, 0)),\n", + " ('B0000Y3CRY', 'Nizoral Anti-Dandruff Shampoo, 4 oz.', (92, 47, 201, 182, 0)),\n", + " ('B0000Y3CSI',\n", + " 'Neutrogena T/Gel Original Shampoo - 16 oz',\n", + " (128, 145, 226, 103, 0)),\n", + " ('B0000Y3D4G',\n", + " 'Neutrogena Norwegian Formula Lip Moisturizer, SPF 15, 0.15 Ounce',\n", + " (92, 96, 67, 37, 0)),\n", + " ('B0000Y3D4Q', 'Rezamid Acne Treatment Lotion, 2 oz.', (71, 173, 246, 15, 0)),\n", + " ('B0000Y3DAK', 'DHS Clear Shampoo 8 oz', (13, 3, 201, 114, 0)),\n", + " ('B0000Y3FQC', 'Diamancel Tough Buffer #11', (192, 151, 250, 152, 0)),\n", + " ('B0000Y3FRG', 'Obagi Nu-Derm Foaming Gel -- 6.7 fl oz', (102, 8, 17, 77, 0)),\n", + " ('B0000Y3GF2',\n", + " 'Free & Clear Hairspray Firm Hold, 8 Ounce',\n", + " (71, 122, 139, 91, 0)),\n", + " ('B0000Y3GIE',\n", + " 'Nailtiques Formula 2 Nail Growth Formula Treatments, 0.25 Ounce',\n", + " (28, 134, 59, 170, 0)),\n", + " ('B0000Y3LAC',\n", + " 'Jobst It Stays Roll-on Body Adhesive 2 oz. (3 pack)',\n", + " (92, 115, 70, 169, 0)),\n", + " ('B0000Y8H3S',\n", + " 'Rogaine for Men Hair Regrowth Treatment, Extra Strength Original Unscented, Set of 3, 2-Ounce Bottles',\n", + " (214, 51, 59, 103, 0)),\n", + " ('B0000YUWY0',\n", + " 'jerome russell Hair Color Thickener for Thinning Hair, Black, 3.5 Ounce',\n", + " (120, 66, 10, 100, 0)),\n", + " ('B0000YUX4O', 'Mebco Tortoise Shower Detangler', (241, 196, 201, 53, 0)),\n", + " ('B0000YUXGW', 'Mavala Scientifique (Nail Hardener)', (250, 3, 219, 38, 0)),\n", + " ('B0000YUXI0',\n", + " 'Mavala Stop - Helps Cure Nail Biting and Thumb Sucking, 0.3-Fluid Ounce',\n", + " (228, 196, 162, 103, 0)),\n", + " ('B0000YV6BI', 'ApHogee Shampoo for Damaged Hair', (132, 202, 226, 60, 0)),\n", + " ('B0000YV6YK', \"One 'n Only Colorfix\", (194, 247, 218, 53, 0)),\n", + " ('B0000YV83O', 'Facial-Flex Facial Exercise System', (132, 173, 33, 159, 0)),\n", + " ('B0000ZHH5G',\n", + " 'Vanicream Moisturizing Skin Cream, 16 Ounces',\n", + " (44, 134, 33, 103, 0)),\n", + " ('B0000ZHOEU',\n", + " 'Free & Clear Liquid Cleanser, 8 Ounce',\n", + " (117, 21, 201, 15, 0)),\n", + " ('B0000ZLEFU',\n", + " 'Auric Blends Perfume Oil, 0.33 oz - Coco Mango',\n", + " (127, 21, 122, 15, 0)),\n", + " ('B0000ZLEX2',\n", + " 'Black Opium - Auric Blends Perfume Oils',\n", + " (47, 96, 187, 15, 0)),\n", + " ('B00011JI88', 'Ardell Fashion Lashes - 120 Black Demi', (36, 21, 59, 75, 0)),\n", + " ('B00011JOQY', 'Cricket Static Free Fast Flo', (36, 202, 153, 34, 0)),\n", + " ('B00011JOR8',\n", + " 'Cricket Hair Brush Static Free, Mini Fast Flo, 1.28 Ounce',\n", + " (97, 149, 226, 99, 0)),\n", + " ('B00011JTFA', 'Star Nail Pen-Style Polish Corrector', (42, 129, 70, 170, 0)),\n", + " ('B00011QTZI',\n", + " 'Cricket Technique Barrel Hair Brush, XX-large Round, 2 Inch',\n", + " (36, 202, 162, 170, 0)),\n", + " ('B00011QUDE',\n", + " 'Helen of Troy 1514 Brush Iron, White, 1 1/2 Inches Barrel',\n", + " (155, 21, 132, 220, 0)),\n", + " ('B00011QUKW',\n", + " 'Hot Tools HT1108 Professional Marcel Iron, 1 Inch',\n", + " (187, 77, 24, 3, 0)),\n", + " ('B00011QVHO',\n", + " 'Spornette Porcupine Rounder Brush, 2-Inch Diameter',\n", + " (195, 129, 140, 76, 0)),\n", + " ('B00011QVIS',\n", + " 'Spornette Prego Brush, 2-Inch Diameter',\n", + " (230, 3, 218, 52, 0)),\n", + " ('B00011QVUG',\n", + " 'For Pro Stretch Terry Headband with Velcro 3in.',\n", + " (34, 3, 59, 77, 0)),\n", + " ('B000127UUA',\n", + " 'Camille Beckman Glycerin Hand Therapy, White Lilac, 8 Ounce',\n", + " (232, 161, 139, 91, 0)),\n", + " ('B000127UVY',\n", + " 'Camille Beckman Glycerin Hand Therapy, Glycerine Rosewater, 6 Ounce',\n", + " (232, 103, 226, 219, 0)),\n", + " ('B000127VFE',\n", + " 'Camille Beckman Silky Body Moisturizing Cream, Glycerine Rosewater, 16 Ounce',\n", + " (232, 103, 208, 219, 0)),\n", + " ('B00012NEYG', \"Burt's Bees Head to Toe Starter Kit\", (28, 59, 43, 91, 0)),\n", + " ('B00012NI7E',\n", + " \"Burt's Bees Avocado Butter Pre-Shampoo Hair Treatment with Nettles and Rosemary - 4.34 fl oz\",\n", + " (196, 122, 65, 15, 0)),\n", + " ('B00012NJZA',\n", + " \"Burt's Bees Orange Essence Facial Cleanser, 4.3 Ounces\",\n", + " (128, 47, 65, 103, 0)),\n", + " ('B00012NKGS',\n", + " \"Burt's Bees: Citrus Facial Scrub, 2 oz\",\n", + " (47, 21, 216, 103, 0)),\n", + " ('B000136P7S',\n", + " 'Miracle of Aloe Miracle Hand Repair Cream 8 Oz',\n", + " (247, 21, 246, 76, 0)),\n", + " ('B00013TQRE',\n", + " 'Rogaine for Women Hair Regrowth Treatment 3- 2 ounce bottles',\n", + " (255, 51, 59, 15, 0)),\n", + " ('B00013YYS0',\n", + " \"Burt's Bees - Cuticle Creme Lemon Butter - 0.6 oz.\",\n", + " (47, 173, 216, 34, 0)),\n", + " ('B00013YZ7U', \"Dr. Bronner's Almond Soap 32oz\", (191, 161, 67, 116, 0)),\n", + " ('B00013Z15A',\n", + " \"Burt's Bees Day Creme Carrot Nutritive -- 2 fl oz\",\n", + " (218, 24, 254, 34, 0)),\n", + " ('B000141O6E',\n", + " 'Redken Extreme Anti-Snap Leave-in Treatment, 8.5 Ounce',\n", + " (47, 196, 75, 169, 0)),\n", + " ('B000142AZ8',\n", + " 'Bain de Soleil Mega Tan Sunscreen Lotion With Self Tanner, SPF 4 - 4 fl oz',\n", + " (132, 196, 163, 170, 0)),\n", + " ('B000142C1A',\n", + " 'Essie Nail Polish Marshmallow, .5 Ounce',\n", + " (250, 62, 254, 116, 0)),\n", + " ('B000142FVW',\n", + " 'Opi Nail Lacquer, Not So Bora Pink, 0.5 Fluid Ounce',\n", + " (210, 77, 59, 198, 0)),\n", + " ('B000142JDG',\n", + " 'Roux Fanci-Full Mousse, 18 Spun Sand, 6 Fluid Ounce',\n", + " (39, 8, 192, 34, 0)),\n", + " ('B000142KZ8',\n", + " 'Pretty Nails Instant Polish Remover Regular',\n", + " (201, 202, 201, 60, 0)),\n", + " ('B000142MGA',\n", + " 'Fran Wilson Eye Tees Precision Makeup Applicators 80 Cotton Swabs',\n", + " (11, 120, 11, 116, 0)),\n", + " ('B000142NDC',\n", + " 'Bigen Permanent Powder Hair Color, Dark Chestnut, .21 Ounce',\n", + " (5, 46, 27, 103, 0)),\n", + " ('B000142OZY',\n", + " 'Aphogee Conditioner Pro-Vitamin Leave-In 8 oz.',\n", + " (13, 3, 24, 53, 0)),\n", + " ('B000142P12',\n", + " 'ApHogee Keratin and Green Tea Restructurizer 8 fl. oz',\n", + " (132, 47, 43, 169, 0)),\n", + " ('B000142PUS',\n", + " 'Clairol Professional Beautiful Collection Semi-permanent Hair Color, Light Reddish Brown',\n", + " (102, 149, 216, 219, 0)),\n", + " ('B000142Q6G', 'Colora Henna Veg-Hair Chestnut 2oz', (29, 119, 122, 169, 0)),\n", + " ('B000142TU4',\n", + " 'Sally Hansen Polish Remover 8 oz. Strengthening',\n", + " (112, 202, 24, 99, 0)),\n", + " ('B000142U9E',\n", + " 'Fantasia High Potency IC Hair Polisher Styling Gel, with Sparkle Lites, 16 oz.',\n", + " (245, 66, 140, 206, 0)),\n", + " ('B000142ZFS', 'Super Nail Polish Thinner 4oz', (3, 135, 65, 76, 0)),\n", + " ('B0001431AG',\n", + " 'Fran Wilson Cake Eyeliner, Black, 0.09 Ounce',\n", + " (241, 211, 201, 219, 0)),\n", + " ('B0001432S2',\n", + " 'OPI Natural Nail Strengthener Treatment, 0.5-Fluid Ounce',\n", + " (201, 145, 59, 195, 0)),\n", + " ('B0001433OU',\n", + " 'OPI Nail Lacquer, Pirates of The Caribbean Collection, Stranger Tides, 0.5 Fluid Ounce',\n", + " (112, 4, 40, 12, 0)),\n", + " ('B0001433VI',\n", + " 'OPI Start-to-finish Base Coat, Top Coat and Nail Strengthener, 0.5-Fluid Ounce',\n", + " (86, 46, 219, 91, 0)),\n", + " ('B000143AY8', 'Fran Wilson Yellow Mood Matcher', (119, 89, 140, 169, 0)),\n", + " ('B000143CFA', 'Andrea Eyelash Adhesive: Clear', (132, 159, 254, 76, 0)),\n", + " ('B000143K2A',\n", + " \"Mane 'n Tail Deep Moisturizing Conditioner\",\n", + " (132, 145, 71, 77, 0)),\n", + " ('B000143O7G', 'Instant Peel Natural Dead Skin Remover', (120, 2, 3, 12, 0)),\n", + " ('B000146L62',\n", + " 'Cassia Clove 100% Pure & Natural Aromatherapy Herbal Soap- 4 oz (113g)',\n", + " (252, 149, 226, 152, 0)),\n", + " ('B000146LKS',\n", + " 'Patchouli 100% Pure & Natural Aromatherapy Herbal Soap- 4 oz (113g)',\n", + " (252, 149, 226, 152, 1)),\n", + " ('B00014D138',\n", + " 'Jason Pure Natural Moisturizing Creme, Anti-Aging Tea Time, 4 Ounce',\n", + " (50, 196, 219, 99, 0)),\n", + " ('B00014D1OW', 'Lemon Clarifying Shampoo 11 Ounces', (93, 247, 138, 217, 0)),\n", + " ('B00014D322',\n", + " 'MillCreek - Biotin Shampoo, 16 fl oz gel',\n", + " (56, 24, 124, 75, 0)),\n", + " ('B00014D5O8', \"Burt's Bees Hand Salve, 3 oz Tin\", (230, 3, 201, 114, 0)),\n", + " ('B00014DGCO',\n", + " 'Plantlife Lavender 100% Pure Essential Oil - Bulgarian - 10 ml',\n", + " (252, 211, 226, 169, 0)),\n", + " ('B00014DIKE',\n", + " \"Burt's Bees Therapeutic Bath Crystals, 1 Pound\",\n", + " (71, 145, 41, 206, 0)),\n", + " ('B00014DKKC',\n", + " \"Burt's Bees Lemon & Vitamin E Bath & Body Oil, 4 Fluid Ounce\",\n", + " (117, 23, 65, 162, 0)),\n", + " ('B00014DM5K',\n", + " 'Facial Toner & Freshener-Aloe Vera Earth Science 8 oz Liquid',\n", + " (196, 173, 226, 159, 0)),\n", + " ('B00014DMQE',\n", + " 'Reviva Labs 10% Glycolic Acid Cream -- 1.5 oz',\n", + " (47, 255, 27, 60, 0)),\n", + " ('B00014DMRI',\n", + " 'Aubrey Organics - Natural Mist Herbal Hairspray (Regular Hold), 8 fl oz spray',\n", + " (71, 134, 162, 15, 0)),\n", + " ('B00014DMUA',\n", + " 'Moisturizer-Daily Essential Jojoba/Aloe Desert Essence 4 oz Cream',\n", + " (196, 173, 59, 77, 0)),\n", + " ('B00014DTY4',\n", + " 'Nutribiotic Skin Ointment, 0.5 Ounce',\n", + " (170, 109, 59, 219, 0)),\n", + " ('B00014DU6G',\n", + " 'Earth Science Fragrance Free Clarifying Facial Wash 8 oz',\n", + " (247, 3, 219, 195, 0)),\n", + " ('B00014DZ2K', 'AmeriLeather Leather Toiletry Bag', (241, 62, 122, 15, 0)),\n", + " ('B00014EH2C',\n", + " 'Apricot Intensive Night Cream, 1.65oz',\n", + " (204, 228, 153, 77, 0)),\n", + " ('B00014EKJC',\n", + " \"Nature's Plus Natural Beauty Cleansing Bar -- 3 oz\",\n", + " (21, 4, 10, 219, 0)),\n", + " ('B00014FTTM',\n", + " 'Reviva Labs DMAE Firming Fluid - 1 oz',\n", + " (182, 80, 65, 170, 0)),\n", + " ('B00014GT78',\n", + " 'Dermablend Cover Creme - Chroma 1 - Rose Beige, 1 oz',\n", + " (99, 66, 3, 195, 0)),\n", + " ('B00014GTWS',\n", + " 'Dermablend Leg and Body Cover Make-Up SPF 15, Medium, 3.4 Ounce',\n", + " (71, 80, 27, 206, 0)),\n", + " ('B00014HF94',\n", + " \"Vitamin E 14,000 IU Nature's Plus 0.5 oz Liquid\",\n", + " (132, 108, 246, 53, 0)),\n", + " ('B00014JKG0',\n", + " \"Nature's Gate Tea Tree Moisturizing Lotion for Irritated, Distressed Skin, 18-Ounce Pump Bottle\",\n", + " (170, 115, 11, 159, 0)),\n", + " ('B00014JOHA',\n", + " 'Kiss My Face - Whenever Shampoo, 11 fl oz liquid',\n", + " (26, 46, 118, 103, 0)),\n", + " ('B00014WW38',\n", + " 'Naturtint Permanent Hair Colorant Sandy Blonde',\n", + " (166, 96, 234, 37, 0)),\n", + " ('B00015GWQU',\n", + " 'Fran Wilson Nail Tees Precision Makeup Applicators 120 Cotton Swabs',\n", + " (11, 69, 153, 116, 0)),\n", + " ('B00015HBD8',\n", + " 'Phillips Light Touch 1 Cushion Hair Brush',\n", + " (244, 159, 24, 99, 0)),\n", + " ('B00015HBEC',\n", + " 'Spornette Large Oval Nylon Bristle Cushion Brush',\n", + " (105, 77, 141, 27, 0)),\n", + " ('B00015HBEM',\n", + " 'Spornette Double Stranded XL Nylon Rounder Brush, 2-Inch Diameter',\n", + " (80, 159, 192, 27, 0)),\n", + " ('B00015XAQ0',\n", + " 'Avalon Organics Vitamin C Renewal Refreshing Cleansing Gel, 8.5 Ounce Bottle',\n", + " (38, 178, 162, 34, 1)),\n", + " ('B00016QYOO',\n", + " 'Desert Essence Thoroughly Clean Face Wash - Original -- 8.5 fl oz',\n", + " (239, 100, 153, 195, 0)),\n", + " ('B00016RIIA', 'Yerba Prima Tampico Skin Brush 1 Ea', (132, 196, 234, 53, 0)),\n", + " ('B00016WSIK',\n", + " 'Earth Therapeutics Body Sponge, Anti-Bacterial, 1 Count',\n", + " (232, 59, 118, 27, 0)),\n", + " ('B00016WUEW',\n", + " 'Heritage Products Rosewater & Glycerin, 4 Ounce',\n", + " (141, 59, 162, 178, 0)),\n", + " ('B00016WULK',\n", + " 'Avalon Organics Vitamin C Renewal Moisture Plus Lotion SPF 15 -- 4 fl oz',\n", + " (104, 234, 67, 34, 1)),\n", + " ('B00016WV6E', 'Henna Persia Light Brown 4 Ounces', (13, 96, 37, 100, 0)),\n", + " ('B00016WW8Q', \"Dickinson's Witch Hazel 16 oz\", (1, 96, 41, 99, 0)),\n", + " ('B00016WXEY',\n", + " 'LILY OF THE DESERT, Aloe Vera Gelly - 12 oz',\n", + " (154, 134, 11, 77, 0)),\n", + " ('B00016X06O',\n", + " 'Herbatint Permanent Herbal Haircolor Gel, Golden Chestnut 4D, 4.56-Ounce',\n", + " (71, 21, 246, 206, 0)),\n", + " ('B00016X3G6',\n", + " 'Herbal Salt Scrub Lavender 20.50 Ounces',\n", + " (231, 173, 226, 159, 0)),\n", + " ('B00016X3L6',\n", + " 'GIOVANNI COSMETICS, Nutrafix Hair Reconstructor - 8.5 oz',\n", + " (71, 159, 162, 202, 0)),\n", + " ('B00016X604',\n", + " \"Smiles' Prid Homeopathic Drawing Salve, 18 GM, 1 each\",\n", + " (123, 161, 162, 160, 0)),\n", + " ('B00016X68Q',\n", + " 'J.R. Liggett Bar Shampoo, Original Formula, 3.5 Ounce',\n", + " (28, 236, 201, 91, 0)),\n", + " ('B00016XJ4M',\n", + " 'Thayers - Rose Petal Witch Hazel with Aloe Vera Alcohol-Free Toner - 12 oz.',\n", + " (128, 108, 162, 152, 0)),\n", + " ('B00016XJ7O',\n", + " 'Thayers Witch Hazel w/Aloe Vera Lemon 12 oz',\n", + " (71, 135, 206, 77, 0)),\n", + " ('B00016XJ8S',\n", + " 'Arbordoun Abundantly Herbal Calendula Cream 4 Oz',\n", + " (118, 47, 163, 100, 0)),\n", + " ('B000172R76',\n", + " 'Ace Teasing Tail Comb 8" * Black',\n", + " (155, 62, 254, 160, 0)),\n", + " ('B000177FXW',\n", + " \"Bar Soap-Tea Tree Dr. Bronner's 5 oz Bar\",\n", + " (71, 181, 252, 219, 0)),\n", + " ('B00017XWJ8',\n", + " 'Ralph Lauren Eau de Toilette Spray For Women, 1.7 Oz',\n", + " (212, 47, 139, 38, 0)),\n", + " ('B000186X4I',\n", + " 'Shiseido Shiseido Cleansing Massage Brush',\n", + " (91, 8, 33, 114, 0)),\n", + " ('B000195GAY',\n", + " 'Blue Grass By Elizabeth Arden Deodorant Cream, 1.5-Ounce',\n", + " (191, 115, 226, 195, 0)),\n", + " ('B000196U04', 'Diamon Deb Nail File 8"', (253, 24, 216, 114, 0)),\n", + " ('B0001AGMWE',\n", + " 'Miracell ProEar-for Itchy, Irritated Ears .5 OZ',\n", + " (230, 62, 162, 170, 0)),\n", + " ('B0001AQCII',\n", + " 'China Glaze Nail Polish, Jetstream, 0.5 Fluid Ounce',\n", + " (79, 196, 250, 21, 0)),\n", + " ('B0001B86HM',\n", + " 'Conair Pro Style 1875 Watt Hard Hat Hair Dryer',\n", + " (28, 159, 24, 116, 0)),\n", + " ('B0001EKTZQ',\n", + " 'Dermalogica Multi-active Toner, 8.4 Fluid Ounce',\n", + " (139, 180, 163, 15, 0)),\n", + " ('B0001EKWPI',\n", + " 'Vanicream Cleansing Bar, Fragrance Free, 3.9 Ounce Bars (Pack of 3)',\n", + " (71, 134, 122, 169, 0)),\n", + " ('B0001EKYL0',\n", + " 'Exuviance Evening Restorative Complex, 1.75 Fluid Ounce',\n", + " (133, 2, 59, 162, 0)),\n", + " ('B0001EL0CW',\n", + " 'Basis Cleans and Smoothes Sensitive Skin Bar',\n", + " (170, 211, 67, 34, 0)),\n", + " ('B0001EL5R2', 'PCA Skin Acne Cream, 0.5 Ounce', (92, 202, 59, 77, 0)),\n", + " ('B0001EL658',\n", + " 'Bare Escentuals Maximum Coverage Concealer Brush',\n", + " (149, 120, 153, 114, 0)),\n", + " ('B0001FF80G', 'Dopp Jumbo Kit w/ Zip Bottom', (34, 62, 67, 219, 0)),\n", + " ('B0001I8ZT4',\n", + " 'Mar-V-Cide Shampoo Brush & Invigorator',\n", + " (32, 161, 139, 116, 0)),\n", + " ('B0001LH6YG', 'My Spots Are Consealed Light Color', (194, 196, 70, 103, 0)),\n", + " ('B0001M3K4U',\n", + " 'Soft N Style Pro-Cap Professional Processing Caps, Extra Large, 30-count',\n", + " (241, 196, 140, 37, 0)),\n", + " ('B0001M7D7A',\n", + " 'Marianna Single Prong Curl Clip 80 pcs',\n", + " (225, 189, 43, 57, 0)),\n", + " ('B0001MC06Y',\n", + " 'Peter Thomas Roth Beta Hydroxy Acid 2% Acne Wash 8.5 fl oz',\n", + " (133, 211, 218, 103, 0)),\n", + " ('B0001MROQA',\n", + " 'Hot Tools Big Bumper Spring Curling Iron, 1-1/2"',\n", + " (153, 66, 254, 100, 0)),\n", + " ('B0001TJX2Q',\n", + " 'Home Health Castor Oil, Cold Pressed and Cold Processed, 32-Ounce',\n", + " (102, 211, 234, 220, 0)),\n", + " ('B0001TMDF0',\n", + " 'Heritage Store Rose Petals Rosewater 8 oz',\n", + " (246, 236, 201, 114, 0)),\n", + " ('B0001TO3NA', \"Grandpa's Pine Tar Soap Medium Size\", (216, 21, 227, 27, 0)),\n", + " ('B0001TODNK',\n", + " 'Earth Therapeutics Hydro Exfoliating Towel, 1 each',\n", + " (120, 96, 254, 152, 0)),\n", + " ('B0001TOH8G',\n", + " 'Exfoliating Hydro Gloves-Natural Earth Therapeutics 1 Set',\n", + " (132, 173, 140, 169, 0)),\n", + " ('B0001TQ5MW', 'Margarite Zinc Cream -- 1 oz', (102, 255, 33, 53, 0)),\n", + " ('B0001TQ9WI',\n", + " 'Mountain Ocean Skin Trip Moisturizer, Coconut, 8-Ounce',\n", + " (13, 55, 201, 114, 0)),\n", + " ('B0001TSJPI',\n", + " 'Bar Soap - Sandalwood, 6 Units / 2.6 oz',\n", + " (234, 247, 218, 12, 0)),\n", + " ('B0001TSWWS',\n", + " 'Home Health Roll-On Deodorant Herbal Scent -- 3 fl oz',\n", + " (71, 173, 219, 160, 0)),\n", + " ('B0001UWRCI',\n", + " 'Yu-Be Moisturizing Skin Cream 1.25 oz Tube',\n", + " (252, 202, 163, 195, 0)),\n", + " ('B0001VKL7U', \"Burt's Bees Lip Shimmer, Rhubarb\", (128, 77, 37, 195, 0)),\n", + " ('B0001VOJWI',\n", + " 'Pheromone By Marilyn Miglin For Women. Eau De Parfum Spray 1.7 Oz / 50 Ml.',\n", + " (47, 134, 65, 103, 0)),\n", + " ('B0001XKA38',\n", + " 'Roux Lash and Brow Tint, Brown, 40 Count',\n", + " (120, 122, 139, 76, 0)),\n", + " ('B0001XLSQ6', 'Steam Facial By Kaz', (183, 4, 40, 12, 0)),\n", + " ('B0001XLSR0',\n", + " 'ROUX Tween Time Instant Haircolor Touch-Up Stick BLACK 1/3 oz/10g',\n", + " (152, 47, 24, 159, 0)),\n", + " ('B0001XQNMK',\n", + " 'Roux Fanci Full Mousse #52 White Mink 6 oz',\n", + " (194, 47, 122, 27, 0)),\n", + " ('B0001Y74VS',\n", + " 'Ouidad by Ouidad Ouidad Climate Control Heat and Humidity Gel for Unisex, 8.5 Ounce',\n", + " (58, 68, 33, 169, 0)),\n", + " ('B0001Y74XG',\n", + " 'Ouidad Water Works Clarifying Shampoo, 8.5 Ounce',\n", + " (212, 21, 246, 114, 0)),\n", + " ('B0001YOMD6',\n", + " 'Touch with Love Eau De Parfum Spray for Women by Fred Hayman, 1.7 Ounce',\n", + " (175, 100, 234, 12, 0)),\n", + " ('B0001YXXUY',\n", + " 'Hot Tools HT1074 Anti-Static Ionic Hot Air Brush with Ion Technology, 1000 Watts, 1 1/2 Inches',\n", + " (182, 159, 27, 76, 0)),\n", + " ('B0001ZA3Y2', 'U-Lactin Dry Skin Lotion - 16 oz.', (252, 115, 59, 77, 0)),\n", + " ('B0001ZA4CS',\n", + " 'NeoStrata Exuviance CoverBlend Multi Function Concealer SPF15 - Sand, .5 fl oz',\n", + " (132, 115, 33, 13, 0)),\n", + " ('B0001ZYL3Q',\n", + " 'TheraNeem Cream - Original Organix South 2 oz Cream \\nVanilla',\n", + " (118, 66, 216, 103, 0)),\n", + " ('B0001ZYLAO',\n", + " 'Emerita Pro-gest Natural Balancing Cream, 2 Ounce',\n", + " (177, 62, 122, 103, 0)),\n", + " ('B0001ZZH0M',\n", + " 'Naturally Fresh, Deodorant Crystal Spray Mist, 4 Oz ',\n", + " (71, 21, 227, 27, 0)),\n", + " ('B00020DY2O',\n", + " 'TheraNeem Gentle Therape Shampoo Organix South 12 oz Liquid',\n", + " (44, 173, 197, 171, 0)),\n", + " ('B00020E1P8', 'Shiseido Shiseido Facial Cotton', (194, 103, 27, 160, 0)),\n", + " ('B00021AK4I',\n", + " 'Calvin Klein Ck One EDT Spray 1.7 oz for Unisex',\n", + " (9, 62, 122, 195, 0)),\n", + " ('B00021AM9G',\n", + " 'Hanae Mori by Hanae Mori for Women - 3.4 Ounce EDT Spray',\n", + " (31, 24, 27, 116, 0)),\n", + " ('B00021AQCY',\n", + " 'Fekkai Shea Butter Moisturizing Shampoo Hair Products 8 Fl Oz',\n", + " (41, 100, 67, 206, 0)),\n", + " ('B00021AYF8',\n", + " 'Mustela Foam Shampoo for Newborns - 5.07 oz.',\n", + " (128, 47, 65, 170, 0)),\n", + " ('B00021B8L2',\n", + " 'Philosophy Hope in a Jar Daily Moisturizer, Dry Skin, 2 Ounce',\n", + " (127, 3, 98, 75, 0)),\n", + " ('B00021B95W',\n", + " 'Philosophy Coconut Frosting Shampoo/Shower Gel/Bubble Bath, 16 Ounces',\n", + " (117, 3, 254, 114, 0)),\n", + " ('B00021BEXY', 'Blinc Kiss Me Mascara, Dark Brown', (210, 4, 40, 12, 0)),\n", + " ('B00021C1LI',\n", + " 'Philosophy Purity Made Simple One-Step Facial Cleanser, 16 Ounces',\n", + " (107, 8, 219, 182, 0)),\n", + " ('B00021C49W',\n", + " 'Philosophy Amazing Grace Shower Gel, 16 Ounces',\n", + " (221, 8, 70, 152, 0)),\n", + " ('B00021C5Y6',\n", + " 'STILL JENNIFER LOPEZ by Jennifer Lopez EAU DE PARFUM SPRAY 3.4 OZ',\n", + " (178, 145, 122, 103, 0)),\n", + " ('B00021C9BA', 'NARS Cream Blush, Lokoum', (161, 129, 41, 170, 0)),\n", + " ('B00021CNCK',\n", + " 'CASHMERE MIST by Donna Karan EDT SPRAY 3.4 OZ',\n", + " (76, 211, 122, 53, 0)),\n", + " ('B00021CSBG', 'NARS Duo Eyeshadow, All About Eve', (200, 196, 201, 195, 0)),\n", + " ('B00021CT10', 'NARS Matte Eyeshadow, Thunderball', (65, 66, 254, 170, 0)),\n", + " ('B00021CT56', 'NARS Shimmer Eyeshadow, Nepal', (65, 66, 254, 116, 0)),\n", + " ('B00021D5FY',\n", + " 'Desire by Alfred Dunhill for Men - 1.7 Ounce EDT Spray',\n", + " (119, 96, 226, 116, 0)),\n", + " ('B00021D6JE',\n", + " 'FCUK by French Connection Eau De Toilette Spray 1.7 oz for Men',\n", + " (59, 167, 122, 77, 0)),\n", + " ('B00021DDR4', 'NARS The Multiple, Maui', (65, 122, 153, 170, 0)),\n", + " ('B00021DDYW', 'NARS Sheer Lipstick, Barbarella', (3, 248, 201, 15, 0)),\n", + " ('B00021DE14', 'NARS Semi-Matte Lipstick, Morocco', (3, 248, 201, 15, 1)),\n", + " ('B00021DG80', 'NARS Lip Gloss, Turkish Delight', (79, 202, 201, 76, 0)),\n", + " ('B00021DJ32', 'NARS Blush, Taj Mahal', (107, 77, 140, 34, 0)),\n", + " ('B00021DPHW', 'NARS Bronzing Powder, Casino', (109, 129, 65, 241, 0)),\n", + " ('B00021DTEG',\n", + " 'Bare Escentuals bareMinerals Glimmer Celestine',\n", + " (117, 59, 70, 91, 0)),\n", + " ('B00021DUM2',\n", + " \"bareMinerals Blush - I'm Amused Rouge\",\n", + " (194, 80, 201, 170, 0)),\n", + " ('B00021DVCQ',\n", + " 'BareMinerals Original Foundation Broad Spectrum SPF 15 8 g/0.28 Oz (Fair C10 8g/0.28 oz)',\n", + " (128, 145, 201, 76, 0)),\n", + " ('B00021DZCC',\n", + " 'Philosophy Falling in Love Spray Fragrance, 2 Ounce',\n", + " (221, 145, 139, 15, 0)),\n", + " ('B00021EA9Y',\n", + " 'Mustela Hydra-Bebe Body Lotion w/ Pump 10.14 US fl. oz',\n", + " (63, 213, 41, 103, 0)),\n", + " ('B00021KD2C',\n", + " 'derma e Anti-Wrinkle Vitamin A Retinyl Palmitate Crème , 4-Ounce Jar',\n", + " (56, 21, 59, 160, 0)),\n", + " ('B00021PDN6',\n", + " 'Cacharel Anais Anais By Cacharel - Eau De Toilette Spray 3.4 Oz, 3.4 oz',\n", + " (63, 145, 55, 91, 0)),\n", + " ('B00021UR3C',\n", + " 'Green Tea by Elizabeth Arden, 1.5 Ounce',\n", + " (229, 180, 82, 202, 0)),\n", + " ('B00021W26M',\n", + " 'Prestige Liquid Eyeliner, Legend, 0.1 Ounce',\n", + " (222, 29, 227, 160, 0)),\n", + " ('B00021WZVE',\n", + " 'Christian Super Long Lash Mascara Waterproof Seven Oils Black',\n", + " (132, 159, 163, 99, 0)),\n", + " ('B000225ZL0', 'Fresh Farmacy Cleanser by LUSH', (1, 134, 27, 37, 0)),\n", + " ('B000225ZOC', 'Karma Handmade Soap by LUSH', (120, 145, 138, 91, 0)),\n", + " ('B0002260DW', 'Sex Bomb Bath Bomb by LUSH', (119, 161, 162, 53, 0)),\n", + " ('B0002260L4', 'Big Blue Bath Bomb by LUSH', (141, 211, 65, 53, 0)),\n", + " ('B0002260N2', 'Karma Komba Solid Shampoo by LUSH', (232, 100, 254, 91, 0)),\n", + " ('B00022F1DW',\n", + " 'Organic Excellence Mint Shampoo, 16 Ounce',\n", + " (93, 103, 34, 195, 0)),\n", + " ('B00022WA9K', 'Revlon Shine Enchancing Hot Air Kit', (149, 66, 201, 114, 0)),\n", + " ('B00022WA9U',\n", + " 'Revlon RV261 20-Roller Ionic Professional Hairsetter, Purple',\n", + " (135, 77, 219, 114, 0)),\n", + " ('B00023DIBI',\n", + " 'Cucina Coriander and Olive Tree 33.8 oz Purifying Hand Wash Refill',\n", + " (120, 21, 153, 104, 0)),\n", + " ('B00023KDAW',\n", + " 'amazing grace | perfumed firming body emulsion | philosophy 8 oz.',\n", + " (99, 196, 67, 241, 0)),\n", + " ('B000248HLI',\n", + " 'StriVectin-SD Intensive Repair for Existing Stretch Marks, 6 oz.',\n", + " (252, 47, 227, 169, 0)),\n", + " ('B000260KIO',\n", + " 'Ouidad Botanical Boost Moisture Infusing and Refreshing Spray, 8.5 Ounce',\n", + " (132, 10, 43, 169, 0)),\n", + " ('B0002716FO',\n", + " 'Ardell Duralash Flare Short Black (56 Lashes)',\n", + " (200, 100, 33, 169, 0)),\n", + " ('B000271KR8',\n", + " 'Clairol Natural Instincts 02 Sahara Light Blonde 1 Kit (Pack of 3) (packaging may vary)',\n", + " (70, 161, 231, 38, 0)),\n", + " ('B000273PEO',\n", + " 'Happy By Clinique For Women. Eau De Parfum Spray 1.7 Ounces',\n", + " (175, 100, 10, 75, 0)),\n", + " ('B000273RI8', 'M.D. Forte Facial Cream III', (56, 135, 216, 91, 0)),\n", + " ('B000277N7Y',\n", + " 'Happy By Clinique For Men. Cologne Spray 1.7 Oz.',\n", + " (92, 196, 59, 91, 0)),\n", + " ('B00027C9CS',\n", + " 'Suave For Men, Deep Clean Peppermint, Shampoo12.6 fl Ounce 373 ml)',\n", + " (117, 115, 153, 27, 0)),\n", + " ('B00027CDY2',\n", + " 'Neutrogena Triple Moisture Silk Touch Leave-In Cream, 6 Fluid Ounce',\n", + " (173, 202, 163, 103, 0)),\n", + " ('B00027CDYM',\n", + " 'Neutrogena Clean Replenishing Deep Recovery Hair Mask, 6 oz',\n", + " (144, 202, 37, 114, 0)),\n", + " ('B00027CGWQ',\n", + " 'Udderly Smooth Udder Cream, Skin Moisturizer, 12 Ounce Jar',\n", + " (128, 141, 139, 219, 1)),\n", + " ('B00027D0DU',\n", + " 'Neutrogena Cosmetics Makeup Remover, 3.8 oz',\n", + " (13, 8, 122, 206, 0)),\n", + " ('B00027D6SE',\n", + " 'Bye Bye Blemish Drying Lotion - 1 fl oz',\n", + " (56, 96, 10, 75, 0)),\n", + " ('B00027D8IC', 'Duo Lash Adhesive, Clear, 0.25 Ounce', (23, 141, 41, 152, 0)),\n", + " ('B00027D98Q',\n", + " 'Ardell Brow & Lash Growth Accelerator Treatment Gel 7ml/0.25oz',\n", + " (71, 21, 70, 184, 0)),\n", + " ('B00027DDEQ',\n", + " 'Clean & Clear Morning Glow Moisturizer, SPF 15, 4 Ounce',\n", + " (78, 135, 216, 53, 0)),\n", + " ('B00027DDOQ',\n", + " 'Clean & Clear Clear Advantage Acne Spot Treatment, 0.75 Ounce',\n", + " (78, 135, 122, 60, 0)),\n", + " ('B00027DHYM',\n", + " 'Natures Cure Body Acne Treatment Spray 3.5 Oz',\n", + " (144, 103, 124, 241, 0)),\n", + " ('B00027DMI8',\n", + " 'RoC Retinol Correxion Deep Wrinkle Night Cream, 1-Ounce',\n", + " (12, 170, 59, 91, 0)),\n", + " ('B00027DMJW',\n", + " 'Roc Retinol Correxion Deep Wrinkle Daily Moisturizer, SPF 30, 1-ounce Tube',\n", + " (93, 135, 75, 152, 0)),\n", + " ('B00027DMLK',\n", + " 'Frownies Corners Of Eyes And Mouth, 144 Patches',\n", + " (228, 247, 227, 34, 0)),\n", + " ('B00027DMSI',\n", + " 'Frownies Forehead & Between Eyes, 144 Patches',\n", + " (29, 145, 162, 169, 0)),\n", + " ('B00027EG9C',\n", + " 'Neutrogena Fresh Foaming Cleanser, 6.7 Ounce',\n", + " (144, 55, 3, 241, 0)),\n", + " ('B00027YZKM', 'Mirror* Hand* Large* Black', (55, 161, 153, 34, 0)),\n", + " ('B00028F0NM',\n", + " 'Alba Botanica Maximum Very Emollient Body Lotion, 12 Ounce Bottle',\n", + " (45, 96, 65, 60, 0)),\n", + " ('B00028LN1K',\n", + " \"GRANDPA'S BRANDS, Pine Tar Soap Bath Size - 4.25 oz\",\n", + " (32, 161, 24, 220, 0)),\n", + " ('B00028LURW', 'Henna Red 4 Ounces', (45, 21, 216, 77, 0)),\n", + " ('B00028LV4Y',\n", + " 'Natural Missst Herbal Hairspray Mist-Super Hold Aubrey Organics 8 oz Spray',\n", + " (71, 99, 162, 171, 0)),\n", + " ('B00028M3N2',\n", + " 'Now Foods Essential Oil, Lemon, 4 Fluid Ounce',\n", + " (63, 59, 67, 202, 0)),\n", + " ('B00028MLG6',\n", + " 'NOW Foods Apricot Kernel Oil (Liquid), 16 oz',\n", + " (252, 202, 3, 100, 0)),\n", + " ('B00028MLHA',\n", + " 'Cocoa Butter with jojoba oil - 100% Pure 6.5 fl.oz',\n", + " (71, 80, 22, 170, 0)),\n", + " ('B00028O7ZO',\n", + " \"Castile Liquid Soap-Lavender Dr. Bronner's 1 Gallon Liquid\",\n", + " (105, 63, 233, 219, 0)),\n", + " ('B00028OC4K',\n", + " 'Throughly Clean Face Wash - Original - 8.5 oz. (250 ml) - Liquid',\n", + " (71, 134, 246, 37, 0)),\n", + " ('B00028OPZ6',\n", + " 'GPB (Glycogen Protein Balance) Conditioner Jumbo Size - 16 oz - Liquid',\n", + " (71, 134, 162, 91, 0)),\n", + " ('B00028OQZA',\n", + " 'Sparkling Glacier Therapy Complexion Mist Aubrey Organics 3.4 oz (100ml) Liquid',\n", + " (71, 249, 122, 131, 0)),\n", + " ('B00028OSI0', 'Aloe Life Skin Gel and Herbs, 8 oz', (100, 122, 71, 160, 0)),\n", + " ('B00028OTAM',\n", + " 'Gabriel Cosmetics Inc. - Moisturizing Liquid Foundation Soft Beige 18 SPF - 1 oz.',\n", + " (192, 121, 116, 103, 0)),\n", + " ('B00028OTNY',\n", + " 'Mandarin Magic Hair Gel Aubrey Organics 8 oz Liquid',\n", + " (63, 134, 246, 171, 0)),\n", + " ('B00028OU5Q', 'Blue Green Algae Hair Mask 4 oz', (247, 134, 43, 236, 0)),\n", + " ('B00028PDWK',\n", + " 'Apricot Gentle Facial Scrub, 4 Ounce',\n", + " (245, 103, 231, 12, 0)),\n", + " ('B00028PFF0', 'WITCH HAZEL PADS EA 1/60 PADS', (216, 161, 246, 104, 0)),\n", + " ('B00028PXAC', 'Viobin Wheat Germ Oil 16 oz', (132, 23, 163, 195, 0)),\n", + " ('B0002A65LQ',\n", + " 'Philosophy Help Me Retinol Night Treatment, 1.05 Ounce',\n", + " (233, 159, 201, 206, 0)),\n", + " ('B0002B0R14',\n", + " 'H2Ocean 1.5 FL OZ Purified Ocean Salt Water Piercing Aftercare',\n", + " (43, 46, 71, 99, 0)),\n", + " ('B0002BB3YO',\n", + " 'NaturalCare Homeopathic Ultra Vein-Gard Leg Therapy Cream, 2.25-Ounce Package',\n", + " (63, 180, 219, 114, 0)),\n", + " ('B0002BPIZO',\n", + " 'Philosophy Pure Grace Shampoo, Bath & Shower gel, 16 Ounces',\n", + " (19, 134, 139, 91, 0)),\n", + " ('B0002CTSRM', 'Amber Butter', (119, 196, 153, 206, 0)),\n", + " ('B0002DLEJG',\n", + " 'Nailtek Foundation No.2 Ridge-Filling Nail Strengthener Base Coat, 0.5 Fluid Ounce',\n", + " (65, 122, 163, 236, 0)),\n", + " ('B0002DNZAC', 'MAC Eye Shadow Frost Satin Taupe', (225, 189, 227, 195, 0)),\n", + " ('B0002DO1RI',\n", + " 'MAC Studio Fix Powder Plus Foundation NC35 for Women, 0.52 Ounce',\n", + " (91, 149, 75, 91, 0)),\n", + " ('B0002DO1RS',\n", + " 'MAC Studio Fix Powder Plus Foundation NC45',\n", + " (91, 149, 163, 135, 0)),\n", + " ('B0002DPG1I', 'Fat Girl Slim by Bliss', (63, 247, 231, 202, 0)),\n", + " ('B0002DTV0K',\n", + " 'Emu Oil Soap Bar (110g) Brand: SoapWorks',\n", + " (32, 96, 67, 114, 0)),\n", + " ('B0002DUSR0',\n", + " 'PediFix Visco GEL Toe Spacers, Medium',\n", + " (28, 228, 122, 160, 0)),\n", + " ('B0002DUSUW',\n", + " 'PediFix Double-Toe Straightener #P57',\n", + " (80, 131, 234, 114, 0)),\n", + " ('B0002E4WOO',\n", + " \"Miracle of Aloe Miracle Hand Repair Cream 8 Oz Relieve Dry, Cracked, Flacking Hands Immediately! Therapeutic Formula Contains 60% Ultra Aloe - The Purest Most Potent Form of Whole Leaf Aloe Vera Gel. Fast Acting Relief, Say Good Bye to Dry, Cracked Hands Now! Keep Your Hands Healthy & Warm this Winter! Reduces Flaking and Redness, Use on Hands, Elbows and Knees, Exclusive Fast Acting Formula Penetrates Deep Into Damaged Skin Layers to Moisturize Where It's Needed Most. Leaves Hands Feeling Silky Smooth and Comfortable. Olay, Ponds, Vaseline, Nivea, Eucerin, Aveeno.\",\n", + " (247, 21, 246, 100, 0)),\n", + " ('B0002EBI82', 'Toppik Hair Fattener, 4-Ounce', (62, 145, 138, 188, 0)),\n", + " ('B0002EZXUG',\n", + " 'Vaseline Intensive Care Moisturizing Bath Beads, Gentle Breeze, 24 Ounces',\n", + " (44, 122, 139, 236, 0)),\n", + " ('B0002F1H6E',\n", + " 'Jergens All-Purpose Face Cream 425g/15oz',\n", + " (117, 196, 74, 75, 0)),\n", + " ('B0002FBOLW',\n", + " 'Atopalm Intensive Moisturizing Cream, 3.4 fl. Ounce',\n", + " (239, 152, 138, 53, 0)),\n", + " ('B0002FCCH2',\n", + " 'Suave Naturals Shampoo, Tropical Coconut - 22.5oz.',\n", + " (41, 120, 10, 53, 0)),\n", + " ('B0002FCD5I',\n", + " 'Suave Naturals Conditioner, Tropical Coconut - 22.5oz.',\n", + " (75, 4, 208, 219, 0)),\n", + " ('B0002FCDHQ',\n", + " 'Suave For Kids Double Dutch Apple Detangler Spray Conditioner 10.5Ounces',\n", + " (115, 255, 22, 152, 0)),\n", + " ('B0002G214U', 'Conair Soft Bonnet Hair Dryer', (98, 129, 219, 114, 0)),\n", + " ('B0002G21GI',\n", + " 'Ion Shine® by Conair Instant Heat Compact Styling Setter',\n", + " (220, 66, 70, 60, 0)),\n", + " ('B0002JG2NI',\n", + " 'Home Health Castor Oil Cold Pressed & Cold Processed 8 fl. oz.',\n", + " (128, 159, 3, 37, 0)),\n", + " ('B0002JGIZA',\n", + " 'Avalon Organics Night Cream Lavender Luminosity -- 2 oz',\n", + " (93, 4, 227, 217, 0)),\n", + " ('B0002JGU30',\n", + " 'Avalon Organics Hand & Body Lotion, Peppermint, 12 Ounce',\n", + " (104, 234, 67, 170, 0)),\n", + " ('B0002JHI1I',\n", + " 'Avalon Organics CoQ10 Facial Cleansing Milk -- 8.5 fl oz',\n", + " (218, 145, 43, 169, 0)),\n", + " ('B0002JIHT0',\n", + " 'Home Health Antidandruff Shampoo, Everclean, Unscented, 8-Ounce',\n", + " (119, 196, 234, 202, 0)),\n", + " ('B0002JISX0',\n", + " 'Earth Science A-D-E Creamy Fruit Oil Cleanser 8 oz.',\n", + " (117, 98, 231, 219, 0)),\n", + " ('B0002JIUDS',\n", + " 'Nutricology Ox Bile, 500 mg, 100 Vegetarian Capsules',\n", + " (233, 128, 70, 219, 0)),\n", + " ('B0002JKPA4', 'Caruso C97958 ION Steam Hairsetter', (215, 66, 139, 116, 0)),\n", + " ('B0002JKQ8K',\n", + " 'Caruso Professional Molecular Steam Rollers with Shields, Small (6-Pack)',\n", + " (80, 55, 226, 114, 0)),\n", + " ('B0002JMZ7A',\n", + " 'Yves Saint Laurent Volume Effet Faux Cils Luxurious Mascara for a False Lash Effect 1 High Density Black',\n", + " (132, 164, 43, 13, 0)),\n", + " ('B0002JNRCC',\n", + " 'Redken All Soft Conditioner Unisex Conditioner, 8.5 Ounce',\n", + " (99, 66, 24, 76, 0)),\n", + " ('B0002KS5VE',\n", + " 'Body Fantasies Body Spray for Women, Cotton Candy Fantasy Fragrance, 8 Ounce',\n", + " (162, 255, 59, 219, 0)),\n", + " ('B0002L2JLU',\n", + " 'Topix Pharm SPF 40 Citrix Antioxidant Sunscreen, 3.5 Fluid Ounce',\n", + " (44, 236, 234, 34, 0)),\n", + " ('B0002M9OYY',\n", + " 'Fake Bake Passion Fruit Body Polish 6 oz.',\n", + " (47, 3, 162, 103, 0)),\n", + " ('B0002NIAC0',\n", + " 'Obagi C-Exfoliating Day Lotion 2 fl oz.',\n", + " (93, 192, 254, 13, 0)),\n", + " ('B0002OCNMC',\n", + " 'Goat Milk Soap - Original (3 Pack) Canus Vermont 3 Bar Soap',\n", + " (18, 135, 65, 15, 0)),\n", + " ('B0002OMOIA',\n", + " 'Brahmi Oil - Ayurvedic Hair Growth massage oil',\n", + " (252, 24, 216, 152, 0)),\n", + " ('B0002PCH2M',\n", + " 'Focus 21 Sea Plasma All Purpose Skin and Hair Moisturizing Spray 12 oz',\n", + " (44, 255, 219, 152, 0)),\n", + " ('B0002Q8W9I',\n", + " 'NEW cnd Nail Design Stickey Base Coat 0.33Oz',\n", + " (116, 120, 33, 13, 0)),\n", + " ('B0002QB1SC',\n", + " 'Creative Nail Design Creative Nail Solar Oil, 0.5 Ounce',\n", + " (94, 46, 67, 77, 0)),\n", + " ('B0002RI2PG',\n", + " 'Dermablend Loose Setting Powder Original, 1 Ounce',\n", + " (194, 47, 65, 37, 0)),\n", + " ('B0002RPTX4',\n", + " 'Shampoo Scalp Massage Brush- 1 Brush',\n", + " (48, 255, 153, 160, 0)),\n", + " ('B0002RYHTQ',\n", + " 'Spa Sister Womens Cotton Moisture Enhancing Overnight Gloves',\n", + " (99, 29, 140, 99, 0)),\n", + " ('B0002SA9BU',\n", + " 'Best Hair Growth Vitamins NEW ADVANCED Hair Formula 37 Hair Vitamins for Faster Growing Healthy Hair 1 month Supply 60 Capsules',\n", + " (12, 228, 24, 91, 0)),\n", + " ('B0002SGNOM',\n", + " 'California Tan Sunsets Tanning Eyewear 1-PR Random Picked Colors',\n", + " (116, 25, 75, 13, 0)),\n", + " ('B0002SGSNI',\n", + " 'China Glaze Strong Adhesion Base Coat',\n", + " (152, 159, 24, 220, 0)),\n", + " ('B0002SI7DW',\n", + " 'NAIL TEK Regular Size Crystal File with Free Blue Case',\n", + " (113, 96, 140, 195, 0)),\n", + " ('B0002SISY0',\n", + " 'Spornette My Favorite Mini Nylon Tipped Paddle Brush',\n", + " (155, 145, 254, 170, 0)),\n", + " ('B0002SQ6YO',\n", + " 'Sponge Company Cosmetic Silk Sponge 1',\n", + " (155, 236, 122, 120, 0)),\n", + " ('B0002TSCZY',\n", + " 'Solia Tourmaline Ceramic Ion Flat Iron (1")',\n", + " (181, 3, 65, 103, 0)),\n", + " ('B0002TSD08',\n", + " 'Solia Professional Ceramic Ion Flat Iron (1-3/4")Solia',\n", + " (9, 77, 234, 169, 0)),\n", + " ('B0002UEDWE', 'Evian Facial Water Spray 1.7 Oz', (252, 196, 227, 34, 0)),\n", + " ('B0002VHBTU', 'Thermal Spa Hair Wrap - White', (4, 3, 139, 13, 0)),\n", + " ('B0002VJIH8',\n", + " 'Best Hair Vitamin to Grow Hair Faster with Fast Grow Ethnic Hair Growth Enhancer 90 capsules 30 Day Supply',\n", + " (45, 8, 67, 169, 0)),\n", + " ('B0002VQ0WO', 'Hair Dryer Stand', (200, 149, 226, 104, 0)),\n", + " ('B0002WUHTU',\n", + " 'Nailtiques Nail Protein Formula 2 Plus',\n", + " (194, 180, 163, 103, 0)),\n", + " ('B0002X4F0Q',\n", + " 'PCA Skin Blemish Control Bar (Phaze 32), 3.3 Ounce',\n", + " (94, 255, 75, 202, 0)),\n", + " ('B0002X9038',\n", + " 'PCA Skin Pigment Gel (Phaze 13), 1 Fluid Ounce',\n", + " (63, 202, 70, 103, 0)),\n", + " ('B0002XBTVO', 'PCA Skin Clearskin, 1.7 Ounce', (177, 134, 155, 103, 0)),\n", + " ('B0002XG9X2',\n", + " 'Panasonic EH2511A Pore Cleanser with Micro-fine Mist',\n", + " (174, 196, 71, 60, 0)),\n", + " ('B0002XY3QC', 'duri Miracote .61oz', (79, 135, 65, 135, 0)),\n", + " ('B0002YE8F2',\n", + " 'Revlon RV2513 Color Swirl Detangling Comb, Colors may vary',\n", + " (132, 183, 163, 15, 0)),\n", + " ('B0002YE8IO',\n", + " 'Revlon RV2641 Soft Touch Porcupine Cushion Brush, Colors May Vary',\n", + " (132, 105, 140, 13, 0)),\n", + " ('B0002YE8V6',\n", + " 'Vidal Sassoon VS7963 Ionic Thermal All Purpose Brush',\n", + " (47, 60, 163, 231, 0)),\n", + " ('B0002YE8WA',\n", + " 'Vidal Sassoon VS14434 No Headache Headbands (2 Headbands)',\n", + " (113, 74, 112, 246, 0)),\n", + " ('B0002YFQ6W',\n", + " 'Cloud Star Corporation Buddy Wash Lavender & Mint',\n", + " (79, 196, 147, 152, 0)),\n", + " ('B0002YLY9K', 'Obagi Nu-Derm Toner 6.7 oz.', (132, 3, 139, 77, 0)),\n", + " ('B0002Z0R9C',\n", + " 'Spornette No.215 Super Looper Hair Brush',\n", + " (200, 228, 208, 116, 0)),\n", + " ('B0002Z0U5I',\n", + " 'Helen of Troy Professional Tangle-Free Hot Air Brush Iron',\n", + " (253, 162, 246, 99, 0)),\n", + " ('B0002Z0UA8',\n", + " 'FusionBeauty LipFusion Micro-Injected Collagen Lip Plump Color Shine, Summer',\n", + " (250, 125, 122, 103, 0)),\n", + " ('B0002Z1JJ4', 'Acquarella Remover', (232, 145, 226, 220, 0)),\n", + " ('B0002Z1JK8', 'Acquarella Conditioner', (232, 80, 254, 194, 0)),\n", + " ('B0002Z81O0',\n", + " 'Peter Thomas Roth Max Complexion Correction Pads? (60 Pads)',\n", + " (56, 89, 3, 12, 0)),\n", + " ('B0002Z8GEK', 'Gena Hoof Lacquer, 5 Ounce', (39, 96, 24, 170, 0)),\n", + " ('B0002Z8HAI',\n", + " 'Essie Nail Lacquer, Sugar Daddy, 0.5 Fluid Ounce',\n", + " (152, 3, 139, 37, 0)),\n", + " ('B0002Z8IV6',\n", + " 'Ardell Hair Color Bottle, Unred, 0.25 Ounce',\n", + " (177, 21, 33, 103, 0)),\n", + " ('B0002Z8LLI',\n", + " 'Sensories Smoother Passionflower and Aloe Leave In Texturizing Condition By Rusk, 33.8 Ounce',\n", + " (85, 247, 71, 77, 0)),\n", + " ('B0002Z8MLC', 'ISO Bouncy Creme 8.5 oz.', (127, 141, 226, 206, 0)),\n", + " ('B0002Z8NJS',\n", + " 'Essie Nail Lacquer, Blanc, 0.5 Fluid Ounce',\n", + " (152, 3, 162, 76, 0)),\n", + " ('B0002Z8OUG', 'Ruby Stone Nail File', (89, 211, 140, 206, 0)),\n", + " ('B0002Z8P1E', 'Quantum Classic Extra Body Acid Perm', (117, 173, 24, 91, 0)),\n", + " ('B0002Z8P8M', \"L'Oreal ColorZap Haircolor Remover\", (250, 21, 40, 53, 0)),\n", + " ('B0002Z8QG8',\n", + " 'Denman Styling Brush, Heavy Weight, 9-Row',\n", + " (201, 122, 70, 160, 0)),\n", + " ('B0002Z8QHW', 'Creative Nail Design SolarOil .5oz', (141, 8, 163, 56, 0)),\n", + " ('B0002Z8RGC', 'Blax 4 mm Ponytail Holders - Black', (55, 79, 138, 169, 0)),\n", + " ('B0002Z8SE8',\n", + " 'Spilo: MISC Big Bondini Plus Brush-On Glue, 0.5 oz',\n", + " (79, 161, 219, 133, 0)),\n", + " ('B0002Z8SZW',\n", + " 'Bain De Terre Serum Anti-Frizz Recovery Complex 1.7 oz.',\n", + " (154, 202, 33, 195, 0)),\n", + " ('B0002Z90RM',\n", + " 'Rusk Thick Body and Texture Amplifier, 6 Ounce',\n", + " (117, 100, 70, 114, 0)),\n", + " ('B0003009NK',\n", + " 'Hai Classic Convertible Ceramic Flat Iron, 1-1/4 Inch',\n", + " (241, 196, 17, 34, 0)),\n", + " ('B000629ZHG', 'Tinted Moisturizer - Almond', (132, 103, 153, 169, 0)),\n", + " ('B00062A0JI',\n", + " 'Laura Mercier Secret Concealer # 1 0.08oz',\n", + " (132, 62, 138, 169, 0)),\n", + " ('B00062ADJA',\n", + " 'Laura Mercier Loose Setting Powder - Ivory - 29g/1oz',\n", + " (132, 159, 162, 34, 0)),\n", + " ('B0006433MM',\n", + " \"18'' Detachable Long Handle Natural Boar Bristle Brush\",\n", + " (28, 3, 201, 77, 0)),\n", + " ('B00064A5L4',\n", + " 'Be Delicious by Donna Karan Eau De Parfum Spray 1 oz for Women',\n", + " (59, 202, 122, 15, 0)),\n", + " ('B00064H44K',\n", + " 'Vanderbilt by Gloria Vanderbilt for Women - 3.3 Ounce EDT Spray',\n", + " (8, 120, 216, 27, 0)),\n", + " ('B00065AFFE',\n", + " 'Conair 1875 Watt Ergonomic Handle Hair Dryer',\n", + " (226, 103, 254, 103, 0)),\n", + " ('B00066D2JE',\n", + " 'Giovanni Conditioner, Smooth as Silk for Damaged Hair, 8.5 fl oz Bottle',\n", + " (13, 18, 27, 170, 0)),\n", + " ('B00066D4M4',\n", + " 'Giovanni Direct Leave-In Conditioner, Weightless moisture conditioner 8.5 fl oz Bottle',\n", + " (173, 2, 40, 100, 0)),\n", + " ('B00066LD7C',\n", + " 'Xenna Curlaway Gradual Curl Relaxer Green Apple Fragrance -- 6 oz',\n", + " (92, 173, 65, 53, 0)),\n", + " ('B00066YC34',\n", + " 'Conair Supreme Triple Curling Iron Pack - 1/2 inch, 3/4 inch and 1 inch',\n", + " (220, 122, 43, 206, 0)),\n", + " ('B000674XN2',\n", + " 'Laura Mercier Secret Brightener - Secret Brightener #1, .05 oz.',\n", + " (132, 3, 24, 77, 0)),\n", + " ('B000674XNM',\n", + " 'Laura Mercier Secret Brightening Powder - Secret Brightening Powder #1, 0.14 oz.',\n", + " (132, 46, 67, 169, 0)),\n", + " ('B000674Z8A',\n", + " 'Laura Mercier Accessories - Sponge, 4-pack',\n", + " (155, 60, 82, 202, 0)),\n", + " ('B00067EJ4U', 'Laura Mercier Foundation Primer', (164, 248, 131, 236, 0)),\n", + " ('B00067YSLO',\n", + " 'Remington Wet 2 Straight 2" Wide Plate Wet/Dry Ceramic Hair Straightening Iron with Tourmaline',\n", + " (241, 40, 59, 169, 0)),\n", + " ('B00068A0AQ',\n", + " 'Straight Sexy Hair Smooth & Seal Spray by Sexy Hair for Unisex - 8.1 Ounce Hairspray',\n", + " (195, 3, 227, 114, 0)),\n", + " ('B00068AZ88',\n", + " 'CombaColor Quick Hair Color Applicator (Comb-a-Color)',\n", + " (67, 4, 40, 12, 0)),\n", + " ('B00068CG3U', 'Philosophy The Microdelivery Peel', (235, 196, 254, 202, 0)),\n", + " ('B00069FJUG',\n", + " 'Philosophy Supernatural Airbrushed Canvas Powder, SPF 15, Bronze',\n", + " (13, 122, 40, 38, 0)),\n", + " ('B0006B12KK', 'NARS Velvet Matte Lip Pencil, Bahama', (5, 87, 153, 167, 0)),\n", + " ('B0006B66D8',\n", + " 'Super Solano Professional Hair Dryer - Black',\n", + " (80, 47, 24, 159, 0)),\n", + " ('B0006BDMIU', 'Caudalie Beauty Elixir 1 fl oz.', (44, 3, 27, 103, 0)),\n", + " ('B0006BDO5G',\n", + " 'Peter Thomas Roth Sulfur Cooling Masque 5 Ounce.',\n", + " (102, 47, 33, 169, 0)),\n", + " ('B0006BDO5Q',\n", + " 'Peter Thomas Roth Glycolic Acid 10% Hydrating Gel, 2 Ounce',\n", + " (235, 135, 153, 77, 0)),\n", + " ('B0006BDQDG',\n", + " 'Peter Thomas Roth AHA/BHA Acne Clearing Gel 2 fl oz',\n", + " (56, 3, 71, 160, 0)),\n", + " ('B0006D3IAU', 'Cococare Coconut Oil, 9 Ounce', (161, 161, 71, 103, 0)),\n", + " ('B0006DS3KU',\n", + " 'Ojon Restorative Hair Treatment 4.6 oz (140 g)',\n", + " (242, 47, 122, 103, 0)),\n", + " ('B0006FMK98',\n", + " 'Pharmaceutical Specialties Free and Clear Shampoo 12 oz.',\n", + " (93, 103, 216, 103, 0)),\n", + " ('B0006FMKB6', 'Robathol Bath Oil - 16 oz', (102, 62, 192, 53, 0)),\n", + " ('B0006G2EX4', 'Obagi Foaming Gel Cleanser-6.7 oz', (144, 202, 24, 206, 0)),\n", + " ('B0006GBEYE',\n", + " 'Coretex SunX SPF30 Sunscreen with Towelettes - 25 Individual Foil Pouch with Towelettes/Box, PABA Free, Oil-free, Water and Sweat Resistant, UVA/UVB Protection',\n", + " (226, 103, 33, 202, 0)),\n", + " ('B0006GZAKI',\n", + " 'Honeysuckle Rose Moisturizing Shampoo Aubrey Organics 11 oz Liquid',\n", + " (71, 47, 162, 171, 0)),\n", + " ('B0006GZBMA',\n", + " 'White Camellia Ultra-Smoothing Conditioner Aubrey Organics 11 oz Liquid',\n", + " (71, 47, 162, 169, 0)),\n", + " ('B0006GZC4W',\n", + " 'Aubrey Organics - Island Natural Conditioner, 11 fl oz liquid',\n", + " (71, 180, 162, 15, 0)),\n", + " ('B0006GZCVK',\n", + " 'Honeysuckle Rose Conditioner Aubrey Organics 11 oz Liquid',\n", + " (201, 134, 59, 77, 0)),\n", + " ('B0006GZDE6',\n", + " 'Aubrey Organics green tea Clarifying Shampoo',\n", + " (71, 134, 234, 159, 0)),\n", + " ('B0006GZDEQ',\n", + " 'White Camellia Ultra-Smoothing Shampoo 11oz',\n", + " (71, 134, 246, 104, 0)),\n", + " ('B0006GZE0O',\n", + " 'Calaguala Texturizing Shampoo Aubrey Organics 11 oz Liquid',\n", + " (71, 134, 246, 152, 0)),\n", + " ('B0006HCE60',\n", + " 'Cococare 100% Vitamin E Oil, 1 Ounce',\n", + " (133, 180, 201, 53, 0)),\n", + " ('B0006HRCL2', '4 Dozen (48) Long Pink Perm Rods', (241, 149, 67, 91, 0)),\n", + " ('B0006I9YK8', 'Baggallini Complete Cosmetic Bagg', (34, 62, 59, 77, 0)),\n", + " ('B0006IHDQ0',\n", + " 'Liz Claiborne Curve Crush EDC Spray 4.2 oz',\n", + " (92, 173, 201, 76, 0)),\n", + " ('B0006II74C',\n", + " \"Nature's Secret 5-Day Fast and Cleanse Kit\",\n", + " (252, 247, 139, 34, 0)),\n", + " ('B0006IJA5C',\n", + " 'Jhirmack Silver Brightening Shampoo 20 Oz.',\n", + " (63, 2, 140, 13, 0)),\n", + " ('B0006IXSG4',\n", + " 'John Varvatos by John Varvatos for Men - 7 ml EDT Splash',\n", + " (121, 223, 122, 219, 0)),\n", + " ('B0006LNC2G',\n", + " 'MAC Eye Kohl Smolder Eye Liner for Women, 0.048 Ounce',\n", + " (81, 115, 24, 195, 0)),\n", + " ('B0006LNJ56', 'MAC Satin Lipstick - Rebel', (81, 20, 24, 170, 0)),\n", + " ('B0006LNKXW',\n", + " 'MAC Tinted Lipglass -- Viva Glam V (Boxed) 4.8g/.17oz',\n", + " (189, 60, 163, 202, 0)),\n", + " ('B0006LNKYG', 'MAC Matte Lipstick - Russian Red', (92, 129, 82, 170, 0)),\n", + " ('B0006LNMIU', 'MAC Powder Blush Fever', (152, 159, 163, 13, 0)),\n", + " ('B0006M5566', 'eb5 Facial Cream (4 Ounces)', (71, 129, 139, 114, 0)),\n", + " ('B0006M56BK',\n", + " 'Wilkinson Sword Double Edge single Razor Cartridge, 5 blades',\n", + " (195, 211, 24, 77, 0)),\n", + " ('B0006MSVCG',\n", + " 'Burberry Brit ~ Women 3.3 oz / 100 ml Eau de Parfum Spray',\n", + " (63, 236, 27, 219, 0)),\n", + " ('B0006N29AU',\n", + " \"Dr. King's Natural Medicine Back, Muscle and Joint Relief, 2 Fluid Ounce\",\n", + " (117, 59, 234, 53, 0)),\n", + " ('B0006NXBJ8', 'Mason Pearson Detangler', (89, 32, 71, 77, 0)),\n", + " ('B0006NY35E',\n", + " 'Pre de Provence Soap, Cucumber, 7 Ounce',\n", + " (120, 149, 43, 76, 0)),\n", + " ('B0006NYCT6',\n", + " 'Algemarin Bubble Bath 750ml bubble bath by Algemarin',\n", + " (47, 211, 254, 27, 0)),\n", + " ('B0006NYDOU',\n", + " 'Herbacin Kamille Hand Cream with Glycerine - 2.5 oz',\n", + " (71, 173, 246, 131, 0)),\n", + " ('B0006O2IQ4',\n", + " 'Fragrances Of Ireland Inis The Energy Of The Sea Cologne Spray, 1.7 Fluid Ounce',\n", + " (63, 115, 227, 13, 0)),\n", + " ('B0006O4MCM',\n", + " 'Suki - Concentrated Balancing Toner 4.0 fl oz',\n", + " (102, 131, 216, 15, 0)),\n", + " ('B0006O9ZAG',\n", + " 'Palladio Herbal Dual Wet and Dry Foundation, Ivory Myrrh, 0.28 Ounce',\n", + " (44, 103, 27, 236, 0)),\n", + " ('B0006OU06E', 'Semi Oval Wild Boar Hair Brush', (79, 161, 250, 99, 0)),\n", + " ('B0006OU078', 'Bass Brushes Facial Cleansing Brush', (195, 21, 33, 160, 0)),\n", + " ('B0006PJRP8', 'Zoya Nail Polish .5 oz. Lola', (194, 236, 65, 103, 0)),\n", + " ('B0006PJSES',\n", + " 'CND: Treatments/Prep Stickey Base Coat, 2.3 oz',\n", + " (79, 122, 163, 123, 0)),\n", + " ('B0006PJSSO',\n", + " 'Essie Nail Lacquer, First Base Base Coat, 0.46 Fluid Ounce',\n", + " (201, 21, 43, 195, 0)),\n", + " ('B0006PJTB0',\n", + " 'Seche Base Ridge Filling Base Coat .5 oz. [Health and Beauty]',\n", + " (28, 96, 201, 219, 0)),\n", + " ('B0006PKGJY',\n", + " 'Alba Botanica Natural Even Advanced Daily Cream -- 2 oz',\n", + " (94, 115, 70, 77, 0)),\n", + " ('B0006PLNSC', 'Zoya Nail Polish .50 fl oz Charisma', (230, 145, 201, 76, 0)),\n", + " ('B0006PLPE4', 'ZOYA Armor Topcoat/UV Block 0.5oz', (18, 21, 163, 76, 0)),\n", + " ('B0006PS3XU', 'Marianna Bobby Pins 1 lb. - Black', (200, 12, 124, 160, 0)),\n", + " ('B0006PS3Y4', 'Marianna Bobby Pins 1 lb. - Brown', (200, 12, 153, 195, 0)),\n", + " ('B0006PT6TU',\n", + " 'City Lips Advanced in NUDE York Lip Plumper',\n", + " (99, 79, 24, 219, 0)),\n", + " ('B0006Q00IK',\n", + " 'For Pro Cozie Liners Hand or Foot 100-ct.',\n", + " (155, 115, 22, 76, 0)),\n", + " ('B0006Q00ZI', 'Gena Healthy Hoof Cream, 4 Ounce', (201, 3, 65, 206, 0)),\n", + " ('B0006Q0102', 'Gena Nail Brite with Brush, 4 Ounce', (180, 180, 71, 170, 0)),\n", + " ('B0006Q01EI', 'Hot Sock Diffuser', (80, 80, 192, 103, 0)),\n", + " ('B0006Q01WK', 'King Dy-zoff Pads 80-ct.', (67, 89, 27, 77, 0)),\n", + " ('B0006Q0HEC',\n", + " 'Wen by Chaz Dean Tea Tree Cleansing Conditioner 16 oz.',\n", + " (24, 245, 11, 72, 0)),\n", + " ('B0006Q23H6',\n", + " 'John Masters Organics Evening Primrose Shampoo for Dry Hair 8 fl oz / 236 ml',\n", + " (44, 66, 139, 100, 0)),\n", + " ('B0006Q3NTS',\n", + " 'WEN by Chaz Dean Fig Cleansing Conditioner 16 oz',\n", + " (24, 245, 65, 100, 0)),\n", + " ('B0006Q3O3S',\n", + " 'WEN® Sweet Almond Mint Styling Creme 6oz',\n", + " (120, 96, 124, 100, 0)),\n", + " ('B0006Q3P50',\n", + " 'WEN® Sweet Almond Mint Texture Balm 3oz',\n", + " (79, 161, 192, 21, 0)),\n", + " ('B0006SFXXK',\n", + " 'John Masters Organics - Detangler Citrus & Neroli - 8 oz.',\n", + " (12, 2, 246, 114, 0)),\n", + " ('B0006SFXYY',\n", + " 'John Masters Organics John Masters Organics Deep Scalp Follicle Treatment & Volumizer for Thinning Hair 4.2 fl oz - 4.2 fl oz',\n", + " (128, 47, 139, 76, 0)),\n", + " ('B0006U81GY', 'Cricket Ultra Clean UC130', (92, 80, 24, 236, 0)),\n", + " ('B0006V7T9I',\n", + " 'Bee Bar Lotion by Honey House Naturals - Vanilla Scent - Long Lasting Lotion Bar Moisturizes and Leaves Skin Smelling Fresh - 2 ounces',\n", + " (232, 66, 226, 220, 0)),\n", + " ('B0006ZEVU4',\n", + " 'Paul Mitchell Tea Tree Special Shampoo Unisex, 16.9 Ounce',\n", + " (109, 202, 71, 77, 0)),\n", + " ('B0006ZHCK0', \"Murphy's Oil Soap, 32-Ounce\", (228, 129, 139, 34, 0)),\n", + " ('B0006ZHK7A',\n", + " 'Pureology Hydrate Shampoo, 8.5 Ounce',\n", + " (224, 202, 201, 15, 0)),\n", + " ('B00070E8IS',\n", + " 'Elchim Professional 2001 2000 Watt Classic Hair Dryer (Colors May Vary)',\n", + " (201, 66, 153, 77, 0)),\n", + " ('B00070QF20',\n", + " 'AcneFree Clear Skin System, 3-Step Kit (Purifying Cleanser, Renewing Toner, Repair Lotion)',\n", + " (21, 105, 24, 99, 0)),\n", + " ('B00074XC68',\n", + " 'Helen of Troy Mini 1/2 Inch Professional Curling Iron with Ergonomic Handle for Short Hair, Bangs & Wisps (Model: 1503n)',\n", + " (16, 96, 246, 169, 0)),\n", + " ('B0007506U2',\n", + " 'TIGI Catwalk Curl Collection Curlesque Curls Rock Amplifier, 5.07 Ounce, Packaging May Vary',\n", + " (111, 96, 246, 182, 0)),\n", + " ('B00076X0BS',\n", + " 'Alba Botanica Revitalizing Green Tea Hawaiian Eye Gel, 1 Ounce Bottles',\n", + " (45, 96, 201, 103, 0)),\n", + " ('B0007CIEBI',\n", + " 'Colorescience Pro Sunforgettable SPF 30 Brush- Fair 0.21 Oz',\n", + " (109, 135, 254, 77, 0)),\n", + " ('B0007CWVLM',\n", + " 'Tweezerman Spirit 2000 Styling Shears',\n", + " (189, 185, 140, 116, 0)),\n", + " ('B0007CXWQU',\n", + " 'Aveda Blue Malva Conditioner, 8.5-Ounce Tube',\n", + " (194, 96, 139, 170, 0)),\n", + " ('B0007CXWRE',\n", + " 'Aveda Brilliant Anti-Humectant Pomade, 2.6 Ounces',\n", + " (47, 47, 254, 162, 0)),\n", + " ('B0007CXWTW', 'Aveda Clove Conditioner 8.5 Ounces', (126, 29, 138, 38, 0)),\n", + " ('B0007CXWUG', 'Aveda Confixor Liquid Gel, 8.5 Ounces', (24, 96, 216, 15, 0)),\n", + " ('B0007CXWWY',\n", + " 'Aveda Madder Root Conditioner 8.5 Ounces',\n", + " (98, 46, 71, 42, 0)),\n", + " ('B0007CXWXI', 'Aveda Phomollient 6.7 Ounces', (98, 46, 246, 38, 0)),\n", + " ('B0007CXX82',\n", + " 'Biosilk Silk Therapy Serum, Packaging May Vary, 5.64 Ounces',\n", + " (170, 47, 122, 15, 0)),\n", + " ('B0007CXXDC',\n", + " 'Biolage by Matrix Color Care Conditioner 33.8 Ounces',\n", + " (132, 103, 227, 77, 0)),\n", + " ('B0007CXXDM',\n", + " 'Biolage by Matrix Color Care Shampoo 33.8 Ounces',\n", + " (132, 247, 138, 53, 0)),\n", + " ('B0007CXXE6',\n", + " 'Biolage by Matrix Conditioning Balm 16.9 Ounces',\n", + " (24, 248, 65, 104, 0)),\n", + " ('B0007CXXGO',\n", + " 'Biolage by Matrix Hydratherapie Hydrating Shampoo 33.8 Ounces',\n", + " (191, 115, 162, 103, 0)),\n", + " ('B0007CXXIC',\n", + " 'Biolage by Matrix Normalizing Shampoo 33.8 Ounces',\n", + " (191, 247, 67, 202, 0)),\n", + " ('B0007CXXJQ',\n", + " 'Biolage by Matrix Ultra-Hydrating Conditioning Balm 16.9 Ounces',\n", + " (47, 121, 71, 101, 0)),\n", + " ('B0007CXXVE',\n", + " 'Nexxus Humectress Ultimate Moisturizing Conditioner 33.8 Ounces',\n", + " (171, 47, 163, 169, 0)),\n", + " ('B0007CXXYG',\n", + " 'Paul Mitchell Awapuhi Shampoo, 33.8-Ounce Bottle',\n", + " (47, 3, 65, 231, 0)),\n", + " ('B0007CXY5E',\n", + " 'Paul Mitchell Shampoo 1 33.8 Ounces',\n", + " (99, 105, 24, 27, 0)),\n", + " ('B0007CXY5O',\n", + " 'Paul Mitchell Shampoo 3 16.9 Ounces',\n", + " (99, 145, 153, 38, 0)),\n", + " ('B0007CXYAE',\n", + " 'Paul Mitchell The Detangler 33.8 Ounces',\n", + " (99, 29, 70, 170, 0)),\n", + " ('B0007CXYP4',\n", + " 'Sebastian Collection Potion 9 5.1 Ounces',\n", + " (170, 66, 67, 91, 0)),\n", + " ('B0007D2F3K', 'Pedi,Quick Salon Pedicure Kit', (200, 180, 234, 116, 0)),\n", + " ('B0007DHMBK',\n", + " 'Henna Black Cream Surya Nature, Inc 2.31 oz Cream',\n", + " (128, 180, 43, 219, 0)),\n", + " ('B0007DHMCO',\n", + " 'Henna Burgundy Cream Surya Nature, Inc 2.31 oz Cream',\n", + " (128, 47, 226, 160, 0)),\n", + " ('B0007IFB2W',\n", + " 'Spornette 25 Wood Handle "Porcupine" Brush With Genuine Boar Bristle * Made In Germany',\n", + " (60, 161, 65, 27, 0)),\n", + " ('B0007IQMVG',\n", + " 'Digestive Advantage Intensive Bowel Support, 96 Counts Capsules',\n", + " (70, 202, 231, 163, 0)),\n", + " ('B0007LE3EG', 'Total Hair Makeover Kit 90001', (174, 122, 254, 236, 0)),\n", + " ('B0007NIRUU',\n", + " 'Nexxus Humectress Ultimate Moisturizing Conditioner, 13.5Ounce Bottles',\n", + " (198, 3, 192, 170, 0)),\n", + " ('B0007R7ABS',\n", + " 'Kenra Volume Spray 25 Super Hold Finishing Spray (Aerosol) (10 oz.)',\n", + " (201, 100, 163, 76, 0)),\n", + " ('B0007RBYA6',\n", + " 'Philosophy Microdelivery Peel Pads, 60 Count',\n", + " (151, 47, 22, 34, 0)),\n", + " ('B0007V6PFQ',\n", + " 'Brush - Large Oval Cushion Wood Bristles Wood Handle Bass Brushes 1 Brush',\n", + " (253, 159, 219, 37, 0)),\n", + " ('B0007V9API', 'Bella B Tummy Honey Cream - 4 oz', (133, 80, 27, 170, 0)),\n", + " ('B0007W1R58',\n", + " 'Olay Regenerist Night Recovery Cream 1.7 Oz',\n", + " (41, 196, 162, 34, 0)),\n", + " ('B0007WL21M',\n", + " 'PETER THOMAS ROTH - Anti-Aging Cleansing Gel 8.5oz',\n", + " (185, 4, 124, 38, 0)),\n", + " ('B0007WZ7YU',\n", + " 'Elchim 2001hp High Pressure 2000 Watt Hair Dryer, White',\n", + " (15, 115, 139, 114, 0)),\n", + " ('B0007X74CW',\n", + " 'Redken Hair Cleansing Cream Shampoo for All Hair Types, 10.1-Ounces',\n", + " (24, 120, 153, 114, 0)),\n", + " ('B0007X74E0',\n", + " 'Smooth Down Heat Glide Protective Smoother Unisex Smoother by Redken, 5 Ounce',\n", + " (128, 149, 227, 60, 0)),\n", + " ('B0007X74IQ',\n", + " 'Extreme Cat Protein Treatment Unisex Treatment by Redken, 5 Ounce',\n", + " (252, 122, 37, 34, 0)),\n", + " ('B0007XFB2W', 'Original Sprout Miracle Detangler', (252, 173, 138, 99, 0)),\n", + " ('B0007YJ5QY',\n", + " 'AMERICAN CREW Daily Moisturizing Shampoo, 8.4 Ounce',\n", + " (110, 3, 162, 27, 0)),\n", + " ('B00080DK86',\n", + " 'Glycolix Elite Treatment Pads 20 Percent 60 count',\n", + " (133, 21, 40, 103, 0)),\n", + " ('B00081J4P8',\n", + " 'NO-AD Sunblock Lotion, SPF 15, 16 Ounces',\n", + " (104, 96, 10, 38, 0)),\n", + " ('B00082379Q', 'Orly Polish Thinner', (70, 149, 55, 219, 0)),\n", + " ('B0008394GA', 'NARS Lip Liner Pencil, Jungle Red', (79, 196, 65, 21, 0)),\n", + " ('B000851N9E',\n", + " 'BurnOut - Ocean Tested Physical Sunscreen 30 SPF - 3.4 oz.',\n", + " (12, 47, 17, 53, 0)),\n", + " ('B00085DX0Q',\n", + " \"Grandpa's Soap Company Wonder Pine Tar Shampoo, 8 Ounce\",\n", + " (164, 46, 246, 103, 0)),\n", + " ('B0008ENT8I',\n", + " 'ProVersa JWM6CF Wall Caddy Hair Dryer with 2-Speed and 3-Heat Settings, 1600-Watts, White Finish',\n", + " (174, 21, 140, 77, 0)),\n", + " ('B0008F6ZDI',\n", + " 'Philosophy The Present Clear Makeup, 2 Ounce',\n", + " (136, 122, 240, 182, 0)),\n", + " ('B0008FUY0I',\n", + " 'Flowery Swedish Clover Foot File * #530',\n", + " (241, 134, 139, 15, 0)),\n", + " ('B0008GIZKS',\n", + " 'Malibu C Hard Water Wellness Shampoo, 1 Bottle, 9 oz',\n", + " (133, 59, 70, 100, 0)),\n", + " ('B0008IV7BU',\n", + " 'American Crew American Crew Fiber Fiber - 3 oz',\n", + " (80, 62, 24, 77, 0)),\n", + " ('B00092M2VO',\n", + " 'Andis Professional 1875 Watt Ceramic Ionic Hair Dryer - Black Chrome (82005)',\n", + " (243, 115, 219, 34, 0)),\n", + " ('B00092M2XC',\n", + " 'Hot Tools Professional 1069S 1600 Watt Professional Turbo Hair Dryer, Silver/Black',\n", + " (3, 103, 153, 114, 0)),\n", + " ('B00092M2ZU',\n", + " 'Ceramic Tools CT2555 1" Professional Ceramic Flat Iron',\n", + " (187, 59, 219, 34, 0)),\n", + " ('B00092M36I',\n", + " 'Ceramic Tools CT155S 1-1/2" Dual Voltage Professional Ceramic Spring Curling Iron',\n", + " (30, 161, 163, 170, 0)),\n", + " ('B00092M386',\n", + " 'Belson Profiles Spa Single Hand Nail Dryer P1013',\n", + " (181, 8, 70, 195, 0)),\n", + " ('B00094O6D4',\n", + " 'LaLicious Sugar Souffle Body Scrub 16 fl oz.',\n", + " (2, 2, 147, 100, 0)),\n", + " ('B000960QJA',\n", + " 'Vaseline Aloe Fresh Hydrating Body Lotion 20.3Oz',\n", + " (102, 8, 65, 34, 0)),\n", + " ('B000977Q8I',\n", + " 'Bobbi Brown Bobbi Brown Shimmer Brick',\n", + " (149, 211, 3, 114, 0)),\n", + " ('B000980PGM',\n", + " 'Dermalogica Daily Microfoliant, 2.6-Ounce',\n", + " (133, 3, 59, 104, 0)),\n", + " ('B000980PH6',\n", + " 'Dermalogica Oil Control Lotion (2 oz.)',\n", + " (245, 134, 226, 103, 0)),\n", + " ('B0009953JA',\n", + " 'Jerdon JP7507NB 8-Inch Two-Sided Swivel Wall Mount Mirror with 7x Magnification, 13.5-Inch Extension, Nickel Beaded Finish',\n", + " (215, 66, 140, 231, 0)),\n", + " ('B00099E8ZA',\n", + " 'Neutrogena Shampoo, Anti-Residue Formula, 6 Ounce',\n", + " (41, 115, 122, 53, 0)),\n", + " ('B00099QZOW',\n", + " 'Colorful Neutral Protein Filler 1.2 oz.',\n", + " (47, 196, 201, 160, 0)),\n", + " ('B00099Z2OQ',\n", + " 'Giovanni Hair Care - Direct Leave-In Conditioner, 8.5 fl oz liquid',\n", + " (13, 161, 139, 159, 0)),\n", + " ('B0009BVK0E',\n", + " 'Organix South Maximum Strength Neem Soap Bar 4 oz',\n", + " (71, 134, 246, 202, 0)),\n", + " ('B0009DT39W',\n", + " 'Panasonic EH2351AC Heated Eyelash Curling Wand',\n", + " (200, 131, 24, 116, 0)),\n", + " ('B0009DVDTU',\n", + " 'Revision Teamine Eye Complex, 0.5 Ounce',\n", + " (141, 247, 67, 157, 0)),\n", + " ('B0009DVMAU', 'Lafes Deodorant Spray with MSM, 8oz', (44, 62, 65, 76, 0)),\n", + " ('B0009EILHG',\n", + " 'Biore Pore Perfect Blemish Fighting Ice Cleanser, Cools & Clears , 6.7 fl oz (198 ml)',\n", + " (154, 173, 106, 103, 0)),\n", + " ('B0009EILI0',\n", + " 'Biore Deep Cleansing Pore Strips Combo 14 Ea',\n", + " (238, 180, 226, 103, 0)),\n", + " ('B0009EILKS',\n", + " 'Biore Deep Cleansing Pore Strips , 14 Nose Strips',\n", + " (155, 180, 122, 103, 0)),\n", + " ('B0009EILVM',\n", + " 'Zia Natural Skincare Ultimate Body Firming Treatment, 7 fl oz',\n", + " (233, 202, 70, 27, 0)),\n", + " ('B0009ET3SC',\n", + " 'Aquis Microfiber Body Towel, Lisse Crepe, White (29 x 55-Inches)',\n", + " (28, 120, 65, 91, 0)),\n", + " ('B0009ET4VI',\n", + " 'Beauty without Cruelty Vitamin C, Vitality Serum, 1-Ounce',\n", + " (167, 213, 132, 37, 0)),\n", + " ('B0009ET5H6',\n", + " \"Burt's Bees Poison Ivy Soap, 2-Ounce\",\n", + " (119, 161, 246, 159, 0)),\n", + " ('B0009ET5JE',\n", + " \"Burt's Bees Lip Shimmer, Champagne, 0.09 oz.\",\n", + " (65, 122, 254, 77, 0)),\n", + " ('B0009ET5O4',\n", + " \"Burt's Bees Healthy Treatment Repair Serum, 1 Fluid Ounce\",\n", + " (252, 247, 139, 53, 0)),\n", + " ('B0009ET6BQ',\n", + " 'derma e Hyaluronic Acid Day Crème, 2-Ounces',\n", + " (56, 202, 65, 60, 0)),\n", + " ('B0009EXM52',\n", + " 'OPI: Treatment & Finish Natural Nail Base Coat, 0.5 oz',\n", + " (192, 145, 227, 135, 0)),\n", + " ('B0009EXMB6',\n", + " \"Palmer's Sunless Tanner & Instant Bronzer SPF 15 5.25oz\",\n", + " (71, 145, 98, 206, 0)),\n", + " ('B0009EXONC',\n", + " 'Big Sexy Hair Volumizing Hairspray, Spray & Play, 10.0 oz (284 g)',\n", + " (195, 59, 234, 53, 0)),\n", + " ('B0009EXOO6',\n", + " 'HEALTHY SEXY SOY TRI-WHEAT LEAVE-IN CONDITIONER 8.5 OZ -PACKAGING MAY VARY',\n", + " (58, 185, 234, 159, 0)),\n", + " ('B0009EXOP0',\n", + " 'SHORT SEXY HAIR CONTOL MANIAC WAX 1.8 OZ-PACKAGING MAY VARY',\n", + " (192, 145, 41, 13, 0)),\n", + " ('B0009EXOXW',\n", + " 'Source Naturals Skin Eternal Serum, 1.7 Ounce',\n", + " (102, 211, 65, 152, 0)),\n", + " ('B0009F3M6A',\n", + " 'Eucerin Dry Skin Therapy Foot Creme, Plus Intensive Repair, 3-Ounce Tubes (Pack of 3)',\n", + " (239, 161, 27, 99, 0)),\n", + " ('B0009F3NGE',\n", + " \"L'Oreal Dermo-Expertise Sublime Bronze Self-Tanning Gelee, Medium-Natural , 5 fl oz (150 ml)\",\n", + " (44, 159, 254, 37, 0)),\n", + " ('B0009F3NYQ',\n", + " 'Neutrogena MicroMist Tanning Sunless Spray, Deep, 5.3 Ounce',\n", + " (13, 21, 70, 100, 0)),\n", + " ('B0009F3O18',\n", + " 'Neutrogena Makeup Remover Cleansing Towelettes, 25 Count',\n", + " (201, 8, 227, 77, 0)),\n", + " ('B0009F3O8Q',\n", + " \"Palmer's Cocoa Butter Formula with Vitamin E, 13.5 fl oz (400 ml)\",\n", + " (231, 180, 163, 152, 0)),\n", + " ('B0009F3OOA',\n", + " 'Queen Helene Refreshing Natural Facial Scrub Mint Julep -- 6 oz',\n", + " (102, 211, 254, 15, 0)),\n", + " ('B0009F3OR2',\n", + " 'Redken All Soft Heavy Cream, Avocado Oil , 8.5 fl oz (250 ml)',\n", + " (127, 161, 122, 100, 0)),\n", + " ('B0009F3OS6',\n", + " 'Redken Extreme Anti-Snap, Lipids/Proteins , 8.5 fl oz (250 ml)',\n", + " (117, 173, 59, 60, 0)),\n", + " ('B0009F3OX6', 'Revlon Cuticle Nippers, Half-Jaw', (155, 89, 10, 195, 0)),\n", + " ('B0009F3R7E', \"Burt's Bees Hand Repair Kit\", (149, 191, 162, 27, 0)),\n", + " ('B0009FHJOG',\n", + " 'Talika Lash Conditioning Cleanser - 4.06 oz',\n", + " (245, 173, 27, 76, 0)),\n", + " ('B0009FHJRS',\n", + " 'Toppik Regular Dark Brown Hair Building Fibers, 0.42 Ounce',\n", + " (70, 122, 163, 114, 0)),\n", + " ('B0009G05W8', 'Cricket Cool Down Iron Travel Case', (17, 199, 219, 171, 0)),\n", + " ('B0009GGY96',\n", + " 'AcneFree Acne and Blackhead Terminator (.75 Ounce Tube)',\n", + " (47, 115, 11, 116, 0)),\n", + " ('B0009H04LO', 'NARS Bronzer Blush Duo, Orgasm/Laguna', (219, 3, 153, 60, 0)),\n", + " ('B0009HIFRY',\n", + " 'Pravana Intense Therapy Leave-In Treatment 10.1 oz',\n", + " (132, 47, 227, 170, 0)),\n", + " ('B0009HJBPE',\n", + " 'Yves Saint Laurent TOUCHE ECLATRadiant Touch 2 Luminous Ivory',\n", + " (144, 159, 216, 182, 0)),\n", + " ('B0009I4J4G',\n", + " 'Lubriderm Daily Moisture Lotion with Shea and Cocoa Butter, 16 Ounce',\n", + " (132, 138, 162, 34, 0)),\n", + " ('B0009I4M02', 'TIGI Bed Head Small Talk, 8 Ounce', (169, 159, 24, 34, 0)),\n", + " ('B0009I4MCU',\n", + " 'Pureology Anti-Fade Complex Hydrate Condition, 8.5 Ounce',\n", + " (231, 122, 124, 15, 0)),\n", + " ('B0009I4MFW', 'Pureology Pure Volume Shampoo 10.1 oz', (24, 21, 122, 30, 0)),\n", + " ('B0009I4MG6',\n", + " 'Pureology Safeguard Your Color Purify Shampoo, 10.1 Ounces',\n", + " (170, 145, 70, 103, 0)),\n", + " ('B0009I4MGQ',\n", + " 'Pureology Anti-Fade Complex Pure Volume Condition, 8.5 Ounce Bottle (Packaging May Vary)',\n", + " (117, 47, 201, 99, 0)),\n", + " ('B0009I4MKW', 'Nexxus shampoo therappe, 33.8oz', (183, 173, 227, 53, 0)),\n", + " ('B0009IMRLS',\n", + " 'Christian Dior Diorshow Waterproof Mascara, No. 090 Black, 0.38 Ounce',\n", + " (132, 161, 140, 76, 0)),\n", + " ('B0009ION0G',\n", + " 'TIGI Catwalk Your Highness Root Boost Spray, 8.1 Ounce',\n", + " (1, 66, 55, 76, 0)),\n", + " ('B0009J6ER0',\n", + " 'Grow Hair Faster with Grow Shampoo and Conditioner for Faster Growing Hair',\n", + " (12, 134, 151, 103, 0)),\n", + " ('B0009JQFF6',\n", + " '100% Organic West African Shea Butter 16 oz',\n", + " (239, 196, 70, 202, 0)),\n", + " ('B0009M0C5W',\n", + " 'FusionBeauty LipFusion Xl 2x Micro-Injected Collagen Advanced Lip Plumping Therapy',\n", + " (144, 211, 227, 13, 0)),\n", + " ('B0009MHJE4',\n", + " 'African Shea Butter Cream (100% Pure & Raw, Gold) 8 Oz.',\n", + " (26, 4, 40, 12, 0)),\n", + " ('B0009MHJS0',\n", + " 'Raw Unrefined Yellow Shea Butter FILTERED & CREAMY 5 0z',\n", + " (252, 89, 246, 53, 0)),\n", + " ('B0009MJE74',\n", + " 'Nubian Heritage - Body Wash African Black Soap - 13 oz.',\n", + " (21, 145, 71, 15, 0)),\n", + " ('B0009ML5M6', 'African Shea Oil - 8 ozs.', (100, 115, 246, 169, 0)),\n", + " ('B0009MMK5M',\n", + " 'Egyptian Magic - All Purpose Skin Cream - 4 oz.',\n", + " (214, 54, 138, 60, 0)),\n", + " ('B0009MSHR2',\n", + " 'Madina African Black Soap Cocoa Butter W/Vitamin E 3.5 oz',\n", + " (127, 96, 246, 75, 0)),\n", + " ('B0009MYMJY',\n", + " 'Shalimar By Guerlain For Women. Eau De Parfum Spray 2.5 Oz.',\n", + " (175, 100, 3, 152, 0)),\n", + " ('B0009N35D2',\n", + " 'Glow By Jennifer Lopez For Women. Eau De Toilette Spray 1 Ounces',\n", + " (175, 89, 11, 75, 0)),\n", + " ('B0009N5EZY',\n", + " 'Kenneth Cole Reaction By Kenneth Cole Eau De Toilette Spray 3.4 Oz',\n", + " (121, 134, 59, 77, 0)),\n", + " ('B0009OAFUM',\n", + " 'Remington HKVAC-2000 Precision Vacuum Haircut Kit',\n", + " (220, 122, 219, 160, 0)),\n", + " ('B0009OAGRE',\n", + " 'Eternity by Calvin Klein for Women, Eau De Parfum, 3.4 Ounce',\n", + " (175, 120, 98, 206, 0)),\n", + " ('B0009OAGSI',\n", + " 'Escape by Calvin Klein for Men, Eau De Toilette Spray, 3.4-Fluid Ounce (100 ml)',\n", + " (47, 145, 65, 103, 0)),\n", + " ('B0009OAGT2',\n", + " 'Escape by Calvin Klein for Women, Eau De Parfum Spray, 1.7 Ounce',\n", + " (175, 4, 22, 12, 0)),\n", + " ('B0009OAGWE',\n", + " 'Ralph Lauren Polo Sport Eau de Toilette Spray for Men, 4.2 Ounce',\n", + " (8, 4, 10, 12, 0)),\n", + " ('B0009OAGXI',\n", + " 'Acqua Di Gio By Giorgio Armani For Men. Eau De Toilette Spray 1.7 Oz.',\n", + " (93, 77, 192, 195, 0)),\n", + " ('B0009OAGZ6',\n", + " 'Burberry By Burberry For Men. Eau De Toilette Spray 3.3 Ounces',\n", + " (8, 24, 43, 206, 0)),\n", + " ('B0009OAH0A',\n", + " 'Jessica Mcclintock By Jessica Mcclintock For Women. Eau De Parfum Spray 1.7 Oz.',\n", + " (8, 4, 3, 34, 0)),\n", + " ('B0009OAHBE',\n", + " 'COOL WATER by Davidoff Cologne for Men (EDT SPRAY 1.35 OZ)',\n", + " (132, 232, 41, 38, 0)),\n", + " ('B0009OAHC8',\n", + " 'Cool Water By Davidoff For Men. Eau De Toilette Spray 4.2 Ounces',\n", + " (175, 4, 10, 12, 0)),\n", + " ('B0009OAHEQ',\n", + " 'Joop! By Joop! For Men. Eau De Toilette Spray 4.2 Ounces',\n", + " (175, 89, 10, 75, 0)),\n", + " ('B0009OAHIM',\n", + " 'Dolce & Gabbana By Dolce & Gabbana For Men. Eau De Toilette Spray 4.2 Ounce',\n", + " (8, 135, 118, 77, 0)),\n", + " ('B0009OAHIW',\n", + " 'D & G Light Blue By Dolce & Gabbana For Women. Eau De Toilette Spray 1.6 Ounces',\n", + " (31, 21, 153, 53, 0)),\n", + " ('B0009OAHNM', 'Curve Men Cologne Spray, 4.2-Ounce', (245, 66, 70, 103, 0)),\n", + " ('B0009OAHOG',\n", + " 'Mambo By Liz Claiborne For Men. Cologne Spray 1.7 Ounces',\n", + " (92, 100, 201, 27, 0)),\n", + " ('B0009OAHQ4',\n", + " 'Bora Bora by Liz Claiborne for Men, Cologne Spray, 3.4-Ounce',\n", + " (92, 77, 201, 53, 0)),\n", + " ('B0009OAHQE',\n", + " 'Bora Bora by Liz Claiborne for Women, Eau De Parfum Spray, 3.4-Ounce',\n", + " (8, 120, 216, 77, 0)),\n", + " ('B0009OAHQY',\n", + " 'Claiborne by Liz Claiborne for Men, Cologne Spray, 3.4-Ounce',\n", + " (212, 173, 33, 77, 0)),\n", + " ('B0009OAHRI',\n", + " 'Lucky You By Lucky Brand For Women. Eau De Toilette Spray 3.4 Oz.',\n", + " (237, 135, 22, 15, 0)),\n", + " ('B0009OAHRS',\n", + " 'Lucky You By Lucky Brand For Men. Cologne Spray 3.4 Oz.',\n", + " (92, 105, 201, 103, 0)),\n", + " ('B0009OAHVO',\n", + " \"L'eau D'issey (issey Miyake) by Issey Miyake for Men - EDT Spray\",\n", + " (8, 80, 27, 104, 0)),\n", + " ('B0009OAHWI',\n", + " 'Lolita Lempicka By Lolita Lempicka For Women. Eau De Parfum Spray 3.4 Oz.',\n", + " (175, 55, 27, 75, 0)),\n", + " ('B0009OAI18',\n", + " 'Sunflowers By Elizabeth Arden For Women. Eau De Toilette Spray 3.4 Oz.',\n", + " (32, 47, 22, 77, 0)),\n", + " ('B0009OAI1S',\n", + " 'Red Door By Elizabeth Arden For Women. Eau De Toilette Spray 3.3 Ounces',\n", + " (175, 89, 3, 75, 0)),\n", + " ('B0009OAI2C',\n", + " 'Arden Beauty By Elizabeth Arden For Women. Eau De Parfum Spray 3.3 Ounces',\n", + " (8, 100, 10, 77, 0)),\n", + " ('B0009OAI3G',\n", + " 'Blue Grass By Elizabeth Arden For Women. Eau De Parfum Spray 1.7 Ounces',\n", + " (8, 100, 37, 27, 0)),\n", + " ('B0009OAI40',\n", + " 'Green Tea By Elizabeth Arden For Women. Eau De Parfum Spray 3.3 Ounces',\n", + " (175, 55, 3, 75, 0)),\n", + " ('B0009OAI7C',\n", + " 'Passion by Elizabeth Taylor for Men, Cologne Spray, 4-Ounce',\n", + " (92, 236, 201, 91, 0)),\n", + " ('B0009OAI8G',\n", + " 'White Diamonds By Elizabeth Taylor For Women, Eau De Toilette Spray, 1.7 Ounces',\n", + " (8, 55, 10, 75, 0)),\n", + " ('B0009OAIB8',\n", + " 'Black Pearls by Elizabeth Taylor for Women, Eau De Parfum Spray, 3.3-Ounce',\n", + " (175, 120, 192, 104, 0)),\n", + " ('B0009OAIE0',\n", + " 'Pleasures by Estee Lauder for Women, Eau De Toilette Spray, 1.7 Ounce',\n", + " (8, 120, 27, 75, 0)),\n", + " ('B0009OAIIG',\n", + " 'Gucci Rush By Gucci For Women. Eau De Toilette Spray 2.5 Ounces',\n", + " (31, 24, 3, 75, 0)),\n", + " ('B0009OAIKY',\n", + " 'Halston 1-12 by Halston for Men, Cologne Spray, 4.2-Ounce',\n", + " (92, 149, 201, 103, 0)),\n", + " ('B0009OAIQI',\n", + " 'Design by Paul Sebastian for Women, Fine Parfum Spray, 1.7-Ounce',\n", + " (31, 120, 40, 75, 0)),\n", + " ('B0009OAISG',\n", + " 'True Love by Elizabeth Arden for Women - 1.7 Ounce EDT Spray',\n", + " (32, 120, 82, 27, 0)),\n", + " ('B0009OMNGQ',\n", + " 'Awapuhi Moisture Mist Unisex Mist by Paul Mitchell, 16.9 Ounce',\n", + " (237, 122, 162, 76, 0)),\n", + " ('B0009OXHC0',\n", + " \"Nature's Blessings Hair Pomade 4 oz.\",\n", + " (154, 210, 139, 15, 0)),\n", + " ('B0009P4PZC', 'Cococare Coconut Oil 100% Pure 4 Oz', (170, 47, 122, 38, 0)),\n", + " ('B0009PVV36',\n", + " 'Conair CD86SCS Instant Heat Iron and Straightener, 1.5 Inch',\n", + " (241, 223, 246, 103, 0)),\n", + " ('B0009PVV40',\n", + " 'Conair BC171NCS Ceramic Ionic Hot Air Brush, Black, 1.25 Inch',\n", + " (24, 66, 140, 170, 0)),\n", + " ('B0009PVV4A',\n", + " 'Infiniti Pro by Conair Professional 1 Inch Tourmaline Ceramic Straightener',\n", + " (70, 122, 163, 99, 0)),\n", + " ('B0009QJ3TE',\n", + " 'Model in a Bottle Sensitive Makeup Setting Spray - 1.7 oz',\n", + " (13, 4, 10, 76, 0)),\n", + " ('B0009QZXP2',\n", + " \"Africa's Best Organics Hair Mayonnaise, 15 oz\",\n", + " (245, 4, 234, 37, 0)),\n", + " ('B0009QZXQ6',\n", + " \"Africa's Best Organics Olive Oil Dry Hair and Scalp Therapy, 7.5 oz.\",\n", + " (133, 96, 24, 77, 0)),\n", + " ('B0009QZYBU',\n", + " 'Soft Sheen Carson Care Free Curl Gold Instant Activator 16Oz/473Ml',\n", + " (47, 138, 250, 169, 0)),\n", + " ('B0009QZYLU',\n", + " 'Clairol BW2 - 8 oz. Tub Powder Lightener',\n", + " (91, 100, 201, 114, 0)),\n", + " ('B0009QZYN8',\n", + " 'CLAIROL Jazzing Gentle Temporary Semi Permanent Hair Color #58 RUBY RED',\n", + " (63, 21, 71, 99, 0)),\n", + " ('B0009QZYO2', 'Clairol Pure White 30 Volume 16 oz.', (115, 236, 71, 27, 0)),\n", + " ('B0009QZZ4Q',\n", + " 'Demert Wig Luster Conditioner, 9.76 Ounce',\n", + " (123, 149, 70, 91, 0)),\n", + " ('B0009R14NG',\n", + " 'Africas Best Herbal Gro Super 5.25oz Jar',\n", + " (92, 202, 153, 15, 0)),\n", + " ('B0009R14Q8',\n", + " \"Africa's Best Organincs Mayo Leave In Conditioner 6 oz.\",\n", + " (92, 228, 59, 77, 0)),\n", + " ('B0009R14XQ',\n", + " 'Australian Gold SPF 15 Spray Gel with Bronzer, 8 Ounce',\n", + " (136, 24, 10, 27, 0)),\n", + " ('B0009R16O8',\n", + " \"Dr. Bronner's Magic Soaps: Liquid Castile Soap, Tea Tree 32 oz\",\n", + " (194, 180, 153, 15, 0)),\n", + " ('B0009R33U8',\n", + " 'Aphogee Two-step Treatment Protein for Damaged Hair 16 oz.',\n", + " (215, 134, 231, 100, 0)),\n", + " ('B0009R35GA',\n", + " 'Clairol Pure White 40 Volume 16 oz.',\n", + " (115, 236, 122, 126, 0)),\n", + " ('B0009R5AYA',\n", + " 'Aussie Sydney Smooth 3 Minute Miracle Smoothing Treatment-8oz',\n", + " (164, 187, 219, 160, 0)),\n", + " ('B0009R5B8A', 'Avon SSS Original OIL 5oz', (24, 234, 221, 37, 0)),\n", + " ('B0009R5CMK',\n", + " 'Doo Gro Medicated Hair Vitalizer Mega Thick Anti-Thinning Formula, 4 Ounce',\n", + " (44, 66, 227, 60, 0)),\n", + " ('B0009RF9OG',\n", + " 'Rogaine for Women Hair Regrowth Treatment, 2 Ounce',\n", + " (255, 51, 59, 15, 1)),\n", + " ('B0009RFAOK',\n", + " 'Clean & Clear Deep Cleaning Astringent, Oil Fighting, 8 Ounce',\n", + " (132, 62, 162, 77, 0)),\n", + " ('B0009RFAPY',\n", + " 'Purpose Gentle Cleansing Wash, 6-Ounce Pump Bottle',\n", + " (194, 7, 40, 91, 0)),\n", + " ('B0009RFB76',\n", + " 'RoC Retinol Correxion Eye Cream, 0.5 Ounce',\n", + " (12, 115, 208, 194, 0)),\n", + " ('B0009RMN0E',\n", + " 'Conair CS25WNCS Ultra Slim Ceramic Straightener, Red, 1 5/8 Inch',\n", + " (182, 66, 201, 38, 0)),\n", + " ('B0009STDD8',\n", + " \"Calvin Klein Women's Obsession Eau de Parfum Spray, 3.4 fl. oz.\",\n", + " (175, 129, 153, 170, 0)),\n", + " ('B0009TNBVC',\n", + " 'Estee Lauder Double Wear Stay-In-Place Makeup SPF 10 18 Linen',\n", + " (132, 159, 216, 13, 0)),\n", + " ('B0009V1YR8',\n", + " 'Farouk CHI 1 Inch Ceramic Flat Hairstyling Iron',\n", + " (105, 62, 153, 100, 0)),\n", + " ('B0009V1YRS',\n", + " 'CHI Turbo Microchip Ceramic Hairstyling Iron 1"',\n", + " (241, 134, 122, 202, 0)),\n", + " ('B0009V1YS2',\n", + " 'Farouk CHI GF1539 Turbo Big 2 Inch Ceramic Flat Iron Hair Straightener',\n", + " (67, 202, 226, 188, 0)),\n", + " ('B0009V2S8M',\n", + " 'Glo Minerals GloPressed Base Beige Dark 0.35oz',\n", + " (132, 47, 162, 139, 0)),\n", + " ('B0009V8N4U',\n", + " 'Sun Laboratories Dark Sunsation Self Tanning Lotion - Very Dark 8 fl oz.',\n", + " (118, 115, 70, 220, 0)),\n", + " ('B0009V8N5E',\n", + " 'Sun Self Tanning Lotion Ultra Dark Instant Tint - Dark 8oz/236ml',\n", + " (62, 211, 71, 77, 0)),\n", + " ('B0009VD8YU',\n", + " 'AUBREY Collagen Restorative Moisturizer 1.7 fl.oz',\n", + " (71, 202, 246, 219, 0)),\n", + " ('B0009VDBWY',\n", + " 'Sun Laboratories Ultra Dark Self Tanning Spray Can (6 oz)',\n", + " (70, 115, 219, 60, 0)),\n", + " ('B0009VIJV2',\n", + " 'Floxite Fl-10h 10x Hand Held 2-sided Mirror with Stand, Clear',\n", + " (200, 77, 33, 34, 0)),\n", + " ('B0009VNI2C',\n", + " 'Fruit Of The Earth Bogo Cream Aloe Vera 4oz. Jar',\n", + " (127, 62, 234, 13, 0)),\n", + " ('B0009VNI40',\n", + " 'Fruit Of The Earth 100 % Aloe Vera Gel, 12 oz, 1-Pack',\n", + " (117, 134, 163, 60, 0)),\n", + " ('B0009VQ8X8',\n", + " 'Got2b Glued Blasting Freeze Spray, 12 Ounce',\n", + " (67, 120, 216, 100, 0)),\n", + " ('B0009WB49K',\n", + " 'Alterna Caviar Anti-Aging Working Hair Spray, 15.5 Ounce',\n", + " (14, 21, 254, 103, 0)),\n", + " ('B0009WY4U6',\n", + " 'St. Ives Swiss Formula Makeup Remover & Facial Cleanser, All Skin Types, 6 oz (170 g)',\n", + " (245, 21, 219, 219, 0)),\n", + " ('B0009WY4UQ',\n", + " 'TRESemme Curl Enhancing Mousse, 10.5 oz',\n", + " (71, 213, 43, 219, 0)),\n", + " ('B0009WY54G',\n", + " 'TRESemme Shampoo, 24 Hour Body, Healthy Volume, 32 Ounce',\n", + " (183, 134, 67, 76, 0)),\n", + " ('B0009XH6SC',\n", + " 'Andis 1-Inch Ceramic Clamp Flat Iron (67095)',\n", + " (174, 66, 208, 99, 0)),\n", + " ('B0009XH6TG',\n", + " 'Andis RC-2 Ionic1875W Ceramic Hair Dryer with Folding Handle and Retractable Cord (80020)',\n", + " (241, 117, 208, 34, 0)),\n", + " ('B0009XH6UU',\n", + " 'Andis 40055 Pro Style 1600 Watt Hair Dryer - White',\n", + " (80, 103, 219, 76, 0)),\n", + " ('B0009XH6V4',\n", + " 'Andis Micro Turbo 1600 Watt Dual Voltage Hair Dryer - White (33805)',\n", + " (155, 145, 71, 53, 0)),\n", + " ('B0009Y6RHM',\n", + " 'Banana Boat Summer Color Self-Tanning Lotion - Deep Dark: 6 OZ',\n", + " (199, 47, 27, 37, 0)),\n", + " ('B0009YDO32',\n", + " 'Zum Mist Aromatherapy Room and Body Spray Frankincense And Myrrh -- 4 fl oz',\n", + " (114, 62, 59, 103, 0)),\n", + " ('B000A0ADT8',\n", + " 'Ole Henriksen Truth Serum Collagen Booster, 1.0 Fluid Ounce',\n", + " (245, 134, 162, 170, 0)),\n", + " ('B000A0ADUW',\n", + " 'Ole Henriksen Blue Black Berry Enzyme Facial Mask, 3.5 Fluid Ounce',\n", + " (123, 21, 122, 15, 0)),\n", + " ('B000A35L56',\n", + " 'Max Green Alchemy Scalp Rescue Shampoo 8.8 oz',\n", + " (245, 24, 208, 99, 0)),\n", + " ('B000A3I2X4',\n", + " 'Revlon RV408 1875 Watt Full-Size Turbo Dryer, Black',\n", + " (140, 159, 24, 34, 0)),\n", + " ('B000A3V1SW',\n", + " \"Hask Placenta Henna 'n' Placenta for Extremely Damaged Hair 237ml/8oz\",\n", + " (178, 60, 163, 171, 0)),\n", + " ('B000A3V1XC', 'Hollywood Beauty Tea Tree Oil 2 oz.', (56, 21, 65, 114, 0)),\n", + " ('B000A3V2PE',\n", + " \"L'Oreal Excellence Hicolor Hilights Red 1.2 oz.\",\n", + " (128, 141, 43, 76, 0)),\n", + " ('B000A3XI4M',\n", + " 'S-Curl Activator and Moisturizer 32 oz',\n", + " (170, 141, 140, 60, 0)),\n", + " ('B000A3ZMLO', 'Hollywood Beauty Carrot Oil 8 oz.', (234, 255, 227, 60, 0)),\n", + " ('B000A3ZN7M',\n", + " \"L'Oreal Oreor 30 Volume Creme Developer 16 oz.\",\n", + " (47, 47, 201, 15, 0)),\n", + " ('B000A3ZN7W',\n", + " 'Loreal Oreor Creme 40 Volume Developer 16 Oz',\n", + " (47, 149, 201, 103, 0)),\n", + " ('B000A408VC',\n", + " 'Sally Hansen Half Jaw Cuticle Nippers',\n", + " (16, 96, 155, 103, 0)),\n", + " ('B000A4094I',\n", + " 'Liquid Glass Nail Laminate With Sunscreen 0.5oz',\n", + " (138, 21, 33, 195, 0)),\n", + " ('B000A409J8',\n", + " \"L'Oreal Quick Blue Powder Bleach 1 Lb\",\n", + " (28, 135, 59, 170, 0)),\n", + " ('B000A7VRYG',\n", + " 'Ocusoft Lid Scrub Foaming Eyelid Cleanser (7.25 fl. oz.)',\n", + " (24, 89, 201, 160, 0)),\n", + " ('B000AA2XQ4',\n", + " 'Rothco Compartment Travel Toiletry Bag',\n", + " (89, 202, 153, 91, 0)),\n", + " ('B000AA5VD6',\n", + " 'Sally Hansen Insta, Dri Insta, Dri Anti, Chip Top Coat',\n", + " (200, 196, 122, 195, 0)),\n", + " ('B000AA5VZ4', 'Super Nail Cuticle Oil 4 oz.', (194, 173, 153, 160, 0)),\n", + " ('B000AA5VZY', 'Super Nail 16 oz. Pure Acetone', (222, 135, 216, 100, 0)),\n", + " ('B000AA9H3Q',\n", + " 'Sally Hansen Natural Nail Growth Activator # 2741 0.45 oz.',\n", + " (11, 167, 201, 34, 0)),\n", + " ('B000AA9HQ8',\n", + " 'Super Nail Cuticle Softener, 8 Ounce',\n", + " (210, 80, 202, 100, 0)),\n", + " ('B000AAAVTU',\n", + " 'Sally Hansen No Chip Acrylic Top Coat, 0.45 Fluid Ounce',\n", + " (13, 122, 70, 76, 0)),\n", + " ('B000AAAW9Y',\n", + " \"Mane 'n Tail Moisture Enriched Hair Strengthener, Bonus, 6 oz.\",\n", + " (102, 80, 11, 220, 0)),\n", + " ('B000AAAWAI',\n", + " \"Straight Arrow Mane 'N Tail Herbal Gro Maximum 5.5oz\",\n", + " (39, 129, 59, 114, 0)),\n", + " ('B000AAAWEO',\n", + " 'Sun In Hair Lightner Lemon 4.7 oz. Pump',\n", + " (94, 202, 11, 34, 0)),\n", + " ('B000AAC8VO',\n", + " 'DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ',\n", + " (164, 173, 43, 103, 0)),\n", + " ('B000AADENA',\n", + " 'Sally Hansen Cuticle Massage Cream -- 0.4 fl oz',\n", + " (71, 8, 122, 236, 0)),\n", + " ('B000AADEP8',\n", + " 'Sally Hansen Double Duty Base and Top Coat, 0.45 Fluid Ounce',\n", + " (28, 87, 138, 195, 0)),\n", + " ('B000AADF0M',\n", + " 'Sally Hansen Airbrush Face Tanner 1.8oz Spray [Health and Beauty]',\n", + " (196, 164, 43, 171, 0)),\n", + " ('B000AADF20',\n", + " 'Sally Hansen Vitamin E Nail and Cuticle Oil, 0.45 Fluid Ounce',\n", + " (128, 135, 27, 77, 0)),\n", + " ('B000AADG0G',\n", + " 'Village Naturals Bath Shoppe Lavender & Chamomile Foaming Milk Bath 28 fl oz.(Pack of 1)',\n", + " (178, 62, 43, 169, 0)),\n", + " ('B000AADG8I',\n", + " 'Wella Cc Liquid #0811/8N Light Blonde Haircolor',\n", + " (201, 134, 59, 77, 1)),\n", + " ('B000ABOLZ4',\n", + " 'Kirks Original Coco Castile Soap, 24 Bars 1/2 Case',\n", + " (144, 159, 33, 116, 0)),\n", + " ('B000ACAV8O', 'Henna Bright Red Pwd 4oz 4 Ounces', (45, 21, 216, 77, 1)),\n", + " ('B000ACB09I',\n", + " \"Nature's Gate Organics C for Yourself, (1.7 fl oz) (50 ml)\",\n", + " (100, 196, 162, 34, 0)),\n", + " ('B000ACB0C0',\n", + " \"Nature's Gate Organics Oh What a Night Cream, (1 oz) (28 g)\",\n", + " (145, 66, 24, 219, 0)),\n", + " ('B000ALBJ40',\n", + " 'Fekkai Glossing Hair Conditioner 2 Fl Oz',\n", + " (41, 3, 153, 100, 0)),\n", + " ('B000ALBKGW',\n", + " 'Bliss Diamancel Diamond Nail File No.2, Medium',\n", + " (9, 122, 163, 162, 0)),\n", + " ('B000ALBNGE',\n", + " 'Clinique Superfine Liner for Brows 01 Soft Blonde',\n", + " (189, 46, 163, 99, 0)),\n", + " ('B000ALCJR6',\n", + " 'T3 Tourmaline 83808 Professional Featherweight Ceramic Ionic Hair Dryer',\n", + " (105, 228, 139, 116, 0)),\n", + " ('B000ALDJ7A',\n", + " 'Diamancel Diamond Tough Foot Buffer No.11, Medium',\n", + " (200, 120, 67, 83, 0)),\n", + " ('B000ALDK1A',\n", + " 'Fruit Of The Earth 100% Aloe Vera 24oz Gel Pump',\n", + " (185, 62, 254, 160, 0)),\n", + " ('B000ALDLJG',\n", + " 'Clinique Quickliner for Eyes 07 Really Black',\n", + " (18, 96, 201, 169, 0)),\n", + " ('B000ALFROS',\n", + " 'Fekkai Advanced Brilliant Glossing Cream 4 fl oz (113 g)',\n", + " (128, 105, 201, 99, 0)),\n", + " ('B000ALFTUU',\n", + " 'Clinique 7 Day Scrub Cream Rinse-Off Formula 3.4 oz',\n", + " (132, 173, 138, 169, 0)),\n", + " ('B000ALFTVO',\n", + " 'Clinique Take the Day off makeup remover 4.2 oz /125ml',\n", + " (132, 149, 43, 76, 0)),\n", + " ('B000AM82US',\n", + " \"Mimi's Diva Dryer by Aquis Microfiber Hair Towel, Pink (19 x 39-Inches)\",\n", + " (80, 134, 139, 12, 0)),\n", + " ('B000AMA43Q',\n", + " 'Aquis Microfiber Hair Towel, Waffle, Linen (19 x 39-Inches)',\n", + " (28, 149, 139, 91, 0)),\n", + " ('B000AMA4DQ',\n", + " \"Mimi's Diva Dryer by Aquis Microfiber Hair Turban, Patented Design, White\",\n", + " (210, 21, 162, 210, 0)),\n", + " ('B000AMBF5W',\n", + " 'Nivea Soft Refreshingly Soft Moisturizing Creme with Jojoba Oil & Vitamin E, 6.8 Ounces',\n", + " (92, 202, 59, 53, 0)),\n", + " ('B000AMHWCW',\n", + " 'Too Faced Cosmetics Bronzer, Snow Bunny, 0.28-Ounce',\n", + " (188, 103, 254, 77, 0)),\n", + " ('B000AO2NXS',\n", + " 'Dove Body Wash with NutriumMoisture, Sensitive Skin Nourishing, 24 Ounce',\n", + " (99, 255, 153, 53, 0)),\n", + " ('B000AQF50Y',\n", + " 'D & G Light Blue By Dolce & Gabbana For Women. Eau De Toilette Spray 3.3 Ounces',\n", + " (31, 24, 27, 75, 0)),\n", + " ('B000AQI2EK',\n", + " 'Paul Mitchell Tea Tree Special Conditioner, 33.8 Ounce',\n", + " (33, 196, 98, 76, 0)),\n", + " ('B000ARDBH2',\n", + " 'Guess Eau de Parfum Spray for Women, 2.5 Fluid Ounce',\n", + " (141, 3, 201, 152, 0)),\n", + " ('B000ASDGK8',\n", + " 'BaByliss Pro BAB2000 Ceramix Xtreme Dryer',\n", + " (181, 202, 122, 195, 0)),\n", + " ('B000ASDX3S',\n", + " 'BaByliss Pro BAB2590 Porcelain Ceramic Straightening Iron with Removable Comb, 1.5 Inch',\n", + " (132, 66, 246, 169, 0)),\n", + " ('B000AU15E0',\n", + " 'Blue Lizard Australian SUNSCREEN SPF 30+, Baby, SPF 30+, 8.75-Ounces',\n", + " (128, 77, 43, 77, 0)),\n", + " ('B000AUTH0E',\n", + " 'Rusk Thermal Shine Spray Unisex, 4.4 Ounce',\n", + " (71, 96, 138, 100, 0)),\n", + " ('B000AUTHEA',\n", + " 'Straight Sexy Hair Smooth & Seal Aerated Anti-Frizz Spray (8.1 oz)',\n", + " (154, 131, 139, 195, 0)),\n", + " ('B000AYKVOG', 'Dove Pink Beauty Bar, 8 Count', (115, 24, 208, 170, 0)),\n", + " ('B000B45BUE',\n", + " 'Silver Metallic Perfume Atomizer Spray 10 ML for purse or travel Refillable',\n", + " (3, 236, 122, 202, 0)),\n", + " ('B000B5S2LS',\n", + " 'Focus 21 Sea Plasma Hair and Skin Moisturizer 32oz',\n", + " (40, 100, 226, 76, 0)),\n", + " ('B000B5UPF4', 'OC Eight Professional Mattifying Gel', (232, 77, 226, 77, 0)),\n", + " ('B000B63Y1K',\n", + " 'Dermorganic Conditioning Shampoo, 12 Ounce',\n", + " (63, 115, 11, 184, 0)),\n", + " ('B000B6VIPY',\n", + " 'Princereigns Shaving Gel Used to Remove Ingrown Hair and Razor Bumps',\n", + " (28, 3, 59, 19, 0)),\n", + " ('B000B7VO66',\n", + " 'PCA Skin Eyexcellence (Phaze 12), 0.5 Ounce',\n", + " (233, 21, 33, 15, 0)),\n", + " ('B000B82TD2',\n", + " 'NeoStrata Ultra Smoothing Cream AHA 10, 1.4 Ounce',\n", + " (44, 115, 27, 195, 0)),\n", + " ('B000B8FW0Y', 'Lansky Dual Grit Sharpener', (220, 173, 71, 34, 0)),\n", + " ('B000B8VBJK',\n", + " 'HOT TOOLS 2108 Nano Ceramic Marcel Curling Iron, Black/Purple, 1 Inch',\n", + " (67, 202, 226, 77, 0)),\n", + " ('B000B9J3GM', 'Mary Kay Indulge Soothing Eye Gel', (132, 211, 17, 13, 0)),\n", + " ('B000B9N0N4',\n", + " 'Mary Kay Blemish Control Toner: Formula 3',\n", + " (78, 180, 139, 182, 0)),\n", + " ('B000B9W3CI',\n", + " 'White Plastic Jar with Dome Lid 4 Oz - 12 Per Bag',\n", + " (241, 46, 3, 77, 0)),\n", + " ('B000B9W4MC',\n", + " 'White Plastic Jar with Flat Lid 8 Oz - 6 Per Bag',\n", + " (241, 46, 234, 99, 0)),\n", + " ('B000BB9L0S',\n", + " 'Nailtiques Formula 2 Protein, .5 Ounce',\n", + " (6, 159, 226, 91, 0)),\n", + " ('B000BBGP4I', 'Mason Pearson Detangling Comb', (210, 8, 33, 153, 0)),\n", + " ('B000BD0SEE',\n", + " 'MyChelle Fruit Enzyme Cleanser, 4.4 Ounce Bottle',\n", + " (204, 8, 139, 91, 0)),\n", + " ('B000BFTAMS',\n", + " 'Ponds Caring Classic Extra, Rich Dry Skin Cream, 10.1 oz',\n", + " (170, 4, 40, 12, 0)),\n", + " ('B000BGIYWY',\n", + " \"Africa's Best Kids Organics Hair Lotion, Shea Butter Detangling Moisturizing 12 oz\",\n", + " (177, 180, 162, 159, 0)),\n", + " ('B000BH92J2',\n", + " 'Shea Moisture Shea Butter Leave in Conditioner 8oz',\n", + " (132, 234, 219, 34, 0)),\n", + " ('B000BIPJ20',\n", + " 'Perfekt Skin Perfection Gel Luminous 1 oz',\n", + " (133, 196, 71, 236, 0)),\n", + " ('B000BIUGRI', 'Bumble and Bumble Prep (8 Ounces)', (117, 3, 140, 241, 0)),\n", + " ('B000BIUGSM',\n", + " 'Bumble and Bumble Styling Lotion (8 Ounces)',\n", + " (3, 134, 153, 206, 0)),\n", + " ('B000BIUGUA',\n", + " 'Bumble and Bumble Sunday Shampoo (8 Ounces)',\n", + " (10, 122, 153, 160, 0)),\n", + " ('B000BIUGUK',\n", + " 'Bumble and Bumble Thickening Conditioner (8 Ounces)',\n", + " (123, 122, 153, 169, 0)),\n", + " ('B000BIUGV4',\n", + " 'Bumble and Bumble Thickening Hair Spray (8 Ounces)',\n", + " (79, 145, 246, 241, 0)),\n", + " ('B000BIUGXM',\n", + " 'Bumble and Bumble Curl Conscious Defining Creme 8.5 oz',\n", + " (117, 122, 208, 114, 0)),\n", + " ('B000BIVXZW',\n", + " 'Bumble and Bumble Classic Hairspray (10 Ounces)',\n", + " (19, 62, 24, 160, 0)),\n", + " ('B000BIVY0G',\n", + " 'Bumble and Bumble DeFRIZZ (4 Ounces)',\n", + " (92, 250, 201, 220, 0)),\n", + " ('B000BIVY10',\n", + " 'Kerastase Nutritive Bain Satin 2 Complete Nutrition Shampoo For Dry and Sensitised Hair, 8.5 Oz.',\n", + " (132, 7, 226, 15, 0)),\n", + " ('B000BIVY1U',\n", + " 'Bumble and Bumble Seaweed Conditioner (8 Ounces)',\n", + " (177, 21, 10, 116, 0)),\n", + " ('B000BIVY24',\n", + " 'Bumble and Bumble Tonic Lotion, 8-Ounce Spray Bottle',\n", + " (151, 21, 216, 152, 0)),\n", + " ('B000BIXP30',\n", + " 'Kerastase Resistance Bain Volumactive Volumizing Shampoo For Fine, Vulnerable Hair, 8.5 Ounce',\n", + " (1, 180, 55, 91, 0)),\n", + " ('B000BIXP3K',\n", + " 'Bumble and Bumble Grooming Cream (5 Ounces)',\n", + " (201, 247, 71, 91, 0)),\n", + " ('B000BIXP3U',\n", + " 'Bumble and Bumble Leave in Conditioner (8 Ounces)',\n", + " (79, 206, 41, 37, 0)),\n", + " ('B000BIXP4O',\n", + " 'Bumble and Bumble Styling Creme, 8-Ounce Bottle',\n", + " (3, 180, 216, 114, 0)),\n", + " ('B000BIXP5I',\n", + " 'Bumble and Bumble Surf Spray, 4-Ounce Bottle',\n", + " (3, 3, 208, 75, 0)),\n", + " ('B000BIXP5S',\n", + " 'Kerastase Nutritive Oleo-Relax Serum, 4.2 Ounces',\n", + " (99, 196, 67, 53, 0)),\n", + " ('B000BIXP62',\n", + " 'Kerastase Nutritive Bain Oleo-Relax Smoothing Shampoo For Dry and Rebellious Hair, 8.5 Ounce',\n", + " (132, 115, 227, 34, 0)),\n", + " ('B000BIZSUS',\n", + " 'Bumble and Bumble Brilliantine (2 Ounces)',\n", + " (3, 47, 192, 37, 0)),\n", + " ('B000BIZSV2',\n", + " 'Bumble and Bumble Deeep, 5-Ounce Tube',\n", + " (177, 173, 208, 100, 0)),\n", + " ('B000BIZSYO',\n", + " 'Kerastase Resistance Bain De Force Fortifying Shampoo For Weakened to Fragile Hair, 8.5 Ounce',\n", + " (132, 249, 71, 180, 0)),\n", + " ('B000BJ1CGQ', 'GiGi Mini Pro Waxing Kit', (113, 196, 201, 15, 0)),\n", + " ('B000BK1P9E',\n", + " 'Kerasilk Rich Care Instant Silk Fluid By Goldwell for Unisex, 4.2 Ounce',\n", + " (47, 115, 22, 27, 0)),\n", + " ('B000BKLBES',\n", + " 'Marc Anthony Instantly Thick Hair Thickening Cream, 6 oz',\n", + " (13, 159, 162, 103, 0)),\n", + " ('B000BKLCDS',\n", + " 'Super Nail Acetone Polish Remover, 16 Ounce',\n", + " (3, 21, 153, 38, 0)),\n", + " ('B000BKXGXW',\n", + " 'NOW Foods - Red Clay Powder Moroccan, 6 OZ.',\n", + " (245, 103, 71, 159, 0)),\n", + " ('B000BNG4VU',\n", + " 'Coty Airspun Loose Powder, Translucent, 2.3 Ounce',\n", + " (123, 238, 10, 12, 0)),\n", + " ('B000BP81IM', 'NARS Loose Powder, Eden', (173, 96, 71, 170, 0)),\n", + " ('B000BPBV2U',\n", + " 'Liquid Gold Brush-on Bonding Adhesive for Cold Fusion Hair Extensions and Braids - .5oz',\n", + " (12, 149, 139, 202, 0)),\n", + " ('B000BPMB2Y',\n", + " 'Roux Lash & Brow Tint, Black,40 Count',\n", + " (92, 29, 70, 27, 0)),\n", + " ('B000BPQG6Q', 'Roux Tween Time Hair Crayon, Auburn', (3, 47, 219, 53, 0)),\n", + " ('B000BPT0TG',\n", + " 'Roux Fanci-full Rinse #49 Ultra White Minx',\n", + " (238, 236, 162, 170, 0)),\n", + " ('B000BR50M0',\n", + " 'Symbiotics Colostrum Plus, 240 Capsules',\n", + " (252, 47, 219, 34, 0)),\n", + " ('B000BR5B2Y',\n", + " 'Komenuka Bijin Japanese All-Natural Essence Whitening Cream with Rice Bran',\n", + " (99, 149, 3, 169, 0)),\n", + " ('B000BR766S',\n", + " 'Komenuka Bijin Premium Hair Care Set: Moisturizing Hair Shampoo & Hair Treatment / Conditioner',\n", + " (132, 161, 226, 99, 0)),\n", + " ('B000BRGAOM',\n", + " 'Biosilk Therapy Shine On Spray, 5.30 Ounce',\n", + " (132, 228, 70, 34, 0)),\n", + " ('B000BRO6O8',\n", + " 'Coty Airspun Loose Powder, Naturelle, 2.3 Ounce',\n", + " (123, 4, 40, 12, 0)),\n", + " ('B000BRPMJG',\n", + " 'Sebamed moisturizing lotion, for sensitive skin, 6.8-Fluid Ounce',\n", + " (63, 46, 139, 48, 0)),\n", + " ('B000BRSHXE',\n", + " 'Sebamed Moisturing Cream, Sensitive Skin, 2.6-Ounce',\n", + " (78, 159, 122, 202, 0)),\n", + " ('B000BRY5UI',\n", + " 'Komenuka Bijin Facial Cleansing Powder from Natural Rice Bran - 30 Packs',\n", + " (78, 180, 219, 77, 0)),\n", + " ('B000BRYMKG',\n", + " 'Hylexin Serious Dark Circles by Bremenn Research Labs .39 oz. 11.53 ml',\n", + " (252, 247, 227, 103, 0)),\n", + " ('B000BTM2K6',\n", + " 'White Shoulders By Evyan For Women, Eau De Cologne Spray (4.5 Ounces)',\n", + " (92, 180, 192, 91, 0)),\n", + " ('B000BTO6CI',\n", + " 'Jessica Mcclintock By Jessica Mcclintock For Women. Eau De Parfum Spray 3.4 Oz.',\n", + " (8, 4, 3, 34, 1)),\n", + " ('B000BTO6EG',\n", + " 'PALOMA PICASSO For Women By PALOMA PICASSO Eau De Parfum Spray,3.4 Oz',\n", + " (17, 24, 118, 77, 0)),\n", + " ('B000BTQRFM',\n", + " 'Paul Sebastian by Paul Sebastian for Men - 8 Ounce EDC De Luxe Splash',\n", + " (177, 131, 226, 202, 0)),\n", + " ('B000BU7G1A',\n", + " 'ApHogee Intensive Two Minute Keratin Reconstructor',\n", + " (47, 196, 75, 202, 0)),\n", + " ('B000BU7SMM', 'Aphogee Balancing Moisturizer 16 Oz', (41, 4, 40, 12, 0)),\n", + " ('B000BUFFPO', \"Burt's Bees Herbal Deodorant\", (70, 236, 122, 15, 0)),\n", + " ('B000BVCSP8',\n", + " 'Scruples High Definition Shape Spray, 10.6 Ounce',\n", + " (117, 149, 254, 15, 0)),\n", + " ('B000BW4U58', 'Vitamin E Skin Oil 10000 IU. 4.6 Oz', (99, 202, 122, 37, 0)),\n", + " ('B000BX1Z00',\n", + " 'CHI Silk Infusion Leave-In Treatment, 12 Ounce',\n", + " (39, 46, 43, 114, 0)),\n", + " ('B000BX5FS8',\n", + " 'CHI Straight Guard Smoothing Styling Cream 8.5 oz',\n", + " (155, 145, 201, 152, 0)),\n", + " ('B000BY2N7S', 'NOW Foods Biotin 5000mcg, 120 Vcaps', (167, 54, 41, 246, 0)),\n", + " ('B000BYQBT4',\n", + " 'Obagi Nu Derm Exfoderm Skin Smoothing Lotion-2 oz',\n", + " (196, 1, 163, 38, 0)),\n", + " ...]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "items_with_tuples" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -64,6 +2740,32 @@ "assert len(df) == len(set(item[-1] for item in items_with_tuples))" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from trie import Trie\n", + "\n", + "_trie = Trie()\n", + "\n", + "for (id, tuple) in zip(df.index, semantic_ids):\n", + " _trie.insert(tuple, id) # todo handle collisions, not overwrite" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "with open(\"../data/Beauty/trie.pkl\", 'wb') as f:\n", + " pickle.dump(_trie, f)" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 56a68a0a..1c1f106d 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,23 +1,26 @@ -from utils import create_masked_tensor +from utils import DEVICE, create_masked_tensor, get_activation_function from models.base import SequentialTorchModel - +import pickle import torch from torch import nn +import random class TigerModel(SequentialTorchModel, config_name='tiger'): def __init__( self, + trie, sequence_prefix, - positive_prefix, + pred_prefix, + labels_prefix, num_items, max_sequence_length, embedding_dim, num_heads, num_layers, dim_feedforward, - semantic_id_length, + semantic_id_arr, dropout=0.0, activation='relu', layer_norm_eps=1e-9, @@ -35,12 +38,30 @@ def __init__( layer_norm_eps=layer_norm_eps, is_causal=True ) + + transformer_decoder_layer = nn.TransformerDecoderLayer( + d_model=embedding_dim, + nhead=num_heads, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=get_activation_function(activation), + layer_norm_eps=layer_norm_eps, + batch_first=True + ) + self._decoder = nn.TransformerDecoder(transformer_decoder_layer, num_layers) + self._trie = trie + + assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) + self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) + self._sequence_prefix = sequence_prefix - self._positive_prefix = positive_prefix - self._semantic_id_length = semantic_id_length + self._pred_prefix = pred_prefix + self._labels_prefix = labels_prefix + + self._semantic_id_arr = semantic_id_arr self._codebook_embeddings = nn.Embedding( - num_embeddings=semantic_id_length, # in order to include `max_sequence_length` value + num_embeddings=len(semantic_id_arr), # in order to include `max_sequence_length` value embedding_dim=embedding_dim ) @@ -48,71 +69,134 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): + with open(config['trie'], 'rb') as f: + trie = pickle.load(f) + return cls( + trie=trie, sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], + pred_prefix=config['predictions_prefix'], + labels_prefix=config['labels_prefix'], num_items=kwargs['num_items'], max_sequence_length=kwargs['max_sequence_length'], embedding_dim=config['embedding_dim'], num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), num_layers=config['num_layers'], dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - semantic_id_length=kwargs['semantic_id_length'], + semantic_id_arr=kwargs['semantic_id_arr'], dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs['semantic.{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['semantic.{}.length'.format(self._sequence_prefix)] # (batch_size) + + # TODOPK pass parameter as args (self._semantic_prefix) + label_events = inputs['semantic.{}.ids'.format(self._labels_prefix)] + label_lengths = inputs['semantic.{}.length'.format(self._labels_prefix)] + embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths, add_codebook_embeddings=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + decoder_outputs = self._apply_decoder(label_events, label_lengths, embeddings, mask) + + logits = self._projection(decoder_outputs) # Shape: (batch_size, seq_len, _semantic_id_arr[0]) - if self.training: # training mode - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) - all_positive_sample_embeddings = self._item_embeddings( - all_positive_sample_events - ) # (all_batch_events, embedding_dim) - - all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) - - all_scores = torch.einsum( - 'ad,nd->an', - all_sample_embeddings, - all_embeddings - ) # (all_batch_events, num_items + 2) - positive_scores = torch.gather( - input=all_scores, - dim=1, - index=all_positive_sample_events[..., None] - ) # (all_batch_items, 1) - + if self.training: return { - 'positive_scores': positive_scores, - 'negative_scores': all_scores + self._pred_prefix: logits } - else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) - - # b - batch_size, n - num_candidates, d - embedding_dim - candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight - ) # (batch_size, num_items + 2) - candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf - - _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True - ) # (batch_size, 20) + else: + preds = logits.argmax(dim=-1).view(len(all_sample_lengths), len(self._semantic_id_arr)) # Shape: (batch_size, seq_len) + ids = self._apply_trie(preds) + return torch.tensor(ids) + + def _apply_trie(self, preds): # TODOPK make this faster (how?) + native_repr = [tuple(row.tolist()) for row in preds] + ids = [] + for semantic_id in native_repr: + cur_result = set() + prefixes = [ + semantic_id[:i] for i in range(len(semantic_id), 0, -1) + ] + for prefix in prefixes: + prefix_ids = self._trie.search_prefix(prefix) # todo handle collisions (not overwrite) + for id in prefix_ids: + cur_result.add(id) + if len(cur_result) >= 20: + break + cur_result = list(cur_result) + while len(cur_result) < 20: + cur_result.append(0) # solve empty event if shortest prefix + ids.append(cur_result) + return ids + + def _apply_decoder(self, label_events, label_lengths, encoder_embeddings, encoder_mask): + # делаем по аналогии с encoder'ом? + embeddings = self._item_embeddings(label_events) # (batch_size * label_len, embedding_dim) + + embeddings, mask = create_masked_tensor( + data=embeddings, + lengths=label_lengths + ) # (batch_size, label_len, embedding_dim), (batch_size, label_len) + + batch_size = mask.shape[0] + label_len = mask.shape[1] + + position_embeddings = self._get_position_embeddings( + embeddings, label_lengths, mask, batch_size, label_len + ) # (batch_size, label_len, embedding_dim) + codebook_embeddings = self._get_codebook_embeddings( + embeddings, label_lengths, mask, batch_size, label_len + ) # (batch_size, label_len, embedding_dim) + + embeddings = embeddings + codebook_embeddings + embeddings = embeddings + position_embeddings + + embeddings = self._layernorm(embeddings) + embeddings = self._dropout(embeddings) + + embeddings[~mask] = 0 + + causal_mask = torch.tril( + torch.ones(label_len, label_len) + ).bool().to(DEVICE) # (label_len, label_len) + + decoder_outputs = self._decoder( + tgt=embeddings, + memory=encoder_embeddings, + tgt_mask=~causal_mask, + memory_key_padding_mask=~encoder_mask, + tgt_key_padding_mask=~mask + ) # (batch_size, label_len, embedding_dim) + + decoder_outputs = decoder_outputs.view(-1, self._embedding_dim) + + return decoder_outputs + + def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): + positions = torch.arange( # TODOPK invert decoder (position.reverse) + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + + positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) - return indices.repeat(self._semantic_id_length, 1) + positions = positions[positions_mask] # (all_batch_events) + + positions = positions // len(self._semantic_id_arr) + # 5 5 5 5 4 4 4 4 3 3 3 3 ... + + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings, _ = create_masked_tensor( + data=position_embeddings, + lengths=lengths + ) # (batch_size, seq_len, embedding_dim) + assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) + + return position_embeddings def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): positions = torch.arange( # TODOPK invert decoder (position.reverse) @@ -123,8 +207,9 @@ def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_le positions = positions[positions_mask] # (all_batch_events) - positions = positions.flip(-1) % self._semantic_id_length # (all_batch_events) + positions = positions.flip(-1) % len(self._semantic_id_arr) # (all_batch_events) # flip so first item has (0, 1, 2, 3) not (3, 2, 1, 0) semantic_id embeddings + # 0 1 2 3 0 1 2 3 0 1 2 3 position_embeddings = self._codebook_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( diff --git a/modeling/rqvae/rqvae_data.py b/modeling/rqvae/rqvae_data.py index 170c4e18..47692cae 100644 --- a/modeling/rqvae/rqvae_data.py +++ b/modeling/rqvae/rqvae_data.py @@ -75,7 +75,7 @@ def get_data(cached=True): with torch.no_grad(): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: - df = torch.load("../data/Beauty/all_data.pt", weights_only=False) + df = torch.load("../data/Beauty/data_full.pt", weights_only=False) return df diff --git a/modeling/trie.py b/modeling/trie.py new file mode 100644 index 00000000..1c98c362 --- /dev/null +++ b/modeling/trie.py @@ -0,0 +1,41 @@ +class TrieNode: + def __init__(self): + self.children = {} + self.id = None + + +class Trie: + def __init__(self): + self.root = TrieNode() + + def insert(self, tuple_key, id): + node = self.root + for number in tuple_key: + if number not in node.children: + node.children[number] = TrieNode() + node = node.children[number] + node.id = id + + def search(self, tuple_key): + node = self.root + for number in tuple_key: + if number not in node.children: + return None + node = node.children[number] + return node.id + + def _get_all_leaf_ids(self, node): + result = [] + if node.id is not None: + result.append(node.id) + for child in node.children.values(): + result.extend(self._get_all_leaf_ids(child)) + return result + + def search_prefix(self, prefix): + node = self.root + for number in prefix: + if number not in node.children: + return [] + node = node.children[number] + return self._get_all_leaf_ids(node) \ No newline at end of file diff --git a/review.md b/review.md index 242aaa95..f9534ce0 100644 --- a/review.md +++ b/review.md @@ -3,6 +3,18 @@ ## Todos - max_sequence_length (TODOPK), why +1? не смог найти где дописывается в батч сама длина +- positions = positions // self._semantic_id_length или reverse? +как именно учитываем codebook_post & item_pos (тот же порядок или inverted) +- как именно находим ближайшего при пересечении по embedding? (не понял о каком embedding речь) +- почему + +```python +candidate_scores = torch.einsum( + 'bd,nd->bn', + predictions, + self._item_embeddings.weight +) +``` - next_item_pred / last_item_pred (какие задачи учим и как именно) # can be both tasks - предсказываем item = предсказываем 4 semantic id? # yes From 411e52f0a71ec36a1f82c07b44745511005df51a Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 31 Dec 2024 15:28:12 +0300 Subject: [PATCH 021/175] speed up semantic id fetching --- .gitignore | 1 + configs/train/tiger_train_config.json | 8 ++++---- modeling/dataloader/batch_processors.py | 22 +++++++++++++++------- modeling/loss/base.py | 1 - 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 90acddb5..7980d8a2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ tensorboard_logs/* .venv papers checkpoints/* +*.prof diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 17441ba3..bbb423d7 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "tiger", - "train_steps_num": 1024, + "train_steps_num": 50, "best_metric": "eval/ndcg@20", "dataset": { "type": "rqvae_scientific", @@ -22,7 +22,7 @@ "type": "rqvae", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/data_full.pt" + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt" }, "drop_last": true, "shuffle": true @@ -34,7 +34,7 @@ "type": "rqvae", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/data_full.pt" + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt" }, "drop_last": false, "shuffle": false @@ -42,7 +42,7 @@ }, "model": { "type": "tiger", - "trie": "../data/Beauty/trie.pkl", + "trie": "../data/Beauty/rqvae/trie.pkl", "sequence_prefix": "item", "predictions_prefix": "logits", "labels_prefix": "labels", diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 2c3948a2..f1d17e0c 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -25,9 +25,8 @@ def __call__(self, batch): return {'ids': ids, 'embeddings': embeds} class RqVaeProcessor(BaseBatchProcessor, config_name='rqvae'): - def __init__(self, rqvae, embs_extractor): - self._rqvae = rqvae - self._embs_extractor = embs_extractor + def __init__(self, item_id_to_semantic_id): + self._item_id_to_semantic_id = item_id_to_semantic_id @classmethod def create_from_config(cls, config, **kwargs): @@ -39,13 +38,22 @@ def create_from_config(cls, config, **kwargs): rqvae_model.eval() embs_extractor = torch.load(config['embs_extractor_path']) + + item_ids = embs_extractor.index.tolist() + embeddings = torch.stack([emb for emb in embs_extractor['embeddings'].tolist()]) + semantic_ids = list(rqvae_model({"embeddings": embeddings})) + + item_id_to_semantic_id = { + item_id: semantic_id for (item_id, semantic_id) in zip(item_ids, semantic_ids) + } - return cls(rqvae_model, embs_extractor) + return cls(item_id_to_semantic_id) def get_semantic_ids(self, item_ids): - embs = torch.stack([self._embs_extractor.loc[item_id]['embeddings'] for item_id in item_ids]) - semantic_ids = self._rqvae({"embeddings": embs}) - return list(semantic_ids) + semantic_ids = [] + for item_id in item_ids: + semantic_ids.append(self._item_id_to_semantic_id[item_id]) + return semantic_ids def __call__(self, batch): processed_batch = {} diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 11aa2a9b..c7cfb4ee 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -137,7 +137,6 @@ def forward(self, inputs): rqvae_loss += self._loss(codebook_vectors, remainder.detach()) recon_loss = self._loss(embeddings_restored, embeddings) - # print(recon_loss.shape, rqvae_loss.shape) # TODOPK loss = (recon_loss + rqvae_loss).mean(dim=0) if self._output_prefix is not None: From 28904f77298c38710de69bccf0fc1e9b13833be4 Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 31 Dec 2024 15:55:40 +0300 Subject: [PATCH 022/175] fix infer (20 items) & logits --- modeling/models/tiger.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 1c1f106d..7078e1b0 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -101,18 +101,20 @@ def forward(self, inputs): all_sample_events, all_sample_lengths, add_codebook_embeddings=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - decoder_outputs = self._apply_decoder(label_events, label_lengths, embeddings, mask) + decoder_outputs = self._apply_decoder(label_events, label_lengths, embeddings, mask) # (batch_size, label_len, embedding_dim) + # todo pk correct place for projection? or view -> projection + logits = self._projection(decoder_outputs) # (batch_size, seq_len, _semantic_id_arr[0]) + + logits = logits.view(-1, self._semantic_id_arr[0]) # (batch_size * seq_len, _semantic_id_arr[0]) - logits = self._projection(decoder_outputs) # Shape: (batch_size, seq_len, _semantic_id_arr[0]) - if self.training: return { self._pred_prefix: logits } else: preds = logits.argmax(dim=-1).view(len(all_sample_lengths), len(self._semantic_id_arr)) # Shape: (batch_size, seq_len) - ids = self._apply_trie(preds) - return torch.tensor(ids) + ids = torch.tensor(self._apply_trie(preds)) + return ids def _apply_trie(self, preds): # TODOPK make this faster (how?) native_repr = [tuple(row.tolist()) for row in preds] @@ -128,6 +130,9 @@ def _apply_trie(self, preds): # TODOPK make this faster (how?) cur_result.add(id) if len(cur_result) >= 20: break + if len(cur_result) >= 20: + break + cur_result = list(cur_result) while len(cur_result) < 20: cur_result.append(0) # solve empty event if shortest prefix @@ -173,8 +178,6 @@ def _apply_decoder(self, label_events, label_lengths, encoder_embeddings, encode tgt_key_padding_mask=~mask ) # (batch_size, label_len, embedding_dim) - decoder_outputs = decoder_outputs.view(-1, self._embedding_dim) - return decoder_outputs def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): From fa424289239aec0c10386eab078d0acc1b7b201e Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 31 Dec 2024 16:28:15 +0300 Subject: [PATCH 023/175] tweak config --- configs/train/tiger_train_config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index bbb423d7..0284c71a 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "tiger", - "train_steps_num": 50, + "train_epochs_num": 10, "best_metric": "eval/ndcg@20", "dataset": { "type": "rqvae_scientific", @@ -119,7 +119,7 @@ }, { "type": "eval", - "on_step": 256, + "on_step": 64, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { From 9a95b95fb3657ebcc30f3183310517a27d8d5a9e Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 2 Jan 2025 00:10:41 +0300 Subject: [PATCH 024/175] clear outputs from main.ipynb --- modeling/main.ipynb | 2674 ------------------------------------------- 1 file changed, 2674 deletions(-) diff --git a/modeling/main.ipynb b/modeling/main.ipynb index 57fe551c..0924a494 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -52,2680 +52,6 @@ "semantic_ids = list(rqvae_model.forward(embs_dict))" ] }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[('7806397051',\n", - " 'WAWO 15 Color Professionl Makeup Eyeshadow Camouflage Facial Concealer Neutral Palette',\n", - " (13, 66, 216, 169, 0)),\n", - " ('9759091062', 'Xtreme Brite Brightening Gel 1oz.', (132, 120, 59, 169, 0)),\n", - " ('9788072216',\n", - " 'Prada Candy By Prada Eau De Parfum Spray 1.7 Oz For Women',\n", - " (250, 134, 192, 152, 0)),\n", - " ('9790790961',\n", - " 'Versace Bright Crystal Eau de Toilette Spray for Women, 3 Ounce',\n", - " (63, 173, 70, 37, 0)),\n", - " ('9790794231', 'Stella McCartney Stella', (58, 80, 40, 27, 0)),\n", - " ('B00004TMFE',\n", - " 'Avalon Biotin B-Complex Thickening Conditioner, 14 Ounce',\n", - " (38, 178, 162, 34, 0)),\n", - " ('B00004TUBL',\n", - " 'Better Living Classic Two Chamber Dispenser, White',\n", - " (226, 59, 24, 116, 0)),\n", - " ('B00004TUBV',\n", - " 'Better Living The Ulti-Mate Dispenser',\n", - " (174, 189, 124, 99, 0)),\n", - " ('B00004U9UY',\n", - " 'Crabtree & Evelyn 2792 Gardeners Hand Therapy (100ml, 3.4 oz)',\n", - " (38, 145, 226, 206, 0)),\n", - " ('B00004U9V2',\n", - " \"Crabtree & Evelyn - Gardener's Ultra-Moisturising Hand Therapy Pump - 250g/8.8 OZ\",\n", - " (216, 161, 162, 182, 0)),\n", - " ('B000050B6U', 'Instant Heat Curling Iron, 1-Inch', (174, 77, 140, 27, 0)),\n", - " ('B000052WY7',\n", - " 'Maybelline New York Expert Wear Brow & Eyeliner, 151 Velvet Black , .011 oz (310 mg)',\n", - " (228, 89, 201, 195, 0)),\n", - " ('B000052WYD',\n", - " 'Maybelline New York Cover Stick Concealer, Ivory, Light 2, 0.16 Ounce',\n", - " (110, 131, 34, 13, 0)),\n", - " ('B000052WYL',\n", - " 'Maybelline New York Expert Eyes Moisturizing Eye Makeup Remover, 2.3 Fl. Oz.',\n", - " (123, 131, 70, 37, 0)),\n", - " ('B000052WYN',\n", - " 'Maybelline New York Ultra-Liner Liquid Liner, Waterproof, Black 135L-01 , .25 fl oz (7.3 ml)',\n", - " (3, 135, 44, 12, 0)),\n", - " ('B000052X9G',\n", - " 'Nullo Internal Deodorant, Coated Caplets, 135 Caplets',\n", - " (71, 247, 246, 91, 0)),\n", - " ('B000052XIA',\n", - " 'Vagisil Anti-Itch Creme, Original Formula - 1 oz',\n", - " (205, 173, 132, 171, 0)),\n", - " ('B000052XW5',\n", - " 'Pretty Feet & Hands Rough Skin Remover-Exfoliant, 3-Ounce Bottles (Pack of 3)',\n", - " (194, 47, 234, 60, 0)),\n", - " ('B000052XYQ', 'DHS Clear Shampoo 8 Fl Oz', (69, 8, 226, 103, 0)),\n", - " ('B000052XZP',\n", - " 'Neutrogena T-Gel Shampoo, Stubborn Itch Control, 4.4 Ounce',\n", - " (70, 103, 201, 76, 0)),\n", - " ('B000052XZX',\n", - " 'Neutrogena T/Sal Shampoo, Scalp Build-up Control, 4.5 fl oz',\n", - " (167, 173, 65, 103, 0)),\n", - " ('B000052Y25',\n", - " 'DHS Conditioning Rinse With Panthenol 8 fl oz',\n", - " (44, 159, 254, 27, 0)),\n", - " ('B000052Y33',\n", - " 'Alberto VO5 Moisturizing Hot Oil Treatment, 0.5 Ounce, 2-Count Tubes (Pack of 6)',\n", - " (13, 134, 153, 159, 0)),\n", - " ('B000052Y5F',\n", - " 'Konsyl Pharmaceuticals Psyllium Fiber 15.9 oz',\n", - " (127, 173, 122, 236, 0)),\n", - " ('B000052Y6Z',\n", - " 'Williams Lectric Shave Electric Razor Pre-Shave, Original, 3 fl oz',\n", - " (99, 105, 192, 202, 0)),\n", - " ('B000052YJC',\n", - " 'Buf-Puf Double-Sided Body Sponge - 1 ea',\n", - " (230, 47, 162, 99, 0)),\n", - " ('B000052YJD',\n", - " 'Buf-Puf Reusable Facial Sponge, Extra Gentle, - 1 ea',\n", - " (71, 173, 163, 68, 0)),\n", - " ('B000052YJH',\n", - " 'Buf-Puf Reusable Facial Sponge (Pack of 6)',\n", - " (245, 173, 219, 34, 0)),\n", - " ('B000052YJM',\n", - " 'Clean & Clear ESSENTIALS Dual Action Moisturizer, 4 Ounce',\n", - " (154, 180, 29, 37, 0)),\n", - " ('B000052YJX',\n", - " 'Neutrogena OntheSpot Acne Treatment, Vanishing Formula, 0.75 Ounce',\n", - " (93, 145, 227, 77, 0)),\n", - " ('B000052YKI',\n", - " 'Purpose Dual Treatment Moisture Lotion with SPF 15 4 fl oz (120 ml)',\n", - " (196, 161, 250, 76, 0)),\n", - " ('B000052YKM',\n", - " 'Stri-Dex Medicated Pads, Maximum Strength, 90-Count Containers, (Pack of 3)',\n", - " (6, 66, 67, 241, 0)),\n", - " ('B000052YKS',\n", - " 'Basis Cleaner Clean Face Wash, 6 Fluid Ounces',\n", - " (40, 100, 67, 170, 0)),\n", - " ('B000052YKY',\n", - " 'Cetaphil Gentle Cleansing Bar, Antibacterial - 4.5 oz',\n", - " (102, 59, 11, 219, 0)),\n", - " ('B000052YL1',\n", - " 'Cuticura Medicated Anti-Bacterial Bar Soap, Original Formula - 5.25 oz bar',\n", - " (71, 167, 192, 202, 0)),\n", - " ('B000052YLX',\n", - " 'Purpose Gentle Cleansing Bar 6 oz (170 g)',\n", - " (128, 80, 65, 77, 0)),\n", - " ('B000052YM0',\n", - " 'Fruit Of The Earth 100% Aloe Vera 6oz. Gel Tube',\n", - " (117, 47, 162, 159, 0)),\n", - " ('B000052YM3',\n", - " 'Alpha Hydrox AHA Enhanced Cream 2 oz.',\n", - " (82, 134, 216, 103, 0)),\n", - " ('B000052YM4',\n", - " 'Alpha Hydrox Foaming Face Wash -- 6 fl oz',\n", - " (69, 47, 219, 103, 0)),\n", - " ('B000052YM7',\n", - " 'Alpha Hydrox Enhanced Lotion 10 percent Glycolic AHA -- 6 fl oz Anti-Wrinkle',\n", - " (100, 46, 246, 53, 0)),\n", - " ('B000052YM8',\n", - " 'Alpha Hydrox Oil Free Treatment 10 Percent AHA 1.7 fl oz.',\n", - " (205, 134, 147, 152, 0)),\n", - " ('B000052YMG', 'Aquanil Cleanser 16 fl oz.', (71, 47, 59, 143, 0)),\n", - " ('B000052YMQ',\n", - " 'Cetaphil Moisturizing Cream, Fragrance Free - 16 oz',\n", - " (167, 134, 226, 37, 0)),\n", - " ('B000052YMR',\n", - " 'Cetaphil Moisturizing Cream, 3.0 - Ounces Tube (Pack of 3)',\n", - " (2, 2, 226, 76, 0)),\n", - " ('B000052YMS',\n", - " 'Cetaphil Moisturizing Lotion, Fragrance Free - 16 fl oz',\n", - " (56, 134, 122, 15, 0)),\n", - " ('B000052YMT',\n", - " 'Cetaphil Gentle Skin Cleanser, 4.0 -Ounce Bottles (Pack of 6)',\n", - " (56, 21, 201, 160, 0)),\n", - " ('B000052YMV',\n", - " 'Cetaphil Gentle Skin Cleanser - 16 fl oz',\n", - " (56, 96, 65, 15, 0)),\n", - " ('B000052YMX',\n", - " 'Complex 15 Therapeutic Moisturizing Face Cream - 2.5 Ounce',\n", - " (56, 3, 59, 160, 0)),\n", - " ('B000052YN5',\n", - " 'DML Daily Facial Moisturizer, SPF 25 - 1.5 Oz',\n", - " (71, 134, 208, 60, 0)),\n", - " ('B000052YN7', 'DML Moisturizing Lotion 16 oz.', (117, 134, 234, 103, 0)),\n", - " ('B000052YOL',\n", - " 'Neutrogena Healthy Skin Anti-Wrinkle Cream, SPF 15, 1.4 Ounce',\n", - " (99, 120, 162, 231, 0)),\n", - " ('B000052YOR',\n", - " 'Neutrogena Body Oil, Light Sesame Formula, 8.5 Ounce',\n", - " (139, 173, 122, 99, 0)),\n", - " ('B000052YOX',\n", - " 'Neutrogena Oil-Free Moisture, Sensitive Skin, 4 Ounce',\n", - " (99, 202, 231, 169, 0)),\n", - " ('B000052YP4',\n", - " 'Neutrogena Light Night Cream, 2.25 Ounce',\n", - " (99, 3, 27, 241, 0)),\n", - " ('B000052YP6',\n", - " 'Neutrogena Norwegian Formula Hand Cream, Fragrance-Free (2 Ounce)',\n", - " (117, 47, 71, 91, 0)),\n", - " ('B000052YQ0',\n", - " 'Olay Complete All Day Moisturizer With Sunscreen Broad Spectrum SPF 15 Normal 4 Fl Oz',\n", - " (215, 202, 139, 15, 0)),\n", - " ('B000052YQ2',\n", - " 'Olay Complete All Day Moisturizer With Sunscreen Broad Spectrum SPF 15 - Sensitive 4 Fl Oz',\n", - " (93, 129, 216, 13, 0)),\n", - " ('B000052YQN', \"POND'S Cold Cream Cleanser, 3.5 oz.\", (70, 23, 65, 76, 0)),\n", - " ('B000052YQU',\n", - " \"POND'S Dry Skin Cream Facial Moisturizer, 3.9-Ounce (Packaging May Vary)\",\n", - " (99, 159, 67, 99, 0)),\n", - " ('B000052Z5B',\n", - " 'Coty Airspun Face Powder, Naturally Neutral, 2.3 oz',\n", - " (201, 180, 201, 135, 0)),\n", - " ('B000052Z8D',\n", - " 'Max Factor Pan-Stik Ultra Creamy Makeup, Sun Tone 137 .5 oz (14 g)',\n", - " (188, 122, 254, 37, 0)),\n", - " ('B000052ZB1',\n", - " 'Neutrogena Intensified Day Moisture, SPF 15, 2.25 Ounce',\n", - " (44, 120, 234, 169, 0)),\n", - " ('B000052ZB2',\n", - " 'Neutrogena Extra Gentle Cleanser, 6.7 Ounce',\n", - " (44, 115, 71, 195, 0)),\n", - " ('B000052ZB4',\n", - " 'Neutrogena Deep Clean Facial Cleanser, Normal to Oily Skin, 6.7 Ounce',\n", - " (239, 211, 192, 170, 0)),\n", - " ('B000052ZBD',\n", - " 'Neutrogena Rainbath Gel, Original, 16 Ounce',\n", - " (71, 64, 201, 114, 0)),\n", - " ('B000052ZBH',\n", - " 'Almay One Coat Nourishing Mascara, Thickening, Black 402, 0.4-Ounce Package',\n", - " (13, 66, 27, 236, 0)),\n", - " ('B000052ZBP',\n", - " 'Almay Moisturizing Eye Makeup Remover Pads, 80-Pads',\n", - " (194, 89, 27, 162, 0)),\n", - " ('B000052ZTY',\n", - " 'Hugo By Hugo Boss For Men. Eau De Toilette Spray 1.3 Ounces',\n", - " (8, 55, 10, 163, 0)),\n", - " ('B00005302B',\n", - " 'Jergen Extra Moisturizing Liquid Hand Wash 7.5 Oz',\n", - " (28, 100, 122, 91, 0)),\n", - " ('B00005304H', 'Q-tips Cotton Swabs, 500 Count', (172, 159, 155, 169, 0)),\n", - " ('B0000530ED',\n", - " \"L'Oreal Paris Feria Hair Color, 36 Dark Burgundy Brown/Chocolate Cherry\",\n", - " (52, 167, 122, 170, 0)),\n", - " ('B0000530EZ',\n", - " 'Aussie Hair Insurance Leave-In Conditioner 8 Fl Oz (Pack of 3)',\n", - " (223, 103, 234, 116, 0)),\n", - " ('B0000530G6',\n", - " 'Suave Professionals Conditioner, Humectant - 12.6 Ounce',\n", - " (223, 103, 192, 219, 0)),\n", - " ('B0000530LO',\n", - " 'Suave Naturals Shampoo, Daily Clarifying - 22.5oz.',\n", - " (75, 247, 71, 60, 0)),\n", - " ('B0000530LP',\n", - " 'Suave Shampoo, Daily Clarifying - 12oz.',\n", - " (41, 120, 234, 91, 0)),\n", - " ('B0000530LV',\n", - " 'Suave Naturals Shampoo, Sun Ripened Strawberry 22.5oz',\n", - " (71, 145, 11, 202, 0)),\n", - " ('B0000530M0',\n", - " 'Suave Professionals Humectant Moisture Shampoo , 12.6 fl Ounce (373 ml)',\n", - " (70, 4, 41, 77, 0)),\n", - " ('B0000530NA',\n", - " 'Olay Daily Care Refreshing Toner, 7.2-Fluid Ounce',\n", - " (78, 134, 67, 195, 0)),\n", - " ('B0000530O9',\n", - " 'Olay Age Defying Classic Eye Gel 0.5 Oz',\n", - " (204, 255, 27, 241, 0)),\n", - " ('B0000531GD',\n", - " 'Maybelline New York Shine Free Oil Control Pressed Powder, Ivory - 1 ea',\n", - " (107, 68, 33, 104, 0)),\n", - " ('B0000531GV',\n", - " 'Maybelline New York Expert Eyes 100% Oil-Free Eye Makeup Remover, 2.3 Fl. Oz.',\n", - " (127, 122, 11, 76, 0)),\n", - " ('B0000531II',\n", - " 'Maybelline New York Shine Free Oil Control Loose Powder, Light, 0.7 Ounce',\n", - " (177, 122, 41, 76, 0)),\n", - " ('B0000531NU',\n", - " \"Maybelline New York Volum' Express - Waterproof Mascara, Very Black - .34 fl oz\",\n", - " (194, 159, 75, 76, 0)),\n", - " ('B0000531SW',\n", - " \"L'Oreal Paris Visible Lift Line-Minimizing & Tone-Enhancing Makeup, Soft Ivory, 1.25 Ounces\",\n", - " (92, 96, 11, 27, 0)),\n", - " ('B0000531WZ',\n", - " 'Revlon Super Lustrous Creme Lipstick, Fire and Ice 720, 0.15 Ounce',\n", - " (70, 122, 55, 170, 0)),\n", - " ('B00005321Z',\n", - " \"Revlon Eterna '27' Moisture Cream with Progenitin, 2 Ounce\",\n", - " (250, 234, 73, 37, 0)),\n", - " ('B0000532AN', 'Revlon Lash Curlers, 1 Count', (192, 161, 41, 194, 0)),\n", - " ('B0000532VT',\n", - " 'Neutrogena Clean Conditioner, Replenishing , 10.1 Fluid Ounce',\n", - " (17, 202, 138, 169, 0)),\n", - " ('B0000532YN',\n", - " 'Kiss My Face Bar Soap, 8.0 oz, Pure Olive Oil. 1-Bar',\n", - " (110, 2, 70, 104, 0)),\n", - " ('B00005333G',\n", - " \"L'Oreal Paris Hydra-Renewal Continuous Moisture Cream, 1.7 Ounce\",\n", - " (44, 8, 139, 37, 0)),\n", - " ('B00005333I',\n", - " \"L'Oreal Paris Eye Defense, 0.5 Fluid Ounce\",\n", - " (133, 211, 192, 15, 0)),\n", - " ('B0000533CC',\n", - " 'Instead 12 Hour Feminine Protection Cup 24 ea',\n", - " (172, 129, 163, 169, 0)),\n", - " ('B0000534VO',\n", - " 'Clean & Clear Continuous Control Acne Cleanser, 5 oz (141g)',\n", - " (44, 103, 24, 236, 0)),\n", - " ('B0000535CH',\n", - " \"Nature's Cure Two-part Acne Treatment System for Women 60 Tablets 1 Oz Cream\",\n", - " (12, 47, 132, 15, 0)),\n", - " ('B0000535OF',\n", - " 'Alpha Hydrox Night Replenishing Cream 2 oz.',\n", - " (71, 180, 122, 206, 0)),\n", - " ('B0000535RA',\n", - " 'Neutrogena Pore Refining Toner, Alpha and Beta Hydroxy Formula, 8.5 Ounce',\n", - " (44, 4, 10, 100, 0)),\n", - " ('B0000535RC',\n", - " 'NeutrogenaClear Pore Oil Eliminating Astringent, 8 Ounce',\n", - " (133, 4, 65, 104, 0)),\n", - " ('B0000535RD',\n", - " 'Neutrogena Body Clear Body Wash for Clean, Clear Skin, 8.5 Ounce',\n", - " (128, 120, 201, 77, 0)),\n", - " ('B0000535U2', 'Jason C-Effects Creme, 2 Ounces', (50, 196, 219, 202, 0)),\n", - " ('B0000535UA', 'Jason Shampoo, Tea Tree, 17.5 Ounce', (50, 115, 140, 169, 0)),\n", - " ('B0000535UM',\n", - " 'Jason Thin-To-Thick Extra Volume Shampoo, 8 Ounce',\n", - " (172, 115, 140, 169, 0)),\n", - " ('B0000535UN',\n", - " 'Thin to Thick Extra Volume Conditioner 8 oz',\n", - " (102, 66, 65, 15, 0)),\n", - " ('B0000535UT',\n", - " 'Jason Purifying Tea Tree Body Wash 30 fl oz',\n", - " (71, 1, 162, 143, 0)),\n", - " ('B0000535UX',\n", - " 'Jason Pure Natural Hand Soap, Purifying Tea Tree, 16 Ounce',\n", - " (172, 196, 140, 13, 0)),\n", - " ('B0000535VH',\n", - " 'Alpha Hydrox Optimum Series, Retinol Night ResQ, Anti-Wrinkle Firming Complex - 1.05 oz',\n", - " (205, 159, 139, 103, 0)),\n", - " ('B000053676',\n", - " 'Avalon Organics Vitamin C Revitalizing Eye Creme, 1 Ounce Bottle',\n", - " (71, 3, 41, 15, 0)),\n", - " ('B0000536A3',\n", - " 'Tommy Hilfiger Tommy Cologne Spray for Men - 3.4 Fluid Ounces',\n", - " (182, 62, 201, 219, 0)),\n", - " ('B0000536EK',\n", - " \"Mother's Special Blend All Natural Skin Toning Oil, 8-Ounce Bottle\",\n", - " (102, 173, 70, 91, 0)),\n", - " ('B0000536EW',\n", - " 'Aveeno Anti-Itch Concentrated Lotion, 4 Ounce',\n", - " (127, 62, 163, 159, 0)),\n", - " ('B0000536F0',\n", - " 'Aveeno Moisturizing Bar with Natural Colloidal Oatmeal for Dry Skin, Fragrance Free, 3.5 oz',\n", - " (161, 96, 246, 103, 0)),\n", - " ('B0000536M2',\n", - " \"Maybelline New York Full 'N Soft Mascara, Very Black, 0.28 Oz.\",\n", - " (65, 66, 208, 160, 0)),\n", - " ('B0000536M3',\n", - " \"Maybelline Full' N Soft Mascara: Brownish Black #302\",\n", - " (28, 120, 59, 169, 0)),\n", - " ('B0000536P3',\n", - " 'Olay Total Effects 7-In-1 Anti-Aging Daily Moisturizer 1.7 Fl. Oz.',\n", - " (167, 96, 11, 53, 0)),\n", - " ('B0000536P4',\n", - " 'Olay Total Effects Anti-Aging Fragrance Free Moisturizer 1.7 Fl Oz',\n", - " (21, 96, 11, 53, 0)),\n", - " ('B00005375C',\n", - " 'Aveeno Daily Moisturizing Lotion, 8 Ounce',\n", - " (239, 89, 192, 99, 0)),\n", - " ('B0000537NH',\n", - " 'Neutrogena Sensitive Skin Sunscreen Lotion, SPF 30, 4 Ounce',\n", - " (132, 202, 246, 53, 0)),\n", - " ('B0000537SD', 'ZapZyt Acne Treatment Gel, 1 oz', (93, 173, 227, 217, 0)),\n", - " ('B000053L6W',\n", - " 'Clubman Pinaud Virgin Island Bay Rum, 12 Ounce',\n", - " (94, 115, 201, 76, 0)),\n", - " ('B000056I89',\n", - " 'Cetaphil Daily Facial Cleanser, Normal to Oily Skin - 8 fl oz',\n", - " (44, 4, 37, 34, 0)),\n", - " ('B000056W5Y',\n", - " \"Palmer's Cocoa Butter Formula Massage Cream for Stretch Marks, 4.4 Ounce\",\n", - " (127, 103, 59, 202, 0)),\n", - " ('B000056W74',\n", - " \"Palmer's Cocoa Butter Formula Moisturizing Body Oil with Vitamin E -- 8.5 fl oz\",\n", - " (196, 211, 139, 76, 0)),\n", - " ('B00005A43X',\n", - " 'Conair Supreme 2-In-1 Hot Air Styling Brush',\n", - " (67, 149, 163, 27, 0)),\n", - " ('B00005A443',\n", - " 'Conair Double-Sided Battery-Operated Lighted Makeup Mirror, Polished Chrome Finish',\n", - " (36, 4, 67, 219, 0)),\n", - " ('B00005A9WP',\n", - " 'Coanir Facial Sauna System with Timer',\n", - " (174, 131, 27, 160, 0)),\n", - " ('B00005AVC7',\n", - " 'Clean & Clear Instant Oil-Absorbing Sheets 50 sheets',\n", - " (28, 131, 192, 219, 0)),\n", - " ('B00005B9FV',\n", - " 'Eucerin Q10 Anti-Wrinkle Sensitive Skin Lotion SPF, 4 Ounce',\n", - " (196, 245, 116, 170, 0)),\n", - " ('B00005CDSP',\n", - " 'Revlon Perfect Heat 1-1/2inch Curling Iron',\n", - " (174, 66, 153, 100, 0)),\n", - " ('B00005IBW0',\n", - " 'St. Ives, Sensitive Skin Apricot Scrub, 6-Ounce (Pack of 6)',\n", - " (70, 46, 118, 184, 0)),\n", - " ('B00005LBRT',\n", - " 'Avalon Organics Lavender Luminosity Daily Moisturizer, 2 Ounce',\n", - " (104, 234, 67, 34, 0)),\n", - " ('B00005NAOD',\n", - " 'Eucerin Q10 Anti-Wrinkle Sensitive Skin Creme, 1.7 Ounce Jar',\n", - " (196, 245, 56, 152, 0)),\n", - " ('B00005NAOJ',\n", - " 'Cetaphil Gentle Cleansing Bar - 4.5 oz',\n", - " (71, 47, 70, 143, 0)),\n", - " ('B00005NASR',\n", - " 'Ecco Bella Original Organic Water-Free Herbal Body Lotion, Vanilla, 8-Ounce Bottle',\n", - " (107, 47, 162, 99, 0)),\n", - " ('B00005NFBD',\n", - " 'Freeman Facial Masque, Purifying - 6 fl oz',\n", - " (93, 173, 254, 103, 0)),\n", - " ('B00005NFBJ',\n", - " 'Freeman Cucumber Facial Peel-Off Mask - 6 oz',\n", - " (117, 135, 24, 91, 0)),\n", - " ('B00005O0MZ',\n", - " 'Conair 1875 Watt Ionic Conditioning Hair Dryer',\n", - " (174, 149, 124, 60, 0)),\n", - " ('B00005R1H2',\n", - " 'Skin Success Eventone Fade Milk with Vitamin E and Alpha Hydroxy - 8.5 Fluid Ounces',\n", - " (205, 173, 122, 160, 0)),\n", - " ('B00005R1H3',\n", - " 'Skin Success Eventone Fade Cream, For Oily Skin - 2.7 oz',\n", - " (167, 173, 22, 236, 0)),\n", - " ('B00005REAQ',\n", - " 'Alba BotanicaTM Even Advanced Natural Moisturizer Sea Moss SPF 15 -- 2 fl oz',\n", - " (154, 100, 27, 77, 0)),\n", - " ('B00005REAT',\n", - " 'Body Bath Honey Mango Alba Botanica 12 oz Liquid',\n", - " (109, 4, 3, 116, 0)),\n", - " ('B00005S81T',\n", - " 'Skin Success Eventone Fade Cream, Regular - 2.7 oz',\n", - " (167, 173, 11, 170, 0)),\n", - " ('B00005T83D',\n", - " \"Palmer's Cocoa Butter Formula, Cream Soap Bar with Vitamin E, 3.5 oz - 1 ea\",\n", - " (44, 173, 11, 77, 0)),\n", - " ('B00005TZU8',\n", - " 'DreamTime Inner Peace Eye Pillow, Lavender Velvet',\n", - " (144, 3, 24, 206, 0)),\n", - " ('B00005UN90',\n", - " 'Suave Naturals Body Wash, Ocean Breeze - 12oz.',\n", - " (70, 202, 139, 53, 0)),\n", - " ('B00005UQSP',\n", - " 'EO Shampoo for Fine/Oily Hair, Rosemary & Mint, 8 fl oz (240 ml)',\n", - " (173, 180, 22, 34, 0)),\n", - " ('B00005V5OU',\n", - " 'Neutrogena Healthy Defense Daily Moisturizer, SPF 30, Light Tint 1.7 Ounce',\n", - " (44, 24, 33, 169, 0)),\n", - " ('B00005V5OW',\n", - " 'Maybelline Lash Discovery Washable Mascara, Very Black - .16 fl oz',\n", - " (200, 255, 153, 195, 0)),\n", - " ('B00005V5P6',\n", - " 'Maybelline New York Purestay Powder & Foundation SPF 15, Ivory - .34 oz',\n", - " (221, 103, 254, 160, 0)),\n", - " ('B0000632EE',\n", - " 'Fallene Total Block UVA/UVB Complete Broad Spectrum Sun Protection, SPF 65 Clear, 2 fl Ounces (59 ml)',\n", - " (52, 109, 122, 125, 0)),\n", - " ('B0000632EN',\n", - " 'Aveeno Positively Radiant Skin Brightening Daily Scrub, 5 Ounce',\n", - " (40, 118, 226, 27, 0)),\n", - " ('B00006598X',\n", - " 'Aquis Microfiber Hair Towel, Lisse Crepe, Pink (19 x 39-Inches)',\n", - " (28, 120, 11, 114, 0)),\n", - " ('B000065DJY',\n", - " 'Revlon Perfect Heat 1875W Shine Boosting Hair Dryer, RV484',\n", - " (144, 66, 226, 99, 0)),\n", - " ('B000065DK4',\n", - " 'Vidal Sassoon VS184C Three-Barrel Waver',\n", - " (4, 247, 67, 219, 0)),\n", - " ('B000066CKS',\n", - " 'Badger - Healing Balm For Hardworking Hands',\n", - " (12, 96, 139, 206, 0)),\n", - " ('B0000682T7', 'Badger Balm, Sleep Balm - 2 oz', (120, 47, 67, 99, 0)),\n", - " ('B0000683O5',\n", - " 'CoverGirl Lipslicks Lip Gloss, Clear - .14 oz',\n", - " (216, 96, 163, 116, 0)),\n", - " ('B000068U49',\n", - " 'Kingsley Shave Soap Bowl with Lid Dark Wood',\n", - " (116, 103, 49, 34, 0)),\n", - " ('B00006FDU6',\n", - " 'Conair Straight Waves 3-in-1 Specialty Styler',\n", - " (220, 161, 24, 34, 0)),\n", - " ('B00006FE30',\n", - " 'Neutrogena Clear Pore Cleanser/Mask, 4.2 Fluid Ounce (125 ml)',\n", - " (99, 202, 22, 75, 0)),\n", - " ('B00006FRW7',\n", - " 'Aveeno Clear Complexion Daily Moisturizer, 4 Ounce',\n", - " (239, 196, 24, 76, 0)),\n", - " ('B00006IGL3',\n", - " 'Kiss My Face Organics Break Out, Botanical Acne Gel, 1 fl oz',\n", - " (133, 96, 192, 15, 0)),\n", - " ('B00006IGL8',\n", - " 'Kiss My Face Deep Cleansing Mask Pore Shrink , 2 Fluid Ounce',\n", - " (233, 122, 41, 37, 0)),\n", - " ('B00006IV22',\n", - " 'Conair 1875 Watt Dual Voltage Folding Handle Hair Dryer',\n", - " (148, 145, 71, 76, 0)),\n", - " ('B00006IV2E',\n", - " 'Conair BC40JBC Hot Brush, White, 0.75 Inch',\n", - " (36, 202, 94, 170, 0)),\n", - " ('B00006IV2F', 'Instant Heat Hot Brush, 3/4-Inch', (30, 180, 163, 195, 0)),\n", - " ('B00006IV30', 'Conair Instant Heat Travel Hairsetter', (220, 96, 24, 37, 0)),\n", - " ('B00006JN4F',\n", - " \"L'Oreal Paris Superior Preference Hair Color, LB-01 Extra Light Ash Blonde\",\n", - " (52, 180, 122, 170, 0)),\n", - " ('B00006JT6O',\n", - " 'Olay Total Effects Anti-Aging Night Firming Treatment - 1.7 Fl Oz',\n", - " (133, 180, 216, 75, 0)),\n", - " ('B00006K14U',\n", - " 'Nivea for Men Energy Face Scrub, 4.4 Ounce Tube',\n", - " (70, 122, 122, 13, 0)),\n", - " ('B00006L9KV',\n", - " 'Thicker Fuller Hair Revitalizing Shampoo-12 oz',\n", - " (144, 202, 37, 53, 0)),\n", - " ('B00006L9KW',\n", - " 'Thicker Fuller Hair Weightless Conditioner-12 oz',\n", - " (71, 47, 226, 100, 0)),\n", - " ('B00007FCQ1',\n", - " 'Blue Lizard Australian Sunscreen, Regular, SPF 30+, 8.75-Ounce Bottle',\n", - " (28, 178, 162, 37, 0)),\n", - " ('B00007KQF3',\n", - " 'Barielle Nail Strengthener Cream, 1 Ounce',\n", - " (28, 255, 71, 184, 0)),\n", - " ('B00007M0CP',\n", - " 'Conair Xtreme Instant Heat Multisized Hot Rollers, Pink',\n", - " (67, 68, 153, 152, 0)),\n", - " ('B000087L6T', 'Rose Milk Skin Care Lotion - 8 fl oz', (99, 96, 192, 170, 0)),\n", - " ('B000089SA4', 'Soap Glycerine Vitamin-E 4 Ounces', (17, 173, 246, 138, 0)),\n", - " ('B00008BNZ4',\n", - " 'Wahl 79900B Clip-N-Trim 23-Piece Complete Haircut Kit',\n", - " (105, 115, 33, 182, 0)),\n", - " ('B00008CMOQ',\n", - " 'Queen Helene Mint Julep Masque, 8 Ounce',\n", - " (12, 62, 122, 103, 0)),\n", - " ('B00008CMOR',\n", - " 'Queen Helene Original Formula Antioxidant Grape Seed Extract Peel Off Masque -- 6 oz',\n", - " (167, 145, 41, 103, 0)),\n", - " ('B00008CMOS',\n", - " 'Queen Helene Masque, Mud Pack - 8 oz',\n", - " (128, 52, 122, 184, 0)),\n", - " ('B00008DPP8',\n", - " 'Softsoap Naturals Moisturizing Liquid Hand Soap with Milk & Honey, Pump - 7.5 fl oz',\n", - " (132, 196, 67, 159, 0)),\n", - " ('B00008J2XQ',\n", - " 'Aveeno Active Naturals Skin Relief Hand Cream, 3.5 Ounce',\n", - " (102, 8, 24, 159, 0)),\n", - " ('B00008KA7P',\n", - " 'No Rinse Shampoo - 16 floz (473.1 mL)',\n", - " (99, 66, 201, 202, 0)),\n", - " ('B00008KA8D',\n", - " 'Revlon ColorStay Overtime Liquid Lipcolor, Keep Blushing',\n", - " (120, 122, 70, 195, 0)),\n", - " ('B00008MNZH',\n", - " 'Eucerin Daily Protection Moisturizing Face Lotion, Broad Spectrum SPF 30',\n", - " (99, 202, 67, 13, 0)),\n", - " ('B00008MOQE',\n", - " 'Maybelline Great Lash Mascara, Very Black -.43 Fluid Ounce',\n", - " (194, 59, 82, 195, 0)),\n", - " ('B00008MOQJ',\n", - " 'Maybelline Great Lash Curved - Very Black',\n", - " (80, 196, 59, 103, 0)),\n", - " ('B00008MOQN',\n", - " 'Maybelline Great Lash Waterproof Mascara, Very Black- .43 Fluid Ounce',\n", - " (80, 255, 59, 231, 0)),\n", - " ('B00008O2X5',\n", - " 'Almay Anti-Perspirant & Deodorant, Clear Gel, Fragrance Free - 2.25 oz',\n", - " (102, 131, 11, 15, 0)),\n", - " ('B00008PC1O',\n", - " 'Sun-In Spray-In Hair Lightener, Original - 4.7 fl oz',\n", - " (199, 202, 11, 38, 0)),\n", - " ('B00008ZPG9',\n", - " 'Olay Regenerist Deep Hydration Regenerating Cream Facial Moisturirzer 1.7 Fl Oz',\n", - " (99, 17, 71, 195, 0)),\n", - " ('B00008ZPGA',\n", - " 'Olay Regenerist Regenerating Serum Moisturizer 1.7 Fl Oz',\n", - " (99, 22, 65, 13, 0)),\n", - " ('B000092OX4',\n", - " 'Olay Regenerist Regenerating Lotion With Sunscreen Broad Spectrum SPF 15 2.5 Fl Oz',\n", - " (252, 129, 227, 103, 0)),\n", - " ('B000093A0U',\n", - " 'Hugo By Hugo Boss For Women. Eau De Toilette Spray 1.3 Ounces',\n", - " (31, 4, 27, 34, 0)),\n", - " ('B000093I60', 'No-Rinse Body Bath, 16 oz', (141, 161, 124, 195, 0)),\n", - " ('B000094Q6C',\n", - " 'Tournmaline Ceramic Curling Iron, 3/4-Inch',\n", - " (45, 66, 24, 100, 0)),\n", - " ('B000094ZDX',\n", - " 'Conair 1600 Watt Folding Handle Hair Dryer',\n", - " (195, 77, 33, 116, 0)),\n", - " ('B0000950LF',\n", - " 'Promensil Menopausal Relief Supplement Tablets, 60-Count Box',\n", - " (12, 234, 226, 159, 0)),\n", - " ('B000095SDS', 'Scalpicin Max Dermatology', (98, 47, 174, 114, 0)),\n", - " ('B00009WO0W', \"Weleda Children's Tooth Gel, 1.7 oz\", (56, 77, 163, 27, 0)),\n", - " ('B0000AFUTL',\n", - " 'Jerdon JP7506CF 8-Inch Two-Sided Swivel Wall Mount Mirror with 5x Magnification, 13.5-Inch Extension, Chrome Finish',\n", - " (36, 4, 163, 125, 0)),\n", - " ('B0000AJ3PT',\n", - " 'Aveeno Active Naturals Creamy Moisturizing Oil, 12 Ounce',\n", - " (239, 152, 71, 34, 0)),\n", - " ('B0000AJ3PU',\n", - " 'Aveeno Active Naturals Stress Relief Moisturizing Lotion, 12 Ounce',\n", - " (56, 47, 65, 170, 0)),\n", - " ('B0000AJ3Q3',\n", - " \"L'Oreal Paris Double Extend Mascara, Blackest Black, 0.33 Ounces\",\n", - " (192, 121, 122, 101, 0)),\n", - " ('B0000AN9L9',\n", - " 'Neutrogena Transparent Facial Bar Bonus Pack, Original Formula - 6 ea, 3.5 oz each, total 21 oz',\n", - " (102, 59, 124, 236, 0)),\n", - " ('B0000AS54S',\n", - " 'Udderly Smooth Udder Cream, Skin Moisturizer, 4 Ounce Tube',\n", - " (128, 141, 139, 219, 0)),\n", - " ('B0000BV14G',\n", - " 'Cool Water By Davidoff Eau-de-toilette Spray, 1.7-Ounce',\n", - " (119, 115, 163, 15, 0)),\n", - " ('B0000C0XL8',\n", - " 'Desert Essence Organic Jojoba Oil -- 4 fl oz',\n", - " (69, 173, 216, 206, 0)),\n", - " ('B0000C4COV',\n", - " 'derma e Soothing Skin Treatment, Tea Tree & E Antiseptic Crème, 4 oz (113 g)',\n", - " (133, 21, 147, 206, 0)),\n", - " ('B0000CC64W',\n", - " 'Olay Regenerist Daily Regenerating Serum - Fragrance Free Moisturizer 1.7 Fl Oz',\n", - " (99, 46, 162, 34, 0)),\n", - " ('B0000CDVN6', 'Conair Spiral Styler, 0.75 Inch', (17, 249, 155, 159, 0)),\n", - " ('B0000CNR0E',\n", - " 'Household Essentials Travel Tie Case, Black',\n", - " (36, 96, 226, 152, 0)),\n", - " ('B0000CNR0J',\n", - " 'Household Essentials Grooming Travel Bag Organizer, Black',\n", - " (36, 180, 24, 27, 0)),\n", - " ('B0000UJJH0',\n", - " 'Desert Essence Tea Tree Oil 100% Pure, 2-Ounce',\n", - " (39, 135, 208, 77, 0)),\n", - " ('B0000UTUS8',\n", - " 'Aquis Microfiber Hair Turban, Lisse Crepe, Patented Design, White',\n", - " (28, 77, 192, 91, 0)),\n", - " ('B0000UTUVU',\n", - " \"Mrs. Meyer's Clean Day Dish Soap, Lavender, 16 Ounce Bottle\",\n", - " (149, 211, 226, 91, 0)),\n", - " ('B0000UTUW4',\n", - " \"Mrs. Meyer's Clean Day Liquid Hand Soap, Lavender, 12.5 Ounce Bottle\",\n", - " (6, 21, 201, 160, 0)),\n", - " ('B0000VC1YC',\n", - " 'Neutrogena Body Oil, Light Sesame Formula, 32 Ounce',\n", - " (94, 129, 59, 219, 0)),\n", - " ('B0000XMQTA',\n", - " 'Irene Gari Cover Your Grey for Women Touch Up Stick Medium Brown',\n", - " (193, 242, 192, 169, 0)),\n", - " ('B0000Y3C3I', 'Afirm 3X', (21, 47, 163, 188, 0)),\n", - " ('B0000Y3COC', 'PanOxyl Bar 10% - 4 oz - 1 Bar', (93, 4, 216, 118, 0)),\n", - " ('B0000Y3CRY', 'Nizoral Anti-Dandruff Shampoo, 4 oz.', (92, 47, 201, 182, 0)),\n", - " ('B0000Y3CSI',\n", - " 'Neutrogena T/Gel Original Shampoo - 16 oz',\n", - " (128, 145, 226, 103, 0)),\n", - " ('B0000Y3D4G',\n", - " 'Neutrogena Norwegian Formula Lip Moisturizer, SPF 15, 0.15 Ounce',\n", - " (92, 96, 67, 37, 0)),\n", - " ('B0000Y3D4Q', 'Rezamid Acne Treatment Lotion, 2 oz.', (71, 173, 246, 15, 0)),\n", - " ('B0000Y3DAK', 'DHS Clear Shampoo 8 oz', (13, 3, 201, 114, 0)),\n", - " ('B0000Y3FQC', 'Diamancel Tough Buffer #11', (192, 151, 250, 152, 0)),\n", - " ('B0000Y3FRG', 'Obagi Nu-Derm Foaming Gel -- 6.7 fl oz', (102, 8, 17, 77, 0)),\n", - " ('B0000Y3GF2',\n", - " 'Free & Clear Hairspray Firm Hold, 8 Ounce',\n", - " (71, 122, 139, 91, 0)),\n", - " ('B0000Y3GIE',\n", - " 'Nailtiques Formula 2 Nail Growth Formula Treatments, 0.25 Ounce',\n", - " (28, 134, 59, 170, 0)),\n", - " ('B0000Y3LAC',\n", - " 'Jobst It Stays Roll-on Body Adhesive 2 oz. (3 pack)',\n", - " (92, 115, 70, 169, 0)),\n", - " ('B0000Y8H3S',\n", - " 'Rogaine for Men Hair Regrowth Treatment, Extra Strength Original Unscented, Set of 3, 2-Ounce Bottles',\n", - " (214, 51, 59, 103, 0)),\n", - " ('B0000YUWY0',\n", - " 'jerome russell Hair Color Thickener for Thinning Hair, Black, 3.5 Ounce',\n", - " (120, 66, 10, 100, 0)),\n", - " ('B0000YUX4O', 'Mebco Tortoise Shower Detangler', (241, 196, 201, 53, 0)),\n", - " ('B0000YUXGW', 'Mavala Scientifique (Nail Hardener)', (250, 3, 219, 38, 0)),\n", - " ('B0000YUXI0',\n", - " 'Mavala Stop - Helps Cure Nail Biting and Thumb Sucking, 0.3-Fluid Ounce',\n", - " (228, 196, 162, 103, 0)),\n", - " ('B0000YV6BI', 'ApHogee Shampoo for Damaged Hair', (132, 202, 226, 60, 0)),\n", - " ('B0000YV6YK', \"One 'n Only Colorfix\", (194, 247, 218, 53, 0)),\n", - " ('B0000YV83O', 'Facial-Flex Facial Exercise System', (132, 173, 33, 159, 0)),\n", - " ('B0000ZHH5G',\n", - " 'Vanicream Moisturizing Skin Cream, 16 Ounces',\n", - " (44, 134, 33, 103, 0)),\n", - " ('B0000ZHOEU',\n", - " 'Free & Clear Liquid Cleanser, 8 Ounce',\n", - " (117, 21, 201, 15, 0)),\n", - " ('B0000ZLEFU',\n", - " 'Auric Blends Perfume Oil, 0.33 oz - Coco Mango',\n", - " (127, 21, 122, 15, 0)),\n", - " ('B0000ZLEX2',\n", - " 'Black Opium - Auric Blends Perfume Oils',\n", - " (47, 96, 187, 15, 0)),\n", - " ('B00011JI88', 'Ardell Fashion Lashes - 120 Black Demi', (36, 21, 59, 75, 0)),\n", - " ('B00011JOQY', 'Cricket Static Free Fast Flo', (36, 202, 153, 34, 0)),\n", - " ('B00011JOR8',\n", - " 'Cricket Hair Brush Static Free, Mini Fast Flo, 1.28 Ounce',\n", - " (97, 149, 226, 99, 0)),\n", - " ('B00011JTFA', 'Star Nail Pen-Style Polish Corrector', (42, 129, 70, 170, 0)),\n", - " ('B00011QTZI',\n", - " 'Cricket Technique Barrel Hair Brush, XX-large Round, 2 Inch',\n", - " (36, 202, 162, 170, 0)),\n", - " ('B00011QUDE',\n", - " 'Helen of Troy 1514 Brush Iron, White, 1 1/2 Inches Barrel',\n", - " (155, 21, 132, 220, 0)),\n", - " ('B00011QUKW',\n", - " 'Hot Tools HT1108 Professional Marcel Iron, 1 Inch',\n", - " (187, 77, 24, 3, 0)),\n", - " ('B00011QVHO',\n", - " 'Spornette Porcupine Rounder Brush, 2-Inch Diameter',\n", - " (195, 129, 140, 76, 0)),\n", - " ('B00011QVIS',\n", - " 'Spornette Prego Brush, 2-Inch Diameter',\n", - " (230, 3, 218, 52, 0)),\n", - " ('B00011QVUG',\n", - " 'For Pro Stretch Terry Headband with Velcro 3in.',\n", - " (34, 3, 59, 77, 0)),\n", - " ('B000127UUA',\n", - " 'Camille Beckman Glycerin Hand Therapy, White Lilac, 8 Ounce',\n", - " (232, 161, 139, 91, 0)),\n", - " ('B000127UVY',\n", - " 'Camille Beckman Glycerin Hand Therapy, Glycerine Rosewater, 6 Ounce',\n", - " (232, 103, 226, 219, 0)),\n", - " ('B000127VFE',\n", - " 'Camille Beckman Silky Body Moisturizing Cream, Glycerine Rosewater, 16 Ounce',\n", - " (232, 103, 208, 219, 0)),\n", - " ('B00012NEYG', \"Burt's Bees Head to Toe Starter Kit\", (28, 59, 43, 91, 0)),\n", - " ('B00012NI7E',\n", - " \"Burt's Bees Avocado Butter Pre-Shampoo Hair Treatment with Nettles and Rosemary - 4.34 fl oz\",\n", - " (196, 122, 65, 15, 0)),\n", - " ('B00012NJZA',\n", - " \"Burt's Bees Orange Essence Facial Cleanser, 4.3 Ounces\",\n", - " (128, 47, 65, 103, 0)),\n", - " ('B00012NKGS',\n", - " \"Burt's Bees: Citrus Facial Scrub, 2 oz\",\n", - " (47, 21, 216, 103, 0)),\n", - " ('B000136P7S',\n", - " 'Miracle of Aloe Miracle Hand Repair Cream 8 Oz',\n", - " (247, 21, 246, 76, 0)),\n", - " ('B00013TQRE',\n", - " 'Rogaine for Women Hair Regrowth Treatment 3- 2 ounce bottles',\n", - " (255, 51, 59, 15, 0)),\n", - " ('B00013YYS0',\n", - " \"Burt's Bees - Cuticle Creme Lemon Butter - 0.6 oz.\",\n", - " (47, 173, 216, 34, 0)),\n", - " ('B00013YZ7U', \"Dr. Bronner's Almond Soap 32oz\", (191, 161, 67, 116, 0)),\n", - " ('B00013Z15A',\n", - " \"Burt's Bees Day Creme Carrot Nutritive -- 2 fl oz\",\n", - " (218, 24, 254, 34, 0)),\n", - " ('B000141O6E',\n", - " 'Redken Extreme Anti-Snap Leave-in Treatment, 8.5 Ounce',\n", - " (47, 196, 75, 169, 0)),\n", - " ('B000142AZ8',\n", - " 'Bain de Soleil Mega Tan Sunscreen Lotion With Self Tanner, SPF 4 - 4 fl oz',\n", - " (132, 196, 163, 170, 0)),\n", - " ('B000142C1A',\n", - " 'Essie Nail Polish Marshmallow, .5 Ounce',\n", - " (250, 62, 254, 116, 0)),\n", - " ('B000142FVW',\n", - " 'Opi Nail Lacquer, Not So Bora Pink, 0.5 Fluid Ounce',\n", - " (210, 77, 59, 198, 0)),\n", - " ('B000142JDG',\n", - " 'Roux Fanci-Full Mousse, 18 Spun Sand, 6 Fluid Ounce',\n", - " (39, 8, 192, 34, 0)),\n", - " ('B000142KZ8',\n", - " 'Pretty Nails Instant Polish Remover Regular',\n", - " (201, 202, 201, 60, 0)),\n", - " ('B000142MGA',\n", - " 'Fran Wilson Eye Tees Precision Makeup Applicators 80 Cotton Swabs',\n", - " (11, 120, 11, 116, 0)),\n", - " ('B000142NDC',\n", - " 'Bigen Permanent Powder Hair Color, Dark Chestnut, .21 Ounce',\n", - " (5, 46, 27, 103, 0)),\n", - " ('B000142OZY',\n", - " 'Aphogee Conditioner Pro-Vitamin Leave-In 8 oz.',\n", - " (13, 3, 24, 53, 0)),\n", - " ('B000142P12',\n", - " 'ApHogee Keratin and Green Tea Restructurizer 8 fl. oz',\n", - " (132, 47, 43, 169, 0)),\n", - " ('B000142PUS',\n", - " 'Clairol Professional Beautiful Collection Semi-permanent Hair Color, Light Reddish Brown',\n", - " (102, 149, 216, 219, 0)),\n", - " ('B000142Q6G', 'Colora Henna Veg-Hair Chestnut 2oz', (29, 119, 122, 169, 0)),\n", - " ('B000142TU4',\n", - " 'Sally Hansen Polish Remover 8 oz. Strengthening',\n", - " (112, 202, 24, 99, 0)),\n", - " ('B000142U9E',\n", - " 'Fantasia High Potency IC Hair Polisher Styling Gel, with Sparkle Lites, 16 oz.',\n", - " (245, 66, 140, 206, 0)),\n", - " ('B000142ZFS', 'Super Nail Polish Thinner 4oz', (3, 135, 65, 76, 0)),\n", - " ('B0001431AG',\n", - " 'Fran Wilson Cake Eyeliner, Black, 0.09 Ounce',\n", - " (241, 211, 201, 219, 0)),\n", - " ('B0001432S2',\n", - " 'OPI Natural Nail Strengthener Treatment, 0.5-Fluid Ounce',\n", - " (201, 145, 59, 195, 0)),\n", - " ('B0001433OU',\n", - " 'OPI Nail Lacquer, Pirates of The Caribbean Collection, Stranger Tides, 0.5 Fluid Ounce',\n", - " (112, 4, 40, 12, 0)),\n", - " ('B0001433VI',\n", - " 'OPI Start-to-finish Base Coat, Top Coat and Nail Strengthener, 0.5-Fluid Ounce',\n", - " (86, 46, 219, 91, 0)),\n", - " ('B000143AY8', 'Fran Wilson Yellow Mood Matcher', (119, 89, 140, 169, 0)),\n", - " ('B000143CFA', 'Andrea Eyelash Adhesive: Clear', (132, 159, 254, 76, 0)),\n", - " ('B000143K2A',\n", - " \"Mane 'n Tail Deep Moisturizing Conditioner\",\n", - " (132, 145, 71, 77, 0)),\n", - " ('B000143O7G', 'Instant Peel Natural Dead Skin Remover', (120, 2, 3, 12, 0)),\n", - " ('B000146L62',\n", - " 'Cassia Clove 100% Pure & Natural Aromatherapy Herbal Soap- 4 oz (113g)',\n", - " (252, 149, 226, 152, 0)),\n", - " ('B000146LKS',\n", - " 'Patchouli 100% Pure & Natural Aromatherapy Herbal Soap- 4 oz (113g)',\n", - " (252, 149, 226, 152, 1)),\n", - " ('B00014D138',\n", - " 'Jason Pure Natural Moisturizing Creme, Anti-Aging Tea Time, 4 Ounce',\n", - " (50, 196, 219, 99, 0)),\n", - " ('B00014D1OW', 'Lemon Clarifying Shampoo 11 Ounces', (93, 247, 138, 217, 0)),\n", - " ('B00014D322',\n", - " 'MillCreek - Biotin Shampoo, 16 fl oz gel',\n", - " (56, 24, 124, 75, 0)),\n", - " ('B00014D5O8', \"Burt's Bees Hand Salve, 3 oz Tin\", (230, 3, 201, 114, 0)),\n", - " ('B00014DGCO',\n", - " 'Plantlife Lavender 100% Pure Essential Oil - Bulgarian - 10 ml',\n", - " (252, 211, 226, 169, 0)),\n", - " ('B00014DIKE',\n", - " \"Burt's Bees Therapeutic Bath Crystals, 1 Pound\",\n", - " (71, 145, 41, 206, 0)),\n", - " ('B00014DKKC',\n", - " \"Burt's Bees Lemon & Vitamin E Bath & Body Oil, 4 Fluid Ounce\",\n", - " (117, 23, 65, 162, 0)),\n", - " ('B00014DM5K',\n", - " 'Facial Toner & Freshener-Aloe Vera Earth Science 8 oz Liquid',\n", - " (196, 173, 226, 159, 0)),\n", - " ('B00014DMQE',\n", - " 'Reviva Labs 10% Glycolic Acid Cream -- 1.5 oz',\n", - " (47, 255, 27, 60, 0)),\n", - " ('B00014DMRI',\n", - " 'Aubrey Organics - Natural Mist Herbal Hairspray (Regular Hold), 8 fl oz spray',\n", - " (71, 134, 162, 15, 0)),\n", - " ('B00014DMUA',\n", - " 'Moisturizer-Daily Essential Jojoba/Aloe Desert Essence 4 oz Cream',\n", - " (196, 173, 59, 77, 0)),\n", - " ('B00014DTY4',\n", - " 'Nutribiotic Skin Ointment, 0.5 Ounce',\n", - " (170, 109, 59, 219, 0)),\n", - " ('B00014DU6G',\n", - " 'Earth Science Fragrance Free Clarifying Facial Wash 8 oz',\n", - " (247, 3, 219, 195, 0)),\n", - " ('B00014DZ2K', 'AmeriLeather Leather Toiletry Bag', (241, 62, 122, 15, 0)),\n", - " ('B00014EH2C',\n", - " 'Apricot Intensive Night Cream, 1.65oz',\n", - " (204, 228, 153, 77, 0)),\n", - " ('B00014EKJC',\n", - " \"Nature's Plus Natural Beauty Cleansing Bar -- 3 oz\",\n", - " (21, 4, 10, 219, 0)),\n", - " ('B00014FTTM',\n", - " 'Reviva Labs DMAE Firming Fluid - 1 oz',\n", - " (182, 80, 65, 170, 0)),\n", - " ('B00014GT78',\n", - " 'Dermablend Cover Creme - Chroma 1 - Rose Beige, 1 oz',\n", - " (99, 66, 3, 195, 0)),\n", - " ('B00014GTWS',\n", - " 'Dermablend Leg and Body Cover Make-Up SPF 15, Medium, 3.4 Ounce',\n", - " (71, 80, 27, 206, 0)),\n", - " ('B00014HF94',\n", - " \"Vitamin E 14,000 IU Nature's Plus 0.5 oz Liquid\",\n", - " (132, 108, 246, 53, 0)),\n", - " ('B00014JKG0',\n", - " \"Nature's Gate Tea Tree Moisturizing Lotion for Irritated, Distressed Skin, 18-Ounce Pump Bottle\",\n", - " (170, 115, 11, 159, 0)),\n", - " ('B00014JOHA',\n", - " 'Kiss My Face - Whenever Shampoo, 11 fl oz liquid',\n", - " (26, 46, 118, 103, 0)),\n", - " ('B00014WW38',\n", - " 'Naturtint Permanent Hair Colorant Sandy Blonde',\n", - " (166, 96, 234, 37, 0)),\n", - " ('B00015GWQU',\n", - " 'Fran Wilson Nail Tees Precision Makeup Applicators 120 Cotton Swabs',\n", - " (11, 69, 153, 116, 0)),\n", - " ('B00015HBD8',\n", - " 'Phillips Light Touch 1 Cushion Hair Brush',\n", - " (244, 159, 24, 99, 0)),\n", - " ('B00015HBEC',\n", - " 'Spornette Large Oval Nylon Bristle Cushion Brush',\n", - " (105, 77, 141, 27, 0)),\n", - " ('B00015HBEM',\n", - " 'Spornette Double Stranded XL Nylon Rounder Brush, 2-Inch Diameter',\n", - " (80, 159, 192, 27, 0)),\n", - " ('B00015XAQ0',\n", - " 'Avalon Organics Vitamin C Renewal Refreshing Cleansing Gel, 8.5 Ounce Bottle',\n", - " (38, 178, 162, 34, 1)),\n", - " ('B00016QYOO',\n", - " 'Desert Essence Thoroughly Clean Face Wash - Original -- 8.5 fl oz',\n", - " (239, 100, 153, 195, 0)),\n", - " ('B00016RIIA', 'Yerba Prima Tampico Skin Brush 1 Ea', (132, 196, 234, 53, 0)),\n", - " ('B00016WSIK',\n", - " 'Earth Therapeutics Body Sponge, Anti-Bacterial, 1 Count',\n", - " (232, 59, 118, 27, 0)),\n", - " ('B00016WUEW',\n", - " 'Heritage Products Rosewater & Glycerin, 4 Ounce',\n", - " (141, 59, 162, 178, 0)),\n", - " ('B00016WULK',\n", - " 'Avalon Organics Vitamin C Renewal Moisture Plus Lotion SPF 15 -- 4 fl oz',\n", - " (104, 234, 67, 34, 1)),\n", - " ('B00016WV6E', 'Henna Persia Light Brown 4 Ounces', (13, 96, 37, 100, 0)),\n", - " ('B00016WW8Q', \"Dickinson's Witch Hazel 16 oz\", (1, 96, 41, 99, 0)),\n", - " ('B00016WXEY',\n", - " 'LILY OF THE DESERT, Aloe Vera Gelly - 12 oz',\n", - " (154, 134, 11, 77, 0)),\n", - " ('B00016X06O',\n", - " 'Herbatint Permanent Herbal Haircolor Gel, Golden Chestnut 4D, 4.56-Ounce',\n", - " (71, 21, 246, 206, 0)),\n", - " ('B00016X3G6',\n", - " 'Herbal Salt Scrub Lavender 20.50 Ounces',\n", - " (231, 173, 226, 159, 0)),\n", - " ('B00016X3L6',\n", - " 'GIOVANNI COSMETICS, Nutrafix Hair Reconstructor - 8.5 oz',\n", - " (71, 159, 162, 202, 0)),\n", - " ('B00016X604',\n", - " \"Smiles' Prid Homeopathic Drawing Salve, 18 GM, 1 each\",\n", - " (123, 161, 162, 160, 0)),\n", - " ('B00016X68Q',\n", - " 'J.R. Liggett Bar Shampoo, Original Formula, 3.5 Ounce',\n", - " (28, 236, 201, 91, 0)),\n", - " ('B00016XJ4M',\n", - " 'Thayers - Rose Petal Witch Hazel with Aloe Vera Alcohol-Free Toner - 12 oz.',\n", - " (128, 108, 162, 152, 0)),\n", - " ('B00016XJ7O',\n", - " 'Thayers Witch Hazel w/Aloe Vera Lemon 12 oz',\n", - " (71, 135, 206, 77, 0)),\n", - " ('B00016XJ8S',\n", - " 'Arbordoun Abundantly Herbal Calendula Cream 4 Oz',\n", - " (118, 47, 163, 100, 0)),\n", - " ('B000172R76',\n", - " 'Ace Teasing Tail Comb 8" * Black',\n", - " (155, 62, 254, 160, 0)),\n", - " ('B000177FXW',\n", - " \"Bar Soap-Tea Tree Dr. Bronner's 5 oz Bar\",\n", - " (71, 181, 252, 219, 0)),\n", - " ('B00017XWJ8',\n", - " 'Ralph Lauren Eau de Toilette Spray For Women, 1.7 Oz',\n", - " (212, 47, 139, 38, 0)),\n", - " ('B000186X4I',\n", - " 'Shiseido Shiseido Cleansing Massage Brush',\n", - " (91, 8, 33, 114, 0)),\n", - " ('B000195GAY',\n", - " 'Blue Grass By Elizabeth Arden Deodorant Cream, 1.5-Ounce',\n", - " (191, 115, 226, 195, 0)),\n", - " ('B000196U04', 'Diamon Deb Nail File 8"', (253, 24, 216, 114, 0)),\n", - " ('B0001AGMWE',\n", - " 'Miracell ProEar-for Itchy, Irritated Ears .5 OZ',\n", - " (230, 62, 162, 170, 0)),\n", - " ('B0001AQCII',\n", - " 'China Glaze Nail Polish, Jetstream, 0.5 Fluid Ounce',\n", - " (79, 196, 250, 21, 0)),\n", - " ('B0001B86HM',\n", - " 'Conair Pro Style 1875 Watt Hard Hat Hair Dryer',\n", - " (28, 159, 24, 116, 0)),\n", - " ('B0001EKTZQ',\n", - " 'Dermalogica Multi-active Toner, 8.4 Fluid Ounce',\n", - " (139, 180, 163, 15, 0)),\n", - " ('B0001EKWPI',\n", - " 'Vanicream Cleansing Bar, Fragrance Free, 3.9 Ounce Bars (Pack of 3)',\n", - " (71, 134, 122, 169, 0)),\n", - " ('B0001EKYL0',\n", - " 'Exuviance Evening Restorative Complex, 1.75 Fluid Ounce',\n", - " (133, 2, 59, 162, 0)),\n", - " ('B0001EL0CW',\n", - " 'Basis Cleans and Smoothes Sensitive Skin Bar',\n", - " (170, 211, 67, 34, 0)),\n", - " ('B0001EL5R2', 'PCA Skin Acne Cream, 0.5 Ounce', (92, 202, 59, 77, 0)),\n", - " ('B0001EL658',\n", - " 'Bare Escentuals Maximum Coverage Concealer Brush',\n", - " (149, 120, 153, 114, 0)),\n", - " ('B0001FF80G', 'Dopp Jumbo Kit w/ Zip Bottom', (34, 62, 67, 219, 0)),\n", - " ('B0001I8ZT4',\n", - " 'Mar-V-Cide Shampoo Brush & Invigorator',\n", - " (32, 161, 139, 116, 0)),\n", - " ('B0001LH6YG', 'My Spots Are Consealed Light Color', (194, 196, 70, 103, 0)),\n", - " ('B0001M3K4U',\n", - " 'Soft N Style Pro-Cap Professional Processing Caps, Extra Large, 30-count',\n", - " (241, 196, 140, 37, 0)),\n", - " ('B0001M7D7A',\n", - " 'Marianna Single Prong Curl Clip 80 pcs',\n", - " (225, 189, 43, 57, 0)),\n", - " ('B0001MC06Y',\n", - " 'Peter Thomas Roth Beta Hydroxy Acid 2% Acne Wash 8.5 fl oz',\n", - " (133, 211, 218, 103, 0)),\n", - " ('B0001MROQA',\n", - " 'Hot Tools Big Bumper Spring Curling Iron, 1-1/2"',\n", - " (153, 66, 254, 100, 0)),\n", - " ('B0001TJX2Q',\n", - " 'Home Health Castor Oil, Cold Pressed and Cold Processed, 32-Ounce',\n", - " (102, 211, 234, 220, 0)),\n", - " ('B0001TMDF0',\n", - " 'Heritage Store Rose Petals Rosewater 8 oz',\n", - " (246, 236, 201, 114, 0)),\n", - " ('B0001TO3NA', \"Grandpa's Pine Tar Soap Medium Size\", (216, 21, 227, 27, 0)),\n", - " ('B0001TODNK',\n", - " 'Earth Therapeutics Hydro Exfoliating Towel, 1 each',\n", - " (120, 96, 254, 152, 0)),\n", - " ('B0001TOH8G',\n", - " 'Exfoliating Hydro Gloves-Natural Earth Therapeutics 1 Set',\n", - " (132, 173, 140, 169, 0)),\n", - " ('B0001TQ5MW', 'Margarite Zinc Cream -- 1 oz', (102, 255, 33, 53, 0)),\n", - " ('B0001TQ9WI',\n", - " 'Mountain Ocean Skin Trip Moisturizer, Coconut, 8-Ounce',\n", - " (13, 55, 201, 114, 0)),\n", - " ('B0001TSJPI',\n", - " 'Bar Soap - Sandalwood, 6 Units / 2.6 oz',\n", - " (234, 247, 218, 12, 0)),\n", - " ('B0001TSWWS',\n", - " 'Home Health Roll-On Deodorant Herbal Scent -- 3 fl oz',\n", - " (71, 173, 219, 160, 0)),\n", - " ('B0001UWRCI',\n", - " 'Yu-Be Moisturizing Skin Cream 1.25 oz Tube',\n", - " (252, 202, 163, 195, 0)),\n", - " ('B0001VKL7U', \"Burt's Bees Lip Shimmer, Rhubarb\", (128, 77, 37, 195, 0)),\n", - " ('B0001VOJWI',\n", - " 'Pheromone By Marilyn Miglin For Women. Eau De Parfum Spray 1.7 Oz / 50 Ml.',\n", - " (47, 134, 65, 103, 0)),\n", - " ('B0001XKA38',\n", - " 'Roux Lash and Brow Tint, Brown, 40 Count',\n", - " (120, 122, 139, 76, 0)),\n", - " ('B0001XLSQ6', 'Steam Facial By Kaz', (183, 4, 40, 12, 0)),\n", - " ('B0001XLSR0',\n", - " 'ROUX Tween Time Instant Haircolor Touch-Up Stick BLACK 1/3 oz/10g',\n", - " (152, 47, 24, 159, 0)),\n", - " ('B0001XQNMK',\n", - " 'Roux Fanci Full Mousse #52 White Mink 6 oz',\n", - " (194, 47, 122, 27, 0)),\n", - " ('B0001Y74VS',\n", - " 'Ouidad by Ouidad Ouidad Climate Control Heat and Humidity Gel for Unisex, 8.5 Ounce',\n", - " (58, 68, 33, 169, 0)),\n", - " ('B0001Y74XG',\n", - " 'Ouidad Water Works Clarifying Shampoo, 8.5 Ounce',\n", - " (212, 21, 246, 114, 0)),\n", - " ('B0001YOMD6',\n", - " 'Touch with Love Eau De Parfum Spray for Women by Fred Hayman, 1.7 Ounce',\n", - " (175, 100, 234, 12, 0)),\n", - " ('B0001YXXUY',\n", - " 'Hot Tools HT1074 Anti-Static Ionic Hot Air Brush with Ion Technology, 1000 Watts, 1 1/2 Inches',\n", - " (182, 159, 27, 76, 0)),\n", - " ('B0001ZA3Y2', 'U-Lactin Dry Skin Lotion - 16 oz.', (252, 115, 59, 77, 0)),\n", - " ('B0001ZA4CS',\n", - " 'NeoStrata Exuviance CoverBlend Multi Function Concealer SPF15 - Sand, .5 fl oz',\n", - " (132, 115, 33, 13, 0)),\n", - " ('B0001ZYL3Q',\n", - " 'TheraNeem Cream - Original Organix South 2 oz Cream \\nVanilla',\n", - " (118, 66, 216, 103, 0)),\n", - " ('B0001ZYLAO',\n", - " 'Emerita Pro-gest Natural Balancing Cream, 2 Ounce',\n", - " (177, 62, 122, 103, 0)),\n", - " ('B0001ZZH0M',\n", - " 'Naturally Fresh, Deodorant Crystal Spray Mist, 4 Oz ',\n", - " (71, 21, 227, 27, 0)),\n", - " ('B00020DY2O',\n", - " 'TheraNeem Gentle Therape Shampoo Organix South 12 oz Liquid',\n", - " (44, 173, 197, 171, 0)),\n", - " ('B00020E1P8', 'Shiseido Shiseido Facial Cotton', (194, 103, 27, 160, 0)),\n", - " ('B00021AK4I',\n", - " 'Calvin Klein Ck One EDT Spray 1.7 oz for Unisex',\n", - " (9, 62, 122, 195, 0)),\n", - " ('B00021AM9G',\n", - " 'Hanae Mori by Hanae Mori for Women - 3.4 Ounce EDT Spray',\n", - " (31, 24, 27, 116, 0)),\n", - " ('B00021AQCY',\n", - " 'Fekkai Shea Butter Moisturizing Shampoo Hair Products 8 Fl Oz',\n", - " (41, 100, 67, 206, 0)),\n", - " ('B00021AYF8',\n", - " 'Mustela Foam Shampoo for Newborns - 5.07 oz.',\n", - " (128, 47, 65, 170, 0)),\n", - " ('B00021B8L2',\n", - " 'Philosophy Hope in a Jar Daily Moisturizer, Dry Skin, 2 Ounce',\n", - " (127, 3, 98, 75, 0)),\n", - " ('B00021B95W',\n", - " 'Philosophy Coconut Frosting Shampoo/Shower Gel/Bubble Bath, 16 Ounces',\n", - " (117, 3, 254, 114, 0)),\n", - " ('B00021BEXY', 'Blinc Kiss Me Mascara, Dark Brown', (210, 4, 40, 12, 0)),\n", - " ('B00021C1LI',\n", - " 'Philosophy Purity Made Simple One-Step Facial Cleanser, 16 Ounces',\n", - " (107, 8, 219, 182, 0)),\n", - " ('B00021C49W',\n", - " 'Philosophy Amazing Grace Shower Gel, 16 Ounces',\n", - " (221, 8, 70, 152, 0)),\n", - " ('B00021C5Y6',\n", - " 'STILL JENNIFER LOPEZ by Jennifer Lopez EAU DE PARFUM SPRAY 3.4 OZ',\n", - " (178, 145, 122, 103, 0)),\n", - " ('B00021C9BA', 'NARS Cream Blush, Lokoum', (161, 129, 41, 170, 0)),\n", - " ('B00021CNCK',\n", - " 'CASHMERE MIST by Donna Karan EDT SPRAY 3.4 OZ',\n", - " (76, 211, 122, 53, 0)),\n", - " ('B00021CSBG', 'NARS Duo Eyeshadow, All About Eve', (200, 196, 201, 195, 0)),\n", - " ('B00021CT10', 'NARS Matte Eyeshadow, Thunderball', (65, 66, 254, 170, 0)),\n", - " ('B00021CT56', 'NARS Shimmer Eyeshadow, Nepal', (65, 66, 254, 116, 0)),\n", - " ('B00021D5FY',\n", - " 'Desire by Alfred Dunhill for Men - 1.7 Ounce EDT Spray',\n", - " (119, 96, 226, 116, 0)),\n", - " ('B00021D6JE',\n", - " 'FCUK by French Connection Eau De Toilette Spray 1.7 oz for Men',\n", - " (59, 167, 122, 77, 0)),\n", - " ('B00021DDR4', 'NARS The Multiple, Maui', (65, 122, 153, 170, 0)),\n", - " ('B00021DDYW', 'NARS Sheer Lipstick, Barbarella', (3, 248, 201, 15, 0)),\n", - " ('B00021DE14', 'NARS Semi-Matte Lipstick, Morocco', (3, 248, 201, 15, 1)),\n", - " ('B00021DG80', 'NARS Lip Gloss, Turkish Delight', (79, 202, 201, 76, 0)),\n", - " ('B00021DJ32', 'NARS Blush, Taj Mahal', (107, 77, 140, 34, 0)),\n", - " ('B00021DPHW', 'NARS Bronzing Powder, Casino', (109, 129, 65, 241, 0)),\n", - " ('B00021DTEG',\n", - " 'Bare Escentuals bareMinerals Glimmer Celestine',\n", - " (117, 59, 70, 91, 0)),\n", - " ('B00021DUM2',\n", - " \"bareMinerals Blush - I'm Amused Rouge\",\n", - " (194, 80, 201, 170, 0)),\n", - " ('B00021DVCQ',\n", - " 'BareMinerals Original Foundation Broad Spectrum SPF 15 8 g/0.28 Oz (Fair C10 8g/0.28 oz)',\n", - " (128, 145, 201, 76, 0)),\n", - " ('B00021DZCC',\n", - " 'Philosophy Falling in Love Spray Fragrance, 2 Ounce',\n", - " (221, 145, 139, 15, 0)),\n", - " ('B00021EA9Y',\n", - " 'Mustela Hydra-Bebe Body Lotion w/ Pump 10.14 US fl. oz',\n", - " (63, 213, 41, 103, 0)),\n", - " ('B00021KD2C',\n", - " 'derma e Anti-Wrinkle Vitamin A Retinyl Palmitate Crème , 4-Ounce Jar',\n", - " (56, 21, 59, 160, 0)),\n", - " ('B00021PDN6',\n", - " 'Cacharel Anais Anais By Cacharel - Eau De Toilette Spray 3.4 Oz, 3.4 oz',\n", - " (63, 145, 55, 91, 0)),\n", - " ('B00021UR3C',\n", - " 'Green Tea by Elizabeth Arden, 1.5 Ounce',\n", - " (229, 180, 82, 202, 0)),\n", - " ('B00021W26M',\n", - " 'Prestige Liquid Eyeliner, Legend, 0.1 Ounce',\n", - " (222, 29, 227, 160, 0)),\n", - " ('B00021WZVE',\n", - " 'Christian Super Long Lash Mascara Waterproof Seven Oils Black',\n", - " (132, 159, 163, 99, 0)),\n", - " ('B000225ZL0', 'Fresh Farmacy Cleanser by LUSH', (1, 134, 27, 37, 0)),\n", - " ('B000225ZOC', 'Karma Handmade Soap by LUSH', (120, 145, 138, 91, 0)),\n", - " ('B0002260DW', 'Sex Bomb Bath Bomb by LUSH', (119, 161, 162, 53, 0)),\n", - " ('B0002260L4', 'Big Blue Bath Bomb by LUSH', (141, 211, 65, 53, 0)),\n", - " ('B0002260N2', 'Karma Komba Solid Shampoo by LUSH', (232, 100, 254, 91, 0)),\n", - " ('B00022F1DW',\n", - " 'Organic Excellence Mint Shampoo, 16 Ounce',\n", - " (93, 103, 34, 195, 0)),\n", - " ('B00022WA9K', 'Revlon Shine Enchancing Hot Air Kit', (149, 66, 201, 114, 0)),\n", - " ('B00022WA9U',\n", - " 'Revlon RV261 20-Roller Ionic Professional Hairsetter, Purple',\n", - " (135, 77, 219, 114, 0)),\n", - " ('B00023DIBI',\n", - " 'Cucina Coriander and Olive Tree 33.8 oz Purifying Hand Wash Refill',\n", - " (120, 21, 153, 104, 0)),\n", - " ('B00023KDAW',\n", - " 'amazing grace | perfumed firming body emulsion | philosophy 8 oz.',\n", - " (99, 196, 67, 241, 0)),\n", - " ('B000248HLI',\n", - " 'StriVectin-SD Intensive Repair for Existing Stretch Marks, 6 oz.',\n", - " (252, 47, 227, 169, 0)),\n", - " ('B000260KIO',\n", - " 'Ouidad Botanical Boost Moisture Infusing and Refreshing Spray, 8.5 Ounce',\n", - " (132, 10, 43, 169, 0)),\n", - " ('B0002716FO',\n", - " 'Ardell Duralash Flare Short Black (56 Lashes)',\n", - " (200, 100, 33, 169, 0)),\n", - " ('B000271KR8',\n", - " 'Clairol Natural Instincts 02 Sahara Light Blonde 1 Kit (Pack of 3) (packaging may vary)',\n", - " (70, 161, 231, 38, 0)),\n", - " ('B000273PEO',\n", - " 'Happy By Clinique For Women. Eau De Parfum Spray 1.7 Ounces',\n", - " (175, 100, 10, 75, 0)),\n", - " ('B000273RI8', 'M.D. Forte Facial Cream III', (56, 135, 216, 91, 0)),\n", - " ('B000277N7Y',\n", - " 'Happy By Clinique For Men. Cologne Spray 1.7 Oz.',\n", - " (92, 196, 59, 91, 0)),\n", - " ('B00027C9CS',\n", - " 'Suave For Men, Deep Clean Peppermint, Shampoo12.6 fl Ounce 373 ml)',\n", - " (117, 115, 153, 27, 0)),\n", - " ('B00027CDY2',\n", - " 'Neutrogena Triple Moisture Silk Touch Leave-In Cream, 6 Fluid Ounce',\n", - " (173, 202, 163, 103, 0)),\n", - " ('B00027CDYM',\n", - " 'Neutrogena Clean Replenishing Deep Recovery Hair Mask, 6 oz',\n", - " (144, 202, 37, 114, 0)),\n", - " ('B00027CGWQ',\n", - " 'Udderly Smooth Udder Cream, Skin Moisturizer, 12 Ounce Jar',\n", - " (128, 141, 139, 219, 1)),\n", - " ('B00027D0DU',\n", - " 'Neutrogena Cosmetics Makeup Remover, 3.8 oz',\n", - " (13, 8, 122, 206, 0)),\n", - " ('B00027D6SE',\n", - " 'Bye Bye Blemish Drying Lotion - 1 fl oz',\n", - " (56, 96, 10, 75, 0)),\n", - " ('B00027D8IC', 'Duo Lash Adhesive, Clear, 0.25 Ounce', (23, 141, 41, 152, 0)),\n", - " ('B00027D98Q',\n", - " 'Ardell Brow & Lash Growth Accelerator Treatment Gel 7ml/0.25oz',\n", - " (71, 21, 70, 184, 0)),\n", - " ('B00027DDEQ',\n", - " 'Clean & Clear Morning Glow Moisturizer, SPF 15, 4 Ounce',\n", - " (78, 135, 216, 53, 0)),\n", - " ('B00027DDOQ',\n", - " 'Clean & Clear Clear Advantage Acne Spot Treatment, 0.75 Ounce',\n", - " (78, 135, 122, 60, 0)),\n", - " ('B00027DHYM',\n", - " 'Natures Cure Body Acne Treatment Spray 3.5 Oz',\n", - " (144, 103, 124, 241, 0)),\n", - " ('B00027DMI8',\n", - " 'RoC Retinol Correxion Deep Wrinkle Night Cream, 1-Ounce',\n", - " (12, 170, 59, 91, 0)),\n", - " ('B00027DMJW',\n", - " 'Roc Retinol Correxion Deep Wrinkle Daily Moisturizer, SPF 30, 1-ounce Tube',\n", - " (93, 135, 75, 152, 0)),\n", - " ('B00027DMLK',\n", - " 'Frownies Corners Of Eyes And Mouth, 144 Patches',\n", - " (228, 247, 227, 34, 0)),\n", - " ('B00027DMSI',\n", - " 'Frownies Forehead & Between Eyes, 144 Patches',\n", - " (29, 145, 162, 169, 0)),\n", - " ('B00027EG9C',\n", - " 'Neutrogena Fresh Foaming Cleanser, 6.7 Ounce',\n", - " (144, 55, 3, 241, 0)),\n", - " ('B00027YZKM', 'Mirror* Hand* Large* Black', (55, 161, 153, 34, 0)),\n", - " ('B00028F0NM',\n", - " 'Alba Botanica Maximum Very Emollient Body Lotion, 12 Ounce Bottle',\n", - " (45, 96, 65, 60, 0)),\n", - " ('B00028LN1K',\n", - " \"GRANDPA'S BRANDS, Pine Tar Soap Bath Size - 4.25 oz\",\n", - " (32, 161, 24, 220, 0)),\n", - " ('B00028LURW', 'Henna Red 4 Ounces', (45, 21, 216, 77, 0)),\n", - " ('B00028LV4Y',\n", - " 'Natural Missst Herbal Hairspray Mist-Super Hold Aubrey Organics 8 oz Spray',\n", - " (71, 99, 162, 171, 0)),\n", - " ('B00028M3N2',\n", - " 'Now Foods Essential Oil, Lemon, 4 Fluid Ounce',\n", - " (63, 59, 67, 202, 0)),\n", - " ('B00028MLG6',\n", - " 'NOW Foods Apricot Kernel Oil (Liquid), 16 oz',\n", - " (252, 202, 3, 100, 0)),\n", - " ('B00028MLHA',\n", - " 'Cocoa Butter with jojoba oil - 100% Pure 6.5 fl.oz',\n", - " (71, 80, 22, 170, 0)),\n", - " ('B00028O7ZO',\n", - " \"Castile Liquid Soap-Lavender Dr. Bronner's 1 Gallon Liquid\",\n", - " (105, 63, 233, 219, 0)),\n", - " ('B00028OC4K',\n", - " 'Throughly Clean Face Wash - Original - 8.5 oz. (250 ml) - Liquid',\n", - " (71, 134, 246, 37, 0)),\n", - " ('B00028OPZ6',\n", - " 'GPB (Glycogen Protein Balance) Conditioner Jumbo Size - 16 oz - Liquid',\n", - " (71, 134, 162, 91, 0)),\n", - " ('B00028OQZA',\n", - " 'Sparkling Glacier Therapy Complexion Mist Aubrey Organics 3.4 oz (100ml) Liquid',\n", - " (71, 249, 122, 131, 0)),\n", - " ('B00028OSI0', 'Aloe Life Skin Gel and Herbs, 8 oz', (100, 122, 71, 160, 0)),\n", - " ('B00028OTAM',\n", - " 'Gabriel Cosmetics Inc. - Moisturizing Liquid Foundation Soft Beige 18 SPF - 1 oz.',\n", - " (192, 121, 116, 103, 0)),\n", - " ('B00028OTNY',\n", - " 'Mandarin Magic Hair Gel Aubrey Organics 8 oz Liquid',\n", - " (63, 134, 246, 171, 0)),\n", - " ('B00028OU5Q', 'Blue Green Algae Hair Mask 4 oz', (247, 134, 43, 236, 0)),\n", - " ('B00028PDWK',\n", - " 'Apricot Gentle Facial Scrub, 4 Ounce',\n", - " (245, 103, 231, 12, 0)),\n", - " ('B00028PFF0', 'WITCH HAZEL PADS EA 1/60 PADS', (216, 161, 246, 104, 0)),\n", - " ('B00028PXAC', 'Viobin Wheat Germ Oil 16 oz', (132, 23, 163, 195, 0)),\n", - " ('B0002A65LQ',\n", - " 'Philosophy Help Me Retinol Night Treatment, 1.05 Ounce',\n", - " (233, 159, 201, 206, 0)),\n", - " ('B0002B0R14',\n", - " 'H2Ocean 1.5 FL OZ Purified Ocean Salt Water Piercing Aftercare',\n", - " (43, 46, 71, 99, 0)),\n", - " ('B0002BB3YO',\n", - " 'NaturalCare Homeopathic Ultra Vein-Gard Leg Therapy Cream, 2.25-Ounce Package',\n", - " (63, 180, 219, 114, 0)),\n", - " ('B0002BPIZO',\n", - " 'Philosophy Pure Grace Shampoo, Bath & Shower gel, 16 Ounces',\n", - " (19, 134, 139, 91, 0)),\n", - " ('B0002CTSRM', 'Amber Butter', (119, 196, 153, 206, 0)),\n", - " ('B0002DLEJG',\n", - " 'Nailtek Foundation No.2 Ridge-Filling Nail Strengthener Base Coat, 0.5 Fluid Ounce',\n", - " (65, 122, 163, 236, 0)),\n", - " ('B0002DNZAC', 'MAC Eye Shadow Frost Satin Taupe', (225, 189, 227, 195, 0)),\n", - " ('B0002DO1RI',\n", - " 'MAC Studio Fix Powder Plus Foundation NC35 for Women, 0.52 Ounce',\n", - " (91, 149, 75, 91, 0)),\n", - " ('B0002DO1RS',\n", - " 'MAC Studio Fix Powder Plus Foundation NC45',\n", - " (91, 149, 163, 135, 0)),\n", - " ('B0002DPG1I', 'Fat Girl Slim by Bliss', (63, 247, 231, 202, 0)),\n", - " ('B0002DTV0K',\n", - " 'Emu Oil Soap Bar (110g) Brand: SoapWorks',\n", - " (32, 96, 67, 114, 0)),\n", - " ('B0002DUSR0',\n", - " 'PediFix Visco GEL Toe Spacers, Medium',\n", - " (28, 228, 122, 160, 0)),\n", - " ('B0002DUSUW',\n", - " 'PediFix Double-Toe Straightener #P57',\n", - " (80, 131, 234, 114, 0)),\n", - " ('B0002E4WOO',\n", - " \"Miracle of Aloe Miracle Hand Repair Cream 8 Oz Relieve Dry, Cracked, Flacking Hands Immediately! Therapeutic Formula Contains 60% Ultra Aloe - The Purest Most Potent Form of Whole Leaf Aloe Vera Gel. Fast Acting Relief, Say Good Bye to Dry, Cracked Hands Now! Keep Your Hands Healthy & Warm this Winter! Reduces Flaking and Redness, Use on Hands, Elbows and Knees, Exclusive Fast Acting Formula Penetrates Deep Into Damaged Skin Layers to Moisturize Where It's Needed Most. Leaves Hands Feeling Silky Smooth and Comfortable. Olay, Ponds, Vaseline, Nivea, Eucerin, Aveeno.\",\n", - " (247, 21, 246, 100, 0)),\n", - " ('B0002EBI82', 'Toppik Hair Fattener, 4-Ounce', (62, 145, 138, 188, 0)),\n", - " ('B0002EZXUG',\n", - " 'Vaseline Intensive Care Moisturizing Bath Beads, Gentle Breeze, 24 Ounces',\n", - " (44, 122, 139, 236, 0)),\n", - " ('B0002F1H6E',\n", - " 'Jergens All-Purpose Face Cream 425g/15oz',\n", - " (117, 196, 74, 75, 0)),\n", - " ('B0002FBOLW',\n", - " 'Atopalm Intensive Moisturizing Cream, 3.4 fl. Ounce',\n", - " (239, 152, 138, 53, 0)),\n", - " ('B0002FCCH2',\n", - " 'Suave Naturals Shampoo, Tropical Coconut - 22.5oz.',\n", - " (41, 120, 10, 53, 0)),\n", - " ('B0002FCD5I',\n", - " 'Suave Naturals Conditioner, Tropical Coconut - 22.5oz.',\n", - " (75, 4, 208, 219, 0)),\n", - " ('B0002FCDHQ',\n", - " 'Suave For Kids Double Dutch Apple Detangler Spray Conditioner 10.5Ounces',\n", - " (115, 255, 22, 152, 0)),\n", - " ('B0002G214U', 'Conair Soft Bonnet Hair Dryer', (98, 129, 219, 114, 0)),\n", - " ('B0002G21GI',\n", - " 'Ion Shine® by Conair Instant Heat Compact Styling Setter',\n", - " (220, 66, 70, 60, 0)),\n", - " ('B0002JG2NI',\n", - " 'Home Health Castor Oil Cold Pressed & Cold Processed 8 fl. oz.',\n", - " (128, 159, 3, 37, 0)),\n", - " ('B0002JGIZA',\n", - " 'Avalon Organics Night Cream Lavender Luminosity -- 2 oz',\n", - " (93, 4, 227, 217, 0)),\n", - " ('B0002JGU30',\n", - " 'Avalon Organics Hand & Body Lotion, Peppermint, 12 Ounce',\n", - " (104, 234, 67, 170, 0)),\n", - " ('B0002JHI1I',\n", - " 'Avalon Organics CoQ10 Facial Cleansing Milk -- 8.5 fl oz',\n", - " (218, 145, 43, 169, 0)),\n", - " ('B0002JIHT0',\n", - " 'Home Health Antidandruff Shampoo, Everclean, Unscented, 8-Ounce',\n", - " (119, 196, 234, 202, 0)),\n", - " ('B0002JISX0',\n", - " 'Earth Science A-D-E Creamy Fruit Oil Cleanser 8 oz.',\n", - " (117, 98, 231, 219, 0)),\n", - " ('B0002JIUDS',\n", - " 'Nutricology Ox Bile, 500 mg, 100 Vegetarian Capsules',\n", - " (233, 128, 70, 219, 0)),\n", - " ('B0002JKPA4', 'Caruso C97958 ION Steam Hairsetter', (215, 66, 139, 116, 0)),\n", - " ('B0002JKQ8K',\n", - " 'Caruso Professional Molecular Steam Rollers with Shields, Small (6-Pack)',\n", - " (80, 55, 226, 114, 0)),\n", - " ('B0002JMZ7A',\n", - " 'Yves Saint Laurent Volume Effet Faux Cils Luxurious Mascara for a False Lash Effect 1 High Density Black',\n", - " (132, 164, 43, 13, 0)),\n", - " ('B0002JNRCC',\n", - " 'Redken All Soft Conditioner Unisex Conditioner, 8.5 Ounce',\n", - " (99, 66, 24, 76, 0)),\n", - " ('B0002KS5VE',\n", - " 'Body Fantasies Body Spray for Women, Cotton Candy Fantasy Fragrance, 8 Ounce',\n", - " (162, 255, 59, 219, 0)),\n", - " ('B0002L2JLU',\n", - " 'Topix Pharm SPF 40 Citrix Antioxidant Sunscreen, 3.5 Fluid Ounce',\n", - " (44, 236, 234, 34, 0)),\n", - " ('B0002M9OYY',\n", - " 'Fake Bake Passion Fruit Body Polish 6 oz.',\n", - " (47, 3, 162, 103, 0)),\n", - " ('B0002NIAC0',\n", - " 'Obagi C-Exfoliating Day Lotion 2 fl oz.',\n", - " (93, 192, 254, 13, 0)),\n", - " ('B0002OCNMC',\n", - " 'Goat Milk Soap - Original (3 Pack) Canus Vermont 3 Bar Soap',\n", - " (18, 135, 65, 15, 0)),\n", - " ('B0002OMOIA',\n", - " 'Brahmi Oil - Ayurvedic Hair Growth massage oil',\n", - " (252, 24, 216, 152, 0)),\n", - " ('B0002PCH2M',\n", - " 'Focus 21 Sea Plasma All Purpose Skin and Hair Moisturizing Spray 12 oz',\n", - " (44, 255, 219, 152, 0)),\n", - " ('B0002Q8W9I',\n", - " 'NEW cnd Nail Design Stickey Base Coat 0.33Oz',\n", - " (116, 120, 33, 13, 0)),\n", - " ('B0002QB1SC',\n", - " 'Creative Nail Design Creative Nail Solar Oil, 0.5 Ounce',\n", - " (94, 46, 67, 77, 0)),\n", - " ('B0002RI2PG',\n", - " 'Dermablend Loose Setting Powder Original, 1 Ounce',\n", - " (194, 47, 65, 37, 0)),\n", - " ('B0002RPTX4',\n", - " 'Shampoo Scalp Massage Brush- 1 Brush',\n", - " (48, 255, 153, 160, 0)),\n", - " ('B0002RYHTQ',\n", - " 'Spa Sister Womens Cotton Moisture Enhancing Overnight Gloves',\n", - " (99, 29, 140, 99, 0)),\n", - " ('B0002SA9BU',\n", - " 'Best Hair Growth Vitamins NEW ADVANCED Hair Formula 37 Hair Vitamins for Faster Growing Healthy Hair 1 month Supply 60 Capsules',\n", - " (12, 228, 24, 91, 0)),\n", - " ('B0002SGNOM',\n", - " 'California Tan Sunsets Tanning Eyewear 1-PR Random Picked Colors',\n", - " (116, 25, 75, 13, 0)),\n", - " ('B0002SGSNI',\n", - " 'China Glaze Strong Adhesion Base Coat',\n", - " (152, 159, 24, 220, 0)),\n", - " ('B0002SI7DW',\n", - " 'NAIL TEK Regular Size Crystal File with Free Blue Case',\n", - " (113, 96, 140, 195, 0)),\n", - " ('B0002SISY0',\n", - " 'Spornette My Favorite Mini Nylon Tipped Paddle Brush',\n", - " (155, 145, 254, 170, 0)),\n", - " ('B0002SQ6YO',\n", - " 'Sponge Company Cosmetic Silk Sponge 1',\n", - " (155, 236, 122, 120, 0)),\n", - " ('B0002TSCZY',\n", - " 'Solia Tourmaline Ceramic Ion Flat Iron (1")',\n", - " (181, 3, 65, 103, 0)),\n", - " ('B0002TSD08',\n", - " 'Solia Professional Ceramic Ion Flat Iron (1-3/4")Solia',\n", - " (9, 77, 234, 169, 0)),\n", - " ('B0002UEDWE', 'Evian Facial Water Spray 1.7 Oz', (252, 196, 227, 34, 0)),\n", - " ('B0002VHBTU', 'Thermal Spa Hair Wrap - White', (4, 3, 139, 13, 0)),\n", - " ('B0002VJIH8',\n", - " 'Best Hair Vitamin to Grow Hair Faster with Fast Grow Ethnic Hair Growth Enhancer 90 capsules 30 Day Supply',\n", - " (45, 8, 67, 169, 0)),\n", - " ('B0002VQ0WO', 'Hair Dryer Stand', (200, 149, 226, 104, 0)),\n", - " ('B0002WUHTU',\n", - " 'Nailtiques Nail Protein Formula 2 Plus',\n", - " (194, 180, 163, 103, 0)),\n", - " ('B0002X4F0Q',\n", - " 'PCA Skin Blemish Control Bar (Phaze 32), 3.3 Ounce',\n", - " (94, 255, 75, 202, 0)),\n", - " ('B0002X9038',\n", - " 'PCA Skin Pigment Gel (Phaze 13), 1 Fluid Ounce',\n", - " (63, 202, 70, 103, 0)),\n", - " ('B0002XBTVO', 'PCA Skin Clearskin, 1.7 Ounce', (177, 134, 155, 103, 0)),\n", - " ('B0002XG9X2',\n", - " 'Panasonic EH2511A Pore Cleanser with Micro-fine Mist',\n", - " (174, 196, 71, 60, 0)),\n", - " ('B0002XY3QC', 'duri Miracote .61oz', (79, 135, 65, 135, 0)),\n", - " ('B0002YE8F2',\n", - " 'Revlon RV2513 Color Swirl Detangling Comb, Colors may vary',\n", - " (132, 183, 163, 15, 0)),\n", - " ('B0002YE8IO',\n", - " 'Revlon RV2641 Soft Touch Porcupine Cushion Brush, Colors May Vary',\n", - " (132, 105, 140, 13, 0)),\n", - " ('B0002YE8V6',\n", - " 'Vidal Sassoon VS7963 Ionic Thermal All Purpose Brush',\n", - " (47, 60, 163, 231, 0)),\n", - " ('B0002YE8WA',\n", - " 'Vidal Sassoon VS14434 No Headache Headbands (2 Headbands)',\n", - " (113, 74, 112, 246, 0)),\n", - " ('B0002YFQ6W',\n", - " 'Cloud Star Corporation Buddy Wash Lavender & Mint',\n", - " (79, 196, 147, 152, 0)),\n", - " ('B0002YLY9K', 'Obagi Nu-Derm Toner 6.7 oz.', (132, 3, 139, 77, 0)),\n", - " ('B0002Z0R9C',\n", - " 'Spornette No.215 Super Looper Hair Brush',\n", - " (200, 228, 208, 116, 0)),\n", - " ('B0002Z0U5I',\n", - " 'Helen of Troy Professional Tangle-Free Hot Air Brush Iron',\n", - " (253, 162, 246, 99, 0)),\n", - " ('B0002Z0UA8',\n", - " 'FusionBeauty LipFusion Micro-Injected Collagen Lip Plump Color Shine, Summer',\n", - " (250, 125, 122, 103, 0)),\n", - " ('B0002Z1JJ4', 'Acquarella Remover', (232, 145, 226, 220, 0)),\n", - " ('B0002Z1JK8', 'Acquarella Conditioner', (232, 80, 254, 194, 0)),\n", - " ('B0002Z81O0',\n", - " 'Peter Thomas Roth Max Complexion Correction Pads? (60 Pads)',\n", - " (56, 89, 3, 12, 0)),\n", - " ('B0002Z8GEK', 'Gena Hoof Lacquer, 5 Ounce', (39, 96, 24, 170, 0)),\n", - " ('B0002Z8HAI',\n", - " 'Essie Nail Lacquer, Sugar Daddy, 0.5 Fluid Ounce',\n", - " (152, 3, 139, 37, 0)),\n", - " ('B0002Z8IV6',\n", - " 'Ardell Hair Color Bottle, Unred, 0.25 Ounce',\n", - " (177, 21, 33, 103, 0)),\n", - " ('B0002Z8LLI',\n", - " 'Sensories Smoother Passionflower and Aloe Leave In Texturizing Condition By Rusk, 33.8 Ounce',\n", - " (85, 247, 71, 77, 0)),\n", - " ('B0002Z8MLC', 'ISO Bouncy Creme 8.5 oz.', (127, 141, 226, 206, 0)),\n", - " ('B0002Z8NJS',\n", - " 'Essie Nail Lacquer, Blanc, 0.5 Fluid Ounce',\n", - " (152, 3, 162, 76, 0)),\n", - " ('B0002Z8OUG', 'Ruby Stone Nail File', (89, 211, 140, 206, 0)),\n", - " ('B0002Z8P1E', 'Quantum Classic Extra Body Acid Perm', (117, 173, 24, 91, 0)),\n", - " ('B0002Z8P8M', \"L'Oreal ColorZap Haircolor Remover\", (250, 21, 40, 53, 0)),\n", - " ('B0002Z8QG8',\n", - " 'Denman Styling Brush, Heavy Weight, 9-Row',\n", - " (201, 122, 70, 160, 0)),\n", - " ('B0002Z8QHW', 'Creative Nail Design SolarOil .5oz', (141, 8, 163, 56, 0)),\n", - " ('B0002Z8RGC', 'Blax 4 mm Ponytail Holders - Black', (55, 79, 138, 169, 0)),\n", - " ('B0002Z8SE8',\n", - " 'Spilo: MISC Big Bondini Plus Brush-On Glue, 0.5 oz',\n", - " (79, 161, 219, 133, 0)),\n", - " ('B0002Z8SZW',\n", - " 'Bain De Terre Serum Anti-Frizz Recovery Complex 1.7 oz.',\n", - " (154, 202, 33, 195, 0)),\n", - " ('B0002Z90RM',\n", - " 'Rusk Thick Body and Texture Amplifier, 6 Ounce',\n", - " (117, 100, 70, 114, 0)),\n", - " ('B0003009NK',\n", - " 'Hai Classic Convertible Ceramic Flat Iron, 1-1/4 Inch',\n", - " (241, 196, 17, 34, 0)),\n", - " ('B000629ZHG', 'Tinted Moisturizer - Almond', (132, 103, 153, 169, 0)),\n", - " ('B00062A0JI',\n", - " 'Laura Mercier Secret Concealer # 1 0.08oz',\n", - " (132, 62, 138, 169, 0)),\n", - " ('B00062ADJA',\n", - " 'Laura Mercier Loose Setting Powder - Ivory - 29g/1oz',\n", - " (132, 159, 162, 34, 0)),\n", - " ('B0006433MM',\n", - " \"18'' Detachable Long Handle Natural Boar Bristle Brush\",\n", - " (28, 3, 201, 77, 0)),\n", - " ('B00064A5L4',\n", - " 'Be Delicious by Donna Karan Eau De Parfum Spray 1 oz for Women',\n", - " (59, 202, 122, 15, 0)),\n", - " ('B00064H44K',\n", - " 'Vanderbilt by Gloria Vanderbilt for Women - 3.3 Ounce EDT Spray',\n", - " (8, 120, 216, 27, 0)),\n", - " ('B00065AFFE',\n", - " 'Conair 1875 Watt Ergonomic Handle Hair Dryer',\n", - " (226, 103, 254, 103, 0)),\n", - " ('B00066D2JE',\n", - " 'Giovanni Conditioner, Smooth as Silk for Damaged Hair, 8.5 fl oz Bottle',\n", - " (13, 18, 27, 170, 0)),\n", - " ('B00066D4M4',\n", - " 'Giovanni Direct Leave-In Conditioner, Weightless moisture conditioner 8.5 fl oz Bottle',\n", - " (173, 2, 40, 100, 0)),\n", - " ('B00066LD7C',\n", - " 'Xenna Curlaway Gradual Curl Relaxer Green Apple Fragrance -- 6 oz',\n", - " (92, 173, 65, 53, 0)),\n", - " ('B00066YC34',\n", - " 'Conair Supreme Triple Curling Iron Pack - 1/2 inch, 3/4 inch and 1 inch',\n", - " (220, 122, 43, 206, 0)),\n", - " ('B000674XN2',\n", - " 'Laura Mercier Secret Brightener - Secret Brightener #1, .05 oz.',\n", - " (132, 3, 24, 77, 0)),\n", - " ('B000674XNM',\n", - " 'Laura Mercier Secret Brightening Powder - Secret Brightening Powder #1, 0.14 oz.',\n", - " (132, 46, 67, 169, 0)),\n", - " ('B000674Z8A',\n", - " 'Laura Mercier Accessories - Sponge, 4-pack',\n", - " (155, 60, 82, 202, 0)),\n", - " ('B00067EJ4U', 'Laura Mercier Foundation Primer', (164, 248, 131, 236, 0)),\n", - " ('B00067YSLO',\n", - " 'Remington Wet 2 Straight 2" Wide Plate Wet/Dry Ceramic Hair Straightening Iron with Tourmaline',\n", - " (241, 40, 59, 169, 0)),\n", - " ('B00068A0AQ',\n", - " 'Straight Sexy Hair Smooth & Seal Spray by Sexy Hair for Unisex - 8.1 Ounce Hairspray',\n", - " (195, 3, 227, 114, 0)),\n", - " ('B00068AZ88',\n", - " 'CombaColor Quick Hair Color Applicator (Comb-a-Color)',\n", - " (67, 4, 40, 12, 0)),\n", - " ('B00068CG3U', 'Philosophy The Microdelivery Peel', (235, 196, 254, 202, 0)),\n", - " ('B00069FJUG',\n", - " 'Philosophy Supernatural Airbrushed Canvas Powder, SPF 15, Bronze',\n", - " (13, 122, 40, 38, 0)),\n", - " ('B0006B12KK', 'NARS Velvet Matte Lip Pencil, Bahama', (5, 87, 153, 167, 0)),\n", - " ('B0006B66D8',\n", - " 'Super Solano Professional Hair Dryer - Black',\n", - " (80, 47, 24, 159, 0)),\n", - " ('B0006BDMIU', 'Caudalie Beauty Elixir 1 fl oz.', (44, 3, 27, 103, 0)),\n", - " ('B0006BDO5G',\n", - " 'Peter Thomas Roth Sulfur Cooling Masque 5 Ounce.',\n", - " (102, 47, 33, 169, 0)),\n", - " ('B0006BDO5Q',\n", - " 'Peter Thomas Roth Glycolic Acid 10% Hydrating Gel, 2 Ounce',\n", - " (235, 135, 153, 77, 0)),\n", - " ('B0006BDQDG',\n", - " 'Peter Thomas Roth AHA/BHA Acne Clearing Gel 2 fl oz',\n", - " (56, 3, 71, 160, 0)),\n", - " ('B0006D3IAU', 'Cococare Coconut Oil, 9 Ounce', (161, 161, 71, 103, 0)),\n", - " ('B0006DS3KU',\n", - " 'Ojon Restorative Hair Treatment 4.6 oz (140 g)',\n", - " (242, 47, 122, 103, 0)),\n", - " ('B0006FMK98',\n", - " 'Pharmaceutical Specialties Free and Clear Shampoo 12 oz.',\n", - " (93, 103, 216, 103, 0)),\n", - " ('B0006FMKB6', 'Robathol Bath Oil - 16 oz', (102, 62, 192, 53, 0)),\n", - " ('B0006G2EX4', 'Obagi Foaming Gel Cleanser-6.7 oz', (144, 202, 24, 206, 0)),\n", - " ('B0006GBEYE',\n", - " 'Coretex SunX SPF30 Sunscreen with Towelettes - 25 Individual Foil Pouch with Towelettes/Box, PABA Free, Oil-free, Water and Sweat Resistant, UVA/UVB Protection',\n", - " (226, 103, 33, 202, 0)),\n", - " ('B0006GZAKI',\n", - " 'Honeysuckle Rose Moisturizing Shampoo Aubrey Organics 11 oz Liquid',\n", - " (71, 47, 162, 171, 0)),\n", - " ('B0006GZBMA',\n", - " 'White Camellia Ultra-Smoothing Conditioner Aubrey Organics 11 oz Liquid',\n", - " (71, 47, 162, 169, 0)),\n", - " ('B0006GZC4W',\n", - " 'Aubrey Organics - Island Natural Conditioner, 11 fl oz liquid',\n", - " (71, 180, 162, 15, 0)),\n", - " ('B0006GZCVK',\n", - " 'Honeysuckle Rose Conditioner Aubrey Organics 11 oz Liquid',\n", - " (201, 134, 59, 77, 0)),\n", - " ('B0006GZDE6',\n", - " 'Aubrey Organics green tea Clarifying Shampoo',\n", - " (71, 134, 234, 159, 0)),\n", - " ('B0006GZDEQ',\n", - " 'White Camellia Ultra-Smoothing Shampoo 11oz',\n", - " (71, 134, 246, 104, 0)),\n", - " ('B0006GZE0O',\n", - " 'Calaguala Texturizing Shampoo Aubrey Organics 11 oz Liquid',\n", - " (71, 134, 246, 152, 0)),\n", - " ('B0006HCE60',\n", - " 'Cococare 100% Vitamin E Oil, 1 Ounce',\n", - " (133, 180, 201, 53, 0)),\n", - " ('B0006HRCL2', '4 Dozen (48) Long Pink Perm Rods', (241, 149, 67, 91, 0)),\n", - " ('B0006I9YK8', 'Baggallini Complete Cosmetic Bagg', (34, 62, 59, 77, 0)),\n", - " ('B0006IHDQ0',\n", - " 'Liz Claiborne Curve Crush EDC Spray 4.2 oz',\n", - " (92, 173, 201, 76, 0)),\n", - " ('B0006II74C',\n", - " \"Nature's Secret 5-Day Fast and Cleanse Kit\",\n", - " (252, 247, 139, 34, 0)),\n", - " ('B0006IJA5C',\n", - " 'Jhirmack Silver Brightening Shampoo 20 Oz.',\n", - " (63, 2, 140, 13, 0)),\n", - " ('B0006IXSG4',\n", - " 'John Varvatos by John Varvatos for Men - 7 ml EDT Splash',\n", - " (121, 223, 122, 219, 0)),\n", - " ('B0006LNC2G',\n", - " 'MAC Eye Kohl Smolder Eye Liner for Women, 0.048 Ounce',\n", - " (81, 115, 24, 195, 0)),\n", - " ('B0006LNJ56', 'MAC Satin Lipstick - Rebel', (81, 20, 24, 170, 0)),\n", - " ('B0006LNKXW',\n", - " 'MAC Tinted Lipglass -- Viva Glam V (Boxed) 4.8g/.17oz',\n", - " (189, 60, 163, 202, 0)),\n", - " ('B0006LNKYG', 'MAC Matte Lipstick - Russian Red', (92, 129, 82, 170, 0)),\n", - " ('B0006LNMIU', 'MAC Powder Blush Fever', (152, 159, 163, 13, 0)),\n", - " ('B0006M5566', 'eb5 Facial Cream (4 Ounces)', (71, 129, 139, 114, 0)),\n", - " ('B0006M56BK',\n", - " 'Wilkinson Sword Double Edge single Razor Cartridge, 5 blades',\n", - " (195, 211, 24, 77, 0)),\n", - " ('B0006MSVCG',\n", - " 'Burberry Brit ~ Women 3.3 oz / 100 ml Eau de Parfum Spray',\n", - " (63, 236, 27, 219, 0)),\n", - " ('B0006N29AU',\n", - " \"Dr. King's Natural Medicine Back, Muscle and Joint Relief, 2 Fluid Ounce\",\n", - " (117, 59, 234, 53, 0)),\n", - " ('B0006NXBJ8', 'Mason Pearson Detangler', (89, 32, 71, 77, 0)),\n", - " ('B0006NY35E',\n", - " 'Pre de Provence Soap, Cucumber, 7 Ounce',\n", - " (120, 149, 43, 76, 0)),\n", - " ('B0006NYCT6',\n", - " 'Algemarin Bubble Bath 750ml bubble bath by Algemarin',\n", - " (47, 211, 254, 27, 0)),\n", - " ('B0006NYDOU',\n", - " 'Herbacin Kamille Hand Cream with Glycerine - 2.5 oz',\n", - " (71, 173, 246, 131, 0)),\n", - " ('B0006O2IQ4',\n", - " 'Fragrances Of Ireland Inis The Energy Of The Sea Cologne Spray, 1.7 Fluid Ounce',\n", - " (63, 115, 227, 13, 0)),\n", - " ('B0006O4MCM',\n", - " 'Suki - Concentrated Balancing Toner 4.0 fl oz',\n", - " (102, 131, 216, 15, 0)),\n", - " ('B0006O9ZAG',\n", - " 'Palladio Herbal Dual Wet and Dry Foundation, Ivory Myrrh, 0.28 Ounce',\n", - " (44, 103, 27, 236, 0)),\n", - " ('B0006OU06E', 'Semi Oval Wild Boar Hair Brush', (79, 161, 250, 99, 0)),\n", - " ('B0006OU078', 'Bass Brushes Facial Cleansing Brush', (195, 21, 33, 160, 0)),\n", - " ('B0006PJRP8', 'Zoya Nail Polish .5 oz. Lola', (194, 236, 65, 103, 0)),\n", - " ('B0006PJSES',\n", - " 'CND: Treatments/Prep Stickey Base Coat, 2.3 oz',\n", - " (79, 122, 163, 123, 0)),\n", - " ('B0006PJSSO',\n", - " 'Essie Nail Lacquer, First Base Base Coat, 0.46 Fluid Ounce',\n", - " (201, 21, 43, 195, 0)),\n", - " ('B0006PJTB0',\n", - " 'Seche Base Ridge Filling Base Coat .5 oz. [Health and Beauty]',\n", - " (28, 96, 201, 219, 0)),\n", - " ('B0006PKGJY',\n", - " 'Alba Botanica Natural Even Advanced Daily Cream -- 2 oz',\n", - " (94, 115, 70, 77, 0)),\n", - " ('B0006PLNSC', 'Zoya Nail Polish .50 fl oz Charisma', (230, 145, 201, 76, 0)),\n", - " ('B0006PLPE4', 'ZOYA Armor Topcoat/UV Block 0.5oz', (18, 21, 163, 76, 0)),\n", - " ('B0006PS3XU', 'Marianna Bobby Pins 1 lb. - Black', (200, 12, 124, 160, 0)),\n", - " ('B0006PS3Y4', 'Marianna Bobby Pins 1 lb. - Brown', (200, 12, 153, 195, 0)),\n", - " ('B0006PT6TU',\n", - " 'City Lips Advanced in NUDE York Lip Plumper',\n", - " (99, 79, 24, 219, 0)),\n", - " ('B0006Q00IK',\n", - " 'For Pro Cozie Liners Hand or Foot 100-ct.',\n", - " (155, 115, 22, 76, 0)),\n", - " ('B0006Q00ZI', 'Gena Healthy Hoof Cream, 4 Ounce', (201, 3, 65, 206, 0)),\n", - " ('B0006Q0102', 'Gena Nail Brite with Brush, 4 Ounce', (180, 180, 71, 170, 0)),\n", - " ('B0006Q01EI', 'Hot Sock Diffuser', (80, 80, 192, 103, 0)),\n", - " ('B0006Q01WK', 'King Dy-zoff Pads 80-ct.', (67, 89, 27, 77, 0)),\n", - " ('B0006Q0HEC',\n", - " 'Wen by Chaz Dean Tea Tree Cleansing Conditioner 16 oz.',\n", - " (24, 245, 11, 72, 0)),\n", - " ('B0006Q23H6',\n", - " 'John Masters Organics Evening Primrose Shampoo for Dry Hair 8 fl oz / 236 ml',\n", - " (44, 66, 139, 100, 0)),\n", - " ('B0006Q3NTS',\n", - " 'WEN by Chaz Dean Fig Cleansing Conditioner 16 oz',\n", - " (24, 245, 65, 100, 0)),\n", - " ('B0006Q3O3S',\n", - " 'WEN® Sweet Almond Mint Styling Creme 6oz',\n", - " (120, 96, 124, 100, 0)),\n", - " ('B0006Q3P50',\n", - " 'WEN® Sweet Almond Mint Texture Balm 3oz',\n", - " (79, 161, 192, 21, 0)),\n", - " ('B0006SFXXK',\n", - " 'John Masters Organics - Detangler Citrus & Neroli - 8 oz.',\n", - " (12, 2, 246, 114, 0)),\n", - " ('B0006SFXYY',\n", - " 'John Masters Organics John Masters Organics Deep Scalp Follicle Treatment & Volumizer for Thinning Hair 4.2 fl oz - 4.2 fl oz',\n", - " (128, 47, 139, 76, 0)),\n", - " ('B0006U81GY', 'Cricket Ultra Clean UC130', (92, 80, 24, 236, 0)),\n", - " ('B0006V7T9I',\n", - " 'Bee Bar Lotion by Honey House Naturals - Vanilla Scent - Long Lasting Lotion Bar Moisturizes and Leaves Skin Smelling Fresh - 2 ounces',\n", - " (232, 66, 226, 220, 0)),\n", - " ('B0006ZEVU4',\n", - " 'Paul Mitchell Tea Tree Special Shampoo Unisex, 16.9 Ounce',\n", - " (109, 202, 71, 77, 0)),\n", - " ('B0006ZHCK0', \"Murphy's Oil Soap, 32-Ounce\", (228, 129, 139, 34, 0)),\n", - " ('B0006ZHK7A',\n", - " 'Pureology Hydrate Shampoo, 8.5 Ounce',\n", - " (224, 202, 201, 15, 0)),\n", - " ('B00070E8IS',\n", - " 'Elchim Professional 2001 2000 Watt Classic Hair Dryer (Colors May Vary)',\n", - " (201, 66, 153, 77, 0)),\n", - " ('B00070QF20',\n", - " 'AcneFree Clear Skin System, 3-Step Kit (Purifying Cleanser, Renewing Toner, Repair Lotion)',\n", - " (21, 105, 24, 99, 0)),\n", - " ('B00074XC68',\n", - " 'Helen of Troy Mini 1/2 Inch Professional Curling Iron with Ergonomic Handle for Short Hair, Bangs & Wisps (Model: 1503n)',\n", - " (16, 96, 246, 169, 0)),\n", - " ('B0007506U2',\n", - " 'TIGI Catwalk Curl Collection Curlesque Curls Rock Amplifier, 5.07 Ounce, Packaging May Vary',\n", - " (111, 96, 246, 182, 0)),\n", - " ('B00076X0BS',\n", - " 'Alba Botanica Revitalizing Green Tea Hawaiian Eye Gel, 1 Ounce Bottles',\n", - " (45, 96, 201, 103, 0)),\n", - " ('B0007CIEBI',\n", - " 'Colorescience Pro Sunforgettable SPF 30 Brush- Fair 0.21 Oz',\n", - " (109, 135, 254, 77, 0)),\n", - " ('B0007CWVLM',\n", - " 'Tweezerman Spirit 2000 Styling Shears',\n", - " (189, 185, 140, 116, 0)),\n", - " ('B0007CXWQU',\n", - " 'Aveda Blue Malva Conditioner, 8.5-Ounce Tube',\n", - " (194, 96, 139, 170, 0)),\n", - " ('B0007CXWRE',\n", - " 'Aveda Brilliant Anti-Humectant Pomade, 2.6 Ounces',\n", - " (47, 47, 254, 162, 0)),\n", - " ('B0007CXWTW', 'Aveda Clove Conditioner 8.5 Ounces', (126, 29, 138, 38, 0)),\n", - " ('B0007CXWUG', 'Aveda Confixor Liquid Gel, 8.5 Ounces', (24, 96, 216, 15, 0)),\n", - " ('B0007CXWWY',\n", - " 'Aveda Madder Root Conditioner 8.5 Ounces',\n", - " (98, 46, 71, 42, 0)),\n", - " ('B0007CXWXI', 'Aveda Phomollient 6.7 Ounces', (98, 46, 246, 38, 0)),\n", - " ('B0007CXX82',\n", - " 'Biosilk Silk Therapy Serum, Packaging May Vary, 5.64 Ounces',\n", - " (170, 47, 122, 15, 0)),\n", - " ('B0007CXXDC',\n", - " 'Biolage by Matrix Color Care Conditioner 33.8 Ounces',\n", - " (132, 103, 227, 77, 0)),\n", - " ('B0007CXXDM',\n", - " 'Biolage by Matrix Color Care Shampoo 33.8 Ounces',\n", - " (132, 247, 138, 53, 0)),\n", - " ('B0007CXXE6',\n", - " 'Biolage by Matrix Conditioning Balm 16.9 Ounces',\n", - " (24, 248, 65, 104, 0)),\n", - " ('B0007CXXGO',\n", - " 'Biolage by Matrix Hydratherapie Hydrating Shampoo 33.8 Ounces',\n", - " (191, 115, 162, 103, 0)),\n", - " ('B0007CXXIC',\n", - " 'Biolage by Matrix Normalizing Shampoo 33.8 Ounces',\n", - " (191, 247, 67, 202, 0)),\n", - " ('B0007CXXJQ',\n", - " 'Biolage by Matrix Ultra-Hydrating Conditioning Balm 16.9 Ounces',\n", - " (47, 121, 71, 101, 0)),\n", - " ('B0007CXXVE',\n", - " 'Nexxus Humectress Ultimate Moisturizing Conditioner 33.8 Ounces',\n", - " (171, 47, 163, 169, 0)),\n", - " ('B0007CXXYG',\n", - " 'Paul Mitchell Awapuhi Shampoo, 33.8-Ounce Bottle',\n", - " (47, 3, 65, 231, 0)),\n", - " ('B0007CXY5E',\n", - " 'Paul Mitchell Shampoo 1 33.8 Ounces',\n", - " (99, 105, 24, 27, 0)),\n", - " ('B0007CXY5O',\n", - " 'Paul Mitchell Shampoo 3 16.9 Ounces',\n", - " (99, 145, 153, 38, 0)),\n", - " ('B0007CXYAE',\n", - " 'Paul Mitchell The Detangler 33.8 Ounces',\n", - " (99, 29, 70, 170, 0)),\n", - " ('B0007CXYP4',\n", - " 'Sebastian Collection Potion 9 5.1 Ounces',\n", - " (170, 66, 67, 91, 0)),\n", - " ('B0007D2F3K', 'Pedi,Quick Salon Pedicure Kit', (200, 180, 234, 116, 0)),\n", - " ('B0007DHMBK',\n", - " 'Henna Black Cream Surya Nature, Inc 2.31 oz Cream',\n", - " (128, 180, 43, 219, 0)),\n", - " ('B0007DHMCO',\n", - " 'Henna Burgundy Cream Surya Nature, Inc 2.31 oz Cream',\n", - " (128, 47, 226, 160, 0)),\n", - " ('B0007IFB2W',\n", - " 'Spornette 25 Wood Handle "Porcupine" Brush With Genuine Boar Bristle * Made In Germany',\n", - " (60, 161, 65, 27, 0)),\n", - " ('B0007IQMVG',\n", - " 'Digestive Advantage Intensive Bowel Support, 96 Counts Capsules',\n", - " (70, 202, 231, 163, 0)),\n", - " ('B0007LE3EG', 'Total Hair Makeover Kit 90001', (174, 122, 254, 236, 0)),\n", - " ('B0007NIRUU',\n", - " 'Nexxus Humectress Ultimate Moisturizing Conditioner, 13.5Ounce Bottles',\n", - " (198, 3, 192, 170, 0)),\n", - " ('B0007R7ABS',\n", - " 'Kenra Volume Spray 25 Super Hold Finishing Spray (Aerosol) (10 oz.)',\n", - " (201, 100, 163, 76, 0)),\n", - " ('B0007RBYA6',\n", - " 'Philosophy Microdelivery Peel Pads, 60 Count',\n", - " (151, 47, 22, 34, 0)),\n", - " ('B0007V6PFQ',\n", - " 'Brush - Large Oval Cushion Wood Bristles Wood Handle Bass Brushes 1 Brush',\n", - " (253, 159, 219, 37, 0)),\n", - " ('B0007V9API', 'Bella B Tummy Honey Cream - 4 oz', (133, 80, 27, 170, 0)),\n", - " ('B0007W1R58',\n", - " 'Olay Regenerist Night Recovery Cream 1.7 Oz',\n", - " (41, 196, 162, 34, 0)),\n", - " ('B0007WL21M',\n", - " 'PETER THOMAS ROTH - Anti-Aging Cleansing Gel 8.5oz',\n", - " (185, 4, 124, 38, 0)),\n", - " ('B0007WZ7YU',\n", - " 'Elchim 2001hp High Pressure 2000 Watt Hair Dryer, White',\n", - " (15, 115, 139, 114, 0)),\n", - " ('B0007X74CW',\n", - " 'Redken Hair Cleansing Cream Shampoo for All Hair Types, 10.1-Ounces',\n", - " (24, 120, 153, 114, 0)),\n", - " ('B0007X74E0',\n", - " 'Smooth Down Heat Glide Protective Smoother Unisex Smoother by Redken, 5 Ounce',\n", - " (128, 149, 227, 60, 0)),\n", - " ('B0007X74IQ',\n", - " 'Extreme Cat Protein Treatment Unisex Treatment by Redken, 5 Ounce',\n", - " (252, 122, 37, 34, 0)),\n", - " ('B0007XFB2W', 'Original Sprout Miracle Detangler', (252, 173, 138, 99, 0)),\n", - " ('B0007YJ5QY',\n", - " 'AMERICAN CREW Daily Moisturizing Shampoo, 8.4 Ounce',\n", - " (110, 3, 162, 27, 0)),\n", - " ('B00080DK86',\n", - " 'Glycolix Elite Treatment Pads 20 Percent 60 count',\n", - " (133, 21, 40, 103, 0)),\n", - " ('B00081J4P8',\n", - " 'NO-AD Sunblock Lotion, SPF 15, 16 Ounces',\n", - " (104, 96, 10, 38, 0)),\n", - " ('B00082379Q', 'Orly Polish Thinner', (70, 149, 55, 219, 0)),\n", - " ('B0008394GA', 'NARS Lip Liner Pencil, Jungle Red', (79, 196, 65, 21, 0)),\n", - " ('B000851N9E',\n", - " 'BurnOut - Ocean Tested Physical Sunscreen 30 SPF - 3.4 oz.',\n", - " (12, 47, 17, 53, 0)),\n", - " ('B00085DX0Q',\n", - " \"Grandpa's Soap Company Wonder Pine Tar Shampoo, 8 Ounce\",\n", - " (164, 46, 246, 103, 0)),\n", - " ('B0008ENT8I',\n", - " 'ProVersa JWM6CF Wall Caddy Hair Dryer with 2-Speed and 3-Heat Settings, 1600-Watts, White Finish',\n", - " (174, 21, 140, 77, 0)),\n", - " ('B0008F6ZDI',\n", - " 'Philosophy The Present Clear Makeup, 2 Ounce',\n", - " (136, 122, 240, 182, 0)),\n", - " ('B0008FUY0I',\n", - " 'Flowery Swedish Clover Foot File * #530',\n", - " (241, 134, 139, 15, 0)),\n", - " ('B0008GIZKS',\n", - " 'Malibu C Hard Water Wellness Shampoo, 1 Bottle, 9 oz',\n", - " (133, 59, 70, 100, 0)),\n", - " ('B0008IV7BU',\n", - " 'American Crew American Crew Fiber Fiber - 3 oz',\n", - " (80, 62, 24, 77, 0)),\n", - " ('B00092M2VO',\n", - " 'Andis Professional 1875 Watt Ceramic Ionic Hair Dryer - Black Chrome (82005)',\n", - " (243, 115, 219, 34, 0)),\n", - " ('B00092M2XC',\n", - " 'Hot Tools Professional 1069S 1600 Watt Professional Turbo Hair Dryer, Silver/Black',\n", - " (3, 103, 153, 114, 0)),\n", - " ('B00092M2ZU',\n", - " 'Ceramic Tools CT2555 1" Professional Ceramic Flat Iron',\n", - " (187, 59, 219, 34, 0)),\n", - " ('B00092M36I',\n", - " 'Ceramic Tools CT155S 1-1/2" Dual Voltage Professional Ceramic Spring Curling Iron',\n", - " (30, 161, 163, 170, 0)),\n", - " ('B00092M386',\n", - " 'Belson Profiles Spa Single Hand Nail Dryer P1013',\n", - " (181, 8, 70, 195, 0)),\n", - " ('B00094O6D4',\n", - " 'LaLicious Sugar Souffle Body Scrub 16 fl oz.',\n", - " (2, 2, 147, 100, 0)),\n", - " ('B000960QJA',\n", - " 'Vaseline Aloe Fresh Hydrating Body Lotion 20.3Oz',\n", - " (102, 8, 65, 34, 0)),\n", - " ('B000977Q8I',\n", - " 'Bobbi Brown Bobbi Brown Shimmer Brick',\n", - " (149, 211, 3, 114, 0)),\n", - " ('B000980PGM',\n", - " 'Dermalogica Daily Microfoliant, 2.6-Ounce',\n", - " (133, 3, 59, 104, 0)),\n", - " ('B000980PH6',\n", - " 'Dermalogica Oil Control Lotion (2 oz.)',\n", - " (245, 134, 226, 103, 0)),\n", - " ('B0009953JA',\n", - " 'Jerdon JP7507NB 8-Inch Two-Sided Swivel Wall Mount Mirror with 7x Magnification, 13.5-Inch Extension, Nickel Beaded Finish',\n", - " (215, 66, 140, 231, 0)),\n", - " ('B00099E8ZA',\n", - " 'Neutrogena Shampoo, Anti-Residue Formula, 6 Ounce',\n", - " (41, 115, 122, 53, 0)),\n", - " ('B00099QZOW',\n", - " 'Colorful Neutral Protein Filler 1.2 oz.',\n", - " (47, 196, 201, 160, 0)),\n", - " ('B00099Z2OQ',\n", - " 'Giovanni Hair Care - Direct Leave-In Conditioner, 8.5 fl oz liquid',\n", - " (13, 161, 139, 159, 0)),\n", - " ('B0009BVK0E',\n", - " 'Organix South Maximum Strength Neem Soap Bar 4 oz',\n", - " (71, 134, 246, 202, 0)),\n", - " ('B0009DT39W',\n", - " 'Panasonic EH2351AC Heated Eyelash Curling Wand',\n", - " (200, 131, 24, 116, 0)),\n", - " ('B0009DVDTU',\n", - " 'Revision Teamine Eye Complex, 0.5 Ounce',\n", - " (141, 247, 67, 157, 0)),\n", - " ('B0009DVMAU', 'Lafes Deodorant Spray with MSM, 8oz', (44, 62, 65, 76, 0)),\n", - " ('B0009EILHG',\n", - " 'Biore Pore Perfect Blemish Fighting Ice Cleanser, Cools & Clears , 6.7 fl oz (198 ml)',\n", - " (154, 173, 106, 103, 0)),\n", - " ('B0009EILI0',\n", - " 'Biore Deep Cleansing Pore Strips Combo 14 Ea',\n", - " (238, 180, 226, 103, 0)),\n", - " ('B0009EILKS',\n", - " 'Biore Deep Cleansing Pore Strips , 14 Nose Strips',\n", - " (155, 180, 122, 103, 0)),\n", - " ('B0009EILVM',\n", - " 'Zia Natural Skincare Ultimate Body Firming Treatment, 7 fl oz',\n", - " (233, 202, 70, 27, 0)),\n", - " ('B0009ET3SC',\n", - " 'Aquis Microfiber Body Towel, Lisse Crepe, White (29 x 55-Inches)',\n", - " (28, 120, 65, 91, 0)),\n", - " ('B0009ET4VI',\n", - " 'Beauty without Cruelty Vitamin C, Vitality Serum, 1-Ounce',\n", - " (167, 213, 132, 37, 0)),\n", - " ('B0009ET5H6',\n", - " \"Burt's Bees Poison Ivy Soap, 2-Ounce\",\n", - " (119, 161, 246, 159, 0)),\n", - " ('B0009ET5JE',\n", - " \"Burt's Bees Lip Shimmer, Champagne, 0.09 oz.\",\n", - " (65, 122, 254, 77, 0)),\n", - " ('B0009ET5O4',\n", - " \"Burt's Bees Healthy Treatment Repair Serum, 1 Fluid Ounce\",\n", - " (252, 247, 139, 53, 0)),\n", - " ('B0009ET6BQ',\n", - " 'derma e Hyaluronic Acid Day Crème, 2-Ounces',\n", - " (56, 202, 65, 60, 0)),\n", - " ('B0009EXM52',\n", - " 'OPI: Treatment & Finish Natural Nail Base Coat, 0.5 oz',\n", - " (192, 145, 227, 135, 0)),\n", - " ('B0009EXMB6',\n", - " \"Palmer's Sunless Tanner & Instant Bronzer SPF 15 5.25oz\",\n", - " (71, 145, 98, 206, 0)),\n", - " ('B0009EXONC',\n", - " 'Big Sexy Hair Volumizing Hairspray, Spray & Play, 10.0 oz (284 g)',\n", - " (195, 59, 234, 53, 0)),\n", - " ('B0009EXOO6',\n", - " 'HEALTHY SEXY SOY TRI-WHEAT LEAVE-IN CONDITIONER 8.5 OZ -PACKAGING MAY VARY',\n", - " (58, 185, 234, 159, 0)),\n", - " ('B0009EXOP0',\n", - " 'SHORT SEXY HAIR CONTOL MANIAC WAX 1.8 OZ-PACKAGING MAY VARY',\n", - " (192, 145, 41, 13, 0)),\n", - " ('B0009EXOXW',\n", - " 'Source Naturals Skin Eternal Serum, 1.7 Ounce',\n", - " (102, 211, 65, 152, 0)),\n", - " ('B0009F3M6A',\n", - " 'Eucerin Dry Skin Therapy Foot Creme, Plus Intensive Repair, 3-Ounce Tubes (Pack of 3)',\n", - " (239, 161, 27, 99, 0)),\n", - " ('B0009F3NGE',\n", - " \"L'Oreal Dermo-Expertise Sublime Bronze Self-Tanning Gelee, Medium-Natural , 5 fl oz (150 ml)\",\n", - " (44, 159, 254, 37, 0)),\n", - " ('B0009F3NYQ',\n", - " 'Neutrogena MicroMist Tanning Sunless Spray, Deep, 5.3 Ounce',\n", - " (13, 21, 70, 100, 0)),\n", - " ('B0009F3O18',\n", - " 'Neutrogena Makeup Remover Cleansing Towelettes, 25 Count',\n", - " (201, 8, 227, 77, 0)),\n", - " ('B0009F3O8Q',\n", - " \"Palmer's Cocoa Butter Formula with Vitamin E, 13.5 fl oz (400 ml)\",\n", - " (231, 180, 163, 152, 0)),\n", - " ('B0009F3OOA',\n", - " 'Queen Helene Refreshing Natural Facial Scrub Mint Julep -- 6 oz',\n", - " (102, 211, 254, 15, 0)),\n", - " ('B0009F3OR2',\n", - " 'Redken All Soft Heavy Cream, Avocado Oil , 8.5 fl oz (250 ml)',\n", - " (127, 161, 122, 100, 0)),\n", - " ('B0009F3OS6',\n", - " 'Redken Extreme Anti-Snap, Lipids/Proteins , 8.5 fl oz (250 ml)',\n", - " (117, 173, 59, 60, 0)),\n", - " ('B0009F3OX6', 'Revlon Cuticle Nippers, Half-Jaw', (155, 89, 10, 195, 0)),\n", - " ('B0009F3R7E', \"Burt's Bees Hand Repair Kit\", (149, 191, 162, 27, 0)),\n", - " ('B0009FHJOG',\n", - " 'Talika Lash Conditioning Cleanser - 4.06 oz',\n", - " (245, 173, 27, 76, 0)),\n", - " ('B0009FHJRS',\n", - " 'Toppik Regular Dark Brown Hair Building Fibers, 0.42 Ounce',\n", - " (70, 122, 163, 114, 0)),\n", - " ('B0009G05W8', 'Cricket Cool Down Iron Travel Case', (17, 199, 219, 171, 0)),\n", - " ('B0009GGY96',\n", - " 'AcneFree Acne and Blackhead Terminator (.75 Ounce Tube)',\n", - " (47, 115, 11, 116, 0)),\n", - " ('B0009H04LO', 'NARS Bronzer Blush Duo, Orgasm/Laguna', (219, 3, 153, 60, 0)),\n", - " ('B0009HIFRY',\n", - " 'Pravana Intense Therapy Leave-In Treatment 10.1 oz',\n", - " (132, 47, 227, 170, 0)),\n", - " ('B0009HJBPE',\n", - " 'Yves Saint Laurent TOUCHE ECLATRadiant Touch 2 Luminous Ivory',\n", - " (144, 159, 216, 182, 0)),\n", - " ('B0009I4J4G',\n", - " 'Lubriderm Daily Moisture Lotion with Shea and Cocoa Butter, 16 Ounce',\n", - " (132, 138, 162, 34, 0)),\n", - " ('B0009I4M02', 'TIGI Bed Head Small Talk, 8 Ounce', (169, 159, 24, 34, 0)),\n", - " ('B0009I4MCU',\n", - " 'Pureology Anti-Fade Complex Hydrate Condition, 8.5 Ounce',\n", - " (231, 122, 124, 15, 0)),\n", - " ('B0009I4MFW', 'Pureology Pure Volume Shampoo 10.1 oz', (24, 21, 122, 30, 0)),\n", - " ('B0009I4MG6',\n", - " 'Pureology Safeguard Your Color Purify Shampoo, 10.1 Ounces',\n", - " (170, 145, 70, 103, 0)),\n", - " ('B0009I4MGQ',\n", - " 'Pureology Anti-Fade Complex Pure Volume Condition, 8.5 Ounce Bottle (Packaging May Vary)',\n", - " (117, 47, 201, 99, 0)),\n", - " ('B0009I4MKW', 'Nexxus shampoo therappe, 33.8oz', (183, 173, 227, 53, 0)),\n", - " ('B0009IMRLS',\n", - " 'Christian Dior Diorshow Waterproof Mascara, No. 090 Black, 0.38 Ounce',\n", - " (132, 161, 140, 76, 0)),\n", - " ('B0009ION0G',\n", - " 'TIGI Catwalk Your Highness Root Boost Spray, 8.1 Ounce',\n", - " (1, 66, 55, 76, 0)),\n", - " ('B0009J6ER0',\n", - " 'Grow Hair Faster with Grow Shampoo and Conditioner for Faster Growing Hair',\n", - " (12, 134, 151, 103, 0)),\n", - " ('B0009JQFF6',\n", - " '100% Organic West African Shea Butter 16 oz',\n", - " (239, 196, 70, 202, 0)),\n", - " ('B0009M0C5W',\n", - " 'FusionBeauty LipFusion Xl 2x Micro-Injected Collagen Advanced Lip Plumping Therapy',\n", - " (144, 211, 227, 13, 0)),\n", - " ('B0009MHJE4',\n", - " 'African Shea Butter Cream (100% Pure & Raw, Gold) 8 Oz.',\n", - " (26, 4, 40, 12, 0)),\n", - " ('B0009MHJS0',\n", - " 'Raw Unrefined Yellow Shea Butter FILTERED & CREAMY 5 0z',\n", - " (252, 89, 246, 53, 0)),\n", - " ('B0009MJE74',\n", - " 'Nubian Heritage - Body Wash African Black Soap - 13 oz.',\n", - " (21, 145, 71, 15, 0)),\n", - " ('B0009ML5M6', 'African Shea Oil - 8 ozs.', (100, 115, 246, 169, 0)),\n", - " ('B0009MMK5M',\n", - " 'Egyptian Magic - All Purpose Skin Cream - 4 oz.',\n", - " (214, 54, 138, 60, 0)),\n", - " ('B0009MSHR2',\n", - " 'Madina African Black Soap Cocoa Butter W/Vitamin E 3.5 oz',\n", - " (127, 96, 246, 75, 0)),\n", - " ('B0009MYMJY',\n", - " 'Shalimar By Guerlain For Women. Eau De Parfum Spray 2.5 Oz.',\n", - " (175, 100, 3, 152, 0)),\n", - " ('B0009N35D2',\n", - " 'Glow By Jennifer Lopez For Women. Eau De Toilette Spray 1 Ounces',\n", - " (175, 89, 11, 75, 0)),\n", - " ('B0009N5EZY',\n", - " 'Kenneth Cole Reaction By Kenneth Cole Eau De Toilette Spray 3.4 Oz',\n", - " (121, 134, 59, 77, 0)),\n", - " ('B0009OAFUM',\n", - " 'Remington HKVAC-2000 Precision Vacuum Haircut Kit',\n", - " (220, 122, 219, 160, 0)),\n", - " ('B0009OAGRE',\n", - " 'Eternity by Calvin Klein for Women, Eau De Parfum, 3.4 Ounce',\n", - " (175, 120, 98, 206, 0)),\n", - " ('B0009OAGSI',\n", - " 'Escape by Calvin Klein for Men, Eau De Toilette Spray, 3.4-Fluid Ounce (100 ml)',\n", - " (47, 145, 65, 103, 0)),\n", - " ('B0009OAGT2',\n", - " 'Escape by Calvin Klein for Women, Eau De Parfum Spray, 1.7 Ounce',\n", - " (175, 4, 22, 12, 0)),\n", - " ('B0009OAGWE',\n", - " 'Ralph Lauren Polo Sport Eau de Toilette Spray for Men, 4.2 Ounce',\n", - " (8, 4, 10, 12, 0)),\n", - " ('B0009OAGXI',\n", - " 'Acqua Di Gio By Giorgio Armani For Men. Eau De Toilette Spray 1.7 Oz.',\n", - " (93, 77, 192, 195, 0)),\n", - " ('B0009OAGZ6',\n", - " 'Burberry By Burberry For Men. Eau De Toilette Spray 3.3 Ounces',\n", - " (8, 24, 43, 206, 0)),\n", - " ('B0009OAH0A',\n", - " 'Jessica Mcclintock By Jessica Mcclintock For Women. Eau De Parfum Spray 1.7 Oz.',\n", - " (8, 4, 3, 34, 0)),\n", - " ('B0009OAHBE',\n", - " 'COOL WATER by Davidoff Cologne for Men (EDT SPRAY 1.35 OZ)',\n", - " (132, 232, 41, 38, 0)),\n", - " ('B0009OAHC8',\n", - " 'Cool Water By Davidoff For Men. Eau De Toilette Spray 4.2 Ounces',\n", - " (175, 4, 10, 12, 0)),\n", - " ('B0009OAHEQ',\n", - " 'Joop! By Joop! For Men. Eau De Toilette Spray 4.2 Ounces',\n", - " (175, 89, 10, 75, 0)),\n", - " ('B0009OAHIM',\n", - " 'Dolce & Gabbana By Dolce & Gabbana For Men. Eau De Toilette Spray 4.2 Ounce',\n", - " (8, 135, 118, 77, 0)),\n", - " ('B0009OAHIW',\n", - " 'D & G Light Blue By Dolce & Gabbana For Women. Eau De Toilette Spray 1.6 Ounces',\n", - " (31, 21, 153, 53, 0)),\n", - " ('B0009OAHNM', 'Curve Men Cologne Spray, 4.2-Ounce', (245, 66, 70, 103, 0)),\n", - " ('B0009OAHOG',\n", - " 'Mambo By Liz Claiborne For Men. Cologne Spray 1.7 Ounces',\n", - " (92, 100, 201, 27, 0)),\n", - " ('B0009OAHQ4',\n", - " 'Bora Bora by Liz Claiborne for Men, Cologne Spray, 3.4-Ounce',\n", - " (92, 77, 201, 53, 0)),\n", - " ('B0009OAHQE',\n", - " 'Bora Bora by Liz Claiborne for Women, Eau De Parfum Spray, 3.4-Ounce',\n", - " (8, 120, 216, 77, 0)),\n", - " ('B0009OAHQY',\n", - " 'Claiborne by Liz Claiborne for Men, Cologne Spray, 3.4-Ounce',\n", - " (212, 173, 33, 77, 0)),\n", - " ('B0009OAHRI',\n", - " 'Lucky You By Lucky Brand For Women. Eau De Toilette Spray 3.4 Oz.',\n", - " (237, 135, 22, 15, 0)),\n", - " ('B0009OAHRS',\n", - " 'Lucky You By Lucky Brand For Men. Cologne Spray 3.4 Oz.',\n", - " (92, 105, 201, 103, 0)),\n", - " ('B0009OAHVO',\n", - " \"L'eau D'issey (issey Miyake) by Issey Miyake for Men - EDT Spray\",\n", - " (8, 80, 27, 104, 0)),\n", - " ('B0009OAHWI',\n", - " 'Lolita Lempicka By Lolita Lempicka For Women. Eau De Parfum Spray 3.4 Oz.',\n", - " (175, 55, 27, 75, 0)),\n", - " ('B0009OAI18',\n", - " 'Sunflowers By Elizabeth Arden For Women. Eau De Toilette Spray 3.4 Oz.',\n", - " (32, 47, 22, 77, 0)),\n", - " ('B0009OAI1S',\n", - " 'Red Door By Elizabeth Arden For Women. Eau De Toilette Spray 3.3 Ounces',\n", - " (175, 89, 3, 75, 0)),\n", - " ('B0009OAI2C',\n", - " 'Arden Beauty By Elizabeth Arden For Women. Eau De Parfum Spray 3.3 Ounces',\n", - " (8, 100, 10, 77, 0)),\n", - " ('B0009OAI3G',\n", - " 'Blue Grass By Elizabeth Arden For Women. Eau De Parfum Spray 1.7 Ounces',\n", - " (8, 100, 37, 27, 0)),\n", - " ('B0009OAI40',\n", - " 'Green Tea By Elizabeth Arden For Women. Eau De Parfum Spray 3.3 Ounces',\n", - " (175, 55, 3, 75, 0)),\n", - " ('B0009OAI7C',\n", - " 'Passion by Elizabeth Taylor for Men, Cologne Spray, 4-Ounce',\n", - " (92, 236, 201, 91, 0)),\n", - " ('B0009OAI8G',\n", - " 'White Diamonds By Elizabeth Taylor For Women, Eau De Toilette Spray, 1.7 Ounces',\n", - " (8, 55, 10, 75, 0)),\n", - " ('B0009OAIB8',\n", - " 'Black Pearls by Elizabeth Taylor for Women, Eau De Parfum Spray, 3.3-Ounce',\n", - " (175, 120, 192, 104, 0)),\n", - " ('B0009OAIE0',\n", - " 'Pleasures by Estee Lauder for Women, Eau De Toilette Spray, 1.7 Ounce',\n", - " (8, 120, 27, 75, 0)),\n", - " ('B0009OAIIG',\n", - " 'Gucci Rush By Gucci For Women. Eau De Toilette Spray 2.5 Ounces',\n", - " (31, 24, 3, 75, 0)),\n", - " ('B0009OAIKY',\n", - " 'Halston 1-12 by Halston for Men, Cologne Spray, 4.2-Ounce',\n", - " (92, 149, 201, 103, 0)),\n", - " ('B0009OAIQI',\n", - " 'Design by Paul Sebastian for Women, Fine Parfum Spray, 1.7-Ounce',\n", - " (31, 120, 40, 75, 0)),\n", - " ('B0009OAISG',\n", - " 'True Love by Elizabeth Arden for Women - 1.7 Ounce EDT Spray',\n", - " (32, 120, 82, 27, 0)),\n", - " ('B0009OMNGQ',\n", - " 'Awapuhi Moisture Mist Unisex Mist by Paul Mitchell, 16.9 Ounce',\n", - " (237, 122, 162, 76, 0)),\n", - " ('B0009OXHC0',\n", - " \"Nature's Blessings Hair Pomade 4 oz.\",\n", - " (154, 210, 139, 15, 0)),\n", - " ('B0009P4PZC', 'Cococare Coconut Oil 100% Pure 4 Oz', (170, 47, 122, 38, 0)),\n", - " ('B0009PVV36',\n", - " 'Conair CD86SCS Instant Heat Iron and Straightener, 1.5 Inch',\n", - " (241, 223, 246, 103, 0)),\n", - " ('B0009PVV40',\n", - " 'Conair BC171NCS Ceramic Ionic Hot Air Brush, Black, 1.25 Inch',\n", - " (24, 66, 140, 170, 0)),\n", - " ('B0009PVV4A',\n", - " 'Infiniti Pro by Conair Professional 1 Inch Tourmaline Ceramic Straightener',\n", - " (70, 122, 163, 99, 0)),\n", - " ('B0009QJ3TE',\n", - " 'Model in a Bottle Sensitive Makeup Setting Spray - 1.7 oz',\n", - " (13, 4, 10, 76, 0)),\n", - " ('B0009QZXP2',\n", - " \"Africa's Best Organics Hair Mayonnaise, 15 oz\",\n", - " (245, 4, 234, 37, 0)),\n", - " ('B0009QZXQ6',\n", - " \"Africa's Best Organics Olive Oil Dry Hair and Scalp Therapy, 7.5 oz.\",\n", - " (133, 96, 24, 77, 0)),\n", - " ('B0009QZYBU',\n", - " 'Soft Sheen Carson Care Free Curl Gold Instant Activator 16Oz/473Ml',\n", - " (47, 138, 250, 169, 0)),\n", - " ('B0009QZYLU',\n", - " 'Clairol BW2 - 8 oz. Tub Powder Lightener',\n", - " (91, 100, 201, 114, 0)),\n", - " ('B0009QZYN8',\n", - " 'CLAIROL Jazzing Gentle Temporary Semi Permanent Hair Color #58 RUBY RED',\n", - " (63, 21, 71, 99, 0)),\n", - " ('B0009QZYO2', 'Clairol Pure White 30 Volume 16 oz.', (115, 236, 71, 27, 0)),\n", - " ('B0009QZZ4Q',\n", - " 'Demert Wig Luster Conditioner, 9.76 Ounce',\n", - " (123, 149, 70, 91, 0)),\n", - " ('B0009R14NG',\n", - " 'Africas Best Herbal Gro Super 5.25oz Jar',\n", - " (92, 202, 153, 15, 0)),\n", - " ('B0009R14Q8',\n", - " \"Africa's Best Organincs Mayo Leave In Conditioner 6 oz.\",\n", - " (92, 228, 59, 77, 0)),\n", - " ('B0009R14XQ',\n", - " 'Australian Gold SPF 15 Spray Gel with Bronzer, 8 Ounce',\n", - " (136, 24, 10, 27, 0)),\n", - " ('B0009R16O8',\n", - " \"Dr. Bronner's Magic Soaps: Liquid Castile Soap, Tea Tree 32 oz\",\n", - " (194, 180, 153, 15, 0)),\n", - " ('B0009R33U8',\n", - " 'Aphogee Two-step Treatment Protein for Damaged Hair 16 oz.',\n", - " (215, 134, 231, 100, 0)),\n", - " ('B0009R35GA',\n", - " 'Clairol Pure White 40 Volume 16 oz.',\n", - " (115, 236, 122, 126, 0)),\n", - " ('B0009R5AYA',\n", - " 'Aussie Sydney Smooth 3 Minute Miracle Smoothing Treatment-8oz',\n", - " (164, 187, 219, 160, 0)),\n", - " ('B0009R5B8A', 'Avon SSS Original OIL 5oz', (24, 234, 221, 37, 0)),\n", - " ('B0009R5CMK',\n", - " 'Doo Gro Medicated Hair Vitalizer Mega Thick Anti-Thinning Formula, 4 Ounce',\n", - " (44, 66, 227, 60, 0)),\n", - " ('B0009RF9OG',\n", - " 'Rogaine for Women Hair Regrowth Treatment, 2 Ounce',\n", - " (255, 51, 59, 15, 1)),\n", - " ('B0009RFAOK',\n", - " 'Clean & Clear Deep Cleaning Astringent, Oil Fighting, 8 Ounce',\n", - " (132, 62, 162, 77, 0)),\n", - " ('B0009RFAPY',\n", - " 'Purpose Gentle Cleansing Wash, 6-Ounce Pump Bottle',\n", - " (194, 7, 40, 91, 0)),\n", - " ('B0009RFB76',\n", - " 'RoC Retinol Correxion Eye Cream, 0.5 Ounce',\n", - " (12, 115, 208, 194, 0)),\n", - " ('B0009RMN0E',\n", - " 'Conair CS25WNCS Ultra Slim Ceramic Straightener, Red, 1 5/8 Inch',\n", - " (182, 66, 201, 38, 0)),\n", - " ('B0009STDD8',\n", - " \"Calvin Klein Women's Obsession Eau de Parfum Spray, 3.4 fl. oz.\",\n", - " (175, 129, 153, 170, 0)),\n", - " ('B0009TNBVC',\n", - " 'Estee Lauder Double Wear Stay-In-Place Makeup SPF 10 18 Linen',\n", - " (132, 159, 216, 13, 0)),\n", - " ('B0009V1YR8',\n", - " 'Farouk CHI 1 Inch Ceramic Flat Hairstyling Iron',\n", - " (105, 62, 153, 100, 0)),\n", - " ('B0009V1YRS',\n", - " 'CHI Turbo Microchip Ceramic Hairstyling Iron 1"',\n", - " (241, 134, 122, 202, 0)),\n", - " ('B0009V1YS2',\n", - " 'Farouk CHI GF1539 Turbo Big 2 Inch Ceramic Flat Iron Hair Straightener',\n", - " (67, 202, 226, 188, 0)),\n", - " ('B0009V2S8M',\n", - " 'Glo Minerals GloPressed Base Beige Dark 0.35oz',\n", - " (132, 47, 162, 139, 0)),\n", - " ('B0009V8N4U',\n", - " 'Sun Laboratories Dark Sunsation Self Tanning Lotion - Very Dark 8 fl oz.',\n", - " (118, 115, 70, 220, 0)),\n", - " ('B0009V8N5E',\n", - " 'Sun Self Tanning Lotion Ultra Dark Instant Tint - Dark 8oz/236ml',\n", - " (62, 211, 71, 77, 0)),\n", - " ('B0009VD8YU',\n", - " 'AUBREY Collagen Restorative Moisturizer 1.7 fl.oz',\n", - " (71, 202, 246, 219, 0)),\n", - " ('B0009VDBWY',\n", - " 'Sun Laboratories Ultra Dark Self Tanning Spray Can (6 oz)',\n", - " (70, 115, 219, 60, 0)),\n", - " ('B0009VIJV2',\n", - " 'Floxite Fl-10h 10x Hand Held 2-sided Mirror with Stand, Clear',\n", - " (200, 77, 33, 34, 0)),\n", - " ('B0009VNI2C',\n", - " 'Fruit Of The Earth Bogo Cream Aloe Vera 4oz. Jar',\n", - " (127, 62, 234, 13, 0)),\n", - " ('B0009VNI40',\n", - " 'Fruit Of The Earth 100 % Aloe Vera Gel, 12 oz, 1-Pack',\n", - " (117, 134, 163, 60, 0)),\n", - " ('B0009VQ8X8',\n", - " 'Got2b Glued Blasting Freeze Spray, 12 Ounce',\n", - " (67, 120, 216, 100, 0)),\n", - " ('B0009WB49K',\n", - " 'Alterna Caviar Anti-Aging Working Hair Spray, 15.5 Ounce',\n", - " (14, 21, 254, 103, 0)),\n", - " ('B0009WY4U6',\n", - " 'St. Ives Swiss Formula Makeup Remover & Facial Cleanser, All Skin Types, 6 oz (170 g)',\n", - " (245, 21, 219, 219, 0)),\n", - " ('B0009WY4UQ',\n", - " 'TRESemme Curl Enhancing Mousse, 10.5 oz',\n", - " (71, 213, 43, 219, 0)),\n", - " ('B0009WY54G',\n", - " 'TRESemme Shampoo, 24 Hour Body, Healthy Volume, 32 Ounce',\n", - " (183, 134, 67, 76, 0)),\n", - " ('B0009XH6SC',\n", - " 'Andis 1-Inch Ceramic Clamp Flat Iron (67095)',\n", - " (174, 66, 208, 99, 0)),\n", - " ('B0009XH6TG',\n", - " 'Andis RC-2 Ionic1875W Ceramic Hair Dryer with Folding Handle and Retractable Cord (80020)',\n", - " (241, 117, 208, 34, 0)),\n", - " ('B0009XH6UU',\n", - " 'Andis 40055 Pro Style 1600 Watt Hair Dryer - White',\n", - " (80, 103, 219, 76, 0)),\n", - " ('B0009XH6V4',\n", - " 'Andis Micro Turbo 1600 Watt Dual Voltage Hair Dryer - White (33805)',\n", - " (155, 145, 71, 53, 0)),\n", - " ('B0009Y6RHM',\n", - " 'Banana Boat Summer Color Self-Tanning Lotion - Deep Dark: 6 OZ',\n", - " (199, 47, 27, 37, 0)),\n", - " ('B0009YDO32',\n", - " 'Zum Mist Aromatherapy Room and Body Spray Frankincense And Myrrh -- 4 fl oz',\n", - " (114, 62, 59, 103, 0)),\n", - " ('B000A0ADT8',\n", - " 'Ole Henriksen Truth Serum Collagen Booster, 1.0 Fluid Ounce',\n", - " (245, 134, 162, 170, 0)),\n", - " ('B000A0ADUW',\n", - " 'Ole Henriksen Blue Black Berry Enzyme Facial Mask, 3.5 Fluid Ounce',\n", - " (123, 21, 122, 15, 0)),\n", - " ('B000A35L56',\n", - " 'Max Green Alchemy Scalp Rescue Shampoo 8.8 oz',\n", - " (245, 24, 208, 99, 0)),\n", - " ('B000A3I2X4',\n", - " 'Revlon RV408 1875 Watt Full-Size Turbo Dryer, Black',\n", - " (140, 159, 24, 34, 0)),\n", - " ('B000A3V1SW',\n", - " \"Hask Placenta Henna 'n' Placenta for Extremely Damaged Hair 237ml/8oz\",\n", - " (178, 60, 163, 171, 0)),\n", - " ('B000A3V1XC', 'Hollywood Beauty Tea Tree Oil 2 oz.', (56, 21, 65, 114, 0)),\n", - " ('B000A3V2PE',\n", - " \"L'Oreal Excellence Hicolor Hilights Red 1.2 oz.\",\n", - " (128, 141, 43, 76, 0)),\n", - " ('B000A3XI4M',\n", - " 'S-Curl Activator and Moisturizer 32 oz',\n", - " (170, 141, 140, 60, 0)),\n", - " ('B000A3ZMLO', 'Hollywood Beauty Carrot Oil 8 oz.', (234, 255, 227, 60, 0)),\n", - " ('B000A3ZN7M',\n", - " \"L'Oreal Oreor 30 Volume Creme Developer 16 oz.\",\n", - " (47, 47, 201, 15, 0)),\n", - " ('B000A3ZN7W',\n", - " 'Loreal Oreor Creme 40 Volume Developer 16 Oz',\n", - " (47, 149, 201, 103, 0)),\n", - " ('B000A408VC',\n", - " 'Sally Hansen Half Jaw Cuticle Nippers',\n", - " (16, 96, 155, 103, 0)),\n", - " ('B000A4094I',\n", - " 'Liquid Glass Nail Laminate With Sunscreen 0.5oz',\n", - " (138, 21, 33, 195, 0)),\n", - " ('B000A409J8',\n", - " \"L'Oreal Quick Blue Powder Bleach 1 Lb\",\n", - " (28, 135, 59, 170, 0)),\n", - " ('B000A7VRYG',\n", - " 'Ocusoft Lid Scrub Foaming Eyelid Cleanser (7.25 fl. oz.)',\n", - " (24, 89, 201, 160, 0)),\n", - " ('B000AA2XQ4',\n", - " 'Rothco Compartment Travel Toiletry Bag',\n", - " (89, 202, 153, 91, 0)),\n", - " ('B000AA5VD6',\n", - " 'Sally Hansen Insta, Dri Insta, Dri Anti, Chip Top Coat',\n", - " (200, 196, 122, 195, 0)),\n", - " ('B000AA5VZ4', 'Super Nail Cuticle Oil 4 oz.', (194, 173, 153, 160, 0)),\n", - " ('B000AA5VZY', 'Super Nail 16 oz. Pure Acetone', (222, 135, 216, 100, 0)),\n", - " ('B000AA9H3Q',\n", - " 'Sally Hansen Natural Nail Growth Activator # 2741 0.45 oz.',\n", - " (11, 167, 201, 34, 0)),\n", - " ('B000AA9HQ8',\n", - " 'Super Nail Cuticle Softener, 8 Ounce',\n", - " (210, 80, 202, 100, 0)),\n", - " ('B000AAAVTU',\n", - " 'Sally Hansen No Chip Acrylic Top Coat, 0.45 Fluid Ounce',\n", - " (13, 122, 70, 76, 0)),\n", - " ('B000AAAW9Y',\n", - " \"Mane 'n Tail Moisture Enriched Hair Strengthener, Bonus, 6 oz.\",\n", - " (102, 80, 11, 220, 0)),\n", - " ('B000AAAWAI',\n", - " \"Straight Arrow Mane 'N Tail Herbal Gro Maximum 5.5oz\",\n", - " (39, 129, 59, 114, 0)),\n", - " ('B000AAAWEO',\n", - " 'Sun In Hair Lightner Lemon 4.7 oz. Pump',\n", - " (94, 202, 11, 34, 0)),\n", - " ('B000AAC8VO',\n", - " 'DKNY BE DELICIOUS by Donna Karan Womens EAU DE PARFUM SPRAY 1 OZ',\n", - " (164, 173, 43, 103, 0)),\n", - " ('B000AADENA',\n", - " 'Sally Hansen Cuticle Massage Cream -- 0.4 fl oz',\n", - " (71, 8, 122, 236, 0)),\n", - " ('B000AADEP8',\n", - " 'Sally Hansen Double Duty Base and Top Coat, 0.45 Fluid Ounce',\n", - " (28, 87, 138, 195, 0)),\n", - " ('B000AADF0M',\n", - " 'Sally Hansen Airbrush Face Tanner 1.8oz Spray [Health and Beauty]',\n", - " (196, 164, 43, 171, 0)),\n", - " ('B000AADF20',\n", - " 'Sally Hansen Vitamin E Nail and Cuticle Oil, 0.45 Fluid Ounce',\n", - " (128, 135, 27, 77, 0)),\n", - " ('B000AADG0G',\n", - " 'Village Naturals Bath Shoppe Lavender & Chamomile Foaming Milk Bath 28 fl oz.(Pack of 1)',\n", - " (178, 62, 43, 169, 0)),\n", - " ('B000AADG8I',\n", - " 'Wella Cc Liquid #0811/8N Light Blonde Haircolor',\n", - " (201, 134, 59, 77, 1)),\n", - " ('B000ABOLZ4',\n", - " 'Kirks Original Coco Castile Soap, 24 Bars 1/2 Case',\n", - " (144, 159, 33, 116, 0)),\n", - " ('B000ACAV8O', 'Henna Bright Red Pwd 4oz 4 Ounces', (45, 21, 216, 77, 1)),\n", - " ('B000ACB09I',\n", - " \"Nature's Gate Organics C for Yourself, (1.7 fl oz) (50 ml)\",\n", - " (100, 196, 162, 34, 0)),\n", - " ('B000ACB0C0',\n", - " \"Nature's Gate Organics Oh What a Night Cream, (1 oz) (28 g)\",\n", - " (145, 66, 24, 219, 0)),\n", - " ('B000ALBJ40',\n", - " 'Fekkai Glossing Hair Conditioner 2 Fl Oz',\n", - " (41, 3, 153, 100, 0)),\n", - " ('B000ALBKGW',\n", - " 'Bliss Diamancel Diamond Nail File No.2, Medium',\n", - " (9, 122, 163, 162, 0)),\n", - " ('B000ALBNGE',\n", - " 'Clinique Superfine Liner for Brows 01 Soft Blonde',\n", - " (189, 46, 163, 99, 0)),\n", - " ('B000ALCJR6',\n", - " 'T3 Tourmaline 83808 Professional Featherweight Ceramic Ionic Hair Dryer',\n", - " (105, 228, 139, 116, 0)),\n", - " ('B000ALDJ7A',\n", - " 'Diamancel Diamond Tough Foot Buffer No.11, Medium',\n", - " (200, 120, 67, 83, 0)),\n", - " ('B000ALDK1A',\n", - " 'Fruit Of The Earth 100% Aloe Vera 24oz Gel Pump',\n", - " (185, 62, 254, 160, 0)),\n", - " ('B000ALDLJG',\n", - " 'Clinique Quickliner for Eyes 07 Really Black',\n", - " (18, 96, 201, 169, 0)),\n", - " ('B000ALFROS',\n", - " 'Fekkai Advanced Brilliant Glossing Cream 4 fl oz (113 g)',\n", - " (128, 105, 201, 99, 0)),\n", - " ('B000ALFTUU',\n", - " 'Clinique 7 Day Scrub Cream Rinse-Off Formula 3.4 oz',\n", - " (132, 173, 138, 169, 0)),\n", - " ('B000ALFTVO',\n", - " 'Clinique Take the Day off makeup remover 4.2 oz /125ml',\n", - " (132, 149, 43, 76, 0)),\n", - " ('B000AM82US',\n", - " \"Mimi's Diva Dryer by Aquis Microfiber Hair Towel, Pink (19 x 39-Inches)\",\n", - " (80, 134, 139, 12, 0)),\n", - " ('B000AMA43Q',\n", - " 'Aquis Microfiber Hair Towel, Waffle, Linen (19 x 39-Inches)',\n", - " (28, 149, 139, 91, 0)),\n", - " ('B000AMA4DQ',\n", - " \"Mimi's Diva Dryer by Aquis Microfiber Hair Turban, Patented Design, White\",\n", - " (210, 21, 162, 210, 0)),\n", - " ('B000AMBF5W',\n", - " 'Nivea Soft Refreshingly Soft Moisturizing Creme with Jojoba Oil & Vitamin E, 6.8 Ounces',\n", - " (92, 202, 59, 53, 0)),\n", - " ('B000AMHWCW',\n", - " 'Too Faced Cosmetics Bronzer, Snow Bunny, 0.28-Ounce',\n", - " (188, 103, 254, 77, 0)),\n", - " ('B000AO2NXS',\n", - " 'Dove Body Wash with NutriumMoisture, Sensitive Skin Nourishing, 24 Ounce',\n", - " (99, 255, 153, 53, 0)),\n", - " ('B000AQF50Y',\n", - " 'D & G Light Blue By Dolce & Gabbana For Women. Eau De Toilette Spray 3.3 Ounces',\n", - " (31, 24, 27, 75, 0)),\n", - " ('B000AQI2EK',\n", - " 'Paul Mitchell Tea Tree Special Conditioner, 33.8 Ounce',\n", - " (33, 196, 98, 76, 0)),\n", - " ('B000ARDBH2',\n", - " 'Guess Eau de Parfum Spray for Women, 2.5 Fluid Ounce',\n", - " (141, 3, 201, 152, 0)),\n", - " ('B000ASDGK8',\n", - " 'BaByliss Pro BAB2000 Ceramix Xtreme Dryer',\n", - " (181, 202, 122, 195, 0)),\n", - " ('B000ASDX3S',\n", - " 'BaByliss Pro BAB2590 Porcelain Ceramic Straightening Iron with Removable Comb, 1.5 Inch',\n", - " (132, 66, 246, 169, 0)),\n", - " ('B000AU15E0',\n", - " 'Blue Lizard Australian SUNSCREEN SPF 30+, Baby, SPF 30+, 8.75-Ounces',\n", - " (128, 77, 43, 77, 0)),\n", - " ('B000AUTH0E',\n", - " 'Rusk Thermal Shine Spray Unisex, 4.4 Ounce',\n", - " (71, 96, 138, 100, 0)),\n", - " ('B000AUTHEA',\n", - " 'Straight Sexy Hair Smooth & Seal Aerated Anti-Frizz Spray (8.1 oz)',\n", - " (154, 131, 139, 195, 0)),\n", - " ('B000AYKVOG', 'Dove Pink Beauty Bar, 8 Count', (115, 24, 208, 170, 0)),\n", - " ('B000B45BUE',\n", - " 'Silver Metallic Perfume Atomizer Spray 10 ML for purse or travel Refillable',\n", - " (3, 236, 122, 202, 0)),\n", - " ('B000B5S2LS',\n", - " 'Focus 21 Sea Plasma Hair and Skin Moisturizer 32oz',\n", - " (40, 100, 226, 76, 0)),\n", - " ('B000B5UPF4', 'OC Eight Professional Mattifying Gel', (232, 77, 226, 77, 0)),\n", - " ('B000B63Y1K',\n", - " 'Dermorganic Conditioning Shampoo, 12 Ounce',\n", - " (63, 115, 11, 184, 0)),\n", - " ('B000B6VIPY',\n", - " 'Princereigns Shaving Gel Used to Remove Ingrown Hair and Razor Bumps',\n", - " (28, 3, 59, 19, 0)),\n", - " ('B000B7VO66',\n", - " 'PCA Skin Eyexcellence (Phaze 12), 0.5 Ounce',\n", - " (233, 21, 33, 15, 0)),\n", - " ('B000B82TD2',\n", - " 'NeoStrata Ultra Smoothing Cream AHA 10, 1.4 Ounce',\n", - " (44, 115, 27, 195, 0)),\n", - " ('B000B8FW0Y', 'Lansky Dual Grit Sharpener', (220, 173, 71, 34, 0)),\n", - " ('B000B8VBJK',\n", - " 'HOT TOOLS 2108 Nano Ceramic Marcel Curling Iron, Black/Purple, 1 Inch',\n", - " (67, 202, 226, 77, 0)),\n", - " ('B000B9J3GM', 'Mary Kay Indulge Soothing Eye Gel', (132, 211, 17, 13, 0)),\n", - " ('B000B9N0N4',\n", - " 'Mary Kay Blemish Control Toner: Formula 3',\n", - " (78, 180, 139, 182, 0)),\n", - " ('B000B9W3CI',\n", - " 'White Plastic Jar with Dome Lid 4 Oz - 12 Per Bag',\n", - " (241, 46, 3, 77, 0)),\n", - " ('B000B9W4MC',\n", - " 'White Plastic Jar with Flat Lid 8 Oz - 6 Per Bag',\n", - " (241, 46, 234, 99, 0)),\n", - " ('B000BB9L0S',\n", - " 'Nailtiques Formula 2 Protein, .5 Ounce',\n", - " (6, 159, 226, 91, 0)),\n", - " ('B000BBGP4I', 'Mason Pearson Detangling Comb', (210, 8, 33, 153, 0)),\n", - " ('B000BD0SEE',\n", - " 'MyChelle Fruit Enzyme Cleanser, 4.4 Ounce Bottle',\n", - " (204, 8, 139, 91, 0)),\n", - " ('B000BFTAMS',\n", - " 'Ponds Caring Classic Extra, Rich Dry Skin Cream, 10.1 oz',\n", - " (170, 4, 40, 12, 0)),\n", - " ('B000BGIYWY',\n", - " \"Africa's Best Kids Organics Hair Lotion, Shea Butter Detangling Moisturizing 12 oz\",\n", - " (177, 180, 162, 159, 0)),\n", - " ('B000BH92J2',\n", - " 'Shea Moisture Shea Butter Leave in Conditioner 8oz',\n", - " (132, 234, 219, 34, 0)),\n", - " ('B000BIPJ20',\n", - " 'Perfekt Skin Perfection Gel Luminous 1 oz',\n", - " (133, 196, 71, 236, 0)),\n", - " ('B000BIUGRI', 'Bumble and Bumble Prep (8 Ounces)', (117, 3, 140, 241, 0)),\n", - " ('B000BIUGSM',\n", - " 'Bumble and Bumble Styling Lotion (8 Ounces)',\n", - " (3, 134, 153, 206, 0)),\n", - " ('B000BIUGUA',\n", - " 'Bumble and Bumble Sunday Shampoo (8 Ounces)',\n", - " (10, 122, 153, 160, 0)),\n", - " ('B000BIUGUK',\n", - " 'Bumble and Bumble Thickening Conditioner (8 Ounces)',\n", - " (123, 122, 153, 169, 0)),\n", - " ('B000BIUGV4',\n", - " 'Bumble and Bumble Thickening Hair Spray (8 Ounces)',\n", - " (79, 145, 246, 241, 0)),\n", - " ('B000BIUGXM',\n", - " 'Bumble and Bumble Curl Conscious Defining Creme 8.5 oz',\n", - " (117, 122, 208, 114, 0)),\n", - " ('B000BIVXZW',\n", - " 'Bumble and Bumble Classic Hairspray (10 Ounces)',\n", - " (19, 62, 24, 160, 0)),\n", - " ('B000BIVY0G',\n", - " 'Bumble and Bumble DeFRIZZ (4 Ounces)',\n", - " (92, 250, 201, 220, 0)),\n", - " ('B000BIVY10',\n", - " 'Kerastase Nutritive Bain Satin 2 Complete Nutrition Shampoo For Dry and Sensitised Hair, 8.5 Oz.',\n", - " (132, 7, 226, 15, 0)),\n", - " ('B000BIVY1U',\n", - " 'Bumble and Bumble Seaweed Conditioner (8 Ounces)',\n", - " (177, 21, 10, 116, 0)),\n", - " ('B000BIVY24',\n", - " 'Bumble and Bumble Tonic Lotion, 8-Ounce Spray Bottle',\n", - " (151, 21, 216, 152, 0)),\n", - " ('B000BIXP30',\n", - " 'Kerastase Resistance Bain Volumactive Volumizing Shampoo For Fine, Vulnerable Hair, 8.5 Ounce',\n", - " (1, 180, 55, 91, 0)),\n", - " ('B000BIXP3K',\n", - " 'Bumble and Bumble Grooming Cream (5 Ounces)',\n", - " (201, 247, 71, 91, 0)),\n", - " ('B000BIXP3U',\n", - " 'Bumble and Bumble Leave in Conditioner (8 Ounces)',\n", - " (79, 206, 41, 37, 0)),\n", - " ('B000BIXP4O',\n", - " 'Bumble and Bumble Styling Creme, 8-Ounce Bottle',\n", - " (3, 180, 216, 114, 0)),\n", - " ('B000BIXP5I',\n", - " 'Bumble and Bumble Surf Spray, 4-Ounce Bottle',\n", - " (3, 3, 208, 75, 0)),\n", - " ('B000BIXP5S',\n", - " 'Kerastase Nutritive Oleo-Relax Serum, 4.2 Ounces',\n", - " (99, 196, 67, 53, 0)),\n", - " ('B000BIXP62',\n", - " 'Kerastase Nutritive Bain Oleo-Relax Smoothing Shampoo For Dry and Rebellious Hair, 8.5 Ounce',\n", - " (132, 115, 227, 34, 0)),\n", - " ('B000BIZSUS',\n", - " 'Bumble and Bumble Brilliantine (2 Ounces)',\n", - " (3, 47, 192, 37, 0)),\n", - " ('B000BIZSV2',\n", - " 'Bumble and Bumble Deeep, 5-Ounce Tube',\n", - " (177, 173, 208, 100, 0)),\n", - " ('B000BIZSYO',\n", - " 'Kerastase Resistance Bain De Force Fortifying Shampoo For Weakened to Fragile Hair, 8.5 Ounce',\n", - " (132, 249, 71, 180, 0)),\n", - " ('B000BJ1CGQ', 'GiGi Mini Pro Waxing Kit', (113, 196, 201, 15, 0)),\n", - " ('B000BK1P9E',\n", - " 'Kerasilk Rich Care Instant Silk Fluid By Goldwell for Unisex, 4.2 Ounce',\n", - " (47, 115, 22, 27, 0)),\n", - " ('B000BKLBES',\n", - " 'Marc Anthony Instantly Thick Hair Thickening Cream, 6 oz',\n", - " (13, 159, 162, 103, 0)),\n", - " ('B000BKLCDS',\n", - " 'Super Nail Acetone Polish Remover, 16 Ounce',\n", - " (3, 21, 153, 38, 0)),\n", - " ('B000BKXGXW',\n", - " 'NOW Foods - Red Clay Powder Moroccan, 6 OZ.',\n", - " (245, 103, 71, 159, 0)),\n", - " ('B000BNG4VU',\n", - " 'Coty Airspun Loose Powder, Translucent, 2.3 Ounce',\n", - " (123, 238, 10, 12, 0)),\n", - " ('B000BP81IM', 'NARS Loose Powder, Eden', (173, 96, 71, 170, 0)),\n", - " ('B000BPBV2U',\n", - " 'Liquid Gold Brush-on Bonding Adhesive for Cold Fusion Hair Extensions and Braids - .5oz',\n", - " (12, 149, 139, 202, 0)),\n", - " ('B000BPMB2Y',\n", - " 'Roux Lash & Brow Tint, Black,40 Count',\n", - " (92, 29, 70, 27, 0)),\n", - " ('B000BPQG6Q', 'Roux Tween Time Hair Crayon, Auburn', (3, 47, 219, 53, 0)),\n", - " ('B000BPT0TG',\n", - " 'Roux Fanci-full Rinse #49 Ultra White Minx',\n", - " (238, 236, 162, 170, 0)),\n", - " ('B000BR50M0',\n", - " 'Symbiotics Colostrum Plus, 240 Capsules',\n", - " (252, 47, 219, 34, 0)),\n", - " ('B000BR5B2Y',\n", - " 'Komenuka Bijin Japanese All-Natural Essence Whitening Cream with Rice Bran',\n", - " (99, 149, 3, 169, 0)),\n", - " ('B000BR766S',\n", - " 'Komenuka Bijin Premium Hair Care Set: Moisturizing Hair Shampoo & Hair Treatment / Conditioner',\n", - " (132, 161, 226, 99, 0)),\n", - " ('B000BRGAOM',\n", - " 'Biosilk Therapy Shine On Spray, 5.30 Ounce',\n", - " (132, 228, 70, 34, 0)),\n", - " ('B000BRO6O8',\n", - " 'Coty Airspun Loose Powder, Naturelle, 2.3 Ounce',\n", - " (123, 4, 40, 12, 0)),\n", - " ('B000BRPMJG',\n", - " 'Sebamed moisturizing lotion, for sensitive skin, 6.8-Fluid Ounce',\n", - " (63, 46, 139, 48, 0)),\n", - " ('B000BRSHXE',\n", - " 'Sebamed Moisturing Cream, Sensitive Skin, 2.6-Ounce',\n", - " (78, 159, 122, 202, 0)),\n", - " ('B000BRY5UI',\n", - " 'Komenuka Bijin Facial Cleansing Powder from Natural Rice Bran - 30 Packs',\n", - " (78, 180, 219, 77, 0)),\n", - " ('B000BRYMKG',\n", - " 'Hylexin Serious Dark Circles by Bremenn Research Labs .39 oz. 11.53 ml',\n", - " (252, 247, 227, 103, 0)),\n", - " ('B000BTM2K6',\n", - " 'White Shoulders By Evyan For Women, Eau De Cologne Spray (4.5 Ounces)',\n", - " (92, 180, 192, 91, 0)),\n", - " ('B000BTO6CI',\n", - " 'Jessica Mcclintock By Jessica Mcclintock For Women. Eau De Parfum Spray 3.4 Oz.',\n", - " (8, 4, 3, 34, 1)),\n", - " ('B000BTO6EG',\n", - " 'PALOMA PICASSO For Women By PALOMA PICASSO Eau De Parfum Spray,3.4 Oz',\n", - " (17, 24, 118, 77, 0)),\n", - " ('B000BTQRFM',\n", - " 'Paul Sebastian by Paul Sebastian for Men - 8 Ounce EDC De Luxe Splash',\n", - " (177, 131, 226, 202, 0)),\n", - " ('B000BU7G1A',\n", - " 'ApHogee Intensive Two Minute Keratin Reconstructor',\n", - " (47, 196, 75, 202, 0)),\n", - " ('B000BU7SMM', 'Aphogee Balancing Moisturizer 16 Oz', (41, 4, 40, 12, 0)),\n", - " ('B000BUFFPO', \"Burt's Bees Herbal Deodorant\", (70, 236, 122, 15, 0)),\n", - " ('B000BVCSP8',\n", - " 'Scruples High Definition Shape Spray, 10.6 Ounce',\n", - " (117, 149, 254, 15, 0)),\n", - " ('B000BW4U58', 'Vitamin E Skin Oil 10000 IU. 4.6 Oz', (99, 202, 122, 37, 0)),\n", - " ('B000BX1Z00',\n", - " 'CHI Silk Infusion Leave-In Treatment, 12 Ounce',\n", - " (39, 46, 43, 114, 0)),\n", - " ('B000BX5FS8',\n", - " 'CHI Straight Guard Smoothing Styling Cream 8.5 oz',\n", - " (155, 145, 201, 152, 0)),\n", - " ('B000BY2N7S', 'NOW Foods Biotin 5000mcg, 120 Vcaps', (167, 54, 41, 246, 0)),\n", - " ('B000BYQBT4',\n", - " 'Obagi Nu Derm Exfoderm Skin Smoothing Lotion-2 oz',\n", - " (196, 1, 163, 38, 0)),\n", - " ...]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "items_with_tuples" - ] - }, { "cell_type": "code", "execution_count": 4, From 438560d6e572f6967e652964a1ac5d2c5e77ed4a Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 2 Jan 2025 22:35:17 +0300 Subject: [PATCH 025/175] tiger next_item_predictions --- configs/train/tiger_train_config.json | 4 ++-- modeling/dataloader/batch_processors.py | 12 ++--------- modeling/models/tiger.py | 28 ++++++++++++++++++------- review.md | 1 + 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 1688a56b..463a984a 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -9,7 +9,6 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "num_negatives_val": 100, "type": "next_item_prediction", "negative_sampler_type": "random" } @@ -45,6 +44,7 @@ "trie": "../data/Beauty/rqvae/trie.pkl", "sequence_prefix": "item", "predictions_prefix": "logits", + "positive_prefix": "positive", "labels_prefix": "labels", "embedding_dim": 64, "num_heads": 2, @@ -70,7 +70,7 @@ { "type": "ce", "predictions_prefix": "logits", - "labels_prefix": "semantic.labels", + "labels_prefix": "semantic.positive", "output_prefix": "downstream_loss", "weight": 1.0 } diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index f1d17e0c..8d51bca9 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,3 +1,4 @@ +from collections import defaultdict import json import torch from models.base import BaseModel @@ -56,22 +57,13 @@ def get_semantic_ids(self, item_ids): return semantic_ids def __call__(self, batch): - processed_batch = {} + processed_batch = defaultdict(list) for key in batch[0].keys(): if key.endswith('.ids'): prefix = key.split('.')[0] assert '{}.length'.format(prefix) in batch[0] - processed_batch[f'{prefix}.ids'] = [] - processed_batch[f'{prefix}.length'] = [] - - processed_batch[f'semantic.{prefix}.ids'] = [] - processed_batch[f'semantic.{prefix}.length'] = [] - - # item_ids = list(itertools.chain(*semantic_ids)) - # length = len(item_ids) # sample[f'{prefix}.length'] - for sample in batch: item_ids = sample[f'{prefix}.ids'] length = sample[f'{prefix}.length'] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 7078e1b0..794f0761 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -13,6 +13,7 @@ def __init__( trie, sequence_prefix, pred_prefix, + positive_prefix, labels_prefix, num_items, max_sequence_length, @@ -56,6 +57,7 @@ def __init__( self._sequence_prefix = sequence_prefix self._pred_prefix = pred_prefix + self._positive_prefix = positive_prefix self._labels_prefix = labels_prefix self._semantic_id_arr = semantic_id_arr @@ -76,6 +78,7 @@ def create_from_config(cls, config, **kwargs): trie=trie, sequence_prefix=config['sequence_prefix'], pred_prefix=config['predictions_prefix'], + positive_prefix=config['positive_prefix'], labels_prefix=config['labels_prefix'], num_items=kwargs['num_items'], max_sequence_length=kwargs['max_sequence_length'], @@ -87,31 +90,40 @@ def create_from_config(cls, config, **kwargs): dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) - - def forward(self, inputs): - all_sample_events = inputs['semantic.{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['semantic.{}.length'.format(self._sequence_prefix)] # (batch_size) + def get_logits(self, inputs, prefix, all_sample_events, all_sample_lengths): # TODOPK pass parameter as args (self._semantic_prefix) - label_events = inputs['semantic.{}.ids'.format(self._labels_prefix)] - label_lengths = inputs['semantic.{}.length'.format(self._labels_prefix)] + label_events = inputs['semantic.{}.ids'.format(prefix)] + label_lengths = inputs['semantic.{}.length'.format(prefix)] embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths, add_codebook_embeddings=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - decoder_outputs = self._apply_decoder(label_events, label_lengths, embeddings, mask) # (batch_size, label_len, embedding_dim) + decoder_outputs = self._apply_decoder( + label_events, label_lengths, embeddings, mask + ) # (batch_size, label_len, embedding_dim) # todo pk correct place for projection? or view -> projection logits = self._projection(decoder_outputs) # (batch_size, seq_len, _semantic_id_arr[0]) - logits = logits.view(-1, self._semantic_id_arr[0]) # (batch_size * seq_len, _semantic_id_arr[0]) + return logits, mask + + def forward(self, inputs): + all_sample_events = inputs['semantic.{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['semantic.{}.length'.format(self._sequence_prefix)] # (batch_size) if self.training: + logits, mask = self.get_logits(inputs, self._positive_prefix, all_sample_events, all_sample_lengths) + + logits = logits[mask] # TODOPK correct? + return { self._pred_prefix: logits } else: + logits, mask = self.get_logits(inputs, self._labels_prefix, all_sample_events, all_sample_lengths) + preds = logits.argmax(dim=-1).view(len(all_sample_lengths), len(self._semantic_id_arr)) # Shape: (batch_size, seq_len) ids = torch.tensor(self._apply_trie(preds)) return ids diff --git a/review.md b/review.md index f9534ce0..12af8109 100644 --- a/review.md +++ b/review.md @@ -2,6 +2,7 @@ ## Todos +- restore my amazon beauty changes (`data_full.pt`) - max_sequence_length (TODOPK), why +1? не смог найти где дописывается в батч сама длина - positions = positions // self._semantic_id_length или reverse? как именно учитываем codebook_post & item_pos (тот же порядок или inverted) From 3a59be8b427396982bbe5e56b8e9b28cfc5f4340 Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 2 Jan 2025 22:53:05 +0300 Subject: [PATCH 026/175] add coverage & sequence dataset --- configs/train/tiger_train_config.json | 26 ++++++++++++- modeling/dataset/base.py | 56 +++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 463a984a..1b7e5115 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -3,7 +3,7 @@ "train_epochs_num": 10, "best_metric": "validation/ndcg@20", "dataset": { - "type": "rqvae_scientific", + "type": "rqvae_sequence", "path_to_data_dir": "../data", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "name": "Beauty", @@ -114,6 +114,18 @@ "recall@20": { "type": "recall", "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 } } }, @@ -146,6 +158,18 @@ "recall@20": { "type": "recall", "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 } } } diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 1b883d5f..9a4e3278 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -618,6 +618,62 @@ def meta(self): 'max_sequence_length': self.max_sequence_length } +class RqvaeSequenceDataset(SequenceDataset, config_name='rqvae_sequence'): + + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, + semantic_id_arr + ): + super().__init__( + train_sampler=train_sampler, + validation_sampler=validation_sampler, + test_sampler=test_sampler, + num_users=num_users, + num_items=num_items, + max_sequence_length=max_sequence_length, + ) + self._semantic_id_arr = semantic_id_arr + + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_config = json.load(open(config['rqvae_train_config_path'])) + semantic_id_arr = rqvae_config['model']['codebook_sizes'] + + scientific_instance = SequenceDataset.create_from_config(config, **kwargs) + + return cls( + train_sampler=scientific_instance._train_sampler, + validation_sampler=scientific_instance._validation_sampler, + test_sampler=scientific_instance._test_sampler, + num_users=scientific_instance.num_users, + num_items=scientific_instance.num_items, + max_sequence_length=scientific_instance.max_sequence_length, + semantic_id_arr=semantic_id_arr, + ) + + @property + def num_items(self): + return self._semantic_id_arr[0] # TODOPK? + + @property + def max_sequence_length(self): + return self._max_sequence_length * len(self._semantic_id_arr) + + @property + def meta(self): + return { + 'num_users': self.num_users, + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length, + 'semantic_id_arr': self._semantic_id_arr + } + class RqvaeScientificDataset(ScientificDataset, config_name='rqvae_scientific'): def __init__( From e78a5aedd0457ff6e406d63cfcc5aa6ab2f41065 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 3 Jan 2025 13:10:27 +0300 Subject: [PATCH 027/175] unify datasets --- configs/train/tiger_train_config.json | 4 +- modeling/dataset/base.py | 111 -------------------------- modeling/models/tiger.py | 13 +-- 3 files changed, 10 insertions(+), 118 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 1b7e5115..0f28fa01 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -3,9 +3,8 @@ "train_epochs_num": 10, "best_metric": "validation/ndcg@20", "dataset": { - "type": "rqvae_sequence", + "type": "sequence", "path_to_data_dir": "../data", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "name": "Beauty", "max_sequence_length": 50, "samplers": { @@ -42,6 +41,7 @@ "model": { "type": "tiger", "trie": "../data/Beauty/rqvae/trie.pkl", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "sequence_prefix": "item", "predictions_prefix": "logits", "positive_prefix": "positive", diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 9a4e3278..dce14d8f 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -617,119 +617,8 @@ def meta(self): 'num_items': self.num_items, 'max_sequence_length': self.max_sequence_length } - -class RqvaeSequenceDataset(SequenceDataset, config_name='rqvae_sequence'): - def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, - semantic_id_arr - ): - super().__init__( - train_sampler=train_sampler, - validation_sampler=validation_sampler, - test_sampler=test_sampler, - num_users=num_users, - num_items=num_items, - max_sequence_length=max_sequence_length, - ) - self._semantic_id_arr = semantic_id_arr - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_config = json.load(open(config['rqvae_train_config_path'])) - semantic_id_arr = rqvae_config['model']['codebook_sizes'] - - scientific_instance = SequenceDataset.create_from_config(config, **kwargs) - - return cls( - train_sampler=scientific_instance._train_sampler, - validation_sampler=scientific_instance._validation_sampler, - test_sampler=scientific_instance._test_sampler, - num_users=scientific_instance.num_users, - num_items=scientific_instance.num_items, - max_sequence_length=scientific_instance.max_sequence_length, - semantic_id_arr=semantic_id_arr, - ) - - @property - def num_items(self): - return self._semantic_id_arr[0] # TODOPK? - - @property - def max_sequence_length(self): - return self._max_sequence_length * len(self._semantic_id_arr) - - @property - def meta(self): - return { - 'num_users': self.num_users, - 'num_items': self.num_items, - 'max_sequence_length': self.max_sequence_length, - 'semantic_id_arr': self._semantic_id_arr - } - -class RqvaeScientificDataset(ScientificDataset, config_name='rqvae_scientific'): - def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, - semantic_id_arr - ): - super().__init__( - train_sampler=train_sampler, - validation_sampler=validation_sampler, - test_sampler=test_sampler, - num_users=num_users, - num_items=num_items, - max_sequence_length=max_sequence_length, - ) - self._semantic_id_arr = semantic_id_arr - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_config = json.load(open(config['rqvae_train_config_path'])) - semantic_id_arr = rqvae_config['model']['codebook_sizes'] - - scientific_instance = ScientificDataset.create_from_config(config, **kwargs) - - return cls( - train_sampler=scientific_instance._train_sampler, - validation_sampler=scientific_instance._validation_sampler, - test_sampler=scientific_instance._test_sampler, - num_users=scientific_instance.num_users, - num_items=scientific_instance.num_items, - max_sequence_length=scientific_instance.max_sequence_length, - semantic_id_arr=semantic_id_arr, - ) - - @property - def num_items(self): - return self._semantic_id_arr[0] # TODOPK? - - @property - def max_sequence_length(self): - return self._max_sequence_length * len(self._semantic_id_arr) - - @property - def meta(self): - return { - 'num_users': self.num_users, - 'num_items': self.num_items, - 'max_sequence_length': self.max_sequence_length, - 'semantic_id_arr': self._semantic_id_arr - } - class RqVaeDataset(BaseDataset, config_name='rqvae'): def __init__( diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 794f0761..0c567217 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,9 +1,9 @@ +import json from utils import DEVICE, create_masked_tensor, get_activation_function from models.base import SequentialTorchModel import pickle import torch from torch import nn -import random class TigerModel(SequentialTorchModel, config_name='tiger'): @@ -52,7 +52,6 @@ def __init__( self._decoder = nn.TransformerDecoder(transformer_decoder_layer, num_layers) self._trie = trie - assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) self._sequence_prefix = sequence_prefix @@ -73,6 +72,10 @@ def __init__( def create_from_config(cls, config, **kwargs): with open(config['trie'], 'rb') as f: trie = pickle.load(f) + + rqvae_config = json.load(open(config['rqvae_train_config_path'])) + semantic_id_arr = rqvae_config['model']['codebook_sizes'] + assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) return cls( trie=trie, @@ -80,13 +83,13 @@ def create_from_config(cls, config, **kwargs): pred_prefix=config['predictions_prefix'], positive_prefix=config['positive_prefix'], labels_prefix=config['labels_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], + num_items=semantic_id_arr[0], + max_sequence_length=kwargs['max_sequence_length'] * len(semantic_id_arr), embedding_dim=config['embedding_dim'], num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), num_layers=config['num_layers'], dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - semantic_id_arr=kwargs['semantic_id_arr'], + semantic_id_arr=semantic_id_arr, dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) From b0809f5140133d21d7c15d9717cc86b111d41fe3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 3 Jan 2025 13:51:37 +0300 Subject: [PATCH 028/175] small fxs --- configs/train/tiger_train_config.json | 1 - modeling/models/rqvae.py | 3 --- modeling/models/tiger.py | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 0f28fa01..ae27de61 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -52,7 +52,6 @@ "dim_feedforward": 256, "dropout": 0.3, "activation": "gelu", - "use_ce": true, "layer_norm_eps": 1e-9, "initializer_range": 0.02 }, diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index de4bbf58..56185a4d 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,9 +1,6 @@ from models.base import TorchModel import torch - -import torch - import faiss class RqVaeModel(TorchModel, config_name='rqvae'): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 0c567217..9ab87e14 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -107,7 +107,7 @@ def get_logits(self, inputs, prefix, all_sample_events, all_sample_lengths): decoder_outputs = self._apply_decoder( label_events, label_lengths, embeddings, mask ) # (batch_size, label_len, embedding_dim) - # todo pk correct place for projection? or view -> projection + # todopk correct place for projection? or view -> projection logits = self._projection(decoder_outputs) # (batch_size, seq_len, _semantic_id_arr[0]) return logits, mask From 2f70ea77b26d3d038edc756f3edce3e374730e31 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 3 Jan 2025 13:57:35 +0300 Subject: [PATCH 029/175] remove multi domain scientific dataset --- modeling/dataset/base.py | 120 --------------------------------------- 1 file changed, 120 deletions(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index dce14d8f..1cb01562 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -687,123 +687,3 @@ def meta(self): 'num_items': self.num_items, 'train_sampler': self._train_sampler } - - -class MultiDomainScientificDataset(ScientificDataset, config_name='multi_domain_scientific'): - - def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, - target_domain, - other_domains - ): - super().__init__(train_sampler, validation_sampler, test_sampler, num_users, num_items, max_sequence_length) - self._target_domain = target_domain - self._other_domains = other_domains - - @classmethod - def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - target_domain, other_domains = config['target_domain'], config['other_domains'] - domains = [target_domain] + other_domains - max_sequence_length = config['max_sequence_length'] - max_user_idx, max_item_idx = 0, 0 - - train_dataset, validation_dataset, test_dataset = {}, {}, {} - max_user_idx_by_domain, max_item_idx_by_domain = {}, {} - - for domain in domains: - dataset_path = os.path.join(data_dir_path, domain, '{}.txt'.format('all_data')) - with open(dataset_path, 'r') as f: - data = f.readlines() - train_dataset[domain], validation_dataset[domain], test_dataset[domain] = [], [], [] - - for sample in data: - sample = sample.strip('\n').split(' ') - user_idx = int(sample[0]) - item_ids = [int(item_id) for item_id in sample[1:]] - - max_user_idx = max(max_user_idx, user_idx) - max_item_idx = max(max_item_idx, max(item_ids)) - - assert len(item_ids) >= 5 - - train_dataset[domain].append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[:-2][-max_sequence_length:], - 'item.length': len(item_ids[:-2][-max_sequence_length:]) - }) - assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) - validation_dataset[domain].append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[:-1][-max_sequence_length:], - 'item.length': len(item_ids[:-1][-max_sequence_length:]) - }) - assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) - test_dataset[domain].append({ - 'user.ids': [user_idx], - 'user.length': 1, - 'item.ids': item_ids[-max_sequence_length:], - 'item.length': len(item_ids[-max_sequence_length:]) - }) - assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) - - max_user_idx_by_domain[domain] = max_user_idx - max_item_idx_by_domain[domain] = max_item_idx - - logger.info('Max user idx: {}'.format(max_user_idx)) - logger.info('Max item idx: {}'.format(max_item_idx)) - logger.info('Max sequence length: {}'.format(max_sequence_length)) - for domain in domains: - logger.info('{} domain Train dataset size: {}'.format(domain, len(train_dataset[domain]))) - logger.info('{} domain Test dataset size: {}'.format(domain, len(test_dataset[domain]))) - logger.info('{} domain dataset sparsity: {}'.format( - domain, (len(train_dataset[domain]) + len(test_dataset[domain])) / max_user_idx_by_domain[domain] / max_item_idx_by_domain[domain] - )) - - # TODO replace unodomain samplers with multidomain ones - train_sampler = TrainSampler.create_from_config( - dict(config['samplers'], - **{'target_domain': target_domain, - 'other_domains': other_domains - }), - dataset=train_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - validation_sampler = EvalSampler.create_from_config( - dict(config['samplers'], - **{'target_domain': target_domain, - 'other_domains': other_domains - }), - dataset=validation_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - test_sampler = EvalSampler.create_from_config( - dict(config['samplers'], - **{'target_domain': target_domain, - 'other_domains': other_domains - }), - dataset=test_dataset, - num_users=max_user_idx, - num_items=max_item_idx - ) - - return cls( - train_sampler=train_sampler, - validation_sampler=validation_sampler, - test_sampler=test_sampler, - num_users=max_user_idx, - num_items=max_item_idx, - max_sequence_length=max_sequence_length, - target_domain=target_domain, - other_domains=other_domains - ) From d35f291f38d5fc965a846f9d0de02cd6cfed2fc3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 3 Jan 2025 14:36:56 +0300 Subject: [PATCH 030/175] add item<->embedding mapping --- notebooks/AmazonBeautyDatasetStatistics.ipynb | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/notebooks/AmazonBeautyDatasetStatistics.ipynb b/notebooks/AmazonBeautyDatasetStatistics.ipynb index dab1ab5b..e010eecc 100644 --- a/notebooks/AmazonBeautyDatasetStatistics.ipynb +++ b/notebooks/AmazonBeautyDatasetStatistics.ipynb @@ -376,6 +376,29 @@ " ] + [str(test_sample['next_interaction']['item_id'])]))\n", " f.write('\\n')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "868d5db5", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import pandas as pd\n", + "\n", + "deduped_mapping = df.drop_duplicates(subset=['item_id', 'raw_item_id'])\n", + "\n", + "embs = torch.load('../data/df_with_embs.pt')\n", + "\n", + "merged = pd.merge(deduped_mapping, embs, 'inner', left_on='raw_item_id', right_on='asin')\n", + "merged['item_id'] = merged['item_id'].map(lambda x: item_mapping[x])\n", + " \n", + "assert len(merged) == len(merged.item_id.unique())\n", + "merged = merged.set_index('item_id')\n", + "\n", + "torch.save(merged, '../data/Beauty/data_full.pt')" + ] } ], "metadata": { From a097a0eaf5826c97316575f635f6044bdafa32a8 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 4 Jan 2025 14:31:30 +0300 Subject: [PATCH 031/175] broken grid config (no eval / validation callbacks) --- configs/train/rqvae_train_grid_config.json | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 configs/train/rqvae_train_grid_config.json diff --git a/configs/train/rqvae_train_grid_config.json b/configs/train/rqvae_train_grid_config.json new file mode 100644 index 00000000..e90a6cfa --- /dev/null +++ b/configs/train/rqvae_train_grid_config.json @@ -0,0 +1,86 @@ +{ + "experiment_name": "rqvae_beauty_grid", + "train_epochs_num": 50, + "dataset": { + "type": "rqvae", + "path_to_data_dir": "../data", + "name": "Beauty", + "samplers": { + "type": "identity" + } + }, + "dataset_params": { + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "embed" + }, + "drop_last": false, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "embed" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "rqvae", + "input_dim": 512, + "codebook_sizes": [256, 256, 256, 256], + "should_init_codebooks": true, + "should_reinit_unused_clusters": true, + "initializer_range": 0.02 + }, + "model_params": { + "n_iter": [ + 100, + 500, + 2000 + ], + "hidden_dim": [ + 128, + 512, + 2048 + ] + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 1e-4 + }, + "clip_grad_threshold": 5.0, + "scheduler": { + "type": "step", + "step_size": 100, + "gamma": 0.96 + } + }, + "optimizer_params": { + }, + "loss": { + "type": "rqvae_loss", + "beta": 0.25, + "output_prefix": "loss" + }, + "loss_params": { + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + } + ] + } +} From 93064c66b43d62e30f96a1a1306c98aeb0c4e531 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 4 Jan 2025 18:45:27 +0300 Subject: [PATCH 032/175] tiger_new model --- configs/train/tiger_train_config.json | 11 +- modeling/models/__init__.py | 3 +- modeling/models/tiger_new.py | 221 ++++++++++++++++++++++++++ review.md | 3 +- 4 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 modeling/models/tiger_new.py diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index ae27de61..e6a9e1d0 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -39,18 +39,19 @@ } }, "model": { - "type": "tiger", + "type": "tiger_new", "trie": "../data/Beauty/rqvae/trie.pkl", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "sequence_prefix": "item", "predictions_prefix": "logits", "positive_prefix": "positive", "labels_prefix": "labels", - "embedding_dim": 64, - "num_heads": 2, - "num_layers": 2, + "embedding_dim": 128, + "num_heads": 4, + "num_encoder_layers": 6, + "num_decoder_layers": 6, "dim_feedforward": 256, - "dropout": 0.3, + "dropout": 0.2, "activation": "gelu", "layer_norm_eps": 1e-9, "initializer_range": 0.02 diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index a169d41e..60ba64b6 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -16,4 +16,5 @@ from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel from .rqvae import RqVaeModel -from .tiger import TigerModel +# from .tiger import TigerModel +from .tiger_new import TigerModel diff --git a/modeling/models/tiger_new.py b/modeling/models/tiger_new.py new file mode 100644 index 00000000..1f7d19b8 --- /dev/null +++ b/modeling/models/tiger_new.py @@ -0,0 +1,221 @@ +import json +from turtle import pos +from utils import DEVICE, create_masked_tensor, get_activation_function +from models.base import SequentialTorchModel +import pickle +import torch +from torch import nn + + +class TigerModel(SequentialTorchModel, config_name="tiger_new"): + + def __init__( + self, + trie, + sequence_prefix, + pred_prefix, + positive_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_encoder_layers, + num_decoder_layers, + dim_feedforward, + semantic_id_arr, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_encoder_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True, + ) + + self._trie = trie + + self._output_projection = nn.Linear(embedding_dim, semantic_id_arr[0]) + + self._sequence_prefix = sequence_prefix + self._pred_prefix = pred_prefix + self._positive_prefix = positive_prefix + self._labels_prefix = labels_prefix + + self._semantic_id_arr = semantic_id_arr + + self._level_embeddings = nn.ModuleList( + [ + nn.Embedding(num_items + 2, embedding_dim) + for _ in range(len(semantic_id_arr)) + ] + ) + + self._positional_embeddings = nn.Embedding(max_sequence_length, embedding_dim) + + self._codebook_embeddings = nn.Embedding( + num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim + ) + + self.transformer = nn.Transformer( + d_model=embedding_dim, + nhead=num_heads, + num_encoder_layers=num_encoder_layers, + num_decoder_layers=num_decoder_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=get_activation_function(activation), + layer_norm_eps=layer_norm_eps, + batch_first=True, + ) + + self._init_weights(initializer_range) + + @classmethod + def create_from_config(cls, config, **kwargs): + with open(config["trie"], "rb") as f: + trie = pickle.load(f) + + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + semantic_id_arr = rqvae_config["model"]["codebook_sizes"] + assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) + + return cls( + trie=trie, + sequence_prefix=config["sequence_prefix"], + pred_prefix=config["predictions_prefix"], + positive_prefix=config["positive_prefix"], + labels_prefix=config["labels_prefix"], + num_items=semantic_id_arr[0], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_encoder_layers=config["num_encoder_layers"], + num_decoder_layers=config["num_decoder_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + semantic_id_arr=semantic_id_arr, + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + ) + + def get_logits(self, inputs, prefix, flattened_events, lengths): + src_embeddings, src_mask = self.get_embeddings( + flattened_events, lengths + ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) + + tgt_flattened_events = inputs[ + "semantic.{}.ids".format(prefix) + ] # (all_batch_events) + tgt_lengths = inputs["semantic.{}.length".format(prefix)] # (batch_size) + + tgt_embeddings, tgt_mask = self.get_embeddings( + tgt_flattened_events, tgt_lengths + ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) + + transformer_output = self.transformer( + src_embeddings, + tgt_embeddings, + src_key_padding_mask=~src_mask, + tgt_key_padding_mask=~tgt_mask, + ) # (batch_size, seq_len, embedding_dim) + + logits = self._output_projection(transformer_output) + + return logits, tgt_mask + + def forward(self, inputs): + all_sample_events = inputs[ + "semantic.{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "semantic.{}.length".format(self._sequence_prefix) + ] # (batch_size) + + if self.training: + logits, tgt_mask = self.get_logits( + inputs, self._positive_prefix, all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) + + logits = logits[tgt_mask] + + return {self._pred_prefix: logits} + else: + logits, _ = self.get_logits( + inputs, self._labels_prefix, all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) + preds = logits.argmax(dim=-1) + ids = torch.tensor(self._apply_trie(preds)) + return ids + + def _apply_trie(self, preds): # TODOPK make this faster (how?) + native_repr = [tuple(row.tolist()) for row in preds] + ids = [] + for semantic_id in native_repr: + cur_result = set() + prefixes = [semantic_id[:i] for i in range(len(semantic_id), 0, -1)] + for prefix in prefixes: + prefix_ids = self._trie.search_prefix( + prefix + ) # todo handle collisions (not overwrite) + for id in prefix_ids: + cur_result.add(id) + if len(cur_result) >= 20: + break + if len(cur_result) >= 20: + break + + cur_result = list(cur_result) + while len(cur_result) < 20: + cur_result.append(0) # solve empty event if shortest prefix + ids.append(cur_result) + return ids + + def get_embeddings(self, flattened_events, lengths): + num_levels = len(self._semantic_id_arr) + + # Heirarchical embeddings + level_indices = torch.arange(len(flattened_events), device=DEVICE) % num_levels + item_embeddings = torch.zeros( + (len(flattened_events), self._embedding_dim), device=DEVICE + ) + for level in range(num_levels): + level_mask = level_indices == level + item_embeddings[level_mask] = self._level_embeddings[level]( + flattened_events[level_mask] + ) + + item_embeddings, mask = create_masked_tensor( + data=item_embeddings, lengths=lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + batch_size = mask.shape[0] + seq_len = mask.shape[1] + + # Positional embeddings + positions = torch.arange(seq_len, device=DEVICE).repeat(batch_size, 1) + positions = positions.masked_fill(~mask, 0) # (batch_size, max_len) + pos_embeds = self._positional_embeddings( + positions // num_levels + ) # (batch_size, seq_len, embedding_dim) + + # Codebook embeddings + codebook_indices = ( + torch.arange(seq_len, device=DEVICE).repeat(batch_size, 1) % num_levels + ) + codebook_indices = codebook_indices.masked_fill( + ~mask, 0 + ) # (batch_size, seq_len) + hierarchy_embeds = self._codebook_embeddings( + codebook_indices + ) # (batch_size, seq_len, embedding_dim) + + return item_embeddings + pos_embeds + hierarchy_embeds, mask diff --git a/review.md b/review.md index 12af8109..09079c57 100644 --- a/review.md +++ b/review.md @@ -2,7 +2,8 @@ ## Todos -- restore my amazon beauty changes (`data_full.pt`) +- check enc / dec model +- correct logits indexing with tgt_mask? - max_sequence_length (TODOPK), why +1? не смог найти где дописывается в батч сама длина - positions = positions // self._semantic_id_length или reverse? как именно учитываем codebook_post & item_pos (тот же порядок или inverted) From eb88dfa36f5a376e6ad959a20afb33a8b70454e6 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 4 Jan 2025 21:58:05 +0300 Subject: [PATCH 033/175] fix tiger (separate layers for decoder) --- modeling/models/base.py | 35 ++-- modeling/models/tiger.py | 333 +++++++++++++++++++---------------- modeling/models/tiger_new.py | 221 ----------------------- review.md | 7 +- 4 files changed, 201 insertions(+), 395 deletions(-) delete mode 100644 modeling/models/tiger_new.py diff --git a/modeling/models/base.py b/modeling/models/base.py index ccd02ce7..6405d960 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -4,6 +4,7 @@ import torch import torch.nn as nn +from utils import DEVICE, MetaParent, create_masked_tensor, get_activation_function class BaseModel(metaclass=MetaParent): @@ -80,7 +81,7 @@ def __init__( embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value # TODOPK + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value embedding_dim=embedding_dim ) @@ -98,7 +99,7 @@ def __init__( ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - def _apply_sequential_encoder(self, events, lengths, add_cls_token=False, add_codebook_embeddings=False): + def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( @@ -108,17 +109,10 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False, add_co batch_size = mask.shape[0] seq_len = mask.shape[1] - - position_embeddings = self._get_position_embeddings( - embeddings, lengths, mask, batch_size, seq_len - ) # (batch_size, seq_len, embedding_dim) - - if add_codebook_embeddings: - codebook_embeddings = self._get_codebook_embeddings( - embeddings, lengths, mask, batch_size, seq_len - ) # (batch_size, seq_len, embedding_dim) - embeddings = embeddings + codebook_embeddings - + + position_embeddings = self._encoder_pos_embeddings(lengths, mask) + assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) @@ -146,15 +140,14 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False, add_co ) # (batch_size, seq_len, embedding_dim) return embeddings, mask - - def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): - raise NotImplementedError - def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): - positions = torch.arange( # TODOPK invert decoder (position.reverse) + def _encoder_pos_embeddings(self, lengths, mask): + batch_size = mask.shape[0] + seq_len = mask.shape[1] + + positions = torch.arange( start=seq_len - 1, end=-1, step=-1, device=mask.device )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) @@ -163,10 +156,8 @@ def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_le data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) - assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - return position_embeddings - + @staticmethod def _add_cls_token(items, lengths, cls_token_id=0): num_items = items.shape[0] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 9ab87e14..3fb4ecb2 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,31 +1,32 @@ import json -from utils import DEVICE, create_masked_tensor, get_activation_function -from models.base import SequentialTorchModel import pickle + import torch +from models.base import SequentialTorchModel from torch import nn +from utils import DEVICE, create_masked_tensor, get_activation_function -class TigerModel(SequentialTorchModel, config_name='tiger'): +class TigerModel(SequentialTorchModel, config_name="tiger"): def __init__( - self, - trie, - sequence_prefix, - pred_prefix, - positive_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - semantic_id_arr, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + trie, + sequence_prefix, + pred_prefix, + positive_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + semantic_id_arr, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -37,9 +38,17 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) - + self._decoder_position_embeddings = nn.Embedding( + num_embeddings=max_sequence_length + + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim, + ) + self._decoder_codebook_embeddings = nn.Embedding( + num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim + ) + transformer_decoder_layer = nn.TransformerDecoderLayer( d_model=embedding_dim, nhead=num_heads, @@ -47,193 +56,219 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True + batch_first=True, ) self._decoder = nn.TransformerDecoder(transformer_decoder_layer, num_layers) self._trie = trie - + self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) - + self._sequence_prefix = sequence_prefix self._pred_prefix = pred_prefix self._positive_prefix = positive_prefix self._labels_prefix = labels_prefix - + self._semantic_id_arr = semantic_id_arr - + self._codebook_embeddings = nn.Embedding( - num_embeddings=len(semantic_id_arr), # in order to include `max_sequence_length` value - embedding_dim=embedding_dim + num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim ) + self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) + self._decoder_dropout = nn.Dropout(dropout) + self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): - with open(config['trie'], 'rb') as f: + with open(config["trie"], "rb") as f: trie = pickle.load(f) - - rqvae_config = json.load(open(config['rqvae_train_config_path'])) - semantic_id_arr = rqvae_config['model']['codebook_sizes'] + + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + semantic_id_arr = rqvae_config["model"]["codebook_sizes"] assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) - + return cls( trie=trie, - sequence_prefix=config['sequence_prefix'], - pred_prefix=config['predictions_prefix'], - positive_prefix=config['positive_prefix'], - labels_prefix=config['labels_prefix'], + sequence_prefix=config["sequence_prefix"], + pred_prefix=config["predictions_prefix"], + positive_prefix=config["positive_prefix"], + labels_prefix=config["labels_prefix"], num_items=semantic_id_arr[0], - max_sequence_length=kwargs['max_sequence_length'] * len(semantic_id_arr), - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), semantic_id_arr=semantic_id_arr, - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) - + def get_logits(self, inputs, prefix, all_sample_events, all_sample_lengths): - # TODOPK pass parameter as args (self._semantic_prefix) - - label_events = inputs['semantic.{}.ids'.format(prefix)] - label_lengths = inputs['semantic.{}.length'.format(prefix)] - - embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths, add_codebook_embeddings=True - ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - + encoder_embeddings, encoder_mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) + + label_events = inputs["semantic.{}.ids".format(prefix)] + label_lengths = inputs["semantic.{}.length".format(prefix)] + decoder_outputs = self._apply_decoder( - label_events, label_lengths, embeddings, mask - ) # (batch_size, label_len, embedding_dim) - # todopk correct place for projection? or view -> projection - logits = self._projection(decoder_outputs) # (batch_size, seq_len, _semantic_id_arr[0]) - - return logits, mask + label_events, label_lengths, encoder_embeddings, encoder_mask + ) # (batch_size, label_len, embedding_dim) + + # TODOPK correct place for projection? or view -> projection + logits = self._projection( + decoder_outputs + ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) + + return logits def forward(self, inputs): - all_sample_events = inputs['semantic.{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['semantic.{}.length'.format(self._sequence_prefix)] # (batch_size) - + all_sample_events = inputs[ + "semantic.{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "semantic.{}.length".format(self._sequence_prefix) + ] # (batch_size) + if self.training: - logits, mask = self.get_logits(inputs, self._positive_prefix, all_sample_events, all_sample_lengths) - - logits = logits[mask] # TODOPK correct? - - return { - self._pred_prefix: logits - } + logits = self.get_logits( + inputs, self._positive_prefix, all_sample_events, all_sample_lengths + ) + + return {self._pred_prefix: logits} else: - logits, mask = self.get_logits(inputs, self._labels_prefix, all_sample_events, all_sample_lengths) - - preds = logits.argmax(dim=-1).view(len(all_sample_lengths), len(self._semantic_id_arr)) # Shape: (batch_size, seq_len) + logits = self.get_logits( + inputs, self._labels_prefix, all_sample_events, all_sample_lengths + ) + + preds = logits.argmax(dim=-1) # (batch_size, dec_seq_len) ids = torch.tensor(self._apply_trie(preds)) return ids - - def _apply_trie(self, preds): # TODOPK make this faster (how?) + + def _apply_trie(self, preds): # TODOPK make this faster (how?) native_repr = [tuple(row.tolist()) for row in preds] ids = [] for semantic_id in native_repr: cur_result = set() - prefixes = [ - semantic_id[:i] for i in range(len(semantic_id), 0, -1) - ] + prefixes = [semantic_id[:i] for i in range(len(semantic_id), 0, -1)] for prefix in prefixes: - prefix_ids = self._trie.search_prefix(prefix) # todo handle collisions (not overwrite) + prefix_ids = self._trie.search_prefix( + prefix + ) # todo handle collisions (not overwrite) for id in prefix_ids: cur_result.add(id) if len(cur_result) >= 20: break if len(cur_result) >= 20: break - + cur_result = list(cur_result) while len(cur_result) < 20: - cur_result.append(0) # solve empty event if shortest prefix + cur_result.append(0) # solve empty event if shortest prefix ids.append(cur_result) return ids - - def _apply_decoder(self, label_events, label_lengths, encoder_embeddings, encoder_mask): - # делаем по аналогии с encoder'ом? - embeddings = self._item_embeddings(label_events) # (batch_size * label_len, embedding_dim) - - embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=label_lengths + + def _apply_decoder( + self, label_events, label_lengths, encoder_embeddings, encoder_mask + ): + tgt_embeddings = self._item_embeddings( + label_events + ) # (all_batch_events, embedding_dim) + # TODOPK share same embeddings with encoder + + tgt_embeddings, tgt_mask = create_masked_tensor( + data=tgt_embeddings, lengths=label_lengths ) # (batch_size, label_len, embedding_dim), (batch_size, label_len) - - batch_size = mask.shape[0] - label_len = mask.shape[1] - - position_embeddings = self._get_position_embeddings( - embeddings, label_lengths, mask, batch_size, label_len - ) # (batch_size, label_len, embedding_dim) - codebook_embeddings = self._get_codebook_embeddings( - embeddings, label_lengths, mask, batch_size, label_len - ) # (batch_size, label_len, embedding_dim) - - embeddings = embeddings + codebook_embeddings - embeddings = embeddings + position_embeddings - - embeddings = self._layernorm(embeddings) - embeddings = self._dropout(embeddings) - embeddings[~mask] = 0 + label_len = tgt_mask.shape[1] + + assert label_len == len(self._semantic_id_arr) + + position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) + assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) - causal_mask = torch.tril( - torch.ones(label_len, label_len) - ).bool().to(DEVICE) # (label_len, label_len) + tgt_embeddings = tgt_embeddings + position_embeddings + + tgt_embeddings = self._decoder_layernorm( + tgt_embeddings + ) # (batch_size, seq_len, embedding_dim) + tgt_embeddings = self._decoder_dropout( + tgt_embeddings + ) # (batch_size, seq_len, embedding_dim) + + tgt_embeddings[~tgt_mask] = 0 + + causal_mask = ( + torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) + ) # (seq_len, seq_len) + # TODOPK -inf? decoder_outputs = self._decoder( - tgt=embeddings, + tgt=tgt_embeddings, memory=encoder_embeddings, tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, - tgt_key_padding_mask=~mask + tgt_key_padding_mask=~tgt_mask, ) # (batch_size, label_len, embedding_dim) - + return decoder_outputs - - def _get_position_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): - positions = torch.arange( # TODOPK invert decoder (position.reverse) - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - - positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) - positions = positions[positions_mask] # (all_batch_events) - - positions = positions // len(self._semantic_id_arr) - # 5 5 5 5 4 4 4 4 3 3 3 3 ... - - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) - position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths - ) # (batch_size, seq_len, embedding_dim) - assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - - return position_embeddings - - def _get_codebook_embeddings(self, embeddings, lengths, mask, batch_size, seq_len): - positions = torch.arange( # TODOPK invert decoder (position.reverse) - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - + def _decoder_pos_embeddings(self, lengths, mask): + def position_lambda(x): # TODOPK share layers with encoder & fix + return x // len(self._semantic_id_arr) # 5 5 5 4 4 4 3 3 3 ... + + position_embeddings = self._get_position_embeddings( + lengths, mask, position_lambda, self._decoder_position_embeddings + ) + + def codebook_lambda(x): + return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... + + codebook_embeddings = self._get_codebook_embeddings( + lengths, mask, codebook_lambda, self._decoder_codebook_embeddings + ) + + return position_embeddings + codebook_embeddings + + def _encoder_pos_embeddings(self, lengths, mask): + def position_lambda(x): + return x // len(self._semantic_id_arr) # 5 5 5 4 4 4 3 3 3 ... + + position_embeddings = self._get_position_embeddings( + lengths, mask, position_lambda, self._position_embeddings + ) + + def codebook_lambda(x): + return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... + + codebook_embeddings = self._get_codebook_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return position_embeddings + codebook_embeddings + + def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): + batch_size = mask.shape[0] + seq_len = mask.shape[1] + + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - - positions = positions.flip(-1) % len(self._semantic_id_arr) # (all_batch_events) - # flip so first item has (0, 1, 2, 3) not (3, 2, 1, 0) semantic_id embeddings - # 0 1 2 3 0 1 2 3 0 1 2 3 - - position_embeddings = self._codebook_embeddings(positions) # (all_batch_events, embedding_dim) + + positions = position_lambda(positions) # (all_batch_events) + + position_embeddings = embedding_layer( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths + data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) - assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - + return position_embeddings diff --git a/modeling/models/tiger_new.py b/modeling/models/tiger_new.py deleted file mode 100644 index 1f7d19b8..00000000 --- a/modeling/models/tiger_new.py +++ /dev/null @@ -1,221 +0,0 @@ -import json -from turtle import pos -from utils import DEVICE, create_masked_tensor, get_activation_function -from models.base import SequentialTorchModel -import pickle -import torch -from torch import nn - - -class TigerModel(SequentialTorchModel, config_name="tiger_new"): - - def __init__( - self, - trie, - sequence_prefix, - pred_prefix, - positive_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_encoder_layers, - num_decoder_layers, - dim_feedforward, - semantic_id_arr, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - ): - super().__init__( - num_items=num_items, - max_sequence_length=max_sequence_length, - embedding_dim=embedding_dim, - num_heads=num_heads, - num_layers=num_encoder_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=activation, - layer_norm_eps=layer_norm_eps, - is_causal=True, - ) - - self._trie = trie - - self._output_projection = nn.Linear(embedding_dim, semantic_id_arr[0]) - - self._sequence_prefix = sequence_prefix - self._pred_prefix = pred_prefix - self._positive_prefix = positive_prefix - self._labels_prefix = labels_prefix - - self._semantic_id_arr = semantic_id_arr - - self._level_embeddings = nn.ModuleList( - [ - nn.Embedding(num_items + 2, embedding_dim) - for _ in range(len(semantic_id_arr)) - ] - ) - - self._positional_embeddings = nn.Embedding(max_sequence_length, embedding_dim) - - self._codebook_embeddings = nn.Embedding( - num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim - ) - - self.transformer = nn.Transformer( - d_model=embedding_dim, - nhead=num_heads, - num_encoder_layers=num_encoder_layers, - num_decoder_layers=num_decoder_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=get_activation_function(activation), - layer_norm_eps=layer_norm_eps, - batch_first=True, - ) - - self._init_weights(initializer_range) - - @classmethod - def create_from_config(cls, config, **kwargs): - with open(config["trie"], "rb") as f: - trie = pickle.load(f) - - rqvae_config = json.load(open(config["rqvae_train_config_path"])) - semantic_id_arr = rqvae_config["model"]["codebook_sizes"] - assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) - - return cls( - trie=trie, - sequence_prefix=config["sequence_prefix"], - pred_prefix=config["predictions_prefix"], - positive_prefix=config["positive_prefix"], - labels_prefix=config["labels_prefix"], - num_items=semantic_id_arr[0], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_encoder_layers=config["num_encoder_layers"], - num_decoder_layers=config["num_decoder_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - semantic_id_arr=semantic_id_arr, - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - ) - - def get_logits(self, inputs, prefix, flattened_events, lengths): - src_embeddings, src_mask = self.get_embeddings( - flattened_events, lengths - ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) - - tgt_flattened_events = inputs[ - "semantic.{}.ids".format(prefix) - ] # (all_batch_events) - tgt_lengths = inputs["semantic.{}.length".format(prefix)] # (batch_size) - - tgt_embeddings, tgt_mask = self.get_embeddings( - tgt_flattened_events, tgt_lengths - ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) - - transformer_output = self.transformer( - src_embeddings, - tgt_embeddings, - src_key_padding_mask=~src_mask, - tgt_key_padding_mask=~tgt_mask, - ) # (batch_size, seq_len, embedding_dim) - - logits = self._output_projection(transformer_output) - - return logits, tgt_mask - - def forward(self, inputs): - all_sample_events = inputs[ - "semantic.{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "semantic.{}.length".format(self._sequence_prefix) - ] # (batch_size) - - if self.training: - logits, tgt_mask = self.get_logits( - inputs, self._positive_prefix, all_sample_events, all_sample_lengths - ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) - - logits = logits[tgt_mask] - - return {self._pred_prefix: logits} - else: - logits, _ = self.get_logits( - inputs, self._labels_prefix, all_sample_events, all_sample_lengths - ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) - preds = logits.argmax(dim=-1) - ids = torch.tensor(self._apply_trie(preds)) - return ids - - def _apply_trie(self, preds): # TODOPK make this faster (how?) - native_repr = [tuple(row.tolist()) for row in preds] - ids = [] - for semantic_id in native_repr: - cur_result = set() - prefixes = [semantic_id[:i] for i in range(len(semantic_id), 0, -1)] - for prefix in prefixes: - prefix_ids = self._trie.search_prefix( - prefix - ) # todo handle collisions (not overwrite) - for id in prefix_ids: - cur_result.add(id) - if len(cur_result) >= 20: - break - if len(cur_result) >= 20: - break - - cur_result = list(cur_result) - while len(cur_result) < 20: - cur_result.append(0) # solve empty event if shortest prefix - ids.append(cur_result) - return ids - - def get_embeddings(self, flattened_events, lengths): - num_levels = len(self._semantic_id_arr) - - # Heirarchical embeddings - level_indices = torch.arange(len(flattened_events), device=DEVICE) % num_levels - item_embeddings = torch.zeros( - (len(flattened_events), self._embedding_dim), device=DEVICE - ) - for level in range(num_levels): - level_mask = level_indices == level - item_embeddings[level_mask] = self._level_embeddings[level]( - flattened_events[level_mask] - ) - - item_embeddings, mask = create_masked_tensor( - data=item_embeddings, lengths=lengths - ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - - batch_size = mask.shape[0] - seq_len = mask.shape[1] - - # Positional embeddings - positions = torch.arange(seq_len, device=DEVICE).repeat(batch_size, 1) - positions = positions.masked_fill(~mask, 0) # (batch_size, max_len) - pos_embeds = self._positional_embeddings( - positions // num_levels - ) # (batch_size, seq_len, embedding_dim) - - # Codebook embeddings - codebook_indices = ( - torch.arange(seq_len, device=DEVICE).repeat(batch_size, 1) % num_levels - ) - codebook_indices = codebook_indices.masked_fill( - ~mask, 0 - ) # (batch_size, seq_len) - hierarchy_embeds = self._codebook_embeddings( - codebook_indices - ) # (batch_size, seq_len, embedding_dim) - - return item_embeddings + pos_embeds + hierarchy_embeds, mask diff --git a/review.md b/review.md index 09079c57..c1c6c755 100644 --- a/review.md +++ b/review.md @@ -2,9 +2,10 @@ ## Todos -- check enc / dec model -- correct logits indexing with tgt_mask? -- max_sequence_length (TODOPK), why +1? не смог найти где дописывается в батч сама длина +- level embeddings +- fix dataset (take last max_seq items) +- single sample from single user (honest comparison) +- correct logits indexing with tgt_mask? (upper remark fixes) - positions = positions // self._semantic_id_length или reverse? как именно учитываем codebook_post & item_pos (тот же порядок или inverted) - как именно находим ближайшего при пересечении по embedding? (не понял о каком embedding речь) From b45bf39ee8d298b29293cc249e83c1b7ebe5f774 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 4 Jan 2025 23:27:01 +0300 Subject: [PATCH 034/175] add bos to tiger --- configs/train/tiger_train_config.json | 12 ++++----- modeling/models/__init__.py | 3 +-- modeling/models/tiger.py | 39 +++++++++++++++++++++------ review.md | 37 ++++++++++++------------- 4 files changed, 55 insertions(+), 36 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index e6a9e1d0..4a172ff7 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, @@ -39,18 +39,18 @@ } }, "model": { - "type": "tiger_new", + "type": "tiger", "trie": "../data/Beauty/rqvae/trie.pkl", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "sequence_prefix": "item", "predictions_prefix": "logits", - "positive_prefix": "positive", + "positive_prefix": "labels", "labels_prefix": "labels", - "embedding_dim": 128, + "embedding_dim": 64, "num_heads": 4, "num_encoder_layers": 6, "num_decoder_layers": 6, - "dim_feedforward": 256, + "dim_feedforward": 128, "dropout": 0.2, "activation": "gelu", "layer_norm_eps": 1e-9, @@ -70,7 +70,7 @@ { "type": "ce", "predictions_prefix": "logits", - "labels_prefix": "semantic.positive", + "labels_prefix": "semantic.labels", "output_prefix": "downstream_loss", "weight": 1.0 } diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 60ba64b6..a169d41e 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -16,5 +16,4 @@ from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel from .rqvae import RqVaeModel -# from .tiger import TigerModel -from .tiger_new import TigerModel +from .tiger import TigerModel diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 3fb4ecb2..bf5b1a32 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -20,7 +20,8 @@ def __init__( max_sequence_length, embedding_dim, num_heads, - num_layers, + num_encoder_layers, + num_decoder_layers, dim_feedforward, semantic_id_arr, dropout=0.0, @@ -33,7 +34,7 @@ def __init__( max_sequence_length=max_sequence_length, embedding_dim=embedding_dim, num_heads=num_heads, - num_layers=num_layers, + num_layers=num_encoder_layers, dim_feedforward=dim_feedforward, dropout=dropout, activation=activation, @@ -58,7 +59,9 @@ def __init__( layer_norm_eps=layer_norm_eps, batch_first=True, ) - self._decoder = nn.TransformerDecoder(transformer_decoder_layer, num_layers) + self._decoder = nn.TransformerDecoder( + transformer_decoder_layer, num_decoder_layers + ) self._trie = trie self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) @@ -70,6 +73,8 @@ def __init__( self._semantic_id_arr = semantic_id_arr + self._bos_embedding = nn.Embedding(1, embedding_dim) + self._codebook_embeddings = nn.Embedding( num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim ) @@ -98,7 +103,8 @@ def create_from_config(cls, config, **kwargs): max_sequence_length=kwargs["max_sequence_length"], embedding_dim=config["embedding_dim"], num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], + num_encoder_layers=config["num_encoder_layers"], + num_decoder_layers=config["num_decoder_layers"], dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), semantic_id_arr=semantic_id_arr, dropout=config.get("dropout", 0.0), @@ -135,7 +141,10 @@ def forward(self, inputs): if self.training: logits = self.get_logits( inputs, self._positive_prefix, all_sample_events, all_sample_lengths - ) + ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) + + logits = logits.view(-1, self._semantic_id_arr[0]) + # TODOPK check if correct flattening return {self._pred_prefix: logits} else: @@ -173,6 +182,16 @@ def _apply_trie(self, preds): # TODOPK make this faster (how?) def _apply_decoder( self, label_events, label_lengths, encoder_embeddings, encoder_mask ): + matrix_label_events = label_events.view(-1, label_lengths[0]) + matrix_label_events = torch.cat( + [torch.full((len(label_lengths), 1), 256), matrix_label_events], dim=1 + ) + # TODOPK 256 hardcoded + + label_events = matrix_label_events.view(-1) + + label_lengths = label_lengths + 1 + tgt_embeddings = self._item_embeddings( label_events ) # (all_batch_events, embedding_dim) @@ -184,7 +203,7 @@ def _apply_decoder( label_len = tgt_mask.shape[1] - assert label_len == len(self._semantic_id_arr) + assert label_len == len(self._semantic_id_arr) + 1 # TODOPK position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) @@ -212,6 +231,8 @@ def _apply_decoder( memory_key_padding_mask=~encoder_mask, tgt_key_padding_mask=~tgt_mask, ) # (batch_size, label_len, embedding_dim) + + decoder_outputs = decoder_outputs[:, 1:, :] # TODOPK remove bos token return decoder_outputs @@ -226,10 +247,12 @@ def position_lambda(x): # TODOPK share layers with encoder & fix def codebook_lambda(x): return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... - codebook_embeddings = self._get_codebook_embeddings( + codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._decoder_codebook_embeddings ) + # TODOPK fix codebook indexing + return position_embeddings + codebook_embeddings def _encoder_pos_embeddings(self, lengths, mask): @@ -243,7 +266,7 @@ def position_lambda(x): def codebook_lambda(x): return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... - codebook_embeddings = self._get_codebook_embeddings( + codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings ) diff --git a/review.md b/review.md index c1c6c755..0bda9419 100644 --- a/review.md +++ b/review.md @@ -2,29 +2,11 @@ ## Todos +- sos / bos embedding correct train fix - level embeddings -- fix dataset (take last max_seq items) -- single sample from single user (honest comparison) -- correct logits indexing with tgt_mask? (upper remark fixes) - positions = positions // self._semantic_id_length или reverse? как именно учитываем codebook_post & item_pos (тот же порядок или inverted) - как именно находим ближайшего при пересечении по embedding? (не понял о каком embedding речь) -- почему - -```python -candidate_scores = torch.einsum( - 'bd,nd->bn', - predictions, - self._item_embeddings.weight -) -``` - -- next_item_pred / last_item_pred (какие задачи учим и как именно) # can be both tasks -- предсказываем item = предсказываем 4 semantic id? # yes -- как составить датасет для обучения # (map item seq -> semantic id seq) -- берем правдивые semantic id # yes - -- у нас авторегрессионный next item prediction? # no (teacher learning) то есть: @@ -40,12 +22,27 @@ target -> (b_size x 4) [(1, 2, 3, 4); (29, 6, 7, 4); ...] decoder: (bos, 1, 2, 3) -> (1, 2, 3, 4) # causal mask so (bos -> 1), (bos, 1 -> 2), ... \___ learnable embed +## Fixed + +- next_item_pred / last_item_pred (какие задачи учим и как именно) # can be both tasks +- предсказываем item = предсказываем 4 semantic id? # yes +- как составить датасет для обучения # (map item seq -> semantic id seq) +- берем правдивые semantic id # yes +- у нас авторегрессионный next item prediction? # no (teacher learning) + +- fix dataset (take last max_seq items) (last_item fixed) +- single sample from single user (honest comparison) +- correct logits indexing with tgt_mask? (upper remark fixes) + - posterior collapse (как будто все сваливается в один индекс в кодбуке) (fixed eval code) -- обязательно использование reinit unused clusters! (mark) - в Amazon датасете пофиг на rating? получается учитываются только implicit действия? # байтовый датасет (любое взаимодействие) - TODO какой базовый класс использовать для seq2seq модели? (LastPred?) # use encoder from SequentialTorchModel - TODO имя для модели (tiger) # tmp +## Remarks + +- обязательно использование reinit unused clusters! (mark) + ## Links - [dataset](https://cseweb.ucsd.edu/~jmcauley/datasets/amazon/links.html) From 6e3d32e49ea507a37a612b1dd15abc437e1ad231 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 5 Jan 2025 12:10:57 +0300 Subject: [PATCH 035/175] use mps & fix encoder pos embeddings --- modeling/dataloader/batch_processors.py | 4 +++- modeling/models/tiger.py | 19 ++++++++++++------- modeling/utils/__init__.py | 8 ++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 8d51bca9..e71200cd 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -41,7 +41,9 @@ def create_from_config(cls, config, **kwargs): embs_extractor = torch.load(config['embs_extractor_path']) item_ids = embs_extractor.index.tolist() - embeddings = torch.stack([emb for emb in embs_extractor['embeddings'].tolist()]) + embeddings = torch.stack([ + emb for emb in embs_extractor['embeddings'].tolist() + ]).to(DEVICE) semantic_ids = list(rqvae_model({"embeddings": embeddings})) item_id_to_semantic_id = { diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index bf5b1a32..7c6e7ad5 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -141,7 +141,7 @@ def forward(self, inputs): if self.training: logits = self.get_logits( inputs, self._positive_prefix, all_sample_events, all_sample_lengths - ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) + ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) logits = logits.view(-1, self._semantic_id_arr[0]) # TODOPK check if correct flattening @@ -184,12 +184,12 @@ def _apply_decoder( ): matrix_label_events = label_events.view(-1, label_lengths[0]) matrix_label_events = torch.cat( - [torch.full((len(label_lengths), 1), 256), matrix_label_events], dim=1 + [torch.full((len(label_lengths), 1), 256).to(DEVICE), matrix_label_events], dim=1 ) # TODOPK 256 hardcoded label_events = matrix_label_events.view(-1) - + label_lengths = label_lengths + 1 tgt_embeddings = self._item_embeddings( @@ -203,7 +203,7 @@ def _apply_decoder( label_len = tgt_mask.shape[1] - assert label_len == len(self._semantic_id_arr) + 1 # TODOPK + assert label_len == len(self._semantic_id_arr) + 1 # TODOPK position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) @@ -231,12 +231,13 @@ def _apply_decoder( memory_key_padding_mask=~encoder_mask, tgt_key_padding_mask=~tgt_mask, ) # (batch_size, label_len, embedding_dim) - + decoder_outputs = decoder_outputs[:, 1:, :] # TODOPK remove bos token return decoder_outputs def _decoder_pos_embeddings(self, lengths, mask): + # TODOPK fix decoder positional def position_lambda(x): # TODOPK share layers with encoder & fix return x // len(self._semantic_id_arr) # 5 5 5 4 4 4 3 3 3 ... @@ -245,7 +246,9 @@ def position_lambda(x): # TODOPK share layers with encoder & fix ) def codebook_lambda(x): - return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... + return (len(self._semantic_id_arr) - 1) - x % len( + self._semantic_id_arr + ) # 0 1 2 0 1 2 ... codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._decoder_codebook_embeddings @@ -264,7 +267,9 @@ def position_lambda(x): ) def codebook_lambda(x): - return x % len(self._semantic_id_arr) # 2 1 0 2 1 0 ... + return (len(self._semantic_id_arr) - 1) - x % len( + self._semantic_id_arr + ) # 0 1 2 0 1 2 ... codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index c366aeb6..5cdc705a 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -10,8 +10,12 @@ import torch -DEVICE = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu') -# DEVICE = torch.device('cpu') +if torch.cuda.is_available(): + DEVICE = torch.device('cuda') +elif torch.backends.mps.is_available(): + DEVICE = torch.device("mps") +else: + DEVICE = torch.device('cpu') def parse_args(): From e40c3212f1580535f1fd0cb5f1453d8d95f3a47b Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 5 Jan 2025 13:08:59 +0300 Subject: [PATCH 036/175] fixed position embeddings --- modeling/models/tiger.py | 54 +++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 7c6e7ad5..910e4a47 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -42,13 +42,9 @@ def __init__( is_causal=True, ) self._decoder_position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value + num_embeddings=2, # bos token + label item id (always 0) embedding_dim=embedding_dim, ) - self._decoder_codebook_embeddings = nn.Embedding( - num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim - ) transformer_decoder_layer = nn.TransformerDecoderLayer( d_model=embedding_dim, @@ -73,11 +69,11 @@ def __init__( self._semantic_id_arr = semantic_id_arr - self._bos_embedding = nn.Embedding(1, embedding_dim) + self._bos_token_id = semantic_id_arr[0] self._codebook_embeddings = nn.Embedding( - num_embeddings=len(semantic_id_arr), embedding_dim=embedding_dim - ) + num_embeddings=len(semantic_id_arr) + 1, embedding_dim=embedding_dim + ) # + 1 for bos token self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) self._decoder_dropout = nn.Dropout(dropout) @@ -179,27 +175,30 @@ def _apply_trie(self, preds): # TODOPK make this faster (how?) ids.append(cur_result) return ids + def _prepend_bos(self, label_events, label_lengths): + batch_size = len(label_lengths) + label_events = label_events.view(batch_size, -1) + bos_tokens = torch.full( + (batch_size, 1), self._bos_token_id, device=label_events.device + ) + label_events = torch.cat( + [bos_tokens, label_events], dim=1 + ) # (batch_size, dec_seq_len + 1) + label_lengths = label_lengths + 1 + return label_events.view(-1), label_lengths + def _apply_decoder( self, label_events, label_lengths, encoder_embeddings, encoder_mask ): - matrix_label_events = label_events.view(-1, label_lengths[0]) - matrix_label_events = torch.cat( - [torch.full((len(label_lengths), 1), 256).to(DEVICE), matrix_label_events], dim=1 - ) - # TODOPK 256 hardcoded - - label_events = matrix_label_events.view(-1) - - label_lengths = label_lengths + 1 + label_events, label_lengths = self._prepend_bos(label_events, label_lengths) tgt_embeddings = self._item_embeddings( label_events ) # (all_batch_events, embedding_dim) - # TODOPK share same embeddings with encoder tgt_embeddings, tgt_mask = create_masked_tensor( data=tgt_embeddings, lengths=label_lengths - ) # (batch_size, label_len, embedding_dim), (batch_size, label_len) + ) # (batch_size, dec_seq_len + 1, embedding_dim), (batch_size, dec_seq_len + 1) label_len = tgt_mask.shape[1] @@ -237,25 +236,22 @@ def _apply_decoder( return decoder_outputs def _decoder_pos_embeddings(self, lengths, mask): - # TODOPK fix decoder positional - def position_lambda(x): # TODOPK share layers with encoder & fix - return x // len(self._semantic_id_arr) # 5 5 5 4 4 4 3 3 3 ... + def position_lambda(x): + return x // len(self._semantic_id_arr) # 1 0 0 0 1 0 0 0 ... position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._decoder_position_embeddings ) def codebook_lambda(x): - return (len(self._semantic_id_arr) - 1) - x % len( - self._semantic_id_arr - ) # 0 1 2 0 1 2 ... + non_bos = x < len(self._semantic_id_arr) + x[non_bos] = (len(self._semantic_id_arr) - 1) - x[non_bos] + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... codebook_embeddings = self._get_position_embeddings( - lengths, mask, codebook_lambda, self._decoder_codebook_embeddings + lengths, mask, codebook_lambda, self._codebook_embeddings ) - # TODOPK fix codebook indexing - return position_embeddings + codebook_embeddings def _encoder_pos_embeddings(self, lengths, mask): @@ -269,7 +265,7 @@ def position_lambda(x): def codebook_lambda(x): return (len(self._semantic_id_arr) - 1) - x % len( self._semantic_id_arr - ) # 0 1 2 0 1 2 ... + ) # 0 1 2 3 0 1 2 3 ... codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings From fee9aaf8b0bce70a6ea31b217d03150f91808549 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 5 Jan 2025 13:21:05 +0300 Subject: [PATCH 037/175] remove todos --- modeling/models/tiger.py | 12 +++++------- review.md | 3 ++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 910e4a47..14f075ee 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -140,7 +140,6 @@ def forward(self, inputs): ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) logits = logits.view(-1, self._semantic_id_arr[0]) - # TODOPK check if correct flattening return {self._pred_prefix: logits} else: @@ -211,17 +210,16 @@ def _apply_decoder( tgt_embeddings = self._decoder_layernorm( tgt_embeddings - ) # (batch_size, seq_len, embedding_dim) + ) # (batch_size, dec_seq_len + 1, embedding_dim) tgt_embeddings = self._decoder_dropout( tgt_embeddings - ) # (batch_size, seq_len, embedding_dim) + ) # (batch_size, dec_seq_len + 1, embedding_dim) tgt_embeddings[~tgt_mask] = 0 causal_mask = ( torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) - ) # (seq_len, seq_len) - # TODOPK -inf? + ) # (dec_seq_len + 1, dec_seq_len + 1) decoder_outputs = self._decoder( tgt=tgt_embeddings, @@ -229,9 +227,9 @@ def _apply_decoder( tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, tgt_key_padding_mask=~tgt_mask, - ) # (batch_size, label_len, embedding_dim) + ) # (batch_size, dec_seq_len + 1, embedding_dim) - decoder_outputs = decoder_outputs[:, 1:, :] # TODOPK remove bos token + decoder_outputs = decoder_outputs[:, 1:, :] # remove bos token return decoder_outputs diff --git a/review.md b/review.md index 0bda9419..2c612b4b 100644 --- a/review.md +++ b/review.md @@ -2,8 +2,9 @@ ## Todos -- sos / bos embedding correct train fix - level embeddings +- fix trie eval +- sos / bos embedding correct train fix - positions = positions // self._semantic_id_length или reverse? как именно учитываем codebook_post & item_pos (тот же порядок или inverted) - как именно находим ближайшего при пересечении по embedding? (не понял о каком embedding речь) From 92f584bbfb9fbca919f8003ada7c8c515c577f07 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 5 Jan 2025 13:48:01 +0300 Subject: [PATCH 038/175] add remark --- review.md | 1 + 1 file changed, 1 insertion(+) diff --git a/review.md b/review.md index 2c612b4b..8904976e 100644 --- a/review.md +++ b/review.md @@ -2,6 +2,7 @@ ## Todos +- Train dataset size: 16972 (in `sasrec`) - level embeddings - fix trie eval - sos / bos embedding correct train fix From c3397317a69011b7bbe3063ce1d9fc275c92677e Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 15 Jan 2025 00:36:30 +0700 Subject: [PATCH 039/175] fix item_embeddings (now take from rqvae) --- configs/train/tiger_train_config.json | 2 +- modeling/models/base.py | 5 ++- modeling/models/tiger.py | 54 ++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 4a172ff7..fa711076 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -42,11 +42,11 @@ "type": "tiger", "trie": "../data/Beauty/rqvae/trie.pkl", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "sequence_prefix": "item", "predictions_prefix": "logits", "positive_prefix": "labels", "labels_prefix": "labels", - "embedding_dim": 64, "num_heads": 4, "num_encoder_layers": 6, "num_decoder_layers": 6, diff --git a/modeling/models/base.py b/modeling/models/base.py index 6405d960..43fee7b9 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -98,9 +98,12 @@ def __init__( batch_first=True ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) + + def get_item_embeddings(self, events): + return self._item_embeddings(events) def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): - embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) + embeddings = self.get_item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( data=embeddings, diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 14f075ee..eb7da626 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -6,12 +6,15 @@ from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function +from .rqvae import RqVaeModel + class TigerModel(SequentialTorchModel, config_name="tiger"): def __init__( self, trie, + rqvae_model, sequence_prefix, pred_prefix, positive_prefix, @@ -58,7 +61,11 @@ def __init__( self._decoder = nn.TransformerDecoder( transformer_decoder_layer, num_decoder_layers ) + + self._codebook_item_embeddings = torch.cat([codebook for codebook in rqvae_model.codebooks], dim=0) + self._trie = trie + self._rqvae_model = rqvae_model self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) @@ -67,9 +74,18 @@ def __init__( self._positive_prefix = positive_prefix self._labels_prefix = labels_prefix + # TODOPK + # + # 128 128 + # emb 0[0, 255] 1[0, 255] 2[0, 255] + # 12101 -> 123 123 34 -> lookups (+embedding) + # + # item_emb in [0, 255] + self._semantic_id_arr = semantic_id_arr self._bos_token_id = semantic_id_arr[0] + self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) self._codebook_embeddings = nn.Embedding( num_embeddings=len(semantic_id_arr) + 1, embedding_dim=embedding_dim @@ -89,24 +105,48 @@ def create_from_config(cls, config, **kwargs): semantic_id_arr = rqvae_config["model"]["codebook_sizes"] assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) + rqvae_config["model"]["should_init_codebooks"] = False + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) + rqvae_model.eval() + + embedding_dim = rqvae_model.encoder.weight.shape[0] # inner rqvae dim + return cls( trie=trie, + rqvae_model=rqvae_model, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], positive_prefix=config["positive_prefix"], labels_prefix=config["labels_prefix"], num_items=semantic_id_arr[0], max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + embedding_dim=embedding_dim, + num_heads=config.get("num_heads", int(embedding_dim // 64)), num_encoder_layers=config["num_encoder_layers"], num_decoder_layers=config["num_decoder_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dim_feedforward=config.get("dim_feedforward", 4 * embedding_dim), semantic_id_arr=semantic_id_arr, dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), ) + def get_item_embeddings(self, events): + bos_mask = (events == self._bos_token_id) + + codebook_events = events[~bos_mask] + positions = torch.arange(len(codebook_events), device=events.device) + codebook_positions = positions % len(self._semantic_id_arr) + emb_indices = codebook_positions * self._semantic_id_arr[0] + codebook_events + + embeddings = torch.zeros((len(events), self._bos_weight.shape[0]), device=events.device) + embeddings[bos_mask] = self._bos_weight + embeddings[~bos_mask] = self._codebook_item_embeddings[emb_indices] + + return embeddings + def get_logits(self, inputs, prefix, all_sample_events, all_sample_lengths): encoder_embeddings, encoder_mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths @@ -145,7 +185,7 @@ def forward(self, inputs): else: logits = self.get_logits( inputs, self._labels_prefix, all_sample_events, all_sample_lengths - ) + ) # batch_size, dec_seq_len, emb_dim (_semantic_id_arr[0]) preds = logits.argmax(dim=-1) # (batch_size, dec_seq_len) ids = torch.tensor(self._apply_trie(preds)) @@ -153,6 +193,8 @@ def forward(self, inputs): def _apply_trie(self, preds): # TODOPK make this faster (how?) native_repr = [tuple(row.tolist()) for row in preds] + # TODOPK add residual + # add flag if item taken (take other items in up level) ids = [] for semantic_id in native_repr: cur_result = set() @@ -191,7 +233,7 @@ def _apply_decoder( ): label_events, label_lengths = self._prepend_bos(label_events, label_lengths) - tgt_embeddings = self._item_embeddings( + tgt_embeddings = self.get_item_embeddings( label_events ) # (all_batch_events, embedding_dim) @@ -244,7 +286,7 @@ def position_lambda(x): def codebook_lambda(x): non_bos = x < len(self._semantic_id_arr) x[non_bos] = (len(self._semantic_id_arr) - 1) - x[non_bos] - return x # 3, 0, 1, 2, 3, 0, 1, 2 ... + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings From b6ddb0feb68885d973b37dd53e86e0a739f1dc91 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 15 Jan 2025 12:54:49 +0700 Subject: [PATCH 040/175] remove todo --- modeling/models/tiger.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index eb7da626..43efd644 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -74,14 +74,6 @@ def __init__( self._positive_prefix = positive_prefix self._labels_prefix = labels_prefix - # TODOPK - # - # 128 128 - # emb 0[0, 255] 1[0, 255] 2[0, 255] - # 12101 -> 123 123 34 -> lookups (+embedding) - # - # item_emb in [0, 255] - self._semantic_id_arr = semantic_id_arr self._bos_token_id = semantic_id_arr[0] From e13947fb82722602640e7b771298cb79df036de5 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 15 Jan 2025 22:48:18 +0700 Subject: [PATCH 041/175] add collision solver --- modeling/models/collision_solver.py | 111 +++++++++ modeling/models/tiger.py | 7 + notebooks/CollisionSolver.ipynb | 369 ++++++++++++++++++++++++++++ 3 files changed, 487 insertions(+) create mode 100644 modeling/models/collision_solver.py create mode 100644 notebooks/CollisionSolver.ipynb diff --git a/modeling/models/collision_solver.py b/modeling/models/collision_solver.py new file mode 100644 index 00000000..9af18bed --- /dev/null +++ b/modeling/models/collision_solver.py @@ -0,0 +1,111 @@ +from collections import defaultdict +from typing import List, Tuple, Dict +import torch + +class CollisionSolver: + def __init__(self, residual_length, semantic_id_length, device: torch.device = torch.device('cpu')): + """ + :param residual_length: Длина остатка для каждого semantic_id + :param semantic_id_length: Длина semantic_id (без токена решающего коллизии) + :param device: Устройство + """ + self._semantic_id_dict = defaultdict(list) + self.residual_length = residual_length + self.semantic_id_length = semantic_id_length + self.device = device + + def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: + """ + Перенос тензора на устройство + """ + if tensor.device != self.device: + tensor = tensor.to(self.device) + return tensor + + def add_item(self, semantic_id: List[int] | torch.Tensor, residual: torch.Tensor) -> None: + """ + Добавляет новый элемент в словарь хранящий semantic_ids с остатками + + :param semantic_id: Semantic id (без токена решающего коллизии) + :param residual: Тензор с остатком для данного semantic_id + """ + if isinstance(semantic_id, torch.Tensor): + semantic_id = semantic_id.tolist() + + assert isinstance(residual, torch.Tensor) + assert residual.shape == (self.residual_length,) + assert len(semantic_id) == self.semantic_id_length + + residual = self._to_device(residual) + key = tuple(semantic_id) + self._semantic_id_dict[key].append((len(self._semantic_id_dict[key]), residual)) + + + def create_query_candidates_dict(self, semantic_ids: torch.Tensor | List[List[int]], residuals: torch.Tensor | List[List[int]]) -> None: + """ + Создает словарь, который содержит сгруппирированные по semantic id элементы, к ним добавлены токены решающие коллизии (добавляются по порядку начиная с нуля) + + :param semantic_ids: Тензор или список всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) + :param residuals: Тензор или список остатков для каждого semantic_id + """ + residuals_count = residuals.shape[0] if isinstance(residuals, torch.Tensor) else len(residuals) + semantic_ids_count = semantic_ids.shape[0] if isinstance(semantic_ids, torch.Tensor) else len(semantic_ids) + assert(residuals_count == semantic_ids_count) + + if isinstance(residuals, list): + residuals = torch.tensor(residuals, device=self.device) + residuals = self._to_device(residuals) + + for semantic_id, residual in zip(semantic_ids, residuals): + self.add_item(semantic_id, residual) + + def get_candidates_tensor(self, query_prefixes: List[List[int]]) -> Tuple[torch.Tensor, torch.Tensor]: + """ + :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии) + + :return: Кортеж из двух тензоров: + - candidates_tensor (размерность: [num_prefixes, max_collisions, residual_dim]): тензор, содержащий остатки кандидатов для каждого префикса + `max_collisions` — максимальное количество кандидатов для каждого префикса + - mask (размерность: [num_prefixes, max_collisions]): Маска для candidates_tensor + + Примечание: + Предполагаем что все префиксы из `query_prefixes` уже есть в словаре semantic ids + Если префикс не найден, будет выброшено исключение + """ + assert isinstance(query_prefixes, list) + assert(self.residual_length == len(self._semantic_id_dict[tuple(query_prefixes[0])][0][1])) + assert(len(query_prefixes[0]) == self.semantic_id_length) + + max_collision_len = max(len(x) for x in self._semantic_id_dict.values()) + candidates_tensor = torch.zeros(len(query_prefixes), max_collision_len, self.residual_length, dtype=torch.float32, device=self.device) + mask = torch.zeros(len(query_prefixes), max_collision_len, dtype=torch.bool, device=self.device) + + for i, semantic_id in enumerate(query_prefixes): + key = tuple(semantic_id) + assert key in self._semantic_id_dict.keys(), f"Не найдено обьектов с semantic id {key}" # нужно что-то с этим делать + for j, residual in self._semantic_id_dict[key]: #сохранение порядка + candidates_tensor[i, j] = residual + mask[i, j] = True + return candidates_tensor, mask + + def get_semantic_ids(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor) -> torch.Tensor: + """ + :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии) + + :return: semantic_ids: [num_prefixes, prefix_len + 1] список из semantic id с токенами решающие коллизии + """ + assert isinstance(query_prefixes, torch.Tensor) + assert isinstance(query_residuals, torch.Tensor) + assert(query_prefixes.shape[0] == query_residuals.shape[0]) + assert(query_prefixes.shape[1] == self.semantic_id_length) + assert(query_residuals.shape[1] == self.residual_length) + + query_prefixes = self._to_device(query_prefixes) + query_residuals = self._to_device(query_residuals) + + candidates_tensor, mask = self.get_candidates_tensor(query_prefixes.tolist()) + + masked_dot_products = torch.einsum('ijk,ik->ij', candidates_tensor, query_residuals).masked_fill(~mask, float('-inf')) + max_indices = torch.argmax(masked_dot_products, dim=1) + best_semantic_ids = torch.concat((query_prefixes, max_indices.unsqueeze(1)), dim=1) + return best_semantic_ids \ No newline at end of file diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 43efd644..99084e64 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -2,6 +2,7 @@ import pickle import torch +from models.collision_solver import CollisionSolver from models.base import SequentialTorchModel from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -66,6 +67,11 @@ def __init__( self._trie = trie self._rqvae_model = rqvae_model + self._collision_solver = CollisionSolver(embedding_dim, len(semantic_id_arr), DEVICE) + + # TODO + # self._collision_solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals) + # self._collision_solver.get_semantic_ids(query_prefixes, query_residuals) self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) @@ -182,6 +188,7 @@ def forward(self, inputs): preds = logits.argmax(dim=-1) # (batch_size, dec_seq_len) ids = torch.tensor(self._apply_trie(preds)) return ids + def _apply_trie(self, preds): # TODOPK make this faster (how?) native_repr = [tuple(row.tolist()) for row in preds] diff --git a/notebooks/CollisionSolver.ipynb b/notebooks/CollisionSolver.ipynb new file mode 100644 index 00000000..b6fe5605 --- /dev/null +++ b/notebooks/CollisionSolver.ipynb @@ -0,0 +1,369 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "from collections import defaultdict\n", + "from typing import List, Tuple, Dict\n", + "import torch" + ], + "metadata": { + "id": "CH-xb-IDScxO" + }, + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "id": "WH6rvC8BSTD1" + }, + "outputs": [], + "source": [ + "class CollisionSolver:\n", + " def __init__(self, residual_length, semantic_id_length, device: torch.device = torch.device('cpu')):\n", + " \"\"\"\n", + " :param residual_length: Длина остатка для каждого semantic_id\n", + " :param semantic_id_length: Длина semantic_id (без токена решающего коллизии)\n", + " :param device: Устройство\n", + " \"\"\"\n", + " self._semantic_id_dict = defaultdict(list)\n", + " self.residual_length = residual_length\n", + " self.semantic_id_length = semantic_id_length\n", + " self.device = device\n", + "\n", + " def _to_device(self, tensor: torch.Tensor) -> torch.Tensor:\n", + " \"\"\"\n", + " Перенос тензора на устройство\n", + " \"\"\"\n", + " if tensor.device != self.device:\n", + " tensor = tensor.to(self.device)\n", + " return tensor\n", + "\n", + " def add_item(self, semantic_id: List[int] | torch.Tensor, residual: torch.Tensor) -> None:\n", + " \"\"\"\n", + " Добавляет новый элемент в словарь хранящий semantic_ids с остатками\n", + "\n", + " :param semantic_id: Semantic id (без токена решающего коллизии)\n", + " :param residual: Тензор с остатком для данного semantic_id\n", + " \"\"\"\n", + " if isinstance(semantic_id, torch.Tensor):\n", + " semantic_id = semantic_id.tolist()\n", + "\n", + " assert isinstance(residual, torch.Tensor)\n", + " assert residual.shape == (self.residual_length,)\n", + " assert len(semantic_id) == self.semantic_id_length\n", + "\n", + " residual = self._to_device(residual)\n", + " key = tuple(semantic_id)\n", + " self._semantic_id_dict[key].append((len(self._semantic_id_dict[key]), residual))\n", + "\n", + "\n", + " def create_query_candidates_dict(self, semantic_ids: torch.Tensor | List[List[int]], residuals: torch.Tensor | List[List[int]]) -> None:\n", + " \"\"\"\n", + " Создает словарь, который содержит сгруппирированные по semantic id элементы, к ним добавлены токены решающие коллизии (добавляются по порядку начиная с нуля)\n", + "\n", + " :param semantic_ids: Тензор или список всех semantic_id, полученных из rq-vae (без токенов решающих коллизии)\n", + " :param residuals: Тензор или список остатков для каждого semantic_id\n", + " \"\"\"\n", + " residuals_count = residuals.shape[0] if isinstance(residuals, torch.Tensor) else len(residuals)\n", + " semantic_ids_count = semantic_ids.shape[0] if isinstance(semantic_ids, torch.Tensor) else len(semantic_ids)\n", + " assert(residuals_count == semantic_ids_count)\n", + "\n", + " if isinstance(residuals, list):\n", + " residuals = torch.tensor(residuals, device=self.device)\n", + " residuals = self._to_device(residuals)\n", + "\n", + " for semantic_id, residual in zip(semantic_ids, residuals):\n", + " self.add_item(semantic_id, residual)\n", + "\n", + " def get_candidates_tensor(self, query_prefixes: List[List[int]]) -> Tuple[torch.Tensor, torch.Tensor]:\n", + " \"\"\"\n", + " :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии)\n", + "\n", + " :return: Кортеж из двух тензоров:\n", + " - candidates_tensor (размерность: [num_prefixes, max_collisions, residual_dim]): тензор, содержащий остатки кандидатов для каждого префикса\n", + " `max_collisions` — максимальное количество кандидатов для каждого префикса\n", + " - mask (размерность: [num_prefixes, max_collisions]): Маска для candidates_tensor\n", + "\n", + " Примечание:\n", + " Предполагаем что все префиксы из `query_prefixes` уже есть в словаре semantic ids\n", + " Если префикс не найден, будет выброшено исключение\n", + " \"\"\"\n", + " assert isinstance(query_prefixes, list)\n", + " assert(self.residual_length == len(self._semantic_id_dict[tuple(query_prefixes[0])][0][1]))\n", + " assert(len(query_prefixes[0]) == self.semantic_id_length)\n", + "\n", + " max_collision_len = max(len(x) for x in self._semantic_id_dict.values())\n", + " candidates_tensor = torch.zeros(len(query_prefixes), max_collision_len, self.residual_length, dtype=torch.float32, device=self.device)\n", + " mask = torch.zeros(len(query_prefixes), max_collision_len, dtype=torch.bool, device=self.device)\n", + "\n", + " for i, semantic_id in enumerate(query_prefixes):\n", + " key = tuple(semantic_id)\n", + " assert key in self._semantic_id_dict.keys(), f\"Не найдено обьектов с semantic id {key}\" # нужно что-то с этим делать\n", + " for j, residual in self._semantic_id_dict[key]: #сохранение порядка\n", + " candidates_tensor[i, j] = residual\n", + " mask[i, j] = True\n", + " return candidates_tensor, mask\n", + "\n", + " def get_semantic_ids(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor) -> torch.Tensor:\n", + " \"\"\"\n", + " :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии)\n", + "\n", + " :return: semantic_ids: [num_prefixes, prefix_len + 1] список из semantic id с токенами решающие коллизии\n", + " \"\"\"\n", + " assert isinstance(query_prefixes, torch.Tensor)\n", + " assert isinstance(query_residuals, torch.Tensor)\n", + " assert(query_prefixes.shape[0] == query_residuals.shape[0])\n", + " assert(query_prefixes.shape[1] == self.semantic_id_length)\n", + " assert(query_residuals.shape[1] == self.residual_length)\n", + "\n", + " query_prefixes = self._to_device(query_prefixes)\n", + " query_residuals = self._to_device(query_residuals)\n", + "\n", + " candidates_tensor, mask = self.get_candidates_tensor(query_prefixes.tolist())\n", + "\n", + " masked_dot_products = torch.einsum('ijk,ik->ij', candidates_tensor, query_residuals).masked_fill(~mask, float('-inf'))\n", + " max_indices = torch.argmax(masked_dot_products, dim=1)\n", + " best_semantic_ids = torch.concat((query_prefixes, max_indices.unsqueeze(1)), dim=1)\n", + " return best_semantic_ids" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Пример использования" + ], + "metadata": { + "id": "AhJgbuGESnWd" + } + }, + { + "cell_type": "code", + "source": [ + "residual_length = 12\n", + "semantic_ids_length = 3\n", + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "\n", + "semantic_ids = torch.tensor([\n", + " [1, 2, 3, 0],\n", + " [1, 2, 3, 1],\n", + " [1, 2, 3, 2],\n", + " [1, 2, 3, 3],\n", + " [1, 2, 4, 0],\n", + " [1, 2, 4, 1],\n", + " [1, 2, 4, 2],\n", + " [5, 2, 3, 0],\n", + " [5, 2, 3, 1],\n", + " [5, 2, 3, 2],\n", + " [5, 2, 3, 3],\n", + " [5, 2, 3, 4],\n", + " [5, 2, 3, 5],\n", + " [5, 2, 3, 6],\n", + " [2, 8, 7, 6],\n", + "], device=torch.device('cpu'))\n", + "\n", + "residuals = torch.rand(semantic_ids.shape[0], residual_length)\n", + "\n", + "query_prefixes = torch.tensor([\n", + " [1, 2, 3],\n", + " [1, 2, 4],\n", + " [5, 2, 3]\n", + "], device=device) # [num_prefixes, prefix_len]\n", + "\n", + "query_residuals = torch.rand(query_prefixes.shape[0], residual_length, device=torch.device('cpu')) # [num_prefixes, emb_dim]" + ], + "metadata": { + "id": "pBjXwVLVSWMO" + }, + "execution_count": 32, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "solver = CollisionSolver(residual_length, semantic_ids_length)\n", + "\n", + "solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals)\n", + "\n", + "solver.get_semantic_ids(query_prefixes, query_residuals)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wn7Uk8V_TgrE", + "outputId": "540b25c6-63bc-4613-90b1-5510ea4d6224" + }, + "execution_count": 33, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([[1, 2, 3, 2],\n", + " [1, 2, 4, 0],\n", + " [5, 2, 3, 6]])" + ] + }, + "metadata": {}, + "execution_count": 33 + } + ] + }, + { + "cell_type": "code", + "source": [ + "solver._semantic_id_dict" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3HTju2grZm-F", + "outputId": "442795a8-a952-466c-8c48-fb3d6f14bc81" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "defaultdict(list,\n", + " {(1,\n", + " 2,\n", + " 3): [(0,\n", + " tensor([0.2521, 0.4989, 0.8696, 0.9459, 0.4614, 0.3054, 0.1708, 0.8725, 0.5294,\n", + " 0.7386, 0.8668, 0.9158])), (1,\n", + " tensor([0.3066, 0.7874, 0.8942, 0.5829, 0.5947, 0.1307, 0.1789, 0.7914, 0.6617,\n", + " 0.7250, 0.4264, 0.6968])), (2,\n", + " tensor([0.8502, 0.4814, 0.2935, 0.2933, 0.5334, 0.5938, 0.4865, 0.7920, 0.9304,\n", + " 0.4737, 0.4883, 0.9769])), (3,\n", + " tensor([0.4382, 0.4937, 0.5311, 0.1205, 0.0210, 0.2097, 0.7704, 0.9061, 0.6019,\n", + " 0.9187, 0.3894, 0.1716]))],\n", + " (1,\n", + " 2,\n", + " 4): [(0,\n", + " tensor([0.9046, 0.2291, 0.9002, 0.7236, 0.7392, 0.1195, 0.0039, 0.1333, 0.2854,\n", + " 0.3425, 0.9413, 0.6365])), (1,\n", + " tensor([0.3013, 0.1465, 0.4424, 0.9448, 0.0412, 0.5664, 0.3587, 0.1531, 0.5751,\n", + " 0.8052, 0.0830, 0.5028])), (2,\n", + " tensor([0.9886, 0.6681, 0.4602, 0.3818, 0.8741, 0.3990, 0.1009, 0.8240, 0.9018,\n", + " 0.1647, 0.0799, 0.0188]))],\n", + " (5,\n", + " 2,\n", + " 3): [(0,\n", + " tensor([0.6242, 0.6769, 0.8397, 0.6340, 0.9251, 0.2997, 0.9545, 0.6810, 0.4468,\n", + " 0.3179, 0.5830, 0.2547])), (1,\n", + " tensor([0.9159, 0.3269, 0.6216, 0.8065, 0.9175, 0.3175, 0.0664, 0.1575, 0.1457,\n", + " 0.6718, 0.7908, 0.2829])), (2,\n", + " tensor([0.1270, 0.7954, 0.7779, 0.9226, 0.0595, 0.6361, 0.4578, 0.7727, 0.4038,\n", + " 0.6136, 0.8738, 0.6714])), (3,\n", + " tensor([0.0647, 0.4849, 0.2900, 0.4458, 0.3928, 0.1550, 0.6921, 0.8732, 0.7545,\n", + " 0.0995, 0.7739, 0.3181])), (4,\n", + " tensor([0.2761, 0.3357, 0.2239, 0.4669, 0.9118, 0.2321, 0.7169, 0.5600, 0.5067,\n", + " 0.4533, 0.6332, 0.6862])), (5,\n", + " tensor([0.9039, 0.0986, 0.9541, 0.7187, 0.6052, 0.8883, 0.1887, 0.1329, 0.3411,\n", + " 0.9943, 0.0430, 0.0611])), (6,\n", + " tensor([0.7541, 0.7320, 0.2690, 0.1116, 0.0751, 0.7047, 0.5125, 0.9484, 0.2797,\n", + " 0.5430, 0.9255, 0.6738]))],\n", + " (2,\n", + " 8,\n", + " 7): [(0,\n", + " tensor([0.6241, 0.6990, 0.7154, 0.6228, 0.1982, 0.0796, 0.1684, 0.9888, 0.0580,\n", + " 0.7725, 0.8443, 0.4938]))]})" + ] + }, + "metadata": {}, + "execution_count": 34 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Альтернативное решение только через torch" + ], + "metadata": { + "id": "ji7PzyQeTxuP" + } + }, + { + "cell_type": "code", + "source": [ + "semantic_ids = semantic_ids.to(device)\n", + "residuals = residuals.to(device)\n", + "query_prefixes = query_prefixes.to(device)\n", + "query_residuals = query_residuals.to(device)\n", + "\n", + "batch_size, max_length = semantic_ids.shape\n", + "num_prefixes, prefix_len = query_prefixes.shape\n", + "\n", + "#привожу к одной размерности чтобы найти совпадения по префиксам\n", + "semantic_ids_exp = semantic_ids[:, :prefix_len].unsqueeze(0).expand(num_prefixes, batch_size, prefix_len) # [num_prefixes, batch_size, prefix_len]\n", + "prefixes_exp = query_prefixes.unsqueeze(1).expand(num_prefixes, batch_size, prefix_len) #torch.tile\n", + "is_prefix_match = (semantic_ids_exp == prefixes_exp).all(dim=2) # [num_prefixes, batch_size]\n", + "\n", + "# Шаг 2: Маскирование residuals для каждого префикса\n", + "residuals_exp = residuals.unsqueeze(0).expand(num_prefixes, batch_size, -1) # [num_prefixes, batch_size, emb_dim]\n", + "masked_residuals = residuals_exp * is_prefix_match.unsqueeze(2).float() # Зануляем строки, не соответствующие префиксам\n", + "dot_products = torch.einsum('ijk,ik->ij', masked_residuals, query_residuals)\n", + "max_indices = torch.argmax(dot_products, dim=1) # [num_prefixes] #\n", + "\n", + "best_semantic_ids = semantic_ids[max_indices] # [num_prefixes, max_length]\n", + "best_residuals = residuals[max_indices] # [num_prefixes, emb_dim]\n", + "\n", + "\n", + "for i, prefix in enumerate(query_prefixes):\n", + " print(f\"Префикс: {prefix.tolist()}\")\n", + " print(f\"Лучший semantic_id: {best_semantic_ids[i].tolist()}\")\n", + " print(f\"Соответствующий residual: {best_residuals[i]}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eh7jwIkHTr4_", + "outputId": "d9bccfba-c12f-4036-8bd3-0ef5d1d5b5e1" + }, + "execution_count": 35, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Префикс: [1, 2, 3]\n", + "Лучший semantic_id: [1, 2, 3, 2]\n", + "Соответствующий residual: tensor([0.8502, 0.4814, 0.2935, 0.2933, 0.5334, 0.5938, 0.4865, 0.7920, 0.9304,\n", + " 0.4737, 0.4883, 0.9769], device='cuda:0')\n", + "Префикс: [1, 2, 4]\n", + "Лучший semantic_id: [1, 2, 4, 0]\n", + "Соответствующий residual: tensor([0.9046, 0.2291, 0.9002, 0.7236, 0.7392, 0.1195, 0.0039, 0.1333, 0.2854,\n", + " 0.3425, 0.9413, 0.6365], device='cuda:0')\n", + "Префикс: [5, 2, 3]\n", + "Лучший semantic_id: [5, 2, 3, 6]\n", + "Соответствующий residual: tensor([0.7541, 0.7320, 0.2690, 0.1116, 0.0751, 0.7047, 0.5125, 0.9484, 0.2797,\n", + " 0.5430, 0.9255, 0.6738], device='cuda:0')\n" + ] + } + ] + } + ] +} \ No newline at end of file From 37a22d86946ee011c75ab8b85052f90214d59086 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 19 Jan 2025 13:23:44 +0700 Subject: [PATCH 042/175] add draft code (nan breaking) --- configs/train/rqvae_train_config.json | 5 +- configs/train/tiger_train_config.json | 11 +- modeling/dataloader/__init__.py | 2 +- modeling/dataloader/batch_processors.py | 65 +- modeling/main.ipynb | 2749 ++++++++++++++++++++++- modeling/models/base.py | 6 +- modeling/models/collision_solver.py | 27 +- modeling/models/rqvae.py | 9 +- modeling/models/tiger.py | 363 +-- modeling/rqvae/collisions.py | 13 + modeling/rqvae/trie.py | 188 ++ modeling/trie.py | 41 - notebooks/CollisionSolver.ipynb | 258 ++- 13 files changed, 3352 insertions(+), 385 deletions(-) create mode 100644 modeling/rqvae/trie.py delete mode 100644 modeling/trie.py diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index ba2cfb05..0d54dba5 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_steps_num": 1024, + "train_steps_num": 512, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", @@ -31,8 +31,7 @@ }, "model": { "type": "rqvae", - "input_dim": 512, - "hidden_dim": 128, + "embedding_dim": 512, "n_iter": 100, "codebook_sizes": [256, 256, 256, 256], "should_init_codebooks": true, diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index fa711076..b1163b3a 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -17,10 +17,7 @@ "type": "torch", "batch_size": 256, "batch_processor": { - "type": "rqvae", - "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt" + "type": "basic" }, "drop_last": true, "shuffle": true @@ -29,10 +26,7 @@ "type": "torch", "batch_size": 256, "batch_processor": { - "type": "rqvae", - "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt" + "type": "basic" }, "drop_last": false, "shuffle": false @@ -43,6 +37,7 @@ "trie": "../data/Beauty/rqvae/trie.pkl", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", "sequence_prefix": "item", "predictions_prefix": "logits", "positive_prefix": "labels", diff --git a/modeling/dataloader/__init__.py b/modeling/dataloader/__init__.py index e134259b..a141bb21 100644 --- a/modeling/dataloader/__init__.py +++ b/modeling/dataloader/__init__.py @@ -1,2 +1,2 @@ from .base import BaseDataloader -from .batch_processors import BaseBatchProcessor, IdentityBatchProcessor, RqVaeProcessor +from .batch_processors import BaseBatchProcessor, IdentityBatchProcessor diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index e71200cd..9991a073 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,9 +1,5 @@ -from collections import defaultdict -import json import torch -from models.base import BaseModel -from utils import DEVICE, MetaParent -import itertools +from utils import MetaParent class BaseBatchProcessor(metaclass=MetaParent): @@ -24,65 +20,6 @@ def __call__(self, batch): embeds = torch.stack([entry['item.embed'] for entry in batch]) return {'ids': ids, 'embeddings': embeds} - -class RqVaeProcessor(BaseBatchProcessor, config_name='rqvae'): - def __init__(self, item_id_to_semantic_id): - self._item_id_to_semantic_id = item_id_to_semantic_id - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_train_config = json.load(open(config['rqvae_train_config_path'])) - rqvae_train_config['model']['should_init_codebooks'] = False - - rqvae_model = BaseModel.create_from_config(rqvae_train_config['model']).to(DEVICE) - rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) - rqvae_model.eval() - - embs_extractor = torch.load(config['embs_extractor_path']) - - item_ids = embs_extractor.index.tolist() - embeddings = torch.stack([ - emb for emb in embs_extractor['embeddings'].tolist() - ]).to(DEVICE) - semantic_ids = list(rqvae_model({"embeddings": embeddings})) - - item_id_to_semantic_id = { - item_id: semantic_id for (item_id, semantic_id) in zip(item_ids, semantic_ids) - } - - return cls(item_id_to_semantic_id) - - def get_semantic_ids(self, item_ids): - semantic_ids = [] - for item_id in item_ids: - semantic_ids.append(self._item_id_to_semantic_id[item_id]) - return semantic_ids - - def __call__(self, batch): - processed_batch = defaultdict(list) - - for key in batch[0].keys(): - if key.endswith('.ids'): - prefix = key.split('.')[0] - assert '{}.length'.format(prefix) in batch[0] - - for sample in batch: - item_ids = sample[f'{prefix}.ids'] - length = sample[f'{prefix}.length'] - - processed_batch[f'{prefix}.ids'].extend(item_ids) - processed_batch[f'{prefix}.length'].append(length) - - if prefix != 'user': - semantic_ids = self.get_semantic_ids(item_ids) - semantic_ids = list(itertools.chain(*semantic_ids)) - processed_batch[f'semantic.{prefix}.ids'].extend(semantic_ids) - processed_batch[f'semantic.{prefix}.length'].append(len(semantic_ids)) - - for part, values in processed_batch.items(): - processed_batch[part] = torch.tensor(values, dtype=torch.long) - - return processed_batch class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): diff --git a/modeling/main.ipynb b/modeling/main.ipynb index 0924a494..63993428 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -4,7 +4,92 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4a57704c044240659047a8fd9d54123b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "tokenizer_config.json: 0%| | 0.00/2.32k [00:00ij', candidates_tensor, query_residuals).masked_fill(~mask, float('-inf')) max_indices = torch.argmax(masked_dot_products, dim=1) best_semantic_ids = torch.concat((query_prefixes, max_indices.unsqueeze(1)), dim=1) - return best_semantic_ids \ No newline at end of file + return best_semantic_ids + + def get_closest_torch(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor): + raise NotImplementedError("get_closest_torch is not implemented") + + query_prefixes = query_prefixes.to(self.device) + query_residuals = query_residuals.to(self.device) + + batch_size, max_length = self._semantic_ids.shape + num_prefixes, prefix_len = query_prefixes.shape + + # привожу к одной размерности чтобы найти совпадения по префиксам + semantic_ids_exp = self._semantic_ids[:, :prefix_len].unsqueeze(0).expand(num_prefixes, batch_size, prefix_len) # [num_prefixes, batch_size, prefix_len] + prefixes_exp = query_prefixes.unsqueeze(1).expand(num_prefixes, batch_size, prefix_len) #torch.tile + is_prefix_match = (semantic_ids_exp == prefixes_exp).all(dim=2) # [num_prefixes, batch_size] + + # Шаг 2: Маскирование residuals для каждого префикса + residuals_exp = self._residuals.unsqueeze(0).expand(num_prefixes, batch_size, -1) # [num_prefixes, batch_size, emb_dim] + masked_residuals = residuals_exp * is_prefix_match.unsqueeze(2).float() # Зануляем строки, не соответствующие префиксам + dot_products = torch.einsum('ijk,ik->ij', masked_residuals, query_residuals) + max_indices = torch.argmax(dot_products, dim=1) # [num_prefixes] # + + best_semantic_ids = self._semantic_ids[max_indices] # [num_prefixes, max_length] + best_residuals = self._residuals[max_indices] # [num_prefixes, emb_dim] + + return best_semantic_ids, best_residuals \ No newline at end of file diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 56185a4d..bb6abb16 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -32,6 +32,9 @@ def __init__( # Default initialization of codebook self.codebooks = torch.nn.ParameterList() + + self.codebook_sizes = codebook_sizes + for codebook_size in codebook_sizes: cb = torch.FloatTensor(codebook_size, hidden_dim) self.codebooks.append(cb) @@ -51,8 +54,8 @@ def __init__( def create_from_config(cls, config, **kwargs): return cls( train_sampler=kwargs.get('train_sampler'), - input_dim=config['input_dim'], - hidden_dim=config['hidden_dim'], + input_dim=config['embedding_dim'], + hidden_dim=config['embedding_dim'], n_iter=config['n_iter'], codebook_sizes=config['codebook_sizes'], should_init_codebooks=config.get('should_init_codebooks', False), @@ -144,7 +147,7 @@ def eval_pass(self, embeddings): codebook_vectors = codebook[codebook_indices] ind_lists.append(codebook_indices.cpu().numpy()) remainder = remainder - codebook_vectors - return zip(*ind_lists) + return list(zip(*ind_lists)), remainder def forward(self, inputs): embeddings = inputs["embeddings"] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 99084e64..62c660ff 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,9 +1,9 @@ import json -import pickle import torch -from models.collision_solver import CollisionSolver +from rqvae.trie import Item, Trie from models.base import SequentialTorchModel +from models.collision_solver import CollisionSolver from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -14,8 +14,11 @@ class TigerModel(SequentialTorchModel, config_name="tiger"): def __init__( self, - trie, rqvae_model, + item_id_to_semantic_id, + item_id_to_residual, + item_id_to_embedding, + solver, sequence_prefix, pred_prefix, positive_prefix, @@ -27,7 +30,7 @@ def __init__( num_encoder_layers, num_decoder_layers, dim_feedforward, - semantic_id_arr, + codebook_sizes, dropout=0.0, activation="relu", layer_norm_eps=1e-9, @@ -45,10 +48,11 @@ def __init__( layer_norm_eps=layer_norm_eps, is_causal=True, ) - self._decoder_position_embeddings = nn.Embedding( - num_embeddings=2, # bos token + label item id (always 0) - embedding_dim=embedding_dim, - ) + + self._sequence_prefix = sequence_prefix + self._pred_prefix = pred_prefix + self._positive_prefix = positive_prefix + self._labels_prefix = labels_prefix transformer_decoder_layer = nn.TransformerDecoderLayer( d_model=embedding_dim, @@ -59,190 +63,250 @@ def __init__( layer_norm_eps=layer_norm_eps, batch_first=True, ) + self._decoder = nn.TransformerDecoder( transformer_decoder_layer, num_decoder_layers ) + + self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) + self._decoder_dropout = nn.Dropout(dropout) - self._codebook_item_embeddings = torch.cat([codebook for codebook in rqvae_model.codebooks], dim=0) - - self._trie = trie - self._rqvae_model = rqvae_model - self._collision_solver = CollisionSolver(embedding_dim, len(semantic_id_arr), DEVICE) - - # TODO - # self._collision_solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals) - # self._collision_solver.get_semantic_ids(query_prefixes, query_residuals) - - self._projection = nn.Linear(embedding_dim, semantic_id_arr[0]) - - self._sequence_prefix = sequence_prefix - self._pred_prefix = pred_prefix - self._positive_prefix = positive_prefix - self._labels_prefix = labels_prefix - - self._semantic_id_arr = semantic_id_arr + self._solver = solver + + self._codebook_sizes = codebook_sizes + self._codebook_item_embeddings_flattened = torch.cat([codebook for codebook in rqvae_model.codebooks], dim=0) + self._codebook_item_embeddings_stacked = torch.stack([codebook for codebook in rqvae_model.codebooks]) + + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + self._item_id_to_embedding = item_id_to_embedding + + self._trie = Trie() + for item_id, semantic_id in item_id_to_semantic_id.items(): + self._trie.insert(Item(semantic_id, item_id_to_residual[item_id])) # TODO no dedup tokens here - self._bos_token_id = semantic_id_arr[0] + self._bos_token_id = codebook_sizes[0] self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) - + + self._decoder_position_embeddings = nn.Embedding( + num_embeddings=2, # bos token + label item id (always 0) + embedding_dim=embedding_dim, + ) self._codebook_embeddings = nn.Embedding( - num_embeddings=len(semantic_id_arr) + 1, embedding_dim=embedding_dim - ) # + 1 for bos token - - self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) - self._decoder_dropout = nn.Dropout(dropout) + num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim # TODO + ) # + 2 for bos token & residual self._init_weights(initializer_range) - + @classmethod - def create_from_config(cls, config, **kwargs): - with open(config["trie"], "rb") as f: - trie = pickle.load(f) - + def init_rqvae(cls, config): rqvae_config = json.load(open(config["rqvae_train_config_path"])) - semantic_id_arr = rqvae_config["model"]["codebook_sizes"] - assert all([book_size == semantic_id_arr[0] for book_size in semantic_id_arr]) - rqvae_config["model"]["should_init_codebooks"] = False - rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) - rqvae_model.load_state_dict( - torch.load(config["rqvae_checkpoint_path"], weights_only=True) - ) + + rqvae_model = RqVaeModel.create_from_config(rqvae_config['model']).to(DEVICE) + rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) rqvae_model.eval() + for param in rqvae_model.parameters(): # TODO + param.requires_grad = False + + codebook_sizes = rqvae_model.codebook_sizes + assert all([book_size == codebook_sizes[0] for book_size in codebook_sizes]) + + return rqvae_model - embedding_dim = rqvae_model.encoder.weight.shape[0] # inner rqvae dim + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_model = cls.init_rqvae(config) + embedding_dim = rqvae_model.encoder.weight.shape[0] # TODO + embs_extractor = torch.load(config['embs_extractor_path']) + + item_ids = embs_extractor.index.tolist() + assert sorted(item_ids) == list(range(1, len(item_ids) + 1)) + + embeddings = torch.stack(embs_extractor['embeddings'].tolist()).to(DEVICE) + + semantic_ids, residuals = rqvae_model({"embeddings": embeddings}) + + solver = CollisionSolver(residuals.shape[1], len(semantic_ids[0]), device=DEVICE) + solver.create_query_candidates_dict(semantic_ids, residuals) # TODO + + item_id_to_embedding = { + item_id: embedding for (item_id, embedding) in zip(item_ids, embeddings) + } + item_id_to_semantic_id = { + item_id: torch.tensor(semantic_id, device=DEVICE) for (item_id, semantic_id) in zip(item_ids, semantic_ids) + } + item_id_to_residual = { + item_id: remainder for (item_id, remainder) in zip(item_ids, residuals) + } return cls( - trie=trie, rqvae_model=rqvae_model, + item_id_to_semantic_id=item_id_to_semantic_id, + item_id_to_residual=item_id_to_residual, + item_id_to_embedding=item_id_to_embedding, + solver=solver, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], positive_prefix=config["positive_prefix"], labels_prefix=config["labels_prefix"], - num_items=semantic_id_arr[0], + num_items=rqvae_model.codebook_sizes[0], # unused max_sequence_length=kwargs["max_sequence_length"], embedding_dim=embedding_dim, num_heads=config.get("num_heads", int(embedding_dim // 64)), num_encoder_layers=config["num_encoder_layers"], num_decoder_layers=config["num_decoder_layers"], dim_feedforward=config.get("dim_feedforward", 4 * embedding_dim), - semantic_id_arr=semantic_id_arr, + codebook_sizes=rqvae_model.codebook_sizes, dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), ) - def get_item_embeddings(self, events): - bos_mask = (events == self._bos_token_id) + def get_encoder_embeddings(self, events): + events = events.tolist() + + # convert to semantic ids + semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) + semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) + + # convert to rqvae embeddings + positions = torch.arange(len(semantic_events), device=DEVICE) + codebook_positions = positions % len(self._codebook_sizes) + emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events + semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] + semantic_embeddings = semantic_embeddings.view( + len(events), len(self._codebook_sizes), self._embedding_dim + ) + + # get residuals + text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) + residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) - codebook_events = events[~bos_mask] - positions = torch.arange(len(codebook_events), device=events.device) - codebook_positions = positions % len(self._semantic_id_arr) - emb_indices = codebook_positions * self._semantic_id_arr[0] + codebook_events + # get true item embeddings + item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) + item_embeddings = item_embeddings.view(-1, self._embedding_dim) - embeddings = torch.zeros((len(events), self._bos_weight.shape[0]), device=events.device) - embeddings[bos_mask] = self._bos_weight - embeddings[~bos_mask] = self._codebook_item_embeddings[emb_indices] - - return embeddings + return item_embeddings - def get_logits(self, inputs, prefix, all_sample_events, all_sample_lengths): + def get_logits(self, label_events, label_lengths, all_sample_events, all_sample_lengths): + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) # TODO residual gets add as event + # TODO encoder_mask sees residual as event (is it correct?) + encoder_embeddings, encoder_mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) - - label_events = inputs["semantic.{}.ids".format(prefix)] - label_lengths = inputs["semantic.{}.length".format(prefix)] - + + print(f"{encoder_embeddings.isnan().any()=}") + decoder_outputs = self._apply_decoder( label_events, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) + + decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) + + return decoder_prefix_scores + + def get_decoder_embeddings(self, events): + events = events.tolist() + + # convert to semantic ids + semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) + semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) + + # convert to rqvae embeddings + positions = torch.arange(len(semantic_events), device=DEVICE) + codebook_positions = positions % len(self._codebook_sizes) + emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events + semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] + semantic_embeddings = semantic_embeddings.view( + len(events), len(self._codebook_sizes), self._embedding_dim + ) + + # get residuals + text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) + residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) + + # apply collision solver + # deduped_semantic_ids = self._solver.get_semantic_ids(semantic_ids, residual) # TODO + + # get true item embeddings + item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) + item_embeddings = item_embeddings.view(-1, self._embedding_dim) + + return item_embeddings - # TODOPK correct place for projection? or view -> projection - logits = self._projection( - decoder_outputs - ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) - - return logits - + # semantic ids come with dedup token def forward(self, inputs): all_sample_events = inputs[ - "semantic.{}.ids".format(self._sequence_prefix) + "{}.ids".format(self._sequence_prefix) ] # (all_batch_events) all_sample_lengths = inputs[ - "semantic.{}.length".format(self._sequence_prefix) + "{}.length".format(self._sequence_prefix) ] # (batch_size) if self.training: - logits = self.get_logits( - inputs, self._positive_prefix, all_sample_events, all_sample_lengths - ) # (batch_size, dec_seq_len, _semantic_id_arr[0]) - - logits = logits.view(-1, self._semantic_id_arr[0]) - - return {self._pred_prefix: logits} + label_events = inputs["{}.ids".format(self._positive_prefix)] + label_lengths = inputs["{}.length".format(self._positive_prefix)] + + decoder_prefix_scores = self.get_logits( + label_events, label_lengths, all_sample_events, all_sample_lengths + ) # (batch_size, dec_seq_len, _codebook_sizes[0]) + + logits = decoder_prefix_scores.reshape(-1, self._codebook_sizes[0]) + + semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) + semantic_events = semantic_ids.view(-1) + + return {self._pred_prefix: logits, f"semantic.{self._labels_prefix}.ids": semantic_events} else: - logits = self.get_logits( - inputs, self._labels_prefix, all_sample_events, all_sample_lengths - ) # batch_size, dec_seq_len, emb_dim (_semantic_id_arr[0]) - - preds = logits.argmax(dim=-1) # (batch_size, dec_seq_len) - ids = torch.tensor(self._apply_trie(preds)) + label_events = inputs["{}.ids".format(self._labels_prefix)] + label_lengths = inputs["{}.length".format(self._labels_prefix)] + + decoder_prefix_scores = self.get_logits( + label_events, label_lengths, all_sample_events, all_sample_lengths + ) # batch_size, dec_seq_len, emb_dim (_codebook_sizes[0]) + + preds = decoder_prefix_scores.argmax(dim=-1) # (batch_size, dec_seq_len) + ids = self._apply_trie(preds) return ids - - def _apply_trie(self, preds): # TODOPK make this faster (how?) - native_repr = [tuple(row.tolist()) for row in preds] - # TODOPK add residual - # add flag if item taken (take other items in up level) + def _apply_trie(self, preds): + semantic_ids = [tuple(row.tolist()) for row in preds] + ids = [] - for semantic_id in native_repr: - cur_result = set() - prefixes = [semantic_id[:i] for i in range(len(semantic_id), 0, -1)] - for prefix in prefixes: - prefix_ids = self._trie.search_prefix( - prefix - ) # todo handle collisions (not overwrite) - for id in prefix_ids: - cur_result.add(id) - if len(cur_result) >= 20: - break - if len(cur_result) >= 20: - break - - cur_result = list(cur_result) - while len(cur_result) < 20: - cur_result.append(0) # solve empty event if shortest prefix - ids.append(cur_result) - return ids - - def _prepend_bos(self, label_events, label_lengths): - batch_size = len(label_lengths) - label_events = label_events.view(batch_size, -1) - bos_tokens = torch.full( - (batch_size, 1), self._bos_token_id, device=label_events.device - ) - label_events = torch.cat( - [bos_tokens, label_events], dim=1 - ) # (batch_size, dec_seq_len + 1) - label_lengths = label_lengths + 1 - return label_events.view(-1), label_lengths + for semantic_id in semantic_ids: + item = Item(semantic_id, torch.rand(self._embedding_dim)) # TODO use true residuals + closest_items = self._trie.find_n_closest(item, n=20) + ids.append(closest_items) + + print(f"{ids=}") + + return torch.tensor(ids) def _apply_decoder( self, label_events, label_lengths, encoder_embeddings, encoder_mask ): - label_events, label_lengths = self._prepend_bos(label_events, label_lengths) - - tgt_embeddings = self.get_item_embeddings( + label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending, residual removing + tgt_embeddings = self.get_decoder_embeddings( # TODO residual embs label_events ) # (all_batch_events, embedding_dim) - + tgt_embeddings, tgt_mask = create_masked_tensor( data=tgt_embeddings, lengths=label_lengths - ) # (batch_size, dec_seq_len + 1, embedding_dim), (batch_size, dec_seq_len + 1) - + ) # (batch_size, dec_seq_len, embedding_dim), (batch_size, dec_seq_len) + + batch_size = tgt_embeddings.shape[0] + bos_embeddings = self._bos_weight.unsqueeze(0).expand(batch_size, 1, -1) # (batch_size, 1, embedding_dim) + + tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) # TODO remove residuals (batch_size, dec_seq_len, embedding_dim) + # tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) # (batch_size, dec_seq_len, embedding_dim) + # TODO here :-1 removes dedup token, however sizes doesn't match (decoder_output = b x len(codebook_sizes) + 1 x emb_dim) + label_len = tgt_mask.shape[1] - assert label_len == len(self._semantic_id_arr) + 1 # TODOPK + assert label_len == len(self._codebook_sizes) + 1 # TODO +1 for bos position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) @@ -251,40 +315,38 @@ def _apply_decoder( tgt_embeddings = self._decoder_layernorm( tgt_embeddings - ) # (batch_size, dec_seq_len + 1, embedding_dim) + ) # (batch_size, dec_seq_len, embedding_dim) tgt_embeddings = self._decoder_dropout( tgt_embeddings - ) # (batch_size, dec_seq_len + 1, embedding_dim) + ) # (batch_size, dec_seq_len, embedding_dim) tgt_embeddings[~tgt_mask] = 0 causal_mask = ( torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) - ) # (dec_seq_len + 1, dec_seq_len + 1) - + ) # (dec_seq_len, dec_seq_len) + decoder_outputs = self._decoder( tgt=tgt_embeddings, memory=encoder_embeddings, tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, tgt_key_padding_mask=~tgt_mask, - ) # (batch_size, dec_seq_len + 1, embedding_dim) - - decoder_outputs = decoder_outputs[:, 1:, :] # remove bos token + ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs def _decoder_pos_embeddings(self, lengths, mask): def position_lambda(x): - return x // len(self._semantic_id_arr) # 1 0 0 0 1 0 0 0 ... + return x // len(self._codebook_sizes) # 1 0 0 0 1 0 0 0 ... position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._decoder_position_embeddings ) def codebook_lambda(x): - non_bos = x < len(self._semantic_id_arr) - x[non_bos] = (len(self._semantic_id_arr) - 1) - x[non_bos] + non_bos = x < len(self._codebook_sizes) + x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] return x # 3, 0, 1, 2, 3, 0, 1, 2 ... codebook_embeddings = self._get_position_embeddings( @@ -295,21 +357,27 @@ def codebook_lambda(x): def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): - return x // len(self._semantic_id_arr) # 5 5 5 4 4 4 3 3 3 ... + return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... + # TODO +1 for residual embedding position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings ) + + # print(f"{position_embeddings.isnan().any()=}") # TODO fix NaN in pos_embs def codebook_lambda(x): - return (len(self._semantic_id_arr) - 1) - x % len( - self._semantic_id_arr - ) # 0 1 2 3 0 1 2 3 ... + x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) + x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 + # 0 1 2 3 5 0 1 2 3 5 ... # len(self._codebook_sizes) for bos, len(self._codebook_sizes) + 1 for residual + return x codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings ) + # print(f"{codebook_embeddings.isnan().any()=}") # TODO fix NaN in pos_embs + return position_embeddings + codebook_embeddings def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): @@ -317,7 +385,7 @@ def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_lay seq_len = mask.shape[1] positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + torch.arange(start=seq_len - 1, end=-1, step=-1, device=DEVICE)[None] .tile([batch_size, 1]) .long() ) # (batch_size, seq_len) @@ -326,10 +394,15 @@ def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_lay positions = positions[positions_mask] # (all_batch_events) positions = position_lambda(positions) # (all_batch_events) + + # print(f"{positions.tolist()[:20]=}") + + assert (positions >= 0).all() and (positions < embedding_layer.num_embeddings).all() position_embeddings = embedding_layer( positions ) # (all_batch_events, embedding_dim) + # print(f"{position_embeddings.isnan().any()=}") # TODO without embeddings also NaN position_embeddings, _ = create_masked_tensor( data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) diff --git a/modeling/rqvae/collisions.py b/modeling/rqvae/collisions.py index 263f76d7..10ad039e 100644 --- a/modeling/rqvae/collisions.py +++ b/modeling/rqvae/collisions.py @@ -1,3 +1,6 @@ +from collections import defaultdict + + def dedup(data): count_dict = {} @@ -12,3 +15,13 @@ def dedup(data): result.append((item[0], item[1], new_last_element)) return result + +def dedup_semantic_ids(semantic_ids): # TODOPK + result = [] + count_dict = defaultdict(int) + for semantic_id in semantic_ids: + unique_index = count_dict[semantic_id] + count_dict[semantic_id] += 1 + new_last_element = (*semantic_id, unique_index) + result.append(new_last_element) + return result diff --git a/modeling/rqvae/trie.py b/modeling/rqvae/trie.py new file mode 100644 index 00000000..eb2d26c7 --- /dev/null +++ b/modeling/rqvae/trie.py @@ -0,0 +1,188 @@ +from collections import defaultdict +import random + +import torch + + +class Item: + """ + Represents one data entry with: + - hierarchical_id: a tuple of int, e.g. (1, 2, 5) + - residual: a torch.Tensor of shape (emb_dim,) + """ + def __init__(self, hierarchical_id: tuple[int, ...], residual: torch.Tensor): + self.hierarchical_id = hierarchical_id + self.residual = residual + + def __repr__(self): + return f"Item(id={self.hierarchical_id}, residual={self.residual})" + + +class TrieNode: + """ + A node in the Trie. + - children: dict + - items: list of Item, non-empty only if this node is + a terminal for those items' hierarchical_id. + """ + def __init__(self): + self.children: dict[int, "TrieNode"] = {} + self.items: list[Item] = [] + + def is_leaf(self) -> bool: + """ + Return True if this node has no children. + """ + return len(self.children) == 0 + + +class Trie: + """ + Trie for storing items keyed by their hierarchical_id. + """ + + def __init__(self): + self.root = TrieNode() + + def insert(self, item: Item) -> None: + """ + Insert an Item into the Trie by walking its hierarchical_id. + """ + node = self.root + for idx in item.hierarchical_id: + if idx not in node.children: + node.children[idx] = TrieNode() + node = node.children[idx] + # This node is now the leaf for item.hierarchical_id + node.items.append(item) + + def _find_longest_prefix_node( + self, hierarchical_id: tuple[int, ...] + ) -> tuple[TrieNode, tuple[int, ...]]: + """ + Walk the Trie to find the node that matches the longest possible prefix + of `hierarchical_id`. + Returns the node and the prefix (as a tuple of int) actually matched. + """ + node = self.root + matched_prefix = [] + + for idx in hierarchical_id: + if idx in node.children: + node = node.children[idx] + matched_prefix.append(idx) + else: + break + + return node, tuple(matched_prefix) + + def _gather_subtree_items(self, node: TrieNode) -> list[Item]: + """ + Collect all items in the entire subtree rooted at `node`. + We do a DFS (or BFS) to gather items from every leaf below. + """ + stack = [node] + all_items = [] + + while stack: + current = stack.pop() + # If current is a leaf, it might have items + if current.items: + all_items.extend(current.items) + # Traverse children + for child in current.children.values(): + stack.append(child) + + return all_items + + def _euclidean_distance(self, a: torch.Tensor, b: torch.Tensor) -> float: + """ + Euclidean (L2) distance between two torch.Tensors. + """ + return torch.norm(a - b).item() + + def find_n_closest(self, query_item: Item, n: int) -> list[Item]: + """ + Find up to `n` closest items to `query_item` by: + 1. Finding the longest existing matching prefix. + 2. First include ALL items from longest matching prefix node + 3. If more slots remain: + - Go up prefix levels and gather more items + - Within each prefix level, sort by distance + 4. Never return more than n items total + """ + # Step 1: Longest prefix node + node, matched_prefix = self._find_longest_prefix_node(query_item.hierarchical_id) + + # Track items by their prefix length and distance + collected_by_prefix: dict[int, list[tuple[Item, float]]] = defaultdict(list) + already_seen = set() + + def gather_and_append(target_node: TrieNode, prefix_length: int): + """ + Gather items from subtree of `target_node`, compute distances, + and group them by prefix length. + """ + subtree_items = self._gather_subtree_items(target_node) + for it in subtree_items: + if it not in already_seen: + dist = self._euclidean_distance(it.residual, query_item.residual) + collected_by_prefix[prefix_length].append((it, dist)) + already_seen.add(it) + + # First gather items from longest prefix node + prefix_len = len(matched_prefix) + gather_and_append(node, prefix_len) + + # If we need more items, move up prefix levels + while prefix_len > 0 and sum(len(items) for items in collected_by_prefix.values()) < n: + prefix_len -= 1 + parent = self.root + for idx in matched_prefix[:prefix_len]: + parent = parent.children[idx] + gather_and_append(parent, prefix_len) + + # If still not enough and we're not at root, gather from root + if prefix_len != 0 and sum(len(items) for items in collected_by_prefix.values()) < n: + gather_and_append(self.root, 0) + + # Build final result prioritizing longer prefixes + result = [] + # Start from longest prefix and work down + for prefix_length in sorted(collected_by_prefix.keys(), reverse=True): + items = collected_by_prefix[prefix_length] + # Sort items within this prefix length by distance + items.sort(key=lambda x: x[1]) + # Add items from this level until we hit n + remaining_slots = n - len(result) + result.extend(item for item, _ in items[:remaining_slots]) + if len(result) >= n: + break + + return result + + +# ------------------------ +# Example Usage: +# ------------------------ +if __name__ == "__main__": + trie = Trie() + + # generate random items and stress test + emb_dim = 4 + for i in range(12000): + semantic_id = tuple(random.randint(0, 255) for _ in range(4)) + item = Item(semantic_id, torch.rand(emb_dim)) + trie.insert(item) + + # generate query items + query_items = [] + for i in range(256): + semantic_id = tuple(random.randint(0, 255) for _ in range(4)) + query_item = Item(semantic_id, torch.rand(emb_dim)) + query_items.append(query_item) + + for query_item in query_items: + closest_items = trie.find_n_closest(query_item, n=20) + print(f"{len(closest_items)=}") + # print("Closest items to", query_item, ":\n", closest_items) diff --git a/modeling/trie.py b/modeling/trie.py deleted file mode 100644 index 1c98c362..00000000 --- a/modeling/trie.py +++ /dev/null @@ -1,41 +0,0 @@ -class TrieNode: - def __init__(self): - self.children = {} - self.id = None - - -class Trie: - def __init__(self): - self.root = TrieNode() - - def insert(self, tuple_key, id): - node = self.root - for number in tuple_key: - if number not in node.children: - node.children[number] = TrieNode() - node = node.children[number] - node.id = id - - def search(self, tuple_key): - node = self.root - for number in tuple_key: - if number not in node.children: - return None - node = node.children[number] - return node.id - - def _get_all_leaf_ids(self, node): - result = [] - if node.id is not None: - result.append(node.id) - for child in node.children.values(): - result.extend(self._get_all_leaf_ids(child)) - return result - - def search_prefix(self, prefix): - node = self.root - for number in prefix: - if number not in node.children: - return [] - node = node.children[number] - return self._get_all_leaf_ids(node) \ No newline at end of file diff --git a/notebooks/CollisionSolver.ipynb b/notebooks/CollisionSolver.ipynb index b6fe5605..4fabd090 100644 --- a/notebooks/CollisionSolver.ipynb +++ b/notebooks/CollisionSolver.ipynb @@ -1,37 +1,21 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "gpuType": "T4" - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, "cells": [ { "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "CH-xb-IDScxO" + }, + "outputs": [], "source": [ "from collections import defaultdict\n", "from typing import List, Tuple, Dict\n", "import torch" - ], - "metadata": { - "id": "CH-xb-IDScxO" - }, - "execution_count": 1, - "outputs": [] + ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 2, "metadata": { "id": "WH6rvC8BSTD1" }, @@ -148,15 +132,20 @@ }, { "cell_type": "markdown", - "source": [ - "# Пример использования" - ], "metadata": { "id": "AhJgbuGESnWd" - } + }, + "source": [ + "# Пример использования" + ] }, { "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "pBjXwVLVSWMO" + }, + "outputs": [], "source": [ "residual_length = 12\n", "semantic_ids_length = 3\n", @@ -185,26 +174,16 @@ "query_prefixes = torch.tensor([\n", " [1, 2, 3],\n", " [1, 2, 4],\n", + " [5, 2, 3],\n", " [5, 2, 3]\n", "], device=device) # [num_prefixes, prefix_len]\n", "\n", "query_residuals = torch.rand(query_prefixes.shape[0], residual_length, device=torch.device('cpu')) # [num_prefixes, emb_dim]" - ], - "metadata": { - "id": "pBjXwVLVSWMO" - }, - "execution_count": 32, - "outputs": [] + ] }, { "cell_type": "code", - "source": [ - "solver = CollisionSolver(residual_length, semantic_ids_length)\n", - "\n", - "solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals)\n", - "\n", - "solver.get_semantic_ids(query_prefixes, query_residuals)" - ], + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -212,27 +191,32 @@ "id": "wn7Uk8V_TgrE", "outputId": "540b25c6-63bc-4613-90b1-5510ea4d6224" }, - "execution_count": 33, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ - "tensor([[1, 2, 3, 2],\n", + "tensor([[1, 2, 3, 0],\n", " [1, 2, 4, 0],\n", - " [5, 2, 3, 6]])" + " [5, 2, 3, 0],\n", + " [5, 2, 3, 3]])" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 33 + "output_type": "execute_result" } + ], + "source": [ + "solver = CollisionSolver(residual_length, semantic_ids_length)\n", + "\n", + "solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals)\n", + "\n", + "solver.get_semantic_ids(query_prefixes, query_residuals)" ] }, { "cell_type": "code", - "source": [ - "solver._semantic_id_dict" - ], + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -240,73 +224,107 @@ "id": "3HTju2grZm-F", "outputId": "442795a8-a952-466c-8c48-fb3d6f14bc81" }, - "execution_count": 34, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "defaultdict(list,\n", " {(1,\n", " 2,\n", " 3): [(0,\n", - " tensor([0.2521, 0.4989, 0.8696, 0.9459, 0.4614, 0.3054, 0.1708, 0.8725, 0.5294,\n", - " 0.7386, 0.8668, 0.9158])), (1,\n", - " tensor([0.3066, 0.7874, 0.8942, 0.5829, 0.5947, 0.1307, 0.1789, 0.7914, 0.6617,\n", - " 0.7250, 0.4264, 0.6968])), (2,\n", - " tensor([0.8502, 0.4814, 0.2935, 0.2933, 0.5334, 0.5938, 0.4865, 0.7920, 0.9304,\n", - " 0.4737, 0.4883, 0.9769])), (3,\n", - " tensor([0.4382, 0.4937, 0.5311, 0.1205, 0.0210, 0.2097, 0.7704, 0.9061, 0.6019,\n", - " 0.9187, 0.3894, 0.1716]))],\n", + " tensor([0.7220, 0.9496, 0.4006, 0.8832, 0.6087, 0.4947, 0.1341, 0.9645, 0.7408,\n", + " 0.5972, 0.3433, 0.8700])), (1,\n", + " tensor([0.4457, 0.4410, 0.1333, 0.4391, 0.4153, 0.1703, 0.3044, 0.0940, 0.2773,\n", + " 0.5258, 0.5838, 0.0273])), (2,\n", + " tensor([0.6268, 0.1060, 0.0841, 0.0750, 0.4090, 0.2886, 0.4343, 0.1945, 0.0429,\n", + " 0.8477, 0.1418, 0.6465])), (3,\n", + " tensor([0.0077, 0.8171, 0.1344, 0.2223, 0.9616, 0.2790, 0.3448, 0.1485, 0.7148,\n", + " 0.5900, 0.0154, 0.4752]))],\n", " (1,\n", " 2,\n", " 4): [(0,\n", - " tensor([0.9046, 0.2291, 0.9002, 0.7236, 0.7392, 0.1195, 0.0039, 0.1333, 0.2854,\n", - " 0.3425, 0.9413, 0.6365])), (1,\n", - " tensor([0.3013, 0.1465, 0.4424, 0.9448, 0.0412, 0.5664, 0.3587, 0.1531, 0.5751,\n", - " 0.8052, 0.0830, 0.5028])), (2,\n", - " tensor([0.9886, 0.6681, 0.4602, 0.3818, 0.8741, 0.3990, 0.1009, 0.8240, 0.9018,\n", - " 0.1647, 0.0799, 0.0188]))],\n", + " tensor([0.3480, 0.3537, 0.3771, 0.1443, 0.6877, 0.4845, 0.8278, 0.9831, 0.4941,\n", + " 0.0682, 0.0900, 0.2485])), (1,\n", + " tensor([0.4048, 0.3308, 0.2278, 0.4890, 0.4899, 0.9994, 0.1511, 0.9374, 0.8730,\n", + " 0.7538, 0.0409, 0.1444])), (2,\n", + " tensor([0.3601, 0.7909, 0.0766, 0.7096, 0.5745, 0.2606, 0.4412, 0.8748, 0.1248,\n", + " 0.5816, 0.2185, 0.2352]))],\n", " (5,\n", " 2,\n", " 3): [(0,\n", - " tensor([0.6242, 0.6769, 0.8397, 0.6340, 0.9251, 0.2997, 0.9545, 0.6810, 0.4468,\n", - " 0.3179, 0.5830, 0.2547])), (1,\n", - " tensor([0.9159, 0.3269, 0.6216, 0.8065, 0.9175, 0.3175, 0.0664, 0.1575, 0.1457,\n", - " 0.6718, 0.7908, 0.2829])), (2,\n", - " tensor([0.1270, 0.7954, 0.7779, 0.9226, 0.0595, 0.6361, 0.4578, 0.7727, 0.4038,\n", - " 0.6136, 0.8738, 0.6714])), (3,\n", - " tensor([0.0647, 0.4849, 0.2900, 0.4458, 0.3928, 0.1550, 0.6921, 0.8732, 0.7545,\n", - " 0.0995, 0.7739, 0.3181])), (4,\n", - " tensor([0.2761, 0.3357, 0.2239, 0.4669, 0.9118, 0.2321, 0.7169, 0.5600, 0.5067,\n", - " 0.4533, 0.6332, 0.6862])), (5,\n", - " tensor([0.9039, 0.0986, 0.9541, 0.7187, 0.6052, 0.8883, 0.1887, 0.1329, 0.3411,\n", - " 0.9943, 0.0430, 0.0611])), (6,\n", - " tensor([0.7541, 0.7320, 0.2690, 0.1116, 0.0751, 0.7047, 0.5125, 0.9484, 0.2797,\n", - " 0.5430, 0.9255, 0.6738]))],\n", + " tensor([0.9524, 0.6976, 0.7598, 0.9994, 0.2881, 0.9854, 0.2537, 0.6400, 0.5632,\n", + " 0.5768, 0.2833, 0.0570])), (1,\n", + " tensor([0.6778, 0.6523, 0.7592, 0.1953, 0.0077, 0.0960, 0.0714, 0.8100, 0.9999,\n", + " 0.0407, 0.1231, 0.7192])), (2,\n", + " tensor([0.3652, 0.1131, 0.6800, 0.7445, 0.3586, 0.6498, 0.6479, 0.3792, 0.3110,\n", + " 0.7605, 0.9031, 0.4177])), (3,\n", + " tensor([0.5732, 0.6359, 0.1402, 0.0661, 0.6557, 0.5067, 0.7383, 0.7173, 0.3075,\n", + " 0.3920, 0.7497, 0.9602])), (4,\n", + " tensor([0.3407, 0.3068, 0.0815, 0.3887, 0.5861, 0.8103, 0.1236, 0.2175, 0.7513,\n", + " 0.5872, 0.7065, 0.0919])), (5,\n", + " tensor([0.0248, 0.9603, 0.5902, 0.8559, 0.9800, 0.9306, 0.9737, 0.9035, 0.2527,\n", + " 0.0049, 0.3355, 0.2858])), (6,\n", + " tensor([0.2779, 0.6830, 0.5133, 0.5767, 0.2029, 0.9013, 0.9562, 0.4474, 0.0377,\n", + " 0.0205, 0.6822, 0.1314]))],\n", " (2,\n", " 8,\n", " 7): [(0,\n", - " tensor([0.6241, 0.6990, 0.7154, 0.6228, 0.1982, 0.0796, 0.1684, 0.9888, 0.0580,\n", - " 0.7725, 0.8443, 0.4938]))]})" + " tensor([0.5204, 0.4737, 0.7302, 0.0674, 0.0289, 0.5045, 0.1267, 0.8282, 0.7559,\n", + " 0.3856, 0.4455, 0.1655]))]})" ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 34 + "output_type": "execute_result" } + ], + "source": [ + "solver._semantic_id_dict" ] }, { "cell_type": "markdown", - "source": [ - "# Альтернативное решение только через torch" - ], "metadata": { "id": "ji7PzyQeTxuP" - } + }, + "source": [ + "# Альтернативное решение только через torch" + ] }, { "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eh7jwIkHTr4_", + "outputId": "d9bccfba-c12f-4036-8bd3-0ef5d1d5b5e1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Префикс: [1, 2, 3]\n", + "Лучший semantic_id: [1, 2, 3, 0]\n", + "Соответствующий residual: tensor([0.7220, 0.9496, 0.4006, 0.8832, 0.6087, 0.4947, 0.1341, 0.9645, 0.7408,\n", + " 0.5972, 0.3433, 0.8700])\n", + "Префикс: [1, 2, 4]\n", + "Лучший semantic_id: [1, 2, 4, 0]\n", + "Соответствующий residual: tensor([0.3480, 0.3537, 0.3771, 0.1443, 0.6877, 0.4845, 0.8278, 0.9831, 0.4941,\n", + " 0.0682, 0.0900, 0.2485])\n", + "Префикс: [5, 2, 3]\n", + "Лучший semantic_id: [5, 2, 3, 0]\n", + "Соответствующий residual: tensor([0.9524, 0.6976, 0.7598, 0.9994, 0.2881, 0.9854, 0.2537, 0.6400, 0.5632,\n", + " 0.5768, 0.2833, 0.0570])\n", + "Префикс: [5, 2, 3]\n", + "Лучший semantic_id: [5, 2, 3, 3]\n", + "Соответствующий residual: tensor([0.5732, 0.6359, 0.1402, 0.0661, 0.6557, 0.5067, 0.7383, 0.7173, 0.3075,\n", + " 0.3920, 0.7497, 0.9602])\n" + ] + } + ], "source": [ "semantic_ids = semantic_ids.to(device)\n", "residuals = residuals.to(device)\n", @@ -330,40 +348,48 @@ "best_semantic_ids = semantic_ids[max_indices] # [num_prefixes, max_length]\n", "best_residuals = residuals[max_indices] # [num_prefixes, emb_dim]\n", "\n", - "\n", "for i, prefix in enumerate(query_prefixes):\n", " print(f\"Префикс: {prefix.tolist()}\")\n", " print(f\"Лучший semantic_id: {best_semantic_ids[i].tolist()}\")\n", " print(f\"Соответствующий residual: {best_residuals[i]}\")" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "eh7jwIkHTr4_", - "outputId": "d9bccfba-c12f-4036-8bd3-0ef5d1d5b5e1" - }, - "execution_count": 35, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Префикс: [1, 2, 3]\n", - "Лучший semantic_id: [1, 2, 3, 2]\n", - "Соответствующий residual: tensor([0.8502, 0.4814, 0.2935, 0.2933, 0.5334, 0.5938, 0.4865, 0.7920, 0.9304,\n", - " 0.4737, 0.4883, 0.9769], device='cuda:0')\n", - "Префикс: [1, 2, 4]\n", - "Лучший semantic_id: [1, 2, 4, 0]\n", - "Соответствующий residual: tensor([0.9046, 0.2291, 0.9002, 0.7236, 0.7392, 0.1195, 0.0039, 0.1333, 0.2854,\n", - " 0.3425, 0.9413, 0.6365], device='cuda:0')\n", - "Префикс: [5, 2, 3]\n", - "Лучший semantic_id: [5, 2, 3, 6]\n", - "Соответствующий residual: tensor([0.7541, 0.7320, 0.2690, 0.1116, 0.0751, 0.7047, 0.5125, 0.9484, 0.2797,\n", - " 0.5430, 0.9255, 0.6738], device='cuda:0')\n" - ] - } ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } - ] -} \ No newline at end of file + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.11" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From c2e7ee21bedd7e22dd5cd5f9e39bd12f3ff1fccd Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 19 Jan 2025 18:05:39 +0700 Subject: [PATCH 043/175] fix NaNs --- configs/train/tiger_train_config.json | 6 +- modeling/models/base.py | 8 +- modeling/models/tiger.py | 173 +++++++---------- modeling/optimizer/base.py | 3 +- modeling/rqvae/trie.py | 259 +++++++++++--------------- 5 files changed, 188 insertions(+), 261 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index b1163b3a..be57d320 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -42,9 +42,9 @@ "predictions_prefix": "logits", "positive_prefix": "labels", "labels_prefix": "labels", - "num_heads": 4, - "num_encoder_layers": 6, - "num_decoder_layers": 6, + "num_heads": 2, + "num_encoder_layers": 2, + "num_decoder_layers": 2, "dim_feedforward": 128, "dropout": 0.2, "activation": "gelu", diff --git a/modeling/models/base.py b/modeling/models/base.py index 6e1bd68b..b3abef1e 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -1,7 +1,3 @@ -from utils import MetaParent - -from utils import DEVICE, create_masked_tensor, get_activation_function - import torch import torch.nn as nn from utils import DEVICE, MetaParent, create_masked_tensor, get_activation_function @@ -99,11 +95,11 @@ def __init__( ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - def get_encoder_embeddings(self, events): + def get_item_embeddings(self, events): return self._item_embeddings(events) def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): - embeddings = self.get_encoder_embeddings(events) # (all_batch_events, embedding_dim) + embeddings = self.get_item_embeddings(events) # (all_batch_events, embedding_dim) assert embeddings.shape[0] == sum(lengths) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 62c660ff..c71917fe 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,9 +1,10 @@ import json import torch -from rqvae.trie import Item, Trie +from tqdm import tqdm from models.base import SequentialTorchModel from models.collision_solver import CollisionSolver +from rqvae.trie import Item, Trie from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -162,81 +163,6 @@ def create_from_config(cls, config, **kwargs): initializer_range=config.get("initializer_range", 0.02), ) - def get_encoder_embeddings(self, events): - events = events.tolist() - - # convert to semantic ids - semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) - semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) - - # convert to rqvae embeddings - positions = torch.arange(len(semantic_events), device=DEVICE) - codebook_positions = positions % len(self._codebook_sizes) - emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events - semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] - semantic_embeddings = semantic_embeddings.view( - len(events), len(self._codebook_sizes), self._embedding_dim - ) - - # get residuals - text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) - residual = text_embeddings - semantic_embeddings.sum(dim=1) - residual = residual.unsqueeze(1) - - # get true item embeddings - item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) - item_embeddings = item_embeddings.view(-1, self._embedding_dim) - - return item_embeddings - - def get_logits(self, label_events, label_lengths, all_sample_events, all_sample_lengths): - all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) # TODO residual gets add as event - # TODO encoder_mask sees residual as event (is it correct?) - - encoder_embeddings, encoder_mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) - - print(f"{encoder_embeddings.isnan().any()=}") - - decoder_outputs = self._apply_decoder( - label_events, label_lengths, encoder_embeddings, encoder_mask - ) # (batch_size, label_len, embedding_dim) - - decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) - - return decoder_prefix_scores - - def get_decoder_embeddings(self, events): - events = events.tolist() - - # convert to semantic ids - semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) - semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) - - # convert to rqvae embeddings - positions = torch.arange(len(semantic_events), device=DEVICE) - codebook_positions = positions % len(self._codebook_sizes) - emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events - semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] - semantic_embeddings = semantic_embeddings.view( - len(events), len(self._codebook_sizes), self._embedding_dim - ) - - # get residuals - text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) - residual = text_embeddings - semantic_embeddings.sum(dim=1) - residual = residual.unsqueeze(1) - - # apply collision solver - # deduped_semantic_ids = self._solver.get_semantic_ids(semantic_ids, residual) # TODO - - # get true item embeddings - item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) - item_embeddings = item_embeddings.view(-1, self._embedding_dim) - - return item_embeddings - # semantic ids come with dedup token def forward(self, inputs): all_sample_events = inputs[ @@ -254,7 +180,7 @@ def forward(self, inputs): label_events, label_lengths, all_sample_events, all_sample_lengths ) # (batch_size, dec_seq_len, _codebook_sizes[0]) - logits = decoder_prefix_scores.reshape(-1, self._codebook_sizes[0]) + logits = decoder_prefix_scores.reshape(-1, self._codebook_sizes[0]) # (batch_size * dec_seq_len, _codebook_sizes[0]) semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) semantic_events = semantic_ids.view(-1) @@ -276,20 +202,34 @@ def _apply_trie(self, preds): semantic_ids = [tuple(row.tolist()) for row in preds] ids = [] - for semantic_id in semantic_ids: - item = Item(semantic_id, torch.rand(self._embedding_dim)) # TODO use true residuals - closest_items = self._trie.find_n_closest(item, n=20) + for semantic_id in tqdm(semantic_ids): + item = Item(semantic_id, torch.rand(self._embedding_dim).to(DEVICE)) # TODO use true residuals + closest_items = self._trie.find_closest(item, n=20) ids.append(closest_items) - - print(f"{ids=}") return torch.tensor(ids) + + def get_logits(self, label_events, label_lengths, all_sample_events, all_sample_lengths): + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) # TODO residual gets add as event + # TODO encoder_mask sees residual as event (is it correct?) + + encoder_embeddings, encoder_mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) + + decoder_outputs = self._apply_decoder( + label_events, label_lengths, encoder_embeddings, encoder_mask + ) # (batch_size, label_len, embedding_dim) + + decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) + + return decoder_prefix_scores def _apply_decoder( self, label_events, label_lengths, encoder_embeddings, encoder_mask ): - label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending, residual removing - tgt_embeddings = self.get_decoder_embeddings( # TODO residual embs + label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending + tgt_embeddings = self.get_item_embeddings( # TODO residual embs label_events ) # (all_batch_events, embedding_dim) @@ -331,29 +271,37 @@ def _apply_decoder( memory=encoder_embeddings, tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, - tgt_key_padding_mask=~tgt_mask, + # TODO tgt_key_padding_mask=~tgt_mask, ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs - - def _decoder_pos_embeddings(self, lengths, mask): - def position_lambda(x): - return x // len(self._codebook_sizes) # 1 0 0 0 1 0 0 0 ... - - position_embeddings = self._get_position_embeddings( - lengths, mask, position_lambda, self._decoder_position_embeddings - ) - - def codebook_lambda(x): - non_bos = x < len(self._codebook_sizes) - x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] - return x # 3, 0, 1, 2, 3, 0, 1, 2 ... - - codebook_embeddings = self._get_position_embeddings( - lengths, mask, codebook_lambda, self._codebook_embeddings + + def get_item_embeddings(self, events): + events = events.tolist() + + # convert to semantic ids + semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) + semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) + + # convert to rqvae embeddings + positions = torch.arange(len(semantic_events), device=DEVICE) + codebook_positions = positions % len(self._codebook_sizes) + emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events + semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] + semantic_embeddings = semantic_embeddings.view( + len(events), len(self._codebook_sizes), self._embedding_dim ) - - return position_embeddings + codebook_embeddings + + # get residuals + text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) + residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) + + # get true item embeddings + item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) + item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) + + return item_embeddings def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): @@ -380,6 +328,25 @@ def codebook_lambda(x): return position_embeddings + codebook_embeddings + def _decoder_pos_embeddings(self, lengths, mask): + def position_lambda(x): + return x // len(self._codebook_sizes) # 1 0 0 0 1 0 0 0 ... + + position_embeddings = self._get_position_embeddings( + lengths, mask, position_lambda, self._decoder_position_embeddings + ) + + def codebook_lambda(x): + non_bos = x < len(self._codebook_sizes) + x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... + + codebook_embeddings = self._get_position_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return position_embeddings + codebook_embeddings + def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): batch_size = mask.shape[0] seq_len = mask.shape[1] diff --git a/modeling/optimizer/base.py b/modeling/optimizer/base.py index ede62be2..86c63537 100644 --- a/modeling/optimizer/base.py +++ b/modeling/optimizer/base.py @@ -1,8 +1,7 @@ import copy -from utils import MetaParent - import torch +from utils import MetaParent OPTIMIZERS = { 'sgd': torch.optim.SGD, diff --git a/modeling/rqvae/trie.py b/modeling/rqvae/trie.py index eb2d26c7..e5a94067 100644 --- a/modeling/rqvae/trie.py +++ b/modeling/rqvae/trie.py @@ -1,188 +1,153 @@ -from collections import defaultdict -import random - import torch - +from typing import List, Tuple, Dict, Optional class Item: """ - Represents one data entry with: - - hierarchical_id: a tuple of int, e.g. (1, 2, 5) + Represents an item with: + - hierarchical_id: a tuple of ints - residual: a torch.Tensor of shape (emb_dim,) """ - def __init__(self, hierarchical_id: tuple[int, ...], residual: torch.Tensor): + def __init__(self, hierarchical_id: Tuple[int, ...], residual: torch.Tensor): self.hierarchical_id = hierarchical_id self.residual = residual def __repr__(self): - return f"Item(id={self.hierarchical_id}, residual={self.residual})" + return f"Item(hier_id={self.hierarchical_id}, resid_shape={tuple(self.residual.shape)})" class TrieNode: """ - A node in the Trie. - - children: dict - - items: list of Item, non-empty only if this node is - a terminal for those items' hierarchical_id. + A node in the trie. + - children: dict(int -> TrieNode) + - items: list of Items (only non-empty if this node is the end of some hierarchical_id(s)) """ def __init__(self): - self.children: dict[int, "TrieNode"] = {} - self.items: list[Item] = [] - - def is_leaf(self) -> bool: - """ - Return True if this node has no children. - """ - return len(self.children) == 0 + self.children: Dict[int, TrieNode] = {} + self.items: List[Item] = [] # collisions end up here if they share the same path class Trie: """ - Trie for storing items keyed by their hierarchical_id. + The trie structure that can: + 1. Insert an Item by its hierarchical_id. + 2. Find up to n closest items to a query Item by the described prefix-truncation + dot-product logic. """ - def __init__(self): self.root = TrieNode() def insert(self, item: Item) -> None: """ - Insert an Item into the Trie by walking its hierarchical_id. + Insert an Item into the trie following item.hierarchical_id. """ - node = self.root + current_node = self.root for idx in item.hierarchical_id: - if idx not in node.children: - node.children[idx] = TrieNode() - node = node.children[idx] - # This node is now the leaf for item.hierarchical_id - node.items.append(item) - - def _find_longest_prefix_node( - self, hierarchical_id: tuple[int, ...] - ) -> tuple[TrieNode, tuple[int, ...]]: - """ - Walk the Trie to find the node that matches the longest possible prefix - of `hierarchical_id`. - Returns the node and the prefix (as a tuple of int) actually matched. - """ - node = self.root - matched_prefix = [] - - for idx in hierarchical_id: - if idx in node.children: - node = node.children[idx] - matched_prefix.append(idx) - else: - break + if idx not in current_node.children: + current_node.children[idx] = TrieNode() + current_node = current_node.children[idx] + # At the leaf, store the item + current_node.items.append(item) - return node, tuple(matched_prefix) - - def _gather_subtree_items(self, node: TrieNode) -> list[Item]: + def _gather_subtree_items(self, node: TrieNode) -> List[Item]: """ - Collect all items in the entire subtree rooted at `node`. - We do a DFS (or BFS) to gather items from every leaf below. + Collect all items in the sub-tree rooted at 'node'. """ + collected = [] stack = [node] - all_items = [] - while stack: - current = stack.pop() - # If current is a leaf, it might have items - if current.items: - all_items.extend(current.items) - # Traverse children - for child in current.children.values(): - stack.append(child) - - return all_items - - def _euclidean_distance(self, a: torch.Tensor, b: torch.Tensor) -> float: + cur = stack.pop() + collected.extend(cur.items) + for child_node in cur.children.values(): + stack.append(child_node) + return collected + + def _dot_scores( + self, + query_residual: torch.Tensor, + candidates: List[Item] + ) -> List[Tuple[Item, float]]: """ - Euclidean (L2) distance between two torch.Tensors. + Compute dot-product scores between query_residual and each candidate's residual. + Return list of (candidate_item, score). """ - return torch.norm(a - b).item() - - def find_n_closest(self, query_item: Item, n: int) -> list[Item]: + # Note: if your embeddings are large, you may prefer a more efficient approach + # (e.g., batched matrix multiplication). For clarity, we do a simple loop here. + scored = [] + for c in candidates: + score = torch.dot(query_residual, c.residual).item() + scored.append((c, score)) + return scored + + def find_closest(self, query_item: Item, n: int) -> List[Item]: """ - Find up to `n` closest items to `query_item` by: - 1. Finding the longest existing matching prefix. - 2. First include ALL items from longest matching prefix node - 3. If more slots remain: - - Go up prefix levels and gather more items - - Within each prefix level, sort by distance - 4. Never return more than n items total + Find up to n closest items to 'query_item' by the described rules: + 1) Find longest existing matching prefix. + 2) Gather sub-tree items: + - If >= n items, pick top n by dot product. + - Else, move to parent, gather sub-tree, etc. + 3) If root is reached, return all if < n, else top n by dot product. """ - # Step 1: Longest prefix node - node, matched_prefix = self._find_longest_prefix_node(query_item.hierarchical_id) - - # Track items by their prefix length and distance - collected_by_prefix: dict[int, list[tuple[Item, float]]] = defaultdict(list) - already_seen = set() - - def gather_and_append(target_node: TrieNode, prefix_length: int): - """ - Gather items from subtree of `target_node`, compute distances, - and group them by prefix length. - """ - subtree_items = self._gather_subtree_items(target_node) - for it in subtree_items: - if it not in already_seen: - dist = self._euclidean_distance(it.residual, query_item.residual) - collected_by_prefix[prefix_length].append((it, dist)) - already_seen.add(it) - - # First gather items from longest prefix node - prefix_len = len(matched_prefix) - gather_and_append(node, prefix_len) - - # If we need more items, move up prefix levels - while prefix_len > 0 and sum(len(items) for items in collected_by_prefix.values()) < n: - prefix_len -= 1 - parent = self.root - for idx in matched_prefix[:prefix_len]: - parent = parent.children[idx] - gather_and_append(parent, prefix_len) - - # If still not enough and we're not at root, gather from root - if prefix_len != 0 and sum(len(items) for items in collected_by_prefix.values()) < n: - gather_and_append(self.root, 0) - - # Build final result prioritizing longer prefixes - result = [] - # Start from longest prefix and work down - for prefix_length in sorted(collected_by_prefix.keys(), reverse=True): - items = collected_by_prefix[prefix_length] - # Sort items within this prefix length by distance - items.sort(key=lambda x: x[1]) - # Add items from this level until we hit n - remaining_slots = n - len(result) - result.extend(item for item, _ in items[:remaining_slots]) - if len(result) >= n: + # 1) Descend as far as possible + path_stack = [(self.root, None)] # (node, parent_node) pairs for easy upward climb + current_node = self.root + + # Traverse hierarchy while possible + for idx in query_item.hierarchical_id: + if idx in current_node.children: + parent_node = current_node + current_node = current_node.children[idx] + path_stack.append((current_node, parent_node)) + else: + # Can't go deeper, break break - return result - - -# ------------------------ -# Example Usage: -# ------------------------ + # Now path_stack[-1][0] is the deepest node we matched. + # We'll climb up if needed. + while path_stack: + node, parent = path_stack[-1] + subtree_items = self._gather_subtree_items(node) + if len(subtree_items) >= n: + # We can pick the top n by dot product + scored = self._dot_scores(query_item.residual, subtree_items) + # Sort descending by score + scored.sort(key=lambda x: x[1], reverse=True) + return [itm for itm, _ in scored[:n]] + else: + # Not enough items: move up one level + # (pop the current node off the stack and keep going) + path_stack.pop() + if not path_stack: + # We are at the root (the last pop). + # If still not enough items, we simply return everything we have from the root + # or if root has more than n, we pick top n. + scored = self._dot_scores(query_item.residual, subtree_items) + scored.sort(key=lambda x: x[1], reverse=True) + return [itm for itm, _ in scored[:n]] + # Otherwise, continue in the loop (which means gather from the parent's node) + + # Safety net (should never get here logically, but just in case): + return [] + + +# --------------------------- +# Usage example (toy): if __name__ == "__main__": + # Suppose emb_dim = 3 for example trie = Trie() - - # generate random items and stress test - emb_dim = 4 - for i in range(12000): - semantic_id = tuple(random.randint(0, 255) for _ in range(4)) - item = Item(semantic_id, torch.rand(emb_dim)) - trie.insert(item) - - # generate query items - query_items = [] - for i in range(256): - semantic_id = tuple(random.randint(0, 255) for _ in range(4)) - query_item = Item(semantic_id, torch.rand(emb_dim)) - query_items.append(query_item) - - for query_item in query_items: - closest_items = trie.find_n_closest(query_item, n=20) - print(f"{len(closest_items)=}") - # print("Closest items to", query_item, ":\n", closest_items) + + # Insert a few items + items_to_insert = [ + Item((1, 2, 3), torch.tensor([1.0, 0.5, 0.2])), + Item((1, 2, 3), torch.tensor([1.1, 0.4, 0.0])), # collision on same path + Item((1, 2, 4), torch.tensor([0.9, 0.9, 0.9])), + Item((1, 5), torch.tensor([-0.1, 0.2, 1.0])), + Item((2,), torch.tensor([0.3, 0.3, 0.3])), + ] + for it in items_to_insert: + trie.insert(it) + + # Query item + query = Item((1, 2, 3, 99), torch.tensor([1.0, 1.0, 1.0])) # (1,2,3,99) partially matches deeper + closest = trie.find_closest(query, n=3) + print("Closest items:") + for c in closest: + print(c) From 465702f7740fa0d20532c12c5bedda8bc733e544 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 22 Jan 2025 10:03:34 +0700 Subject: [PATCH 044/175] add new collsion solver --- modeling/models/collision_solver.py | 136 ------ modeling/models/tiger.py | 14 +- modeling/rqvae/__init__.py | 0 modeling/rqvae/collisions.py | 27 -- modeling/rqvae_utils/__init__.py | 2 + modeling/rqvae_utils/collision_solver.py | 103 +++++ modeling/{rqvae => rqvae_utils}/rqvae_data.py | 0 modeling/{rqvae => rqvae_utils}/trie.py | 0 notebooks/CollisionSolver.ipynb | 395 ------------------ 9 files changed, 114 insertions(+), 563 deletions(-) delete mode 100644 modeling/models/collision_solver.py delete mode 100644 modeling/rqvae/__init__.py delete mode 100644 modeling/rqvae/collisions.py create mode 100644 modeling/rqvae_utils/__init__.py create mode 100644 modeling/rqvae_utils/collision_solver.py rename modeling/{rqvae => rqvae_utils}/rqvae_data.py (100%) rename modeling/{rqvae => rqvae_utils}/trie.py (100%) delete mode 100644 notebooks/CollisionSolver.ipynb diff --git a/modeling/models/collision_solver.py b/modeling/models/collision_solver.py deleted file mode 100644 index 6172c825..00000000 --- a/modeling/models/collision_solver.py +++ /dev/null @@ -1,136 +0,0 @@ -from collections import defaultdict -from typing import List, Tuple, Dict -import torch - -class CollisionSolver: - def __init__(self, residual_length, semantic_id_length, device: torch.device = torch.device('cpu')): - """ - :param residual_length: Длина остатка для каждого semantic_id - :param semantic_id_length: Длина semantic_id (без токена решающего коллизии) - :param device: Устройство - """ - self._semantic_id_dict = defaultdict(list) - self.residual_length = residual_length - self.semantic_id_length = semantic_id_length - self.device = device - - def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: - """ - Перенос тензора на устройство - """ - if tensor.device != self.device: - tensor = tensor.to(self.device) - return tensor - - def add_item(self, semantic_id: List[int] | torch.Tensor, residual: torch.Tensor) -> None: - """ - Добавляет новый элемент в словарь хранящий semantic_ids с остатками - - :param semantic_id: Semantic id (без токена решающего коллизии) - :param residual: Тензор с остатком для данного semantic_id - """ - if isinstance(semantic_id, torch.Tensor): - semantic_id = semantic_id.tolist() - - assert isinstance(residual, torch.Tensor) - assert residual.shape == (self.residual_length,) - assert len(semantic_id) == self.semantic_id_length - - residual = self._to_device(residual) - key = tuple(semantic_id) - self._semantic_id_dict[key].append((len(self._semantic_id_dict[key]), residual)) - - - def create_query_candidates_dict(self, semantic_ids: torch.Tensor | List[List[int]], residuals: torch.Tensor | List[List[int]]) -> None: - """ - Создает словарь, который содержит сгруппирированные по semantic id элементы, к ним добавлены токены решающие коллизии (добавляются по порядку начиная с нуля) - - :param semantic_ids: Тензор или список всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) - :param residuals: Тензор или список остатков для каждого semantic_id - """ - residuals_count = residuals.shape[0] if isinstance(residuals, torch.Tensor) else len(residuals) - semantic_ids_count = semantic_ids.shape[0] if isinstance(semantic_ids, torch.Tensor) else len(semantic_ids) - assert(residuals_count == semantic_ids_count) - - if isinstance(residuals, list): - residuals = torch.tensor(residuals, device=self.device) - residuals = self._to_device(residuals) - - for semantic_id, residual in zip(semantic_ids, residuals): - self.add_item(semantic_id, residual) - - def get_candidates_tensor(self, query_prefixes: List[List[int]]) -> Tuple[torch.Tensor, torch.Tensor]: - """ - :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии) - - :return: Кортеж из двух тензоров: - - candidates_tensor (размерность: [num_prefixes, max_collisions, residual_dim]): тензор, содержащий остатки кандидатов для каждого префикса - `max_collisions` — максимальное количество кандидатов для каждого префикса - - mask (размерность: [num_prefixes, max_collisions]): Маска для candidates_tensor - - Примечание: - Предполагаем что все префиксы из `query_prefixes` уже есть в словаре semantic ids - Если префикс не найден, будет выброшено исключение - """ - assert isinstance(query_prefixes, list) - assert(self.residual_length == len(self._semantic_id_dict[tuple(query_prefixes[0])][0][1])) - assert(len(query_prefixes[0]) == self.semantic_id_length) - - max_collision_len = max(len(x) for x in self._semantic_id_dict.values()) - candidates_tensor = torch.zeros(len(query_prefixes), max_collision_len, self.residual_length, dtype=torch.float32, device=self.device) - mask = torch.zeros(len(query_prefixes), max_collision_len, dtype=torch.bool, device=self.device) - - for i, semantic_id in enumerate(query_prefixes): - key = tuple(semantic_id) - assert key in self._semantic_id_dict.keys(), f"Не найдено обьектов с semantic id {key}" # нужно что-то с этим делать - for j, residual in self._semantic_id_dict[key]: #сохранение порядка - candidates_tensor[i, j] = residual - mask[i, j] = True - return candidates_tensor, mask - - def get_semantic_ids(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor) -> torch.Tensor: - """ - :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии) - - :return: semantic_ids: [num_prefixes, prefix_len + 1] список из semantic id с токенами решающие коллизии - """ - assert isinstance(query_prefixes, torch.Tensor) - assert isinstance(query_residuals, torch.Tensor) - assert(query_prefixes.shape[0] == query_residuals.shape[0]) - assert(query_prefixes.shape[1] == self.semantic_id_length) - assert(query_residuals.shape[1] == self.residual_length) - - query_prefixes = self._to_device(query_prefixes) - query_residuals = self._to_device(query_residuals) - - candidates_tensor, mask = self.get_candidates_tensor(query_prefixes.tolist()) - - masked_dot_products = torch.einsum('ijk,ik->ij', candidates_tensor, query_residuals).masked_fill(~mask, float('-inf')) - max_indices = torch.argmax(masked_dot_products, dim=1) - best_semantic_ids = torch.concat((query_prefixes, max_indices.unsqueeze(1)), dim=1) - return best_semantic_ids - - def get_closest_torch(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor): - raise NotImplementedError("get_closest_torch is not implemented") - - query_prefixes = query_prefixes.to(self.device) - query_residuals = query_residuals.to(self.device) - - batch_size, max_length = self._semantic_ids.shape - num_prefixes, prefix_len = query_prefixes.shape - - # привожу к одной размерности чтобы найти совпадения по префиксам - semantic_ids_exp = self._semantic_ids[:, :prefix_len].unsqueeze(0).expand(num_prefixes, batch_size, prefix_len) # [num_prefixes, batch_size, prefix_len] - prefixes_exp = query_prefixes.unsqueeze(1).expand(num_prefixes, batch_size, prefix_len) #torch.tile - is_prefix_match = (semantic_ids_exp == prefixes_exp).all(dim=2) # [num_prefixes, batch_size] - - # Шаг 2: Маскирование residuals для каждого префикса - residuals_exp = self._residuals.unsqueeze(0).expand(num_prefixes, batch_size, -1) # [num_prefixes, batch_size, emb_dim] - masked_residuals = residuals_exp * is_prefix_match.unsqueeze(2).float() # Зануляем строки, не соответствующие префиксам - dot_products = torch.einsum('ijk,ik->ij', masked_residuals, query_residuals) - max_indices = torch.argmax(dot_products, dim=1) # [num_prefixes] # - - best_semantic_ids = self._semantic_ids[max_indices] # [num_prefixes, max_length] - best_residuals = self._residuals[max_indices] # [num_prefixes, emb_dim] - - return best_semantic_ids, best_residuals \ No newline at end of file diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index c71917fe..60bc6319 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -3,8 +3,7 @@ import torch from tqdm import tqdm from models.base import SequentialTorchModel -from models.collision_solver import CollisionSolver -from rqvae.trie import Item, Trie +from rqvae_utils import CollisionSolver, Trie, Item from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -100,7 +99,7 @@ def __init__( self._init_weights(initializer_range) @classmethod - def init_rqvae(cls, config): + def init_rqvae(cls, config) -> RqVaeModel: rqvae_config = json.load(open(config["rqvae_train_config_path"])) rqvae_config["model"]["should_init_codebooks"] = False @@ -128,8 +127,13 @@ def create_from_config(cls, config, **kwargs): semantic_ids, residuals = rqvae_model({"embeddings": embeddings}) - solver = CollisionSolver(residuals.shape[1], len(semantic_ids[0]), device=DEVICE) - solver.create_query_candidates_dict(semantic_ids, residuals) # TODO + solver = CollisionSolver( + residual_dim=residuals.shape[1], + emb_dim=len(rqvae_model.codebook_sizes), + codebook_size=len(rqvae_model.codebook_sizes[0]), + device=DEVICE + ) + solver.create_query_candidates_dict(semantic_ids, residuals) item_id_to_embedding = { item_id: embedding for (item_id, embedding) in zip(item_ids, embeddings) diff --git a/modeling/rqvae/__init__.py b/modeling/rqvae/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/modeling/rqvae/collisions.py b/modeling/rqvae/collisions.py deleted file mode 100644 index 10ad039e..00000000 --- a/modeling/rqvae/collisions.py +++ /dev/null @@ -1,27 +0,0 @@ -from collections import defaultdict - - -def dedup(data): - count_dict = {} - - result = [] - for item in data: - code = item[2] - if code not in count_dict: - count_dict[code] = 0 - unique_index = count_dict[code] - count_dict[code] += 1 - new_last_element = (*code, unique_index) - result.append((item[0], item[1], new_last_element)) - - return result - -def dedup_semantic_ids(semantic_ids): # TODOPK - result = [] - count_dict = defaultdict(int) - for semantic_id in semantic_ids: - unique_index = count_dict[semantic_id] - count_dict[semantic_id] += 1 - new_last_element = (*semantic_id, unique_index) - result.append(new_last_element) - return result diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py new file mode 100644 index 00000000..a25b6189 --- /dev/null +++ b/modeling/rqvae_utils/__init__.py @@ -0,0 +1,2 @@ +from .collision_solver import CollisionSolver +from .trie import Item, Trie \ No newline at end of file diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py new file mode 100644 index 00000000..f81b9454 --- /dev/null +++ b/modeling/rqvae_utils/collision_solver.py @@ -0,0 +1,103 @@ +import torch + +class CollisionSolver: + def __init__(self, residual_dim, emb_dim, codebook_size, device: torch.device = torch.device('cpu')): + """ + :param residual_dim: Длина остатка + :param codebook_size: Количество элементов в одном кодбуке + :param emb_dim: Длина semantic_id (без токена решающего коллизии) + :param device: Устройство + """ + self._semantic_id_dict = None + self._unique_ids = None + self.counts = None + self.residual_dim = residual_dim + self.emb_dim = emb_dim + self.codebook_size = codebook_size + self.device = device + + self.key = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) + + def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: + """ + Перенос тензора на устройство + """ + if tensor.device != self.device: + tensor = tensor.to(self.device) + return tensor + + def create_query_candidates_dict(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: + """ + Создает разреженный тензор, который содержит сгруппированные по semantic id элементы + + :param semantic_ids: Тензор всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) + :param residuals: Тензор остатков для каждого semantic_id + """ + residuals_count, residual_length = residuals.shape + semantic_ids_count, semantic_id_length = semantic_ids.shape + + assert residuals_count == semantic_ids_count + assert semantic_id_length == self.emb_dim + assert residual_length == self.residual_dim + + residuals = self._to_device(residuals) + semantic_ids = self._to_device(semantic_ids) + unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) + unique_ids, inverse_indices = torch.unique(unique_id, return_inverse=True) + sorted_indices = torch.argsort(inverse_indices) + counts = torch.bincount(inverse_indices) + max_residuals_count = counts.max().item() + offsets = torch.cumsum(torch.cat((torch.tensor([0], dtype=torch.long, device=self.device), counts[:-1])), dim=0) + row_indices = inverse_indices[sorted_indices] + col_indices = torch.arange(semantic_ids_count) - offsets[row_indices] + indices = torch.stack([ + row_indices, + col_indices + ], dim=0) + + self._semantic_id_dict = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(len(unique_ids), max_residuals_count, self.residual_dim), device=self.device) + self._unique_ids = unique_ids + self.counts = counts + + + def get_residuals_by_semantic_id(self, semantic_id: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: + """ + :param semantic_id: [emb_dim] semantic id (без токена решающего коллизии) + + :return: candidates: [max_residuals_count, residual_dim] список остатков с таким же semantic id + :return: mask: [max_residuals_count] маска для списка остатков + """ + assert semantic_id.shape == (self.emb_dim,) + + semantic_id = self._to_device(semantic_id) + + unique_id = torch.einsum('c,c->', semantic_id, self.key) + target_index = (self._unique_ids == unique_id).nonzero(as_tuple=True)[0] + + if len(target_index) == 0: + empty_candidates = torch.empty((0, self.residual_dim), device=self.device) + empty_mask = torch.empty((0,), dtype=torch.bool, device=self.device) + return empty_candidates, empty_mask # Если unique_id отсутствует + + candidates = self._semantic_id_dict[target_index.item()].to_dense() + mask = torch.arange(candidates.size(0)) < self.counts[target_index.item()] + + return candidates, mask + + def get_scores(self, semantic_id, residual) -> tuple[torch.Tensor, int]: + """ + :param semantic_id: [emb_dim] semantic id (без токена решающего коллизии + :param residual: [residual_dim] Остаток + + :return: scores: [residuals_count] Вероятности для остатков + :return: index: Индекс наибольшего значения в scores + """ + assert semantic_id.shape == (self.emb_dim,) + assert residual.shape == (self.residual_dim,) + + residual = self._to_device(residual) + candidates, mask = self.get_residuals_by_semantic_id(semantic_id) + scores = torch.softmax(torch.einsum('jk,k->j', candidates[mask], residual), dim=0) + if scores.shape[0] == 0: + return torch.empty((0,), device=self.device), torch.empty((0,), device=self.device) + return scores, torch.argmax(scores) \ No newline at end of file diff --git a/modeling/rqvae/rqvae_data.py b/modeling/rqvae_utils/rqvae_data.py similarity index 100% rename from modeling/rqvae/rqvae_data.py rename to modeling/rqvae_utils/rqvae_data.py diff --git a/modeling/rqvae/trie.py b/modeling/rqvae_utils/trie.py similarity index 100% rename from modeling/rqvae/trie.py rename to modeling/rqvae_utils/trie.py diff --git a/notebooks/CollisionSolver.ipynb b/notebooks/CollisionSolver.ipynb deleted file mode 100644 index 4fabd090..00000000 --- a/notebooks/CollisionSolver.ipynb +++ /dev/null @@ -1,395 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "CH-xb-IDScxO" - }, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "from typing import List, Tuple, Dict\n", - "import torch" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "id": "WH6rvC8BSTD1" - }, - "outputs": [], - "source": [ - "class CollisionSolver:\n", - " def __init__(self, residual_length, semantic_id_length, device: torch.device = torch.device('cpu')):\n", - " \"\"\"\n", - " :param residual_length: Длина остатка для каждого semantic_id\n", - " :param semantic_id_length: Длина semantic_id (без токена решающего коллизии)\n", - " :param device: Устройство\n", - " \"\"\"\n", - " self._semantic_id_dict = defaultdict(list)\n", - " self.residual_length = residual_length\n", - " self.semantic_id_length = semantic_id_length\n", - " self.device = device\n", - "\n", - " def _to_device(self, tensor: torch.Tensor) -> torch.Tensor:\n", - " \"\"\"\n", - " Перенос тензора на устройство\n", - " \"\"\"\n", - " if tensor.device != self.device:\n", - " tensor = tensor.to(self.device)\n", - " return tensor\n", - "\n", - " def add_item(self, semantic_id: List[int] | torch.Tensor, residual: torch.Tensor) -> None:\n", - " \"\"\"\n", - " Добавляет новый элемент в словарь хранящий semantic_ids с остатками\n", - "\n", - " :param semantic_id: Semantic id (без токена решающего коллизии)\n", - " :param residual: Тензор с остатком для данного semantic_id\n", - " \"\"\"\n", - " if isinstance(semantic_id, torch.Tensor):\n", - " semantic_id = semantic_id.tolist()\n", - "\n", - " assert isinstance(residual, torch.Tensor)\n", - " assert residual.shape == (self.residual_length,)\n", - " assert len(semantic_id) == self.semantic_id_length\n", - "\n", - " residual = self._to_device(residual)\n", - " key = tuple(semantic_id)\n", - " self._semantic_id_dict[key].append((len(self._semantic_id_dict[key]), residual))\n", - "\n", - "\n", - " def create_query_candidates_dict(self, semantic_ids: torch.Tensor | List[List[int]], residuals: torch.Tensor | List[List[int]]) -> None:\n", - " \"\"\"\n", - " Создает словарь, который содержит сгруппирированные по semantic id элементы, к ним добавлены токены решающие коллизии (добавляются по порядку начиная с нуля)\n", - "\n", - " :param semantic_ids: Тензор или список всех semantic_id, полученных из rq-vae (без токенов решающих коллизии)\n", - " :param residuals: Тензор или список остатков для каждого semantic_id\n", - " \"\"\"\n", - " residuals_count = residuals.shape[0] if isinstance(residuals, torch.Tensor) else len(residuals)\n", - " semantic_ids_count = semantic_ids.shape[0] if isinstance(semantic_ids, torch.Tensor) else len(semantic_ids)\n", - " assert(residuals_count == semantic_ids_count)\n", - "\n", - " if isinstance(residuals, list):\n", - " residuals = torch.tensor(residuals, device=self.device)\n", - " residuals = self._to_device(residuals)\n", - "\n", - " for semantic_id, residual in zip(semantic_ids, residuals):\n", - " self.add_item(semantic_id, residual)\n", - "\n", - " def get_candidates_tensor(self, query_prefixes: List[List[int]]) -> Tuple[torch.Tensor, torch.Tensor]:\n", - " \"\"\"\n", - " :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии)\n", - "\n", - " :return: Кортеж из двух тензоров:\n", - " - candidates_tensor (размерность: [num_prefixes, max_collisions, residual_dim]): тензор, содержащий остатки кандидатов для каждого префикса\n", - " `max_collisions` — максимальное количество кандидатов для каждого префикса\n", - " - mask (размерность: [num_prefixes, max_collisions]): Маска для candidates_tensor\n", - "\n", - " Примечание:\n", - " Предполагаем что все префиксы из `query_prefixes` уже есть в словаре semantic ids\n", - " Если префикс не найден, будет выброшено исключение\n", - " \"\"\"\n", - " assert isinstance(query_prefixes, list)\n", - " assert(self.residual_length == len(self._semantic_id_dict[tuple(query_prefixes[0])][0][1]))\n", - " assert(len(query_prefixes[0]) == self.semantic_id_length)\n", - "\n", - " max_collision_len = max(len(x) for x in self._semantic_id_dict.values())\n", - " candidates_tensor = torch.zeros(len(query_prefixes), max_collision_len, self.residual_length, dtype=torch.float32, device=self.device)\n", - " mask = torch.zeros(len(query_prefixes), max_collision_len, dtype=torch.bool, device=self.device)\n", - "\n", - " for i, semantic_id in enumerate(query_prefixes):\n", - " key = tuple(semantic_id)\n", - " assert key in self._semantic_id_dict.keys(), f\"Не найдено обьектов с semantic id {key}\" # нужно что-то с этим делать\n", - " for j, residual in self._semantic_id_dict[key]: #сохранение порядка\n", - " candidates_tensor[i, j] = residual\n", - " mask[i, j] = True\n", - " return candidates_tensor, mask\n", - "\n", - " def get_semantic_ids(self, query_prefixes: torch.Tensor, query_residuals: torch.Tensor) -> torch.Tensor:\n", - " \"\"\"\n", - " :param query_prefixes: [num_prefixes, prefix_len] список из semantic id (без токенов решающих коллизии)\n", - "\n", - " :return: semantic_ids: [num_prefixes, prefix_len + 1] список из semantic id с токенами решающие коллизии\n", - " \"\"\"\n", - " assert isinstance(query_prefixes, torch.Tensor)\n", - " assert isinstance(query_residuals, torch.Tensor)\n", - " assert(query_prefixes.shape[0] == query_residuals.shape[0])\n", - " assert(query_prefixes.shape[1] == self.semantic_id_length)\n", - " assert(query_residuals.shape[1] == self.residual_length)\n", - "\n", - " query_prefixes = self._to_device(query_prefixes)\n", - " query_residuals = self._to_device(query_residuals)\n", - "\n", - " candidates_tensor, mask = self.get_candidates_tensor(query_prefixes.tolist())\n", - "\n", - " masked_dot_products = torch.einsum('ijk,ik->ij', candidates_tensor, query_residuals).masked_fill(~mask, float('-inf'))\n", - " max_indices = torch.argmax(masked_dot_products, dim=1)\n", - " best_semantic_ids = torch.concat((query_prefixes, max_indices.unsqueeze(1)), dim=1)\n", - " return best_semantic_ids" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "AhJgbuGESnWd" - }, - "source": [ - "# Пример использования" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "id": "pBjXwVLVSWMO" - }, - "outputs": [], - "source": [ - "residual_length = 12\n", - "semantic_ids_length = 3\n", - "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - "\n", - "semantic_ids = torch.tensor([\n", - " [1, 2, 3, 0],\n", - " [1, 2, 3, 1],\n", - " [1, 2, 3, 2],\n", - " [1, 2, 3, 3],\n", - " [1, 2, 4, 0],\n", - " [1, 2, 4, 1],\n", - " [1, 2, 4, 2],\n", - " [5, 2, 3, 0],\n", - " [5, 2, 3, 1],\n", - " [5, 2, 3, 2],\n", - " [5, 2, 3, 3],\n", - " [5, 2, 3, 4],\n", - " [5, 2, 3, 5],\n", - " [5, 2, 3, 6],\n", - " [2, 8, 7, 6],\n", - "], device=torch.device('cpu'))\n", - "\n", - "residuals = torch.rand(semantic_ids.shape[0], residual_length)\n", - "\n", - "query_prefixes = torch.tensor([\n", - " [1, 2, 3],\n", - " [1, 2, 4],\n", - " [5, 2, 3],\n", - " [5, 2, 3]\n", - "], device=device) # [num_prefixes, prefix_len]\n", - "\n", - "query_residuals = torch.rand(query_prefixes.shape[0], residual_length, device=torch.device('cpu')) # [num_prefixes, emb_dim]" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "wn7Uk8V_TgrE", - "outputId": "540b25c6-63bc-4613-90b1-5510ea4d6224" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[1, 2, 3, 0],\n", - " [1, 2, 4, 0],\n", - " [5, 2, 3, 0],\n", - " [5, 2, 3, 3]])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solver = CollisionSolver(residual_length, semantic_ids_length)\n", - "\n", - "solver.create_query_candidates_dict(semantic_ids[:, :-1], residuals)\n", - "\n", - "solver.get_semantic_ids(query_prefixes, query_residuals)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "3HTju2grZm-F", - "outputId": "442795a8-a952-466c-8c48-fb3d6f14bc81" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "defaultdict(list,\n", - " {(1,\n", - " 2,\n", - " 3): [(0,\n", - " tensor([0.7220, 0.9496, 0.4006, 0.8832, 0.6087, 0.4947, 0.1341, 0.9645, 0.7408,\n", - " 0.5972, 0.3433, 0.8700])), (1,\n", - " tensor([0.4457, 0.4410, 0.1333, 0.4391, 0.4153, 0.1703, 0.3044, 0.0940, 0.2773,\n", - " 0.5258, 0.5838, 0.0273])), (2,\n", - " tensor([0.6268, 0.1060, 0.0841, 0.0750, 0.4090, 0.2886, 0.4343, 0.1945, 0.0429,\n", - " 0.8477, 0.1418, 0.6465])), (3,\n", - " tensor([0.0077, 0.8171, 0.1344, 0.2223, 0.9616, 0.2790, 0.3448, 0.1485, 0.7148,\n", - " 0.5900, 0.0154, 0.4752]))],\n", - " (1,\n", - " 2,\n", - " 4): [(0,\n", - " tensor([0.3480, 0.3537, 0.3771, 0.1443, 0.6877, 0.4845, 0.8278, 0.9831, 0.4941,\n", - " 0.0682, 0.0900, 0.2485])), (1,\n", - " tensor([0.4048, 0.3308, 0.2278, 0.4890, 0.4899, 0.9994, 0.1511, 0.9374, 0.8730,\n", - " 0.7538, 0.0409, 0.1444])), (2,\n", - " tensor([0.3601, 0.7909, 0.0766, 0.7096, 0.5745, 0.2606, 0.4412, 0.8748, 0.1248,\n", - " 0.5816, 0.2185, 0.2352]))],\n", - " (5,\n", - " 2,\n", - " 3): [(0,\n", - " tensor([0.9524, 0.6976, 0.7598, 0.9994, 0.2881, 0.9854, 0.2537, 0.6400, 0.5632,\n", - " 0.5768, 0.2833, 0.0570])), (1,\n", - " tensor([0.6778, 0.6523, 0.7592, 0.1953, 0.0077, 0.0960, 0.0714, 0.8100, 0.9999,\n", - " 0.0407, 0.1231, 0.7192])), (2,\n", - " tensor([0.3652, 0.1131, 0.6800, 0.7445, 0.3586, 0.6498, 0.6479, 0.3792, 0.3110,\n", - " 0.7605, 0.9031, 0.4177])), (3,\n", - " tensor([0.5732, 0.6359, 0.1402, 0.0661, 0.6557, 0.5067, 0.7383, 0.7173, 0.3075,\n", - " 0.3920, 0.7497, 0.9602])), (4,\n", - " tensor([0.3407, 0.3068, 0.0815, 0.3887, 0.5861, 0.8103, 0.1236, 0.2175, 0.7513,\n", - " 0.5872, 0.7065, 0.0919])), (5,\n", - " tensor([0.0248, 0.9603, 0.5902, 0.8559, 0.9800, 0.9306, 0.9737, 0.9035, 0.2527,\n", - " 0.0049, 0.3355, 0.2858])), (6,\n", - " tensor([0.2779, 0.6830, 0.5133, 0.5767, 0.2029, 0.9013, 0.9562, 0.4474, 0.0377,\n", - " 0.0205, 0.6822, 0.1314]))],\n", - " (2,\n", - " 8,\n", - " 7): [(0,\n", - " tensor([0.5204, 0.4737, 0.7302, 0.0674, 0.0289, 0.5045, 0.1267, 0.8282, 0.7559,\n", - " 0.3856, 0.4455, 0.1655]))]})" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "solver._semantic_id_dict" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ji7PzyQeTxuP" - }, - "source": [ - "# Альтернативное решение только через torch" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "eh7jwIkHTr4_", - "outputId": "d9bccfba-c12f-4036-8bd3-0ef5d1d5b5e1" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Префикс: [1, 2, 3]\n", - "Лучший semantic_id: [1, 2, 3, 0]\n", - "Соответствующий residual: tensor([0.7220, 0.9496, 0.4006, 0.8832, 0.6087, 0.4947, 0.1341, 0.9645, 0.7408,\n", - " 0.5972, 0.3433, 0.8700])\n", - "Префикс: [1, 2, 4]\n", - "Лучший semantic_id: [1, 2, 4, 0]\n", - "Соответствующий residual: tensor([0.3480, 0.3537, 0.3771, 0.1443, 0.6877, 0.4845, 0.8278, 0.9831, 0.4941,\n", - " 0.0682, 0.0900, 0.2485])\n", - "Префикс: [5, 2, 3]\n", - "Лучший semantic_id: [5, 2, 3, 0]\n", - "Соответствующий residual: tensor([0.9524, 0.6976, 0.7598, 0.9994, 0.2881, 0.9854, 0.2537, 0.6400, 0.5632,\n", - " 0.5768, 0.2833, 0.0570])\n", - "Префикс: [5, 2, 3]\n", - "Лучший semantic_id: [5, 2, 3, 3]\n", - "Соответствующий residual: tensor([0.5732, 0.6359, 0.1402, 0.0661, 0.6557, 0.5067, 0.7383, 0.7173, 0.3075,\n", - " 0.3920, 0.7497, 0.9602])\n" - ] - } - ], - "source": [ - "semantic_ids = semantic_ids.to(device)\n", - "residuals = residuals.to(device)\n", - "query_prefixes = query_prefixes.to(device)\n", - "query_residuals = query_residuals.to(device)\n", - "\n", - "batch_size, max_length = semantic_ids.shape\n", - "num_prefixes, prefix_len = query_prefixes.shape\n", - "\n", - "#привожу к одной размерности чтобы найти совпадения по префиксам\n", - "semantic_ids_exp = semantic_ids[:, :prefix_len].unsqueeze(0).expand(num_prefixes, batch_size, prefix_len) # [num_prefixes, batch_size, prefix_len]\n", - "prefixes_exp = query_prefixes.unsqueeze(1).expand(num_prefixes, batch_size, prefix_len) #torch.tile\n", - "is_prefix_match = (semantic_ids_exp == prefixes_exp).all(dim=2) # [num_prefixes, batch_size]\n", - "\n", - "# Шаг 2: Маскирование residuals для каждого префикса\n", - "residuals_exp = residuals.unsqueeze(0).expand(num_prefixes, batch_size, -1) # [num_prefixes, batch_size, emb_dim]\n", - "masked_residuals = residuals_exp * is_prefix_match.unsqueeze(2).float() # Зануляем строки, не соответствующие префиксам\n", - "dot_products = torch.einsum('ijk,ik->ij', masked_residuals, query_residuals)\n", - "max_indices = torch.argmax(dot_products, dim=1) # [num_prefixes] #\n", - "\n", - "best_semantic_ids = semantic_ids[max_indices] # [num_prefixes, max_length]\n", - "best_residuals = residuals[max_indices] # [num_prefixes, emb_dim]\n", - "\n", - "for i, prefix in enumerate(query_prefixes):\n", - " print(f\"Префикс: {prefix.tolist()}\")\n", - " print(f\"Лучший semantic_id: {best_semantic_ids[i].tolist()}\")\n", - " print(f\"Соответствующий residual: {best_residuals[i]}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} From 9cd9b8c304b79f86e98b33aef8bb38c109ef00e4 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 22 Jan 2025 10:09:44 +0700 Subject: [PATCH 045/175] upudate tiger --- modeling/main.ipynb | 2746 +------------------------------------- modeling/models/tiger.py | 3 +- 2 files changed, 5 insertions(+), 2744 deletions(-) diff --git a/modeling/main.ipynb b/modeling/main.ipynb index 63993428..e7152949 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -2,94 +2,9 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4a57704c044240659047a8fd9d54123b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "tokenizer_config.json: 0%| | 0.00/2.32k [00:00 Date: Fri, 24 Jan 2025 11:39:36 +0700 Subject: [PATCH 046/175] fix solver init --- modeling/models/tiger.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 81d29168..44a8b624 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -131,10 +131,9 @@ def create_from_config(cls, config, **kwargs): solver = CollisionSolver( residual_dim=residuals.shape[1], emb_dim=len(rqvae_model.codebook_sizes), - codebook_size=len(rqvae_model.codebook_sizes[0]), - device=DEVICE + codebook_size=rqvae_model.codebook_sizes[0] ) - solver.create_query_candidates_dict(semantic_ids, residuals) + solver.create_query_candidates_dict(torch.tensor(semantic_ids), residuals) item_id_to_embedding = { item_id: embedding for (item_id, embedding) in zip(item_ids, embeddings) @@ -190,6 +189,8 @@ def forward(self, inputs): semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) semantic_events = semantic_ids.view(-1) + # TODO batch_logsoftmax don't match shapes (example bert4rec cls) + return {self._pred_prefix: logits, f"semantic.{self._labels_prefix}.ids": semantic_events} else: label_events = inputs["{}.ids".format(self._labels_prefix)] From 5d15b3262607b56f30d1a004b48b38888efc9de4 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 24 Jan 2025 12:06:37 +0700 Subject: [PATCH 047/175] sasrec compare --- configs/train/sasrec_train_config.json | 2 +- modeling/main.ipynb | 468 +++++++++++++++++++++++++ modeling/models/sasrec.py | 11 + 3 files changed, 480 insertions(+), 1 deletion(-) diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index aa29a029..690541d1 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -37,7 +37,7 @@ "positive_prefix": "positive", "negative_prefix": "negative", "candidate_prefix": "candidates", - "embedding_dim": 64, + "embedding_dim": 512, "num_heads": 2, "num_layers": 2, "dim_feedforward": 256, diff --git a/modeling/main.ipynb b/modeling/main.ipynb index e7152949..e0e0b985 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -228,6 +228,474 @@ "mask" ] }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "df = torch.load('../data/Beauty/data_full.pt')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 0.0115, -0.0265, -0.0014, ..., -0.0403, -0.0064, -0.0646],\n", + " [ 0.0522, 0.0051, -0.0317, ..., -0.0215, -0.0284, 0.0104],\n", + " [ 0.0657, -0.0131, -0.0234, ..., -0.0370, -0.0462, -0.0503],\n", + " ...,\n", + " [ 0.0432, 0.0406, -0.0517, ..., -0.0368, 0.0365, -0.0342],\n", + " [ 0.0523, 0.0635, -0.0556, ..., -0.0422, 0.0264, -0.0267],\n", + " [ 0.0603, 0.0612, -0.0532, ..., -0.0728, 0.0288, -0.0492]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.stack(df.sort_index().embeddings.tolist())" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
raw_user_idraw_item_idratingtimestampuser_idasindescriptiontitleimUrlsalesRankcategoriespricerelatedbrandcombined_textembeddings
item_id
1A20NUABVL6KKTVB002OVV7F04.01344556800651772B002OVV7F0Ten shades of eye shadow that features bold co...NYX Cosmetics Eye Shadow Palette 10 Color, Jaz...http://ecx.images-amazon.com/images/I/41PVzq7M...{'Beauty': 138235}[[Beauty, Makeup, Eyes, Eye Shadow]]7.97{'also_bought': ['B00B1ZPFT4', 'B00A5YDBWK', '...NYXDescription: Ten shades of eye shadow that fea...[tensor(0.0115), tensor(-0.0265), tensor(-0.00...
2A2CNWQEZHQ3K6RB006GQPZ8E2.01392940800952110B006GQPZ8EColor burst lip butter combines beautiful colo...REVLON Colorburst Lip Butter, Peach Parfait, 0...http://ecx.images-amazon.com/images/I/31r1scO3...{'Beauty': 12827}[[Beauty, Makeup, Lips, Lipstick]]6.35{'also_bought': ['B006GQTZ8A', 'B006GQEI0A', '...RevlonDescription: Color burst lip butter combines b...[tensor(0.0522), tensor(0.0051), tensor(-0.031...
3A1MVAPY2WT4D4MB0002DNZAC4.0140408640083086B0002DNZACBuy MAC Eyeshadows - MAC Eye Shadow Frost Sati...MAC Eye Shadow Frost Satin Taupehttp://ecx.images-amazon.com/images/I/41PNABCE...{'Beauty': 107237}[[Beauty, Makeup, Eyes, Eye Shadow]]21.19{'also_bought': ['B0018HPFNG', 'B00BEH4UU4', '...M.A.CDescription: Buy MAC Eyeshadows - MAC Eye Shad...[tensor(0.0657), tensor(-0.0131), tensor(-0.02...
4AO2GZG0N16FCDB0000UTUVU5.0138490560036346B0000UTUVUHere's something you simply can't live without...Mrs. Meyer's Clean Day Dish Soap, Lavender, 16...http://ecx.images-amazon.com/images/I/31H9M36F...NaN[[Beauty, Skin Care, Body, Moisturizers, Lotio...8.19{'also_bought': ['B0000UTUV0', 'B004ZY1J6G', '...Mrs. Meyer&#39;s Clean DayDescription: Here's something you simply can't...[tensor(0.0452), tensor(0.0012), tensor(0.0066...
5ASNGEUJ0LCACMB000F8HWXU5.0132079680027187B000F8HWXUQueen Helene has been a leader in quality beau...Queen Helene Mint Julep Masque, 2 Ounce Travel...http://ecx.images-amazon.com/images/I/41YKB8lA...{'Beauty': 10453}[[Beauty, Skin Care, Face, Treatments & Masks,...3.03{'also_bought': ['B0072CTONS', 'B00CYI3RAG', '...Queen HeleneDescription: Queen Helene has been a leader in...[tensor(0.0141), tensor(-0.0156), tensor(-0.03...
...................................................
12097A26ZA5ZV0BPRXKB00LCEROA25.014042592001186930B00LCEROA2NaNDr Song Rosehip Oil 4oz (4 oz)http://ecx.images-amazon.com/images/I/412qdoPc...{'Beauty': 7597}[[Beauty, Skin Care, Face, Oils & Serums]]19.99{'also_bought': ['B00LNVW1IE', 'B00JYKGFWY', '...NaNDescription: empty. Title: Dr Song Rosehip Oil...[tensor(0.0204), tensor(0.0244), tensor(0.0625...
12098A3DXSM2289U79EB00IBMV2ME5.013927680001188037B00IBMV2METhe Best BOTANICAL HYALURONIC ACID (5.0%) Gel ...Best Botanical Hyaluronic Acid Anti Aging Faci...http://ecx.images-amazon.com/images/I/4171BmUV...{'Beauty': 116649}[[Beauty, Skin Care, Face, Oils & Serums]]24.50{'also_bought': ['B00IC8JBIE', 'B00IC9AG5A', '...NaNDescription: The Best BOTANICAL HYALURONIC ACI...[tensor(0.0454), tensor(0.0540), tensor(-0.023...
12099A3DXSM2289U79EB00IC9AG5A5.013927680001188037B00IC9AG5AAnnouncing a Dermatologist Grade Skin Treatmen...Anti Aging All In One Facial Treatment (Replac...http://ecx.images-amazon.com/images/I/314b-jZn...{'Beauty': 84262}[[Beauty, Skin Care, Eyes, Combinations]]26.50{'also_bought': ['B00IC8JBIE', 'B00IC7L3JK', '...NaNDescription: Announcing a Dermatologist Grade ...[tensor(0.0432), tensor(0.0406), tensor(-0.051...
12100A2BWXFJAQNH8LCB00IKKORVU5.013936320001188048B00IKKORVUAnnouncing The Ultimate Vitamin C Anti Aging S...Best Vitamin C Anti Aging 6 Item System &amp; ...http://ecx.images-amazon.com/images/I/51yIcFHj...{'Beauty': 87595}[[Beauty, Skin Care, Sets & Kits]]125.00{'also_viewed': ['B00IC8JBIE', 'B00GYJWL7G', '...NaNDescription: Announcing The Ultimate Vitamin C...[tensor(0.0523), tensor(0.0635), tensor(-0.055...
12101A3DXSM2289U79EB00IC8JBIE5.013927680001188037B00IC8JBIEFor The Best Natural & Organic Ingredient Base...Best Anti Aging Facial Creme &amp; Face Cream ...http://ecx.images-amazon.com/images/I/41EwlMp3...{'Beauty': 28766}[[Beauty, Skin Care, Face, Creams & Moisturize...33.00{'also_bought': ['B00IC7L3JK', 'B00IC9AG5A', '...NaNDescription: For The Best Natural & Organic In...[tensor(0.0603), tensor(0.0612), tensor(-0.053...
\n", + "

12101 rows × 16 columns

\n", + "
" + ], + "text/plain": [ + " raw_user_id raw_item_id rating timestamp user_id asin \\\n", + "item_id \n", + "1 A20NUABVL6KKTV B002OVV7F0 4.0 1344556800 651772 B002OVV7F0 \n", + "2 A2CNWQEZHQ3K6R B006GQPZ8E 2.0 1392940800 952110 B006GQPZ8E \n", + "3 A1MVAPY2WT4D4M B0002DNZAC 4.0 1404086400 83086 B0002DNZAC \n", + "4 AO2GZG0N16FCD B0000UTUVU 5.0 1384905600 36346 B0000UTUVU \n", + "5 ASNGEUJ0LCACM B000F8HWXU 5.0 1320796800 27187 B000F8HWXU \n", + "... ... ... ... ... ... ... \n", + "12097 A26ZA5ZV0BPRXK B00LCEROA2 5.0 1404259200 1186930 B00LCEROA2 \n", + "12098 A3DXSM2289U79E B00IBMV2ME 5.0 1392768000 1188037 B00IBMV2ME \n", + "12099 A3DXSM2289U79E B00IC9AG5A 5.0 1392768000 1188037 B00IC9AG5A \n", + "12100 A2BWXFJAQNH8LC B00IKKORVU 5.0 1393632000 1188048 B00IKKORVU \n", + "12101 A3DXSM2289U79E B00IC8JBIE 5.0 1392768000 1188037 B00IC8JBIE \n", + "\n", + " description \\\n", + "item_id \n", + "1 Ten shades of eye shadow that features bold co... \n", + "2 Color burst lip butter combines beautiful colo... \n", + "3 Buy MAC Eyeshadows - MAC Eye Shadow Frost Sati... \n", + "4 Here's something you simply can't live without... \n", + "5 Queen Helene has been a leader in quality beau... \n", + "... ... \n", + "12097 NaN \n", + "12098 The Best BOTANICAL HYALURONIC ACID (5.0%) Gel ... \n", + "12099 Announcing a Dermatologist Grade Skin Treatmen... \n", + "12100 Announcing The Ultimate Vitamin C Anti Aging S... \n", + "12101 For The Best Natural & Organic Ingredient Base... \n", + "\n", + " title \\\n", + "item_id \n", + "1 NYX Cosmetics Eye Shadow Palette 10 Color, Jaz... \n", + "2 REVLON Colorburst Lip Butter, Peach Parfait, 0... \n", + "3 MAC Eye Shadow Frost Satin Taupe \n", + "4 Mrs. Meyer's Clean Day Dish Soap, Lavender, 16... \n", + "5 Queen Helene Mint Julep Masque, 2 Ounce Travel... \n", + "... ... \n", + "12097 Dr Song Rosehip Oil 4oz (4 oz) \n", + "12098 Best Botanical Hyaluronic Acid Anti Aging Faci... \n", + "12099 Anti Aging All In One Facial Treatment (Replac... \n", + "12100 Best Vitamin C Anti Aging 6 Item System & ... \n", + "12101 Best Anti Aging Facial Creme & Face Cream ... \n", + "\n", + " imUrl \\\n", + "item_id \n", + "1 http://ecx.images-amazon.com/images/I/41PVzq7M... \n", + "2 http://ecx.images-amazon.com/images/I/31r1scO3... \n", + "3 http://ecx.images-amazon.com/images/I/41PNABCE... \n", + "4 http://ecx.images-amazon.com/images/I/31H9M36F... \n", + "5 http://ecx.images-amazon.com/images/I/41YKB8lA... \n", + "... ... \n", + "12097 http://ecx.images-amazon.com/images/I/412qdoPc... \n", + "12098 http://ecx.images-amazon.com/images/I/4171BmUV... \n", + "12099 http://ecx.images-amazon.com/images/I/314b-jZn... \n", + "12100 http://ecx.images-amazon.com/images/I/51yIcFHj... \n", + "12101 http://ecx.images-amazon.com/images/I/41EwlMp3... \n", + "\n", + " salesRank \\\n", + "item_id \n", + "1 {'Beauty': 138235} \n", + "2 {'Beauty': 12827} \n", + "3 {'Beauty': 107237} \n", + "4 NaN \n", + "5 {'Beauty': 10453} \n", + "... ... \n", + "12097 {'Beauty': 7597} \n", + "12098 {'Beauty': 116649} \n", + "12099 {'Beauty': 84262} \n", + "12100 {'Beauty': 87595} \n", + "12101 {'Beauty': 28766} \n", + "\n", + " categories price \\\n", + "item_id \n", + "1 [[Beauty, Makeup, Eyes, Eye Shadow]] 7.97 \n", + "2 [[Beauty, Makeup, Lips, Lipstick]] 6.35 \n", + "3 [[Beauty, Makeup, Eyes, Eye Shadow]] 21.19 \n", + "4 [[Beauty, Skin Care, Body, Moisturizers, Lotio... 8.19 \n", + "5 [[Beauty, Skin Care, Face, Treatments & Masks,... 3.03 \n", + "... ... ... \n", + "12097 [[Beauty, Skin Care, Face, Oils & Serums]] 19.99 \n", + "12098 [[Beauty, Skin Care, Face, Oils & Serums]] 24.50 \n", + "12099 [[Beauty, Skin Care, Eyes, Combinations]] 26.50 \n", + "12100 [[Beauty, Skin Care, Sets & Kits]] 125.00 \n", + "12101 [[Beauty, Skin Care, Face, Creams & Moisturize... 33.00 \n", + "\n", + " related \\\n", + "item_id \n", + "1 {'also_bought': ['B00B1ZPFT4', 'B00A5YDBWK', '... \n", + "2 {'also_bought': ['B006GQTZ8A', 'B006GQEI0A', '... \n", + "3 {'also_bought': ['B0018HPFNG', 'B00BEH4UU4', '... \n", + "4 {'also_bought': ['B0000UTUV0', 'B004ZY1J6G', '... \n", + "5 {'also_bought': ['B0072CTONS', 'B00CYI3RAG', '... \n", + "... ... \n", + "12097 {'also_bought': ['B00LNVW1IE', 'B00JYKGFWY', '... \n", + "12098 {'also_bought': ['B00IC8JBIE', 'B00IC9AG5A', '... \n", + "12099 {'also_bought': ['B00IC8JBIE', 'B00IC7L3JK', '... \n", + "12100 {'also_viewed': ['B00IC8JBIE', 'B00GYJWL7G', '... \n", + "12101 {'also_bought': ['B00IC7L3JK', 'B00IC9AG5A', '... \n", + "\n", + " brand \\\n", + "item_id \n", + "1 NYX \n", + "2 Revlon \n", + "3 M.A.C \n", + "4 Mrs. Meyer's Clean Day \n", + "5 Queen Helene \n", + "... ... \n", + "12097 NaN \n", + "12098 NaN \n", + "12099 NaN \n", + "12100 NaN \n", + "12101 NaN \n", + "\n", + " combined_text \\\n", + "item_id \n", + "1 Description: Ten shades of eye shadow that fea... \n", + "2 Description: Color burst lip butter combines b... \n", + "3 Description: Buy MAC Eyeshadows - MAC Eye Shad... \n", + "4 Description: Here's something you simply can't... \n", + "5 Description: Queen Helene has been a leader in... \n", + "... ... \n", + "12097 Description: empty. Title: Dr Song Rosehip Oil... \n", + "12098 Description: The Best BOTANICAL HYALURONIC ACI... \n", + "12099 Description: Announcing a Dermatologist Grade ... \n", + "12100 Description: Announcing The Ultimate Vitamin C... \n", + "12101 Description: For The Best Natural & Organic In... \n", + "\n", + " embeddings \n", + "item_id \n", + "1 [tensor(0.0115), tensor(-0.0265), tensor(-0.00... \n", + "2 [tensor(0.0522), tensor(0.0051), tensor(-0.031... \n", + "3 [tensor(0.0657), tensor(-0.0131), tensor(-0.02... \n", + "4 [tensor(0.0452), tensor(0.0012), tensor(0.0066... \n", + "5 [tensor(0.0141), tensor(-0.0156), tensor(-0.03... \n", + "... ... \n", + "12097 [tensor(0.0204), tensor(0.0244), tensor(0.0625... \n", + "12098 [tensor(0.0454), tensor(0.0540), tensor(-0.023... \n", + "12099 [tensor(0.0432), tensor(0.0406), tensor(-0.051... \n", + "12100 [tensor(0.0523), tensor(0.0635), tensor(-0.055... \n", + "12101 [tensor(0.0603), tensor(0.0612), tensor(-0.053... \n", + "\n", + "[12101 rows x 16 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_index()" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 1ef5c9e7..b896fdf8 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -37,6 +37,17 @@ def __init__( self._positive_prefix = positive_prefix self._init_weights(initializer_range) + + df = torch.load('../data/Beauty/data_full.pt') + precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) + + # TODO ask if correct, nans occurs in validation + padding_embedding = self._item_embeddings.weight[0].unsqueeze(0) + mask_embedding = self._item_embeddings.weight[-1].unsqueeze(0) + + extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) + + self._item_embeddings.weight.data.copy_(extended_embeddings) @classmethod def create_from_config(cls, config, **kwargs): From b83529380225f0d97a7107eedb05acf4ce65148f Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 26 Jan 2025 11:11:47 +0700 Subject: [PATCH 048/175] update collsion solver & use dedup loss --- configs/train/tiger_train_config.json | 11 +- modeling/models/tiger.py | 13 +- modeling/rqvae_utils/collision_solver.py | 167 +++++++++++++++++------ 3 files changed, 145 insertions(+), 46 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index be57d320..96321efd 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -66,8 +66,15 @@ "type": "ce", "predictions_prefix": "logits", "labels_prefix": "semantic.labels", - "output_prefix": "downstream_loss", - "weight": 1.0 + "weight": 1.0, + "output_prefix": "semantic_loss" + }, + { + "type": "ce", + "predictions_prefix": "dedup.logits", + "labels_prefix": "dedup.labels", + "weight": 1.0, + "output_prefix": "dedup_loss" } ], "output_prefix": "loss" diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 44a8b624..bd3fae64 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -133,7 +133,7 @@ def create_from_config(cls, config, **kwargs): emb_dim=len(rqvae_model.codebook_sizes), codebook_size=rqvae_model.codebook_sizes[0] ) - solver.create_query_candidates_dict(torch.tensor(semantic_ids), residuals) + solver.create_query_candidates_dict(torch.tensor(item_ids), torch.tensor(semantic_ids), residuals) item_id_to_embedding = { item_id: embedding for (item_id, embedding) in zip(item_ids, embeddings) @@ -187,11 +187,20 @@ def forward(self, inputs): logits = decoder_prefix_scores.reshape(-1, self._codebook_sizes[0]) # (batch_size * dec_seq_len, _codebook_sizes[0]) semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) + residuals = torch.stack([self._item_id_to_residual[event] for event in label_events.tolist()]) + info = self._solver.get_scores_batch(semantic_ids, residuals) + # TODO use BatchLogSoftmax + semantic_events = semantic_ids.view(-1) # TODO batch_logsoftmax don't match shapes (example bert4rec cls) - return {self._pred_prefix: logits, f"semantic.{self._labels_prefix}.ids": semantic_events} + return { + self._pred_prefix: logits, + f"semantic.{self._labels_prefix}.ids": semantic_events, + "dedup.logits": info["scores"], + "dedup.labels.ids": info["dedup_tokens"] + } else: label_events = inputs["{}.ids".format(self._labels_prefix)] label_lengths = inputs["{}.length".format(self._labels_prefix)] diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index f81b9454..b4028b23 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -1,3 +1,4 @@ +from collections import defaultdict import torch class CollisionSolver: @@ -8,15 +9,16 @@ def __init__(self, residual_dim, emb_dim, codebook_size, device: torch.device = :param emb_dim: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._semantic_id_dict = None - self._unique_ids = None - self.counts = None - self.residual_dim = residual_dim - self.emb_dim = emb_dim - self.codebook_size = codebook_size - self.device = device + self._sem_ids_sparse_tensor = None #тензор группирирующий остатки по semantic_id + self.item_ids_sparse_tensor = None #тензор группирируюшщий реальные айди айтемов по semantic_id + self.counts_dict = defaultdict(int) #тензор храняющий количество коллизий по semantic_id + self.residual_dim = residual_dim #длина остатка + self.emb_dim = emb_dim #длина semantic_id + self.codebook_size = codebook_size #количество элементов в одном кодбуке + self.device = device #девайс + self.item_ids_dict = {} #словарь сопостовляющий каждому item_id его semantic_id и токен решающий коллизии - self.key = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) + self.key = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) #ключ для сопоставления числа каждому semantic_id def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: """ @@ -26,10 +28,11 @@ def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: tensor = tensor.to(self.device) return tensor - def create_query_candidates_dict(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: + def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: """ Создает разреженный тензор, который содержит сгруппированные по semantic id элементы + :param item_ids: Реальные айди айтемов (пусть будут больше 0) :param semantic_ids: Тензор всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) :param residuals: Тензор остатков для каждого semantic_id """ @@ -39,9 +42,12 @@ def create_query_candidates_dict(self, semantic_ids: torch.Tensor, residuals: to assert residuals_count == semantic_ids_count assert semantic_id_length == self.emb_dim assert residual_length == self.residual_dim + assert item_ids.shape == (residuals_count,) + item_ids = self._to_device(item_ids) residuals = self._to_device(residuals) semantic_ids = self._to_device(semantic_ids) + unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) unique_ids, inverse_indices = torch.unique(unique_id, return_inverse=True) sorted_indices = torch.argsort(inverse_indices) @@ -51,53 +57,130 @@ def create_query_candidates_dict(self, semantic_ids: torch.Tensor, residuals: to row_indices = inverse_indices[sorted_indices] col_indices = torch.arange(semantic_ids_count) - offsets[row_indices] indices = torch.stack([ - row_indices, + unique_ids[row_indices], col_indices ], dim=0) - self._semantic_id_dict = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(len(unique_ids), max_residuals_count, self.residual_dim), device=self.device) - self._unique_ids = unique_ids - self.counts = counts + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(self.codebook_size ** self.emb_dim, max_residuals_count, self.residual_dim), device=self.device) + self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) + + item_id_indices = torch.stack((unique_ids[row_indices], col_indices)) + + self.item_ids_dict = { + item_id.item(): (sem_id_key.item(), dedup_token.item()) + for item_id, (sem_id_key, dedup_token) in zip(item_ids[sorted_indices], torch.stack((unique_ids[row_indices], col_indices), dim=1)) + } + self.item_ids_sparse_tensor = torch.sparse_coo_tensor(item_id_indices, item_ids[sorted_indices], size=(self.codebook_size ** self.emb_dim, max_residuals_count), device=self.device, dtype=torch.int16) + + def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: + assert semantic_ids.shape[1] == self.emb_dim + semantic_ids = self._to_device(semantic_ids) + unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + + candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) + counts = torch.tensor([self.counts_dict[key.item()] for key in unique_ids], device=self.device) + mask = torch.arange(candidates.shape[1], device=self.device).expand(len(unique_ids), -1) < counts.view(-1, 1) + + return candidates, mask - def get_residuals_by_semantic_id(self, semantic_id: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: + def get_scores_batch(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: """ - :param semantic_id: [emb_dim] semantic id (без токена решающего коллизии) + :param semantic_id: [batch_size, emb_dim] semantic ids (без токена решающего коллизии) + :param residuals: [batch_size, residual_dim] остатки + + :return: Словарь с ключами: + - 'scores_mask': [batch_size, max_collision_count] маска существующих значений scores + - 'scores': [batch_size, max_collision_count] софтмакс для каждого из кандидатов + - 'dedup_tokens_mask': [batch_size] маска существующих токенов решающих коллизии + - 'dedup_tokens': [batch_size] токены решающие коллизии + - 'item_ids': [batch_size] реальные айди айтемов + """ + assert semantic_ids.shape[1] == self.emb_dim + assert residuals.shape[1] == self.residual_dim + assert semantic_ids.shape[0] == residuals.shape[0] + + semantic_ids = self._to_device(semantic_ids) + residuals = self._to_device(residuals) + + unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + + candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) + + scores = torch.softmax(torch.einsum('njk,nk->nj', candidates, residuals).masked_fill(~mask, float('-inf')), dim=1) - :return: candidates: [max_residuals_count, residual_dim] список остатков с таким же semantic id - :return: mask: [max_residuals_count] маска для списка остатков + indices = torch.argmax(scores, dim=1) + item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][indices[i]] for i in range(semantic_ids.shape[0])]) + + return { + "scores_mask": mask, + "scores": scores, + "dedup_tokens_mask": mask.any(dim=1), + "dedup_tokens": indices, + "item_ids": item_ids + } + + + def get_item_id_info(self, item_id: int) -> dict[str, torch.Tensor]: """ - assert semantic_id.shape == (self.emb_dim,) + Возвращает информацию по заданному item_id: + - semantic_id + - Все элементы с таким же semantic_id + - Их item_ids + - Их остатки + - Токены, решающие коллизии (dedup tokens) + + :param item_id: айди айтема + + :return: Словарь с ключами: + - 'semantic_id': [emb_dim] semantic id + - 'residuals': [count, residual_dim] остатки + - 'item_ids': [count] item ids + - 'dedup_tokens': [count] токены решающие коллизии + """ + + if item_id not in self.item_ids_dict: + return { + "semantic_id": torch.empty(0, dtype=torch.long, device=self.device), + "residuals": torch.empty((0, self.residual_dim), device=self.device), + "item_ids": torch.empty(0, dtype=torch.int16, device=self.device), + "dedup_tokens": torch.empty(0, dtype=torch.long, device=self.device), + } - semantic_id = self._to_device(semantic_id) + semantic_id_key, dedup_token = self.item_ids_dict[item_id] - unique_id = torch.einsum('c,c->', semantic_id, self.key) - target_index = (self._unique_ids == unique_id).nonzero(as_tuple=True)[0] + semantic_id = torch.div(semantic_id_key, self.key, rounding_mode='floor') % self.codebook_size - if len(target_index) == 0: - empty_candidates = torch.empty((0, self.residual_dim), device=self.device) - empty_mask = torch.empty((0,), dtype=torch.bool, device=self.device) - return empty_candidates, empty_mask # Если unique_id отсутствует + assert semantic_id.shape == (self.emb_dim,) - candidates = self._semantic_id_dict[target_index.item()].to_dense() - mask = torch.arange(candidates.size(0)) < self.counts[target_index.item()] + candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_id[None]) + residuals = candidates.squeeze(0)[mask.squeeze(0)] + item_ids = self.item_ids_sparse_tensor[semantic_id_key].to_dense()[mask.squeeze(0)] - return candidates, mask + dedup_tokens = torch.arange(residuals.shape[0], device=self.device) - def get_scores(self, semantic_id, residual) -> tuple[torch.Tensor, int]: + return { + "semantic_id": semantic_id, + "residuals": residuals, + "item_ids": item_ids, + "dedup_tokens": dedup_tokens, + } + + def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: """ - :param semantic_id: [emb_dim] semantic id (без токена решающего коллизии - :param residual: [residual_dim] Остаток + :param semantic_id: [batch_size, emb_dim] semantic ids (без токенов решающего коллизии) + :param dedup_tokens: [batch_size] токены решающие коллизии - :return: scores: [residuals_count] Вероятности для остатков - :return: index: Индекс наибольшего значения в scores + :return: item_ids : [batch_size] реальные айди айтемов """ - assert semantic_id.shape == (self.emb_dim,) - assert residual.shape == (self.residual_dim,) - - residual = self._to_device(residual) - candidates, mask = self.get_residuals_by_semantic_id(semantic_id) - scores = torch.softmax(torch.einsum('jk,k->j', candidates[mask], residual), dim=0) - if scores.shape[0] == 0: - return torch.empty((0,), device=self.device), torch.empty((0,), device=self.device) - return scores, torch.argmax(scores) \ No newline at end of file + assert semantic_ids.shape[1] == self.emb_dim + assert dedup_tokens.shape == (semantic_ids.shape[0],) + + semantic_ids = self._to_device(semantic_ids) + dedup_tokens = self._to_device(dedup_tokens) + + unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + + item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) + + return item_ids From dde3835c41aa20d41e68bb1ae90dc7dec6b3ccd0 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 26 Jan 2025 11:55:06 +0700 Subject: [PATCH 049/175] optimize item embs --- modeling/main.ipynb | 447 +-------------------------------------- modeling/models/tiger.py | 19 +- 2 files changed, 19 insertions(+), 447 deletions(-) diff --git a/modeling/main.ipynb b/modeling/main.ipynb index e0e0b985..b4e92a3d 100644 --- a/modeling/main.ipynb +++ b/modeling/main.ipynb @@ -241,457 +241,18 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "tensor([[ 0.0115, -0.0265, -0.0014, ..., -0.0403, -0.0064, -0.0646],\n", - " [ 0.0522, 0.0051, -0.0317, ..., -0.0215, -0.0284, 0.0104],\n", - " [ 0.0657, -0.0131, -0.0234, ..., -0.0370, -0.0462, -0.0503],\n", - " ...,\n", - " [ 0.0432, 0.0406, -0.0517, ..., -0.0368, 0.0365, -0.0342],\n", - " [ 0.0523, 0.0635, -0.0556, ..., -0.0422, 0.0264, -0.0267],\n", - " [ 0.0603, 0.0612, -0.0532, ..., -0.0728, 0.0288, -0.0492]])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "torch.stack(df.sort_index().embeddings.tolist())" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
raw_user_idraw_item_idratingtimestampuser_idasindescriptiontitleimUrlsalesRankcategoriespricerelatedbrandcombined_textembeddings
item_id
1A20NUABVL6KKTVB002OVV7F04.01344556800651772B002OVV7F0Ten shades of eye shadow that features bold co...NYX Cosmetics Eye Shadow Palette 10 Color, Jaz...http://ecx.images-amazon.com/images/I/41PVzq7M...{'Beauty': 138235}[[Beauty, Makeup, Eyes, Eye Shadow]]7.97{'also_bought': ['B00B1ZPFT4', 'B00A5YDBWK', '...NYXDescription: Ten shades of eye shadow that fea...[tensor(0.0115), tensor(-0.0265), tensor(-0.00...
2A2CNWQEZHQ3K6RB006GQPZ8E2.01392940800952110B006GQPZ8EColor burst lip butter combines beautiful colo...REVLON Colorburst Lip Butter, Peach Parfait, 0...http://ecx.images-amazon.com/images/I/31r1scO3...{'Beauty': 12827}[[Beauty, Makeup, Lips, Lipstick]]6.35{'also_bought': ['B006GQTZ8A', 'B006GQEI0A', '...RevlonDescription: Color burst lip butter combines b...[tensor(0.0522), tensor(0.0051), tensor(-0.031...
3A1MVAPY2WT4D4MB0002DNZAC4.0140408640083086B0002DNZACBuy MAC Eyeshadows - MAC Eye Shadow Frost Sati...MAC Eye Shadow Frost Satin Taupehttp://ecx.images-amazon.com/images/I/41PNABCE...{'Beauty': 107237}[[Beauty, Makeup, Eyes, Eye Shadow]]21.19{'also_bought': ['B0018HPFNG', 'B00BEH4UU4', '...M.A.CDescription: Buy MAC Eyeshadows - MAC Eye Shad...[tensor(0.0657), tensor(-0.0131), tensor(-0.02...
4AO2GZG0N16FCDB0000UTUVU5.0138490560036346B0000UTUVUHere's something you simply can't live without...Mrs. Meyer's Clean Day Dish Soap, Lavender, 16...http://ecx.images-amazon.com/images/I/31H9M36F...NaN[[Beauty, Skin Care, Body, Moisturizers, Lotio...8.19{'also_bought': ['B0000UTUV0', 'B004ZY1J6G', '...Mrs. Meyer&#39;s Clean DayDescription: Here's something you simply can't...[tensor(0.0452), tensor(0.0012), tensor(0.0066...
5ASNGEUJ0LCACMB000F8HWXU5.0132079680027187B000F8HWXUQueen Helene has been a leader in quality beau...Queen Helene Mint Julep Masque, 2 Ounce Travel...http://ecx.images-amazon.com/images/I/41YKB8lA...{'Beauty': 10453}[[Beauty, Skin Care, Face, Treatments & Masks,...3.03{'also_bought': ['B0072CTONS', 'B00CYI3RAG', '...Queen HeleneDescription: Queen Helene has been a leader in...[tensor(0.0141), tensor(-0.0156), tensor(-0.03...
...................................................
12097A26ZA5ZV0BPRXKB00LCEROA25.014042592001186930B00LCEROA2NaNDr Song Rosehip Oil 4oz (4 oz)http://ecx.images-amazon.com/images/I/412qdoPc...{'Beauty': 7597}[[Beauty, Skin Care, Face, Oils & Serums]]19.99{'also_bought': ['B00LNVW1IE', 'B00JYKGFWY', '...NaNDescription: empty. Title: Dr Song Rosehip Oil...[tensor(0.0204), tensor(0.0244), tensor(0.0625...
12098A3DXSM2289U79EB00IBMV2ME5.013927680001188037B00IBMV2METhe Best BOTANICAL HYALURONIC ACID (5.0%) Gel ...Best Botanical Hyaluronic Acid Anti Aging Faci...http://ecx.images-amazon.com/images/I/4171BmUV...{'Beauty': 116649}[[Beauty, Skin Care, Face, Oils & Serums]]24.50{'also_bought': ['B00IC8JBIE', 'B00IC9AG5A', '...NaNDescription: The Best BOTANICAL HYALURONIC ACI...[tensor(0.0454), tensor(0.0540), tensor(-0.023...
12099A3DXSM2289U79EB00IC9AG5A5.013927680001188037B00IC9AG5AAnnouncing a Dermatologist Grade Skin Treatmen...Anti Aging All In One Facial Treatment (Replac...http://ecx.images-amazon.com/images/I/314b-jZn...{'Beauty': 84262}[[Beauty, Skin Care, Eyes, Combinations]]26.50{'also_bought': ['B00IC8JBIE', 'B00IC7L3JK', '...NaNDescription: Announcing a Dermatologist Grade ...[tensor(0.0432), tensor(0.0406), tensor(-0.051...
12100A2BWXFJAQNH8LCB00IKKORVU5.013936320001188048B00IKKORVUAnnouncing The Ultimate Vitamin C Anti Aging S...Best Vitamin C Anti Aging 6 Item System &amp; ...http://ecx.images-amazon.com/images/I/51yIcFHj...{'Beauty': 87595}[[Beauty, Skin Care, Sets & Kits]]125.00{'also_viewed': ['B00IC8JBIE', 'B00GYJWL7G', '...NaNDescription: Announcing The Ultimate Vitamin C...[tensor(0.0523), tensor(0.0635), tensor(-0.055...
12101A3DXSM2289U79EB00IC8JBIE5.013927680001188037B00IC8JBIEFor The Best Natural & Organic Ingredient Base...Best Anti Aging Facial Creme &amp; Face Cream ...http://ecx.images-amazon.com/images/I/41EwlMp3...{'Beauty': 28766}[[Beauty, Skin Care, Face, Creams & Moisturize...33.00{'also_bought': ['B00IC7L3JK', 'B00IC9AG5A', '...NaNDescription: For The Best Natural & Organic In...[tensor(0.0603), tensor(0.0612), tensor(-0.053...
\n", - "

12101 rows × 16 columns

\n", - "
" - ], - "text/plain": [ - " raw_user_id raw_item_id rating timestamp user_id asin \\\n", - "item_id \n", - "1 A20NUABVL6KKTV B002OVV7F0 4.0 1344556800 651772 B002OVV7F0 \n", - "2 A2CNWQEZHQ3K6R B006GQPZ8E 2.0 1392940800 952110 B006GQPZ8E \n", - "3 A1MVAPY2WT4D4M B0002DNZAC 4.0 1404086400 83086 B0002DNZAC \n", - "4 AO2GZG0N16FCD B0000UTUVU 5.0 1384905600 36346 B0000UTUVU \n", - "5 ASNGEUJ0LCACM B000F8HWXU 5.0 1320796800 27187 B000F8HWXU \n", - "... ... ... ... ... ... ... \n", - "12097 A26ZA5ZV0BPRXK B00LCEROA2 5.0 1404259200 1186930 B00LCEROA2 \n", - "12098 A3DXSM2289U79E B00IBMV2ME 5.0 1392768000 1188037 B00IBMV2ME \n", - "12099 A3DXSM2289U79E B00IC9AG5A 5.0 1392768000 1188037 B00IC9AG5A \n", - "12100 A2BWXFJAQNH8LC B00IKKORVU 5.0 1393632000 1188048 B00IKKORVU \n", - "12101 A3DXSM2289U79E B00IC8JBIE 5.0 1392768000 1188037 B00IC8JBIE \n", - "\n", - " description \\\n", - "item_id \n", - "1 Ten shades of eye shadow that features bold co... \n", - "2 Color burst lip butter combines beautiful colo... \n", - "3 Buy MAC Eyeshadows - MAC Eye Shadow Frost Sati... \n", - "4 Here's something you simply can't live without... \n", - "5 Queen Helene has been a leader in quality beau... \n", - "... ... \n", - "12097 NaN \n", - "12098 The Best BOTANICAL HYALURONIC ACID (5.0%) Gel ... \n", - "12099 Announcing a Dermatologist Grade Skin Treatmen... \n", - "12100 Announcing The Ultimate Vitamin C Anti Aging S... \n", - "12101 For The Best Natural & Organic Ingredient Base... \n", - "\n", - " title \\\n", - "item_id \n", - "1 NYX Cosmetics Eye Shadow Palette 10 Color, Jaz... \n", - "2 REVLON Colorburst Lip Butter, Peach Parfait, 0... \n", - "3 MAC Eye Shadow Frost Satin Taupe \n", - "4 Mrs. Meyer's Clean Day Dish Soap, Lavender, 16... \n", - "5 Queen Helene Mint Julep Masque, 2 Ounce Travel... \n", - "... ... \n", - "12097 Dr Song Rosehip Oil 4oz (4 oz) \n", - "12098 Best Botanical Hyaluronic Acid Anti Aging Faci... \n", - "12099 Anti Aging All In One Facial Treatment (Replac... \n", - "12100 Best Vitamin C Anti Aging 6 Item System & ... \n", - "12101 Best Anti Aging Facial Creme & Face Cream ... \n", - "\n", - " imUrl \\\n", - "item_id \n", - "1 http://ecx.images-amazon.com/images/I/41PVzq7M... \n", - "2 http://ecx.images-amazon.com/images/I/31r1scO3... \n", - "3 http://ecx.images-amazon.com/images/I/41PNABCE... \n", - "4 http://ecx.images-amazon.com/images/I/31H9M36F... \n", - "5 http://ecx.images-amazon.com/images/I/41YKB8lA... \n", - "... ... \n", - "12097 http://ecx.images-amazon.com/images/I/412qdoPc... \n", - "12098 http://ecx.images-amazon.com/images/I/4171BmUV... \n", - "12099 http://ecx.images-amazon.com/images/I/314b-jZn... \n", - "12100 http://ecx.images-amazon.com/images/I/51yIcFHj... \n", - "12101 http://ecx.images-amazon.com/images/I/41EwlMp3... \n", - "\n", - " salesRank \\\n", - "item_id \n", - "1 {'Beauty': 138235} \n", - "2 {'Beauty': 12827} \n", - "3 {'Beauty': 107237} \n", - "4 NaN \n", - "5 {'Beauty': 10453} \n", - "... ... \n", - "12097 {'Beauty': 7597} \n", - "12098 {'Beauty': 116649} \n", - "12099 {'Beauty': 84262} \n", - "12100 {'Beauty': 87595} \n", - "12101 {'Beauty': 28766} \n", - "\n", - " categories price \\\n", - "item_id \n", - "1 [[Beauty, Makeup, Eyes, Eye Shadow]] 7.97 \n", - "2 [[Beauty, Makeup, Lips, Lipstick]] 6.35 \n", - "3 [[Beauty, Makeup, Eyes, Eye Shadow]] 21.19 \n", - "4 [[Beauty, Skin Care, Body, Moisturizers, Lotio... 8.19 \n", - "5 [[Beauty, Skin Care, Face, Treatments & Masks,... 3.03 \n", - "... ... ... \n", - "12097 [[Beauty, Skin Care, Face, Oils & Serums]] 19.99 \n", - "12098 [[Beauty, Skin Care, Face, Oils & Serums]] 24.50 \n", - "12099 [[Beauty, Skin Care, Eyes, Combinations]] 26.50 \n", - "12100 [[Beauty, Skin Care, Sets & Kits]] 125.00 \n", - "12101 [[Beauty, Skin Care, Face, Creams & Moisturize... 33.00 \n", - "\n", - " related \\\n", - "item_id \n", - "1 {'also_bought': ['B00B1ZPFT4', 'B00A5YDBWK', '... \n", - "2 {'also_bought': ['B006GQTZ8A', 'B006GQEI0A', '... \n", - "3 {'also_bought': ['B0018HPFNG', 'B00BEH4UU4', '... \n", - "4 {'also_bought': ['B0000UTUV0', 'B004ZY1J6G', '... \n", - "5 {'also_bought': ['B0072CTONS', 'B00CYI3RAG', '... \n", - "... ... \n", - "12097 {'also_bought': ['B00LNVW1IE', 'B00JYKGFWY', '... \n", - "12098 {'also_bought': ['B00IC8JBIE', 'B00IC9AG5A', '... \n", - "12099 {'also_bought': ['B00IC8JBIE', 'B00IC7L3JK', '... \n", - "12100 {'also_viewed': ['B00IC8JBIE', 'B00GYJWL7G', '... \n", - "12101 {'also_bought': ['B00IC7L3JK', 'B00IC9AG5A', '... \n", - "\n", - " brand \\\n", - "item_id \n", - "1 NYX \n", - "2 Revlon \n", - "3 M.A.C \n", - "4 Mrs. Meyer's Clean Day \n", - "5 Queen Helene \n", - "... ... \n", - "12097 NaN \n", - "12098 NaN \n", - "12099 NaN \n", - "12100 NaN \n", - "12101 NaN \n", - "\n", - " combined_text \\\n", - "item_id \n", - "1 Description: Ten shades of eye shadow that fea... \n", - "2 Description: Color burst lip butter combines b... \n", - "3 Description: Buy MAC Eyeshadows - MAC Eye Shad... \n", - "4 Description: Here's something you simply can't... \n", - "5 Description: Queen Helene has been a leader in... \n", - "... ... \n", - "12097 Description: empty. Title: Dr Song Rosehip Oil... \n", - "12098 Description: The Best BOTANICAL HYALURONIC ACI... \n", - "12099 Description: Announcing a Dermatologist Grade ... \n", - "12100 Description: Announcing The Ultimate Vitamin C... \n", - "12101 Description: For The Best Natural & Organic In... \n", - "\n", - " embeddings \n", - "item_id \n", - "1 [tensor(0.0115), tensor(-0.0265), tensor(-0.00... \n", - "2 [tensor(0.0522), tensor(0.0051), tensor(-0.031... \n", - "3 [tensor(0.0657), tensor(-0.0131), tensor(-0.02... \n", - "4 [tensor(0.0452), tensor(0.0012), tensor(0.0066... \n", - "5 [tensor(0.0141), tensor(-0.0156), tensor(-0.03... \n", - "... ... \n", - "12097 [tensor(0.0204), tensor(0.0244), tensor(0.0625... \n", - "12098 [tensor(0.0454), tensor(0.0540), tensor(-0.023... \n", - "12099 [tensor(0.0432), tensor(0.0406), tensor(-0.051... \n", - "12100 [tensor(0.0523), tensor(0.0635), tensor(-0.055... \n", - "12101 [tensor(0.0603), tensor(0.0612), tensor(-0.053... \n", - "\n", - "[12101 rows x 16 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df.sort_index()" ] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index bd3fae64..10bba88a 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -74,13 +74,20 @@ def __init__( self._solver = solver self._codebook_sizes = codebook_sizes + self._codebook_item_embeddings_flattened = torch.cat([codebook for codebook in rqvae_model.codebooks], dim=0) + self._codebook_item_embeddings_flattened.requires_grad = False # TODO ask if freeze is needed self._codebook_item_embeddings_stacked = torch.stack([codebook for codebook in rqvae_model.codebooks]) + self._codebook_item_embeddings_stacked.requires_grad = False # TODO ask if freeze is needed self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual self._item_id_to_embedding = item_id_to_embedding + self._item_id_to_semantic_embedding = { + item_id: emb for (item_id, emb) in zip(item_id_to_semantic_id.keys(), self.get_init_item_embeddings(list(item_id_to_semantic_id.keys()))) + } + self._trie = Trie() for item_id, semantic_id in item_id_to_semantic_id.items(): self._trie.insert(Item(semantic_id, item_id_to_residual[item_id])) # TODO no dedup tokens here @@ -289,9 +296,13 @@ def _apply_decoder( return decoder_outputs - def get_item_embeddings(self, events): + def get_item_embeddings(self, events): # TODO freezed embeddings events = events.tolist() - + embs = torch.stack([self._item_id_to_semantic_embedding[event] for event in events]) + embs = embs.view(-1, self._embedding_dim) + return embs + + def get_init_item_embeddings(self, events): # TODO freezed embeddings # convert to semantic ids semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) @@ -303,7 +314,7 @@ def get_item_embeddings(self, events): semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] semantic_embeddings = semantic_embeddings.view( len(events), len(self._codebook_sizes), self._embedding_dim - ) + ) # (len(events), len(self._codebook_sizes), embedding_dim) # get residuals text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) @@ -312,7 +323,7 @@ def get_item_embeddings(self, events): # get true item embeddings item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) - item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) + # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) return item_embeddings From 83e99a297c4c7a4dea37f91c2dd6ae7b9e3b9996 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 26 Jan 2025 12:30:55 +0700 Subject: [PATCH 050/175] add caching in trie --- modeling/models/tiger.py | 2 +- modeling/rqvae_utils/trie.py | 39 +++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 10bba88a..7ea0d72c 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -100,7 +100,7 @@ def __init__( embedding_dim=embedding_dim, ) self._codebook_embeddings = nn.Embedding( - num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim # TODO + num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual self._init_weights(initializer_range) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index e5a94067..ada7bd62 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -1,5 +1,7 @@ +from functools import lru_cache + import torch -from typing import List, Tuple, Dict, Optional + class Item: """ @@ -7,7 +9,7 @@ class Item: - hierarchical_id: a tuple of ints - residual: a torch.Tensor of shape (emb_dim,) """ - def __init__(self, hierarchical_id: Tuple[int, ...], residual: torch.Tensor): + def __init__(self, hierarchical_id: tuple[int, ...], residual: torch.Tensor): self.hierarchical_id = hierarchical_id self.residual = residual @@ -22,8 +24,8 @@ class TrieNode: - items: list of Items (only non-empty if this node is the end of some hierarchical_id(s)) """ def __init__(self): - self.children: Dict[int, TrieNode] = {} - self.items: List[Item] = [] # collisions end up here if they share the same path + self.children: dict[int, TrieNode] = {} + self.items: list[Item] = [] # collisions end up here if they share the same path class Trie: @@ -34,6 +36,9 @@ class Trie: """ def __init__(self): self.root = TrieNode() + # Create instance-specific cached methods + self._cached_gather_subtree_items = lru_cache(maxsize=1024)(self._gather_subtree_items) + self._cached_dot_scores = lru_cache(maxsize=1024)(self._dot_scores) def insert(self, item: Item) -> None: """ @@ -47,7 +52,7 @@ def insert(self, item: Item) -> None: # At the leaf, store the item current_node.items.append(item) - def _gather_subtree_items(self, node: TrieNode) -> List[Item]: + def _gather_subtree_items(self, node: TrieNode) -> tuple[Item, ...]: """ Collect all items in the sub-tree rooted at 'node'. """ @@ -58,26 +63,24 @@ def _gather_subtree_items(self, node: TrieNode) -> List[Item]: collected.extend(cur.items) for child_node in cur.children.values(): stack.append(child_node) - return collected + return tuple(collected) def _dot_scores( self, query_residual: torch.Tensor, - candidates: List[Item] - ) -> List[Tuple[Item, float]]: + candidates: tuple[Item, ...] + ) -> tuple[tuple[Item, float], ...]: """ Compute dot-product scores between query_residual and each candidate's residual. - Return list of (candidate_item, score). + Return tuple of (candidate_item, score) pairs. """ - # Note: if your embeddings are large, you may prefer a more efficient approach - # (e.g., batched matrix multiplication). For clarity, we do a simple loop here. scored = [] for c in candidates: score = torch.dot(query_residual, c.residual).item() scored.append((c, score)) - return scored + return tuple(scored) - def find_closest(self, query_item: Item, n: int) -> List[Item]: + def find_closest(self, query_item: Item, n: int) -> list[Item]: """ Find up to n closest items to 'query_item' by the described rules: 1) Find longest existing matching prefix. @@ -104,12 +107,12 @@ def find_closest(self, query_item: Item, n: int) -> List[Item]: # We'll climb up if needed. while path_stack: node, parent = path_stack[-1] - subtree_items = self._gather_subtree_items(node) + subtree_items = self._cached_gather_subtree_items(node) if len(subtree_items) >= n: # We can pick the top n by dot product - scored = self._dot_scores(query_item.residual, subtree_items) + scored = self._cached_dot_scores(query_item.residual, subtree_items) # Sort descending by score - scored.sort(key=lambda x: x[1], reverse=True) + scored = sorted(scored, key=lambda x: x[1], reverse=True) return [itm for itm, _ in scored[:n]] else: # Not enough items: move up one level @@ -119,8 +122,8 @@ def find_closest(self, query_item: Item, n: int) -> List[Item]: # We are at the root (the last pop). # If still not enough items, we simply return everything we have from the root # or if root has more than n, we pick top n. - scored = self._dot_scores(query_item.residual, subtree_items) - scored.sort(key=lambda x: x[1], reverse=True) + scored = self._cached_dot_scores(query_item.residual, subtree_items) + scored = sorted(scored, key=lambda x: x[1], reverse=True) return [itm for itm, _ in scored[:n]] # Otherwise, continue in the loop (which means gather from the parent's node) From 48172f5aa70d52d10460e90eff525cfd70b98989 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 26 Jan 2025 19:25:00 +0700 Subject: [PATCH 051/175] add autoregressive --- .gitignore | 1 + configs/train/tiger_train_config.json | 93 +---------------- modeling/loss/base.py | 40 +++++++- modeling/models/sasrec.py | 2 +- modeling/models/tiger.py | 137 +++++++++++++++++--------- modeling/rqvae_utils/trie.py | 6 +- 6 files changed, 136 insertions(+), 143 deletions(-) diff --git a/.gitignore b/.gitignore index 7980d8a2..51358cc9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__ data/* tensorboard_logs/* +saved_logs/* .venv papers checkpoints/* diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 96321efd..e65ae66d 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,7 +1,6 @@ { "experiment_name": "tiger", "train_epochs_num": 10, - "best_metric": "validation/ndcg@20", "dataset": { "type": "sequence", "path_to_data_dir": "../data", @@ -63,14 +62,14 @@ "type": "composite", "losses": [ { - "type": "ce", + "type": "sample_logsoftmax", "predictions_prefix": "logits", "labels_prefix": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" }, { - "type": "ce", + "type": "sample_logsoftmax", "predictions_prefix": "dedup.logits", "labels_prefix": "dedup.labels", "weight": 1.0, @@ -86,94 +85,6 @@ "type": "metric", "on_step": 1, "loss_prefix": "loss" - }, - { - "type": "validation", - "on_step": 64, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - }, - { - "type": "eval", - "on_step": 64, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } } ] } diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 1bbdc186..d9533f2f 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -54,6 +54,44 @@ def forward(self, inputs): return total_loss +class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): + def __init__(self, predictions_prefix, labels_prefix): + super().__init__() + self._predictions_prefix = predictions_prefix + self._labels_prefix = labels_prefix + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + predictions_prefix=config.get('predictions_prefix'), + labels_prefix=config.get('labels_prefix') + ) + + def forward(self, inputs): # use log soft max + logits = inputs[self._predictions_prefix] + candidates = inputs[self._labels_prefix] + + assert len(logits.shape) in [2, 3] + + batch_size = logits.shape[0] + seq_len = logits.shape[1] + + if len(logits.shape) == 3: + loss = -torch.gather( + torch.log_softmax(logits, dim=-1).view(batch_size * seq_len, logits.shape[-1]), + dim=-1, + index=candidates.view(batch_size * seq_len, 1) + ).mean() + else: + loss = -torch.gather( + torch.log_softmax(logits, dim=-1), + dim=-1, + index=candidates.view(batch_size, 1) # TODO check if this is correct + ).mean() + + return loss + + class BatchLogSoftmaxLoss(TorchLoss, config_name='batch_logsoftmax'): def __init__(self, predictions_prefix, candidates_prefix): @@ -299,7 +337,7 @@ def forward(self, inputs): assert positive_scores.shape[0] == negative_scores.shape[0] positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum(dim=-1) # (x) - negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores)).sum(dim=-1) # (x) + negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores) + 1e-9).sum(dim=-1) # (x), added 1e-9 for Tiger baseline loss = positive_loss + negative_loss # (x) loss = -loss.sum() # (1) diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index b896fdf8..28b07e77 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -41,13 +41,13 @@ def __init__( df = torch.load('../data/Beauty/data_full.pt') precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) - # TODO ask if correct, nans occurs in validation padding_embedding = self._item_embeddings.weight[0].unsqueeze(0) mask_embedding = self._item_embeddings.weight[-1].unsqueeze(0) extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) self._item_embeddings.weight.data.copy_(extended_embeddings) + self._item_embeddings.weight.requires_grad = False @classmethod def create_from_config(cls, config, **kwargs): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 7ea0d72c..0ddfb393 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -113,7 +113,7 @@ def init_rqvae(cls, config) -> RqVaeModel: rqvae_model = RqVaeModel.create_from_config(rqvae_config['model']).to(DEVICE) rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) rqvae_model.eval() - for param in rqvae_model.parameters(): # TODO + for param in rqvae_model.parameters(): # TODO freezed param.requires_grad = False codebook_sizes = rqvae_model.codebook_sizes @@ -124,7 +124,7 @@ def init_rqvae(cls, config) -> RqVaeModel: @classmethod def create_from_config(cls, config, **kwargs): rqvae_model = cls.init_rqvae(config) - embedding_dim = rqvae_model.encoder.weight.shape[0] # TODO + embedding_dim = rqvae_model.encoder.weight.shape[0] embs_extractor = torch.load(config['embs_extractor_path']) item_ids = embs_extractor.index.tolist() @@ -182,70 +182,64 @@ def forward(self, inputs): all_sample_lengths = inputs[ "{}.length".format(self._sequence_prefix) ] # (batch_size) + + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) + encoder_embeddings, encoder_mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) if self.training: label_events = inputs["{}.ids".format(self._positive_prefix)] label_lengths = inputs["{}.length".format(self._positive_prefix)] - - decoder_prefix_scores = self.get_logits( - label_events, label_lengths, all_sample_events, all_sample_lengths - ) # (batch_size, dec_seq_len, _codebook_sizes[0]) - logits = decoder_prefix_scores.reshape(-1, self._codebook_sizes[0]) # (batch_size * dec_seq_len, _codebook_sizes[0]) + decoder_outputs = self._apply_decoder( + label_events, label_lengths, encoder_embeddings, encoder_mask + ) # (batch_size, label_len, embedding_dim) + decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) + + decoder_output_residual = decoder_outputs[:, -1, :] + semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) - residuals = torch.stack([self._item_id_to_residual[event] for event in label_events.tolist()]) - info = self._solver.get_scores_batch(semantic_ids, residuals) + + true_residuals = torch.stack([self._item_id_to_residual[event] for event in label_events.tolist()]) + + # TODO tensor + true_info = self._solver.get_scores_batch(semantic_ids, true_residuals) + # batch_size + pred_info = self._solver.get_scores_batch(semantic_ids, decoder_output_residual) + # batch_size x max_collision_count # TODO use BatchLogSoftmax semantic_events = semantic_ids.view(-1) - # TODO batch_logsoftmax don't match shapes (example bert4rec cls) - return { - self._pred_prefix: logits, - f"semantic.{self._labels_prefix}.ids": semantic_events, - "dedup.logits": info["scores"], - "dedup.labels.ids": info["dedup_tokens"] + "logits": decoder_prefix_scores, + "semantic.labels": semantic_ids, + "dedup.logits": pred_info["scores"], + "dedup.labels": true_info["dedup_tokens"] } else: - label_events = inputs["{}.ids".format(self._labels_prefix)] - label_lengths = inputs["{}.length".format(self._labels_prefix)] - - decoder_prefix_scores = self.get_logits( - label_events, label_lengths, all_sample_events, all_sample_lengths - ) # batch_size, dec_seq_len, emb_dim (_codebook_sizes[0]) + tgt_embeddings, semanctid_ids = self._apply_decoder_autoregressive( + encoder_embeddings, encoder_mask + ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim), (batch_size, len(self._codebook_sizes)) - preds = decoder_prefix_scores.argmax(dim=-1) # (batch_size, dec_seq_len) - ids = self._apply_trie(preds) + residuals = tgt_embeddings[:, -1, :] + + ids = self._apply_trie(semanctid_ids, residuals) return ids - def _apply_trie(self, preds): + def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor): semantic_ids = [tuple(row.tolist()) for row in preds] ids = [] - for semantic_id in tqdm(semantic_ids): - item = Item(semantic_id, torch.rand(self._embedding_dim).to(DEVICE)) # TODO use true residuals + for semantic_id, residual in tqdm(zip(semantic_ids, residuals), total=len(semantic_ids)): + item = Item(semantic_id, residual) closest_items = self._trie.find_closest(item, n=20) ids.append(closest_items) return torch.tensor(ids) - - def get_logits(self, label_events, label_lengths, all_sample_events, all_sample_lengths): - all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) # TODO residual gets add as event - # TODO encoder_mask sees residual as event (is it correct?) - - encoder_embeddings, encoder_mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) - - decoder_outputs = self._apply_decoder( - label_events, label_lengths, encoder_embeddings, encoder_mask - ) # (batch_size, label_len, embedding_dim) - - decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) - - return decoder_prefix_scores + def _apply_decoder( self, label_events, label_lengths, encoder_embeddings, encoder_mask @@ -262,11 +256,11 @@ def _apply_decoder( batch_size = tgt_embeddings.shape[0] bos_embeddings = self._bos_weight.unsqueeze(0).expand(batch_size, 1, -1) # (batch_size, 1, embedding_dim) - tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) # TODO remove residuals (batch_size, dec_seq_len, embedding_dim) + tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) label_len = tgt_mask.shape[1] - assert label_len == len(self._codebook_sizes) + 1 # TODO +1 for bos + assert label_len == len(self._codebook_sizes) + 1 position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) @@ -291,15 +285,58 @@ def _apply_decoder( memory=encoder_embeddings, tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, - # TODO tgt_key_padding_mask=~tgt_mask, ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs + def _apply_decoder_autoregressive( + self, encoder_embeddings, encoder_mask + ): + batch_size = encoder_embeddings.shape[0] + + tgt_embeddings = self._bos_weight.unsqueeze(0).unsqueeze(0).expand(batch_size, 1, -1) + tgt_mask = torch.ones(batch_size, 1, dtype=torch.bool, device=DEVICE) + + semantic_ids = torch.tensor([], device=DEVICE) + + for step in range(len(self._codebook_sizes) + 1): # semantic_id + residual + position_embeddings = self._decoder_pos_embeddings( + torch.full((batch_size,), tgt_embeddings.shape[1], device=DEVICE), + tgt_mask + ) + + curr_embeddings = tgt_embeddings + position_embeddings + + curr_embeddings = self._decoder_layernorm(curr_embeddings) + curr_embeddings = self._decoder_dropout(curr_embeddings) + + decoder_output = self._decoder( + tgt=curr_embeddings, + memory=encoder_embeddings, + memory_key_padding_mask=~encoder_mask, + ) + + next_token_embedding = decoder_output[:, -1, :] # batch_size x embedding_dim + + if step < len(self._codebook_sizes): + codebook = self._codebook_item_embeddings_stacked[step] # len(codebook_sizes) x embedding_dim + closest_semantic_ids = torch.argmax( + torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 + ) # batch_size x 1 + semantic_ids = torch.cat([semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1) # batch_size x (step + 1) + next_token_embedding = codebook[closest_semantic_ids] # batch_size x embedding_dim + + tgt_embeddings = torch.cat([tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1) + tgt_mask = torch.ones(batch_size, tgt_embeddings.shape[1], dtype=torch.bool, device=DEVICE) + + return tgt_embeddings, semantic_ids + def get_item_embeddings(self, events): # TODO freezed embeddings events = events.tolist() embs = torch.stack([self._item_id_to_semantic_embedding[event] for event in events]) - embs = embs.view(-1, self._embedding_dim) + # convert to tensor for better performance + # 12101 -> 3 semantic, text - sum(dim=1) = res + embs = embs.view(len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim) return embs def get_init_item_embeddings(self, events): # TODO freezed embeddings @@ -322,7 +359,10 @@ def get_init_item_embeddings(self, events): # TODO freezed embeddings residual = residual.unsqueeze(1) # get true item embeddings - item_embeddings = torch.cat([semantic_embeddings, residual], dim=1) + item_embeddings = torch.cat( + [semantic_embeddings, residual], dim=1 + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) return item_embeddings @@ -369,7 +409,7 @@ def codebook_lambda(x): lengths, mask, codebook_lambda, self._codebook_embeddings ) - return position_embeddings + codebook_embeddings + return codebook_embeddings + position_embeddings def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): batch_size = mask.shape[0] @@ -383,6 +423,7 @@ def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_lay positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) + # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ... positions = position_lambda(positions) # (all_batch_events) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index ada7bd62..78cdd0e8 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -37,8 +37,10 @@ class Trie: def __init__(self): self.root = TrieNode() # Create instance-specific cached methods - self._cached_gather_subtree_items = lru_cache(maxsize=1024)(self._gather_subtree_items) - self._cached_dot_scores = lru_cache(maxsize=1024)(self._dot_scores) + self._cached_gather_subtree_items = self._gather_subtree_items + self._cached_dot_scores = self._dot_scores + # self._cached_gather_subtree_items = lru_cache(maxsize=1024)(self._gather_subtree_items) + # self._cached_dot_scores = lru_cache(maxsize=1024)(self._dot_scores) def insert(self, item: Item) -> None: """ From eec5530c68abcb7659ec6447a59e2793ce6cdaf9 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 27 Jan 2025 01:52:17 +0700 Subject: [PATCH 052/175] use collision solver --- modeling/models/tiger.py | 16 ++----- modeling/rqvae_utils/collision_solver.py | 61 ++++++++++++++++-------- 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 0ddfb393..9c9365d3 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -71,7 +71,7 @@ def __init__( self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) self._decoder_dropout = nn.Dropout(dropout) - self._solver = solver + self._solver: CollisionSolver = solver self._codebook_sizes = codebook_sizes @@ -204,20 +204,14 @@ def forward(self, inputs): true_residuals = torch.stack([self._item_id_to_residual[event] for event in label_events.tolist()]) - # TODO tensor - true_info = self._solver.get_scores_batch(semantic_ids, true_residuals) - # batch_size - pred_info = self._solver.get_scores_batch(semantic_ids, decoder_output_residual) - # batch_size x max_collision_count - # TODO use BatchLogSoftmax - - semantic_events = semantic_ids.view(-1) + true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) + pred_info = self._solver.get_pred_scores(semantic_ids, decoder_output_residual) return { "logits": decoder_prefix_scores, "semantic.labels": semantic_ids, - "dedup.logits": pred_info["scores"], - "dedup.labels": true_info["dedup_tokens"] + "dedup.logits": pred_info["pred_scores"], + "dedup.labels": true_info["true_dedup_tokens"] } else: tgt_embeddings, semanctid_ids = self._apply_decoder_autoregressive( diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index b4028b23..6821b33c 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -84,40 +84,63 @@ def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tupl return candidates, mask - def get_scores_batch(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: """ :param semantic_id: [batch_size, emb_dim] semantic ids (без токена решающего коллизии) - :param residuals: [batch_size, residual_dim] остатки + :param pred_residuals: [batch_size, residual_dim] предсказанные остатки :return: Словарь с ключами: - - 'scores_mask': [batch_size, max_collision_count] маска существующих значений scores - - 'scores': [batch_size, max_collision_count] софтмакс для каждого из кандидатов - - 'dedup_tokens_mask': [batch_size] маска существующих токенов решающих коллизии - - 'dedup_tokens': [batch_size] токены решающие коллизии - - 'item_ids': [batch_size] реальные айди айтемов + - 'pred_scores_mask': [batch_size, max_collision_count] маска существующих значений scores для предсказанных остатков + - 'pred_scores': [batch_size, max_collision_count] софтмакс для каждого из кандидатов для предсказанных остатков + - 'pred_item_ids': [batch_size] реальные айди айтемов для предсказанных остатков """ assert semantic_ids.shape[1] == self.emb_dim - assert residuals.shape[1] == self.residual_dim - assert semantic_ids.shape[0] == residuals.shape[0] + assert pred_residuals.shape[1] == self.residual_dim + assert semantic_ids.shape[0] == pred_residuals.shape[0] semantic_ids = self._to_device(semantic_ids) - residuals = self._to_device(residuals) + pred_residuals = self._to_device(pred_residuals) unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) - scores = torch.softmax(torch.einsum('njk,nk->nj', candidates, residuals).masked_fill(~mask, float('-inf')), dim=1) + pred_scores = torch.einsum('njk,nk->nj', candidates, pred_residuals).masked_fill(~mask, -torch.inf) + pred_indices = torch.argmax(pred_scores, dim=1) + pred_item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) + + return { + "pred_scores_mask": mask, + "pred_scores": pred_scores, + "pred_item_ids": pred_item_ids + } + + def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[str, torch.Tensor]: + """ + :param semantic_id: [batch_size, emb_dim] semantic ids (без токена решающего коллизии) + :param true_residuals: [batch_size, residual_dim] реальные остатки + + :return: Словарь с ключами: + - 'true_dedup_tokens': [batch_size] токены решающие коллизии для реальных остатков + """ + assert semantic_ids.shape[1] == self.emb_dim + assert true_residuals.shape[1] == self.residual_dim + assert semantic_ids.shape[0] == true_residuals.shape[0] + + semantic_ids = self._to_device(semantic_ids) + true_residuals = self._to_device(true_residuals) + + unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + + candidates, _ = self.get_residuals_by_semantic_id_batch(semantic_ids) + + matches = torch.all(candidates == true_residuals[:, None, :], dim=2).int() + true_dedup_tokens = torch.argmax(matches, dim=1) - indices = torch.argmax(scores, dim=1) - item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][indices[i]] for i in range(semantic_ids.shape[0])]) + assert matches.any(dim=1).all(), "Не у всех батчей есть совпадение" return { - "scores_mask": mask, - "scores": scores, - "dedup_tokens_mask": mask.any(dim=1), - "dedup_tokens": indices, - "item_ids": item_ids + "true_dedup_tokens": true_dedup_tokens } @@ -166,7 +189,7 @@ def get_item_id_info(self, item_id: int) -> dict[str, torch.Tensor]: "dedup_tokens": dedup_tokens, } - def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: """ :param semantic_id: [batch_size, emb_dim] semantic ids (без токенов решающего коллизии) :param dedup_tokens: [batch_size] токены решающие коллизии From d155767f700da3d3ed0052105cb1e6a8f2d177dc Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 30 Jan 2025 22:32:16 +0700 Subject: [PATCH 053/175] fix remarks --- configs/train/sasrec_train_config.json | 2 +- configs/train/tiger_train_config.json | 4 +- modeling/loss/base.py | 8 +- modeling/main.ipynb | 289 ------------------------- modeling/models/rqvae.py | 2 +- modeling/models/sasrec.py | 5 +- modeling/models/tiger.py | 74 +++---- 7 files changed, 37 insertions(+), 347 deletions(-) delete mode 100644 modeling/main.ipynb diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 690541d1..aa29a029 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -37,7 +37,7 @@ "positive_prefix": "positive", "negative_prefix": "negative", "candidate_prefix": "candidates", - "embedding_dim": 512, + "embedding_dim": 64, "num_heads": 2, "num_layers": 2, "dim_feedforward": 256, diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index e65ae66d..60172a9a 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -64,14 +64,14 @@ { "type": "sample_logsoftmax", "predictions_prefix": "logits", - "labels_prefix": "semantic.labels", + "labels": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" }, { "type": "sample_logsoftmax", "predictions_prefix": "dedup.logits", - "labels_prefix": "dedup.labels", + "labels": "dedup.labels", "weight": 1.0, "output_prefix": "dedup_loss" } diff --git a/modeling/loss/base.py b/modeling/loss/base.py index d9533f2f..17200fcd 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -55,21 +55,21 @@ def forward(self, inputs): class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): - def __init__(self, predictions_prefix, labels_prefix): + def __init__(self, predictions_prefix, labels): super().__init__() self._predictions_prefix = predictions_prefix - self._labels_prefix = labels_prefix + self._labels = labels @classmethod def create_from_config(cls, config, **kwargs): return cls( predictions_prefix=config.get('predictions_prefix'), - labels_prefix=config.get('labels_prefix') + labels=config.get('labels') ) def forward(self, inputs): # use log soft max logits = inputs[self._predictions_prefix] - candidates = inputs[self._labels_prefix] + candidates = inputs[self._labels] assert len(logits.shape) in [2, 3] diff --git a/modeling/main.ipynb b/modeling/main.ipynb deleted file mode 100644 index b4e92a3d..00000000 --- a/modeling/main.ipynb +++ /dev/null @@ -1,289 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "from rqvae.rqvae_data import get_data\n", - "\n", - "df = get_data()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "embs = torch.stack(df[\"embeddings\"].tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "from utils import DEVICE\n", - "from models.base import BaseModel\n", - "\n", - "config = json.load(open(\"../configs/train/tiger_train_config.json\"))\n", - "\n", - "batch_proc_config = config['dataloader']['train']['batch_processor']\n", - "\n", - "rqvae_train_config = json.load(open(batch_proc_config['rqvae_train_config_path']))\n", - "rq_vae_config = rqvae_train_config['model']\n", - "rq_vae_config['should_init_codebooks'] = False\n", - "\n", - "rqvae_model = BaseModel.create_from_config(rq_vae_config).to(DEVICE)\n", - "\n", - "rqvae_model.load_state_dict(torch.load(batch_proc_config['rqvae_checkpoint_path'], weights_only=True))\n", - "rqvae_model.eval()\n", - "\n", - "ids = df.index.tolist()\n", - "\n", - "embs_dict = {\"ids\": torch.tensor(ids).to(DEVICE), \"embeddings\": embs.to(DEVICE)}\n", - "\n", - "semantic_ids = list(rqvae_model.forward(embs_dict))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from rqvae.collisions import dedup\n", - "\n", - "items_with_tuples = list(zip(df[\"asin\"], df[\"title\"].fillna(\"unknown\"), semantic_ids))\n", - "items_with_tuples = dedup(items_with_tuples)\n", - "\n", - "assert len(df) == len(set(item[-1] for item in items_with_tuples))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "items_with_tuples" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from trie import Trie\n", - "\n", - "_trie = Trie()\n", - "\n", - "for (id, tuple) in zip(df.index, semantic_ids):\n", - " _trie.insert(tuple, id) # todo handle collisions, not overwrite" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "\n", - "with open(\"../data/Beauty/trie.pkl\", 'wb') as f:\n", - " pickle.dump(_trie, f)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from rqvae.rqvae_data import search_similar_items\n", - "\n", - "\n", - "for i in range(5):\n", - " sim = search_similar_items(items_with_tuples, (i,), 5)\n", - " if len(sim) == 0:\n", - " continue\n", - " print(i)\n", - " for asin, item, clust_tuple in sim:\n", - " # if 'shampoo' in item.lower():\n", - " print(f\"{item=} {clust_tuple=}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from collections import Counter\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "plt.hist(Counter(item[-1][:-1] for item in items_with_tuples).values())\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "# # raw full ids\n", - "# full_duplicates = Counter(item[-1][:-1] for item in items_with_tuples).items()\n", - "# duplicated = [(semantic_id, amount) for (semantic_id, amount) in full_duplicates if amount > 1]\n", - "# duplicated" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# collison counters - (how many item have same full semantic id): amount of such sets\n", - "vals = Counter(item[-1][:-1] for item in items_with_tuples).values()\n", - "Counter(vals)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# dedup idxes\n", - "Counter(item[-1][4] for item in items_with_tuples)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# from sklearn import preprocessing\n", - "\n", - "# labels = df['asin']\n", - "\n", - "# le = preprocessing.LabelEncoder()\n", - "# targets = le.fit_transform(labels)\n", - "\n", - "# df['asin_numeric'] = targets\n", - "\n", - "# torch.save(df, './all_data.pt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "from utils import create_masked_tensor\n", - "\n", - "\n", - "embeddings = torch.rand((11, 2))\n", - "print(embeddings)\n", - "\n", - "lengths = torch.tensor([3, 1, 2, 5])\n", - "\n", - "padded_embeddings, mask = create_masked_tensor(embeddings, lengths)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "padded_embeddings" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mask" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "df = torch.load('../data/Beauty/data_full.pt')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "torch.stack(df.sort_index().embeddings.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df.sort_index()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "gsrec", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index bb6abb16..82962c84 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -147,7 +147,7 @@ def eval_pass(self, embeddings): codebook_vectors = codebook[codebook_indices] ind_lists.append(codebook_indices.cpu().numpy()) remainder = remainder - codebook_vectors - return list(zip(*ind_lists)), remainder + return torch.tensor(list(zip(*ind_lists))), remainder def forward(self, inputs): embeddings = inputs["embeddings"] diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 28b07e77..96e8f839 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -40,11 +40,14 @@ def __init__( df = torch.load('../data/Beauty/data_full.pt') precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) + self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) # TODO incorrect projection + # TODO infer text embeddings using embedding_dim=64 + projector_embeddings = self._projector(precomputed_embeddings) padding_embedding = self._item_embeddings.weight[0].unsqueeze(0) mask_embedding = self._item_embeddings.weight[-1].unsqueeze(0) - extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) + extended_embeddings = torch.cat([padding_embedding, projector_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) self._item_embeddings.weight.data.copy_(extended_embeddings) self._item_embeddings.weight.requires_grad = False diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 9c9365d3..f7db2d43 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -84,21 +84,17 @@ def __init__( self._item_id_to_residual = item_id_to_residual self._item_id_to_embedding = item_id_to_embedding - self._item_id_to_semantic_embedding = { - item_id: emb for (item_id, emb) in zip(item_id_to_semantic_id.keys(), self.get_init_item_embeddings(list(item_id_to_semantic_id.keys()))) - } + item_ids = torch.tensor(list(range(1, len(item_id_to_semantic_id) + 1))) + + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) self._trie = Trie() - for item_id, semantic_id in item_id_to_semantic_id.items(): + for item_id, semantic_id in enumerate(item_id_to_semantic_id): self._trie.insert(Item(semantic_id, item_id_to_residual[item_id])) # TODO no dedup tokens here self._bos_token_id = codebook_sizes[0] self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) - self._decoder_position_embeddings = nn.Embedding( - num_embeddings=2, # bos token + label item id (always 0) - embedding_dim=embedding_dim, - ) self._codebook_embeddings = nn.Embedding( num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual @@ -127,8 +123,10 @@ def create_from_config(cls, config, **kwargs): embedding_dim = rqvae_model.encoder.weight.shape[0] embs_extractor = torch.load(config['embs_extractor_path']) + embs_extractor = embs_extractor.sort_index() + item_ids = embs_extractor.index.tolist() - assert sorted(item_ids) == list(range(1, len(item_ids) + 1)) + assert item_ids == list(range(1, len(item_ids) + 1)) embeddings = torch.stack(embs_extractor['embeddings'].tolist()).to(DEVICE) @@ -140,23 +138,13 @@ def create_from_config(cls, config, **kwargs): emb_dim=len(rqvae_model.codebook_sizes), codebook_size=rqvae_model.codebook_sizes[0] ) - solver.create_query_candidates_dict(torch.tensor(item_ids), torch.tensor(semantic_ids), residuals) - - item_id_to_embedding = { - item_id: embedding for (item_id, embedding) in zip(item_ids, embeddings) - } - item_id_to_semantic_id = { - item_id: torch.tensor(semantic_id, device=DEVICE) for (item_id, semantic_id) in zip(item_ids, semantic_ids) - } - item_id_to_residual = { - item_id: remainder for (item_id, remainder) in zip(item_ids, residuals) - } + solver.create_query_candidates_dict(torch.tensor(item_ids), semantic_ids, residuals) return cls( rqvae_model=rqvae_model, - item_id_to_semantic_id=item_id_to_semantic_id, - item_id_to_residual=item_id_to_residual, - item_id_to_embedding=item_id_to_embedding, + item_id_to_semantic_id=semantic_ids.to(DEVICE), + item_id_to_residual=residuals.to(DEVICE), + item_id_to_embedding=embeddings.to(DEVICE), solver=solver, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], @@ -192,17 +180,21 @@ def forward(self, inputs): label_events = inputs["{}.ids".format(self._positive_prefix)] label_lengths = inputs["{}.length".format(self._positive_prefix)] + label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending + tgt_embeddings = self.get_item_embeddings( # TODO residual embs + label_events + ) # (all_batch_events, embedding_dim) + decoder_outputs = self._apply_decoder( - label_events, label_lengths, encoder_embeddings, encoder_mask + tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) decoder_output_residual = decoder_outputs[:, -1, :] - semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in label_events.tolist()]) # len(events), len(codebook_sizes) - - true_residuals = torch.stack([self._item_id_to_residual[event] for event in label_events.tolist()]) + semantic_ids = self._item_id_to_semantic_id[label_events - 1] # len(events), len(codebook_sizes) + true_residuals = self._item_id_to_residual[label_events - 1] true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) pred_info = self._solver.get_pred_scores(semantic_ids, decoder_output_residual) @@ -236,13 +228,8 @@ def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor): def _apply_decoder( - self, label_events, label_lengths, encoder_embeddings, encoder_mask + self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ): - label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending - tgt_embeddings = self.get_item_embeddings( # TODO residual embs - label_events - ) # (all_batch_events, embedding_dim) - tgt_embeddings, tgt_mask = create_masked_tensor( data=tgt_embeddings, lengths=label_lengths ) # (batch_size, dec_seq_len, embedding_dim), (batch_size, dec_seq_len) @@ -326,16 +313,12 @@ def _apply_decoder_autoregressive( return tgt_embeddings, semantic_ids def get_item_embeddings(self, events): # TODO freezed embeddings - events = events.tolist() - embs = torch.stack([self._item_id_to_semantic_embedding[event] for event in events]) - # convert to tensor for better performance - # 12101 -> 3 semantic, text - sum(dim=1) = res - embs = embs.view(len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim) - return embs + embs = self._item_id_to_semantic_embedding[events - 1] # len(events), len(self._codebook_sizes) + 1, embedding_dim + return embs.view(len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim) def get_init_item_embeddings(self, events): # TODO freezed embeddings # convert to semantic ids - semantic_ids = torch.stack([self._item_id_to_semantic_id[event] for event in events]) # len(events), len(codebook_sizes) + semantic_ids = self._item_id_to_semantic_id[events - 1] # len(events), len(codebook_sizes) semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) # convert to rqvae embeddings @@ -348,7 +331,7 @@ def get_init_item_embeddings(self, events): # TODO freezed embeddings ) # (len(events), len(self._codebook_sizes), embedding_dim) # get residuals - text_embeddings = torch.stack([self._item_id_to_embedding[event] for event in events]) + text_embeddings = self._item_id_to_embedding[events - 1] residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) @@ -387,13 +370,6 @@ def codebook_lambda(x): return position_embeddings + codebook_embeddings def _decoder_pos_embeddings(self, lengths, mask): - def position_lambda(x): - return x // len(self._codebook_sizes) # 1 0 0 0 1 0 0 0 ... - - position_embeddings = self._get_position_embeddings( - lengths, mask, position_lambda, self._decoder_position_embeddings - ) - def codebook_lambda(x): non_bos = x < len(self._codebook_sizes) x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] @@ -403,7 +379,7 @@ def codebook_lambda(x): lengths, mask, codebook_lambda, self._codebook_embeddings ) - return codebook_embeddings + position_embeddings + return codebook_embeddings def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): batch_size = mask.shape[0] From 10aa18850540607dfc4e64a469c3c8f7996fa558 Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 30 Jan 2025 23:00:57 +0700 Subject: [PATCH 054/175] fixed flattened --- modeling/models/tiger.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index f7db2d43..8808c5d0 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -75,8 +75,6 @@ def __init__( self._codebook_sizes = codebook_sizes - self._codebook_item_embeddings_flattened = torch.cat([codebook for codebook in rqvae_model.codebooks], dim=0) - self._codebook_item_embeddings_flattened.requires_grad = False # TODO ask if freeze is needed self._codebook_item_embeddings_stacked = torch.stack([codebook for codebook in rqvae_model.codebooks]) self._codebook_item_embeddings_stacked.requires_grad = False # TODO ask if freeze is needed @@ -319,16 +317,15 @@ def get_item_embeddings(self, events): # TODO freezed embeddings def get_init_item_embeddings(self, events): # TODO freezed embeddings # convert to semantic ids semantic_ids = self._item_id_to_semantic_id[events - 1] # len(events), len(codebook_sizes) - semantic_events = semantic_ids.view(-1) # len(codebook_sizes) * len(events) - - # convert to rqvae embeddings - positions = torch.arange(len(semantic_events), device=DEVICE) - codebook_positions = positions % len(self._codebook_sizes) - emb_indices = codebook_positions * self._codebook_sizes[0] + semantic_events - semantic_embeddings = self._codebook_item_embeddings_flattened[emb_indices] - semantic_embeddings = semantic_embeddings.view( - len(events), len(self._codebook_sizes), self._embedding_dim - ) # (len(events), len(self._codebook_sizes), embedding_dim) + + result = [] + for semantic_id in semantic_ids: + item_repr = [] + for codebook_idx, codebook_id in enumerate(semantic_id): + item_repr.append(self._codebook_item_embeddings_stacked[codebook_idx][codebook_id]) + result.append(torch.stack(item_repr)) + + semantic_embeddings = torch.stack(result) # get residuals text_embeddings = self._item_id_to_embedding[events - 1] From ad3e0ccf112d42ca032f4d4389389acf9966d34b Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 31 Jan 2025 00:48:59 +0700 Subject: [PATCH 055/175] add trie draft --- configs/train/rqvae_train_config.json | 2 +- configs/train/tiger_train_config.json | 91 +++++++- modeling/models/rqvae.py | 5 + modeling/models/tiger.py | 23 +- modeling/rqvae_utils/__init__.py | 2 +- modeling/rqvae_utils/trie.py | 314 ++++++++++++++------------ 6 files changed, 281 insertions(+), 156 deletions(-) diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index 0d54dba5..225a2fbe 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -33,7 +33,7 @@ "type": "rqvae", "embedding_dim": 512, "n_iter": 100, - "codebook_sizes": [256, 256, 256, 256], + "codebook_sizes": [256, 256, 256], "should_init_codebooks": true, "should_reinit_unused_clusters": true, "initializer_range": 0.02 diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 60172a9a..c7cd6cdf 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,6 +1,7 @@ { "experiment_name": "tiger", - "train_epochs_num": 10, + "best_metric": "validation/ndcg@20", + "train_epochs_num": 50, "dataset": { "type": "sequence", "path_to_data_dir": "../data", @@ -85,6 +86,94 @@ "type": "metric", "on_step": 1, "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } } ] } diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 82962c84..90fd26b4 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,3 +1,4 @@ +import functools from models.base import TorchModel import torch @@ -156,3 +157,7 @@ def forward(self, inputs): return self.train_pass(embeddings) else: # eval mode return self.eval_pass(embeddings) + + @functools.cache + def get_single_embedding(self, codebook_idx: int, codebook_id: int): + return self.codebooks[codebook_idx][codebook_id] diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 8808c5d0..a57fcaa3 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -3,7 +3,7 @@ import torch from tqdm import tqdm from models.base import SequentialTorchModel -from rqvae_utils import CollisionSolver, Trie, Item +from rqvae_utils import CollisionSolver, HierarchicalTrie, Item from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -86,9 +86,9 @@ def __init__( self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = Trie() + self._trie = HierarchicalTrie(rqvae_model) for item_id, semantic_id in enumerate(item_id_to_semantic_id): - self._trie.insert(Item(semantic_id, item_id_to_residual[item_id])) # TODO no dedup tokens here + self._trie.insert(Item(semantic_id, item_id + 1, item_id_to_residual[item_id])) # TODO no dedup tokens here self._bos_token_id = codebook_sizes[0] self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) @@ -204,23 +204,24 @@ def forward(self, inputs): "dedup.labels": true_info["true_dedup_tokens"] } else: - tgt_embeddings, semanctid_ids = self._apply_decoder_autoregressive( + semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( encoder_embeddings, encoder_mask - ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim), (batch_size, len(self._codebook_sizes)) + ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) residuals = tgt_embeddings[:, -1, :] - ids = self._apply_trie(semanctid_ids, residuals) + ids = self._apply_trie(semantic_ids, residuals, n=20) return ids - def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor): + def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor, n: int = 20): semantic_ids = [tuple(row.tolist()) for row in preds] ids = [] for semantic_id, residual in tqdm(zip(semantic_ids, residuals), total=len(semantic_ids)): - item = Item(semantic_id, residual) - closest_items = self._trie.find_closest(item, n=20) - ids.append(closest_items) + item = Item(semantic_id, -999, residual) + closest_items = self._trie.find_n_closest(item, n) + closest_raw_ids = [item.raw_item_id for item in closest_items] + ids.append(closest_raw_ids) # TODO add correct tree inference return torch.tensor(ids) @@ -308,7 +309,7 @@ def _apply_decoder_autoregressive( tgt_embeddings = torch.cat([tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1) tgt_mask = torch.ones(batch_size, tgt_embeddings.shape[1], dtype=torch.bool, device=DEVICE) - return tgt_embeddings, semantic_ids + return semantic_ids, tgt_embeddings def get_item_embeddings(self, events): # TODO freezed embeddings embs = self._item_id_to_semantic_embedding[events - 1] # len(events), len(self._codebook_sizes) + 1, embedding_dim diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index a25b6189..3f29aee5 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,2 +1,2 @@ from .collision_solver import CollisionSolver -from .trie import Item, Trie \ No newline at end of file +from .trie import Item, HierarchicalTrie \ No newline at end of file diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 78cdd0e8..2b520149 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -1,158 +1,188 @@ -from functools import lru_cache - import torch +from typing import Optional +from models.rqvae import RqVaeModel class Item: - """ - Represents an item with: - - hierarchical_id: a tuple of ints - - residual: a torch.Tensor of shape (emb_dim,) - """ - def __init__(self, hierarchical_id: tuple[int, ...], residual: torch.Tensor): + def __init__( + self, + hierarchical_id: tuple[int], + raw_item_id: int, + residual: torch.Tensor + ): self.hierarchical_id = hierarchical_id + self.raw_item_id = raw_item_id self.residual = residual - def __repr__(self): - return f"Item(hier_id={self.hierarchical_id}, resid_shape={tuple(self.residual.shape)})" - - -class TrieNode: - """ - A node in the trie. - - children: dict(int -> TrieNode) - - items: list of Items (only non-empty if this node is the end of some hierarchical_id(s)) - """ - def __init__(self): - self.children: dict[int, TrieNode] = {} - self.items: list[Item] = [] # collisions end up here if they share the same path - - -class Trie: - """ - The trie structure that can: - 1. Insert an Item by its hierarchical_id. - 2. Find up to n closest items to a query Item by the described prefix-truncation + dot-product logic. - """ - def __init__(self): - self.root = TrieNode() - # Create instance-specific cached methods - self._cached_gather_subtree_items = self._gather_subtree_items - self._cached_dot_scores = self._dot_scores - # self._cached_gather_subtree_items = lru_cache(maxsize=1024)(self._gather_subtree_items) - # self._cached_dot_scores = lru_cache(maxsize=1024)(self._dot_scores) - - def insert(self, item: Item) -> None: - """ - Insert an Item into the trie following item.hierarchical_id. - """ - current_node = self.root - for idx in item.hierarchical_id: - if idx not in current_node.children: - current_node.children[idx] = TrieNode() - current_node = current_node.children[idx] - # At the leaf, store the item - current_node.items.append(item) - - def _gather_subtree_items(self, node: TrieNode) -> tuple[Item, ...]: - """ - Collect all items in the sub-tree rooted at 'node'. - """ - collected = [] - stack = [node] - while stack: - cur = stack.pop() - collected.extend(cur.items) - for child_node in cur.children.values(): - stack.append(child_node) - return tuple(collected) - - def _dot_scores( + +class Node: + def __init__(self, + codebook_idx: int, + codebook_id: int, + parent: Optional['Node'] = None, + is_leaf: bool = False): + self.codebook_idx = codebook_idx + self.codebook_id = codebook_id + self.children: dict[int, Node] = {} + self.leaf_items: list[Item] = [] + self.is_leaf = is_leaf + self.parent = parent + +class HierarchicalTrie: + def __init__(self, rqvae: RqVaeModel): + self.root = Node(codebook_idx=-1, codebook_id=-1, parent=None, is_leaf=False) + self.rqvae = rqvae + + def insert(self, item: Item): + current = self.root + for level, code_id in enumerate(item.hierarchical_id): + if code_id not in current.children: + new_node = Node( + codebook_idx=level, + codebook_id=code_id, + parent=current, + is_leaf=False + ) + current.children[code_id] = new_node + current = current.children[code_id] + + current.is_leaf = True + current.leaf_items.append(item) + + def collect_subtree_items(self, node: Node) -> list[Item]: + result = [] + if node.is_leaf: + result.extend(node.leaf_items) + for child in node.children.values(): + result.extend(self.collect_subtree_items(child)) + return result + + def top_k_by_dot_product( self, - query_residual: torch.Tensor, - candidates: tuple[Item, ...] - ) -> tuple[tuple[Item, float], ...]: - """ - Compute dot-product scores between query_residual and each candidate's residual. - Return tuple of (candidate_item, score) pairs. - """ - scored = [] - for c in candidates: - score = torch.dot(query_residual, c.residual).item() - scored.append((c, score)) - return tuple(scored) - - def find_closest(self, query_item: Item, n: int) -> list[Item]: - """ - Find up to n closest items to 'query_item' by the described rules: - 1) Find longest existing matching prefix. - 2) Gather sub-tree items: - - If >= n items, pick top n by dot product. - - Else, move to parent, gather sub-tree, etc. - 3) If root is reached, return all if < n, else top n by dot product. - """ - # 1) Descend as far as possible - path_stack = [(self.root, None)] # (node, parent_node) pairs for easy upward climb - current_node = self.root - - # Traverse hierarchy while possible - for idx in query_item.hierarchical_id: - if idx in current_node.children: - parent_node = current_node - current_node = current_node.children[idx] - path_stack.append((current_node, parent_node)) + query_vec: torch.Tensor, + items: list[Item], + k: int + ) -> list[Item]: + if not items: + return [] + + dots = [] + for it in items: + dp = torch.dot(query_vec, it.residual).item() + dots.append((dp, it)) + + dots.sort(key=lambda x: x[0], reverse=True) + + top = [item for (_, item) in dots[:k]] + return top + + def find_n_closest(self, query_item: Item, n: int) -> list[Item]: + current = self.root + matched_path_length = 0 + + for level, code_id in enumerate(query_item.hierarchical_id): + if code_id in current.children: + current = current.children[code_id] + matched_path_length += 1 else: - # Can't go deeper, break break - # Now path_stack[-1][0] is the deepest node we matched. - # We'll climb up if needed. - while path_stack: - node, parent = path_stack[-1] - subtree_items = self._cached_gather_subtree_items(node) - if len(subtree_items) >= n: - # We can pick the top n by dot product - scored = self._cached_dot_scores(query_item.residual, subtree_items) - # Sort descending by score - scored = sorted(scored, key=lambda x: x[1], reverse=True) - return [itm for itm, _ in scored[:n]] + node = current + + def try_node(node: Node, query_residual: torch.Tensor, level: int) -> list[Item]: + if node.is_leaf: + all_items = node.leaf_items else: - # Not enough items: move up one level - # (pop the current node off the stack and keep going) - path_stack.pop() - if not path_stack: - # We are at the root (the last pop). - # If still not enough items, we simply return everything we have from the root - # or if root has more than n, we pick top n. - scored = self._cached_dot_scores(query_item.residual, subtree_items) - scored = sorted(scored, key=lambda x: x[1], reverse=True) - return [itm for itm, _ in scored[:n]] - # Otherwise, continue in the loop (which means gather from the parent's node) - - # Safety net (should never get here logically, but just in case): - return [] - - -# --------------------------- -# Usage example (toy): + all_items = self.collect_subtree_items(node) + + count_here = len(all_items) + + if count_here == 0: + if node.parent is None: + return [] + return move_up(node, query_residual, level) + + if count_here == n: + return all_items + + if count_here > n: + top_n_items = self.top_k_by_dot_product(query_residual, all_items, n) + return top_n_items + + if node.parent is None: + return all_items + else: + return move_up(node, query_residual, level) + + def move_up(child_node: Node, query_residual: torch.Tensor, level: int) -> list[Item]: + parent = child_node.parent + if parent is None: + return [] + + emb = self.rqvae.get_single_embedding(child_node.codebook_idx, child_node.codebook_id) + new_query_residual = query_residual + emb + + all_parent_items = self.collect_subtree_items(parent) + count_parent = len(all_parent_items) + + if count_parent == 0: + if parent.parent is None: + return [] + return move_up(parent, new_query_residual, level-1) + + if count_parent >= n: + adjusted_items = [] + for it in all_parent_items: + adj_item_res = it.residual + emb if it in child_node.leaf_items else _adjust_residual_up(it, parent, child_node) + new_it = Item(it.hierarchical_id, it.raw_item_id, adj_item_res) + adjusted_items.append(new_it) + + top_n_parent = self.top_k_by_dot_product(new_query_residual, adjusted_items, n) + return top_n_parent + + adjusted_items = [] + for it in all_parent_items: + adj_item_res = _adjust_residual_up(it, parent, child_node) + new_it = Item(it.hierarchical_id, it.raw_item_id, adj_item_res) + adjusted_items.append(new_it) + + # we want to keep them, but also see if we can go further up + if parent.parent is None: + return adjusted_items + else: + return move_up(parent, new_query_residual, level-1) + + def _adjust_residual_up(it: Item, parent_node: Node, child_node: Node) -> torch.Tensor: + emb = self.rqvae.get_single_embedding(child_node.codebook_idx, child_node.codebook_id) + return it.residual + emb + + results = try_node(node, query_item.residual, matched_path_length) + return results + if __name__ == "__main__": - # Suppose emb_dim = 3 for example - trie = Trie() - - # Insert a few items - items_to_insert = [ - Item((1, 2, 3), torch.tensor([1.0, 0.5, 0.2])), - Item((1, 2, 3), torch.tensor([1.1, 0.4, 0.0])), # collision on same path - Item((1, 2, 4), torch.tensor([0.9, 0.9, 0.9])), - Item((1, 5), torch.tensor([-0.1, 0.2, 1.0])), - Item((2,), torch.tensor([0.3, 0.3, 0.3])), + trie = HierarchicalTrie() + + emb_dim = 8 + + torch.manual_seed(42) + items = [ + Item((10, 20, 30, 40), 1, torch.randn(emb_dim)), + Item((10, 20, 30, 40), 2, torch.randn(emb_dim)), # same path => same leaf + Item((10, 20, 99, 40), 3, torch.randn(emb_dim)), + Item((10, 23, 30, 44), 4, torch.randn(emb_dim)), + Item((10, 23, 30, 45), 5, torch.randn(emb_dim)), + Item((99, 1, 2, 3), 6, torch.randn(emb_dim)) ] - for it in items_to_insert: + + for it in items: trie.insert(it) - # Query item - query = Item((1, 2, 3, 99), torch.tensor([1.0, 1.0, 1.0])) # (1,2,3,99) partially matches deeper - closest = trie.find_closest(query, n=3) - print("Closest items:") - for c in closest: - print(c) + query_id = (10, 20, 30, 40) + query_residual = torch.randn(emb_dim) + query_item = Item(query_id, raw_item_id=-999, residual=query_residual) + + found_items = trie.find_n_closest(query_item, n=3) + + print("Found items:") + for fi in found_items: + print(f" raw_item_id={fi.raw_item_id}, hierarchical_id={fi.hierarchical_id}") From a699b2b2ae6dd3c00d789b32ecd39817205eb704 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 2 Feb 2025 16:00:16 +0700 Subject: [PATCH 056/175] fix sasrec baseline --- modeling/models/rqvae.py | 3 ++- modeling/models/sasrec.py | 39 +++++++++++++++++++++++++++++++-------- modeling/models/tiger.py | 18 +++++++++++++++--- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 90fd26b4..cfdb0574 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,4 +1,5 @@ import functools +from utils import DEVICE from models.base import TorchModel import torch @@ -148,7 +149,7 @@ def eval_pass(self, embeddings): codebook_vectors = codebook[codebook_indices] ind_lists.append(codebook_indices.cpu().numpy()) remainder = remainder - codebook_vectors - return torch.tensor(list(zip(*ind_lists))), remainder + return torch.tensor(list(zip(*ind_lists))).to(DEVICE), remainder def forward(self, inputs): embeddings = inputs["embeddings"] diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 96e8f839..57367e3b 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -40,14 +40,31 @@ def __init__( df = torch.load('../data/Beauty/data_full.pt') precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) - self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) # TODO incorrect projection - # TODO infer text embeddings using embedding_dim=64 - projector_embeddings = self._projector(precomputed_embeddings) - padding_embedding = self._item_embeddings.weight[0].unsqueeze(0) - mask_embedding = self._item_embeddings.weight[-1].unsqueeze(0) + self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) - extended_embeddings = torch.cat([padding_embedding, projector_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) + padding_embedding = torch.nn.init.trunc_normal_( + torch.zeros(1, precomputed_embeddings.shape[1]), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range + ) + + mask_embedding = torch.nn.init.trunc_normal_( + torch.zeros(1, precomputed_embeddings.shape[1]), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range + ) + + extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) + + self._item_embeddings = torch.nn.Embedding( + num_embeddings=num_items + 2, + embedding_dim=precomputed_embeddings.shape[1] + ) + + # TODO ask about freezed masked & padding tokens self._item_embeddings.weight.data.copy_(extended_embeddings) self._item_embeddings.weight.requires_grad = False @@ -66,6 +83,12 @@ def create_from_config(cls, config, **kwargs): dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) + + def get_item_embeddings(self, events): + return self._projector(self._item_embeddings(events)) + + def _get_item_embeddings(self): + return self._projector(self._item_embeddings.weight) def forward(self, inputs): all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) @@ -80,7 +103,7 @@ def forward(self, inputs): all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) - all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) + all_embeddings = self._get_item_embeddings() # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( @@ -121,7 +144,7 @@ def forward(self, inputs): candidate_scores = torch.einsum( 'bd,nd->bn', last_embeddings, - self._item_embeddings.weight + self._get_item_embeddings() ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index a57fcaa3..865fd72b 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -140,9 +140,9 @@ def create_from_config(cls, config, **kwargs): return cls( rqvae_model=rqvae_model, - item_id_to_semantic_id=semantic_ids.to(DEVICE), - item_id_to_residual=residuals.to(DEVICE), - item_id_to_embedding=embeddings.to(DEVICE), + item_id_to_semantic_id=semantic_ids, + item_id_to_residual=residuals, + item_id_to_embedding=embeddings, solver=solver, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], @@ -211,6 +211,18 @@ def forward(self, inputs): residuals = tgt_embeddings[:, -1, :] ids = self._apply_trie(semantic_ids, residuals, n=20) + # store number of items in tree + # take first where >= n + # set vector with all trues, then set false from lower level tree + # take all true left in upper tree + # maybe store items by prefix (not so many memory)? + # lex sort by level first, item second + # use sparse matrix + + + # store by raw_item_id (semantic_id) uniq key (i0 * 256^3 + i1 * 256^2 + i2 * 256 + i3) + # sparse matrix - max_uniq_semantic_ids (for rqvae init items infer (max is 12101, could be less if collisions)) + # store sem_id -> num return ids def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor, n: int = 20): From fe18a56f89303012faa73a714595e8d49c0810fb Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 2 Feb 2025 19:53:50 +0700 Subject: [PATCH 057/175] create init tree structure --- modeling/rqvae_utils/trie.py | 276 ++++++++++++----------------------- 1 file changed, 90 insertions(+), 186 deletions(-) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 2b520149..b842d50c 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -1,188 +1,92 @@ import torch -from typing import Optional - -from models.rqvae import RqVaeModel - -class Item: - def __init__( - self, - hierarchical_id: tuple[int], - raw_item_id: int, - residual: torch.Tensor - ): - self.hierarchical_id = hierarchical_id - self.raw_item_id = raw_item_id - self.residual = residual - - -class Node: - def __init__(self, - codebook_idx: int, - codebook_id: int, - parent: Optional['Node'] = None, - is_leaf: bool = False): - self.codebook_idx = codebook_idx - self.codebook_id = codebook_id - self.children: dict[int, Node] = {} - self.leaf_items: list[Item] = [] - self.is_leaf = is_leaf - self.parent = parent - -class HierarchicalTrie: - def __init__(self, rqvae: RqVaeModel): - self.root = Node(codebook_idx=-1, codebook_id=-1, parent=None, is_leaf=False) - self.rqvae = rqvae + +def unique_with_index(x, dim=None): + """Unique elements of x and indices of those unique elements + https://github.com/pytorch/pytorch/issues/36748#issuecomment-619514810 + + e.g. + + unique(tensor([ + [1, 2, 3], + [1, 2, 4], + [1, 2, 3], + [1, 2, 5] + ]), dim=0) + => (tensor([[1, 2, 3], + [1, 2, 4], + [1, 2, 5]]), + tensor([0, 1, 3])) + """ + unique, inverse = torch.unique( + x, sorted=True, return_inverse=True, dim=dim) + perm = torch.arange(inverse.size(0), dtype=inverse.dtype, + device=inverse.device) + inverse, perm = inverse.flip([0]), perm.flip([0]) + return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) + +def compute_unique_ids(semantic_ids: torch.Tensor): + K = semantic_ids.shape[1] + exponents = torch.arange(K - 1, -1, -1, dtype=torch.int64) + base = 256 ** exponents # TODO don't hardcode 256 + uniq_ids = torch.einsum('nc,c->n', semantic_ids, base) + return uniq_ids + +def build_tree_structure(semantic_ids: torch.Tensor, residuals: torch.Tensor, embedding_table: torch.Tensor): + bs, K = semantic_ids.shape + embedding_dim = residuals.shape[1] + + prefix_counts = torch.zeros(len(semantic_ids), K + 1, dtype=torch.int64) # num_unique x K+1 + prefix_counts[:, 0] = bs + + for i in range(K): + prefix_keys = compute_unique_ids(semantic_ids[:, :i+1]) # bs, semantic_ids order + unique_prefixes, inverse_indices_prefix_counts, prefix_counts_at_level = torch.unique(prefix_keys, return_inverse=True, return_counts=True) # num_unique_prefix, num_unique_prefix + current_level_same = prefix_counts_at_level[inverse_indices_prefix_counts] + prefix_counts[:, i + 1] = current_level_same + + # TODO print prefix_counts + + residuals_per_level = torch.zeros(len(semantic_ids), K + 1, embedding_dim) # num_unique x K+1 x embedding_dim + + for i in range(K - 1, -1, -1): + indices_at_level = semantic_ids[:, i] # bs + embeddings_at_level = embedding_table[i, indices_at_level] # bs x embedding_dim + residuals_per_level[:, K - i, :] = embeddings_at_level + residuals_per_level[:, K - i - 1, :] + + large_uniq_ids = compute_unique_ids(semantic_ids) # bs, could be collisions + _, unique_indicies = unique_with_index(large_uniq_ids) # TODO check with semantic_ids (must be same) - def insert(self, item: Item): - current = self.root - for level, code_id in enumerate(item.hierarchical_id): - if code_id not in current.children: - new_node = Node( - codebook_idx=level, - codebook_id=code_id, - parent=current, - is_leaf=False - ) - current.children[code_id] = new_node - current = current.children[code_id] - - current.is_leaf = True - current.leaf_items.append(item) - - def collect_subtree_items(self, node: Node) -> list[Item]: - result = [] - if node.is_leaf: - result.extend(node.leaf_items) - for child in node.children.values(): - result.extend(self.collect_subtree_items(child)) - return result - - def top_k_by_dot_product( - self, - query_vec: torch.Tensor, - items: list[Item], - k: int - ) -> list[Item]: - if not items: - return [] - - dots = [] - for it in items: - dp = torch.dot(query_vec, it.residual).item() - dots.append((dp, it)) - - dots.sort(key=lambda x: x[0], reverse=True) - - top = [item for (_, item) in dots[:k]] - return top - - def find_n_closest(self, query_item: Item, n: int) -> list[Item]: - current = self.root - matched_path_length = 0 - - for level, code_id in enumerate(query_item.hierarchical_id): - if code_id in current.children: - current = current.children[code_id] - matched_path_length += 1 - else: - break - - node = current - - def try_node(node: Node, query_residual: torch.Tensor, level: int) -> list[Item]: - if node.is_leaf: - all_items = node.leaf_items - else: - all_items = self.collect_subtree_items(node) - - count_here = len(all_items) - - if count_here == 0: - if node.parent is None: - return [] - return move_up(node, query_residual, level) - - if count_here == n: - return all_items - - if count_here > n: - top_n_items = self.top_k_by_dot_product(query_residual, all_items, n) - return top_n_items - - if node.parent is None: - return all_items - else: - return move_up(node, query_residual, level) - - def move_up(child_node: Node, query_residual: torch.Tensor, level: int) -> list[Item]: - parent = child_node.parent - if parent is None: - return [] - - emb = self.rqvae.get_single_embedding(child_node.codebook_idx, child_node.codebook_id) - new_query_residual = query_residual + emb - - all_parent_items = self.collect_subtree_items(parent) - count_parent = len(all_parent_items) - - if count_parent == 0: - if parent.parent is None: - return [] - return move_up(parent, new_query_residual, level-1) - - if count_parent >= n: - adjusted_items = [] - for it in all_parent_items: - adj_item_res = it.residual + emb if it in child_node.leaf_items else _adjust_residual_up(it, parent, child_node) - new_it = Item(it.hierarchical_id, it.raw_item_id, adj_item_res) - adjusted_items.append(new_it) - - top_n_parent = self.top_k_by_dot_product(new_query_residual, adjusted_items, n) - return top_n_parent - - adjusted_items = [] - for it in all_parent_items: - adj_item_res = _adjust_residual_up(it, parent, child_node) - new_it = Item(it.hierarchical_id, it.raw_item_id, adj_item_res) - adjusted_items.append(new_it) - - # we want to keep them, but also see if we can go further up - if parent.parent is None: - return adjusted_items - else: - return move_up(parent, new_query_residual, level-1) - - def _adjust_residual_up(it: Item, parent_node: Node, child_node: Node) -> torch.Tensor: - emb = self.rqvae.get_single_embedding(child_node.codebook_idx, child_node.codebook_id) - return it.residual + emb - - results = try_node(node, query_item.residual, matched_path_length) - return results - -if __name__ == "__main__": - trie = HierarchicalTrie() - - emb_dim = 8 - - torch.manual_seed(42) - items = [ - Item((10, 20, 30, 40), 1, torch.randn(emb_dim)), - Item((10, 20, 30, 40), 2, torch.randn(emb_dim)), # same path => same leaf - Item((10, 20, 99, 40), 3, torch.randn(emb_dim)), - Item((10, 23, 30, 44), 4, torch.randn(emb_dim)), - Item((10, 23, 30, 45), 5, torch.randn(emb_dim)), - Item((99, 1, 2, 3), 6, torch.randn(emb_dim)) - ] - - for it in items: - trie.insert(it) - - query_id = (10, 20, 30, 40) - query_residual = torch.randn(emb_dim) - query_item = Item(query_id, raw_item_id=-999, residual=query_residual) - - found_items = trie.find_n_closest(query_item, n=3) - - print("Found items:") - for fi in found_items: - print(f" raw_item_id={fi.raw_item_id}, hierarchical_id={fi.hierarchical_id}") + prefix_counts = prefix_counts[unique_indicies] + residuals_per_level = residuals_per_level[unique_indicies] + unique_ids = large_uniq_ids[unique_indicies] + + sorted_indices = torch.argsort(unique_ids) + sorted_uniq_ids = unique_ids[sorted_indices] + sorted_prefix_counts = prefix_counts[sorted_indices] + sorted_residuals = residuals_per_level[sorted_indices] + + return sorted_uniq_ids, sorted_prefix_counts, sorted_residuals + + +bs = 12101 # Batch size +K = 4 # Length of semantic_id +embedding_dim = 512 # Embedding size + +# Generate random semantic IDs in range [0, 255] +semantic_ids = torch.randint(0, 256, (bs, K), dtype=torch.int64) + +print(f"{semantic_ids=}") + +# Random residuals +residuals = torch.randn(bs, embedding_dim) + +# Example embedding table (num_levels=K, each level has 256 embeddings of size embedding_dim) +embedding_table = torch.randn(K, 256, embedding_dim) + +# Build tree structure +sorted_uniq_ids, sorted_prefix_counts, sorted_residuals = build_tree_structure(semantic_ids, residuals, embedding_table) + +# Print results +print("Sorted Unique IDs:", sorted_uniq_ids) +print("Sorted Prefix Counts:", sorted_prefix_counts) +print("Sorted Residuals:", sorted_residuals) \ No newline at end of file From 06f2af3fb9fc413138a4f54fbd12d1511cf203b1 Mon Sep 17 00:00:00 2001 From: peterochek Date: Tue, 4 Feb 2025 00:11:41 +0700 Subject: [PATCH 058/175] draft trie --- modeling/models/tiger.py | 10 +- modeling/rqvae_utils/__init__.py | 2 +- modeling/rqvae_utils/trie.py | 240 ++++++++++++++++++++----------- 3 files changed, 160 insertions(+), 92 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 865fd72b..f56f0a9f 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -3,7 +3,7 @@ import torch from tqdm import tqdm from models.base import SequentialTorchModel -from rqvae_utils import CollisionSolver, HierarchicalTrie, Item +from rqvae_utils import CollisionSolver, Trie from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -86,9 +86,9 @@ def __init__( self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = HierarchicalTrie(rqvae_model) - for item_id, semantic_id in enumerate(item_id_to_semantic_id): - self._trie.insert(Item(semantic_id, item_id + 1, item_id_to_residual[item_id])) # TODO no dedup tokens here + # self._trie = HierarchicalTrie(rqvae_model) + # for item_id, semantic_id in enumerate(item_id_to_semantic_id): + # self._trie.insert(Item(semantic_id, item_id + 1, item_id_to_residual[item_id])) # TODO no dedup tokens here self._bos_token_id = codebook_sizes[0] self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) @@ -209,6 +209,8 @@ def forward(self, inputs): ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) residuals = tgt_embeddings[:, -1, :] + + raise Exception("TODO") ids = self._apply_trie(semantic_ids, residuals, n=20) # store number of items in tree diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index 3f29aee5..7764a752 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,2 +1,2 @@ from .collision_solver import CollisionSolver -from .trie import Item, HierarchicalTrie \ No newline at end of file +from .trie import Trie diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index b842d50c..84a5fba3 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -1,92 +1,158 @@ +import json import torch -def unique_with_index(x, dim=None): - """Unique elements of x and indices of those unique elements - https://github.com/pytorch/pytorch/issues/36748#issuecomment-619514810 - - e.g. - - unique(tensor([ - [1, 2, 3], - [1, 2, 4], - [1, 2, 3], - [1, 2, 5] - ]), dim=0) - => (tensor([[1, 2, 3], - [1, 2, 4], - [1, 2, 5]]), - tensor([0, 1, 3])) - """ - unique, inverse = torch.unique( - x, sorted=True, return_inverse=True, dim=dim) - perm = torch.arange(inverse.size(0), dtype=inverse.dtype, - device=inverse.device) - inverse, perm = inverse.flip([0]), perm.flip([0]) - return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) - -def compute_unique_ids(semantic_ids: torch.Tensor): - K = semantic_ids.shape[1] - exponents = torch.arange(K - 1, -1, -1, dtype=torch.int64) - base = 256 ** exponents # TODO don't hardcode 256 - uniq_ids = torch.einsum('nc,c->n', semantic_ids, base) - return uniq_ids - -def build_tree_structure(semantic_ids: torch.Tensor, residuals: torch.Tensor, embedding_table: torch.Tensor): - bs, K = semantic_ids.shape - embedding_dim = residuals.shape[1] - - prefix_counts = torch.zeros(len(semantic_ids), K + 1, dtype=torch.int64) # num_unique x K+1 - prefix_counts[:, 0] = bs - - for i in range(K): - prefix_keys = compute_unique_ids(semantic_ids[:, :i+1]) # bs, semantic_ids order - unique_prefixes, inverse_indices_prefix_counts, prefix_counts_at_level = torch.unique(prefix_keys, return_inverse=True, return_counts=True) # num_unique_prefix, num_unique_prefix - current_level_same = prefix_counts_at_level[inverse_indices_prefix_counts] - prefix_counts[:, i + 1] = current_level_same +from models.rqvae import RqVaeModel + + +class Trie: + def __init__(self, rqvae_model: RqVaeModel): + self.rqvae_model = rqvae_model + self.keys = None + self.prefix_counts = None + self.residuals = None + self.raw_item_ids = None + + def unique_with_index(self, x, dim=None): + """Unique elements of x and indices of those unique elements + https://github.com/pytorch/pytorch/issues/36748#issuecomment-619514810 + + e.g. + + unique(tensor([ + [1, 2, 3], + [1, 2, 4], + [1, 2, 3], + [1, 2, 5] + ]), dim=0) + => (tensor([[1, 2, 3], + [1, 2, 4], + [1, 2, 5]]), + tensor([0, 1, 3])) + """ + unique, inverse = torch.unique( + x, sorted=True, return_inverse=True, dim=dim) + perm = torch.arange(inverse.size(0), dtype=inverse.dtype, + device=inverse.device) + inverse, perm = inverse.flip([0]), perm.flip([0]) + return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) + + def compute_keys(self, semantic_ids: torch.Tensor): + K = semantic_ids.shape[1] + exponents = torch.arange(K - 1, -1, -1, dtype=torch.int64) + base = self.rqvae_model.codebook_sizes[0] ** exponents # TODO don't hardcode 256 + uniq_ids = torch.einsum('nc,c->n', semantic_ids, base) + return uniq_ids + + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, raw_item_ids: torch.Tensor): + embedding_table = torch.stack([cb for cb in self.rqvae_model.codebooks]) + + print(f"{embedding_table.shape=}") + + bs, K = semantic_ids.shape + embedding_dim = residuals.shape[1] + + prefix_counts = torch.zeros(bs, K + 1, dtype=torch.int64) # bs x K+1 + prefix_counts[:, 0] = bs + + for i in range(K): + truncated_semantic_ids = semantic_ids[:, :i+1] + padded_semantic_ids = torch.cat([truncated_semantic_ids, torch.zeros(bs, K - i - 1, dtype=torch.int64)], dim=1) + prefix_keys = self.compute_keys(padded_semantic_ids) # bs, semantic_ids order + unique_prefixes, inverse_indices_prefix_counts, prefix_counts_at_level = torch.unique(prefix_keys, return_inverse=True, return_counts=True) + current_level_same = prefix_counts_at_level[inverse_indices_prefix_counts] + prefix_counts[:, i + 1] = current_level_same + + # TODO print prefix_counts + + residuals_per_level = torch.zeros(bs, K + 1, embedding_dim) # bs x K+1 x embedding_dim + + for i in range(K - 1, -1, -1): + indices_at_level = semantic_ids[:, i] # bs + embeddings_at_level = embedding_table[i, indices_at_level] # bs x embedding_dim + residuals_per_level[:, K - i, :] = embeddings_at_level + residuals_per_level[:, K - i - 1, :] + + keys = self.compute_keys(semantic_ids) # bs, could be collisions + # _, unique_indicies = self.unique_with_index(large_uniq_ids) # TODO check with semantic_ids (must be same) + + # prefix_counts = prefix_counts[unique_indicies] + # residuals_per_level = residuals_per_level[unique_indicies] + # unique_ids = large_uniq_ids[unique_indicies] + + self.keys = keys + self.prefix_counts = prefix_counts + self.residuals = residuals_per_level + self.raw_item_ids = raw_item_ids + + # sorted_indices = torch.argsort(keys) + + # self.sorted_keys = keys[sorted_indices] + # self.sorted_prefix_counts = prefix_counts[sorted_indices] + # self.sorted_residuals = residuals_per_level[sorted_indices] + # self.sorted_raw_item_ids = raw_item_ids[sorted_indices] + + def process_prefixes(self, prefixes: torch.Tensor): + bs, prefix_len = prefixes.shape + padded_prefix = torch.cat([prefixes, torch.zeros(bs, len(self.rqvae_model.codebook_sizes) - prefix_len, dtype=prefixes.dtype)], dim=1) + lower_key = self.compute_keys(padded_prefix) # bs + upper_key = lower_key + self.rqvae_model.codebook_sizes[0] ** (len(self.rqvae_model.codebook_sizes) - prefix_len) # bs + num_items_in_range = ((self.keys.unsqueeze(0) >= lower_key.unsqueeze(1)) & (self.keys.unsqueeze(0) < upper_key.unsqueeze(1))).sum(dim=1) + return num_items_in_range # bs + + + def query(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_to_query: int): + bs, K = semantic_ids.shape + num_items = torch.stack([self.process_prefixes(semantic_ids[:, :i+1]) for i in range(K)], dim=1) + # max idx for each row where num_items > item_to_query + forward_mask = (num_items > item_to_query).int() + backward_mask = forward_mask.flip(1) + outer_level = K - 1 - torch.argmax(backward_mask, dim=1) + inner_level = outer_level + 1 + + taken_outer_prefixes = semantic_ids * (torch.arange(K).expand(bs, K) < outer_level.unsqueeze(1)) + taken_inner_prefixes = semantic_ids * (torch.arange(K).expand(bs, K) < inner_level.unsqueeze(1)) + + outer_lower_prefix_keys = self.compute_keys(taken_outer_prefixes) + outer_upper_prefix_keys = outer_lower_prefix_keys + self.rqvae_model.codebook_sizes[0] ** (K - 1 - outer_level) + + print(outer_lower_prefix_keys) + + outer_mask = (self.keys.unsqueeze(0) >= outer_lower_prefix_keys.unsqueeze(1)) & (self.keys.unsqueeze(0) < outer_upper_prefix_keys.unsqueeze(1)) + + inner_lower_prefix_keys = self.compute_keys(taken_inner_prefixes) + inner_upper_prefix_keys = inner_lower_prefix_keys + self.rqvae_model.codebook_sizes[0] ** (K - 1 - inner_level) + + inner_mask = (self.keys.unsqueeze(0) >= inner_lower_prefix_keys.unsqueeze(1)) & (self.keys.unsqueeze(0) < inner_upper_prefix_keys.unsqueeze(1)) + + assert (inner_mask <= outer_mask).all() # TODO fix this + + return outer_mask, inner_mask + + +if __name__ == "__main__": + embedding_dim = 512 # Embedding size + config = json.load(open("../configs/train/tiger_train_config.json")) + config = config["model"] + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + rqvae_config["model"]["should_init_codebooks"] = False + rqvae_model = RqVaeModel.create_from_config(rqvae_config['model']) + rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) + rqvae_model.eval() - # TODO print prefix_counts - - residuals_per_level = torch.zeros(len(semantic_ids), K + 1, embedding_dim) # num_unique x K+1 x embedding_dim - - for i in range(K - 1, -1, -1): - indices_at_level = semantic_ids[:, i] # bs - embeddings_at_level = embedding_table[i, indices_at_level] # bs x embedding_dim - residuals_per_level[:, K - i, :] = embeddings_at_level + residuals_per_level[:, K - i - 1, :] - - large_uniq_ids = compute_unique_ids(semantic_ids) # bs, could be collisions - _, unique_indicies = unique_with_index(large_uniq_ids) # TODO check with semantic_ids (must be same) + trie = Trie(rqvae_model) - prefix_counts = prefix_counts[unique_indicies] - residuals_per_level = residuals_per_level[unique_indicies] - unique_ids = large_uniq_ids[unique_indicies] - - sorted_indices = torch.argsort(unique_ids) - sorted_uniq_ids = unique_ids[sorted_indices] - sorted_prefix_counts = prefix_counts[sorted_indices] - sorted_residuals = residuals_per_level[sorted_indices] - - return sorted_uniq_ids, sorted_prefix_counts, sorted_residuals - - -bs = 12101 # Batch size -K = 4 # Length of semantic_id -embedding_dim = 512 # Embedding size -# Generate random semantic IDs in range [0, 255] -semantic_ids = torch.randint(0, 256, (bs, K), dtype=torch.int64) - -print(f"{semantic_ids=}") - -# Random residuals -residuals = torch.randn(bs, embedding_dim) - -# Example embedding table (num_levels=K, each level has 256 embeddings of size embedding_dim) -embedding_table = torch.randn(K, 256, embedding_dim) - -# Build tree structure -sorted_uniq_ids, sorted_prefix_counts, sorted_residuals = build_tree_structure(semantic_ids, residuals, embedding_table) - -# Print results -print("Sorted Unique IDs:", sorted_uniq_ids) -print("Sorted Prefix Counts:", sorted_prefix_counts) -print("Sorted Residuals:", sorted_residuals) \ No newline at end of file + N = 100 + K = 3 + semantic_ids = torch.randint(0, 4, (N, K), dtype=torch.int64) + residuals = torch.randn(N, embedding_dim) + trie.build_tree_structure(semantic_ids, residuals, torch.arange(N)) + + query_num = 10 + q_semantic_ids = torch.randint(0, 4, (query_num, K), dtype=torch.int64) + q_residuals = torch.randn(query_num, embedding_dim) + + a, b = trie.query(q_semantic_ids, q_residuals, 10) + # print(f"{a=}") + # print(f"{b=}") + print(f"{a.shape=}") + print(f"{b.shape=}") From db3aaf0a508cf557071c00b2dba62af48468822e Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Feb 2025 17:04:40 +0700 Subject: [PATCH 059/175] working trie --- modeling/rqvae_utils/trie.py | 423 +++++++++++++++++++++++++++-------- 1 file changed, 324 insertions(+), 99 deletions(-) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 84a5fba3..2b46567a 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -1,6 +1,7 @@ import json -import torch +import time +import torch from models.rqvae import RqVaeModel @@ -9,9 +10,14 @@ def __init__(self, rqvae_model: RqVaeModel): self.rqvae_model = rqvae_model self.keys = None self.prefix_counts = None - self.residuals = None + self.residuals_per_level = None self.raw_item_ids = None - + self.K = len(self.rqvae_model.codebook_sizes) + self.total_items = None + self.embedding_table = torch.stack( + [cb for cb in self.rqvae_model.codebooks] + ) # K x codebook_size x embedding_dim + def unique_with_index(self, x, dim=None): """Unique elements of x and indices of those unique elements https://github.com/pytorch/pytorch/issues/36748#issuecomment-619514810 @@ -29,103 +35,320 @@ def unique_with_index(self, x, dim=None): [1, 2, 5]]), tensor([0, 1, 3])) """ - unique, inverse = torch.unique( - x, sorted=True, return_inverse=True, dim=dim) - perm = torch.arange(inverse.size(0), dtype=inverse.dtype, - device=inverse.device) + unique, inverse = torch.unique(x, sorted=True, return_inverse=True, dim=dim) + perm = torch.arange(inverse.size(0), dtype=inverse.dtype, device=inverse.device) inverse, perm = inverse.flip([0]), perm.flip([0]) return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) def compute_keys(self, semantic_ids: torch.Tensor): - K = semantic_ids.shape[1] - exponents = torch.arange(K - 1, -1, -1, dtype=torch.int64) - base = self.rqvae_model.codebook_sizes[0] ** exponents # TODO don't hardcode 256 - uniq_ids = torch.einsum('nc,c->n', semantic_ids, base) + exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) + base = self.rqvae_model.codebook_sizes[0] ** exponents + uniq_ids = torch.einsum("nc,c->n", semantic_ids, base) return uniq_ids - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, raw_item_ids: torch.Tensor): - embedding_table = torch.stack([cb for cb in self.rqvae_model.codebooks]) - - print(f"{embedding_table.shape=}") - - bs, K = semantic_ids.shape - embedding_dim = residuals.shape[1] + def pad_semantic_ids(self, semantic_ids: torch.Tensor): + return torch.cat( + [ + semantic_ids, + torch.zeros( + semantic_ids.shape[0], + self.K - semantic_ids.shape[1], + dtype=semantic_ids.dtype, + ), + ], + dim=1, + ) + + def build_tree_structure( + self, + semantic_ids: torch.Tensor, + residuals: torch.Tensor, + raw_item_ids: torch.Tensor, + ): + """ + Order of semantic ids, residuals, raw_item_ids must be the same (corresponding to same item) + """ + bs = semantic_ids.shape[0] - prefix_counts = torch.zeros(bs, K + 1, dtype=torch.int64) # bs x K+1 + prefix_counts = torch.zeros(bs, self.K + 1, dtype=torch.int64) # bs x K+1 prefix_counts[:, 0] = bs - for i in range(K): - truncated_semantic_ids = semantic_ids[:, :i+1] - padded_semantic_ids = torch.cat([truncated_semantic_ids, torch.zeros(bs, K - i - 1, dtype=torch.int64)], dim=1) - prefix_keys = self.compute_keys(padded_semantic_ids) # bs, semantic_ids order - unique_prefixes, inverse_indices_prefix_counts, prefix_counts_at_level = torch.unique(prefix_keys, return_inverse=True, return_counts=True) - current_level_same = prefix_counts_at_level[inverse_indices_prefix_counts] + for i in range(self.K): + truncated_semantic_ids = semantic_ids[:, : i + 1] + padded_semantic_ids = self.pad_semantic_ids(truncated_semantic_ids) + prefix_keys = self.compute_keys( + padded_semantic_ids + ) # bs, semantic_ids order + unique_prefixes, inverse_indices_prefix_counts, prefix_counts_at_level = ( + torch.unique(prefix_keys, return_inverse=True, return_counts=True) + ) # [1 2 3 3 2] -> [1 2 3] [0 1 2 2 1] [1 2 2] + current_level_same = prefix_counts_at_level[ + inverse_indices_prefix_counts + ] # [1 2 2 2 2] prefix_counts[:, i + 1] = current_level_same - - # TODO print prefix_counts - - residuals_per_level = torch.zeros(bs, K + 1, embedding_dim) # bs x K+1 x embedding_dim - - for i in range(K - 1, -1, -1): - indices_at_level = semantic_ids[:, i] # bs - embeddings_at_level = embedding_table[i, indices_at_level] # bs x embedding_dim - residuals_per_level[:, K - i, :] = embeddings_at_level + residuals_per_level[:, K - i - 1, :] - - keys = self.compute_keys(semantic_ids) # bs, could be collisions - # _, unique_indicies = self.unique_with_index(large_uniq_ids) # TODO check with semantic_ids (must be same) - - # prefix_counts = prefix_counts[unique_indicies] - # residuals_per_level = residuals_per_level[unique_indicies] - # unique_ids = large_uniq_ids[unique_indicies] - + + residuals_per_level = self.get_residuals_per_level( + semantic_ids, residuals + ) # total_items x K + 2 x embedding_dim + + keys = self.compute_keys(semantic_ids) # bs, could be collisions + self.keys = keys self.prefix_counts = prefix_counts - self.residuals = residuals_per_level + self.residuals_per_level = residuals_per_level self.raw_item_ids = raw_item_ids + self.total_items = len(keys) + + def get_residuals_per_level( + self, semantic_ids: torch.Tensor, residuals: torch.Tensor + ): + bs = semantic_ids.shape[0] + embedding_dim = residuals.shape[1] + residuals_per_level = torch.zeros( + bs, self.K + 1, embedding_dim + ) # bs x K + 1 x embedding_dim + + # TODO think if reverse is needed here + # i = 3, 2, 1, 0 + for i in range(self.K - 1, -1, -1): + indices_at_level = semantic_ids[:, i] # bs + embeddings_at_level = self.embedding_table[ + i, indices_at_level + ] # bs x embedding_dim + # 1 2 3 4 + residuals_per_level[:, self.K - i, :] = ( + embeddings_at_level + residuals_per_level[:, self.K - i - 1, :] + ) # [0 first_cumul_emb, second, ..., full_emb] + + # TODO check that residuals_per_level equal at last layer to full embedding of semantic id - # sorted_indices = torch.argsort(keys) + residuals_per_level[:, 0, :] = residuals + + residuals_per_level = torch.cat( + [ + torch.zeros(bs, 1, embedding_dim), + residuals_per_level, + ], + dim=1, + ) + + return residuals_per_level # bs x K + 2 x embedding_dim + + def get_mask_by_prefix(self, prefixes: torch.Tensor, taken_lens: torch.Tensor): + bs = prefixes.shape[0] + padded_prefix = self.pad_semantic_ids(prefixes) + lower_key = self.compute_keys(padded_prefix) # bs + upper_key = lower_key + self.rqvae_model.codebook_sizes[0] ** ( + self.K - taken_lens + ) # bs + + # self.K = 4, prefix_len = 3 => 256 ^ 3 + 256 ^ 2 + 256 ^ 1 + 256 ^ 0 + # need to add 256 ^ 1 to get exclusive upper bound + # self.K = 4, prefix_len = 2 => 256 ^ 3 + 256 ^ 2 + 256 ^ 1 + 256 ^ 0 + # need to add 256 ^ 2 to get exclusive upper bound + # self.K = 4, prefix_len = 1 => 256 ^ 3 + 256 ^ 2 + 256 ^ 1 + 256 ^ 0 + # need to add 256 ^ 3 to get exclusive upper bound + # self.keys.shape = bs, lower_key.shape = bs, upper_key.shape = bs + + assert lower_key.shape[0] == upper_key.shape[0] == bs + assert self.keys.shape[0] == self.total_items + + mask = ( + ( + self.keys.unsqueeze(0) >= lower_key.unsqueeze(1) + ) # including prefix [1, 2, 0, 0] + & ( + self.keys.unsqueeze(0) <= upper_key.unsqueeze(1) + ) # excluding [1, 3, 0, 0], last [1, 2, 256, 256] + ) + + return mask - # self.sorted_keys = keys[sorted_indices] - # self.sorted_prefix_counts = prefix_counts[sorted_indices] - # self.sorted_residuals = residuals_per_level[sorted_indices] - # self.sorted_raw_item_ids = raw_item_ids[sorted_indices] - def process_prefixes(self, prefixes: torch.Tensor): bs, prefix_len = prefixes.shape - padded_prefix = torch.cat([prefixes, torch.zeros(bs, len(self.rqvae_model.codebook_sizes) - prefix_len, dtype=prefixes.dtype)], dim=1) - lower_key = self.compute_keys(padded_prefix) # bs - upper_key = lower_key + self.rqvae_model.codebook_sizes[0] ** (len(self.rqvae_model.codebook_sizes) - prefix_len) # bs - num_items_in_range = ((self.keys.unsqueeze(0) >= lower_key.unsqueeze(1)) & (self.keys.unsqueeze(0) < upper_key.unsqueeze(1))).sum(dim=1) - return num_items_in_range # bs - - - def query(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_to_query: int): + taken_len = torch.full((bs,), prefix_len) + mask = self.get_mask_by_prefix(prefixes, taken_len) + # self.keys.unsqueeze(0) = 1 x bs + # lower_key.unsqueeze(1), upper_key.unsqueeze(1) = bs x 1 + num_items_in_range = (mask).sum(dim=1) + return num_items_in_range # bs + + def get_outer_inner_levels(self, semantic_ids: torch.Tensor, items_to_query: int): bs, K = semantic_ids.shape - num_items = torch.stack([self.process_prefixes(semantic_ids[:, :i+1]) for i in range(K)], dim=1) - # max idx for each row where num_items > item_to_query - forward_mask = (num_items > item_to_query).int() - backward_mask = forward_mask.flip(1) - outer_level = K - 1 - torch.argmax(backward_mask, dim=1) - inner_level = outer_level + 1 - - taken_outer_prefixes = semantic_ids * (torch.arange(K).expand(bs, K) < outer_level.unsqueeze(1)) - taken_inner_prefixes = semantic_ids * (torch.arange(K).expand(bs, K) < inner_level.unsqueeze(1)) - - outer_lower_prefix_keys = self.compute_keys(taken_outer_prefixes) - outer_upper_prefix_keys = outer_lower_prefix_keys + self.rqvae_model.codebook_sizes[0] ** (K - 1 - outer_level) - - print(outer_lower_prefix_keys) - - outer_mask = (self.keys.unsqueeze(0) >= outer_lower_prefix_keys.unsqueeze(1)) & (self.keys.unsqueeze(0) < outer_upper_prefix_keys.unsqueeze(1)) - - inner_lower_prefix_keys = self.compute_keys(taken_inner_prefixes) - inner_upper_prefix_keys = inner_lower_prefix_keys + self.rqvae_model.codebook_sizes[0] ** (K - 1 - inner_level) - - inner_mask = (self.keys.unsqueeze(0) >= inner_lower_prefix_keys.unsqueeze(1)) & (self.keys.unsqueeze(0) < inner_upper_prefix_keys.unsqueeze(1)) - - assert (inner_mask <= outer_mask).all() # TODO fix this - - return outer_mask, inner_mask + num_items = torch.stack( + [self.process_prefixes(semantic_ids[:, : i + 1]) for i in range(K)], dim=1 + ) + num_items: torch.Tensor = torch.cat( + [ + torch.full( + (bs, 1), + self.total_items, + ), + num_items, + ], + dim=1, + ) + + # first idx from end where it > items_to_query + + forward_mask = (num_items > items_to_query).int() # bs x K + 1 + backward_mask = forward_mask.flip(1) # bs x K + 1 + outer_level = K - torch.argmax(backward_mask, dim=1) # bs + inner_level = outer_level + 1 # bs + + # ol & il - how long prefix take => get (> items_to_query & <= items_to_query) items + + assert (outer_level <= K).all() + + return num_items, outer_level, inner_level # bs, bs + + def get_closest_single( + self, + guaranteed_raw_item_ids, # guaranteed_len + guaranteed_stored_residuals, # guaranteed_len x embedding_dim + guaranteed_query_residual, # embedding_dim + left_raw_item_ids, # left_len + left_stored_residuals, # left_len x embedding_dim + left_query_residual, # embedding_dim + ): + guaranteed_scores = torch.matmul( + guaranteed_stored_residuals, guaranteed_query_residual + ) # (guaranteed_len,) + + # Compute scores for left items + left_scores = torch.matmul( + left_stored_residuals, left_query_residual + ) # (left_len,) + + # Sort guaranteed items by score (descending) + guaranteed_sorted_indices = torch.argsort(guaranteed_scores, descending=True) + guaranteed_sorted_ids = guaranteed_raw_item_ids[guaranteed_sorted_indices] + + # Sort left items by score (descending) + left_sorted_indices = torch.argsort(left_scores, descending=True) + left_sorted_ids = left_raw_item_ids[left_sorted_indices] + + # Concatenate the sorted lists + result_ids = torch.cat((guaranteed_sorted_ids, left_sorted_ids)) + + return result_ids + + def get_closest( + self, + outer_masks, + inner_masks, + outer_levels, + inner_levels, + query_residuals_per_level, + items_to_query, + ): + # K = 3 + # self.residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 2 + # query_residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 2 + # outer_level = 3 # TODO if K (get by dot only from outer) + # inner_level = 4 # TODO if K + 1 (get by dot only from outer) + # outer_mask.shape = total_items + # inner_mask.shape = total_items + + raw_item_ids = [] + + for ( + outer_mask, + inner_mask, + outer_level, + inner_level, + query_residual_per_level, + ) in zip( + outer_masks, + inner_masks, + outer_levels, + inner_levels, + query_residuals_per_level, + ): + guaranteed = inner_mask # guaranteed_len + left = outer_mask & ~inner_mask # left_len + + # self.residuals_per_level.shape = total_items, K + 2, embedding_dim + guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len + guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ + :, -(inner_level + 1) + ] # guaranteed_len x embedding_dim + guaranteed_query_residual = query_residual_per_level[ + -(inner_level + 1) + ] # embedding_dim + + left_raw_item_ids = self.raw_item_ids[left] # left_len + left_stored_residuals = self.residuals_per_level[left][ + :, -outer_level + ] # left_len x embedding_dim + left_query_residual = query_residual_per_level[ + -outer_level + ] # embedding_dim + + result_ids = self.get_closest_single( + guaranteed_raw_item_ids, + guaranteed_stored_residuals, + guaranteed_query_residual, + left_raw_item_ids, + left_stored_residuals, + left_query_residual, + ) + + raw_item_ids.append(result_ids[:items_to_query]) + + return torch.stack(raw_item_ids) + + def query( + self, semantic_ids: torch.Tensor, residuals: torch.Tensor, items_to_query: int + ): + bs, K = semantic_ids.shape + + assert K == self.K, "Semantic ids must have same number of levels as the trie" + + num_items, outer_levels, inner_levels = self.get_outer_inner_levels( + semantic_ids, items_to_query + ) # bs, bs + + taken_outer_prefixes = semantic_ids * ( + torch.arange(K).expand(bs, K) < outer_levels.unsqueeze(1) + ) + taken_inner_prefixes = semantic_ids * ( + torch.arange(K).expand(bs, K) < inner_levels.unsqueeze(1) + ) + + outer_masks = self.get_mask_by_prefix( + taken_outer_prefixes, outer_levels + ) # bs, total_items + inner_masks = self.get_mask_by_prefix( + taken_inner_prefixes, inner_levels + ) # bs, total_items + + assert ( + num_items[torch.arange(bs), outer_levels] == outer_masks.sum(dim=1) + ).all() + assert ( + num_items[torch.arange(bs), inner_levels] == inner_masks.sum(dim=1) + ).all() + + assert (outer_masks.sum(dim=1) > items_to_query).all() + assert (inner_masks.sum(dim=1) <= items_to_query).all() + + assert (inner_masks <= outer_masks).all() + + query_residuals_per_level = self.get_residuals_per_level( + semantic_ids, residuals + ) + + raw_item_ids = self.get_closest( + outer_masks, + inner_masks, + outer_levels, + inner_levels, + query_residuals_per_level, + items_to_query, + ) + + return raw_item_ids if __name__ == "__main__": @@ -134,25 +357,27 @@ def query(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_to_que config = config["model"] rqvae_config = json.load(open(config["rqvae_train_config_path"])) rqvae_config["model"]["should_init_codebooks"] = False - rqvae_model = RqVaeModel.create_from_config(rqvae_config['model']) - rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) rqvae_model.eval() - + trie = Trie(rqvae_model) - + alphabet_size = rqvae_model.codebook_sizes[0] - N = 100 - K = 3 - semantic_ids = torch.randint(0, 4, (N, K), dtype=torch.int64) + N = 12101 + K = len(rqvae_model.codebook_sizes) + semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64) residuals = torch.randn(N, embedding_dim) trie.build_tree_structure(semantic_ids, residuals, torch.arange(N)) - - query_num = 10 - q_semantic_ids = torch.randint(0, 4, (query_num, K), dtype=torch.int64) - q_residuals = torch.randn(query_num, embedding_dim) - - a, b = trie.query(q_semantic_ids, q_residuals, 10) - # print(f"{a=}") - # print(f"{b=}") - print(f"{a.shape=}") - print(f"{b.shape=}") + + items_to_query = 20 + batch_size = 256 + q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64) + q_residuals = torch.randn(batch_size, embedding_dim) + + for i in range(100): + now = time.time() + item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) + print(time.time() - now) From 3bbafa9b2fc0c1eb6bf14e55db1d05d206bd0999 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Feb 2025 17:58:09 +0700 Subject: [PATCH 060/175] working tiger (1 min / eval) --- modeling/callbacks/base.py | 5 +- modeling/models/tiger.py | 279 +++++++++++++++++++---------------- modeling/rqvae_utils/trie.py | 45 +++--- review.md | 6 + 4 files changed, 184 insertions(+), 151 deletions(-) diff --git a/modeling/callbacks/base.py b/modeling/callbacks/base.py index d959dd4f..c4b2e0ef 100644 --- a/modeling/callbacks/base.py +++ b/modeling/callbacks/base.py @@ -1,3 +1,4 @@ +from tqdm import tqdm from metric import BaseMetric, StatefullMetric import utils @@ -202,8 +203,8 @@ def __call__(self, inputs, step_num): self._model.eval() with torch.no_grad(): - for batch in self._get_dataloader(): - + total = len(self._get_dataloader()) + for batch in tqdm(self._get_dataloader(), total=total): for key, value in batch.items(): batch[key] = value.to(utils.DEVICE) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index f56f0a9f..147b8ea4 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,17 +1,16 @@ import json import torch -from tqdm import tqdm from models.base import SequentialTorchModel from rqvae_utils import CollisionSolver, Trie from torch import nn +from tqdm import tqdm from utils import DEVICE, create_masked_tensor, get_activation_function from .rqvae import RqVaeModel class TigerModel(SequentialTorchModel, config_name="tiger"): - def __init__( self, rqvae_model, @@ -63,80 +62,92 @@ def __init__( layer_norm_eps=layer_norm_eps, batch_first=True, ) - + self._decoder = nn.TransformerDecoder( transformer_decoder_layer, num_decoder_layers ) - + self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) self._decoder_dropout = nn.Dropout(dropout) - + self._solver: CollisionSolver = solver - + self._codebook_sizes = codebook_sizes - self._codebook_item_embeddings_stacked = torch.stack([codebook for codebook in rqvae_model.codebooks]) - self._codebook_item_embeddings_stacked.requires_grad = False # TODO ask if freeze is needed - + self._codebook_item_embeddings_stacked = torch.stack( + [codebook for codebook in rqvae_model.codebooks] + ) + self._codebook_item_embeddings_stacked.requires_grad = ( + False # TODO ask if freeze is needed + ) + self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual self._item_id_to_embedding = item_id_to_embedding - + item_ids = torch.tensor(list(range(1, len(item_id_to_semantic_id) + 1))) - + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - - # self._trie = HierarchicalTrie(rqvae_model) - # for item_id, semantic_id in enumerate(item_id_to_semantic_id): - # self._trie.insert(Item(semantic_id, item_id + 1, item_id_to_residual[item_id])) # TODO no dedup tokens here + + self._trie = Trie(rqvae_model) + + self._trie.build_tree_structure( + item_id_to_semantic_id.to("cpu"), + item_id_to_residual.to("cpu"), + torch.arange(1, len(item_id_to_semantic_id) + 1), + ) self._bos_token_id = codebook_sizes[0] self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) - + self._codebook_embeddings = nn.Embedding( num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual self._init_weights(initializer_range) - + @classmethod def init_rqvae(cls, config) -> RqVaeModel: rqvae_config = json.load(open(config["rqvae_train_config_path"])) rqvae_config["model"]["should_init_codebooks"] = False - - rqvae_model = RqVaeModel.create_from_config(rqvae_config['model']).to(DEVICE) - rqvae_model.load_state_dict(torch.load(config['rqvae_checkpoint_path'], weights_only=True)) + + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) rqvae_model.eval() - for param in rqvae_model.parameters(): # TODO freezed + for param in rqvae_model.parameters(): # TODO freezed param.requires_grad = False - + codebook_sizes = rqvae_model.codebook_sizes assert all([book_size == codebook_sizes[0] for book_size in codebook_sizes]) - + return rqvae_model @classmethod def create_from_config(cls, config, **kwargs): rqvae_model = cls.init_rqvae(config) embedding_dim = rqvae_model.encoder.weight.shape[0] - embs_extractor = torch.load(config['embs_extractor_path']) - + embs_extractor = torch.load(config["embs_extractor_path"]) + embs_extractor = embs_extractor.sort_index() - + item_ids = embs_extractor.index.tolist() assert item_ids == list(range(1, len(item_ids) + 1)) - - embeddings = torch.stack(embs_extractor['embeddings'].tolist()).to(DEVICE) + + embeddings = torch.stack(embs_extractor["embeddings"].tolist()).to(DEVICE) semantic_ids, residuals = rqvae_model({"embeddings": embeddings}) assert embedding_dim == residuals.shape[1] - + solver = CollisionSolver( - residual_dim=residuals.shape[1], - emb_dim=len(rqvae_model.codebook_sizes), - codebook_size=rqvae_model.codebook_sizes[0] + residual_dim=residuals.shape[1], + emb_dim=len(rqvae_model.codebook_sizes), + codebook_size=rqvae_model.codebook_sizes[0], + ) + solver.create_query_candidates_dict( + torch.tensor(item_ids), semantic_ids, residuals ) - solver.create_query_candidates_dict(torch.tensor(item_ids), semantic_ids, residuals) return cls( rqvae_model=rqvae_model, @@ -148,7 +159,7 @@ def create_from_config(cls, config, **kwargs): pred_prefix=config["predictions_prefix"], positive_prefix=config["positive_prefix"], labels_prefix=config["labels_prefix"], - num_items=rqvae_model.codebook_sizes[0], # unused + num_items=rqvae_model.codebook_sizes[0], # unused max_sequence_length=kwargs["max_sequence_length"], embedding_dim=embedding_dim, num_heads=config.get("num_heads", int(embedding_dim // 64)), @@ -168,7 +179,7 @@ def forward(self, inputs): all_sample_lengths = inputs[ "{}.length".format(self._sequence_prefix) ] # (batch_size) - + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) encoder_embeddings, encoder_mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths @@ -177,68 +188,55 @@ def forward(self, inputs): if self.training: label_events = inputs["{}.ids".format(self._positive_prefix)] label_lengths = inputs["{}.length".format(self._positive_prefix)] - - label_lengths = label_lengths * (len(self._codebook_sizes) + 1) # TODO bos prepending - tgt_embeddings = self.get_item_embeddings( # TODO residual embs + + label_lengths = label_lengths * ( + len(self._codebook_sizes) + 1 + ) # TODO bos prepending + tgt_embeddings = self.get_item_embeddings( # TODO residual embs label_events ) # (all_batch_events, embedding_dim) - + decoder_outputs = self._apply_decoder( tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) - - decoder_prefix_scores = torch.einsum("bsd,scd->bsc", decoder_outputs[:, :-1, :], self._codebook_item_embeddings_stacked) - + + decoder_prefix_scores = torch.einsum( + "bsd,scd->bsc", + decoder_outputs[:, :-1, :], + self._codebook_item_embeddings_stacked, + ) + decoder_output_residual = decoder_outputs[:, -1, :] - - semantic_ids = self._item_id_to_semantic_id[label_events - 1] # len(events), len(codebook_sizes) - true_residuals = self._item_id_to_residual[label_events - 1] - + + semantic_ids = self._item_id_to_semantic_id[ + label_events - 1 + ] # len(events), len(codebook_sizes) + true_residuals = self._item_id_to_residual[label_events - 1] + true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) - pred_info = self._solver.get_pred_scores(semantic_ids, decoder_output_residual) - + pred_info = self._solver.get_pred_scores( + semantic_ids, decoder_output_residual + ) + return { - "logits": decoder_prefix_scores, + "logits": decoder_prefix_scores, "semantic.labels": semantic_ids, "dedup.logits": pred_info["pred_scores"], - "dedup.labels": true_info["true_dedup_tokens"] + "dedup.labels": true_info["true_dedup_tokens"], } else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( encoder_embeddings, encoder_mask - ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) residuals = tgt_embeddings[:, -1, :] - - raise Exception("TODO") - - ids = self._apply_trie(semantic_ids, residuals, n=20) - # store number of items in tree - # take first where >= n - # set vector with all trues, then set false from lower level tree - # take all true left in upper tree - # maybe store items by prefix (not so many memory)? - # lex sort by level first, item second - # use sparse matrix - - - # store by raw_item_id (semantic_id) uniq key (i0 * 256^3 + i1 * 256^2 + i2 * 256 + i3) - # sparse matrix - max_uniq_semantic_ids (for rqvae init items infer (max is 12101, could be less if collisions)) - # store sem_id -> num - return ids - - def _apply_trie(self, preds: torch.Tensor, residuals: torch.Tensor, n: int = 20): - semantic_ids = [tuple(row.tolist()) for row in preds] - - ids = [] - for semantic_id, residual in tqdm(zip(semantic_ids, residuals), total=len(semantic_ids)): - item = Item(semantic_id, -999, residual) - closest_items = self._trie.find_n_closest(item, n) - closest_raw_ids = [item.raw_item_id for item in closest_items] - ids.append(closest_raw_ids) # TODO add correct tree inference - - return torch.tensor(ids) + semantic_ids = semantic_ids.to(torch.int64) + + item_ids = self._trie.query( + semantic_ids.to("cpu"), residuals.to("cpu"), items_to_query=20 + ) + return item_ids def _apply_decoder( self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask @@ -246,12 +244,14 @@ def _apply_decoder( tgt_embeddings, tgt_mask = create_masked_tensor( data=tgt_embeddings, lengths=label_lengths ) # (batch_size, dec_seq_len, embedding_dim), (batch_size, dec_seq_len) - + batch_size = tgt_embeddings.shape[0] - bos_embeddings = self._bos_weight.unsqueeze(0).expand(batch_size, 1, -1) # (batch_size, 1, embedding_dim) - + bos_embeddings = self._bos_weight.unsqueeze(0).expand( + batch_size, 1, -1 + ) # (batch_size, 1, embedding_dim) + tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) - + label_len = tgt_mask.shape[1] assert label_len == len(self._codebook_sizes) + 1 @@ -273,7 +273,7 @@ def _apply_decoder( causal_mask = ( torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) ) # (dec_seq_len, dec_seq_len) - + decoder_outputs = self._decoder( tgt=tgt_embeddings, memory=encoder_embeddings, @@ -282,89 +282,110 @@ def _apply_decoder( ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs - - def _apply_decoder_autoregressive( - self, encoder_embeddings, encoder_mask - ): + + def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): batch_size = encoder_embeddings.shape[0] - - tgt_embeddings = self._bos_weight.unsqueeze(0).unsqueeze(0).expand(batch_size, 1, -1) + + tgt_embeddings = ( + self._bos_weight.unsqueeze(0).unsqueeze(0).expand(batch_size, 1, -1) + ) tgt_mask = torch.ones(batch_size, 1, dtype=torch.bool, device=DEVICE) - + semantic_ids = torch.tensor([], device=DEVICE) - - for step in range(len(self._codebook_sizes) + 1): # semantic_id + residual + + for step in range(len(self._codebook_sizes) + 1): # semantic_id + residual position_embeddings = self._decoder_pos_embeddings( torch.full((batch_size,), tgt_embeddings.shape[1], device=DEVICE), - tgt_mask + tgt_mask, ) - + curr_embeddings = tgt_embeddings + position_embeddings - + curr_embeddings = self._decoder_layernorm(curr_embeddings) curr_embeddings = self._decoder_dropout(curr_embeddings) - + decoder_output = self._decoder( tgt=curr_embeddings, memory=encoder_embeddings, memory_key_padding_mask=~encoder_mask, ) - - next_token_embedding = decoder_output[:, -1, :] # batch_size x embedding_dim - + + next_token_embedding = decoder_output[ + :, -1, : + ] # batch_size x embedding_dim + if step < len(self._codebook_sizes): - codebook = self._codebook_item_embeddings_stacked[step] # len(codebook_sizes) x embedding_dim + codebook = self._codebook_item_embeddings_stacked[ + step + ] # len(codebook_sizes) x embedding_dim closest_semantic_ids = torch.argmax( torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 - ) # batch_size x 1 - semantic_ids = torch.cat([semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1) # batch_size x (step + 1) - next_token_embedding = codebook[closest_semantic_ids] # batch_size x embedding_dim - - tgt_embeddings = torch.cat([tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1) - tgt_mask = torch.ones(batch_size, tgt_embeddings.shape[1], dtype=torch.bool, device=DEVICE) + ) # batch_size x 1 + semantic_ids = torch.cat( + [semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1 + ) # batch_size x (step + 1) + next_token_embedding = codebook[ + closest_semantic_ids + ] # batch_size x embedding_dim + + tgt_embeddings = torch.cat( + [tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1 + ) + tgt_mask = torch.ones( + batch_size, tgt_embeddings.shape[1], dtype=torch.bool, device=DEVICE + ) return semantic_ids, tgt_embeddings - - def get_item_embeddings(self, events): # TODO freezed embeddings - embs = self._item_id_to_semantic_embedding[events - 1] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.view(len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim) - - def get_init_item_embeddings(self, events): # TODO freezed embeddings + + def get_item_embeddings(self, events): # TODO freezed embeddings + embs = self._item_id_to_semantic_embedding[ + events - 1 + ] # len(events), len(self._codebook_sizes) + 1, embedding_dim + return embs.view( + len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim + ) + + def get_init_item_embeddings(self, events): # TODO freezed embeddings # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[events - 1] # len(events), len(codebook_sizes) - + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(codebook_sizes) + result = [] for semantic_id in semantic_ids: item_repr = [] for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append(self._codebook_item_embeddings_stacked[codebook_idx][codebook_id]) + item_repr.append( + self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + ) result.append(torch.stack(item_repr)) - + semantic_embeddings = torch.stack(result) - + # get residuals text_embeddings = self._item_id_to_embedding[events - 1] residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) - + # get true item embeddings item_embeddings = torch.cat( [semantic_embeddings, residual], dim=1 - ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) - + return item_embeddings def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... + # TODO +1 for residual embedding position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings ) - + # print(f"{position_embeddings.isnan().any()=}") # TODO fix NaN in pos_embs def codebook_lambda(x): @@ -392,7 +413,7 @@ def codebook_lambda(x): ) return codebook_embeddings - + def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): batch_size = mask.shape[0] seq_len = mask.shape[1] @@ -408,10 +429,12 @@ def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_lay # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ... positions = position_lambda(positions) # (all_batch_events) - + # print(f"{positions.tolist()[:20]=}") - - assert (positions >= 0).all() and (positions < embedding_layer.num_embeddings).all() + + assert (positions >= 0).all() and ( + positions < embedding_layer.num_embeddings + ).all() position_embeddings = embedding_layer( positions diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 2b46567a..3c5462f5 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -16,7 +16,7 @@ def __init__(self, rqvae_model: RqVaeModel): self.total_items = None self.embedding_table = torch.stack( [cb for cb in self.rqvae_model.codebooks] - ) # K x codebook_size x embedding_dim + ).to("cpu") # K x codebook_size x embedding_dim def unique_with_index(self, x, dim=None): """Unique elements of x and indices of those unique elements @@ -89,7 +89,7 @@ def build_tree_structure( residuals_per_level = self.get_residuals_per_level( semantic_ids, residuals - ) # total_items x K + 2 x embedding_dim + ) # total_items x K + 1 x embedding_dim keys = self.compute_keys(semantic_ids) # bs, could be collisions @@ -124,15 +124,7 @@ def get_residuals_per_level( residuals_per_level[:, 0, :] = residuals - residuals_per_level = torch.cat( - [ - torch.zeros(bs, 1, embedding_dim), - residuals_per_level, - ], - dim=1, - ) - - return residuals_per_level # bs x K + 2 x embedding_dim + return residuals_per_level # bs x K + 1 x embedding_dim def get_mask_by_prefix(self, prefixes: torch.Tensor, taken_lens: torch.Tensor): bs = prefixes.shape[0] @@ -243,10 +235,9 @@ def get_closest( items_to_query, ): # K = 3 - # self.residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 2 - # query_residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 2 - # outer_level = 3 # TODO if K (get by dot only from outer) - # inner_level = 4 # TODO if K + 1 (get by dot only from outer) + # self.residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 1 + # query_residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 1 + # outer_level = 3 # if K (get by dot only from outer) => inner_mask = outer_mask # outer_mask.shape = total_items # inner_mask.shape = total_items @@ -268,7 +259,9 @@ def get_closest( guaranteed = inner_mask # guaranteed_len left = outer_mask & ~inner_mask # left_len - # self.residuals_per_level.shape = total_items, K + 2, embedding_dim + assert guaranteed.sum() + left.sum() == outer_mask.sum() + + # self.residuals_per_level.shape = total_items, K + 1, embedding_dim guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ :, -(inner_level + 1) @@ -323,6 +316,10 @@ def query( taken_inner_prefixes, inner_levels ) # bs, total_items + inner_levels_max_mask = inner_levels == self.K + 1 + inner_levels[inner_levels_max_mask] = self.K + inner_masks[inner_levels_max_mask] = outer_masks[inner_levels_max_mask] + assert ( num_items[torch.arange(bs), outer_levels] == outer_masks.sum(dim=1) ).all() @@ -331,7 +328,7 @@ def query( ).all() assert (outer_masks.sum(dim=1) > items_to_query).all() - assert (inner_masks.sum(dim=1) <= items_to_query).all() + # assert (inner_masks.sum(dim=1) <= items_to_query).all() # can be false if collisions assert (inner_masks <= outer_masks).all() @@ -364,10 +361,10 @@ def query( rqvae_model.eval() trie = Trie(rqvae_model) - alphabet_size = rqvae_model.codebook_sizes[0] + alphabet_size = 6 N = 12101 - K = len(rqvae_model.codebook_sizes) + K = 3 semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64) residuals = torch.randn(N, embedding_dim) trie.build_tree_structure(semantic_ids, residuals, torch.arange(N)) @@ -377,7 +374,13 @@ def query( q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64) q_residuals = torch.randn(batch_size, embedding_dim) - for i in range(100): + total_time = 0 + n_exps = 100 + + for i in range(n_exps): now = time.time() item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) - print(time.time() - now) + assert item_ids.shape == (batch_size, items_to_query) + total_time += time.time() - now + + print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") diff --git a/review.md b/review.md index 8904976e..21b625a5 100644 --- a/review.md +++ b/review.md @@ -95,3 +95,9 @@ decoder: (bos, 1, 2, 3) -> (1, 2, 3, 4) # causal mask so (bos -> 1), (bos, 1 -> - user_id & codebook_ids -> repr ??? - add last 'sequence' prediction, now only last item is supported - dataloader (semantic ids lens) + +## TODO + +1) Tiger +2) SasRec +3) SasRec freezed (all on single board) From 8ddf8f2c0cdde4db30e5bdf2f87d9bb109156a62 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Feb 2025 18:50:46 +0700 Subject: [PATCH 061/175] add sasrec freezed model --- configs/train/rqvae_train_config.json | 5 +- .../train/sasrec_freezed_train_config.json | 167 ++++++++++++++++++ configs/train/tiger_train_config.json | 9 +- modeling/callbacks/base.py | 4 +- modeling/models/__init__.py | 1 + modeling/models/rqvae.py | 2 +- modeling/models/sasrec.py | 43 +---- modeling/models/sasrec_freezed.py | 157 ++++++++++++++++ modeling/models/tiger.py | 21 +-- 9 files changed, 347 insertions(+), 62 deletions(-) create mode 100644 configs/train/sasrec_freezed_train_config.json create mode 100644 modeling/models/sasrec_freezed.py diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index 225a2fbe..d5db90e1 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_steps_num": 512, + "train_epochs_num": 20, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", @@ -31,7 +31,8 @@ }, "model": { "type": "rqvae", - "embedding_dim": 512, + "text_embedding_dim": 512, + "embedding_dim": 64, "n_iter": 100, "codebook_sizes": [256, 256, 256], "should_init_codebooks": true, diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json new file mode 100644 index 00000000..58153797 --- /dev/null +++ b/configs/train/sasrec_freezed_train_config.json @@ -0,0 +1,167 @@ +{ + "experiment_name": "sasrec_beauty", + "best_metric": "validation/ndcg@20", + "dataset": { + "type": "sequence", + "path_to_data_dir": "../data", + "name": "Beauty", + "max_sequence_length": 50, + "samplers": { + "type": "next_item_prediction", + "negative_sampler_type": "random" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "sasrec_freezed", + "sequence_prefix": "item", + "positive_prefix": "positive", + "negative_prefix": "negative", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "sasrec", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", + "output_prefix": "downstream_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 64, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } +} \ No newline at end of file diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index c7cd6cdf..a70ec211 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -42,11 +42,12 @@ "predictions_prefix": "logits", "positive_prefix": "labels", "labels_prefix": "labels", + "embedding_dim": 64, "num_heads": 2, "num_encoder_layers": 2, "num_decoder_layers": 2, - "dim_feedforward": 128, - "dropout": 0.2, + "dim_feedforward": 256, + "dropout": 0.3, "activation": "gelu", "layer_norm_eps": 1e-9, "initializer_range": 0.02 @@ -89,7 +90,7 @@ }, { "type": "validation", - "on_step": 256, + "on_step": 64, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -133,7 +134,7 @@ }, { "type": "eval", - "on_step": 256, + "on_step": 64, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/modeling/callbacks/base.py b/modeling/callbacks/base.py index c4b2e0ef..1ae26267 100644 --- a/modeling/callbacks/base.py +++ b/modeling/callbacks/base.py @@ -1,4 +1,3 @@ -from tqdm import tqdm from metric import BaseMetric, StatefullMetric import utils @@ -203,8 +202,7 @@ def __call__(self, inputs, step_num): self._model.eval() with torch.no_grad(): - total = len(self._get_dataloader()) - for batch in tqdm(self._get_dataloader(), total=total): + for batch in self._get_dataloader(): for key, value in batch.items(): batch[key] = value.to(utils.DEVICE) diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index a169d41e..b9678e2e 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -13,6 +13,7 @@ from .pure_mf import PureMF from .random import RandomModel from .sasrec import SasRecModel, SasRecInBatchModel +from .sasrec_freezed import SasRecFreezedModel from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel from .rqvae import RqVaeModel diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index cfdb0574..53f1fece 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -56,7 +56,7 @@ def __init__( def create_from_config(cls, config, **kwargs): return cls( train_sampler=kwargs.get('train_sampler'), - input_dim=config['embedding_dim'], + input_dim=config['text_embedding_dim'], hidden_dim=config['embedding_dim'], n_iter=config['n_iter'], codebook_sizes=config['codebook_sizes'], diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 57367e3b..cd36b544 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -37,37 +37,6 @@ def __init__( self._positive_prefix = positive_prefix self._init_weights(initializer_range) - - df = torch.load('../data/Beauty/data_full.pt') - precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) - - self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) - - padding_embedding = torch.nn.init.trunc_normal_( - torch.zeros(1, precomputed_embeddings.shape[1]), - std=initializer_range, - a=-2 * initializer_range, - b=2 * initializer_range - ) - - mask_embedding = torch.nn.init.trunc_normal_( - torch.zeros(1, precomputed_embeddings.shape[1]), - std=initializer_range, - a=-2 * initializer_range, - b=2 * initializer_range - ) - - extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) - - self._item_embeddings = torch.nn.Embedding( - num_embeddings=num_items + 2, - embedding_dim=precomputed_embeddings.shape[1] - ) - - # TODO ask about freezed masked & padding tokens - - self._item_embeddings.weight.data.copy_(extended_embeddings) - self._item_embeddings.weight.requires_grad = False @classmethod def create_from_config(cls, config, **kwargs): @@ -83,12 +52,6 @@ def create_from_config(cls, config, **kwargs): dropout=config.get('dropout', 0.0), initializer_range=config.get('initializer_range', 0.02) ) - - def get_item_embeddings(self, events): - return self._projector(self._item_embeddings(events)) - - def _get_item_embeddings(self): - return self._projector(self._item_embeddings.weight) def forward(self, inputs): all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) @@ -103,7 +66,7 @@ def forward(self, inputs): all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) - all_embeddings = self._get_item_embeddings() # (num_items + 2, embedding_dim) + all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( @@ -144,7 +107,7 @@ def forward(self, inputs): candidate_scores = torch.einsum( 'bd,nd->bn', last_embeddings, - self._get_item_embeddings() + self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id @@ -253,4 +216,4 @@ def forward(self, inputs): k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + return indices \ No newline at end of file diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py new file mode 100644 index 00000000..167ae468 --- /dev/null +++ b/modeling/models/sasrec_freezed.py @@ -0,0 +1,157 @@ +from models import SequentialTorchModel +from utils import create_masked_tensor + +import torch + + +class SasRecFreezedModel(SequentialTorchModel, config_name='sasrec_freezed'): + + def __init__( + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True + ) + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + + self._init_weights(initializer_range) + + df = torch.load('../data/Beauty/data_full.pt') + precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) + + self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) + + padding_embedding = torch.nn.init.trunc_normal_( + torch.zeros(1, precomputed_embeddings.shape[1]), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range + ) + + mask_embedding = torch.nn.init.trunc_normal_( + torch.zeros(1, precomputed_embeddings.shape[1]), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range + ) + + extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) + + self._item_embeddings = torch.nn.Embedding( + num_embeddings=num_items + 2, + embedding_dim=precomputed_embeddings.shape[1] + ) + + # TODO ask about freezed masked & padding tokens + + self._item_embeddings.weight.data.copy_(extended_embeddings) + self._item_embeddings.weight.requires_grad = False + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) + ) + + def get_item_embeddings(self, events): # TODO refactor (single projection) + return self._projector(self._item_embeddings(events)) + + def _get_item_embeddings(self): + return self._projector(self._item_embeddings.weight) + + def forward(self, inputs): + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + + all_embeddings = self._get_item_embeddings() # (num_items + 2, embedding_dim) + + # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim + all_scores = torch.einsum( + 'ad,nd->an', + all_sample_embeddings, + all_embeddings + ) # (all_batch_events, num_items + 2) + + positive_scores = torch.gather( + input=all_scores, + dim=1, + index=all_positive_sample_events[..., None] + ) # (all_batch_items, 1) + + sample_ids, _ = create_masked_tensor( + data=all_sample_events, + lengths=all_sample_lengths + ) # (batch_size, seq_len) + + sample_ids = torch.repeat_interleave(sample_ids, all_sample_lengths, dim=0) # (all_batch_events, seq_len) + + negative_scores = torch.scatter( + input=all_scores, + dim=1, + index=sample_ids, + src=torch.ones_like(sample_ids) * (-torch.inf) + ) # (all_batch_events, num_items + 2) + negative_scores[:, 0] = -torch.inf # Padding idx + negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx + + return { + 'positive_scores': positive_scores, + 'negative_scores': negative_scores + } + else: # eval mode + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + 'bd,nd->bn', + last_embeddings, + self._get_item_embeddings() + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf # Padding id + candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id + + _, indices = torch.topk( + candidate_scores, + k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 147b8ea4..78b46ba2 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -4,7 +4,6 @@ from models.base import SequentialTorchModel from rqvae_utils import CollisionSolver, Trie from torch import nn -from tqdm import tqdm from utils import DEVICE, create_masked_tensor, get_activation_function from .rqvae import RqVaeModel @@ -16,7 +15,7 @@ def __init__( rqvae_model, item_id_to_semantic_id, item_id_to_residual, - item_id_to_embedding, + item_id_to_text_embedding, solver, sequence_prefix, pred_prefix, @@ -83,7 +82,7 @@ def __init__( self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual - self._item_id_to_embedding = item_id_to_embedding + self._item_id_to_text_embedding = item_id_to_text_embedding item_ids = torch.tensor(list(range(1, len(item_id_to_semantic_id) + 1))) @@ -127,7 +126,6 @@ def init_rqvae(cls, config) -> RqVaeModel: @classmethod def create_from_config(cls, config, **kwargs): rqvae_model = cls.init_rqvae(config) - embedding_dim = rqvae_model.encoder.weight.shape[0] embs_extractor = torch.load(config["embs_extractor_path"]) embs_extractor = embs_extractor.sort_index() @@ -135,10 +133,9 @@ def create_from_config(cls, config, **kwargs): item_ids = embs_extractor.index.tolist() assert item_ids == list(range(1, len(item_ids) + 1)) - embeddings = torch.stack(embs_extractor["embeddings"].tolist()).to(DEVICE) + text_embeddings = torch.stack(embs_extractor["embeddings"].tolist()).to(DEVICE) - semantic_ids, residuals = rqvae_model({"embeddings": embeddings}) - assert embedding_dim == residuals.shape[1] + semantic_ids, residuals = rqvae_model({"embeddings": text_embeddings}) solver = CollisionSolver( residual_dim=residuals.shape[1], @@ -153,7 +150,7 @@ def create_from_config(cls, config, **kwargs): rqvae_model=rqvae_model, item_id_to_semantic_id=semantic_ids, item_id_to_residual=residuals, - item_id_to_embedding=embeddings, + item_id_to_text_embedding=text_embeddings, solver=solver, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], @@ -161,11 +158,11 @@ def create_from_config(cls, config, **kwargs): labels_prefix=config["labels_prefix"], num_items=rqvae_model.codebook_sizes[0], # unused max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=embedding_dim, - num_heads=config.get("num_heads", int(embedding_dim // 64)), + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), num_encoder_layers=config["num_encoder_layers"], num_decoder_layers=config["num_decoder_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * embedding_dim), + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), codebook_sizes=rqvae_model.codebook_sizes, dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), @@ -363,7 +360,7 @@ def get_init_item_embeddings(self, events): # TODO freezed embeddings semantic_embeddings = torch.stack(result) # get residuals - text_embeddings = self._item_id_to_embedding[events - 1] + text_embeddings = self._item_id_to_text_embedding[events - 1] residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) From 705bad660376c861ab5763508960e049202c5463 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Feb 2025 18:54:20 +0700 Subject: [PATCH 062/175] small_fixes + todo --- configs/train/sasrec_freezed_train_config.json | 2 +- review.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 58153797..f458cb49 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_beauty", + "experiment_name": "sasrec_freezed_beauty", "best_metric": "validation/ndcg@20", "dataset": { "type": "sequence", diff --git a/review.md b/review.md index 21b625a5..1a862f85 100644 --- a/review.md +++ b/review.md @@ -101,3 +101,5 @@ decoder: (bos, 1, 2, 3) -> (1, 2, 3, 4) # causal mask so (bos -> 1), (bos, 1 -> 1) Tiger 2) SasRec 3) SasRec freezed (all on single board) +4) Tiger batched inference +5) Tiger honest embedding_dim From 098982b7d76a27137abe010bb1f792bbc7acef1c Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 9 Feb 2025 14:58:18 +0700 Subject: [PATCH 063/175] TODO: add projector to tiger --- configs/train/rqvae_train_config.json | 14 ++++---------- modeling/models/rqvae.py | 2 +- modeling/models/tiger.py | 6 ++++++ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index d5db90e1..ee6ef333 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_epochs_num": 20, + "train_epochs_num": 50, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", @@ -31,8 +31,7 @@ }, "model": { "type": "rqvae", - "text_embedding_dim": 512, - "embedding_dim": 64, + "embedding_dim": 512, "n_iter": 100, "codebook_sizes": [256, 256, 256], "should_init_codebooks": true, @@ -43,14 +42,9 @@ "type": "basic", "optimizer": { "type": "adam", - "lr": 1e-4 + "lr": 5e-5 }, - "clip_grad_threshold": 5.0, - "scheduler": { - "type": "step", - "step_size": 100, - "gamma": 0.96 - } + "clip_grad_threshold": 5.0 }, "loss": { "type": "rqvae_loss", diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 53f1fece..cfdb0574 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -56,7 +56,7 @@ def __init__( def create_from_config(cls, config, **kwargs): return cls( train_sampler=kwargs.get('train_sampler'), - input_dim=config['text_embedding_dim'], + input_dim=config['embedding_dim'], hidden_dim=config['embedding_dim'], n_iter=config['n_iter'], codebook_sizes=config['codebook_sizes'], diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 78b46ba2..af527d2b 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -84,6 +84,8 @@ def __init__( self._item_id_to_residual = item_id_to_residual self._item_id_to_text_embedding = item_id_to_text_embedding + self._projector = nn.Linear(item_id_to_text_embedding.shape[1], embedding_dim) + item_ids = torch.tensor(list(range(1, len(item_id_to_semantic_id) + 1))) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) @@ -197,6 +199,9 @@ def forward(self, inputs): tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) + print(decoder_outputs.shape) + print(self._codebook_item_embeddings_stacked.shape) + decoder_prefix_scores = torch.einsum( "bsd,scd->bsc", decoder_outputs[:, :-1, :], @@ -338,6 +343,7 @@ def get_item_embeddings(self, events): # TODO freezed embeddings embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim + embs = self._projector(embs) return embs.view( len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim ) From cebe016f04121b16adc84eda335de818e2dc2bba Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 13 Feb 2025 19:14:49 +0700 Subject: [PATCH 064/175] TODO ask about last / next item predicition --- .../train/sasrec_freezed_train_config.json | 1 + configs/train/sasrec_train_config.json | 1 + configs/train/tiger_train_config.json | 7 +++--- modeling/models/sasrec_freezed.py | 6 ++--- modeling/rqvae_utils/trie.py | 24 +++++++++++++------ 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index f458cb49..7d9d557d 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -1,6 +1,7 @@ { "experiment_name": "sasrec_freezed_beauty", "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, "dataset": { "type": "sequence", "path_to_data_dir": "../data", diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index aa29a029..4bffd95d 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -1,6 +1,7 @@ { "experiment_name": "sasrec_beauty", "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, "dataset": { "type": "sequence", "path_to_data_dir": "../data", diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index a70ec211..04adc1d2 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,14 +1,14 @@ { "experiment_name": "tiger", "best_metric": "validation/ndcg@20", - "train_epochs_num": 50, + "train_epochs_num": 100, "dataset": { "type": "sequence", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "last_item_prediction", + "type": "next_item_prediction", "negative_sampler_type": "random" } }, @@ -34,7 +34,6 @@ }, "model": { "type": "tiger", - "trie": "../data/Beauty/rqvae/trie.pkl", "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", @@ -134,7 +133,7 @@ }, { "type": "eval", - "on_step": 64, + "on_step": 256, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 167ae468..c6fab7f6 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -87,7 +87,7 @@ def create_from_config(cls, config, **kwargs): def get_item_embeddings(self, events): # TODO refactor (single projection) return self._projector(self._item_embeddings(events)) - def _get_item_embeddings(self): + def get_last_item_embeddings(self): return self._projector(self._item_embeddings.weight) def forward(self, inputs): @@ -103,7 +103,7 @@ def forward(self, inputs): all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) - all_embeddings = self._get_item_embeddings() # (num_items + 2, embedding_dim) + all_embeddings = self.get_last_item_embeddings() # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( @@ -144,7 +144,7 @@ def forward(self, inputs): candidate_scores = torch.einsum( 'bd,nd->bn', last_embeddings, - self._get_item_embeddings() + self.get_last_item_embeddings() ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 3c5462f5..60d1c286 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -365,21 +365,31 @@ def query( N = 12101 K = 3 - semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64) - residuals = torch.randn(N, embedding_dim) - trie.build_tree_structure(semantic_ids, residuals, torch.arange(N)) + # make tensor of size N x K + # of ([1, 2, 3], [1, 2, 3], [1, 2, 3], ...) + a = torch.arange(K).repeat(20, 1) + b = torch.arange(K + 1, K + K + 1).repeat(20, 1) + semantic_ids = torch.cat([a, b], dim=0) + residuals = torch.randn(semantic_ids.shape[0], embedding_dim) + trie.build_tree_structure( + semantic_ids, residuals, torch.arange(semantic_ids.shape[0]) + ) - items_to_query = 20 - batch_size = 256 - q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64) + items_to_query = 5 + batch_size = 1 + q_semantic_ids = semantic_ids[0].repeat(batch_size, 1) + # q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64) q_residuals = torch.randn(batch_size, embedding_dim) total_time = 0 - n_exps = 100 + n_exps = 1 for i in range(n_exps): now = time.time() item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) + print(semantic_ids[item_ids].shape) + print(q_semantic_ids.shape) + print(semantic_ids[item_ids] == q_semantic_ids) assert item_ids.shape == (batch_size, items_to_query) total_time += time.time() - now From e5fe9782e1716260ee2c069afc35cbcdcfb6bcc8 Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 13 Feb 2025 19:20:46 +0700 Subject: [PATCH 065/175] use last item prediciton --- configs/train/sasrec_freezed_train_config.json | 2 +- configs/train/sasrec_train_config.json | 2 +- configs/train/tiger_train_config.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 7d9d557d..5f383018 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 4bffd95d..44079ace 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 04adc1d2..672591d0 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, From 91b564938a2f70cec1b83dfce43292b65bbd0a8c Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 13 Feb 2025 21:26:10 +0700 Subject: [PATCH 066/175] fix collision solver --- configs/train/tiger_train_config.json | 7 ----- modeling/models/tiger.py | 40 +++++++++++++----------- modeling/rqvae_utils/trie.py | 45 +++++++++++++++++---------- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 672591d0..fd80a1c0 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -68,13 +68,6 @@ "labels": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" - }, - { - "type": "sample_logsoftmax", - "predictions_prefix": "dedup.logits", - "labels": "dedup.labels", - "weight": 1.0, - "output_prefix": "dedup_loss" } ], "output_prefix": "loss" diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index af527d2b..41ad2479 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -77,7 +77,7 @@ def __init__( [codebook for codebook in rqvae_model.codebooks] ) self._codebook_item_embeddings_stacked.requires_grad = ( - False # TODO ask if freeze is needed + False # TODO maybe unfreeeze later ) self._item_id_to_semantic_id = item_id_to_semantic_id @@ -90,16 +90,23 @@ def __init__( self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = Trie(rqvae_model) + self._trie = Trie(rqvae_model, self._projector) self._trie.build_tree_structure( - item_id_to_semantic_id.to("cpu"), - item_id_to_residual.to("cpu"), + item_id_to_semantic_id, + item_id_to_residual, torch.arange(1, len(item_id_to_semantic_id) + 1), ) self._bos_token_id = codebook_sizes[0] - self._bos_weight = nn.Parameter(torch.randn(embedding_dim)) + self._bos_weight = nn.Parameter( + torch.nn.init.trunc_normal_( + torch.zeros(embedding_dim), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range, + ) + ) self._codebook_embeddings = nn.Embedding( num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim @@ -117,7 +124,7 @@ def init_rqvae(cls, config) -> RqVaeModel: torch.load(config["rqvae_checkpoint_path"], weights_only=True) ) rqvae_model.eval() - for param in rqvae_model.parameters(): # TODO freezed + for param in rqvae_model.parameters(): param.requires_grad = False codebook_sizes = rqvae_model.codebook_sizes @@ -199,13 +206,12 @@ def forward(self, inputs): tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) - print(decoder_outputs.shape) - print(self._codebook_item_embeddings_stacked.shape) + projected_stacked = self._projector(self._codebook_item_embeddings_stacked) decoder_prefix_scores = torch.einsum( "bsd,scd->bsc", decoder_outputs[:, :-1, :], - self._codebook_item_embeddings_stacked, + projected_stacked, ) decoder_output_residual = decoder_outputs[:, -1, :] @@ -215,16 +221,14 @@ def forward(self, inputs): ] # len(events), len(codebook_sizes) true_residuals = self._item_id_to_residual[label_events - 1] - true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) - pred_info = self._solver.get_pred_scores( - semantic_ids, decoder_output_residual - ) + # true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) + # pred_info = self._solver.get_pred_scores( + # semantic_ids, decoder_output_residual + # ) TODO shapes don't match (solver init with 512, here 64) return { "logits": decoder_prefix_scores, "semantic.labels": semantic_ids, - "dedup.logits": pred_info["pred_scores"], - "dedup.labels": true_info["true_dedup_tokens"], } else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( @@ -316,10 +320,10 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): :, -1, : ] # batch_size x embedding_dim + projected = self._projector(self._codebook_item_embeddings_stacked) + if step < len(self._codebook_sizes): - codebook = self._codebook_item_embeddings_stacked[ - step - ] # len(codebook_sizes) x embedding_dim + codebook = projected[step] # len(codebook_sizes) x embedding_dim closest_semantic_ids = torch.argmax( torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 ) # batch_size x 1 diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 60d1c286..308d999a 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -2,11 +2,12 @@ import time import torch +from utils import DEVICE from models.rqvae import RqVaeModel class Trie: - def __init__(self, rqvae_model: RqVaeModel): + def __init__(self, rqvae_model: RqVaeModel, projector: torch.nn.Linear): self.rqvae_model = rqvae_model self.keys = None self.prefix_counts = None @@ -16,7 +17,8 @@ def __init__(self, rqvae_model: RqVaeModel): self.total_items = None self.embedding_table = torch.stack( [cb for cb in self.rqvae_model.codebooks] - ).to("cpu") # K x codebook_size x embedding_dim + ) # K x codebook_size x embedding_dim + self.projector = projector def unique_with_index(self, x, dim=None): """Unique elements of x and indices of those unique elements @@ -43,7 +45,7 @@ def unique_with_index(self, x, dim=None): def compute_keys(self, semantic_ids: torch.Tensor): exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) base = self.rqvae_model.codebook_sizes[0] ** exponents - uniq_ids = torch.einsum("nc,c->n", semantic_ids, base) + uniq_ids = semantic_ids.to("cpu") @ base # TODO fix device return uniq_ids def pad_semantic_ids(self, semantic_ids: torch.Tensor): @@ -54,7 +56,7 @@ def pad_semantic_ids(self, semantic_ids: torch.Tensor): semantic_ids.shape[0], self.K - semantic_ids.shape[1], dtype=semantic_ids.dtype, - ), + ).to(semantic_ids.device), ], dim=1, ) @@ -88,7 +90,7 @@ def build_tree_structure( prefix_counts[:, i + 1] = current_level_same residuals_per_level = self.get_residuals_per_level( - semantic_ids, residuals + self.embedding_table.to(residuals.device), semantic_ids, residuals ) # total_items x K + 1 x embedding_dim keys = self.compute_keys(semantic_ids) # bs, could be collisions @@ -100,19 +102,22 @@ def build_tree_structure( self.total_items = len(keys) def get_residuals_per_level( - self, semantic_ids: torch.Tensor, residuals: torch.Tensor + self, + embedding_table: torch.Tensor, + semantic_ids: torch.Tensor, + residuals: torch.Tensor, ): bs = semantic_ids.shape[0] embedding_dim = residuals.shape[1] residuals_per_level = torch.zeros( - bs, self.K + 1, embedding_dim + bs, self.K + 1, embedding_dim, device=embedding_table.device ) # bs x K + 1 x embedding_dim # TODO think if reverse is needed here # i = 3, 2, 1, 0 for i in range(self.K - 1, -1, -1): indices_at_level = semantic_ids[:, i] # bs - embeddings_at_level = self.embedding_table[ + embeddings_at_level = embedding_table[ i, indices_at_level ] # bs x embedding_dim # 1 2 3 4 @@ -214,11 +219,15 @@ def get_closest_single( # Sort guaranteed items by score (descending) guaranteed_sorted_indices = torch.argsort(guaranteed_scores, descending=True) - guaranteed_sorted_ids = guaranteed_raw_item_ids[guaranteed_sorted_indices] + guaranteed_sorted_ids = guaranteed_raw_item_ids[ + guaranteed_sorted_indices.to(guaranteed_raw_item_ids.device) + ] # Sort left items by score (descending) left_sorted_indices = torch.argsort(left_scores, descending=True) - left_sorted_ids = left_raw_item_ids[left_sorted_indices] + left_sorted_ids = left_raw_item_ids[ + left_sorted_indices.to(left_raw_item_ids.device) + ] # Concatenate the sorted lists result_ids = torch.cat((guaranteed_sorted_ids, left_sorted_ids)) @@ -263,17 +272,17 @@ def get_closest( # self.residuals_per_level.shape = total_items, K + 1, embedding_dim guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len - guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ - :, -(inner_level + 1) - ] # guaranteed_len x embedding_dim + guaranteed_stored_residuals = self.projector( + self.residuals_per_level[guaranteed][:, -(inner_level + 1)].to(DEVICE) + ) # guaranteed_len x embedding_dim guaranteed_query_residual = query_residual_per_level[ -(inner_level + 1) ] # embedding_dim left_raw_item_ids = self.raw_item_ids[left] # left_len - left_stored_residuals = self.residuals_per_level[left][ - :, -outer_level - ] # left_len x embedding_dim + left_stored_residuals = self.projector( + self.residuals_per_level[left][:, -outer_level].to(DEVICE) + ) # left_len x embedding_dim left_query_residual = query_residual_per_level[ -outer_level ] # embedding_dim @@ -332,8 +341,10 @@ def query( assert (inner_masks <= outer_masks).all() + projected_embedding_table = self.projector(self.embedding_table) + query_residuals_per_level = self.get_residuals_per_level( - semantic_ids, residuals + projected_embedding_table, semantic_ids, residuals ) raw_item_ids = self.get_closest( From 5943aa5a9bb5f507070ed1ec06d293b25113458b Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 13 Feb 2025 22:16:35 +0700 Subject: [PATCH 067/175] fix if inner tree is empty --- modeling/rqvae_utils/trie.py | 51 ++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 308d999a..655f53f3 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -197,7 +197,15 @@ def get_outer_inner_levels(self, semantic_ids: torch.Tensor, items_to_query: int assert (outer_level <= K).all() - return num_items, outer_level, inner_level # bs, bs + return num_items, outer_level, inner_level # bs x K + 1, bs, bs + + def get_sorted_ids(self, stored_residuals, query_residual, raw_item_ids): + scores = torch.matmul(stored_residuals, query_residual) # (guaranteed_len,) + # Sort guaranteed items by score (descending) + sorted_indices = torch.argsort(scores, descending=True) + sorted_ids = raw_item_ids[sorted_indices.to(raw_item_ids.device)] + + return sorted_ids def get_closest_single( self, @@ -208,26 +216,18 @@ def get_closest_single( left_stored_residuals, # left_len x embedding_dim left_query_residual, # embedding_dim ): - guaranteed_scores = torch.matmul( - guaranteed_stored_residuals, guaranteed_query_residual - ) # (guaranteed_len,) - - # Compute scores for left items - left_scores = torch.matmul( - left_stored_residuals, left_query_residual - ) # (left_len,) - - # Sort guaranteed items by score (descending) - guaranteed_sorted_indices = torch.argsort(guaranteed_scores, descending=True) - guaranteed_sorted_ids = guaranteed_raw_item_ids[ - guaranteed_sorted_indices.to(guaranteed_raw_item_ids.device) - ] + if guaranteed_raw_item_ids.shape[0] == 0: + guaranteed_sorted_ids = torch.tensor([]) + else: + guaranteed_sorted_ids = self.get_sorted_ids( + guaranteed_stored_residuals, + guaranteed_query_residual, + guaranteed_raw_item_ids, + ) - # Sort left items by score (descending) - left_sorted_indices = torch.argsort(left_scores, descending=True) - left_sorted_ids = left_raw_item_ids[ - left_sorted_indices.to(left_raw_item_ids.device) - ] + left_sorted_ids = self.get_sorted_ids( + left_stored_residuals, left_query_residual, left_raw_item_ids + ) # Concatenate the sorted lists result_ids = torch.cat((guaranteed_sorted_ids, left_sorted_ids)) @@ -309,13 +309,17 @@ def query( num_items, outer_levels, inner_levels = self.get_outer_inner_levels( semantic_ids, items_to_query - ) # bs, bs + ) # bs x K + 1, bs, bs + + # print(num_items.shape, outer_levels.shape, inner_levels.shape) + # print(num_items, outer_levels, inner_levels) taken_outer_prefixes = semantic_ids * ( torch.arange(K).expand(bs, K) < outer_levels.unsqueeze(1) ) taken_inner_prefixes = semantic_ids * ( - torch.arange(K).expand(bs, K) < inner_levels.unsqueeze(1) + torch.arange(K).expand(bs, K) < inner_levels + .unsqueeze(1) ) outer_masks = self.get_mask_by_prefix( @@ -325,6 +329,9 @@ def query( taken_inner_prefixes, inner_levels ) # bs, total_items + # print(inner_masks.shape, outer_masks.shape) + # print(inner_masks, outer_masks) + inner_levels_max_mask = inner_levels == self.K + 1 inner_levels[inner_levels_max_mask] = self.K inner_masks[inner_levels_max_mask] = outer_masks[inner_levels_max_mask] From 11937a3148c3fd10d2acbeeb890826a7b41a46ec Mon Sep 17 00:00:00 2001 From: peterochek Date: Thu, 13 Feb 2025 22:43:12 +0700 Subject: [PATCH 068/175] use int in infer after training (why?) --- modeling/models/tiger.py | 4 ++-- modeling/rqvae_utils/trie.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 41ad2479..9a8611cf 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -86,7 +86,7 @@ def __init__( self._projector = nn.Linear(item_id_to_text_embedding.shape[1], embedding_dim) - item_ids = torch.tensor(list(range(1, len(item_id_to_semantic_id) + 1))) + item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) @@ -95,7 +95,7 @@ def __init__( self._trie.build_tree_structure( item_id_to_semantic_id, item_id_to_residual, - torch.arange(1, len(item_id_to_semantic_id) + 1), + item_ids, ) self._bos_token_id = codebook_sizes[0] diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 655f53f3..20338fff 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -298,7 +298,7 @@ def get_closest( raw_item_ids.append(result_ids[:items_to_query]) - return torch.stack(raw_item_ids) + return torch.stack(raw_item_ids).int() # TODO def query( self, semantic_ids: torch.Tensor, residuals: torch.Tensor, items_to_query: int From 032b5baea9569c75a936ac42680b850a7ac84e3f Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:07:49 +0300 Subject: [PATCH 069/175] add sasrec for last --- configs/train/sasrec_train_config.json | 5 +- .../train/sasrec_train_config_last_pred.json | 168 ++++++++++++++++++ 2 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 configs/train/sasrec_train_config_last_pred.json diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 44079ace..de95097b 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -1,14 +1,13 @@ { "experiment_name": "sasrec_beauty", "best_metric": "validation/ndcg@20", - "train_epochs_num": 100, "dataset": { "type": "sequence", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "last_item_prediction", + "type": "next_item_prediction", "negative_sampler_type": "random" } }, @@ -165,4 +164,4 @@ } ] } -} +} \ No newline at end of file diff --git a/configs/train/sasrec_train_config_last_pred.json b/configs/train/sasrec_train_config_last_pred.json new file mode 100644 index 00000000..6326dc96 --- /dev/null +++ b/configs/train/sasrec_train_config_last_pred.json @@ -0,0 +1,168 @@ +{ + "experiment_name": "sasrec_beauty_last", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, + "dataset": { + "type": "sequence", + "path_to_data_dir": "../data", + "name": "Beauty", + "max_sequence_length": 50, + "samplers": { + "type": "last_item_prediction", + "negative_sampler_type": "random" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "sasrec", + "sequence_prefix": "item", + "positive_prefix": "positive", + "negative_prefix": "negative", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "sasrec", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", + "output_prefix": "downstream_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 64, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } +} From 31449be362b5ad22177556491d6e923865fcbdb5 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:10:32 +0300 Subject: [PATCH 070/175] fix for last --- configs/train/sasrec_train_config_last_pred.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_train_config_last_pred.json b/configs/train/sasrec_train_config_last_pred.json index 6326dc96..def78931 100644 --- a/configs/train/sasrec_train_config_last_pred.json +++ b/configs/train/sasrec_train_config_last_pred.json @@ -35,7 +35,7 @@ "model": { "type": "sasrec", "sequence_prefix": "item", - "positive_prefix": "positive", + "positive_prefix": "labels", "negative_prefix": "negative", "candidate_prefix": "candidates", "embedding_dim": 64, @@ -165,4 +165,4 @@ } ] } -} +} \ No newline at end of file From e40c8ae58f93052a6032509aff571360baaf9600 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:12:16 +0300 Subject: [PATCH 071/175] return to next_item_pred for sasrec --- configs/train/sasrec_freezed_train_config.json | 2 +- configs/train/sasrec_train_config.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 5f383018..7d9d557d 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "last_item_prediction", + "type": "next_item_prediction", "negative_sampler_type": "random" } }, diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index de95097b..f1711326 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -1,6 +1,7 @@ { "experiment_name": "sasrec_beauty", "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, "dataset": { "type": "sequence", "path_to_data_dir": "../data", From 01370469da5355470ad6d2323906f194e2b6fa3d Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:12:50 +0300 Subject: [PATCH 072/175] remove last_pred sasrec --- .../train/sasrec_train_config_last_pred.json | 168 ------------------ 1 file changed, 168 deletions(-) delete mode 100644 configs/train/sasrec_train_config_last_pred.json diff --git a/configs/train/sasrec_train_config_last_pred.json b/configs/train/sasrec_train_config_last_pred.json deleted file mode 100644 index def78931..00000000 --- a/configs/train/sasrec_train_config_last_pred.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "experiment_name": "sasrec_beauty_last", - "best_metric": "validation/ndcg@20", - "train_epochs_num": 100, - "dataset": { - "type": "sequence", - "path_to_data_dir": "../data", - "name": "Beauty", - "max_sequence_length": 50, - "samplers": { - "type": "last_item_prediction", - "negative_sampler_type": "random" - } - }, - "dataloader": { - "train": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": true, - "shuffle": true - }, - "validation": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": false, - "shuffle": false - } - }, - "model": { - "type": "sasrec", - "sequence_prefix": "item", - "positive_prefix": "labels", - "negative_prefix": "negative", - "candidate_prefix": "candidates", - "embedding_dim": 64, - "num_heads": 2, - "num_layers": 2, - "dim_feedforward": 256, - "dropout": 0.3, - "activation": "gelu", - "layer_norm_eps": 1e-9, - "initializer_range": 0.02 - }, - "optimizer": { - "type": "basic", - "optimizer": { - "type": "adam", - "lr": 0.001 - }, - "clip_grad_threshold": 5.0 - }, - "loss": { - "type": "composite", - "losses": [ - { - "type": "sasrec", - "positive_prefix": "positive_scores", - "negative_prefix": "negative_scores", - "output_prefix": "downstream_loss" - } - ], - "output_prefix": "loss" - }, - "callback": { - "type": "composite", - "callbacks": [ - { - "type": "metric", - "on_step": 1, - "loss_prefix": "loss" - }, - { - "type": "validation", - "on_step": 64, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - }, - { - "type": "eval", - "on_step": 256, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - } - ] - } -} \ No newline at end of file From c25e49da3f89cbe7436cc9d293932f83905d7014 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:16:15 +0300 Subject: [PATCH 073/175] fix for sasrec weight only --- modeling/models/sasrec_freezed.py | 147 ++++++++++++++++-------------- 1 file changed, 77 insertions(+), 70 deletions(-) diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index c6fab7f6..5d9eff91 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -1,25 +1,23 @@ +import torch from models import SequentialTorchModel from utils import create_masked_tensor -import torch - - -class SasRecFreezedModel(SequentialTorchModel, config_name='sasrec_freezed'): +class SasRecFreezedModel(SequentialTorchModel, config_name="sasrec_freezed"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -31,127 +29,136 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._init_weights(initializer_range) - - df = torch.load('../data/Beauty/data_full.pt') + + df = torch.load("../data/Beauty/data_full.pt", weights_only=False) precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) - - self._projector = torch.nn.Linear(precomputed_embeddings.shape[1], embedding_dim) - + + self._projector = torch.nn.Linear( + precomputed_embeddings.shape[1], embedding_dim + ) + padding_embedding = torch.nn.init.trunc_normal_( torch.zeros(1, precomputed_embeddings.shape[1]), std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range + b=2 * initializer_range, ) mask_embedding = torch.nn.init.trunc_normal_( torch.zeros(1, precomputed_embeddings.shape[1]), std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range + b=2 * initializer_range, ) - - extended_embeddings = torch.cat([padding_embedding, precomputed_embeddings, mask_embedding], dim=0) # Shape: (num_items + 2, embedding_dim) - + + extended_embeddings = torch.cat( + [padding_embedding, precomputed_embeddings, mask_embedding], dim=0 + ) # Shape: (num_items + 2, embedding_dim) + self._item_embeddings = torch.nn.Embedding( - num_embeddings=num_items + 2, - embedding_dim=precomputed_embeddings.shape[1] + num_embeddings=num_items + 2, embedding_dim=precomputed_embeddings.shape[1] ) - + # TODO ask about freezed masked & padding tokens - + self._item_embeddings.weight.data.copy_(extended_embeddings) self._item_embeddings.weight.requires_grad = False @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) - - def get_item_embeddings(self, events): # TODO refactor (single projection) + + def get_item_embeddings(self, events): # TODO refactor (single projection) return self._projector(self._item_embeddings(events)) - + def get_last_item_embeddings(self): return self._projector(self._item_embeddings.weight) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) if self.training: # training mode - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + all_sample_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) - all_embeddings = self.get_last_item_embeddings() # (num_items + 2, embedding_dim) + all_embeddings = ( + self.get_last_item_embeddings() + ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( - 'ad,nd->an', - all_sample_embeddings, - all_embeddings + "ad,nd->an", all_sample_embeddings, all_embeddings ) # (all_batch_events, num_items + 2) positive_scores = torch.gather( - input=all_scores, - dim=1, - index=all_positive_sample_events[..., None] + input=all_scores, dim=1, index=all_positive_sample_events[..., None] ) # (all_batch_items, 1) sample_ids, _ = create_masked_tensor( - data=all_sample_events, - lengths=all_sample_lengths + data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - sample_ids = torch.repeat_interleave(sample_ids, all_sample_lengths, dim=0) # (all_batch_events, seq_len) + sample_ids = torch.repeat_interleave( + sample_ids, all_sample_lengths, dim=0 + ) # (all_batch_events, seq_len) negative_scores = torch.scatter( input=all_scores, dim=1, index=sample_ids, - src=torch.ones_like(sample_ids) * (-torch.inf) + src=torch.ones_like(sample_ids) * (-torch.inf), ) # (all_batch_events, num_items + 2) negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx + negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx return { - 'positive_scores': positive_scores, - 'negative_scores': negative_scores + "positive_scores": positive_scores, + "negative_scores": negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self.get_last_item_embeddings() + "bd,nd->bn", last_embeddings, self.get_last_item_embeddings() ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id - candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id + candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices From b62e11d0100cced203f42b3c97d2206d1b56e5ec Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:28:14 +0300 Subject: [PATCH 074/175] fix trie device --- modeling/models/tiger.py | 4 ++-- modeling/rqvae_utils/trie.py | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 9a8611cf..75eb944a 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -343,7 +343,7 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): return semantic_ids, tgt_embeddings - def get_item_embeddings(self, events): # TODO freezed embeddings + def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim @@ -352,7 +352,7 @@ def get_item_embeddings(self, events): # TODO freezed embeddings len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim ) - def get_init_item_embeddings(self, events): # TODO freezed embeddings + def get_init_item_embeddings(self, events): # convert to semantic ids semantic_ids = self._item_id_to_semantic_id[ events - 1 diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 20338fff..5e297438 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -43,9 +43,9 @@ def unique_with_index(self, x, dim=None): return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) def compute_keys(self, semantic_ids: torch.Tensor): - exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) + exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64, device=DEVICE) base = self.rqvae_model.codebook_sizes[0] ** exponents - uniq_ids = semantic_ids.to("cpu") @ base # TODO fix device + uniq_ids = semantic_ids @ base return uniq_ids def pad_semantic_ids(self, semantic_ids: torch.Tensor): @@ -298,7 +298,7 @@ def get_closest( raw_item_ids.append(result_ids[:items_to_query]) - return torch.stack(raw_item_ids).int() # TODO + return torch.stack(raw_item_ids).int() # TODO def query( self, semantic_ids: torch.Tensor, residuals: torch.Tensor, items_to_query: int @@ -318,8 +318,7 @@ def query( torch.arange(K).expand(bs, K) < outer_levels.unsqueeze(1) ) taken_inner_prefixes = semantic_ids * ( - torch.arange(K).expand(bs, K) < inner_levels - .unsqueeze(1) + torch.arange(K).expand(bs, K) < inner_levels.unsqueeze(1) ) outer_masks = self.get_mask_by_prefix( From a70fc7834c94c45c12212f394e04c4026e18c4ce Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:28:54 +0300 Subject: [PATCH 075/175] fix tiger weights only --- modeling/models/tiger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 75eb944a..2ed9e58f 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -135,7 +135,7 @@ def init_rqvae(cls, config) -> RqVaeModel: @classmethod def create_from_config(cls, config, **kwargs): rqvae_model = cls.init_rqvae(config) - embs_extractor = torch.load(config["embs_extractor_path"]) + embs_extractor = torch.load(config["embs_extractor_path"], weights_only=False) embs_extractor = embs_extractor.sort_index() From e21e5170baf4e1202c54edbc2929b58dddce771a Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 10:29:36 +0300 Subject: [PATCH 076/175] revert trie device --- modeling/rqvae_utils/trie.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 5e297438..f16412d3 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -2,8 +2,8 @@ import time import torch -from utils import DEVICE from models.rqvae import RqVaeModel +from utils import DEVICE class Trie: @@ -43,9 +43,9 @@ def unique_with_index(self, x, dim=None): return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) def compute_keys(self, semantic_ids: torch.Tensor): - exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64, device=DEVICE) + exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) base = self.rqvae_model.codebook_sizes[0] ** exponents - uniq_ids = semantic_ids @ base + uniq_ids = semantic_ids.to("cpu") @ base return uniq_ids def pad_semantic_ids(self, semantic_ids: torch.Tensor): From 6c69111997cdb873bb16fe091c4932cd3c65005e Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 14 Feb 2025 12:50:49 +0300 Subject: [PATCH 077/175] return collion solver --- configs/train/tiger_train_config.json | 7 +++++++ modeling/models/tiger.py | 10 ++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index fd80a1c0..672591d0 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -68,6 +68,13 @@ "labels": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" + }, + { + "type": "sample_logsoftmax", + "predictions_prefix": "dedup.logits", + "labels": "dedup.labels", + "weight": 1.0, + "output_prefix": "dedup_loss" } ], "output_prefix": "loss" diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 2ed9e58f..2eefb4f7 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -221,14 +221,16 @@ def forward(self, inputs): ] # len(events), len(codebook_sizes) true_residuals = self._item_id_to_residual[label_events - 1] - # true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) - # pred_info = self._solver.get_pred_scores( - # semantic_ids, decoder_output_residual - # ) TODO shapes don't match (solver init with 512, here 64) + true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) + pred_info = self._solver.get_pred_scores( + semantic_ids, decoder_output_residual + ) return { "logits": decoder_prefix_scores, "semantic.labels": semantic_ids, + "dedup.logits": pred_info["pred_scores"], + "dedup.labels": true_info["true_dedup_tokens"], } else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( From 0ad40461e3eb9741c6b02d4075f692b0d9218841 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 13:37:08 +0300 Subject: [PATCH 078/175] add todos & remove projector --- configs/train/rqvae_train_config.json | 1 + modeling/models/rqvae.py | 2 +- modeling/models/sasrec.py | 4 ++++ modeling/models/tiger.py | 20 ++++++++------------ modeling/rqvae_utils/trie.py | 24 ++++++++++-------------- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index ee6ef333..5531c552 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -32,6 +32,7 @@ "model": { "type": "rqvae", "embedding_dim": 512, + "hidden_dim": 64, "n_iter": 100, "codebook_sizes": [256, 256, 256], "should_init_codebooks": true, diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index cfdb0574..e8362665 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -57,7 +57,7 @@ def create_from_config(cls, config, **kwargs): return cls( train_sampler=kwargs.get('train_sampler'), input_dim=config['embedding_dim'], - hidden_dim=config['embedding_dim'], + hidden_dim=config['hidden_dim'], n_iter=config['n_iter'], codebook_sizes=config['codebook_sizes'], should_init_codebooks=config.get('should_init_codebooks', False), diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index cd36b544..bc0dbbcd 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -65,6 +65,10 @@ def forward(self, inputs): all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + # TODO last item for each event in batch + # TODO compare rqvae embs and textual + # TODO 4 embs (codebook vectors + residuals) for item intoo sasrec + positional embeddings + # rqvae EmbedingDim = TransformerEmbeddingDim all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 2eefb4f7..c1030a44 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -84,13 +84,11 @@ def __init__( self._item_id_to_residual = item_id_to_residual self._item_id_to_text_embedding = item_id_to_text_embedding - self._projector = nn.Linear(item_id_to_text_embedding.shape[1], embedding_dim) - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = Trie(rqvae_model, self._projector) + self._trie = Trie(rqvae_model) self._trie.build_tree_structure( item_id_to_semantic_id, @@ -206,12 +204,10 @@ def forward(self, inputs): tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask ) # (batch_size, label_len, embedding_dim) - projected_stacked = self._projector(self._codebook_item_embeddings_stacked) - decoder_prefix_scores = torch.einsum( "bsd,scd->bsc", decoder_outputs[:, :-1, :], - projected_stacked, + self._codebook_item_embeddings_stacked, ) decoder_output_residual = decoder_outputs[:, -1, :] @@ -322,10 +318,10 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): :, -1, : ] # batch_size x embedding_dim - projected = self._projector(self._codebook_item_embeddings_stacked) - if step < len(self._codebook_sizes): - codebook = projected[step] # len(codebook_sizes) x embedding_dim + codebook = self._codebook_item_embeddings_stacked[ + step + ] # len(codebook_sizes) x embedding_dim closest_semantic_ids = torch.argmax( torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 ) # batch_size x 1 @@ -349,7 +345,6 @@ def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - embs = self._projector(embs) return embs.view( len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim ) @@ -372,8 +367,9 @@ def get_init_item_embeddings(self, events): semantic_embeddings = torch.stack(result) # get residuals - text_embeddings = self._item_id_to_text_embedding[events - 1] - residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = self._item_id_to_residual[events - 1] + # text_embeddings = self._item_id_to_text_embedding[events - 1] + # residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) # get true item embeddings diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index f16412d3..78a91117 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -7,7 +7,7 @@ class Trie: - def __init__(self, rqvae_model: RqVaeModel, projector: torch.nn.Linear): + def __init__(self, rqvae_model: RqVaeModel): self.rqvae_model = rqvae_model self.keys = None self.prefix_counts = None @@ -18,7 +18,6 @@ def __init__(self, rqvae_model: RqVaeModel, projector: torch.nn.Linear): self.embedding_table = torch.stack( [cb for cb in self.rqvae_model.codebooks] ) # K x codebook_size x embedding_dim - self.projector = projector def unique_with_index(self, x, dim=None): """Unique elements of x and indices of those unique elements @@ -90,7 +89,7 @@ def build_tree_structure( prefix_counts[:, i + 1] = current_level_same residuals_per_level = self.get_residuals_per_level( - self.embedding_table.to(residuals.device), semantic_ids, residuals + semantic_ids, residuals ) # total_items x K + 1 x embedding_dim keys = self.compute_keys(semantic_ids) # bs, could be collisions @@ -103,21 +102,20 @@ def build_tree_structure( def get_residuals_per_level( self, - embedding_table: torch.Tensor, semantic_ids: torch.Tensor, residuals: torch.Tensor, ): bs = semantic_ids.shape[0] embedding_dim = residuals.shape[1] residuals_per_level = torch.zeros( - bs, self.K + 1, embedding_dim, device=embedding_table.device + bs, self.K + 1, embedding_dim, device=self.embedding_table.device ) # bs x K + 1 x embedding_dim # TODO think if reverse is needed here # i = 3, 2, 1, 0 for i in range(self.K - 1, -1, -1): indices_at_level = semantic_ids[:, i] # bs - embeddings_at_level = embedding_table[ + embeddings_at_level = self.embedding_table[ i, indices_at_level ] # bs x embedding_dim # 1 2 3 4 @@ -272,16 +270,16 @@ def get_closest( # self.residuals_per_level.shape = total_items, K + 1, embedding_dim guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len - guaranteed_stored_residuals = self.projector( - self.residuals_per_level[guaranteed][:, -(inner_level + 1)].to(DEVICE) - ) # guaranteed_len x embedding_dim + guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ + :, -(inner_level + 1) + ].to(DEVICE) # guaranteed_len x embedding_dim guaranteed_query_residual = query_residual_per_level[ -(inner_level + 1) ] # embedding_dim left_raw_item_ids = self.raw_item_ids[left] # left_len - left_stored_residuals = self.projector( - self.residuals_per_level[left][:, -outer_level].to(DEVICE) + left_stored_residuals = self.residuals_per_level[left][:, -outer_level].to( + DEVICE ) # left_len x embedding_dim left_query_residual = query_residual_per_level[ -outer_level @@ -347,10 +345,8 @@ def query( assert (inner_masks <= outer_masks).all() - projected_embedding_table = self.projector(self.embedding_table) - query_residuals_per_level = self.get_residuals_per_level( - projected_embedding_table, semantic_ids, residuals + semantic_ids, residuals ) raw_item_ids = self.get_closest( From 8c07876bc8508360250409d9f8530c5de069571a Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 13:42:17 +0300 Subject: [PATCH 079/175] gpu --- modeling/models/rqvae.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index e8362665..7e150421 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -84,7 +84,7 @@ def init_codebooks(self, embeddings): d=embeddings_np.shape[1], k=n_clusters, niter=self.n_iter, - gpu=torch.cuda.is_available(), + gpu=1, ) kmeans.train(embeddings_np) From 30ce91c7030e1f5f8ef3b2dfccce5cf0e853fd9c Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 13:47:34 +0300 Subject: [PATCH 080/175] move trie --- modeling/models/tiger.py | 2 +- modeling/rqvae_utils/trie.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index c1030a44..49a83c33 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -237,7 +237,7 @@ def forward(self, inputs): semantic_ids = semantic_ids.to(torch.int64) item_ids = self._trie.query( - semantic_ids.to("cpu"), residuals.to("cpu"), items_to_query=20 + semantic_ids, residuals, items_to_query=20 ) return item_ids diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 78a91117..6168d305 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -44,7 +44,7 @@ def unique_with_index(self, x, dim=None): def compute_keys(self, semantic_ids: torch.Tensor): exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) base = self.rqvae_model.codebook_sizes[0] ** exponents - uniq_ids = semantic_ids.to("cpu") @ base + uniq_ids = semantic_ids @ base.to(DEVICE) return uniq_ids def pad_semantic_ids(self, semantic_ids: torch.Tensor): From 9591183295f3ccb4bc15e9570dcefae3f2cd6bde Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 13:49:09 +0300 Subject: [PATCH 081/175] debug --- modeling/rqvae_utils/trie.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 6168d305..f197c835 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -44,6 +44,8 @@ def unique_with_index(self, x, dim=None): def compute_keys(self, semantic_ids: torch.Tensor): exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) base = self.rqvae_model.codebook_sizes[0] ** exponents + print(semantic_ids.device) + print(base.device) uniq_ids = semantic_ids @ base.to(DEVICE) return uniq_ids From 640dadae382d731050d485c3c424c24b474cd123 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 14:58:46 +0300 Subject: [PATCH 082/175] fix for sasrec last_item --- configs/train/sasrec_freezed_train_config.json | 4 ++-- configs/train/sasrec_train_config.json | 4 ++-- modeling/models/sasrec.py | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 7d9d557d..00f9d7ef 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, @@ -35,7 +35,7 @@ "model": { "type": "sasrec_freezed", "sequence_prefix": "item", - "positive_prefix": "positive", + "positive_prefix": "labels", "negative_prefix": "negative", "candidate_prefix": "candidates", "embedding_dim": 64, diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index f1711326..2c12a4e3 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -8,7 +8,7 @@ "name": "Beauty", "max_sequence_length": 50, "samplers": { - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, @@ -35,7 +35,7 @@ "model": { "type": "sasrec", "sequence_prefix": "item", - "positive_prefix": "positive", + "positive_prefix": "labels", "negative_prefix": "negative", "candidate_prefix": "candidates", "embedding_dim": 64, diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index bc0dbbcd..fbfbc02d 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -101,9 +101,11 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx + last_item_mask = torch.cumsum(mask.sum(dim=1), dim=0) - 1 # TODO ask if correct (mask, last True in eahch row, index as only Trues appeared) + return { 'positive_scores': positive_scores, - 'negative_scores': negative_scores + 'negative_scores': negative_scores[last_item_mask] } else: # eval mode last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) From b461af9b4dd1b49ba5f04d0bf95ad985345c43d8 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Feb 2025 15:13:36 +0300 Subject: [PATCH 083/175] move trie to device --- modeling/models/tiger.py | 6 +++--- modeling/rqvae_utils/trie.py | 28 +++++++++++++--------------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 49a83c33..8e1ae9ff 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -91,9 +91,9 @@ def __init__( self._trie = Trie(rqvae_model) self._trie.build_tree_structure( - item_id_to_semantic_id, - item_id_to_residual, - item_ids, + item_id_to_semantic_id.to(DEVICE), + item_id_to_residual.to(DEVICE), + item_ids.to(DEVICE), ) self._bos_token_id = codebook_sizes[0] diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index f197c835..89833c91 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -42,12 +42,10 @@ def unique_with_index(self, x, dim=None): return unique, inverse.new_empty(unique.size(0)).scatter_(0, inverse, perm) def compute_keys(self, semantic_ids: torch.Tensor): - exponents = torch.arange(self.K - 1, -1, -1, dtype=torch.int64) + exponents = torch.arange(self.K - 1, -1, -1, device=DEVICE).float() base = self.rqvae_model.codebook_sizes[0] ** exponents - print(semantic_ids.device) - print(base.device) - uniq_ids = semantic_ids @ base.to(DEVICE) - return uniq_ids + uniq_ids = semantic_ids.float() @ base + return uniq_ids.int() def pad_semantic_ids(self, semantic_ids: torch.Tensor): return torch.cat( @@ -57,7 +55,8 @@ def pad_semantic_ids(self, semantic_ids: torch.Tensor): semantic_ids.shape[0], self.K - semantic_ids.shape[1], dtype=semantic_ids.dtype, - ).to(semantic_ids.device), + device=semantic_ids.device, + ), ], dim=1, ) @@ -163,7 +162,7 @@ def get_mask_by_prefix(self, prefixes: torch.Tensor, taken_lens: torch.Tensor): def process_prefixes(self, prefixes: torch.Tensor): bs, prefix_len = prefixes.shape - taken_len = torch.full((bs,), prefix_len) + taken_len = torch.full((bs,), prefix_len, device=DEVICE) mask = self.get_mask_by_prefix(prefixes, taken_len) # self.keys.unsqueeze(0) = 1 x bs # lower_key.unsqueeze(1), upper_key.unsqueeze(1) = bs x 1 @@ -180,6 +179,7 @@ def get_outer_inner_levels(self, semantic_ids: torch.Tensor, items_to_query: int torch.full( (bs, 1), self.total_items, + device=DEVICE, ), num_items, ], @@ -203,7 +203,7 @@ def get_sorted_ids(self, stored_residuals, query_residual, raw_item_ids): scores = torch.matmul(stored_residuals, query_residual) # (guaranteed_len,) # Sort guaranteed items by score (descending) sorted_indices = torch.argsort(scores, descending=True) - sorted_ids = raw_item_ids[sorted_indices.to(raw_item_ids.device)] + sorted_ids = raw_item_ids[sorted_indices] return sorted_ids @@ -217,7 +217,7 @@ def get_closest_single( left_query_residual, # embedding_dim ): if guaranteed_raw_item_ids.shape[0] == 0: - guaranteed_sorted_ids = torch.tensor([]) + guaranteed_sorted_ids = torch.tensor([], device=DEVICE) else: guaranteed_sorted_ids = self.get_sorted_ids( guaranteed_stored_residuals, @@ -274,15 +274,13 @@ def get_closest( guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ :, -(inner_level + 1) - ].to(DEVICE) # guaranteed_len x embedding_dim + ] # guaranteed_len x embedding_dim guaranteed_query_residual = query_residual_per_level[ -(inner_level + 1) ] # embedding_dim left_raw_item_ids = self.raw_item_ids[left] # left_len - left_stored_residuals = self.residuals_per_level[left][:, -outer_level].to( - DEVICE - ) # left_len x embedding_dim + left_stored_residuals = self.residuals_per_level[left][:, -outer_level] # left_len x embedding_dim left_query_residual = query_residual_per_level[ -outer_level ] # embedding_dim @@ -315,10 +313,10 @@ def query( # print(num_items, outer_levels, inner_levels) taken_outer_prefixes = semantic_ids * ( - torch.arange(K).expand(bs, K) < outer_levels.unsqueeze(1) + torch.arange(K, device=DEVICE).expand(bs, K) < outer_levels.unsqueeze(1) ) taken_inner_prefixes = semantic_ids * ( - torch.arange(K).expand(bs, K) < inner_levels.unsqueeze(1) + torch.arange(K, device=DEVICE).expand(bs, K) < inner_levels.unsqueeze(1) ) outer_masks = self.get_mask_by_prefix( From e31a976b563526ac286fcd64f0953da1032a9a95 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 12:28:01 +0300 Subject: [PATCH 084/175] add sequence full dataset --- .../train/sasrec_freezed_train_config.json | 2 +- configs/train/sasrec_train_config.json | 2 +- configs/train/tiger_train_config.json | 2 +- modeling/dataset/base.py | 119 ++++++++++++++++++ 4 files changed, 122 insertions(+), 3 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 00f9d7ef..a53ddf0b 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -3,7 +3,7 @@ "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 2c12a4e3..8c64df89 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -3,7 +3,7 @@ "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 672591d0..2d3369c5 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -3,7 +3,7 @@ "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 1cb01562..e375f6ac 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -196,7 +196,126 @@ def meta(self): 'num_items': self.num_items, 'max_sequence_length': self.max_sequence_length } + + +class SequenceFullDataset(SequenceDataset, config_name='sequence_full'): + @classmethod + def create_from_config(cls, config, **kwargs): + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='train', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) + ) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='valid', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) + ) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='test', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) + ) + + max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) + max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) + max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_seq_len)) + + train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample + valid_interactions = len(validation_dataset) # each new interaction as a sample + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info('{} dataset sparsity: {}'.format( + config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id + )) + + train_sampler = TrainSampler.create_from_config( + config['samplers'], + dataset=train_dataset, + num_users=max_user_id, + num_items=max_item_id + ) + validation_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=validation_dataset, + num_users=max_user_id, + num_items=max_item_id + ) + test_sampler = EvalSampler.create_from_config( + config['samplers'], + dataset=test_dataset, + num_users=max_user_id, + num_items=max_item_id + ) + + return cls( + train_sampler=train_sampler, + validation_sampler=validation_sampler, + test_sampler=test_sampler, + num_users=max_user_id, + num_items=max_item_id, + max_sequence_length=max_seq_len + ) + + @classmethod + def flatten_item_sequence(cls, item_ids): + min_history_length = 3 # TODO: make this configurable + histories = [] + for i in range(min_history_length-1, len(item_ids)): + histories.append(item_ids[:i+1]) + return histories + + @classmethod + def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): + max_user_id = 0 + max_item_id = 0 + max_sequence_len = 0 + + if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): + logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) + else: + logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') + logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') + + dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) + with open(dataset_path, 'r') as f: + data = f.readlines() + + sequence_info = cls._create_sequences(data, max_sequence_length) + user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info + + dataset = [] + for user_id, item_ids in zip(user_sequences, item_sequences): + flattened_item_ids = cls.flatten_item_sequence(item_ids) + for seq in flattened_item_ids: + dataset.append({ + 'user.ids': [user_id], 'user.length': 1, + 'item.ids': seq, 'item.length': len(seq) + }) + + logger.info('{} dataset size: {}'.format(part, len(dataset))) + logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) + + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: + pickle.dump( + (dataset, max_user_id, max_item_id, max_sequence_len), + dataset_file + ) + + return dataset, max_user_id, max_item_id, max_sequence_len class GraphDataset(BaseDataset, config_name='graph'): From a30432f94852ebf4195147872999055deb64915a Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 12:39:35 +0300 Subject: [PATCH 085/175] sasrec semantic --- modeling/models/sasrec.py | 4 - modeling/models/sasrec_semantic.py | 124 +++++++++++++++++++++++++++++ modeling/models/tiger.py | 6 +- 3 files changed, 125 insertions(+), 9 deletions(-) create mode 100644 modeling/models/sasrec_semantic.py diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index fbfbc02d..e94e95fb 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -65,10 +65,6 @@ def forward(self, inputs): all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) - # TODO last item for each event in batch - # TODO compare rqvae embs and textual - # TODO 4 embs (codebook vectors + residuals) for item intoo sasrec + positional embeddings - # rqvae EmbedingDim = TransformerEmbeddingDim all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py new file mode 100644 index 00000000..7c9a16d2 --- /dev/null +++ b/modeling/models/sasrec_semantic.py @@ -0,0 +1,124 @@ +import torch +from models import SequentialTorchModel +from utils import create_masked_tensor + + +class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): + def __init__( + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True + ) + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + + self._init_weights(initializer_range) + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + ) + + def forward(self, inputs): + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + + all_sample_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) + + all_embeddings = ( + self.get_last_item_embeddings() + ) # (num_items + 2, embedding_dim) + + # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim + all_scores = torch.einsum( + "ad,nd->an", all_sample_embeddings, all_embeddings + ) # (all_batch_events, num_items + 2) + + positive_scores = torch.gather( + input=all_scores, dim=1, index=all_positive_sample_events[..., None] + ) # (all_batch_items, 1) + + sample_ids, _ = create_masked_tensor( + data=all_sample_events, lengths=all_sample_lengths + ) # (batch_size, seq_len) + + sample_ids = torch.repeat_interleave( + sample_ids, all_sample_lengths, dim=0 + ) # (all_batch_events, seq_len) + + negative_scores = torch.scatter( + input=all_scores, + dim=1, + index=sample_ids, + src=torch.ones_like(sample_ids) * (-torch.inf), + ) # (all_batch_events, num_items + 2) + negative_scores[:, 0] = -torch.inf # Padding idx + negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx + + return { + "positive_scores": positive_scores, + "negative_scores": negative_scores, + } + else: # eval mode + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + "bd,nd->bn", last_embeddings, self.get_last_item_embeddings() + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf # Padding id + candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id + + _, indices = torch.topk( + candidate_scores, k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 8e1ae9ff..09902184 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -391,8 +391,6 @@ def position_lambda(x): lengths, mask, position_lambda, self._position_embeddings ) - # print(f"{position_embeddings.isnan().any()=}") # TODO fix NaN in pos_embs - def codebook_lambda(x): x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 @@ -403,8 +401,6 @@ def codebook_lambda(x): lengths, mask, codebook_lambda, self._codebook_embeddings ) - # print(f"{codebook_embeddings.isnan().any()=}") # TODO fix NaN in pos_embs - return position_embeddings + codebook_embeddings def _decoder_pos_embeddings(self, lengths, mask): @@ -444,7 +440,7 @@ def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_lay position_embeddings = embedding_layer( positions ) # (all_batch_events, embedding_dim) - # print(f"{position_embeddings.isnan().any()=}") # TODO without embeddings also NaN + position_embeddings, _ = create_masked_tensor( data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) From 5da9423cf3975b6095cbc6d92ef14007e737c8fc Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 12:51:57 +0300 Subject: [PATCH 086/175] fix sasrec --- modeling/models/sasrec.py | 4 +--- modeling/models/sasrec_freezed.py | 20 +++++++++------- modeling/models/sasrec_semantic.py | 38 +++++++++++++++++------------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index e94e95fb..cd36b544 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -97,11 +97,9 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx - last_item_mask = torch.cumsum(mask.sum(dim=1), dim=0) - 1 # TODO ask if correct (mask, last True in eahch row, index as only Trues appeared) - return { 'positive_scores': positive_scores, - 'negative_scores': negative_scores[last_item_mask] + 'negative_scores': negative_scores } else: # eval mode last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 5d9eff91..6b9710ad 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -85,11 +85,11 @@ def create_from_config(cls, config, **kwargs): initializer_range=config.get("initializer_range", 0.02), ) - def get_item_embeddings(self, events): # TODO refactor (single projection) - return self._projector(self._item_embeddings(events)) - - def get_last_item_embeddings(self): - return self._projector(self._item_embeddings.weight) + def get_item_embeddings(self, events=None): # TODO refactor (single projection) + if events is None: + return self._projector(self._item_embeddings.weight) + else: + return self._projector(self._item_embeddings(events)) def forward(self, inputs): all_sample_events = inputs[ @@ -113,7 +113,7 @@ def forward(self, inputs): ] # (all_batch_events, embedding_dim) all_embeddings = ( - self.get_last_item_embeddings() + self.get_item_embeddings() ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim @@ -142,9 +142,13 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx + last_item_mask = ( + torch.cumsum(mask.sum(dim=1), dim=0) - 1 + ) # TODO ask if correct (mask, last True in each row, index as only Trues appeared) + return { "positive_scores": positive_scores, - "negative_scores": negative_scores, + "negative_scores": negative_scores[last_item_mask], } else: # eval mode last_embeddings = self._get_last_embedding( @@ -152,7 +156,7 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self.get_last_item_embeddings() + "bd,nd->bn", last_embeddings, self.get_item_embeddings() ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 7c9a16d2..6703f8e8 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -5,19 +5,19 @@ class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -29,7 +29,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -73,7 +73,7 @@ def forward(self, inputs): ] # (all_batch_events, embedding_dim) all_embeddings = ( - self.get_last_item_embeddings() + self._item_embeddings.weight ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim @@ -102,9 +102,13 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx + last_item_mask = ( + torch.cumsum(mask.sum(dim=1), dim=0) - 1 + ) # TODO ask if correct (mask, last True in each row, index as only Trues appeared) + return { "positive_scores": positive_scores, - "negative_scores": negative_scores, + "negative_scores": negative_scores[last_item_mask], } else: # eval mode last_embeddings = self._get_last_embedding( @@ -112,7 +116,7 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self.get_last_item_embeddings() + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id From 83a97c2311525053bcabf78dadd760486c49fa1b Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 13:13:57 +0300 Subject: [PATCH 087/175] sasrec semantic draft --- .../train/sasrec_semantic_train_config.json | 168 ++++++++++++++++++ modeling/models/sasrec_semantic.py | 64 +++++++ modeling/models/tiger.py | 8 +- 3 files changed, 235 insertions(+), 5 deletions(-) create mode 100644 configs/train/sasrec_semantic_train_config.json diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json new file mode 100644 index 00000000..47c1a9eb --- /dev/null +++ b/configs/train/sasrec_semantic_train_config.json @@ -0,0 +1,168 @@ +{ + "experiment_name": "sasrec_semantic_beauty", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, + "dataset": { + "type": "sequence_full", + "path_to_data_dir": "../data", + "name": "Beauty", + "max_sequence_length": 50, + "samplers": { + "type": "last_item_prediction", + "negative_sampler_type": "random" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "sasrec_semantic", + "sequence_prefix": "item", + "positive_prefix": "labels", + "negative_prefix": "negative", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "sasrec", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", + "output_prefix": "downstream_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 64, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } +} \ No newline at end of file diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 6703f8e8..ee80b14f 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -50,6 +50,47 @@ def create_from_config(cls, config, **kwargs): dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), ) + + + def get_item_embeddings(self, events): + embs = self._item_id_to_semantic_embedding[ + events - 1 + ] # len(events), len(self._codebook_sizes) + 1, embedding_dim + return embs.view( + len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim + ) + + def get_init_item_embeddings(self, events): + # convert to semantic ids + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(codebook_sizes) + + result = [] + for semantic_id in semantic_ids: + item_repr = [] + for codebook_idx, codebook_id in enumerate(semantic_id): + item_repr.append( + self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + ) + result.append(torch.stack(item_repr)) + + semantic_embeddings = torch.stack(result) + + # get residuals + residual = self._item_id_to_residual[events - 1] + # text_embeddings = self._item_id_to_text_embedding[events - 1] + # residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) + + # get true item embeddings + item_embeddings = torch.cat( + [semantic_embeddings, residual], dim=1 + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + + # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) + + return item_embeddings def forward(self, inputs): all_sample_events = inputs[ @@ -59,6 +100,7 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) @@ -126,3 +168,25 @@ def forward(self, inputs): ) # (batch_size, 20) return indices + + def _encoder_pos_embeddings(self, lengths, mask): + def position_lambda(x): + return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... + + # TODO +1 for residual embedding + + position_embeddings = self._get_position_embeddings( + lengths, mask, position_lambda, self._position_embeddings + ) + + def codebook_lambda(x): + x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) + x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 + # 0 1 2 3 5 0 1 2 3 5 ... # len(self._codebook_sizes) for bos, len(self._codebook_sizes) + 1 for residual + return x + + codebook_embeddings = self._get_position_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return position_embeddings + codebook_embeddings diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 09902184..6b3a4fde 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -28,7 +28,6 @@ def __init__( num_encoder_layers, num_decoder_layers, dim_feedforward, - codebook_sizes, dropout=0.0, activation="relu", layer_norm_eps=1e-9, @@ -71,7 +70,7 @@ def __init__( self._solver: CollisionSolver = solver - self._codebook_sizes = codebook_sizes + self._codebook_sizes = rqvae_model.codebook_sizes self._codebook_item_embeddings_stacked = torch.stack( [codebook for codebook in rqvae_model.codebooks] @@ -96,7 +95,7 @@ def __init__( item_ids.to(DEVICE), ) - self._bos_token_id = codebook_sizes[0] + self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( torch.nn.init.trunc_normal_( torch.zeros(embedding_dim), @@ -107,7 +106,7 @@ def __init__( ) self._codebook_embeddings = nn.Embedding( - num_embeddings=len(codebook_sizes) + 2, embedding_dim=embedding_dim + num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual self._init_weights(initializer_range) @@ -170,7 +169,6 @@ def create_from_config(cls, config, **kwargs): num_encoder_layers=config["num_encoder_layers"], num_decoder_layers=config["num_decoder_layers"], dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - codebook_sizes=rqvae_model.codebook_sizes, dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), ) From 926e0c478e1ee06cb60facba1da6732df01c4443 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 17:22:01 +0300 Subject: [PATCH 088/175] fix sasrec --- modeling/models/sasrec_freezed.py | 21 +++++++-------------- modeling/models/sasrec_semantic.py | 23 ++++++++--------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 6b9710ad..3334c33b 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -108,9 +108,9 @@ def forward(self, inputs): "{}.ids".format(self._positive_prefix) ] # (all_batch_events) - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) all_embeddings = ( self.get_item_embeddings() @@ -118,20 +118,17 @@ def forward(self, inputs): # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( - "ad,nd->an", all_sample_embeddings, all_embeddings - ) # (all_batch_events, num_items + 2) + "ad,nd->an", last_embeddings, all_embeddings + ) # (batch_size, num_items + 2) positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (all_batch_items, 1) + ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - sample_ids = torch.repeat_interleave( - sample_ids, all_sample_lengths, dim=0 - ) # (all_batch_events, seq_len) negative_scores = torch.scatter( input=all_scores, @@ -142,13 +139,9 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx - last_item_mask = ( - torch.cumsum(mask.sum(dim=1), dim=0) - 1 - ) # TODO ask if correct (mask, last True in each row, index as only Trues appeared) - return { "positive_scores": positive_scores, - "negative_scores": negative_scores[last_item_mask], + "negative_scores": negative_scores, } else: # eval mode last_embeddings = self._get_last_embedding( diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index ee80b14f..88e08890 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -110,30 +110,27 @@ def forward(self, inputs): "{}.ids".format(self._positive_prefix) ] # (all_batch_events) - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) all_embeddings = ( - self._item_embeddings.weight + self.get_item_embeddings() ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( - "ad,nd->an", all_sample_embeddings, all_embeddings - ) # (all_batch_events, num_items + 2) + "ad,nd->an", last_embeddings, all_embeddings + ) # (batch_size, num_items + 2) positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (all_batch_items, 1) + ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - sample_ids = torch.repeat_interleave( - sample_ids, all_sample_lengths, dim=0 - ) # (all_batch_events, seq_len) negative_scores = torch.scatter( input=all_scores, @@ -144,13 +141,9 @@ def forward(self, inputs): negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx - last_item_mask = ( - torch.cumsum(mask.sum(dim=1), dim=0) - 1 - ) # TODO ask if correct (mask, last True in each row, index as only Trues appeared) - return { "positive_scores": positive_scores, - "negative_scores": negative_scores[last_item_mask], + "negative_scores": negative_scores, } else: # eval mode last_embeddings = self._get_last_embedding( From 491a940d1210ce2388611ad59ee27d9b945cc05f Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 17:29:20 +0300 Subject: [PATCH 089/175] fix sasrec native --- modeling/models/sasrec.py | 16 +++++++--------- modeling/models/sasrec_semantic.py | 1 - 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index cd36b544..06dee724 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -64,36 +64,34 @@ def forward(self, inputs): if self.training: # training mode all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( - 'ad,nd->an', - all_sample_embeddings, - all_embeddings - ) # (all_batch_events, num_items + 2) + "ad,nd->an", last_embeddings, all_embeddings + ) # (batch_size, num_items + 2) positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (all_batch_items, 1) + ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - sample_ids = torch.repeat_interleave(sample_ids, all_sample_lengths, dim=0) # (all_batch_events, seq_len) - negative_scores = torch.scatter( input=all_scores, dim=1, index=sample_ids, src=torch.ones_like(sample_ids) * (-torch.inf) - ) # (all_batch_events, num_items + 2) + ) # (batch_size, num_items + 2) negative_scores[:, 0] = -torch.inf # Padding idx negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 88e08890..8553aced 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -131,7 +131,6 @@ def forward(self, inputs): data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - negative_scores = torch.scatter( input=all_scores, dim=1, From d6e9138a2a195754614965c5eb1ad30117e4b5ae Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 19:39:51 +0300 Subject: [PATCH 090/175] better trie query --- modeling/rqvae_utils/trie.py | 148 ++++++++++++++--------------------- 1 file changed, 58 insertions(+), 90 deletions(-) diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 89833c91..d80da941 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -199,104 +199,72 @@ def get_outer_inner_levels(self, semantic_ids: torch.Tensor, items_to_query: int return num_items, outer_level, inner_level # bs x K + 1, bs, bs - def get_sorted_ids(self, stored_residuals, query_residual, raw_item_ids): - scores = torch.matmul(stored_residuals, query_residual) # (guaranteed_len,) - # Sort guaranteed items by score (descending) - sorted_indices = torch.argsort(scores, descending=True) - sorted_ids = raw_item_ids[sorted_indices] + def get_scores(self, item_indices, idx, query_residuals_per_level): + bs = idx.shape[0] # batch_size - return sorted_ids + # stored[n, i, :] = self.residuals_per_level[item_indices[n,i], idx_expanded[n,i], :] + stored = self.residuals_per_level[item_indices[None, :], idx[:, None], :] - def get_closest_single( - self, - guaranteed_raw_item_ids, # guaranteed_len - guaranteed_stored_residuals, # guaranteed_len x embedding_dim - guaranteed_query_residual, # embedding_dim - left_raw_item_ids, # left_len - left_stored_residuals, # left_len x embedding_dim - left_query_residual, # embedding_dim - ): - if guaranteed_raw_item_ids.shape[0] == 0: - guaranteed_sorted_ids = torch.tensor([], device=DEVICE) - else: - guaranteed_sorted_ids = self.get_sorted_ids( - guaranteed_stored_residuals, - guaranteed_query_residual, - guaranteed_raw_item_ids, - ) - - left_sorted_ids = self.get_sorted_ids( - left_stored_residuals, left_query_residual, left_raw_item_ids - ) + # Gather the corresponding query vectors for each row: + # query[n, :] = query_residuals_per_level[n, idx[n], :] + query = query_residuals_per_level[ + torch.arange(bs, device=item_indices.device), idx, : + ] # Shape [batch_size, D] - # Concatenate the sorted lists - result_ids = torch.cat((guaranteed_sorted_ids, left_sorted_ids)) + # Dot products => shape [batch_size, total_items] + scores = torch.einsum("bnd,bd->bn", stored, query) - return result_ids + return scores - def get_closest( + def get_closest_vectorized( self, - outer_masks, - inner_masks, - outer_levels, - inner_levels, - query_residuals_per_level, + outer_masks, # shape: [batch_size, total_items] (boolean) + inner_masks, # shape: [batch_size, total_items] (boolean) + outer_levels, # shape: [batch_size] + inner_levels, # shape: [batch_size] + query_residuals_per_level, # shape: [batch_size, K+1, embedding_dim] items_to_query, ): - # K = 3 - # self.residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 1 - # query_residuals_per_level = 0, res, res+emb_2, res+emb_2+emb_1, res+emb_2+emb_1+emb_0 # K + 1 - # outer_level = 3 # if K (get by dot only from outer) => inner_mask = outer_mask - # outer_mask.shape = total_items - # inner_mask.shape = total_items - - raw_item_ids = [] - - for ( - outer_mask, - inner_mask, - outer_level, - inner_level, - query_residual_per_level, - ) in zip( - outer_masks, - inner_masks, - outer_levels, - inner_levels, + device = outer_masks.device + bs, total_items = outer_masks.shape + + item_indices = torch.arange(total_items, device=device) + + guaranteed_scores = self.get_scores( + item_indices, + -(inner_levels + 1), query_residuals_per_level, - ): - guaranteed = inner_mask # guaranteed_len - left = outer_mask & ~inner_mask # left_len - - assert guaranteed.sum() + left.sum() == outer_mask.sum() - - # self.residuals_per_level.shape = total_items, K + 1, embedding_dim - guaranteed_raw_item_ids = self.raw_item_ids[guaranteed] # guaranteed_len - guaranteed_stored_residuals = self.residuals_per_level[guaranteed][ - :, -(inner_level + 1) - ] # guaranteed_len x embedding_dim - guaranteed_query_residual = query_residual_per_level[ - -(inner_level + 1) - ] # embedding_dim - - left_raw_item_ids = self.raw_item_ids[left] # left_len - left_stored_residuals = self.residuals_per_level[left][:, -outer_level] # left_len x embedding_dim - left_query_residual = query_residual_per_level[ - -outer_level - ] # embedding_dim - - result_ids = self.get_closest_single( - guaranteed_raw_item_ids, - guaranteed_stored_residuals, - guaranteed_query_residual, - left_raw_item_ids, - left_stored_residuals, - left_query_residual, - ) - - raw_item_ids.append(result_ids[:items_to_query]) - - return torch.stack(raw_item_ids).int() # TODO + ) + guaranteed_scores = torch.where( + inner_masks, guaranteed_scores, torch.tensor(float("-inf"), device=device) + ) # [batch_size, total_items] + + left_scores = self.get_scores( + item_indices, + -outer_levels, + query_residuals_per_level, + ) + left_masks = outer_masks & ~inner_masks + left_scores = torch.where( + left_masks, left_scores, torch.tensor(float("-inf"), device=device) + ) # [batch_size, total_items] + + _, guaranteed_indices = torch.topk( + guaranteed_scores, items_to_query, dim=1 + ) # [batch_size, items_to_query] + _, left_indices = torch.topk( + left_scores, items_to_query, dim=1 + ) # [batch_size, items_to_query] + + indices = torch.cat( + [guaranteed_indices, left_indices], dim=1 + ) # [batch_size, 2 * items_to_query] + + top_ids = self.raw_item_ids[indices][ + :, :items_to_query + ] # [batch_size, items_to_query] + + return top_ids def query( self, semantic_ids: torch.Tensor, residuals: torch.Tensor, items_to_query: int @@ -349,7 +317,7 @@ def query( semantic_ids, residuals ) - raw_item_ids = self.get_closest( + raw_item_ids = self.get_closest_vectorized( outer_masks, inner_masks, outer_levels, From 62924ecc8bbadadcabfdbb347d786380c4d5b049 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 19:51:44 +0300 Subject: [PATCH 091/175] rename todopk --- modeling/dataset/base.py | 2 +- modeling/loss/base.py | 2 +- modeling/models/sasrec_freezed.py | 4 ++-- modeling/models/sasrec_semantic.py | 2 +- modeling/models/tiger.py | 8 ++++---- modeling/rqvae_utils/trie.py | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index e375f6ac..38a704c1 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -269,7 +269,7 @@ def create_from_config(cls, config, **kwargs): @classmethod def flatten_item_sequence(cls, item_ids): - min_history_length = 3 # TODO: make this configurable + min_history_length = 3 # TODOPK make this configurable histories = [] for i in range(min_history_length-1, len(item_ids)): histories.append(item_ids[:i+1]) diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 17200fcd..10f9e390 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -86,7 +86,7 @@ def forward(self, inputs): # use log soft max loss = -torch.gather( torch.log_softmax(logits, dim=-1), dim=-1, - index=candidates.view(batch_size, 1) # TODO check if this is correct + index=candidates.view(batch_size, 1) # TODOPK check if this is correct ).mean() return loss diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 3334c33b..6c12caf2 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -65,7 +65,7 @@ def __init__( num_embeddings=num_items + 2, embedding_dim=precomputed_embeddings.shape[1] ) - # TODO ask about freezed masked & padding tokens + # TODOPK ask about freezed masked & padding tokens self._item_embeddings.weight.data.copy_(extended_embeddings) self._item_embeddings.weight.requires_grad = False @@ -85,7 +85,7 @@ def create_from_config(cls, config, **kwargs): initializer_range=config.get("initializer_range", 0.02), ) - def get_item_embeddings(self, events=None): # TODO refactor (single projection) + def get_item_embeddings(self, events=None): if events is None: return self._projector(self._item_embeddings.weight) else: diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 8553aced..57b0c546 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -165,7 +165,7 @@ def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... - # TODO +1 for residual embedding + # TODOPK +1 for residual embedding position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 6b3a4fde..6fe9a910 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -76,7 +76,7 @@ def __init__( [codebook for codebook in rqvae_model.codebooks] ) self._codebook_item_embeddings_stacked.requires_grad = ( - False # TODO maybe unfreeeze later + False # TODOPK maybe unfreeeze later ) self._item_id_to_semantic_id = item_id_to_semantic_id @@ -193,8 +193,8 @@ def forward(self, inputs): label_lengths = label_lengths * ( len(self._codebook_sizes) + 1 - ) # TODO bos prepending - tgt_embeddings = self.get_item_embeddings( # TODO residual embs + ) # TODOPK bos prepending + tgt_embeddings = self.get_item_embeddings( label_events ) # (all_batch_events, embedding_dim) @@ -383,7 +383,7 @@ def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... - # TODO +1 for residual embedding + # TODOPK +1 for residual embedding position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index d80da941..b7971e86 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -112,7 +112,7 @@ def get_residuals_per_level( bs, self.K + 1, embedding_dim, device=self.embedding_table.device ) # bs x K + 1 x embedding_dim - # TODO think if reverse is needed here + # TODOPK think if reverse is needed here # i = 3, 2, 1, 0 for i in range(self.K - 1, -1, -1): indices_at_level = semantic_ids[:, i] # bs @@ -124,7 +124,7 @@ def get_residuals_per_level( embeddings_at_level + residuals_per_level[:, self.K - i - 1, :] ) # [0 first_cumul_emb, second, ..., full_emb] - # TODO check that residuals_per_level equal at last layer to full embedding of semantic id + # TODOPK check that residuals_per_level equal at last layer to full embedding of semantic id residuals_per_level[:, 0, :] = residuals From de106df15d07dad2a5c11dceb0bff4b36f741f13 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 21:15:21 +0300 Subject: [PATCH 092/175] fix decoder codebook --- modeling/models/tiger.py | 54 +++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 6fe9a910..4c8c0374 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -234,9 +234,7 @@ def forward(self, inputs): residuals = tgt_embeddings[:, -1, :] semantic_ids = semantic_ids.to(torch.int64) - item_ids = self._trie.query( - semantic_ids, residuals, items_to_query=20 - ) + item_ids = self._trie.query(semantic_ids, residuals, items_to_query=20) return item_ids @@ -252,7 +250,9 @@ def _apply_decoder( batch_size, 1, -1 ) # (batch_size, 1, embedding_dim) - tgt_embeddings = torch.cat([bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1) + tgt_embeddings = torch.cat( + [bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1 + ) # remove residual by using :-1 label_len = tgt_mask.shape[1] @@ -287,21 +287,32 @@ def _apply_decoder( def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): batch_size = encoder_embeddings.shape[0] + embedding_dim = encoder_embeddings.shape[2] tgt_embeddings = ( - self._bos_weight.unsqueeze(0).unsqueeze(0).expand(batch_size, 1, -1) + self._bos_weight.unsqueeze(0) + .unsqueeze(0) + .expand(batch_size, 1, embedding_dim) ) - tgt_mask = torch.ones(batch_size, 1, dtype=torch.bool, device=DEVICE) semantic_ids = torch.tensor([], device=DEVICE) - for step in range(len(self._codebook_sizes) + 1): # semantic_id + residual - position_embeddings = self._decoder_pos_embeddings( - torch.full((batch_size,), tgt_embeddings.shape[1], device=DEVICE), - tgt_mask, - ) + for step in range(len(self._codebook_sizes) + 1): # semantic_id_seq + residual + if step == 0: + indexes = torch.full( + (batch_size, 1), len(self._codebook_sizes), device=DEVICE + ) # len(self._codebook_sizes) for bos + else: + indexes = torch.cat( + [indexes, torch.full((batch_size, 1), step - 1, device=DEVICE)], + dim=1, + ) - curr_embeddings = tgt_embeddings + position_embeddings + position_embeddings = self._codebook_embeddings(indexes.view(-1)) + + curr_embeddings = tgt_embeddings + position_embeddings.view( + batch_size, step + 1, embedding_dim + ) curr_embeddings = self._decoder_layernorm(curr_embeddings) curr_embeddings = self._decoder_dropout(curr_embeddings) @@ -316,6 +327,12 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): :, -1, : ] # batch_size x embedding_dim + # TODOPK ask if we take last + # torch.Size([256, 1, 64]) + # torch.Size([256, 2, 64]) + # torch.Size([256, 3, 64]) + # torch.Size([256, 4, 64]) + if step < len(self._codebook_sizes): codebook = self._codebook_item_embeddings_stacked[ step @@ -333,9 +350,6 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): tgt_embeddings = torch.cat( [tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1 ) - tgt_mask = torch.ones( - batch_size, tgt_embeddings.shape[1], dtype=torch.bool, device=DEVICE - ) return semantic_ids, tgt_embeddings @@ -381,9 +395,9 @@ def get_init_item_embeddings(self, events): def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): - return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... - - # TODOPK +1 for residual embedding + return x // ( + len(self._codebook_sizes) + 1 + ) # 5 5 5 5 4 4 4 4 ..., +1 for residual position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings @@ -392,7 +406,7 @@ def position_lambda(x): def codebook_lambda(x): x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 - # 0 1 2 3 5 0 1 2 3 5 ... # len(self._codebook_sizes) for bos, len(self._codebook_sizes) + 1 for residual + # 0 1 2 4 0 1 2 4 ... # len(self._codebook_sizes) + 1 = 4 for residual return x codebook_embeddings = self._get_position_embeddings( @@ -405,7 +419,7 @@ def _decoder_pos_embeddings(self, lengths, mask): def codebook_lambda(x): non_bos = x < len(self._codebook_sizes) x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] - return x # 3, 0, 1, 2, 3, 0, 1, 2 ... + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... len(self._codebook_sizes) = 3 for bos codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings From e1975a20877e090a414e8c9a98e306fb5e23bb63 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Sat, 15 Feb 2025 20:30:17 +0300 Subject: [PATCH 093/175] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20rqvae?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/train/rqvae_train_config.json | 2 +- modeling/rqvae_utils/rqvae_test.py | 51 +++++++++++++++++++++++++++ modeling/utils/__init__.py | 2 +- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 modeling/rqvae_utils/rqvae_test.py diff --git a/configs/train/rqvae_train_config.json b/configs/train/rqvae_train_config.json index 5531c552..8b7d8bd9 100644 --- a/configs/train/rqvae_train_config.json +++ b/configs/train/rqvae_train_config.json @@ -1,6 +1,6 @@ { "experiment_name": "rqvae_beauty", - "train_epochs_num": 50, + "train_epochs_num": 200, "dataset": { "type": "rqvae", "path_to_data_dir": "../data", diff --git a/modeling/rqvae_utils/rqvae_test.py b/modeling/rqvae_utils/rqvae_test.py new file mode 100644 index 00000000..611e7739 --- /dev/null +++ b/modeling/rqvae_utils/rqvae_test.py @@ -0,0 +1,51 @@ +import json + +import numpy as np +import torch + +from models import RqVaeModel +from utils import DEVICE + +def test(a, b): + cos_sim = torch.nn.functional.cosine_similarity(a, b, dim=0) + norm_a = torch.norm(a, p=2) + norm_b = torch.norm(b, p=2) + l2_dist = torch.norm(a - b, p=2) / (norm_a + norm_b + 1e-8) + return cos_sim, l2_dist + +if __name__ == "__main__": + config = json.load(open("../configs/train/tiger_train_config.json")) + config = config["model"] + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + rqvae_config["model"]["should_init_codebooks"] = False + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) + df = torch.load(config["embs_extractor_path"], weights_only=False) + embeddings_array = np.stack(df["embeddings"].values) + tensor_embeddings = torch.tensor(embeddings_array, dtype=torch.float32, device=DEVICE) + inputs = {'embeddings': tensor_embeddings} + + rqvae_model.eval() + sem_ids, residuals = rqvae_model.forward(inputs) + scores = residuals.detach() + print(torch.norm(residuals, p=2, dim=1).median()) + for (i, codebook) in enumerate(rqvae_model.codebooks): + scores += codebook[sem_ids[:, i]].detach() + decoder_output = rqvae_model.decoder(scores.detach()).detach() + + a = tensor_embeddings[0] + b = decoder_output[0] + cos_sim, l2_dist = test(a, b) + print("косинусное расстояние", cos_sim) + print("евклидово расстояние", l2_dist) + + cos_sim = torch.nn.functional.cosine_similarity(tensor_embeddings, decoder_output, dim=1) + print("косинусное расстояние", cos_sim.mean(), cos_sim.min(), cos_sim.max()) + + norm_a = torch.norm(tensor_embeddings, p=2, dim = 1) + norm_b = torch.norm(decoder_output, p=2, dim = 1) + l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim = 1) / (norm_a + norm_b + 1e-8) + print("евклидово расстояние",l2_dist.median(), l2_dist.min(), l2_dist.max()) + diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 5cdc705a..59101ca4 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -13,7 +13,7 @@ if torch.cuda.is_available(): DEVICE = torch.device('cuda') elif torch.backends.mps.is_available(): - DEVICE = torch.device("mps") + DEVICE = torch.device("mps:0") else: DEVICE = torch.device('cpu') From f568d3c483cfca6fbfeb71486ddab738b58ae934 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Sun, 16 Feb 2025 20:45:38 +0300 Subject: [PATCH 094/175] =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=20=D0=B2?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D0=B5=20=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B2=D1=8C=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/rqvae_utils/__init__.py | 2 + modeling/rqvae_utils/collision_solver.py | 125 +++----------- modeling/rqvae_utils/simplified_tree.py | 48 ++++++ modeling/rqvae_utils/tree.py | 204 +++++++++++++++++++++++ modeling/rqvae_utils/tree_comparing.py | 109 ++++++++++++ 5 files changed, 387 insertions(+), 101 deletions(-) create mode 100644 modeling/rqvae_utils/simplified_tree.py create mode 100644 modeling/rqvae_utils/tree.py create mode 100644 modeling/rqvae_utils/tree_comparing.py diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index 7764a752..2722515a 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,2 +1,4 @@ from .collision_solver import CollisionSolver from .trie import Trie +from .tree import Tree +from .simplified_tree import SimplifiedTree \ No newline at end of file diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index 6821b33c..506de2ee 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -1,6 +1,8 @@ from collections import defaultdict + import torch + class CollisionSolver: def __init__(self, residual_dim, emb_dim, codebook_size, device: torch.device = torch.device('cpu')): """ @@ -9,24 +11,15 @@ def __init__(self, residual_dim, emb_dim, codebook_size, device: torch.device = :param emb_dim: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._sem_ids_sparse_tensor = None #тензор группирирующий остатки по semantic_id - self.item_ids_sparse_tensor = None #тензор группирируюшщий реальные айди айтемов по semantic_id - self.counts_dict = defaultdict(int) #тензор храняющий количество коллизий по semantic_id - self.residual_dim = residual_dim #длина остатка - self.emb_dim = emb_dim #длина semantic_id - self.codebook_size = codebook_size #количество элементов в одном кодбуке - self.device = device #девайс - self.item_ids_dict = {} #словарь сопостовляющий каждому item_id его semantic_id и токен решающий коллизии - - self.key = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) #ключ для сопоставления числа каждому semantic_id - - def _to_device(self, tensor: torch.Tensor) -> torch.Tensor: - """ - Перенос тензора на устройство - """ - if tensor.device != self.device: - tensor = tensor.to(self.device) - return tensor + self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) #тензор группирирующий остатки по semantic_id + self.item_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) #тензор группирируюшщий реальные айди айтемов по semantic_id + self.counts_dict: dict[int, int] = defaultdict(int) #тензор храняющий количество коллизий по semantic_id + self.residual_dim: int = residual_dim #длина остатка + self.emb_dim: int = emb_dim #длина semantic_id + self.codebook_size: int = codebook_size #количество элементов в одном кодбуке + self.device: torch.device = device #девайс + + self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) #ключ для сопоставления числа каждому semantic_id def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: """ @@ -44,15 +37,16 @@ def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: tor assert residual_length == self.residual_dim assert item_ids.shape == (residuals_count,) - item_ids = self._to_device(item_ids) - residuals = self._to_device(residuals) - semantic_ids = self._to_device(semantic_ids) + item_ids = item_ids.to(self.device) + residuals = residuals.to(self.device) + semantic_ids = semantic_ids.to(self.device) unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) unique_ids, inverse_indices = torch.unique(unique_id, return_inverse=True) sorted_indices = torch.argsort(inverse_indices) counts = torch.bincount(inverse_indices) - max_residuals_count = counts.max().item() + max_residuals_count = int(counts.max().item()) + max_sid = int(self.codebook_size ** self.emb_dim) offsets = torch.cumsum(torch.cat((torch.tensor([0], dtype=torch.long, device=self.device), counts[:-1])), dim=0) row_indices = inverse_indices[sorted_indices] col_indices = torch.arange(semantic_ids_count) - offsets[row_indices] @@ -61,21 +55,17 @@ def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: tor col_indices ], dim=0) - self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(self.codebook_size ** self.emb_dim, max_residuals_count, self.residual_dim), device=self.device) + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(max_sid, max_residuals_count, self.residual_dim), device=self.device) self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) - item_id_indices = torch.stack((unique_ids[row_indices], col_indices)) + item_id_indices: torch.Tensor = torch.stack((unique_ids[row_indices], col_indices)) - self.item_ids_dict = { - item_id.item(): (sem_id_key.item(), dedup_token.item()) - for item_id, (sem_id_key, dedup_token) in zip(item_ids[sorted_indices], torch.stack((unique_ids[row_indices], col_indices), dim=1)) - } - self.item_ids_sparse_tensor = torch.sparse_coo_tensor(item_id_indices, item_ids[sorted_indices], size=(self.codebook_size ** self.emb_dim, max_residuals_count), device=self.device, dtype=torch.int16) + self.item_ids_sparse_tensor = torch.sparse_coo_tensor(item_id_indices, item_ids[sorted_indices], size=(max_sid, max_residuals_count), device=self.device, dtype=torch.int16) def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: assert semantic_ids.shape[1] == self.emb_dim - semantic_ids = self._to_device(semantic_ids) + semantic_ids = semantic_ids.to(self.device) unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) @@ -98,8 +88,8 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens assert pred_residuals.shape[1] == self.residual_dim assert semantic_ids.shape[0] == pred_residuals.shape[0] - semantic_ids = self._to_device(semantic_ids) - pred_residuals = self._to_device(pred_residuals) + semantic_ids = semantic_ids.to(self.device) + pred_residuals = pred_residuals.to(self.device) unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) @@ -127,10 +117,8 @@ def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torc assert true_residuals.shape[1] == self.residual_dim assert semantic_ids.shape[0] == true_residuals.shape[0] - semantic_ids = self._to_device(semantic_ids) - true_residuals = self._to_device(true_residuals) - - unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + semantic_ids = semantic_ids.to(self.device) + true_residuals = true_residuals.to(self.device) candidates, _ = self.get_residuals_by_semantic_id_batch(semantic_ids) @@ -142,68 +130,3 @@ def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torc return { "true_dedup_tokens": true_dedup_tokens } - - - def get_item_id_info(self, item_id: int) -> dict[str, torch.Tensor]: - """ - Возвращает информацию по заданному item_id: - - semantic_id - - Все элементы с таким же semantic_id - - Их item_ids - - Их остатки - - Токены, решающие коллизии (dedup tokens) - - :param item_id: айди айтема - - :return: Словарь с ключами: - - 'semantic_id': [emb_dim] semantic id - - 'residuals': [count, residual_dim] остатки - - 'item_ids': [count] item ids - - 'dedup_tokens': [count] токены решающие коллизии - """ - - if item_id not in self.item_ids_dict: - return { - "semantic_id": torch.empty(0, dtype=torch.long, device=self.device), - "residuals": torch.empty((0, self.residual_dim), device=self.device), - "item_ids": torch.empty(0, dtype=torch.int16, device=self.device), - "dedup_tokens": torch.empty(0, dtype=torch.long, device=self.device), - } - - semantic_id_key, dedup_token = self.item_ids_dict[item_id] - - semantic_id = torch.div(semantic_id_key, self.key, rounding_mode='floor') % self.codebook_size - - assert semantic_id.shape == (self.emb_dim,) - - candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_id[None]) - residuals = candidates.squeeze(0)[mask.squeeze(0)] - item_ids = self.item_ids_sparse_tensor[semantic_id_key].to_dense()[mask.squeeze(0)] - - dedup_tokens = torch.arange(residuals.shape[0], device=self.device) - - return { - "semantic_id": semantic_id, - "residuals": residuals, - "item_ids": item_ids, - "dedup_tokens": dedup_tokens, - } - - def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: - """ - :param semantic_id: [batch_size, emb_dim] semantic ids (без токенов решающего коллизии) - :param dedup_tokens: [batch_size] токены решающие коллизии - - :return: item_ids : [batch_size] реальные айди айтемов - """ - assert semantic_ids.shape[1] == self.emb_dim - assert dedup_tokens.shape == (semantic_ids.shape[0],) - - semantic_ids = self._to_device(semantic_ids) - dedup_tokens = self._to_device(dedup_tokens) - - unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) - - item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) - - return item_ids diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py new file mode 100644 index 00000000..9c19e3c4 --- /dev/null +++ b/modeling/rqvae_utils/simplified_tree.py @@ -0,0 +1,48 @@ +import torch + + +class SimplifiedTree: + def __init__(self, embedding_table: torch.Tensor, device: torch.device = torch.device('cpu')): + """ + :param embedding_table: Тензор из RQ-VAE # (semantic_id_len, codebook_size, emb_dim) + :param device: Устройство + """ + self.embedding_table: torch.Tensor = embedding_table.to(device) # (semantic_id_len, codebook_size, emb_dim) + self.sem_id_len, self.codebook_size, self.emb_dim = embedding_table.shape + self.device: torch.device = device + self.sem_ids_count: int = 0 + self.full_embeddings: torch.Tensor = torch.empty((0, 0)) + + def init_tree(self, embeddings: torch.Tensor) -> None: + """ + :param embeddings: тензор эмбеддингов для каждого из semantic ids (sem_ids_count, emb_dim) + """ + assert embeddings.shape[1] == self.emb_dim + self.full_embeddings = embeddings.to(self.device) # (sem_ids_count, emb_dim) + self.sem_ids_count = embeddings.shape[0] + + def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: + """ + :param request_sem_ids: батч из sem ids (batch_size, sem_id_len) + :param k: количество ближайших элементов которые нужно взять (int) + :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) + """ + assert request_sem_ids.shape[1] == self.sem_id_len + assert 0 < k <= self.sem_ids_count + request_sem_ids = request_sem_ids.to(self.device) + + expanded_emb_table = (self.embedding_table.unsqueeze(0) + .expand(request_sem_ids.shape[0], -1, -1, + -1)) # (batch_size, sem_id_len, codebook_size, emb_dim) + + index = (request_sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) + + request_embeddings = (torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1) + .expand(-1, self.sem_ids_count, -1)) # (batch_size, sem_ids_count, emb_dim) + + diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) + + indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :k] # (batch_size, k) + return indices diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py new file mode 100644 index 00000000..928533e5 --- /dev/null +++ b/modeling/rqvae_utils/tree.py @@ -0,0 +1,204 @@ +import numpy as np +import torch + +from utils import DEVICE + + +class Tree: + def __init__(self, embedding_table, device: torch.device = DEVICE): + """ + :param embedding_table: Тензор из RQ-VAE # (semantic_id_len, codebook_size, emb_dim) + :param device: Устройство + """ + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) + self.sem_id_len, self.codebook_size, self.emb_dim = embedding_table.shape + self.device: torch.device = device + self.key: torch.Tensor = torch.empty((0, 0)) + self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) + self.sem_ids_count: int = -1 + self.sem_ids_embs: torch.Tensor = torch.empty((0, 0)) + self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) + + def init_tree(self, semantic_ids, residuals): + """ + :param semantic_ids: (sem_ids_count, sem_id_len) + :param residuals: (sem_ids_count, emb_dim) + """ + + assert semantic_ids.shape[0] == residuals.shape[0] + assert semantic_ids.shape[1] == self.sem_id_len + assert residuals.shape[1] == self.emb_dim + + self.sem_ids_count = semantic_ids.shape[0] + self.key = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len - 1, -1, -1)], + dtype=torch.long, device=self.device) + self.sids = self.get_sids(semantic_ids.float()) # (sem_id_len, ) + self.sem_ids_embs = self.calculate_full(semantic_ids, residuals) + + result = torch.full(size=[self.codebook_size ** self.sem_id_len], fill_value=0, dtype=torch.int64, + device=self.device) + temp_unique_id = self.sids * self.codebook_size + temp_sem_ids = torch.concat([semantic_ids, torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1)], + dim=-1) + + for i in range(0, self.sem_id_len + 1): + temp_unique_id = temp_unique_id - (self.codebook_size ** i) * temp_sem_ids[:, self.sem_id_len - i] + temp_unique_ids, temp_inverse_indices = torch.unique(temp_unique_id, return_inverse=True) + temp_counts = torch.bincount(temp_inverse_indices) + truncated_ids = torch.floor_divide(input=temp_unique_id, other=(self.codebook_size ** (i + 1))).long() + result[truncated_ids] = temp_counts[temp_inverse_indices] + + self.A = result + + def get_counts(self, sem_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: + """ + :param sem_ids: (batch_size, sem_id_len) + :return: префиксы всех длин sem_ids, количество sem_id на каждой глубине дерева + """ + assert sem_ids.shape[1] == self.sem_id_len + assert sem_ids.device == self.device + + offsets = torch.arange(self.sem_id_len + 1, device=self.device) + i = torch.arange(self.sem_id_len, device=self.device) + + mask_sem = (i < (self.sem_id_len - offsets.unsqueeze(1))).long() # (sem_id_len + 1, sem_id_len) + divs = torch.pow(self.codebook_size, offsets) # (sem_id_len + 1,) + + C = (sem_ids.unsqueeze(1) * mask_sem.unsqueeze(0) * self.key.unsqueeze(0).unsqueeze(1)).sum(dim=-1) + B = C // divs.unsqueeze(0) + + return C, self.A[B] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) + + def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: + """ + :param sem_ids: (sem_id_count, sem_id_len) + :return: хэши sem_ids (sem_id_count,) + """ + assert sem_ids.shape[1] == self.sem_id_len + return torch.einsum('nc,c->n', sem_ids, self.key.float()) # (sem_ids_count,) + + def calc_ol(self, batch_ids: torch.Tensor, k: int) -> tuple[torch.Tensor, torch.Tensor]: + """ + :param batch_ids: (batch_size, sem_id_len) + :param k: int + :return: тензор глубин на которые нужно подняться (batch_size,), маска для sem_id для нужной глубины (batch_size, sem_ids_count) + """ + assert batch_ids.shape[1] == self.sem_id_len + assert k < self.sem_ids_count # корректный сценарий когда тензор не пустой + + c, a = self.get_counts(batch_ids) + ol = torch.argmax((a > k).long(), dim=-1) # (bs,) + gather_ol = torch.gather(c, dim=1, index=ol.unsqueeze(1)).squeeze() # (bs,) + + mask_ol = (gather_ol.unsqueeze(-1) <= self.sids) & ( + self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1)) + return ol, mask_ol # (bs,) (bs, sem_ids_count) + + def calc_il(self, batch_ids, k): + """ + :param batch_ids: (batch_size, sem_id_len) + :param k: int + :return: тензор глубин на которые нужно подняться (batch_size,), маска для sem_id для нужной глубины (batch_size, sem_ids_count) + """ + assert batch_ids.shape[1] == self.sem_id_len + assert k < self.sem_ids_count # корректный сценарий когда тензор не пустой + + batch_dim = batch_ids.shape[0] + c, a = self.get_counts(batch_ids) + extended_c = torch.concat([torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], dim=1) + + il = torch.argmax((a > k).long(), dim=-1) - 1 # (bs,) + gather_il = torch.gather(extended_c, dim=1, index=(il + 1).unsqueeze(1)).squeeze() # (bs,) + + mask_il = (gather_il.unsqueeze(-1) <= self.sids) & ( + self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1)) + return il, mask_il # (bs,) (bs, sem_ids_count) + + def get_repeated_sids(self, k: int) -> torch.Tensor: + return self.sids.repeat(k, 1) # (k, sem_ids_count) + + def get_request_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: + """ + :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) + :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) + :return: эмбеддинги sem_id для нужных глубин (count, emb_dim) + """ + assert decomposed_embeddings.shape[1:] == (self.sem_id_len + 1, self.emb_dim) + assert levels.shape == (decomposed_embeddings.shape[0],) + + mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange(self.sem_id_len + 2, 0, -1, + device=self.device).unsqueeze(1) + return torch.sum(decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1) # (bs, emb_dim) + + def calculate_full(self, sem_ids: torch.Tensor, residuals: torch.Tensor) -> torch.Tensor: + """ + :param sem_ids: sem_ids (count, sem_id_len) + :param residuals: остатки для каждого sem_id (count, emb_dim) + :return: полные эмбеддинги для каждого айтема (count, emb_dim) + """ + assert sem_ids.shape[1] == self.sem_id_len + assert residuals.shape[1] == self.emb_dim + assert residuals.shape[0] == sem_ids.shape[0] + + count = residuals.shape[0] + index = sem_ids.view(count, -1, 1, 1).expand(-1, -1, -1, self.emb_dim) + embs = torch.gather(input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), dim=2, + index=index) # expand бесплатный по памяти + decomposed_embs = torch.concat([embs.squeeze(2), residuals.unsqueeze(1)], dim=1) # (sem_ids_count, emb_dim) + + assert decomposed_embs.shape == (sem_ids.shape[0], self.sem_id_len + 1, self.emb_dim) + return decomposed_embs + + def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: + """ + :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) + :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) + :return: эмбеддинги для всех sem_ids для нужных глубин (batch_size, sem_ids_count, emb_dim) + """ + assert decomposed_embeddings.shape == (self.sem_ids_count, self.sem_id_len + 1, self.emb_dim) + + mask = (torch.arange(1, self.sem_id_len + 2, device=self.device) >= + torch.arange(self.sem_id_len + 2, 0, -1,device=self.device).unsqueeze(1)).float() + sids_mask = mask[levels + 1].unsqueeze(-1) # (batch_size, sem_id_len + 1, 1) + return torch.einsum('nld,bld->bnd', decomposed_embeddings, sids_mask) # (batch_size, sem_ids_count, emb_dim) + + def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: + return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) + + def get_ids(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, k: int) -> torch.Tensor: + """ + :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) + :param request_residuals: батч из остатков (batch_size, emb_dim) + :param k: количество ближайших элементов которые нужно взять int + :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) + """ + assert request_sem_ids.shape[0] == request_residuals.shape[0] + assert request_sem_ids.shape[1] == self.sem_id_len + assert request_residuals.shape[1] == self.emb_dim + assert 0 <= k < self.sem_ids_count + + ol, ol_mask = self.calc_ol(request_sem_ids, k) + il, il_mask = self.calc_il(request_sem_ids, k) + + il_mask = il_mask.detach().cpu() + ol_mask = ol_mask.detach().cpu() + + ol_mask = ol_mask & ~il_mask + + request_embs = self.calculate_full(request_sem_ids, request_residuals) + + ol_sids_embeddings = self.calculate_level_embeddings(self.sem_ids_embs, ol) + il_sids_embeddings = self.calculate_level_embeddings(self.sem_ids_embs, il) + + ol_request_embeddings = self.get_request_embeddings(request_embs, ol) + il_request_embeddings = self.get_request_embeddings(request_embs, il) + + ol_scores = torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + il_scores = torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + ids = np.lexsort(keys=(-torch.cat([il_scores, ol_scores], dim=1), + ~torch.cat([torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1), + ~torch.cat([il_mask, ol_mask], dim=1))) + + return (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :k] # (batch_size, k) diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py new file mode 100644 index 00000000..9a9b3822 --- /dev/null +++ b/modeling/rqvae_utils/tree_comparing.py @@ -0,0 +1,109 @@ +import json +import os +import time + +import psutil +import torch + +from models.rqvae import RqVaeModel +from rqvae_utils import Trie, SimplifiedTree, Tree +from utils import DEVICE + + +def memory_stats(k): + process = psutil.Process(os.getpid()) + memory_usage = process.memory_info().rss / 1024 ** 2 + print(f"{k}. Использование памяти: {memory_usage:.2f} MB") + + +def calc_sid(sid, codebook_size): + res = sid[-1] + for i in range(1, sid.shape[0]): + res += sid[-i - 1] * (codebook_size ** i) + return res + + +def stats(query_sem_id, codebook_size, sids, item_ids): + for sem_id, ids in zip(query_sem_id.tolist(), item_ids.tolist()): + print(calc_sid(torch.tensor(sem_id), codebook_size)) + print(sids[torch.tensor(ids)]) + + +if __name__ == "__main__": + embedding_dim = 64 # Embedding size + config = json.load(open("../configs/train/tiger_train_config.json")) + config = config["model"] + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + rqvae_config["model"]["should_init_codebooks"] = False + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) + rqvae_model.eval() + + emb_table = torch.stack( + [cb for cb in rqvae_model.codebooks] + ).to(DEVICE) + + trie = Trie(rqvae_model) + tree = Tree(emb_table, DEVICE) + simplified_tree = SimplifiedTree(emb_table, DEVICE) + alphabet_size = 10 + + N = 12101 + K = 3 + + semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64).to(DEVICE) + residuals = torch.randn(N, embedding_dim).to(DEVICE) + + now = time.time() + trie.build_tree_structure(semantic_ids, residuals, torch.arange(N).to(DEVICE)) + print(f"Time for trie init: {(time.time() - now) * 1000:.2f} ms") + + now = time.time() + tree.init_tree(semantic_ids, residuals) + print(f"Time for tree init: {(time.time() - now) * 1000:.2f} ms") + + now = time.time() + full_embeddings = tree.calculate_full(semantic_ids, torch.zeros_like(residuals)).sum(1) + simplified_tree.init_tree(full_embeddings) + print(f"Time for simplified tree init: {(time.time() - now) * 1000:.2f} ms") + + items_to_query = 20 + batch_size = 256 + q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE) + q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) + + total_time = 0 + n_exps = 1 + + memory_stats(1) + for i in range(n_exps): + now = time.time() + item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) + total_time += time.time() - now + stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) + + print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") + + memory_stats(2) + + for i in range(n_exps): + now = time.time() + simplified_tree_ids = simplified_tree.get_ids(q_semantic_ids, items_to_query) + total_time += time.time() - now + stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + + print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") + + memory_stats(3) + + for i in range(n_exps): + now = time.time() + tree_ids = tree.get_ids(q_semantic_ids, q_residuals, items_to_query) + total_time += time.time() - now + stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) + + print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") + + memory_stats(4) From c97e0a92e78ea282251bffc8a9c509d6fd97aa18 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 21:43:27 +0300 Subject: [PATCH 095/175] add sasrec_semantic --- .../train/sasrec_semantic_train_config.json | 3 + modeling/models/__init__.py | 1 + modeling/models/sasrec_semantic.py | 179 ++++++++++++------ modeling/models/tiger.py | 18 +- 4 files changed, 128 insertions(+), 73 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 47c1a9eb..1cdf6762 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -34,6 +34,9 @@ }, "model": { "type": "sasrec_semantic", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", "sequence_prefix": "item", "positive_prefix": "labels", "negative_prefix": "negative", diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index b9678e2e..e03dc42d 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -14,6 +14,7 @@ from .random import RandomModel from .sasrec import SasRecModel, SasRecInBatchModel from .sasrec_freezed import SasRecFreezedModel +from .sasrec_semantic import SasRecSemanticModel from .sasrec_ce import SasRecCeModel from .s3rec import S3RecModel from .rqvae import RqVaeModel diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 57b0c546..a36513de 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -1,11 +1,16 @@ import torch +from .tiger import TigerModel from models import SequentialTorchModel -from utils import create_masked_tensor +from utils import DEVICE, create_masked_tensor +from torch import nn class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): def __init__( self, + rqvae_model, + item_id_to_semantic_id, + item_id_to_residual, sequence_prefix, positive_prefix, num_items, @@ -34,11 +39,37 @@ def __init__( self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix + self._codebook_sizes = rqvae_model.codebook_sizes + self._codebook_item_embeddings_stacked = torch.stack( + [codebook for codebook in rqvae_model.codebooks] + ) + self._codebook_item_embeddings_stacked.requires_grad = ( + False # TODOPK maybe unfreeeze later + ) + + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + + item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) + + self._item_id_to_semantic_embedding, self._item_id_to_full_embedding = ( + self.get_init_item_embeddings(item_ids) + ) + + self._codebook_embeddings = nn.Embedding( + num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim + ) # + 2 for bos token & residual + self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): + rqvae_model, semantic_ids, residuals, _ = TigerModel.init_rqvae(config) + return cls( + rqvae_model=rqvae_model, + item_id_to_semantic_id=semantic_ids, + item_id_to_residual=residuals, sequence_prefix=config["sequence_prefix"], positive_prefix=config["positive_prefix"], num_items=kwargs["num_items"], @@ -50,47 +81,6 @@ def create_from_config(cls, config, **kwargs): dropout=config.get("dropout", 0.0), initializer_range=config.get("initializer_range", 0.02), ) - - - def get_item_embeddings(self, events): - embs = self._item_id_to_semantic_embedding[ - events - 1 - ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.view( - len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim - ) - - def get_init_item_embeddings(self, events): - # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[ - events - 1 - ] # len(events), len(codebook_sizes) - - result = [] - for semantic_id in semantic_ids: - item_repr = [] - for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append( - self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] - ) - result.append(torch.stack(item_repr)) - - semantic_embeddings = torch.stack(result) - - # get residuals - residual = self._item_id_to_residual[events - 1] - # text_embeddings = self._item_id_to_text_embedding[events - 1] - # residual = text_embeddings - semantic_embeddings.sum(dim=1) - residual = residual.unsqueeze(1) - - # get true item embeddings - item_embeddings = torch.cat( - [semantic_embeddings, residual], dim=1 - ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - - # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) - - return item_embeddings def forward(self, inputs): all_sample_events = inputs[ @@ -100,9 +90,8 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) - all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths + all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) if self.training: # training mode @@ -115,13 +104,13 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) all_embeddings = ( - self.get_item_embeddings() - ) # (num_items + 2, embedding_dim) + self._item_id_to_full_embedding + ) # (num_items, embedding_dim) - # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim + # a -- all_batch_events, n -- num_items, d -- embedding_dim all_scores = torch.einsum( "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items + 2) + ) # (batch_size, num_items) positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] @@ -136,9 +125,7 @@ def forward(self, inputs): dim=1, index=sample_ids, src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (all_batch_events, num_items + 2) - negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx + ) # (all_batch_events, num_items) return { "positive_scores": positive_scores, @@ -150,22 +137,60 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight - ) # (batch_size, num_items + 2) - candidate_scores[:, 0] = -torch.inf # Padding id - candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id + "bd,nd->bn", last_embeddings, self._item_id_to_full_embedding + ) # (batch_size, num_items) _, indices = torch.topk( candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices - + + def get_item_embeddings(self, events): + embs = self._item_id_to_semantic_embedding[ + events - 1 + ] # len(events), len(self._codebook_sizes) + 1, embedding_dim + return embs.view( + len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim + ) + + def get_init_item_embeddings(self, events): + # convert to semantic ids + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(codebook_sizes) + + result = [] + for semantic_id in semantic_ids: + item_repr = [] + for codebook_idx, codebook_id in enumerate(semantic_id): + item_repr.append( + self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + ) + result.append(torch.stack(item_repr)) + + semantic_embeddings = torch.stack(result) + + # get residuals + residual = self._item_id_to_residual[events - 1] + # text_embeddings = self._item_id_to_text_embedding[events - 1] + # residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) + + # get true item embeddings + item_embeddings = torch.cat( + [semantic_embeddings, residual], dim=1 + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + + full_embeddings = item_embeddings.sum(dim=1) + + return item_embeddings, full_embeddings + def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): - return x // (len(self._codebook_sizes) + 1) # 5 5 5 4 4 4 3 3 3 ... - - # TODOPK +1 for residual embedding + return x // ( + len(self._codebook_sizes) + 1 + ) # 5 5 5 5 4 4 4 4 ..., +1 for residual position_embeddings = self._get_position_embeddings( lengths, mask, position_lambda, self._position_embeddings @@ -174,11 +199,43 @@ def position_lambda(x): def codebook_lambda(x): x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 - # 0 1 2 3 5 0 1 2 3 5 ... # len(self._codebook_sizes) for bos, len(self._codebook_sizes) + 1 for residual + # 0 1 2 4 0 1 2 4 ... # len(self._codebook_sizes) + 1 = 4 for residual return x codebook_embeddings = self._get_position_embeddings( lengths, mask, codebook_lambda, self._codebook_embeddings ) - + return position_embeddings + codebook_embeddings + + def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): + batch_size = mask.shape[0] + seq_len = mask.shape[1] + + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=DEVICE)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) + positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) + + positions = positions[positions_mask] # (all_batch_events) + # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ... + + positions = position_lambda(positions) # (all_batch_events) + + # print(f"{positions.tolist()[:20]=}") + + assert (positions >= 0).all() and ( + positions < embedding_layer.num_embeddings + ).all() + + position_embeddings = embedding_layer( + positions + ) # (all_batch_events, embedding_dim) + + position_embeddings, _ = create_masked_tensor( + data=position_embeddings, lengths=lengths + ) # (batch_size, seq_len, embedding_dim) + + return position_embeddings diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 4c8c0374..49ab6074 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -15,7 +15,6 @@ def __init__( rqvae_model, item_id_to_semantic_id, item_id_to_residual, - item_id_to_text_embedding, solver, sequence_prefix, pred_prefix, @@ -81,7 +80,6 @@ def __init__( self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual - self._item_id_to_text_embedding = item_id_to_text_embedding item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) @@ -127,11 +125,6 @@ def init_rqvae(cls, config) -> RqVaeModel: codebook_sizes = rqvae_model.codebook_sizes assert all([book_size == codebook_sizes[0] for book_size in codebook_sizes]) - return rqvae_model - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_model = cls.init_rqvae(config) embs_extractor = torch.load(config["embs_extractor_path"], weights_only=False) embs_extractor = embs_extractor.sort_index() @@ -143,6 +136,12 @@ def create_from_config(cls, config, **kwargs): semantic_ids, residuals = rqvae_model({"embeddings": text_embeddings}) + return rqvae_model, semantic_ids, residuals, item_ids + + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_model, semantic_ids, residuals, item_ids = cls.init_rqvae(config) + solver = CollisionSolver( residual_dim=residuals.shape[1], emb_dim=len(rqvae_model.codebook_sizes), @@ -156,7 +155,6 @@ def create_from_config(cls, config, **kwargs): rqvae_model=rqvae_model, item_id_to_semantic_id=semantic_ids, item_id_to_residual=residuals, - item_id_to_text_embedding=text_embeddings, solver=solver, sequence_prefix=config["sequence_prefix"], pred_prefix=config["predictions_prefix"], @@ -380,8 +378,6 @@ def get_init_item_embeddings(self, events): # get residuals residual = self._item_id_to_residual[events - 1] - # text_embeddings = self._item_id_to_text_embedding[events - 1] - # residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) # get true item embeddings @@ -389,8 +385,6 @@ def get_init_item_embeddings(self, events): [semantic_embeddings, residual], dim=1 ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) - return item_embeddings def _encoder_pos_embeddings(self, lengths, mask): From dd77cdc152594df717155c7e4264eb2299bd4141 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 16 Feb 2025 23:12:08 +0300 Subject: [PATCH 096/175] unfreeze embs --- modeling/models/sasrec_freezed.py | 1 - 1 file changed, 1 deletion(-) diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 6c12caf2..0c910e5d 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -68,7 +68,6 @@ def __init__( # TODOPK ask about freezed masked & padding tokens self._item_embeddings.weight.data.copy_(extended_embeddings) - self._item_embeddings.weight.requires_grad = False @classmethod def create_from_config(cls, config, **kwargs): From ac5f1238d1cf0e555fefcd79efa7bc3f4b3c8573 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Sun, 16 Feb 2025 23:36:57 +0300 Subject: [PATCH 097/175] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B8=D1=82=D1=8C=20Sim?= =?UTF-8?q?plifiedTree=20(=5Fget=5Fids=20=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0?= =?UTF-8?q?=D0=BB=D1=81=D1=8F=20=D0=BC=D0=B5=D0=B4=D0=BB=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B5=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/rqvae_utils/simplified_tree.py | 31 +++++++++++++++++++++++-- modeling/rqvae_utils/tree_comparing.py | 20 ++++++++++++---- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 9c19e3c4..6ef16357 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -18,12 +18,12 @@ def init_tree(self, embeddings: torch.Tensor) -> None: :param embeddings: тензор эмбеддингов для каждого из semantic ids (sem_ids_count, emb_dim) """ assert embeddings.shape[1] == self.emb_dim - self.full_embeddings = embeddings.to(self.device) # (sem_ids_count, emb_dim) + self.full_embeddings = embeddings.to(self.device).float() # (sem_ids_count, emb_dim) self.sem_ids_count = embeddings.shape[0] def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: """ - :param request_sem_ids: батч из sem ids (batch_size, sem_id_len) + :param request_sem_ids: батч sem ids (batch_size, sem_id_len) :param k: количество ближайших элементов которые нужно взять (int) :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) """ @@ -46,3 +46,30 @@ def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :k] # (batch_size, k) return indices + + def _get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: + """ + Альтернатива get_ids, попытка ускорить + :param request_sem_ids: батч sem ids (batch_size, sem_id_len) + :param k: количество ближайших элементов которые нужно взять (int) + :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) + """ + assert request_sem_ids.shape[1] == self.sem_id_len + assert 0 < k <= self.sem_ids_count + request_sem_ids = request_sem_ids.to(self.device) + + index = (request_sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) + + request_embeddings = torch.gather( + input=self.embedding_table.unsqueeze(0).expand(request_sem_ids.shape[0], -1, -1, -1), + dim=2, + index=index + ).sum(1) # (batch_size, emb_dim) + + diff_norm = torch.cdist(self.full_embeddings, request_embeddings.unsqueeze(1), p=2).squeeze( + 1) # (batch_size, sem_ids_count) + + _, indices = torch.topk(diff_norm, k=k, dim=1, largest=False) # (batch_size, k) + return indices.squeeze(-1) diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index 9a9b3822..3ad36f15 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -75,14 +75,14 @@ def stats(query_sem_id, codebook_size, sids, item_ids): q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) total_time = 0 - n_exps = 1 + n_exps = 20 memory_stats(1) for i in range(n_exps): now = time.time() item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) + #stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -92,7 +92,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_ids = simplified_tree.get_ids(q_semantic_ids, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -100,10 +100,20 @@ def stats(query_sem_id, codebook_size, sids, item_ids): for i in range(n_exps): now = time.time() - tree_ids = tree.get_ids(q_semantic_ids, q_residuals, items_to_query) + simplified_tree_ids = simplified_tree._get_ids(q_semantic_ids, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) + #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") memory_stats(4) + + for i in range(n_exps): + now = time.time() + tree_ids = tree.get_ids(q_semantic_ids, q_residuals, items_to_query) + total_time += time.time() - now + #stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) + + print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") + + memory_stats(5) From 228edbdf902243cf567f57c39252c4d22b142865 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Sun, 16 Feb 2025 23:38:27 +0300 Subject: [PATCH 098/175] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20assert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/rqvae_utils/tree.py | 1 - 1 file changed, 1 deletion(-) diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 928533e5..9180325a 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -56,7 +56,6 @@ def get_counts(self, sem_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor] :return: префиксы всех длин sem_ids, количество sem_id на каждой глубине дерева """ assert sem_ids.shape[1] == self.sem_id_len - assert sem_ids.device == self.device offsets = torch.arange(self.sem_id_len + 1, device=self.device) i = torch.arange(self.sem_id_len, device=self.device) From 5a5d039e8153100cc03cc7b56e94fad751c77402 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:10:14 +0300 Subject: [PATCH 099/175] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=BB=20?= =?UTF-8?q?=D0=BA=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BC=D1=83=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D1=83=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D1=8C=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D1=8E=D1=81=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=20=D1=81=D0=BE=D0=BB=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/models/tiger.py | 4 +- modeling/rqvae_utils/collision_solver.py | 133 +++++++++++++++-------- modeling/rqvae_utils/simplified_tree.py | 48 +++++--- modeling/rqvae_utils/tree.py | 4 +- modeling/rqvae_utils/tree_comparing.py | 14 ++- 5 files changed, 133 insertions(+), 70 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 4c8c0374..9522e9ad 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -144,8 +144,8 @@ def create_from_config(cls, config, **kwargs): semantic_ids, residuals = rqvae_model({"embeddings": text_embeddings}) solver = CollisionSolver( - residual_dim=residuals.shape[1], - emb_dim=len(rqvae_model.codebook_sizes), + emb_dim=residuals.shape[1], + sem_id_len=len(rqvae_model.codebook_sizes), codebook_size=rqvae_model.codebook_sizes[0], ) solver.create_query_candidates_dict( diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index 506de2ee..fd71d0fa 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -4,66 +4,89 @@ class CollisionSolver: - def __init__(self, residual_dim, emb_dim, codebook_size, device: torch.device = torch.device('cpu')): + def __init__(self, + emb_dim: int, + sem_id_len: int, + codebook_size: int, + device: torch.device = torch.device('cpu')): """ - :param residual_dim: Длина остатка + :param emb_dim: Длина остатка :param codebook_size: Количество элементов в одном кодбуке - :param emb_dim: Длина semantic_id (без токена решающего коллизии) + :param sem_id_len: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) #тензор группирирующий остатки по semantic_id - self.item_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) #тензор группирируюшщий реальные айди айтемов по semantic_id - self.counts_dict: dict[int, int] = defaultdict(int) #тензор храняющий количество коллизий по semantic_id - self.residual_dim: int = residual_dim #длина остатка - self.emb_dim: int = emb_dim #длина semantic_id - self.codebook_size: int = codebook_size #количество элементов в одном кодбуке - self.device: torch.device = device #девайс - - self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.emb_dim)], dtype=torch.long, device=self.device) #ключ для сопоставления числа каждому semantic_id - - def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: + self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) # тензор группирирующий остатки по semantic_id + self.item_ids_sparse_tensor: torch.Tensor = torch.empty( + (0, 0)) # тензор группирирующий реальные айди айтемов по semantic_id + self.counts_dict: dict[int, int] = defaultdict(int) # тензор храняющий количество коллизий по semantic_id + self.emb_dim: int = emb_dim # длина остатка + self.sem_id_len: int = sem_id_len # длина semantic_id + self.codebook_size: int = codebook_size # количество элементов в одном кодбуке + self.device: torch.device = device # девайс + + self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len)], + dtype=torch.long, + device=self.device) # ключ для сопоставления числа каждому semantic_id + + def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, + residuals: torch.Tensor) -> None: """ Создает разреженный тензор, который содержит сгруппированные по semantic id элементы - :param item_ids: Реальные айди айтемов (пусть будут больше 0) - :param semantic_ids: Тензор всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) - :param residuals: Тензор остатков для каждого semantic_id + :param item_ids: Реальные айди айтемов (пусть будут больше 0) (count,) + :param semantic_ids: Тензор всех semantic_id, полученных из rq-vae (без токенов решающих коллизии) (count, sem_id_len) + :param residuals: Тензор остатков для каждого semantic_id (count, emb_dim) """ residuals_count, residual_length = residuals.shape semantic_ids_count, semantic_id_length = semantic_ids.shape assert residuals_count == semantic_ids_count - assert semantic_id_length == self.emb_dim - assert residual_length == self.residual_dim + assert semantic_id_length == self.sem_id_len + assert residual_length == self.emb_dim assert item_ids.shape == (residuals_count,) item_ids = item_ids.to(self.device) residuals = residuals.to(self.device) semantic_ids = semantic_ids.to(self.device) - unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) - unique_ids, inverse_indices = torch.unique(unique_id, return_inverse=True) - sorted_indices = torch.argsort(inverse_indices) - counts = torch.bincount(inverse_indices) - max_residuals_count = int(counts.max().item()) - max_sid = int(self.codebook_size ** self.emb_dim) - offsets = torch.cumsum(torch.cat((torch.tensor([0], dtype=torch.long, device=self.device), counts[:-1])), dim=0) - row_indices = inverse_indices[sorted_indices] - col_indices = torch.arange(semantic_ids_count) - offsets[row_indices] + unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) # хэши + unique_ids, inverse_indices, counts = torch.unique(unique_id, return_inverse=True, return_counts=True) + sorted_indices = torch.argsort(inverse_indices) # сортированные индексы чтобы совпадающие хэши шли подряд + + row_indices = inverse_indices[sorted_indices] # отсортированные хэши + + offsets = torch.cumsum(counts, dim=0) - counts + col_indices = (torch.arange(semantic_ids_count) + - offsets[row_indices]) # индексы от 0 до k внутри каждого набора из совпадающих хэшей + indices = torch.stack([ unique_ids[row_indices], col_indices - ], dim=0) + ], + dim=0) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша - self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], size=(max_sid, max_residuals_count, self.residual_dim), device=self.device) - self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) + max_residuals_count = int(counts.max().item()) # максимальное количество коллизий для одного sem_id + max_sid = int(self.codebook_size ** self.sem_id_len) # максимальный хэш sem_id который может быть - item_id_indices: torch.Tensor = torch.stack((unique_ids[row_indices], col_indices)) + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], + size=(max_sid, max_residuals_count, self.emb_dim), + device=self.device) # (max_sid, max_residuals_count, emb_dim) - self.item_ids_sparse_tensor = torch.sparse_coo_tensor(item_id_indices, item_ids[sorted_indices], size=(max_sid, max_residuals_count), device=self.device, dtype=torch.int16) + self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) # sid -> collision count + + self.item_ids_sparse_tensor = torch.sparse_coo_tensor(indices, item_ids[sorted_indices], + size=(max_sid, max_residuals_count), device=self.device, + dtype=torch.int32) # (max_sid, max_residuals_count) def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: - assert semantic_ids.shape[1] == self.emb_dim + """ + :param semantic_ids батч из semantic ids (batch_size, sem_id_len) + + :return: + Возвращает тензор эмбеддингов для батча semantic_ids, размерность (batch_size, max_residuals_count, emb_dim) + Возвращает маску для этого тензора, размерность (batch_size, max_residuals_count, emb_dim) + """ + assert semantic_ids.shape[1] == self.sem_id_len semantic_ids = semantic_ids.to(self.device) unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) @@ -76,16 +99,16 @@ def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tupl def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: """ - :param semantic_id: [batch_size, emb_dim] semantic ids (без токена решающего коллизии) - :param pred_residuals: [batch_size, residual_dim] предсказанные остатки + :param semantic_ids: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) + :param pred_residuals: [batch_size, emb_dim] предсказанные остатки :return: Словарь с ключами: - 'pred_scores_mask': [batch_size, max_collision_count] маска существующих значений scores для предсказанных остатков - 'pred_scores': [batch_size, max_collision_count] софтмакс для каждого из кандидатов для предсказанных остатков - 'pred_item_ids': [batch_size] реальные айди айтемов для предсказанных остатков """ - assert semantic_ids.shape[1] == self.emb_dim - assert pred_residuals.shape[1] == self.residual_dim + assert semantic_ids.shape[1] == self.sem_id_len + assert pred_residuals.shape[1] == self.emb_dim assert semantic_ids.shape[0] == pred_residuals.shape[0] semantic_ids = semantic_ids.to(self.device) @@ -97,7 +120,8 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens pred_scores = torch.einsum('njk,nk->nj', candidates, pred_residuals).masked_fill(~mask, -torch.inf) pred_indices = torch.argmax(pred_scores, dim=1) - pred_item_ids = torch.stack([self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) + pred_item_ids = torch.stack( + [self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) return { "pred_scores_mask": mask, @@ -105,16 +129,17 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens "pred_item_ids": pred_item_ids } - def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[str, torch.Tensor]: + def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[ + str, torch.Tensor]: """ - :param semantic_id: [batch_size, emb_dim] semantic ids (без токена решающего коллизии) - :param true_residuals: [batch_size, residual_dim] реальные остатки + :param semantic_ids: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) + :param true_residuals: [batch_size, emb_dim] реальные остатки :return: Словарь с ключами: - 'true_dedup_tokens': [batch_size] токены решающие коллизии для реальных остатков """ - assert semantic_ids.shape[1] == self.emb_dim - assert true_residuals.shape[1] == self.residual_dim + assert semantic_ids.shape[1] == self.sem_id_len + assert true_residuals.shape[1] == self.emb_dim assert semantic_ids.shape[0] == true_residuals.shape[0] semantic_ids = semantic_ids.to(self.device) @@ -130,3 +155,23 @@ def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torc return { "true_dedup_tokens": true_dedup_tokens } + + def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: + """ + :param semantic_id: [batch_size, sem_id_len] semantic ids (без токенов решающего коллизии) + :param dedup_tokens: [batch_size] токены решающие коллизии + + :return: item_ids : [batch_size] реальные айди айтемов + """ + assert semantic_ids.shape[1] == self.sem_id_len + assert dedup_tokens.shape == (semantic_ids.shape[0],) + + semantic_ids = semantic_ids.to(self.device) + dedup_tokens = dedup_tokens.to(self.device) + + unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + + item_ids = torch.stack( + [self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) + + return item_ids diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 6ef16357..2fb7a627 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -13,15 +13,37 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = torch.d self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) - def init_tree(self, embeddings: torch.Tensor) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: """ - :param embeddings: тензор эмбеддингов для каждого из semantic ids (sem_ids_count, emb_dim) + :param semantic_ids: (sem_ids_count, sem_id_len) + :param residuals: (sem_ids_count, emb_dim) """ - assert embeddings.shape[1] == self.emb_dim - self.full_embeddings = embeddings.to(self.device).float() # (sem_ids_count, emb_dim) - self.sem_ids_count = embeddings.shape[0] + self.sem_ids_count = semantic_ids.shape[0] + assert residuals.shape == (self.sem_ids_count, self.emb_dim) + assert semantic_ids.shape == (self.sem_ids_count, self.sem_id_len) - def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: + semantic_ids = semantic_ids.to(self.device) + residuals = residuals.to(self.device).float() + self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals + + def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: + """ + :param sem_ids: набор из sem ids (count, sem_id_len) + :return: эмбеддинг для каждого sem_id из набора (count, emb_dim) + """ + assert sem_ids.shape[1] == self.sem_id_len + sem_ids = sem_ids.to(self.device) + + expanded_emb_table = (self.embedding_table.unsqueeze(0) + .expand(sem_ids.shape[0], -1, -1, -1)) # (count, sem_id_len, codebook_size, emb_dim) + + index = (sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (count, sem_id_len, 1, emb_dim) + + return torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) # (count, emb_dim) + + def query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: """ :param request_sem_ids: батч sem ids (batch_size, sem_id_len) :param k: количество ближайших элементов которые нужно взять (int) @@ -29,17 +51,11 @@ def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: """ assert request_sem_ids.shape[1] == self.sem_id_len assert 0 < k <= self.sem_ids_count - request_sem_ids = request_sem_ids.to(self.device) - - expanded_emb_table = (self.embedding_table.unsqueeze(0) - .expand(request_sem_ids.shape[0], -1, -1, - -1)) # (batch_size, sem_id_len, codebook_size, emb_dim) - index = (request_sem_ids.unsqueeze(-1) - .expand(-1, -1, self.emb_dim) - .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) + request_sem_ids = request_sem_ids.to(self.device) + request_embeddings = self.calculate_full(request_sem_ids) # (batch_size, emb_dim) - request_embeddings = (torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1) + request_embeddings = (request_embeddings.unsqueeze(1) .expand(-1, self.sem_ids_count, -1)) # (batch_size, sem_ids_count, emb_dim) diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) @@ -47,7 +63,7 @@ def get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :k] # (batch_size, k) return indices - def _get_ids(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: + def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: """ Альтернатива get_ids, попытка ускорить :param request_sem_ids: батч sem ids (batch_size, sem_id_len) diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 9180325a..fe175f9b 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -19,7 +19,7 @@ def __init__(self, embedding_table, device: torch.device = DEVICE): self.sem_ids_embs: torch.Tensor = torch.empty((0, 0)) self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) - def init_tree(self, semantic_ids, residuals): + def build_tree_structure(self, semantic_ids, residuals): """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) @@ -164,7 +164,7 @@ def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) - def get_ids(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, k: int) -> torch.Tensor: + def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, k: int) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index 3ad36f15..07e1f102 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -61,14 +61,16 @@ def stats(query_sem_id, codebook_size, sids, item_ids): print(f"Time for trie init: {(time.time() - now) * 1000:.2f} ms") now = time.time() - tree.init_tree(semantic_ids, residuals) + tree.build_tree_structure(semantic_ids, residuals) print(f"Time for tree init: {(time.time() - now) * 1000:.2f} ms") now = time.time() - full_embeddings = tree.calculate_full(semantic_ids, torch.zeros_like(residuals)).sum(1) - simplified_tree.init_tree(full_embeddings) + simplified_tree.build_tree_structure(semantic_ids, residuals) print(f"Time for simplified tree init: {(time.time() - now) * 1000:.2f} ms") + full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) + print(torch.all((full_embeddings == simplified_tree.full_embeddings) == True)) + items_to_query = 20 batch_size = 256 q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE) @@ -90,7 +92,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): for i in range(n_exps): now = time.time() - simplified_tree_ids = simplified_tree.get_ids(q_semantic_ids, items_to_query) + simplified_tree_ids = simplified_tree.query(q_semantic_ids, items_to_query) total_time += time.time() - now #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) @@ -100,7 +102,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): for i in range(n_exps): now = time.time() - simplified_tree_ids = simplified_tree._get_ids(q_semantic_ids, items_to_query) + simplified_tree_ids = simplified_tree._query(q_semantic_ids, items_to_query) total_time += time.time() - now #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) @@ -110,7 +112,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): for i in range(n_exps): now = time.time() - tree_ids = tree.get_ids(q_semantic_ids, q_residuals, items_to_query) + tree_ids = tree.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now #stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) From c9a096060d0f92ef87041ef39b15342d17c080fc Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:32:35 +0300 Subject: [PATCH 100/175] =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20trie=20=D0=BD=D0=B0=20simplified=20tree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/models/tiger.py | 4 ++-- modeling/rqvae_utils/simplified_tree.py | 18 +++++++++++------- modeling/rqvae_utils/tree.py | 21 +++++++++++++-------- modeling/rqvae_utils/tree_comparing.py | 19 ++++++++++--------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 9522e9ad..40fb36e9 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -2,7 +2,7 @@ import torch from models.base import SequentialTorchModel -from rqvae_utils import CollisionSolver, Trie +from rqvae_utils import CollisionSolver, SimplifiedTree from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function @@ -87,7 +87,7 @@ def __init__( self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = Trie(rqvae_model) + self._trie = SimplifiedTree(rqvae_model) self._trie.build_tree_structure( item_id_to_semantic_id.to(DEVICE), diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 2fb7a627..76f75f2f 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -12,19 +12,23 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = torch.d self.device: torch.device = device self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) + self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor) -> None: """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) + :param item_ids: (sem_ids_count,) """ self.sem_ids_count = semantic_ids.shape[0] assert residuals.shape == (self.sem_ids_count, self.emb_dim) assert semantic_ids.shape == (self.sem_ids_count, self.sem_id_len) + assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) residuals = residuals.to(self.device).float() self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals + self.item_ids = item_ids def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: """ @@ -43,14 +47,14 @@ def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: return torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) # (count, emb_dim) - def query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: + def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Tensor: """ :param request_sem_ids: батч sem ids (batch_size, sem_id_len) - :param k: количество ближайших элементов которые нужно взять (int) + :param items_to_query: количество ближайших элементов которые нужно взять (int) :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) """ assert request_sem_ids.shape[1] == self.sem_id_len - assert 0 < k <= self.sem_ids_count + assert 0 < items_to_query <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) request_embeddings = self.calculate_full(request_sem_ids) # (batch_size, emb_dim) @@ -60,8 +64,8 @@ def query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) - indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :k] # (batch_size, k) - return indices + indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :items_to_query] # (batch_size, k) + return self.item_ids[indices] def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: """ @@ -88,4 +92,4 @@ def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: 1) # (batch_size, sem_ids_count) _, indices = torch.topk(diff_norm, k=k, dim=1, largest=False) # (batch_size, k) - return indices.squeeze(-1) + return self.item_ids[indices.squeeze(-1)] diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index fe175f9b..5f125012 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -18,18 +18,22 @@ def __init__(self, embedding_table, device: torch.device = DEVICE): self.sem_ids_count: int = -1 self.sem_ids_embs: torch.Tensor = torch.empty((0, 0)) self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) + self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids, residuals): + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor): """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) + :param item_ids: (sem_ids_count,) """ + self.sem_ids_count = semantic_ids.shape[0] assert semantic_ids.shape[0] == residuals.shape[0] assert semantic_ids.shape[1] == self.sem_id_len assert residuals.shape[1] == self.emb_dim + assert item_ids.shape == (self.sem_ids_count,) - self.sem_ids_count = semantic_ids.shape[0] + self.item_ids = item_ids self.key = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len - 1, -1, -1)], dtype=torch.long, device=self.device) self.sids = self.get_sids(semantic_ids.float()) # (sem_id_len, ) @@ -164,20 +168,20 @@ def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) - def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, k: int) -> torch.Tensor: + def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, items_to_query: int) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) - :param k: количество ближайших элементов которые нужно взять int + :param items_to_query: количество ближайших элементов которые нужно взять int :return: тензор индексов ближайших k элементов из всех semantic_ids для каждого sem_id из батча (batch_size, k) """ assert request_sem_ids.shape[0] == request_residuals.shape[0] assert request_sem_ids.shape[1] == self.sem_id_len assert request_residuals.shape[1] == self.emb_dim - assert 0 <= k < self.sem_ids_count + assert 0 <= items_to_query < self.sem_ids_count - ol, ol_mask = self.calc_ol(request_sem_ids, k) - il, il_mask = self.calc_il(request_sem_ids, k) + ol, ol_mask = self.calc_ol(request_sem_ids, items_to_query) + il, il_mask = self.calc_il(request_sem_ids, items_to_query) il_mask = il_mask.detach().cpu() ol_mask = ol_mask.detach().cpu() @@ -200,4 +204,5 @@ def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, ~torch.cat([torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1), ~torch.cat([il_mask, ol_mask], dim=1))) - return (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :k] # (batch_size, k) + ids = (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :items_to_query] # (batch_size, k) + return self.item_ids[ids] diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index 07e1f102..f18c73a7 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -54,18 +54,19 @@ def stats(query_sem_id, codebook_size, sids, item_ids): K = 3 semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64).to(DEVICE) - residuals = torch.randn(N, embedding_dim).to(DEVICE) + residuals = torch.zeros_like(torch.randn(N, embedding_dim)).to(DEVICE) + item_ids = torch.arange(5, N + 5).to(DEVICE) now = time.time() - trie.build_tree_structure(semantic_ids, residuals, torch.arange(N).to(DEVICE)) + trie.build_tree_structure(semantic_ids, residuals, item_ids) print(f"Time for trie init: {(time.time() - now) * 1000:.2f} ms") now = time.time() - tree.build_tree_structure(semantic_ids, residuals) + tree.build_tree_structure(semantic_ids, residuals, item_ids) print(f"Time for tree init: {(time.time() - now) * 1000:.2f} ms") now = time.time() - simplified_tree.build_tree_structure(semantic_ids, residuals) + simplified_tree.build_tree_structure(semantic_ids, residuals, item_ids) print(f"Time for simplified tree init: {(time.time() - now) * 1000:.2f} ms") full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) @@ -77,14 +78,14 @@ def stats(query_sem_id, codebook_size, sids, item_ids): q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) total_time = 0 - n_exps = 20 + n_exps = 1 memory_stats(1) for i in range(n_exps): now = time.time() item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now - #stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) + stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -94,7 +95,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_ids = simplified_tree.query(q_semantic_ids, items_to_query) total_time += time.time() - now - #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -104,7 +105,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_ids = simplified_tree._query(q_semantic_ids, items_to_query) total_time += time.time() - now - #stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -114,7 +115,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() tree_ids = tree.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now - #stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) + stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") From 407be2bd80829016e719d1a9cffdc3e796838652 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:54:49 +0300 Subject: [PATCH 101/175] =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BD=D0=B5=20=D1=83=D1=87?= =?UTF-8?q?=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/models/tiger.py | 3 ++- modeling/rqvae_utils/simplified_tree.py | 5 +++-- modeling/rqvae_utils/tree_comparing.py | 20 +++++++++++++------- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 40fb36e9..feed89a7 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -93,6 +93,7 @@ def __init__( item_id_to_semantic_id.to(DEVICE), item_id_to_residual.to(DEVICE), item_ids.to(DEVICE), + sum_with_residuals=False ) self._bos_token_id = self._codebook_sizes[0] @@ -234,7 +235,7 @@ def forward(self, inputs): residuals = tgt_embeddings[:, -1, :] semantic_ids = semantic_ids.to(torch.int64) - item_ids = self._trie.query(semantic_ids, residuals, items_to_query=20) + item_ids = self._trie.query(semantic_ids, items_to_query=20) return item_ids diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 76f75f2f..34a0b69e 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -14,8 +14,9 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = torch.d self.full_embeddings: torch.Tensor = torch.empty((0, 0)) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, sum_with_residuals: bool = True) -> None: """ + :param sum_with_residuals: флаг, отвечающий за то учитывать ли остатки при выборе кандидатов :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) :param item_ids: (sem_ids_count,) @@ -26,7 +27,7 @@ def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tens assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) - residuals = residuals.to(self.device).float() + residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, device=self.device, dtype=torch.float) self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals self.item_ids = item_ids diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index f18c73a7..2dbcabd4 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -26,7 +26,7 @@ def calc_sid(sid, codebook_size): def stats(query_sem_id, codebook_size, sids, item_ids): for sem_id, ids in zip(query_sem_id.tolist(), item_ids.tolist()): print(calc_sid(torch.tensor(sem_id), codebook_size)) - print(sids[torch.tensor(ids)]) + print(sids[torch.tensor(ids)][:10]) if __name__ == "__main__": @@ -48,14 +48,16 @@ def stats(query_sem_id, codebook_size, sids, item_ids): trie = Trie(rqvae_model) tree = Tree(emb_table, DEVICE) simplified_tree = SimplifiedTree(emb_table, DEVICE) + simplified_tree_wr = SimplifiedTree(emb_table, DEVICE) alphabet_size = 10 N = 12101 K = 3 semantic_ids = torch.randint(0, alphabet_size, (N, K), dtype=torch.int64).to(DEVICE) - residuals = torch.zeros_like(torch.randn(N, embedding_dim)).to(DEVICE) + residuals = torch.randn(N, embedding_dim).to(DEVICE) item_ids = torch.arange(5, N + 5).to(DEVICE) + print(residuals[0]) now = time.time() trie.build_tree_structure(semantic_ids, residuals, item_ids) @@ -69,6 +71,10 @@ def stats(query_sem_id, codebook_size, sids, item_ids): simplified_tree.build_tree_structure(semantic_ids, residuals, item_ids) print(f"Time for simplified tree init: {(time.time() - now) * 1000:.2f} ms") + now = time.time() + simplified_tree_wr.build_tree_structure(semantic_ids, residuals, item_ids, False) + print(f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms") + full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) print(torch.all((full_embeddings == simplified_tree.full_embeddings) == True)) @@ -85,7 +91,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() item_ids = trie.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, item_ids[:3]) + stats(q_semantic_ids[:1], 256, tree.sids, item_ids[:1]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -95,7 +101,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_ids = simplified_tree.query(q_semantic_ids, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + stats(q_semantic_ids[:1], 256, tree.sids, simplified_tree_ids[:1]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -103,9 +109,9 @@ def stats(query_sem_id, codebook_size, sids, item_ids): for i in range(n_exps): now = time.time() - simplified_tree_ids = simplified_tree._query(q_semantic_ids, items_to_query) + simplified_tree_ids = simplified_tree_wr.query(q_semantic_ids, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, simplified_tree_ids[:3]) + stats(q_semantic_ids[:1], 256, tree.sids, simplified_tree_ids[:1]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") @@ -115,7 +121,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() tree_ids = tree.query(q_semantic_ids, q_residuals, items_to_query) total_time += time.time() - now - stats(q_semantic_ids[:3], 256, tree.sids, tree_ids[:3]) + stats(q_semantic_ids[:1], 256, tree.sids, tree_ids[:1]) print(f"Time per query: {total_time / n_exps * 1000:.2f} ms") From fd89947acb21e2b0a68a853345f7741a0208f456 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 01:08:08 +0300 Subject: [PATCH 102/175] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=20=D0=B8=D0=BD=D0=B8=D1=82=D0=B5=20=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D1=8C=D0=B5=D0=B2=20rqvae=20=D0=B0=20=D0=BD=D0=B5?= =?UTF-8?q?=20emb=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/rqvae_utils/simplified_tree.py | 22 +++++++++++++++------- modeling/rqvae_utils/tree.py | 18 +++++++++++------- modeling/rqvae_utils/tree_comparing.py | 6 +++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 34a0b69e..77ddb764 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -1,20 +1,26 @@ import torch +from models import RqVaeModel +from utils import DEVICE + class SimplifiedTree: - def __init__(self, embedding_table: torch.Tensor, device: torch.device = torch.device('cpu')): + def __init__(self, rqvae_model: RqVaeModel, device: torch.device = DEVICE): """ - :param embedding_table: Тензор из RQ-VAE # (semantic_id_len, codebook_size, emb_dim) - :param device: Устройство + :param rqvae_model: обученная модель rq-vae + :param device: устройство """ - self.embedding_table: torch.Tensor = embedding_table.to(device) # (semantic_id_len, codebook_size, emb_dim) - self.sem_id_len, self.codebook_size, self.emb_dim = embedding_table.shape self.device: torch.device = device + self.embedding_table: torch.Tensor = torch.stack( + [cb for cb in rqvae_model.codebooks] + ).to(self.device) # (semantic_id_len, codebook_size, emb_dim + self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, sum_with_residuals: bool = True) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, + sum_with_residuals: bool = True) -> None: """ :param sum_with_residuals: флаг, отвечающий за то учитывать ли остатки при выборе кандидатов :param semantic_ids: (sem_ids_count, sem_id_len) @@ -27,7 +33,9 @@ def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tens assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) - residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, device=self.device, dtype=torch.float) + residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, + device=self.device, + dtype=torch.float) self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals self.item_ids = item_ids diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 5f125012..433c870e 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -1,18 +1,21 @@ import numpy as np import torch +from models import RqVaeModel from utils import DEVICE class Tree: - def __init__(self, embedding_table, device: torch.device = DEVICE): + def __init__(self, rqvae_model: RqVaeModel, device: torch.device = DEVICE): """ - :param embedding_table: Тензор из RQ-VAE # (semantic_id_len, codebook_size, emb_dim) - :param device: Устройство + :param rqvae_model: обученная модель rq-vae + :param device: устройство """ - self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) - self.sem_id_len, self.codebook_size, self.emb_dim = embedding_table.shape self.device: torch.device = device + self.embedding_table: torch.Tensor = torch.stack( + [cb for cb in rqvae_model.codebooks] + ).to(self.device) # (semantic_id_len, codebook_size, emb_dim) + self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.key: torch.Tensor = torch.empty((0, 0)) self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) self.sem_ids_count: int = -1 @@ -161,14 +164,15 @@ def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels assert decomposed_embeddings.shape == (self.sem_ids_count, self.sem_id_len + 1, self.emb_dim) mask = (torch.arange(1, self.sem_id_len + 2, device=self.device) >= - torch.arange(self.sem_id_len + 2, 0, -1,device=self.device).unsqueeze(1)).float() + torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1)).float() sids_mask = mask[levels + 1].unsqueeze(-1) # (batch_size, sem_id_len + 1, 1) return torch.einsum('nld,bld->bnd', decomposed_embeddings, sids_mask) # (batch_size, sem_ids_count, emb_dim) def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) - def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, items_to_query: int) -> torch.Tensor: + def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, + items_to_query: int) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index 2dbcabd4..3f1d3f38 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -46,9 +46,9 @@ def stats(query_sem_id, codebook_size, sids, item_ids): ).to(DEVICE) trie = Trie(rqvae_model) - tree = Tree(emb_table, DEVICE) - simplified_tree = SimplifiedTree(emb_table, DEVICE) - simplified_tree_wr = SimplifiedTree(emb_table, DEVICE) + tree = Tree(rqvae_model, DEVICE) + simplified_tree = SimplifiedTree(rqvae_model, DEVICE) + simplified_tree_wr = SimplifiedTree(rqvae_model, DEVICE) alphabet_size = 10 N = 12101 From 1e13ae3e5f8ad1ac91f16fc45d7ac71466d0c030 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 13:35:00 +0300 Subject: [PATCH 103/175] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=20=D1=81=20?= =?UTF-8?q?=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC=20=D0=B4=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/train/tiger_train_config.json | 2 +- configs/train/tiger_wat_train_config.json | 180 +++++++++ modeling/models/__init__.py | 1 + modeling/models/tiger.py | 2 +- modeling/models/tigerWithAnotherTree.py | 460 ++++++++++++++++++++++ 5 files changed, 643 insertions(+), 2 deletions(-) create mode 100644 configs/train/tiger_wat_train_config.json create mode 100644 modeling/models/tigerWithAnotherTree.py diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 2d3369c5..e357b294 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,7 +1,7 @@ { "experiment_name": "tiger", "best_metric": "validation/ndcg@20", - "train_epochs_num": 100, + "train_epochs_num": 50, "dataset": { "type": "sequence_full", "path_to_data_dir": "../data", diff --git a/configs/train/tiger_wat_train_config.json b/configs/train/tiger_wat_train_config.json new file mode 100644 index 00000000..a7eabbac --- /dev/null +++ b/configs/train/tiger_wat_train_config.json @@ -0,0 +1,180 @@ +{ + "experiment_name": "tigerWithAnotherTree", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 50, + "dataset": { + "type": "sequence_full", + "path_to_data_dir": "../data", + "name": "Beauty", + "max_sequence_length": 50, + "samplers": { + "type": "last_item_prediction", + "negative_sampler_type": "random" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "tigerWithAnotherTree", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", + "sequence_prefix": "item", + "predictions_prefix": "logits", + "positive_prefix": "labels", + "labels_prefix": "labels", + "embedding_dim": 64, + "num_heads": 2, + "num_encoder_layers": 2, + "num_decoder_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "sample_logsoftmax", + "predictions_prefix": "logits", + "labels": "semantic.labels", + "weight": 1.0, + "output_prefix": "semantic_loss" + }, + { + "type": "sample_logsoftmax", + "predictions_prefix": "dedup.logits", + "labels": "dedup.labels", + "weight": 1.0, + "output_prefix": "dedup_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 64, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 256, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } +} diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index b9678e2e..c5dc42e2 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -18,3 +18,4 @@ from .s3rec import S3RecModel from .rqvae import RqVaeModel from .tiger import TigerModel +from .tigerWithAnotherTree import TigerModel2 diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index feed89a7..49d51706 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -93,7 +93,7 @@ def __init__( item_id_to_semantic_id.to(DEVICE), item_id_to_residual.to(DEVICE), item_ids.to(DEVICE), - sum_with_residuals=False + sum_with_residuals=True ) self._bos_token_id = self._codebook_sizes[0] diff --git a/modeling/models/tigerWithAnotherTree.py b/modeling/models/tigerWithAnotherTree.py new file mode 100644 index 00000000..1883b5b9 --- /dev/null +++ b/modeling/models/tigerWithAnotherTree.py @@ -0,0 +1,460 @@ +import json + +import torch +from models.base import SequentialTorchModel +from rqvae_utils import CollisionSolver, Tree +from torch import nn +from utils import DEVICE, create_masked_tensor, get_activation_function + +from .rqvae import RqVaeModel + + +class TigerModel2(SequentialTorchModel, config_name="tigerWithAnotherTree"): + def __init__( + self, + rqvae_model, + item_id_to_semantic_id, + item_id_to_residual, + item_id_to_text_embedding, + solver, + sequence_prefix, + pred_prefix, + positive_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_encoder_layers, + num_decoder_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_encoder_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True, + ) + + self._sequence_prefix = sequence_prefix + self._pred_prefix = pred_prefix + self._positive_prefix = positive_prefix + self._labels_prefix = labels_prefix + + transformer_decoder_layer = nn.TransformerDecoderLayer( + d_model=embedding_dim, + nhead=num_heads, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=get_activation_function(activation), + layer_norm_eps=layer_norm_eps, + batch_first=True, + ) + + self._decoder = nn.TransformerDecoder( + transformer_decoder_layer, num_decoder_layers + ) + + self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) + self._decoder_dropout = nn.Dropout(dropout) + + self._solver: CollisionSolver = solver + + self._codebook_sizes = rqvae_model.codebook_sizes + + self._codebook_item_embeddings_stacked = torch.stack( + [codebook for codebook in rqvae_model.codebooks] + ) + self._codebook_item_embeddings_stacked.requires_grad = ( + False # TODOPK maybe unfreeeze later + ) + + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + self._item_id_to_text_embedding = item_id_to_text_embedding + + item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) + + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) + + self._trie = Tree(rqvae_model) + + self._trie.build_tree_structure( + item_id_to_semantic_id.to(DEVICE), + item_id_to_residual.to(DEVICE), + item_ids.to(DEVICE) + ) + + self._bos_token_id = self._codebook_sizes[0] + self._bos_weight = nn.Parameter( + torch.nn.init.trunc_normal_( + torch.zeros(embedding_dim), + std=initializer_range, + a=-2 * initializer_range, + b=2 * initializer_range, + ) + ) + + self._codebook_embeddings = nn.Embedding( + num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim + ) # + 2 for bos token & residual + + self._init_weights(initializer_range) + + @classmethod + def init_rqvae(cls, config) -> RqVaeModel: + rqvae_config = json.load(open(config["rqvae_train_config_path"])) + rqvae_config["model"]["should_init_codebooks"] = False + + rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) + rqvae_model.load_state_dict( + torch.load(config["rqvae_checkpoint_path"], weights_only=True) + ) + rqvae_model.eval() + for param in rqvae_model.parameters(): + param.requires_grad = False + + codebook_sizes = rqvae_model.codebook_sizes + assert all([book_size == codebook_sizes[0] for book_size in codebook_sizes]) + + return rqvae_model + + @classmethod + def create_from_config(cls, config, **kwargs): + rqvae_model = cls.init_rqvae(config) + embs_extractor = torch.load(config["embs_extractor_path"], weights_only=False) + + embs_extractor = embs_extractor.sort_index() + + item_ids = embs_extractor.index.tolist() + assert item_ids == list(range(1, len(item_ids) + 1)) + + text_embeddings = torch.stack(embs_extractor["embeddings"].tolist()).to(DEVICE) + + semantic_ids, residuals = rqvae_model({"embeddings": text_embeddings}) + + solver = CollisionSolver( + emb_dim=residuals.shape[1], + sem_id_len=len(rqvae_model.codebook_sizes), + codebook_size=rqvae_model.codebook_sizes[0], + ) + solver.create_query_candidates_dict( + torch.tensor(item_ids), semantic_ids, residuals + ) + + return cls( + rqvae_model=rqvae_model, + item_id_to_semantic_id=semantic_ids, + item_id_to_residual=residuals, + item_id_to_text_embedding=text_embeddings, + solver=solver, + sequence_prefix=config["sequence_prefix"], + pred_prefix=config["predictions_prefix"], + positive_prefix=config["positive_prefix"], + labels_prefix=config["labels_prefix"], + num_items=rqvae_model.codebook_sizes[0], # unused + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_encoder_layers=config["num_encoder_layers"], + num_decoder_layers=config["num_decoder_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + ) + + # semantic ids come with dedup token + def forward(self, inputs): + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) + + all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) + encoder_embeddings, encoder_mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) + + if self.training: + label_events = inputs["{}.ids".format(self._positive_prefix)] + label_lengths = inputs["{}.length".format(self._positive_prefix)] + + label_lengths = label_lengths * ( + len(self._codebook_sizes) + 1 + ) # TODOPK bos prepending + tgt_embeddings = self.get_item_embeddings( + label_events + ) # (all_batch_events, embedding_dim) + + decoder_outputs = self._apply_decoder( + tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask + ) # (batch_size, label_len, embedding_dim) + + decoder_prefix_scores = torch.einsum( + "bsd,scd->bsc", + decoder_outputs[:, :-1, :], + self._codebook_item_embeddings_stacked, + ) + + decoder_output_residual = decoder_outputs[:, -1, :] + + semantic_ids = self._item_id_to_semantic_id[ + label_events - 1 + ] # len(events), len(codebook_sizes) + true_residuals = self._item_id_to_residual[label_events - 1] + + true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) + pred_info = self._solver.get_pred_scores( + semantic_ids, decoder_output_residual + ) + + return { + "logits": decoder_prefix_scores, + "semantic.labels": semantic_ids, + "dedup.logits": pred_info["pred_scores"], + "dedup.labels": true_info["true_dedup_tokens"], + } + else: + semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( + encoder_embeddings, encoder_mask + ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + + residuals = tgt_embeddings[:, -1, :] + semantic_ids = semantic_ids.to(torch.int64) + + item_ids = self._trie.query(semantic_ids, residuals, items_to_query=20) + + return item_ids + + def _apply_decoder( + self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask + ): + tgt_embeddings, tgt_mask = create_masked_tensor( + data=tgt_embeddings, lengths=label_lengths + ) # (batch_size, dec_seq_len, embedding_dim), (batch_size, dec_seq_len) + + batch_size = tgt_embeddings.shape[0] + bos_embeddings = self._bos_weight.unsqueeze(0).expand( + batch_size, 1, -1 + ) # (batch_size, 1, embedding_dim) + + tgt_embeddings = torch.cat( + [bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1 + ) # remove residual by using :-1 + + label_len = tgt_mask.shape[1] + + assert label_len == len(self._codebook_sizes) + 1 + + position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) + assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) + + tgt_embeddings = tgt_embeddings + position_embeddings + + tgt_embeddings = self._decoder_layernorm( + tgt_embeddings + ) # (batch_size, dec_seq_len, embedding_dim) + tgt_embeddings = self._decoder_dropout( + tgt_embeddings + ) # (batch_size, dec_seq_len, embedding_dim) + + tgt_embeddings[~tgt_mask] = 0 + + causal_mask = ( + torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) + ) # (dec_seq_len, dec_seq_len) + + decoder_outputs = self._decoder( + tgt=tgt_embeddings, + memory=encoder_embeddings, + tgt_mask=~causal_mask, + memory_key_padding_mask=~encoder_mask, + ) # (batch_size, dec_seq_len, embedding_dim) + + return decoder_outputs + + def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): + batch_size = encoder_embeddings.shape[0] + embedding_dim = encoder_embeddings.shape[2] + + tgt_embeddings = ( + self._bos_weight.unsqueeze(0) + .unsqueeze(0) + .expand(batch_size, 1, embedding_dim) + ) + + semantic_ids = torch.tensor([], device=DEVICE) + + for step in range(len(self._codebook_sizes) + 1): # semantic_id_seq + residual + if step == 0: + indexes = torch.full( + (batch_size, 1), len(self._codebook_sizes), device=DEVICE + ) # len(self._codebook_sizes) for bos + else: + indexes = torch.cat( + [indexes, torch.full((batch_size, 1), step - 1, device=DEVICE)], + dim=1, + ) + + position_embeddings = self._codebook_embeddings(indexes.view(-1)) + + curr_embeddings = tgt_embeddings + position_embeddings.view( + batch_size, step + 1, embedding_dim + ) + + curr_embeddings = self._decoder_layernorm(curr_embeddings) + curr_embeddings = self._decoder_dropout(curr_embeddings) + + decoder_output = self._decoder( + tgt=curr_embeddings, + memory=encoder_embeddings, + memory_key_padding_mask=~encoder_mask, + ) + + next_token_embedding = decoder_output[ + :, -1, : + ] # batch_size x embedding_dim + + # TODOPK ask if we take last + # torch.Size([256, 1, 64]) + # torch.Size([256, 2, 64]) + # torch.Size([256, 3, 64]) + # torch.Size([256, 4, 64]) + + if step < len(self._codebook_sizes): + codebook = self._codebook_item_embeddings_stacked[ + step + ] # len(codebook_sizes) x embedding_dim + closest_semantic_ids = torch.argmax( + torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 + ) # batch_size x 1 + semantic_ids = torch.cat( + [semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1 + ) # batch_size x (step + 1) + next_token_embedding = codebook[ + closest_semantic_ids + ] # batch_size x embedding_dim + + tgt_embeddings = torch.cat( + [tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1 + ) + + return semantic_ids, tgt_embeddings + + def get_item_embeddings(self, events): + embs = self._item_id_to_semantic_embedding[ + events - 1 + ] # len(events), len(self._codebook_sizes) + 1, embedding_dim + return embs.view( + len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim + ) + + def get_init_item_embeddings(self, events): + # convert to semantic ids + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(codebook_sizes) + + result = [] + for semantic_id in semantic_ids: + item_repr = [] + for codebook_idx, codebook_id in enumerate(semantic_id): + item_repr.append( + self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + ) + result.append(torch.stack(item_repr)) + + semantic_embeddings = torch.stack(result) + + # get residuals + residual = self._item_id_to_residual[events - 1] + # text_embeddings = self._item_id_to_text_embedding[events - 1] + # residual = text_embeddings - semantic_embeddings.sum(dim=1) + residual = residual.unsqueeze(1) + + # get true item embeddings + item_embeddings = torch.cat( + [semantic_embeddings, residual], dim=1 + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + + # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) + + return item_embeddings + + def _encoder_pos_embeddings(self, lengths, mask): + def position_lambda(x): + return x // ( + len(self._codebook_sizes) + 1 + ) # 5 5 5 5 4 4 4 4 ..., +1 for residual + + position_embeddings = self._get_position_embeddings( + lengths, mask, position_lambda, self._position_embeddings + ) + + def codebook_lambda(x): + x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) + x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 + # 0 1 2 4 0 1 2 4 ... # len(self._codebook_sizes) + 1 = 4 for residual + return x + + codebook_embeddings = self._get_position_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return position_embeddings + codebook_embeddings + + def _decoder_pos_embeddings(self, lengths, mask): + def codebook_lambda(x): + non_bos = x < len(self._codebook_sizes) + x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... len(self._codebook_sizes) = 3 for bos + + codebook_embeddings = self._get_position_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return codebook_embeddings + + def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): + batch_size = mask.shape[0] + seq_len = mask.shape[1] + + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=DEVICE)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) + positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) + + positions = positions[positions_mask] # (all_batch_events) + # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ... + + positions = position_lambda(positions) # (all_batch_events) + + # print(f"{positions.tolist()[:20]=}") + + assert (positions >= 0).all() and ( + positions < embedding_layer.num_embeddings + ).all() + + position_embeddings = embedding_layer( + positions + ) # (all_batch_events, embedding_dim) + + position_embeddings, _ = create_masked_tensor( + data=position_embeddings, lengths=lengths + ) # (batch_size, seq_len, embedding_dim) + + return position_embeddings From 6250cbe0a0cc9b84e28df6d18035f46b861b2711 Mon Sep 17 00:00:00 2001 From: iskbaga <112892889+iskbaga@users.noreply.github.com> Date: Thu, 20 Feb 2025 20:21:33 +0300 Subject: [PATCH 104/175] =?UTF-8?q?CollisionSolver=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D0=BD=D0=B0=20cuda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modeling/rqvae_utils/collision_solver.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index fd71d0fa..f673c6dd 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -2,13 +2,15 @@ import torch +from utils import DEVICE + class CollisionSolver: def __init__(self, emb_dim: int, sem_id_len: int, codebook_size: int, - device: torch.device = torch.device('cpu')): + device: torch.device=DEVICE): """ :param emb_dim: Длина остатка :param codebook_size: Количество элементов в одном кодбуке @@ -49,15 +51,15 @@ def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: tor residuals = residuals.to(self.device) semantic_ids = semantic_ids.to(self.device) - unique_id = torch.einsum('nc,c->n', semantic_ids, self.key) # хэши + unique_id = (semantic_ids * self.key).sum(dim=1) # хэши unique_ids, inverse_indices, counts = torch.unique(unique_id, return_inverse=True, return_counts=True) sorted_indices = torch.argsort(inverse_indices) # сортированные индексы чтобы совпадающие хэши шли подряд row_indices = inverse_indices[sorted_indices] # отсортированные хэши offsets = torch.cumsum(counts, dim=0) - counts - col_indices = (torch.arange(semantic_ids_count) - - offsets[row_indices]) # индексы от 0 до k внутри каждого набора из совпадающих хэшей + col_indices = torch.arange(semantic_ids_count, device=self.device) - offsets[ + row_indices] # индексы от 0 до k внутри каждого набора из совпадающих хэшей indices = torch.stack([ unique_ids[row_indices], @@ -89,7 +91,7 @@ def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tupl assert semantic_ids.shape[1] == self.sem_id_len semantic_ids = semantic_ids.to(self.device) - unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + unique_ids = (semantic_ids * self.key).sum(dim=1) candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) counts = torch.tensor([self.counts_dict[key.item()] for key in unique_ids], device=self.device) @@ -99,7 +101,7 @@ def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tupl def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: """ - :param semantic_ids: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) + :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param pred_residuals: [batch_size, emb_dim] предсказанные остатки :return: Словарь с ключами: @@ -114,7 +116,7 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens semantic_ids = semantic_ids.to(self.device) pred_residuals = pred_residuals.to(self.device) - unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + unique_ids = (semantic_ids * self.key).sum(dim=1) candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) @@ -132,7 +134,7 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[ str, torch.Tensor]: """ - :param semantic_ids: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) + :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param true_residuals: [batch_size, emb_dim] реальные остатки :return: Словарь с ключами: @@ -169,7 +171,7 @@ def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Ten semantic_ids = semantic_ids.to(self.device) dedup_tokens = dedup_tokens.to(self.device) - unique_ids = torch.einsum('nc,c->n', semantic_ids, self.key) + unique_ids = (semantic_ids * self.key).sum(dim=1) item_ids = torch.stack( [self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) From ec80d50bcb33baaefd56e9ed2d59c9aed9f186b3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 21 Feb 2025 17:06:33 +0300 Subject: [PATCH 105/175] use single codebook for training & query --- configs/train/tiger_train_config.json | 4 ++-- modeling/models/tiger.py | 32 +++++++++++-------------- modeling/rqvae_utils/simplified_tree.py | 9 +++---- modeling/rqvae_utils/tree.py | 9 +++---- 4 files changed, 22 insertions(+), 32 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index e357b294..c44e10a6 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,7 +1,7 @@ { - "experiment_name": "tiger", + "experiment_name": "tiger_simplified_no_residuals_freezed", "best_metric": "validation/ndcg@20", - "train_epochs_num": 50, + "train_epochs_num": 100, "dataset": { "type": "sequence_full", "path_to_data_dir": "../data", diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index b1e8a340..00303a29 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -69,15 +69,6 @@ def __init__( self._solver: CollisionSolver = solver - self._codebook_sizes = rqvae_model.codebook_sizes - - self._codebook_item_embeddings_stacked = torch.stack( - [codebook for codebook in rqvae_model.codebooks] - ) - self._codebook_item_embeddings_stacked.requires_grad = ( - False # TODOPK maybe unfreeeze later - ) - self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual @@ -85,15 +76,7 @@ def __init__( self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._trie = SimplifiedTree(rqvae_model) - - self._trie.build_tree_structure( - item_id_to_semantic_id.to(DEVICE), - item_id_to_residual.to(DEVICE), - item_ids.to(DEVICE), - sum_with_residuals=True - ) - + self._codebook_sizes = rqvae_model.codebook_sizes self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( torch.nn.init.trunc_normal_( @@ -110,6 +93,19 @@ def __init__( self._init_weights(initializer_range) + self._codebook_item_embeddings_stacked = nn.Parameter(torch.stack( + [codebook for codebook in rqvae_model.codebooks] + ), requires_grad=False) + + self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) + + self._trie.build_tree_structure( + item_id_to_semantic_id.to(DEVICE), + item_id_to_residual.to(DEVICE), + item_ids.to(DEVICE), + sum_with_residuals=False + ) + @classmethod def init_rqvae(cls, config) -> RqVaeModel: rqvae_config = json.load(open(config["rqvae_train_config_path"])) diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 77ddb764..5a09dcb4 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -1,19 +1,16 @@ import torch -from models import RqVaeModel from utils import DEVICE class SimplifiedTree: - def __init__(self, rqvae_model: RqVaeModel, device: torch.device = DEVICE): + def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE): """ - :param rqvae_model: обученная модель rq-vae + :param embedding_table: обученные эмбеддинги :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = torch.stack( - [cb for cb in rqvae_model.codebooks] - ).to(self.device) # (semantic_id_len, codebook_size, emb_dim + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 433c870e..b09cd049 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -1,20 +1,17 @@ import numpy as np import torch -from models import RqVaeModel from utils import DEVICE class Tree: - def __init__(self, rqvae_model: RqVaeModel, device: torch.device = DEVICE): + def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE): """ - :param rqvae_model: обученная модель rq-vae + :param embedding_table: обученные эмбеддинги :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = torch.stack( - [cb for cb in rqvae_model.codebooks] - ).to(self.device) # (semantic_id_len, codebook_size, emb_dim) + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.key: torch.Tensor = torch.empty((0, 0)) self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) From 6f8d757935177d99ec71ff7775bb0f601f0f42ce Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 21 Feb 2025 17:10:26 +0300 Subject: [PATCH 106/175] move init --- modeling/models/tiger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 00303a29..5721fe19 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -74,8 +74,6 @@ def __init__( item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) - self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._codebook_sizes = rqvae_model.codebook_sizes self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( @@ -97,6 +95,8 @@ def __init__( [codebook for codebook in rqvae_model.codebooks] ), requires_grad=False) + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) + self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) self._trie.build_tree_structure( From 42cbf1ce0c22046c6b81aded7ba00581fe2bc564 Mon Sep 17 00:00:00 2001 From: peterochek Date: Fri, 21 Feb 2025 17:43:13 +0300 Subject: [PATCH 107/175] unfreeze --- configs/train/tiger_train_config.json | 2 +- modeling/models/tiger.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index c44e10a6..f5173ce1 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "tiger_simplified_no_residuals_freezed", + "experiment_name": "tiger_simplified_no_residuals_unfreezed", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 5721fe19..0fa67f4c 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -93,7 +93,7 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter(torch.stack( [codebook for codebook in rqvae_model.codebooks] - ), requires_grad=False) + )) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) From b2e0520d7c66b5f2af29e2876ebc8ceb87156d2e Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 12:35:27 +0300 Subject: [PATCH 108/175] add parametera to semantic sasrec --- modeling/models/sasrec_semantic.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index a36513de..e836f6b6 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -40,6 +40,16 @@ def __init__( self._positive_prefix = positive_prefix self._codebook_sizes = rqvae_model.codebook_sizes + + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + + self._codebook_embeddings = nn.Embedding( + num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim + ) # + 2 for bos token & residual + + self._init_weights(initializer_range) + self._codebook_item_embeddings_stacked = torch.stack( [codebook for codebook in rqvae_model.codebooks] ) @@ -47,20 +57,18 @@ def __init__( False # TODOPK maybe unfreeeze later ) - self._item_id_to_semantic_id = item_id_to_semantic_id - self._item_id_to_residual = item_id_to_residual - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding, self._item_id_to_full_embedding = ( self.get_init_item_embeddings(item_ids) ) - self._codebook_embeddings = nn.Embedding( - num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim - ) # + 2 for bos token & residual - - self._init_weights(initializer_range) + self._item_id_to_semantic_embedding = nn.Parameter( + self._item_id_to_semantic_embedding, requires_grad=False + ) + self._item_id_to_full_embedding = nn.Parameter( + self._item_id_to_full_embedding, requires_grad=False + ) @classmethod def create_from_config(cls, config, **kwargs): From 3fd32b6b4a337ff730b5dc9336e99073dfea60f7 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:39:21 +0300 Subject: [PATCH 109/175] fix sasrec --- modeling/models/sasrec_semantic.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index e836f6b6..628f6e46 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -121,7 +121,7 @@ def forward(self, inputs): ) # (batch_size, num_items) positive_scores = torch.gather( - input=all_scores, dim=1, index=all_positive_sample_events[..., None] + input=all_scores, dim=1, index=all_positive_sample_events[..., None] - 1 ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( @@ -131,7 +131,7 @@ def forward(self, inputs): negative_scores = torch.scatter( input=all_scores, dim=1, - index=sample_ids, + index=sample_ids - 1, src=torch.ones_like(sample_ids) * (-torch.inf), ) # (all_batch_events, num_items) @@ -152,14 +152,14 @@ def forward(self, inputs): candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + return indices + 1 def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.view( - len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim + return embs.reshape( + -1, self._embedding_dim ) def get_init_item_embeddings(self, events): From 59c760f1189afa82883e0d3b5a23a5265cda397f Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:41:59 +0300 Subject: [PATCH 110/175] fix sasrec semantic --- modeling/models/sasrec_semantic.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 628f6e46..98770aa5 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -132,7 +132,7 @@ def forward(self, inputs): input=all_scores, dim=1, index=sample_ids - 1, - src=torch.ones_like(sample_ids) * (-torch.inf), + src=torch.ones_like(sample_ids - 1) * (-torch.inf), ) # (all_batch_events, num_items) return { @@ -158,9 +158,7 @@ def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.reshape( - -1, self._embedding_dim - ) + return embs.reshape(-1, self._embedding_dim) def get_init_item_embeddings(self, events): # convert to semantic ids From b0ac4d1f08b5ac9a7b0306e869d86aeabfed2548 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:47:56 +0300 Subject: [PATCH 111/175] add debugs --- modeling/models/sasrec_semantic.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 98770aa5..10e44b62 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -119,15 +119,21 @@ def forward(self, inputs): all_scores = torch.einsum( "ad,nd->an", last_embeddings, all_embeddings ) # (batch_size, num_items) + + print("before gather") positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] - 1 ) # (batch_size, 1) + print("after gather") + sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) + print("before scatter") + negative_scores = torch.scatter( input=all_scores, dim=1, @@ -135,6 +141,8 @@ def forward(self, inputs): src=torch.ones_like(sample_ids - 1) * (-torch.inf), ) # (all_batch_events, num_items) + print("after scatter") + return { "positive_scores": positive_scores, "negative_scores": negative_scores, From 5f5adeb353cec731189e6d7d6b08be98d2f8849d Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:50:09 +0300 Subject: [PATCH 112/175] remove debugging --- modeling/models/sasrec_semantic.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 10e44b62..98770aa5 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -119,21 +119,15 @@ def forward(self, inputs): all_scores = torch.einsum( "ad,nd->an", last_embeddings, all_embeddings ) # (batch_size, num_items) - - print("before gather") positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] - 1 ) # (batch_size, 1) - print("after gather") - sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - print("before scatter") - negative_scores = torch.scatter( input=all_scores, dim=1, @@ -141,8 +135,6 @@ def forward(self, inputs): src=torch.ones_like(sample_ids - 1) * (-torch.inf), ) # (all_batch_events, num_items) - print("after scatter") - return { "positive_scores": positive_scores, "negative_scores": negative_scores, From 26030d1755bd38937d8aa1dd6519f32f81eb0774 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:54:55 +0300 Subject: [PATCH 113/175] debug --- modeling/models/sasrec_semantic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 98770aa5..b3cbb143 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -127,6 +127,8 @@ def forward(self, inputs): sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) + + print(f"{sample_ids.max()=} {sample_ids.min()=}") negative_scores = torch.scatter( input=all_scores, From df7a445b5cbf4f30bdf04dd7de69400daf450b3d Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:57:00 +0300 Subject: [PATCH 114/175] debug --- modeling/models/sasrec_semantic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index b3cbb143..870d984b 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -97,6 +97,8 @@ def forward(self, inputs): all_sample_lengths = inputs[ "{}.length".format(self._sequence_prefix) ] # (batch_size) + + print(f"a {all_sample_events.max()=} {all_sample_events.min()=}") embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) From cca0d7c099a011086efe2a8374b93a127aa8549f Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 14:59:52 +0300 Subject: [PATCH 115/175] fixes --- modeling/models/sasrec_semantic.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 870d984b..b0f3b547 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -116,14 +116,22 @@ def forward(self, inputs): all_embeddings = ( self._item_id_to_full_embedding ) # (num_items, embedding_dim) + + all_embeddings = torch.cat( + [ + torch.zeros(1, self._embedding_dim, device=DEVICE), + all_embeddings + ], + dim=0 + ) # a -- all_batch_events, n -- num_items, d -- embedding_dim all_scores = torch.einsum( "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items) + ) # (batch_size, num_items + 1) positive_scores = torch.gather( - input=all_scores, dim=1, index=all_positive_sample_events[..., None] - 1 + input=all_scores, dim=1, index=all_positive_sample_events[..., None] ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( @@ -135,8 +143,8 @@ def forward(self, inputs): negative_scores = torch.scatter( input=all_scores, dim=1, - index=sample_ids - 1, - src=torch.ones_like(sample_ids - 1) * (-torch.inf), + index=sample_ids, + src=torch.ones_like(sample_ids) * (-torch.inf), ) # (all_batch_events, num_items) return { From a97acc219e30666a618e66eee8e9505a76daffce Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 15:52:43 +0300 Subject: [PATCH 116/175] semantic last refactors (cat passes grads) --- modeling/models/sasrec_semantic.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index b0f3b547..0ea42d7e 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -97,8 +97,6 @@ def forward(self, inputs): all_sample_lengths = inputs[ "{}.length".format(self._sequence_prefix) ] # (batch_size) - - print(f"a {all_sample_events.max()=} {all_sample_events.min()=}") embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) @@ -116,14 +114,11 @@ def forward(self, inputs): all_embeddings = ( self._item_id_to_full_embedding ) # (num_items, embedding_dim) - + all_embeddings = torch.cat( - [ - torch.zeros(1, self._embedding_dim, device=DEVICE), - all_embeddings - ], - dim=0 - ) + [torch.zeros(1, self._embedding_dim, device=DEVICE), all_embeddings], + dim=0, + ) # (num_items + 1, embedding_dim) # a -- all_batch_events, n -- num_items, d -- embedding_dim all_scores = torch.einsum( @@ -137,15 +132,13 @@ def forward(self, inputs): sample_ids, _ = create_masked_tensor( data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - - print(f"{sample_ids.max()=} {sample_ids.min()=}") negative_scores = torch.scatter( input=all_scores, dim=1, index=sample_ids, src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (all_batch_events, num_items) + ) # (all_batch_events, num_items + 1) return { "positive_scores": positive_scores, @@ -187,7 +180,9 @@ def get_init_item_embeddings(self, events): ) result.append(torch.stack(item_repr)) - semantic_embeddings = torch.stack(result) + semantic_embeddings = torch.stack( + result + ) # len(events), len(codebook_sizes), embedding_dim # get residuals residual = self._item_id_to_residual[events - 1] From cf30973bc9a10c10c4080be4b4d48e2b99e96df8 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 15:54:05 +0300 Subject: [PATCH 117/175] TODOPK + loss fixes --- modeling/loss/base.py | 8 ++-- modeling/models/sasrec_freezed.py | 1 + modeling/models/tiger.py | 71 ++++++++++++++++++++++++++----- 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 10f9e390..1863600f 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -53,7 +53,7 @@ def forward(self, inputs): return total_loss - +# TODOPK CrossEntropy loss (logits, labels) class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): def __init__(self, predictions_prefix, labels): super().__init__() @@ -78,15 +78,15 @@ def forward(self, inputs): # use log soft max if len(logits.shape) == 3: loss = -torch.gather( - torch.log_softmax(logits, dim=-1).view(batch_size * seq_len, logits.shape[-1]), + torch.log_softmax(logits, dim=-1).reshape(batch_size * seq_len, logits.shape[-1]), dim=-1, - index=candidates.view(batch_size * seq_len, 1) + index=candidates.reshape(batch_size * seq_len, 1) ).mean() else: loss = -torch.gather( torch.log_softmax(logits, dim=-1), dim=-1, - index=candidates.view(batch_size, 1) # TODOPK check if this is correct + index=candidates.reshape(batch_size, 1) ).mean() return loss diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 0c910e5d..bbc20ab9 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -66,6 +66,7 @@ def __init__( ) # TODOPK ask about freezed masked & padding tokens + # TODOPK use rqvae embeddings instead of text embeddings (freeze / unfreeze) self._item_embeddings.weight.data.copy_(extended_embeddings) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 0fa67f4c..66fbcea5 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -224,7 +224,13 @@ def forward(self, inputs): else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( encoder_embeddings, encoder_mask - ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + ) # (batch_size, len(self._codebook_sizes) (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + + + # 1 4 6 -> lookup -> sum = emb (last embedding) # bs, embedding_dim + # take all embedings (from stacked) # all_items, embedding_dim + # take from sasrec eval (indices + 1) + # guarantee that all items are in correct order residuals = tgt_embeddings[:, -1, :] semantic_ids = semantic_ids.to(torch.int64) @@ -232,6 +238,22 @@ def forward(self, inputs): item_ids = self._trie.query(semantic_ids, items_to_query=20) return item_ids + + # else: # eval mode + # last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + # # b - batch_size, n - num_candidates, d - embedding_dim + # candidate_scores = torch.einsum( + # 'bd,nd->bn', + # last_embeddings, + # self._item_embeddings.weight + # ) # (batch_size, num_items + 2) + + # _, indices = torch.topk( + # candidate_scores, + # k=20, dim=-1, largest=True + # ) # (batch_size, 20) + + # return indices + 1 def _apply_decoder( self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask @@ -258,12 +280,13 @@ def _apply_decoder( tgt_embeddings = tgt_embeddings + position_embeddings - tgt_embeddings = self._decoder_layernorm( - tgt_embeddings - ) # (batch_size, dec_seq_len, embedding_dim) - tgt_embeddings = self._decoder_dropout( - tgt_embeddings - ) # (batch_size, dec_seq_len, embedding_dim) + # TODOPK remove layernorm & dropout (for inference) + # tgt_embeddings = self._decoder_layernorm( + # tgt_embeddings + # ) # (batch_size, dec_seq_len, embedding_dim) + # tgt_embeddings = self._decoder_dropout( + # tgt_embeddings + # ) # (batch_size, dec_seq_len, embedding_dim) tgt_embeddings[~tgt_mask] = 0 @@ -289,6 +312,10 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): .unsqueeze(0) .expand(batch_size, 1, embedding_dim) ) + + # curr_target_emb = () # <- layernorm, dropout & positional + # concat target <- [tgt_embs, cutt_tgt_emb] + # decoder(concat target) semantic_ids = torch.tensor([], device=DEVICE) @@ -303,20 +330,44 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): dim=1, ) - position_embeddings = self._codebook_embeddings(indexes.view(-1)) + # 3 + # 3 0 + # 3 0 1 + # 3 0 1 2 + # 3 0 1 2 4 + + # bos_token = len(self._codebook_sizes) + # residual_token = len(self._codebook_sizes) + 1 + + # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + # 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 + # 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 + + position_embeddings = self._codebook_embeddings(indexes.view(-1)) # cb + 2 curr_embeddings = tgt_embeddings + position_embeddings.view( batch_size, step + 1, embedding_dim ) + + # TODOPK += last + # curr_embeddings = tgt_embeddings[:, -1] += position_embeddings.view( + # batch_size, step + 1, embedding_dim + # ) + + # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings) + # curr_embeddings[:, -1, :] = self._decoder_dropout(curr_embeddings) - curr_embeddings = self._decoder_layernorm(curr_embeddings) - curr_embeddings = self._decoder_dropout(curr_embeddings) + # TODOPK KV caching decoder_output = self._decoder( tgt=curr_embeddings, memory=encoder_embeddings, memory_key_padding_mask=~encoder_mask, ) + + # TODOPK + # assert that prelast items don't change + # assert decoder changes only last index in dim = 1 next_token_embedding = decoder_output[ :, -1, : From 769c51472b0e1e567602ce5302d78f310e552899 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 16:50:50 +0300 Subject: [PATCH 118/175] cross entropy loss in Tiger, remove mps --- configs/train/tiger_train_config.json | 8 ++++---- configs/train/tiger_wat_train_config.json | 8 ++++---- modeling/models/tiger.py | 13 +++---------- modeling/models/tigerWithAnotherTree.py | 12 +++--------- modeling/utils/__init__.py | 4 ++-- 5 files changed, 16 insertions(+), 29 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index f5173ce1..119337d1 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -63,16 +63,16 @@ "type": "composite", "losses": [ { - "type": "sample_logsoftmax", + "type": "ce", "predictions_prefix": "logits", - "labels": "semantic.labels", + "labels_prefix": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" }, { - "type": "sample_logsoftmax", + "type": "ce", "predictions_prefix": "dedup.logits", - "labels": "dedup.labels", + "labels_prefix": "dedup.labels", "weight": 1.0, "output_prefix": "dedup_loss" } diff --git a/configs/train/tiger_wat_train_config.json b/configs/train/tiger_wat_train_config.json index a7eabbac..70422448 100644 --- a/configs/train/tiger_wat_train_config.json +++ b/configs/train/tiger_wat_train_config.json @@ -63,16 +63,16 @@ "type": "composite", "losses": [ { - "type": "sample_logsoftmax", + "type": "ce", "predictions_prefix": "logits", - "labels": "semantic.labels", + "labels_prefix": "semantic.labels", "weight": 1.0, "output_prefix": "semantic_loss" }, { - "type": "sample_logsoftmax", + "type": "ce", "predictions_prefix": "dedup.logits", - "labels": "dedup.labels", + "labels_prefix": "dedup.labels", "weight": 1.0, "output_prefix": "dedup_loss" } diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 66fbcea5..df992dc2 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -216,10 +216,10 @@ def forward(self, inputs): ) return { - "logits": decoder_prefix_scores, - "semantic.labels": semantic_ids, + "logits": decoder_prefix_scores.reshape(-1, decoder_prefix_scores.shape[2]), + "semantic.labels.ids": semantic_ids.reshape(-1), "dedup.logits": pred_info["pred_scores"], - "dedup.labels": true_info["true_dedup_tokens"], + "dedup.labels.ids": true_info["true_dedup_tokens"], } else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( @@ -358,7 +358,6 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): # curr_embeddings[:, -1, :] = self._decoder_dropout(curr_embeddings) - # TODOPK KV caching decoder_output = self._decoder( tgt=curr_embeddings, memory=encoder_embeddings, @@ -373,12 +372,6 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): :, -1, : ] # batch_size x embedding_dim - # TODOPK ask if we take last - # torch.Size([256, 1, 64]) - # torch.Size([256, 2, 64]) - # torch.Size([256, 3, 64]) - # torch.Size([256, 4, 64]) - if step < len(self._codebook_sizes): codebook = self._codebook_item_embeddings_stacked[ step diff --git a/modeling/models/tigerWithAnotherTree.py b/modeling/models/tigerWithAnotherTree.py index 1883b5b9..58ac0a6f 100644 --- a/modeling/models/tigerWithAnotherTree.py +++ b/modeling/models/tigerWithAnotherTree.py @@ -221,10 +221,10 @@ def forward(self, inputs): ) return { - "logits": decoder_prefix_scores, - "semantic.labels": semantic_ids, + "logits": decoder_prefix_scores.reshape(-1, decoder_prefix_scores.shape[2]), + "semantic.labels.ids": semantic_ids.reshape(-1), "dedup.logits": pred_info["pred_scores"], - "dedup.labels": true_info["true_dedup_tokens"], + "dedup.labels.ids": true_info["true_dedup_tokens"], } else: semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( @@ -327,12 +327,6 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): :, -1, : ] # batch_size x embedding_dim - # TODOPK ask if we take last - # torch.Size([256, 1, 64]) - # torch.Size([256, 2, 64]) - # torch.Size([256, 3, 64]) - # torch.Size([256, 4, 64]) - if step < len(self._codebook_sizes): codebook = self._codebook_item_embeddings_stacked[ step diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 59101ca4..8db8f069 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -12,8 +12,8 @@ if torch.cuda.is_available(): DEVICE = torch.device('cuda') -elif torch.backends.mps.is_available(): - DEVICE = torch.device("mps:0") +# elif torch.backends.mps.is_available(): +# DEVICE = torch.device("mps:0") else: DEVICE = torch.device('cpu') From b3193ea1563ddb4accdafb1d1b2961d08b7b2c71 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 22 Feb 2025 17:28:35 +0300 Subject: [PATCH 119/175] fix decoder --- configs/train/tiger_wat_train_config.json | 180 ------- modeling/loss/base.py | 1 - modeling/models/__init__.py | 1 - modeling/models/tiger.py | 89 ++-- modeling/models/tigerWithAnotherTree.py | 454 ------------------ ...ts.out.tfevents.1739517568.laplas.230979.0 | Bin 0 -> 343437 bytes ...ts.out.tfevents.1739620895.laplas.473812.0 | Bin 0 -> 191451 bytes ...ts.out.tfevents.1739715883.laplas.236512.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739716174.laplas.237976.0 | Bin 0 -> 1531738 bytes ...ts.out.tfevents.1739517574.laplas.231017.0 | Bin 0 -> 390531 bytes ...ts.out.tfevents.1739716254.laplas.238391.0 | Bin 0 -> 1508887 bytes ...ts.out.tfevents.1739736855.laplas.341454.0 | Bin 0 -> 1291766 bytes ...ts.out.tfevents.1739731427.laplas.311641.0 | Bin 0 -> 7025 bytes ...ts.out.tfevents.1739732357.laplas.319889.0 | Bin 0 -> 7025 bytes ...ts.out.tfevents.1739732803.laplas.322005.0 | Bin 0 -> 7025 bytes ...s.out.tfevents.1740217007.laplas.2652164.0 | Bin 0 -> 7025 bytes ...s.out.tfevents.1740225602.laplas.2693646.0 | Bin 0 -> 140105 bytes ...s.out.tfevents.1740225602.laplas.2693646.0 | Bin 0 -> 170512 bytes ...ts.out.tfevents.1739518113.laplas.232484.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739518142.laplas.232572.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739518184.laplas.232702.0 | Bin 0 -> 226257 bytes ...ts.out.tfevents.1739615921.laplas.455204.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739615954.laplas.455393.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739616148.laplas.455908.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739616253.laplas.456274.0 | Bin 0 -> 635 bytes ...ts.out.tfevents.1739616467.laplas.456753.0 | Bin 0 -> 88 bytes ...ts.out.tfevents.1739616949.laplas.460160.0 | Bin 0 -> 32235 bytes ...ts.out.tfevents.1739617215.laplas.462145.0 | Bin 0 -> 191451 bytes ...ts.out.tfevents.1739716313.laplas.238741.0 | Bin 0 -> 7746 bytes ...ts.out.tfevents.1739724358.laplas.277589.0 | Bin 0 -> 90724 bytes ...s.out.tfevents.1740146925.laplas.2313159.0 | Bin 0 -> 88 bytes ...s.out.tfevents.1740147036.laplas.2313784.0 | Bin 0 -> 1056014 bytes ...s.out.tfevents.1740149051.laplas.2323452.0 | Bin 0 -> 900416 bytes 33 files changed, 34 insertions(+), 691 deletions(-) delete mode 100644 configs/train/tiger_wat_train_config.json delete mode 100644 modeling/models/tigerWithAnotherTree.py create mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 create mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 create mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 create mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 create mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 create mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T17:30/events.out.tfevents.1739716254.laplas.238391.0 create mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 create mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:28/events.out.tfevents.1739518113.laplas.232484.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518142.laplas.232572.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518184.laplas.232702.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:39/events.out.tfevents.1739615954.laplas.455393.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:44/events.out.tfevents.1739616253.laplas.456274.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:55/events.out.tfevents.1739616949.laplas.460160.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-16T17:31/events.out.tfevents.1739716313.laplas.238741.0 create mode 100644 tensorboard_logs_laplas/tiger_2025-02-16T19:45/events.out.tfevents.1739724358.laplas.277589.0 create mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:08/events.out.tfevents.1740146925.laplas.2313159.0 create mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 create mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_unfreezed_2025-02-21T17:44/events.out.tfevents.1740149051.laplas.2323452.0 diff --git a/configs/train/tiger_wat_train_config.json b/configs/train/tiger_wat_train_config.json deleted file mode 100644 index 70422448..00000000 --- a/configs/train/tiger_wat_train_config.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "experiment_name": "tigerWithAnotherTree", - "best_metric": "validation/ndcg@20", - "train_epochs_num": 50, - "dataset": { - "type": "sequence_full", - "path_to_data_dir": "../data", - "name": "Beauty", - "max_sequence_length": 50, - "samplers": { - "type": "last_item_prediction", - "negative_sampler_type": "random" - } - }, - "dataloader": { - "train": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": true, - "shuffle": true - }, - "validation": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": false, - "shuffle": false - } - }, - "model": { - "type": "tigerWithAnotherTree", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", - "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", - "sequence_prefix": "item", - "predictions_prefix": "logits", - "positive_prefix": "labels", - "labels_prefix": "labels", - "embedding_dim": 64, - "num_heads": 2, - "num_encoder_layers": 2, - "num_decoder_layers": 2, - "dim_feedforward": 256, - "dropout": 0.3, - "activation": "gelu", - "layer_norm_eps": 1e-9, - "initializer_range": 0.02 - }, - "optimizer": { - "type": "basic", - "optimizer": { - "type": "adam", - "lr": 0.001 - }, - "clip_grad_threshold": 5.0 - }, - "loss": { - "type": "composite", - "losses": [ - { - "type": "ce", - "predictions_prefix": "logits", - "labels_prefix": "semantic.labels", - "weight": 1.0, - "output_prefix": "semantic_loss" - }, - { - "type": "ce", - "predictions_prefix": "dedup.logits", - "labels_prefix": "dedup.labels", - "weight": 1.0, - "output_prefix": "dedup_loss" - } - ], - "output_prefix": "loss" - }, - "callback": { - "type": "composite", - "callbacks": [ - { - "type": "metric", - "on_step": 1, - "loss_prefix": "loss" - }, - { - "type": "validation", - "on_step": 64, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - }, - { - "type": "eval", - "on_step": 256, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - } - ] - } -} diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 1863600f..80ca20d8 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -53,7 +53,6 @@ def forward(self, inputs): return total_loss -# TODOPK CrossEntropy loss (logits, labels) class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): def __init__(self, predictions_prefix, labels): super().__init__() diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 7f0247a0..e03dc42d 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -19,4 +19,3 @@ from .s3rec import S3RecModel from .rqvae import RqVaeModel from .tiger import TigerModel -from .tigerWithAnotherTree import TigerModel2 diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index df992dc2..7f24f733 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -82,7 +82,8 @@ def __init__( std=initializer_range, a=-2 * initializer_range, b=2 * initializer_range, - ) + ), + requires_grad=True, # TODOPK added for bos ) self._codebook_embeddings = nn.Embedding( @@ -91,19 +92,19 @@ def __init__( self._init_weights(initializer_range) - self._codebook_item_embeddings_stacked = nn.Parameter(torch.stack( - [codebook for codebook in rqvae_model.codebooks] - )) - + self._codebook_item_embeddings_stacked = nn.Parameter( + torch.stack([codebook for codebook in rqvae_model.codebooks]) + ) + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - + self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) self._trie.build_tree_structure( item_id_to_semantic_id.to(DEVICE), item_id_to_residual.to(DEVICE), item_ids.to(DEVICE), - sum_with_residuals=False + sum_with_residuals=False, ) @classmethod @@ -186,15 +187,15 @@ def forward(self, inputs): label_events = inputs["{}.ids".format(self._positive_prefix)] label_lengths = inputs["{}.length".format(self._positive_prefix)] - label_lengths = label_lengths * ( - len(self._codebook_sizes) + 1 - ) # TODOPK bos prepending tgt_embeddings = self.get_item_embeddings( label_events ) # (all_batch_events, embedding_dim) decoder_outputs = self._apply_decoder( - tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask + tgt_embeddings, + label_lengths * (len(self._codebook_sizes) + 1), + encoder_embeddings, + encoder_mask, ) # (batch_size, label_len, embedding_dim) decoder_prefix_scores = torch.einsum( @@ -216,7 +217,9 @@ def forward(self, inputs): ) return { - "logits": decoder_prefix_scores.reshape(-1, decoder_prefix_scores.shape[2]), + "logits": decoder_prefix_scores.reshape( + -1, decoder_prefix_scores.shape[2] + ), "semantic.labels.ids": semantic_ids.reshape(-1), "dedup.logits": pred_info["pred_scores"], "dedup.labels.ids": true_info["true_dedup_tokens"], @@ -226,7 +229,6 @@ def forward(self, inputs): encoder_embeddings, encoder_mask ) # (batch_size, len(self._codebook_sizes) (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) - # 1 4 6 -> lookup -> sum = emb (last embedding) # bs, embedding_dim # take all embedings (from stacked) # all_items, embedding_dim # take from sasrec eval (indices + 1) @@ -238,7 +240,7 @@ def forward(self, inputs): item_ids = self._trie.query(semantic_ids, items_to_query=20) return item_ids - + # else: # eval mode # last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) # # b - batch_size, n - num_candidates, d - embedding_dim @@ -312,59 +314,36 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): .unsqueeze(0) .expand(batch_size, 1, embedding_dim) ) - - # curr_target_emb = () # <- layernorm, dropout & positional - # concat target <- [tgt_embs, cutt_tgt_emb] - # decoder(concat target) semantic_ids = torch.tensor([], device=DEVICE) for step in range(len(self._codebook_sizes) + 1): # semantic_id_seq + residual - if step == 0: - indexes = torch.full( - (batch_size, 1), len(self._codebook_sizes), device=DEVICE - ) # len(self._codebook_sizes) for bos - else: - indexes = torch.cat( - [indexes, torch.full((batch_size, 1), step - 1, device=DEVICE)], - dim=1, - ) - - # 3 - # 3 0 - # 3 0 1 - # 3 0 1 2 - # 3 0 1 2 4 - - # bos_token = len(self._codebook_sizes) - # residual_token = len(self._codebook_sizes) + 1 + index = len(self._codebook_sizes) if step == 0 else step - 1 - # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - # 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 - # 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 + last_position_embedding = self._codebook_embeddings( + torch.full((batch_size,), index, device=DEVICE) + ) - position_embeddings = self._codebook_embeddings(indexes.view(-1)) # cb + 2 + assert last_position_embedding.shape == tgt_embeddings[:, -1, :].shape + assert tgt_embeddings.shape == torch.Size([batch_size, step + 1, embedding_dim]) - curr_embeddings = tgt_embeddings + position_embeddings.view( - batch_size, step + 1, embedding_dim + curr_step_embeddings = tgt_embeddings.clone() + curr_step_embeddings[:, -1, :] = ( + tgt_embeddings[:, -1, :] + last_position_embedding ) - - # TODOPK += last - # curr_embeddings = tgt_embeddings[:, -1] += position_embeddings.view( - # batch_size, step + 1, embedding_dim - # ) - - # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings) - # curr_embeddings[:, -1, :] = self._decoder_dropout(curr_embeddings) + assert torch.allclose(tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :]) + tgt_embeddings = curr_step_embeddings + # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings[:, -1, :]) + # curr_embeddings[:, -1, :] = self._decoder_dropout(curr_embeddings[:, -1, :]) decoder_output = self._decoder( - tgt=curr_embeddings, + tgt=tgt_embeddings, memory=encoder_embeddings, memory_key_padding_mask=~encoder_mask, ) - - # TODOPK + + # TODOPK ASK it is not true? # assert that prelast items don't change # assert decoder changes only last index in dim = 1 @@ -375,10 +354,10 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): if step < len(self._codebook_sizes): codebook = self._codebook_item_embeddings_stacked[ step - ] # len(codebook_sizes) x embedding_dim + ] # codebook_size x embedding_dim closest_semantic_ids = torch.argmax( torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 - ) # batch_size x 1 + ) # batch_size semantic_ids = torch.cat( [semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1 ) # batch_size x (step + 1) diff --git a/modeling/models/tigerWithAnotherTree.py b/modeling/models/tigerWithAnotherTree.py deleted file mode 100644 index 58ac0a6f..00000000 --- a/modeling/models/tigerWithAnotherTree.py +++ /dev/null @@ -1,454 +0,0 @@ -import json - -import torch -from models.base import SequentialTorchModel -from rqvae_utils import CollisionSolver, Tree -from torch import nn -from utils import DEVICE, create_masked_tensor, get_activation_function - -from .rqvae import RqVaeModel - - -class TigerModel2(SequentialTorchModel, config_name="tigerWithAnotherTree"): - def __init__( - self, - rqvae_model, - item_id_to_semantic_id, - item_id_to_residual, - item_id_to_text_embedding, - solver, - sequence_prefix, - pred_prefix, - positive_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_encoder_layers, - num_decoder_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - ): - super().__init__( - num_items=num_items, - max_sequence_length=max_sequence_length, - embedding_dim=embedding_dim, - num_heads=num_heads, - num_layers=num_encoder_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=activation, - layer_norm_eps=layer_norm_eps, - is_causal=True, - ) - - self._sequence_prefix = sequence_prefix - self._pred_prefix = pred_prefix - self._positive_prefix = positive_prefix - self._labels_prefix = labels_prefix - - transformer_decoder_layer = nn.TransformerDecoderLayer( - d_model=embedding_dim, - nhead=num_heads, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=get_activation_function(activation), - layer_norm_eps=layer_norm_eps, - batch_first=True, - ) - - self._decoder = nn.TransformerDecoder( - transformer_decoder_layer, num_decoder_layers - ) - - self._decoder_layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) - self._decoder_dropout = nn.Dropout(dropout) - - self._solver: CollisionSolver = solver - - self._codebook_sizes = rqvae_model.codebook_sizes - - self._codebook_item_embeddings_stacked = torch.stack( - [codebook for codebook in rqvae_model.codebooks] - ) - self._codebook_item_embeddings_stacked.requires_grad = ( - False # TODOPK maybe unfreeeze later - ) - - self._item_id_to_semantic_id = item_id_to_semantic_id - self._item_id_to_residual = item_id_to_residual - self._item_id_to_text_embedding = item_id_to_text_embedding - - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) - - self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - - self._trie = Tree(rqvae_model) - - self._trie.build_tree_structure( - item_id_to_semantic_id.to(DEVICE), - item_id_to_residual.to(DEVICE), - item_ids.to(DEVICE) - ) - - self._bos_token_id = self._codebook_sizes[0] - self._bos_weight = nn.Parameter( - torch.nn.init.trunc_normal_( - torch.zeros(embedding_dim), - std=initializer_range, - a=-2 * initializer_range, - b=2 * initializer_range, - ) - ) - - self._codebook_embeddings = nn.Embedding( - num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim - ) # + 2 for bos token & residual - - self._init_weights(initializer_range) - - @classmethod - def init_rqvae(cls, config) -> RqVaeModel: - rqvae_config = json.load(open(config["rqvae_train_config_path"])) - rqvae_config["model"]["should_init_codebooks"] = False - - rqvae_model = RqVaeModel.create_from_config(rqvae_config["model"]).to(DEVICE) - rqvae_model.load_state_dict( - torch.load(config["rqvae_checkpoint_path"], weights_only=True) - ) - rqvae_model.eval() - for param in rqvae_model.parameters(): - param.requires_grad = False - - codebook_sizes = rqvae_model.codebook_sizes - assert all([book_size == codebook_sizes[0] for book_size in codebook_sizes]) - - return rqvae_model - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_model = cls.init_rqvae(config) - embs_extractor = torch.load(config["embs_extractor_path"], weights_only=False) - - embs_extractor = embs_extractor.sort_index() - - item_ids = embs_extractor.index.tolist() - assert item_ids == list(range(1, len(item_ids) + 1)) - - text_embeddings = torch.stack(embs_extractor["embeddings"].tolist()).to(DEVICE) - - semantic_ids, residuals = rqvae_model({"embeddings": text_embeddings}) - - solver = CollisionSolver( - emb_dim=residuals.shape[1], - sem_id_len=len(rqvae_model.codebook_sizes), - codebook_size=rqvae_model.codebook_sizes[0], - ) - solver.create_query_candidates_dict( - torch.tensor(item_ids), semantic_ids, residuals - ) - - return cls( - rqvae_model=rqvae_model, - item_id_to_semantic_id=semantic_ids, - item_id_to_residual=residuals, - item_id_to_text_embedding=text_embeddings, - solver=solver, - sequence_prefix=config["sequence_prefix"], - pred_prefix=config["predictions_prefix"], - positive_prefix=config["positive_prefix"], - labels_prefix=config["labels_prefix"], - num_items=rqvae_model.codebook_sizes[0], # unused - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_encoder_layers=config["num_encoder_layers"], - num_decoder_layers=config["num_decoder_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - ) - - # semantic ids come with dedup token - def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - - all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) - encoder_embeddings, encoder_mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) - - if self.training: - label_events = inputs["{}.ids".format(self._positive_prefix)] - label_lengths = inputs["{}.length".format(self._positive_prefix)] - - label_lengths = label_lengths * ( - len(self._codebook_sizes) + 1 - ) # TODOPK bos prepending - tgt_embeddings = self.get_item_embeddings( - label_events - ) # (all_batch_events, embedding_dim) - - decoder_outputs = self._apply_decoder( - tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask - ) # (batch_size, label_len, embedding_dim) - - decoder_prefix_scores = torch.einsum( - "bsd,scd->bsc", - decoder_outputs[:, :-1, :], - self._codebook_item_embeddings_stacked, - ) - - decoder_output_residual = decoder_outputs[:, -1, :] - - semantic_ids = self._item_id_to_semantic_id[ - label_events - 1 - ] # len(events), len(codebook_sizes) - true_residuals = self._item_id_to_residual[label_events - 1] - - true_info = self._solver.get_true_dedup_tokens(semantic_ids, true_residuals) - pred_info = self._solver.get_pred_scores( - semantic_ids, decoder_output_residual - ) - - return { - "logits": decoder_prefix_scores.reshape(-1, decoder_prefix_scores.shape[2]), - "semantic.labels.ids": semantic_ids.reshape(-1), - "dedup.logits": pred_info["pred_scores"], - "dedup.labels.ids": true_info["true_dedup_tokens"], - } - else: - semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( - encoder_embeddings, encoder_mask - ) # (batch_size, len(self._codebook_sizes) + 2 (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) - - residuals = tgt_embeddings[:, -1, :] - semantic_ids = semantic_ids.to(torch.int64) - - item_ids = self._trie.query(semantic_ids, residuals, items_to_query=20) - - return item_ids - - def _apply_decoder( - self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask - ): - tgt_embeddings, tgt_mask = create_masked_tensor( - data=tgt_embeddings, lengths=label_lengths - ) # (batch_size, dec_seq_len, embedding_dim), (batch_size, dec_seq_len) - - batch_size = tgt_embeddings.shape[0] - bos_embeddings = self._bos_weight.unsqueeze(0).expand( - batch_size, 1, -1 - ) # (batch_size, 1, embedding_dim) - - tgt_embeddings = torch.cat( - [bos_embeddings, tgt_embeddings[:, :-1, :]], dim=1 - ) # remove residual by using :-1 - - label_len = tgt_mask.shape[1] - - assert label_len == len(self._codebook_sizes) + 1 - - position_embeddings = self._decoder_pos_embeddings(label_lengths, tgt_mask) - assert torch.allclose(position_embeddings[~tgt_mask], tgt_embeddings[~tgt_mask]) - - tgt_embeddings = tgt_embeddings + position_embeddings - - tgt_embeddings = self._decoder_layernorm( - tgt_embeddings - ) # (batch_size, dec_seq_len, embedding_dim) - tgt_embeddings = self._decoder_dropout( - tgt_embeddings - ) # (batch_size, dec_seq_len, embedding_dim) - - tgt_embeddings[~tgt_mask] = 0 - - causal_mask = ( - torch.tril(torch.ones(label_len, label_len)).bool().to(DEVICE) - ) # (dec_seq_len, dec_seq_len) - - decoder_outputs = self._decoder( - tgt=tgt_embeddings, - memory=encoder_embeddings, - tgt_mask=~causal_mask, - memory_key_padding_mask=~encoder_mask, - ) # (batch_size, dec_seq_len, embedding_dim) - - return decoder_outputs - - def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): - batch_size = encoder_embeddings.shape[0] - embedding_dim = encoder_embeddings.shape[2] - - tgt_embeddings = ( - self._bos_weight.unsqueeze(0) - .unsqueeze(0) - .expand(batch_size, 1, embedding_dim) - ) - - semantic_ids = torch.tensor([], device=DEVICE) - - for step in range(len(self._codebook_sizes) + 1): # semantic_id_seq + residual - if step == 0: - indexes = torch.full( - (batch_size, 1), len(self._codebook_sizes), device=DEVICE - ) # len(self._codebook_sizes) for bos - else: - indexes = torch.cat( - [indexes, torch.full((batch_size, 1), step - 1, device=DEVICE)], - dim=1, - ) - - position_embeddings = self._codebook_embeddings(indexes.view(-1)) - - curr_embeddings = tgt_embeddings + position_embeddings.view( - batch_size, step + 1, embedding_dim - ) - - curr_embeddings = self._decoder_layernorm(curr_embeddings) - curr_embeddings = self._decoder_dropout(curr_embeddings) - - decoder_output = self._decoder( - tgt=curr_embeddings, - memory=encoder_embeddings, - memory_key_padding_mask=~encoder_mask, - ) - - next_token_embedding = decoder_output[ - :, -1, : - ] # batch_size x embedding_dim - - if step < len(self._codebook_sizes): - codebook = self._codebook_item_embeddings_stacked[ - step - ] # len(codebook_sizes) x embedding_dim - closest_semantic_ids = torch.argmax( - torch.einsum("bd,cd->bc", next_token_embedding, codebook), dim=1 - ) # batch_size x 1 - semantic_ids = torch.cat( - [semantic_ids, closest_semantic_ids.unsqueeze(1)], dim=1 - ) # batch_size x (step + 1) - next_token_embedding = codebook[ - closest_semantic_ids - ] # batch_size x embedding_dim - - tgt_embeddings = torch.cat( - [tgt_embeddings, next_token_embedding.unsqueeze(1)], dim=1 - ) - - return semantic_ids, tgt_embeddings - - def get_item_embeddings(self, events): - embs = self._item_id_to_semantic_embedding[ - events - 1 - ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.view( - len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim - ) - - def get_init_item_embeddings(self, events): - # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[ - events - 1 - ] # len(events), len(codebook_sizes) - - result = [] - for semantic_id in semantic_ids: - item_repr = [] - for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append( - self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] - ) - result.append(torch.stack(item_repr)) - - semantic_embeddings = torch.stack(result) - - # get residuals - residual = self._item_id_to_residual[events - 1] - # text_embeddings = self._item_id_to_text_embedding[events - 1] - # residual = text_embeddings - semantic_embeddings.sum(dim=1) - residual = residual.unsqueeze(1) - - # get true item embeddings - item_embeddings = torch.cat( - [semantic_embeddings, residual], dim=1 - ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - - # item_embeddings = item_embeddings.view(-1, self._embedding_dim) # (all_batch_events, embedding_dim) - - return item_embeddings - - def _encoder_pos_embeddings(self, lengths, mask): - def position_lambda(x): - return x // ( - len(self._codebook_sizes) + 1 - ) # 5 5 5 5 4 4 4 4 ..., +1 for residual - - position_embeddings = self._get_position_embeddings( - lengths, mask, position_lambda, self._position_embeddings - ) - - def codebook_lambda(x): - x = len(self._codebook_sizes) - x % (len(self._codebook_sizes) + 1) - x[x == len(self._codebook_sizes)] = len(self._codebook_sizes) + 1 - # 0 1 2 4 0 1 2 4 ... # len(self._codebook_sizes) + 1 = 4 for residual - return x - - codebook_embeddings = self._get_position_embeddings( - lengths, mask, codebook_lambda, self._codebook_embeddings - ) - - return position_embeddings + codebook_embeddings - - def _decoder_pos_embeddings(self, lengths, mask): - def codebook_lambda(x): - non_bos = x < len(self._codebook_sizes) - x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] - return x # 3, 0, 1, 2, 3, 0, 1, 2 ... len(self._codebook_sizes) = 3 for bos - - codebook_embeddings = self._get_position_embeddings( - lengths, mask, codebook_lambda, self._codebook_embeddings - ) - - return codebook_embeddings - - def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): - batch_size = mask.shape[0] - seq_len = mask.shape[1] - - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=DEVICE)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) - positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) - - positions = positions[positions_mask] # (all_batch_events) - # 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ... - - positions = position_lambda(positions) # (all_batch_events) - - # print(f"{positions.tolist()[:20]=}") - - assert (positions >= 0).all() and ( - positions < embedding_layer.num_embeddings - ).all() - - position_embeddings = embedding_layer( - positions - ) # (all_batch_events, embedding_dim) - - position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths - ) # (batch_size, seq_len, embedding_dim) - - return position_embeddings diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 new file mode 100644 index 0000000000000000000000000000000000000000..9a870830b41c45a45b0ab3467d98d493bde9acfc GIT binary patch literal 343437 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 SFy1h^m1KyZ_T)pKWnx%$^! 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%0A|_9Lj_z;Ton9Qx$}1SEbwh~OIs_qBB4 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 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 new file mode 100644 index 0000000000000000000000000000000000000000..c45b4cb1074bdcd8e9f95c08f74ba4d37492748d GIT binary patch literal 191451 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 s9Dq|6Zajd(~|)2J5v!va&Rry8&0nt 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 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 new file mode 100644 index 0000000000000000000000000000000000000000..cc3b8f372786ae779b73fb27c1a6e4e670a8ecca GIT binary patch literal 88 zcmeZZfPjCKJmzvLAG_;S`{t&j6mL>dVrHJ6YguYuiIq{19+yr@YF=@EQBrM*}QKepaQD#YMkzOiDReV}zPHH?vB-i8MdjLkzAvpj5 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 new file mode 100644 index 0000000000000000000000000000000000000000..6d0c0b6ce7937e7fb46e353d95e4ab606363fb2b GIT binary patch literal 1531738 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

7p{!-D_>rl)rU5JZ8QPYX6* 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

E(dO%g`<=_ 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�iXi%xnpcCvom3as*a1bcm!f9OG+=ukRZT5Tw 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Ⓢt&w2gq*WPZG8Acy=yz2H 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 R&kXF=Rey%|Alo6?$#h~hD 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 @+Bz@3r!nAMEN}_iqDL&&=BqdIM}I} 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 C@9Dn) literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 b/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 new file mode 100644 index 0000000000000000000000000000000000000000..07044b8f01ddc37c6ff79a9940265e665ef2f188 GIT binary patch literal 390531 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

rbNkM|PAW`#I}AY(2irE7!@ZUMbZ$>8 zQyoDt2S1nCLx9}`O;Ta*MlA$qId~;GXh>;n1LXIgI6=%A^BTp`r3|X17{;R&p~E$d#KSHc#>3TJZ~<73mo{hw1Ysk zE_4!VxR(KfiySQdZV$z?-qJ4pJI%!iB013SZ3*$3Kh#K*)~{WL;1UO!E1V#?@4p_3 z{Wh&c5XFIJj14Rk@1-$4(Rek2%N(5ER>cowXAh^lF@Cf0n zw3UlDlY=&SV~QY_gUj<}@I7tJegdkxSRlB?fsycH>MPy9%_m@dlo&xA2djg{;P`gW z36dwn=0Euj>dBKydUHgxr@Lg5SU6-?ovSZTp8Ir0bfv3gB!M#>{sM)hqaE{Bv~u&} zh9pmZimik7=1DEDi=ybX07ViCBXa9x{dscqtqI!Gc8{_r^i9oQsnFgAw|%tN_B{BF zOW94{$0ezS(fn!$-%*YkD|JO?dw>kLv%m!rr*VCcc=-}4~?r@Oc>IlcScTXS{ z4BF)*NZ{aTb31U98b}CeDSwL~k%RYZJYZH=H9843al%IgNgPNe5~wgfMDHzc&K4m^ z=3qm(2b{RrfKD8AZT1C03J2T1IYIf{ING~ajV(iPmxH)2)^OGQ4n1-4eJT*#;~;mt z6fT;dZ$W;gnr>AH?sG8Ezysb6Iz%7;p_(-aQaOlHlEC|MdUXB9`m~16{>cCjI5;47 z25T)1+Fvm0+Y~_>2hm2h@F{D!J~@VNS|u0f zKbn*r_9`KG%z=%%8^rcrTS_Vz4pl~w&cPvdVJ(nL68)7HR&_@3goAQn*HEqB5?xZE zOJz3%PdQlJ-y9tG{g4u{!lx&KXB=$oDS;X0r49tNFYALKgM)TgB=Ehm7rpqDo2Vgp z&Vg^f1Dx*TN#mi)szC@|aL{C<75wt3JVu)ItK~2RnH=Z{-ztrL^2~;Sb@SB`yyQS_ zlNYpnva$yOQa4QmSscu+aRU2OE^P=1D;

n}g14Y+-$GnGpfHH^(D*#esuF4hrT4 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�VSWC`j{BW<_15;T;#E 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%0ADCLQzc@vGKUXG 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

cW({i z3n7kvRbeq^XAdG#mZuEjD%4fKI*2+#7~Ara)%Ye+ zs8ua`X@ICFME6Jmn^UfVmljPe>Ivec%|9o_Pdt(`!%+dAC^0S7+%XU4KDlTlF|D|G zUUpn{P6AFZr|LJr#uC#HDVeg0ea=Uae7<7mUnEbK>?c>t)_#5AhZ55+dv`U+MibMn z=N06aq$h8phAfQ{X=59 zsa>J`;Gpn8lv)lw_Z$9GV*2@EE3I+mOLCA-_*a@Y+^tO?E!`PDPtn77>h1yPv=Q+r zS(1!yt?a5z$u6zWs>7X^m6BQ4psH(br#z*)8~=t!7=zj)5>CgeIR! zSsJ2=6Nr6=CqbAJqPY*hn*2*(5$d^8y)g(gLbNd8m9PT$BB< z&=$mLLd@Y;?X*p=UyfQ;eAXU>H6eZ|N}0Mr8yOP8KO8~W5aRGxDSMl7I}3^E7#9#{ z2r-=}bn-cq@CxLKJ={Rp62i0-pDW()xB$gibk_rf9U<)YOWBZo^;bxEto8z7Pl&-; z%BNY2^dLfe=l;sjw9%lyHppSr&(j_oC%>8C1I{3ekdVvWMmKs7eajJr&aYl*F=uQ+>k3ETnSOLRlrg_BXy9l z+HwuVSweVLiCK@P2A)>d5SaFXbc;0ZcQXGhLgxIoLjfD&^xQ1eAncf27MTjOh zMJ)Wt5s|!n zG9fm4idf6?&mU2YjYmpA1Q25EE)ly^H0lcy8eboQ2qZ+Ym5{~e<}XH~O~exrL4@$+ z2gTQyx#6P9I^Aa=f(h~HA-{Wj(d}(0#)YKkAg&N%=T3g1pPjb?61Nt;0ue$8&+Z~N z(kA~i5^vg6fVfJCTl^S`TmDX)kT`1c4#YJ=>{5}i^Upirf=6QAdk~?7*tkegqLlh>+|2+|7vGlSo+2`V8VaA!L4S*nyGVA0i=r{}sdyLexy;Cn`oQ!RtbD>%SU~NL06FY>f02=O+qa56|=9&FKm%m*0}|UXhQT-lCU(holB6&i*E%Y zh7ewt_-e7HeevJQd502+SVG+ECuAWG9j>DovvmX@;t0_)oR58KKYl}EMK>{sctUJG zr^dufTfIQy;VCJITZD*A5-{gG9UYMf{HX>afe>Z_0V_X$^%+V`O}njK1T&^wG?JKp zkMWYVaz4EurI-FU)-}M!64Rd-(q*gCn+-wIU9#aXk|#@Pfz>i=dp{SHm@YQj*dQBC zOgGv5l(oA$CJZH)SDJ2Wpp7S{&Du|r>)f@Ni|y&nf3>{HTeK|Y4jXQTpu}{%&2RP( ziD@U#bosrfCc9B;`Qdl`r^Iw&T~n=VUu@eV?RMt3(2Z)|@M{BlXjQy*+KwJ2-@NV6 z=|tjD3W<`kfhWE2fc5i(ogk73QD`k;gEEKX*WiXlP`Ed|;2ytVGgdLBo4nnQEq-6vmoe(-l#mxWNZd^4iedP@zgAh}83)#cw z!6#6RkX;u*WD?>APi5C_^TLVHrk0mLWD&xwT*{&b6#POl4kY-4xJ!tNK|;1QSbP_W z#ajYF+#^I%7k*&zMvW0jgpIudBAXC-YsG9s_TrgHT*|u&B8L#2zYE!NuQ4`A*vrE} z+#_J z=-o^Z4+)XPPwu5{mJt0Gfe;UF@!N>qr{fr^FBKO5cNkqo2(^a-mfF#x0L9Qw zYX;&YA!cq7Gm|CR#YkjtZ3&{95M306%v!e_9+7P*R0Q#f5MR@j*#e(!_;+4BOc}&y zLPVR0*v7%ueNd~0eG!28LWrVwDs1p_3%sgFGfoWRD|}*(_g&($W$&zvtjOM!LTLygrAdWIDk&qYU0ReR85Kz?32ndY`JUJ7 zSLgYjc>aL*>s+7v{*3FKYxNnY0^%1T(oXV4V)kPmBH^^8Er<$2Tyqk$A9de8B4Id3 z4MZg&iuso8V&z%mk$9cl0Ynuc0#k&{Hq;W&lbbg~14K0;QZsqFta+&qijiB=1w;)Y z9Qz1Z+lS46BGJmK8;Dv$G@UD8rprZxkhpWE2Z%aCteB_5s*S(yMB-$1FA%>8ap;SL z-H7Xm2TAh6`+zWa`1gou+62CNjPWIJl$biM+`b4#Ou1+zF>PAlDjS^IsT`%3p(;D; zVPlEux0}(jpFX2UA^G9juD?j0EOqrQkwx!$dkH0`T{rBhmyIT-`v+Fb)?^joQP18N z_SVzJ6Vs!Gdh$D`EiRzM^kVG3zgphp@0Ql`DOD4Xpv2TVu7UkSV!E&Dk^In!_h~4# z92nmKH=0`Vsk~>0)yStPv{ghp=6}+>;r`JYdimu6251>^>cO^4|NqAL*D~VI$Ggas z+Z1&~OM+{+w67=sUPfHIb%sn7t*?oUT1)jt4R2b&R14W5>&=_cGU7nP4)umuMx5nn zAuG8sayeQMoG0y6kEmtDKYAs~+=sVpf>dsj#vc@KU};Nrx!3i`8E6@?LrMchE+g(c zJ5p|wt2zoT2Y#B`fYHl{d!DV6uZf;zk6cvRpB-=JmIYn(u8o#vp!dtG*sgGK7R1|P ze4dDP8W^@43H5^RAdV2Cf-e=YdSpKYi6?h^g0LjSYF>O622I6Zq4PmnAgl;cm@i~s z42PSc7(O?&K^!GSUObpg?d6}UOKZax^nGeT@WV-v2(JJ4bJHAip2Ks z!$8;)qSFWwizpk2H~!d_KN5r;A?{}i*xJ~6xKMxS$QTgzgeVRbFsmCcmY`OxU!VuV zfe^+TQkH194G$ljXm0@GBq1XCwp`hL3h>bI`k?V390@UCkcgFx*1UjPCGRy6#3@2# z$4Qv~lui?nxc6)-h|`2H;`_pDEIEVog$I>}AkGlt1;4LM=Q5o4lsU};;Y5hi-XfOy z;T#_BJa}a;h_i&~A1q?>D~IuYwN+;Uh;xJ(TPbC#>eq1fs61{Fi1UPK6(nHs-j)0D zZ?($^gfk&tK9#Z&snNbjEYDa5;sPNys31mRAI zQC2+HeKD;Y5@$Y|g76@O^ZB-HmZOdZ5|7uLf$$`R;~f#3W8SGb5;JFQ2jNAC4o&%R z&VsYJuAGs-6NEP*Y;K8I*I@>@vg5X34~R>I7`;o(Zmd?ijaoHKv>(J}LbO;dUF=bzV}0C9~F1$Tt3^B6~b9V0&2 zf$%59M@K2sU!{sCJjGj{1aX}Z*Cq8=4dMnNj_l%VkQ6-d`Un4;P9OpZ zp}1JW29&EWLceZ{9_K;aBt$x2etWBJ;&~*dUA_P!kPu}8zN>h`7%wEIj=Kor79o5t zDzTzo&-Ia*{n;Hv5Fu7P5Hqz-U9^xmdB_VyFd=5YlCt>)&s30DSaJzO2q8w~h*_U> zP5i!!cJT#qn-KT;gh1n)<@i5O8+;W+C?P&*s<7y?P%PZz{XyIzgfFkt#JI-bNea<( z0ziZjVv2>7Jt>vpUWU)hKoH@C$Q&hPj-FTXSM7#MFo?T^s2Cz*?#;@w(66g@={AUa zgoxyuw{0|Wutp-HUl@q{ggBinWt+u1Cy?kId>6z6LS*ut{nd6AGbB3nd;lVX5R2?Z z?5ytIC?vuUJ_PZQ5Z=~8Rvy?j4~dL6Pe42(gq&{}6z4BWLA3|Z4Js>PP@IcKY7cw5 zUzAN~otA{H6Q^6tKh0bA1Jxd8%Np1} z)E*Yg?#o;Ixojh3wLnA@VsR25gxzX03W2vKA#W~O&_&LR;#e;9~FLd5V{oRiL-kRqY4HWI`$LQERWXL0HZa*+7C z#SlaiA*>yQOf;zK1roWbt3V_ZViZ4Q=$?rUPUv!64uD7@M2~hVY{g>}eD6-MJqse0 z5W6e{?9A9Vn^3FF9j}8(BSb&G!;D(dRs2Ezz4S4N=Y+`Q_mz&}!S5)>!W&OPydXq# zet`XSwe35QxTqZsBApN>=R|DGfFF3^MEO-Lhzvp~@&h%_`$poY*5gqEh?j);xQ6cw zf9`X4)T)L0Ngy%_QK2JcJJ&rth=lpm6cDcn5iAw)(>({_#Zalr&p~7nV!}!(yVF^i zgkqRHNC)wn5I+SHw&$k=uVx6@lnEl65R+zz*|8PValymAJPX7dLhR+|l((OLK^wJ7 zZD0oStbEdMu;8l_`tiP3I2Xe3Rea3oeh z{J_iSUbuKVB3~WE4?;9O%GYtUUx$Lr& zD8{dmS|F+kv1z@S9q$)`3s5UWeL>U^;@lSg>mE14rG*lU{vc`z@u-=Qskhv2fm(H? znGT3LLS%aKJ=-_RCm~TdZ7_)6gs`#~vhMGOV&%SIE^n1eMk+f%ZaC^4PuZ&yznPfQ2*87m**)MGia7ZdIOYI&27oI5W6 zqTkdBC8kc#8rVN1ritUT<^B5z3Q%gPo74dRDKYK4U0H9(YriE(NBvKlH(WitpPt6g zkGQt1*5(vkv;}c1wc~R#Z&;*FMYrqAOJ_hFA;h!fHZ1Sdxk4l!b~^{ck`M=~l$ciw zAN*Nba@ZM!6(RN)OW85YZ!RcCS&j>cqlAd&otMwEg}ad`U*HDf7$G_b2-vQ#T_TaV z+0hfkaY8&X=dbe+pVmlNICz7wCd6PqS`%J<9w*qfK9@n*5Ms?{CH8{3;#ud>OZ`Bc zAcQ`j-L+L)@EWzstm8EhwuBJp2-%Afrn8V(@bEeaJ3=hsOU>$9TYf`g-lCfz>WP-Rz2;DPnSlEP=WvErd=463zBg9!_ zAsaL04j$99*UkaqPKchoyQBCn!xY7MqxK$z2O;{(g)Bulu>y%U{Xc^6B*ZX130qv- z>M#kfqkF$M3{t zElNRLCd8$WQdXCK8W$sSmY0F>A%qU!RR7KEmCESK_cZ$f!j}*QY06AdcM%@nIp_8Z zgdZWIv&8J8Q_2<;!~0Gph%1B`$4hUW?bqP0;p>hyAg&T(GhdG~I>Z&1FNXWnfw)Ep zqbw=g*X=i+wJ>C0lePbJCjAMqw~%iQyvZ&YU58ZE48(OpluQvYyB2Y{)RX1b0>lkM z`0}mg1MK(3q8Q`GwgwSEh>xRHnCpn6IDs%Yss!RDA-cFon1ZfiCW>*mtq?>YA;!Ci zS>%@FlSrI=AO>-Z5Fs-~tYeHqGbD`LtAGe1gg-wwey~KMiNyOyZ9xPRV%>BB^9@~j z013a5Y9K-gp%W)$x6fwb()7@*4j^t5VxY2s4Lx9s%NI3sG(dzB!h4`9Q;)sa2DR#K zX%`T82vHd#VlKjaxBxZnST_)1gcubrVId>7;}VHO=bj+K39*fDd$6pB4<5V!K zh;1iicM{*vL1KBK4u}XsyyC^vsfz{MkubYF1jIu^ENCKRC%-4-UdGZ_LqR+uL`O9V zvr6;`MTu$uZ3oxGh$$D1B&I6PE;6;ch%%I3x*a`K4;xENms>~4w)fkA3`v3O;lD_p zEUkQ3B)f4r@+V46)dS7zWuuAd%MH~sy^%X7qvUc?tVKO-JTYCiT3>#^eQQ3lA)_q+ zYI&3Q_BbvV2d*?miRt1o4eTEh)BS_O-xDC75TbLo3R~oxf;$!iciVw@ zN(h@^Asc&WH?D-`W;lR|Bt)0ze8H~!Ox!{8l%E0-MTpchs_a9tqAI$MukL3+L=)or zFcCAU?ulzoeb<}=5km;ak$l1KC!OvnhLgqx5V3?fJz1HRXkUDTghh%gh&V#*knj`v zh95UV;@2d15b=aa_T%-rufuSscubKehy+5|@y$8wy7u~kVr;Rz1R{|TMrp0tvBR_R zi*wT%9}v$7v5zUU&piV1NQ#m26%a{;n8G{7ITZn+s8v}J*FYo_qGp$bUEG_#3W?3L zZh%N3gvM*W*!)weF%o9EH$kKlqIkWCg-9~+f~y{TgFvJaB9Bi(t0yXs}PLO?tx z#1&I1I~_U-j}G)M4+Zgp5IX#`w7{bpr?Ra!go8*Y1e-5n;i3chv-H~i9*7J=r2FtC z*Uta7wCP6c2oNs`@zzt!j+`vNhko6e+a7_)B!n~Xgx%APFG6Be*%J`22=RI&AJZ!_ z9EF7Sv?vf+gfMawvx8mk;%-|&W(Ej0w9|>{ZLdXm> z4c?;|zFqS{d?G}~ejyXi8hiqYc4nVI6cFMi-@(r7Q{C~Z19w_fFE(V@AKM1VZ%RN^)f>A8X{rIL)cRkV}4yz5Z?(g zAWp#Eow&FLiSY@|L6j3BZ=aYw(7w0;i6xU;f%rj)Aa4;9RqP2w!tqHP5I+gwIE$Y; zbV&hE9i7um0OA)Rws+v?!zueZqZpvF@J+FJ>1?}dR5)hSySi6qzN_YK` zHHuO8TLnZFA$BYkv;4O`cOh{`za5BbLbSLoU@a57;BW21b!s4L2vNR9$c)cs;a}IY zM@JB~gvjKZN_@F*)CaZ7{gwuZIzs5b5wjKJk9E(kKd+T9iiRqByC|U6& z-%up&H1_>P{wK@ZQY_Q+Kbe9O(}*ei>t&;fsjES)%xQ+c2ql;IG7r?##uL*PANA!s z4^eocLf5>v+s4eTEhQ`Kj8?x}L}LbyjE@@w{~vX8(U<{A(HUAiK`8&C>$KXi4zJpvrpk?`6c@ zJ4}~7d-wbyGDUBy8a2FWx?c{-cDJ@qL(7PNwyLQ_S@1;L$1)Yc*Gi2Y)oDfL{m6UC4Ymx4G>h_pZnd!VO-d*+2{svxWhk z1wYouLwK2C?LpWOV!~1p`_Xk3UMA@{t^_I0GwuG4N%TF&H zeHG7GYB#$J2s=WQE#dQ5>(=6a-KV0iAnXb8<+_N~eKC}vR`p!o1B3%17W166~@Jgfk(^ z*GQOSmEau`iXHVqTp+~Vef;$F`HM=C_#9#Y!i5l>%amBBlLK!f@yvjMa3#b}o>i_F zKEbm%AKsb>;vyl=$b@V~4D&=WBx+MYxDn#k&Ni$`nBQY0Zr+~;!krNR87yO`C(S{k z^?(^5JP2`!ZxCmB>GmQdo<5%i!jlj$W(Zje%llW6h*&xogcl(uO_Z=|;k-{sT<^I6 zgf}7T)K%E%!?}2F>5}9{ATALiwT2&wGSXooiZOVN5s1r#h~N{Rl!6c8@5lSpWgvVA zq1{c$%nm4RKrzzRtOVgph``N4c3N?CJ0xDDuL9vmh{7sNwh zAc6=HpTKKDa_x>t%vpB?L@*%?j)~Zi38iI7Xg{+85kiQ25+$}K*BfsNIOfH15Vr|o z$ya{FhfmstV!T*=0z@bww($(y)%Q#Q5;cqMLEIsPc`~0Jyj>kv3}=;`1QA9E&$SX( zvEJ|wiZS)TX%OLr*r6n4`Q`^_A`#r{EQq^=s0-rfSRBZHfW&&g^C0dK;;x63UD)D} zr!^>SashFl5WZbSY|%^+&higdUj*@h5JNvp*#`eQ+_Q|Z@&FM*h}D~=Y;vg-_cESo zd4qUJh>g6rG&%C7IlA)Sb1s8;M2O4$=)6_os(VrGAu{{dj(_rx|Ak z38;cFvvXxVY^?TR_$@{@z4?7ZB!?}l`itbrQcz{7%&TPb9#nfc=u%xT8?8NLO{$eW zYtgI*)em$tYU*j@wFhH$efjQU+r7w&*4F*i@+Jqox0avi_uLoN9&Vd7uz#pM7zm@~ zijJf3eCrkK8sI9fN8Qzy2r98?J8JMbG_uG()%2HgVIP|J)dliCgLJ zO@1bCvn~ganCQ_A#1le{;Clz3);;wM3E|HcAf6K9kRLw=$FCzEIPu=s8bl-^V)!0? zzB}gNSy6jM${?Z$F)dDo+00pni=8S*g&?8{VZB_;l;7vYpzF|CBmoga2<`KHPa3le z-I1tBRsj)92+uPjHe=?0ovN&~sU3(oLcFS#u-SsXN+?F4qB@9pLR{s`@;1j@z(bLC zbsaz?5W?)4606Gcv_~=e#%X{^B*c$Oeh@|Ac_So-C~1OtMu=KdCFXFb01vz$|JD^m z5+T&qD6^ftB5{H}@=bRT$%GisXY@_9i^rw?_al3ONFhWGpPv^MymbY-j+iA{AW{ht zcvi&bs_5gQin&%_5NU+iGo0@cbXw~Xicw(MAH;J)+~kA%w&DeqNL;KQ2;v1H`iZ2> zdyV@mBytxI29ZvP7bApBN#$4_5)b2bL1Yl(u9t*mXnbmcM2lX-LA)eHvqE0*==T)Q z2v;~g5=15;npQ|z`zMERHzDoUXb`Umk+4z1+8D35K&@i-au8XB==4g$j*Qtl7>WFi zV?n$oM8QNA`%gI$AQQu#G|)T7S*wPOC%<#OaSqQ5DP-YY=qNH+!Ya@p9CU@ z5E=0jCT?Z%4aLy>F$Kh1LQL7!hE1=MlMbJL=lr4aIO?XaS;(5c+df*?w_OJQBShc!2m$i0*tM-JxrWZID>vb_ql|AvW;k z&~A1;S0T~Y+!w?TLWJlFNBt&*kzHVUDe=X%VSm6)i7a{B?Dzju? zdz}29niK${f)MBK3fOsvW;pG?u6YYYB_Srv5wV|dZ{vQ+X4_y8RfITiBW1b%O*GJz z?=}hrQB4TBfqYL@gnF`E(ht+@o(%t492~ z52B6``l|eU{;4_(31;vR#BV}eKPO>&wmp_2k(U1$g!!p|4~oY&=eq=2U%QDC(~7O_ z_QKdF7mXyQNt4`UU7FZMp!9M}Jh+l$eGO*Z8aDO)h<4Bfs=M z%^D@9IU^d_KP0BxbVB9!7Qq@QwLCbo0sd2B+OySndA6uE-rq_x>VMI^;j3` zk%Vrg(oS9BqAiG9N%%~KIWBU+ADNJ*-9a27#HPI}EYL$6cSSZA^aNo^h<@23wrlFD z=BQQIW3)h65u&3GKl{$4Cyo)L+84x8LL5^RvzK?S;dCI(p+AUYgqW$S!hQsM;8DP4 zIyxYZ6Jl4im~E5VE=Sj~F=j9bYeICJC}QulrsKJ#rW=QXupz`RzEyL}ZS!kTjPWJI zL7X6jNI}33cG`z$^o_YN3WO~o0ym1-NXr|zP;g3D2EvXIW|0Ec+G$}qYSr6j`XKBH zvEs9YIcW{XNy^7O0}u{`c+;;fd$+6@mq`3ZFc2pRF_PEeM}AGmHQD(OCW3Gz#L+Sl z(<^zh8(oL@@F^fp5u%eH->6YH*bs@N@@XJW6JoHUkXbr*$Az08!)AauLx_nkLS}fh zbx#!IOWiCGPK3D356DU#D6>VP`1o89X9=-#jF{y~CVC^0n>ZiDIYNk^h*+?&1MaqU zJhuqMc|sWP6tZJI3h}6HyPHcuI1|FhL&SPV?!Y4{JqIoWae)w%hVpxty~U-4CaNnz zxDaCBE-5qoC|HE9+_ZcZ2v>XNo>(Wd_2N5Du4w zEb6Fm4T^E4?=}!#lvpBU>srb7BH{dU2MBLM4CZqXsy>CkLE_MZ-5@Rz;=n8=_91fl zS0t8n+y~+^C49x~>$MY}NUVrF0K$h5A9(3)+SDRE@;i9PVGzEAupXntoJRL{MKNm1 zEkO7YqMLxHfbT?ykq8}W1>y=JHtZ9!D^g4RJcIa9E$hWA~Qh96($rMCMirTd~(C4aG3o=m_ElAzJW} ztzDWSvyj-*^9+apLi8#Uv5bRuaY&d&odt1|5MTL0MzcF9;9|taz0M#42{D0>-LF_~ z7l~q6XS;y7MF?-6#CK~JmW;%it!^NK2=Vi=khRlZGYE+*4?REx6Jjgx$#gC9!L!A7 zkM{-m=Bi%< zafcAeCj2yei@CUXddT)Vh%iEAIH<5xm6-XcRT71pAi@cuy-t~_=_|cLVsOKhK2Ng3K|CPDm_!l# zR;v(-t|QL$K8OfHOye`TLUtE#N8)r<1c--(_{w+D>?&{G4hfHx#~>aNB4Ub&ZEfB( z2PLLSt5goch$$D1B&Kzd7iA;tmMul;WxGA9^{}zTbo;g#*^raYkC7Z>*Y+=xCrjpA zN@cHR6um+triIVj)yqZ`Q^n94S*7sYRg_$AoTye$8&6EFAL+}3uYKK(Y{WwKzgphp zry?7<<%F~OC^2Ea0vG+5xRt8HR9W9W<^@Q+>e2(m6GA-Nros~1CE|+r><4{7JS9Xp zU%Yu_k8>%CF=za65Rrtq&nH7T$9kk9Q8`8iB8m_}{PbJ34T^Ze-lFe%AfgGeLq*Ih z_Z@Ulj474|AYup+si4f-PaP42#E*pWAYuujHCN1}%_0ktm?E19B90KVUx`_Af({Teo8A5`FG21d&3B zy90#m`PtAbNQ~dO1Vkz!I&_gT$#Zx7$#___6hs;!GWas$l|$ywKry`KD?mIaM7fEW zO;K0q-pZ`cGPlMsd7rL3P`NCpybuWknMiVzu3l-VYY3;9S) zKD`x079r-m60ox3-qVoKYOw>vYeMXZ6ERiC7+g-;TCfvDHX%y*i6@uVlpR4aoEPl@ z@rDqSc_++&!+kuJSO4Qa5IKZs@2bL*Z`55!F=|#G1o4&-S^N!W_8@O85|h#ngLp>> z=W71m{jlmG5@uVEfOt=cy`f_EzHbFiw)#G>0`Y+m-T8+1!MD5M`|5i2F%Y?g*f@*t zRuy6}47F;gh7E{3Lg?u6kzeE8xNx({$reODAu7zI%wd-gLou2Q9YA~}#G`j@*%yTa zPDqS4cLec?5YD`FzoL0BTy8BIeg;GVA$;Qb?4)Z2cqHEH@>vj{2~qt)$Zl4=!teH` z!<|7C5@H=+;%lz(cpkcr)el@id?CaK{-$nOdkf!J^UU2q6cHlm1YZ=KJp_+tP7U<{ z@s$uhYm``&ekv}W4j<_aqL>gy#e8#&;UR<3b!4~n0Z~GTX#xTJmN5aR%Y7I7fhZ-! zP=5MeoXRKs{aBQB6~s3}h@YykflBjmvejbbbr5BQxN^E33)`@H7rKtK=L0}|Cq&gq zzQpL$n}bM9$qNKgPKdl={Jk4!x&(>W$w44~5aKM~OR{^?#t0<#$Zmu9NeF`lLgqg} zQHn%n_8kzv2%*6z;Cn7FOFKHXvz@3?-(o%&W~|#FUFh64S1e-DRoKJ6oaja*|(|SD?hSi(Ui!hs3mhR)T!{%$yXIm_BTX|CE>>{@zq? z(wBGJk)EyJAatXeH@w^CZhE)xH2;Q{5kLBtYxVy>*uRz$Yu@QDdppp35Lyy^rGI`s z`S&tnb*tI3^}@(~$T-gX*r?%6Q`>t)CM+0bhn5jv*#D{C5X*?YR#?hB6wMx^1;Ilu z71SeY8L^o>QI;EL5`vUb+~+?i-oTD~)a0rIoWjvEVp)6xMJ^+@i%OEK_{zi4a^RN@ z8NH0SYd~{7qo|ju$gNLk5RP!XnTjKO>bV8Y$KRBl%EfST7R1}4)qi%-)yvLC@0WcJ zr67(FV$LK9^V55<4T+y%~a%01Fsg0LgRCT}tOZ8r7>5=W|9gRm#WHa;IrySoAInePxQgK!{3+72Q6s%?UE z_7Oh?AWjlOI9<%jN}_w9R%sQAKsXY@sRv(hmHt^9iBeS+5T^(cYbaz*R=&cymG|hj zAWjp)&yeq+TcU^i@=vz42XTfF;ruuTuStcOs8t35>L8p5QIsiRgT`lDBGFr^6Ns~f zsN$RN^qBVHE)w^Kb_Q{d5T&Im?At^4=}2tbs|n&fAmiZo+zo^?A;!KF zGrKp>U644sst1S*gm}vT!6gTN;GvfF_j`eGA;iE_%FJaPzgb10)=S#lP8IP`Gm|s5-ZiI+@Dq!8_*p?yTQ#t^IJ0TqS8L+1X!f{B{ z3?Br-gAmRJ5;ntoM=cUl)(!#TNeD-G35)&W;)BGm*r6c22ywl)hz%|4-3GkGGyn;YDWgDKBE-GNA{H4dX@5qG=`Hq%mZnI%<{qX9Ey^gplnPvW=#x__u0uZ9Ir8gn05@z}USl z{ZWjTZWBOUCB*3c0#^Ja23M%!izk7&Mu?43d`Q*T9M|S_#!Lm_Pl)WT0;Za}6c37P zZJQ3_Iw7{rRATy-Pw}Eh^}RDd+#p0o4_-I3S%m+OTSsSs2p~i@&)-_A|G?kDgxonG zZW2O`pPgzJKQJEsx=oVig9s!<(^<-F&i4clB<9;L0&$BF8DoWP)loh1g1pct;lH-HEu#Pm4=R$XNl zghX$FDTr`F4E-ozpKZE(A)$S83y8afIKNuVTrOS0-&&!@HW2p+QF~CxmW@f?jAA@< z+X3P}As(6WU-zBfRwO!V><00G5T>6+%qVWiKqQiG?FA7*h-@2GmN4jq5)$#N4}f?` zh{eiM=I{BnEfPU(4}*9_h`XJ{%%jcOL{xi-Ez7h1r@#9j(Mav#hoP&?UVCdHsv!6q zf2@a%)gJmA#mGjD&UlJs#;#9)kvv&a-&8D{IQQW*RD1ACFQ}J|)*ik+u9UspY4`!v z51ttm*3-so4)4Luz#pMJS&cs+k2$j zqv}CbL)>WfV31DRNt#Xdw%i_Ki?rXB2B90(yx}S(UG#$8rs7YZ;ocIs=*PsZBy8P= z8SXL-M>n7C%Woi_5Mo1)gc;Wu;6V+)DdixZ62gEVJ`xikE=MtD?*0iPk`S?rRoK*( z>Rpkr`%nQQiV#^Hc*@~C2^Ul^EUg9+O^9V-64vgp-ZKwNg= zmLL)cVa5ls%d|DVcfX&IfJi39nYPNzw@ntFRl9S!Du@(9#7%0$3I!&3foShO?LnjxV(XLOhSB1I^##?oOR|M-a~mG32HS>!%Qa|G{oEJA-&Zi0dXwY-f`# zd(f{N_DvH+Iw3OoVK7aF|F!qjsTSQqWDp`~f{;0UGAcqbjCFg0cu5G8AyTH;a{X;2 zj_v6UB9jnp)(Y6}=R+e$rh*yMY-KiCOLUb0g+9JomL|D@I^8%C-n#z4B`zTTIlj!>AugvB@$b;p&)Vy zk;sQToBdM3iI771Fc5DEQC2NrdR-Lo;Qrde5g^_XVlFQyeOx*WcaY}290lS%A$ssV zcf-^Y9MNxOnmq=@2SOzA1=LG2AK-b>7TIzTxrAUo5*D;NCleDZX1BeCqzFFW!BB@H7>WFDHsppBO#)XirJu`A$Yos(aMP+J`utpU&1@!nJ^2) z7ea*bRR9yts^I6m$YKtNB0@}SD`Ll!m*8h`N!&aTUkOpFrNS~zdRL);@cy+0Ac_fb z{2Sk?bLH1fNW`ct22nx?X*UV0QtysSBnzXAK$H?f=M~@CKiSv<#pq_X9K<(5R5TN_ ztCMx`Q`^mFC5SRY?BZ*weh>LojACd@SA+OYiH}0|cF}V@0qw@qwIIp~@o*qt6nwAn zBZ^@#bUlb4gjlde%!VJX9g4&^_l+Qa5@OE``KyE;f{ zTbO~UAVjH>gtadB!%vib=j|XW3Gv%V#HuyV2BR2@yY2!}MTkxOyn()Mrz(;7wR{hV zYC_!qq0H>&?Zy3FMT>nPY6y`yUCP48Ud6qo&EW??)Dl9SpGLgcKJEf)Rb|m35OsvG z+9PBpy|p?cp*hb2#BV};ydh<-BO~#*_W4Uo5awt8Jt*GdfrzbfQ16Wr)4F3X?EdK? z|3@^En0`5MQ8w&oM)lCcD79=ktpRQ{wd9HE!~AA?%WwBEMEdmqq8 zTAvTXiV%yh30VHew+oOsA}j!Lln`s0@H2Tk+RQ^@`I#cbUw5O#!cf5Z=EpYC9YVqD0n0bx%F=br-h zy4_=()*F<*8x zvFMR9x{i5GT7o!52vti7(>}2ri`mm!gE&nH{bg-g%NVN|6yw`XB@kx_G5;g4Ek_jH zK*C{;5QGyU?4R+2K{jl(L1K4?7{pmZgjA@owFB-oLE_{n6%gkL;j~JLwVt*UC%@^D zZ9$x;#9%QC%G`uYJqMT?2xmg{N)xaRv(J7*t(p?u0mKDDto2Y~2lXV1NQ63RfN&v% zlZFzzWiOhKM0*uY5Uzw6?#H(Vu1*+(gnLjo5Elty#pn9IU(^Rz?h{+~1mQ-AJN#tx z{ufKaQH-$}y+ODW!fHF;S)L~lNla(3@kBP0|%4+Y^#i1~cW>9BSM zCP*BAI|_ssA)50sy#@MD@aTZ^YZ(Y{LR_|zu%}hY_{tr;^g&!Agms#T9bEVhj}9C* z8VBMsA!_(?wobn9qtJDD9+&{ahY(le_&!}zFW?OZq_d`g@Fhf!gdgqV;JFdSu-|M5 z!jBN!mrK|xYb#uC-Fa&+h%1EXaYxMd1;zQI7{;3xfVfJC7t@uQe!A*AB+?~|L0lt5 z9^Xmo(p}@@NGM%40^v`HFIl|ww&TB!+HrcY48(OpSZz>dTl=)a&w0VXl^|{qVl>}c z{&vD^e3!I(zY0VEA+p1i*|2RJaB0Ex%~}vQ331s{h3yG`ffs^1O^&bv2*2qMJVjuI9g>W)X~`V8F)BA5`Pd1>K-SK==8 z4<1Y24kCmQHGIdoTy`24PhD5<0&$xVWB8GC(Mi8>N`C6s9uT2~7;GtEm*dnjP^&&I z-VfpqA>wmIOi63%3nV-i9Rd+Xi0ZdWEFz=hQzU$(79he2VenMS?i6-(LL%~+C5XF( zh%pec+xda`iCVbh7>Ij>_-L)fwoiUJ48;&A+km)Fi0_dScBR>h^+@#GU<={_Aw-M# zGq@n^5)v`d_8=k%VfLQS>X~9DN8O8zm3R9d^a!PvO=dR0e@aX%+W(Rpx9jhY^r`m4m;6h$O_|zWhX2Nmo31Yn*clh$upM@Np5-HUc~y^7NE45YdE)o+@A~ zmzk|at(xXn4kCsSCngA3(W;x6ZMb|+ zibO!i8W8b>Fzlwxc64_cjzo*FIuHqj*j3DvtRTnl^LRbvziT z1R{kHD_4owb>$`2NX!ZlfJh}oN)r*Y4Ldv=iM$PB5NU*XXewYm<_*OQ`DPVJK|CkK z$Q2@1@FMv$im_--TM#b@Vc1fIJ>7c{cP6jZvKis2f%3Pc$p433IeiGrdb5|@Uo1@WB_#qNWvG(h3 z5LJX&oX5{E{#<(uiAeK(AgT%BA0=W3w%ssBV#&yZAZiHFiKm%wi*Dj6;@Wo(gQz8h zN~V}?E_qvnVjNq31VkMn!hZ5TgRTOeR6e2D3dC@=_4#M2&-y^0S zv_wo(T4#b1Q;)JFCm1p1qLIY3cCo9h%64dfl$dT^not&;fsoKJ7*}y}d+fZ`ZMt!H+|NH6^WNQaz z{MGU%Pa0z*_ib8ei4xPEgBsXBB&I#YkL7i4B_~j7na~jbDKQ;mUn76NZJsgGO9wXy z-KgdbH&4~jtC1}Igq9KSs5#*L|2M|JmJx65t0}vBzwjwq5-f^3R8RiBjQGCo4A~z2 z$-j`<(a*e5!<$w%&6k@~&K>JN%HP@$rO{7TDJQnZYCgK$ zTmB@cECD(DEe*mEjyJQFq>EnO=N0&iT~}-k7iU4dEjDi!vo$TY_eJlp==ruFju7Gm zpMPW%;qeWLIU)8SED14Ui8329ZtH3!RwkVUVMT~$mqqN}9KZh>;%-!lS?9=lNr#`6ND`xvbORbt!6g~iqTT) z4Z@BPvwQGCrVH~sAd#MV34}c%mfzyPmCsEdBm(k%KsXR$x3hq~NLY%$zk5>rK%6AR zTz>lPdPLS3x)uVg%nQTaxa!6$vGOe-Nh#Q7}!y7LGrK2NtVRZ-6*Wh!=c6 z+%GfYwNMPv^P3>f5Mo&~e)x#gwHFez0&jtEB80J_5_@y|7A|mm1qXvTONe2CLe_eN z0nYMorH6tzM+oN|LiXdv3p^99i&;2`^MvU6LcoOGyG}#b@k8f62xmgbQ~6TNCCzcq zd}mPvhzo=`_fEo2<*odUV)Q@u7=#NUw5E!g_nAO^<=!8jf^a3o{7xcvB~YOUiqSqe z8pK6H9J!{<*zYP_H!Jjr1K~!90q6LNi9Sa=p%|B2C4z7#L@i&+e`_#{MB;%(5(p1M zc#1@s4E`>uSux7eF~P>j9bpM&rs#H0K+EU;Zd2@)MmGC+6};z^E} zg|4`U=S$w|`U=D)LiF>KFojVTcv#Be{%a7I39)3flx6sy7>ZgoYF7>jA3}6DP+~{s z=M6xjZKwAjdX(*8*Ipxl@@B;tC<&j2AIB=oDVT za`-?2h^vHfIKZpK#+mAV!%2f8)DV32*o)4y)B4)gm}PDXrHF3kH5}F z=hQ&lCxlEv$Og`JZi-^O>DLj&1467i$yb;B*o&Xq#jYA4A_(EjDsfcYz-MSpLO6bxJ#3Mo&X9@Uvt>`dRdpK{i^Ws1E?terhwTFxIFUktMS}C9k z!ul4w>tSQH2mh6^vNj{4w2)k;vF9(6Crfht&<0hj)23GVQ{( zn^65A%6nfuZM^od(bYiivft{HMG7|ZEjuTsq1wamhV~D&2lvn6@?UF= zAEWAlM@)mjjaCnMO6uqTQ$E+G;2Y9IWB(V;8!p%Eq-TCr11F7UtFh9 zuc{0uTl=;i0r7+o-_NNq9qUhcW{G{V6^N&V7}G+)0+V;GKsWgPqsKu+5@J3-aHich z3p^NbZ_f!3QG}SXxeXIs_sB&tHa)Wg5lx6ZevnamSsF<(%N<*Ua=pYa;36W#X58*m6e;*Pd z>q9_f5+ZA{G7HLUxdDj-*Fr(OB7`tm#8iIn#KX@`oWen55n@`jlm)#~$8*R>e7FbV zH6do2iP_fu^VXqOX{bbi$R@=85CMw_{!xcS!pcV=-Vj3DTFTA^E%ZPlbk>Uf@9U--$s9Z5P5{qh!nH9?~_we zjHc(FgUBaD&#V0SvEFVyk?@vgfcQv=6CH$1>)F+GBUBBoH@ z8c#qQJnK7%GD6&L%V+2xjFq4my^j3=@tqJ+;i_zkfg65bdH1XUQBH_Fo&rt|8{&v! zj5}5Z;s+so4)Jq;)8F8tN|bgjh@XUbG(gBsZr*@@tD(n#gZM>=4~8O^=r0(FT4kx# z)a{?Nrh*W?2dFZSvKhE9YI?sJh)P17>CYGDo9p5dqUMm6AgTzl?zD*YiC%!eobMA_ zgQzA%9zXC>&0iHyy;Bw`gQy{dZd(ZxCQZU+N~a}45VeFznW@S;ZNKsh{Z{kNi$T;8 z!dog~qbwd|Au+t03W(o?DCfzq^%K=7By<n--F^I<65&7EmAI{#5CcQktW||lSg_kM2YF_ zWlQU2qlxLZ^jcYSsf9O6F4J}_tEY`8rk&T0l{fpkPZQb2Hp~BNd6QcYvytoNG*d^3 z>4*~z>>m=-Y|{k!o(oHSP-^+SA^uZh>QSVqXV>>(d!$Wl8-#9D^M*^yyX#qb8sN&L zbl7URXba+2^5hR{{*={+(aq;LUiSiUD4qw7 zP>kp*I}oP`VYNxXK8z0tL!#Z0lORqLqN9{V=%p-XkBpZ&qZmG_ zXF)g-Vs2YrRJqk1cV50_odHV-#cY3KtOP2ocR^so5n(PDCRA%|#IB z2_fMdHE#0q#rM@7Qx6c%gt%uQWSeGmwm>niefI)!fe>R3@a5@7%~g;PBwYsKLWrtr z3EO|&OBad!nSLN#387uUXQ{35z>5X_o?QiTkq}Ore5FC}C_H;!)8sk`H$n_sAYo@- zjjKVeiWc7l;Z6t_UWe~GM}#Zh)kkiD@F2w9M*=o@^28q~M%tJV5T1lctmS(IwWw=@ z#HPeh5MG4nX)a;*$x8U$UOg!sgf}7f+KJd9*U9*9Pl>$;;u0aA=!jVJmF_r6Iejbw z#AQO{xbyjvqyOvRoJX3ELHH1&J?|7h`f$G^y7E~^pMvluM4M|ORu;4)9Ek(HqCxl( zB9L!VojTJHmsDg2MIb^6F{q7%m9E=>@73Tjmwn{Ob(2$AEW%#J-VxPrtpjdBp-gfO_#noVf^Wib+h(LX`lB}4|F zYjnL?Q2`Qf6DmO5BgDG){NS}a+r>!OY^erupAdKLRoGCkgfmFo(X9jVfDpf$irCvL zvJpr)mMeJulLAH%B2Q1q;wQJ>f`r`~MGy}OktSPw>8Q`qvh_pW-bXUMcG+JfPnMh< zOJv5gUk9SZbf@=D!#}BPQFwPntLU z_wz1#W};d6c70)L0vG+5xRoaG7w3eW={L~rI`;i~5KjnEbdDcKZ`=usi*cJkJSD_< zGZp4McL}cbZ;9RlB9aiHd=gr-v13K3Rjh6+h$up6{S>nI-QVdWanybXh-gBHc`BQ8 z=|nRmmQ33XB8Cv1mhv&Au1)aha%uQp5V3?P;?tfJD_ed?F;+_tfQTbRR)mlZ|5l8< zxH?}Cfrux>x1D0P>hp)ID8?jj3lIr}m_3hA{keR&3W?jbmLL)dG2o(@jmcR10Ex8& zj)8bah{qQMtiMbFr~RWIT7yU;gfkx(nK8j+Jc^M!$`(X2AzFw8%*$pB9z9ERwg-_y zh?%YVxsC4k0#JINc%5D%v)v1d2M z%~6bu?H(Xr62e)n4I6(eACI0r`052BlMqt|DY5m7g^y5-Zq}DUydp$4pX9%O(&w&7 zm^SkRkwu7hfl?Nl?Tg1nzIa^)@tP0=VuY;Q_oldWpV|L9h-^aK|1D)tA8v1nS~YW5 z0Ejn)7E=g%TSDkNw-0~ zBSeQHF;l2pIui*U|1c2m39*nT5dD%$@JNc|z=FgyBOzWK6f-t@ z6CSOpN{RvTi4eB?MJ)6G7`qR@oZIgK;0d9+S7l^ouZ)t+`wqE`?7fq{N=Ei<4-uNE zM3jakAqkbVq^Oh<5=BXaq!NDD*Ll5uInQ(A`2*gsbA9gnGp=*4buJXYuX@OmLA)nK z&=DbP{^dO$!9J9j0-~4@ix0v$pKMDh#nDQwsTAs zPUy}o$OBPMh|$lLSe^4fHuN@m{Srh4A?%h2nO=8e{Cv1gdJUqI5S#hAzaG~H;h95@ z*>6C6B1Bk~GINVK8HuiZ&%q)Pp9vx1haBv_9Jm&Ve$$IVR1qR=w=&zjvKIFldMz&n z@r4jm_6XVNnCNm8V|sNNh-yMO^c1tho%TB*ap!s^h_8f@IV&?o*A@6(a#FbpL=7R- zcyB4!Wd|%Ils3pX1zF@a7yQ>;%6`NZNqK*)67YkY6>S3`+bS(M?;u|6Art;tF zX*2xgWIKL%#c98sUQ-Z12vNF|pKYkM z75^WtRw#h@NrzjgzV=27xpMIP4%CA2}Vr0Xe2T1 z)#{8?eb*ZmlwQVsGiZQ~C8icL6QnN3M!rPy!Lq4;kvv&?y0l!nZvXAuC^1!XnARX0 zO-v6c)JjWy95hjKnHe;_fi|9)R*o7g)70=ejcje~jK5mmFo? ze`EY>8F72vZc@_&9WS6I!5`NaHjsZWBOa_dM{2h4)J|mL5{nu&ylGcYSV%K(-XDRM z5ucj-zQGX7hy@y!(w?nCEzpACg-uEt5VedretDWy;9I1Hl+M}@e^9)EFW0EcrW}j8 zh?Wu0UH6+Jml02!5F=aKXYoC>9Qgb1j93oLD-Z*Ob+YRN+i4(oa{X`N2*;agGozE< zMMDEz_;Q+14i{%mye(pn3)!^dAvg~;bFBnnL5RW_Wwy{{uNQhFITU{eVM&N(9r=*z z9B2s=V_ZXsftM~AB*p*>eV_}3$6Pl#1~;qjCmT3Se) zcWnm3fe^}SA||e0z7C1pj|w1;5MtmPej?v+dt8D&F}D>6M?$RHAYzY0=FLDcHe@M* zI7*1%U=^mOZ;N~XQ@0C293zCya%JYFqR|V*IDAM9!if+of|S^D<#4>H>-|_&5XTAO zDH5_b!@sMd820Y1L7X6jZlV%Xi#}kF#D|!+AWjk@xu=lHJ<5NF#G_^HK{yk_MO(;v zXljHZadu=U5H5uH#<#hVukgpuhoWy65UzyS86{xZJ8x>D7&g*wAlwLH#Aha2eO69D z!qlt>2zNppKOtg<505D#G2gZq2oFN6)>dHy2j^BGG4fU)5T^*?&|Szjhj`#xkleF= zAWjp)u~N)h9reKjKy%79L7XAP=n5rvDepDTFjC|Pf$$`Ru1af`tfh7wU5CxB!63W{ zk-~@YS|96=C)f;mpbf&C5GNz}xu!|&a2>PFR~-;%2{AWIm96gi1lRvo_8bPnhY;H* zD>04M-?pLas4yD=;v6CB`NCu4{E;||al1GQ#Cby8Q`P8YYNTj#W2XT=Q-d~06yJ*7;Bn({{2tPs`;58KajOk8D z3=vNP;ZF!}z9)6PWRMXO6RiwDTq4A7MSkT&THq(@h|)9=0fcDXU5Q06cE?$arp*ix zfrN-@BVyh+=iyq=wfb2gf(Q}E>l+{4k{+V#u-rBmL@*(8(o|U2(LOpzbSaw;;xZu~ zA6I7eZJ*#uoBaMoAVLTc7tL4uyiGodVyybS1jH3WRJ{-~-4WBQk?3q@2qKgaF%}Z` zsC_Q($-FK%0&$fPH|~qs)8UzYP>kkFR)Gj3M4xPBX7a@#7>R2+Yd~Bh#2miMyGQEK z`ADcQUJoLi5EXCvCI)>B@tx?CxDmv4LP&V+!OUSPz7u_Vn1HxJh@e;rGi+X2i&|B5 z$rQv*LiFaFm@X^&gl8bn9kmTa1R?hE=e#<)Bc7g-?qdex79mWw37FRHJX{6KpRx-? zBqjJtoD&PQ@mK=;xCg{-LRj#rchAF{_C#0SW7&QXQG_@?Q^LNQTc1H<_{W1F?hxX_ zR|zZcJQ!D9j#-<7xJ!s@6U3~^#Z4tBM%$N`Anp;OgdZSxqD%5*B+3)4K|~W`=nNG$ zvCg&$sy&DwmS6eR-~FFxr1o%Vh_`f^-+<+)f>8ORq5(Emdzj*zBpny%RfFWwBcJ{v zd9pOvtWr8+xyfZzd+7M#bAxQO_Auwxcj@q3TXv%Q!2yjg4YcvvL+8!oWbv$^C$h6+ ztN&_wlb?jy$&P&qjYPGFR&l@CKhz#NcqYlzt{=j?V|RP-8~#)6p_f5Zy@}-uyQ11d zzxe;6dBfAjb<@+C);|s3O3UluqGO0#Y32n!oRb-VKN-4p^&nyik+@38GQVfw7?l=3 zLEI z0Yp3@F7N|2EY~M`BC+LeOArZ!nAA_iJaeDoB*ngq5{N`X7$l2XkBq?eD8|8S0uV`r z`0F7N`9q$E$-#CB$8Kz7#V}ZzqZoAJhRv8X?B>!{txC zTXPhNtl~}}9up$kLBP5U+lRZKN+&fyJRw8`KjLhR+_Pd7-XJmwu_TYrku4izhgxNl(ig;2LU=yr^Sjp%#h>t{ z%9V?pE-VwfEtMmO8xh+?Qaj0f?W5Zm~60rqJbK}fijPXJLsi0%9o-+=iw zHAob=PX_UZ5TCm9bYPzQU?i+xOabwh5?*5V_{8(UqEQ;xRIMj%QFF>5Jb z8hc|iPPRhTR)P3Ph`fEgbHCuqXw<5TeQQ9J5kkgyh8$lOi&y(pJX{B&oDeSeB}^8- z?=yUJF5uAP}Q{o@r@8U=@RC1%ncWT4;tHns3*iezA{Sd zOd>-u+C6aq@tqLz>HP4jwy#?uVL0?Ch#!O~n;>GjLq+&*uZ?g5@skiM9*UX&EtBmi zMxUY+AP&3#dr;i)zKD(9v+M;*OfQYjy#`~STr`rHMjrN&p1Zaf?{Ae9_q+i%mY8l^ z^-$`de{>B>OmB33@fXRHrE%k`q@}B?-lD`*XXMKU*=S<=zh%VgHLJ5wa#`T{s)071 zm}(v!D-$Ho!uwn4hUWj(@+KE++sg*(=5#=bY5S|c**_$v3Yr|CwZpJ@GF?u;wg0LaPZXXeQ{!D2u5<{y$gRmup65m$t+vOwekm#_g8iXAoavzD9 z&6+v5`zaV%3&Nfd;Ws7h>Xf=}D8}96-#|DJ!ty!a^fh-lPO#VX{sH0$Azt&O@qxWf z9EzcMOfLM_>%)-{V@d>UZO0{VkvPAjDTt$lXnvW`4t^uTALPMG3LuUVVm`l)K*LlM z6vOaFOAtI5oBl&$NB4IMVH3%0%r1O1dHxdxJPbh($AmEWP09 zdn9I0?+3z@5OY)btc6_(cvfv|PfZYBgoqGGSj4>}ZBdLp@`FHl6JnHsgl#vxq>RL6 zb1e{O2@!Zz%x-UMibrL$wRJ%F5JG_;^YMDyKKy(P57Y&5ju5Y&iJ57*>p9e_=KZ7~ z&J&`P7bEVqRT3c4S$Ql7UqbAWirL6K3I45q-q8nffe=a8L~LZx7(Bj{qA>}?MMCW4 zqs!yEv~Gb~RsPxlgdZW?%$3qxsbJ3Hxz$sH+ankafuLhpG2&` zZOl3pqt7XO5CMeHbZf=LO)c=3)9{)jh(JPIiWRVmyL!ebhT?_eAc6>STp(h88J+8q zSZwbCBA5`nHTVu?fu1dq@TzeGahVXoz5=$x?+q?^*y?(M2qA>65&wRCY?q5-+-!CM z#1%r^+@r!wo0$$m!tbjeh)_bTTEI76?khNfL_nKB5LXHDK`dtP4w%Fuv1@e*h%iC~ z@V(hK-ak4839-gi5Z4HyykCWF-1TZE5@zn3;W)D1#y!QkFSf_+99h?p;m3({S8C}A++)YZ1G!P zB_!nHzk|3%h_Uh#wyfWL-1kWx(DeGRzE30}K5Z7UJ8d@MUY}~50*Kp$IJkswX>+96 z9@HwMVagz)2;o+z#&+E`(L-Y50WpX>ged2|@Mwn$A0#x^se!mlh@SIRS=h#Y_mSvn zs0HF4A?EX5_^C~Wc#L(}g`ps#39w2jtp_791vtX-Z(Xn1%k@(@6A4 zhywAD5b{fv*tBj@n~~_m?tw@l#H)1@HpL(ffBH5D#ejH3i1}%JlTmT?7Zk($<9!gR zgxFXiVriv=79bJ1I37eAAtLTbSlWvPIQcbDN&@ki5FsPQZ0e>>xbxz9>>-FJgh=Jv zN3y;f@QCThKB*wm3GqQ_2KUX8Bfoz-Iy8HBiTRlqdD5_6E4`8FLyCLvN6h}p+r z4?H5YKkg}rr-Zm3C}HZ=7yVHT|LM;_WD&xoC!Yu!ezFb;UCDD0*@S54B4)7`FXNF| zW%L5XGeSfj7O>fN8F&=1k48R-970UYQDmo5t?_+jmQnyBmk^$NMXb-yulR1?+P4tI zb3z=~Rb`b44tUhb|Jyqdd4!lKCt%&Sq~ML0nNbOd7li2OC188Z`o2TIm1=b!X!vQ!k= z+L+`UNYr{(gD4<`BU5GJ?bmNaBDKB-#2Z4qO&7C?x0;6|F}>3_5N`>w-%^$B+H8(T z$sh%d?AGTajonTTMdIp25r|Sk^c%0pKgT&@{Z9tS0VyV8E)eoPAi`l0yse`B>gu9)Dbqi~UJNJbZ9YItQ;$@YD zZBrlI2DK`7br%qy2r+(wguQFR0+4vxwi}4ggcy(`VrQAw6C~UWdVr`R#9{tKb=Z3q zKeZ|YdV}~vh}65PY)Z66HHyLd^#f5&i2WsMZ2ZcBQ;|5aOB2LbLX6|(i`O6DEkt7X zvwWd?(Oh>_JZv-+#$P0mzykg2Dv*oYF- z+#SE!KP0BTm!`;CPqfE7RF&`i4gV=I?fapb-rK$TqflB~yz9Sc-tbR(J@nSz?|B9- zBVOLE?B4(182?&ETz0U#R9F710$LK>^-g&M`S&v7{Wf!@W-~fXMn=QFvQfjEwswJ~ zbi&77lhHC_-=&`$46%&(c2{fZ?A|&VXhCq3b5#w9T1Mb%0+C~+pf_19YdmtPe{sB- zUAOnr+gcrt``K?+*TKb^6K@OcyZnUv^<6E{`(>P-eDtrI!h#UTX9!r=*-voKe283g z5SD~^$lpl%xBB2Oc6Qcu5LSdZ&3kFSK0o@SR<$;o1;UyTDHBDkWT^!nQtfbgE(jY! zJZr+Yph@Y1XDqe3x&(wRA070o~#Bg7C@39I?Cbv6=(3wDBVBE;hJy!Zbwy(xD#SU6`um4knxW?O|l~h4?=X~`(E$r6x0gE2;1WX;uIkiR|;8; z(wT8cc*ULoahecv2l(Bduny-vz301tI75h>YGqcK^b=<>k?C$AJPFZEQSGKzI|P#S#hIIIb8E0KJ!agE&hFyV+v)X0SbuapblS z2p>Y+eJo~LgH{bjtr7`+L7XE*a+HXL`+TlN;^dNxAkGuQ$(Qe~z0f2Gi9!>95Wa+X zroa!#3imKaBKk=Hhzo=$nkQl_7Z#pFVufxnh>L`HHCTmRTk3)TLGhgs5PpPM&ugV4 zTVKZ6SmmgzAp8m8+*-trRchk8^5*H+KwKikXbV0gJYzYo$M*HO4kCaMLmgDumm?*i z=*pLvMSut-gi#kE+y1J_10?**BS8caqP?w{1q;{YAhC7D9T35UFihsd=r3>LLBFm| zqd{CI#3Vl7{zU)OM<_;aMl6UBLb&toG|I-mz$+$RsyqO3g%F!kgluA)b9fZR%{T!> zC?V4Lc^vyicWJZhE4>|78LgxDCX%Jf<=Tv2bHp9kU=A^J~LWivbU z#}hgR^n3*(k`R5L^4Z$WS_h+6%{u%V#BD;P-4wC;a?{=-A(np&B8m{thAFeo{naXw z=svax#2rFt@hu55`%b`ppE=3zLEI(8S1aBlYrX(ia8oTlfVf8pwHPtG_%*f=wdzi* zG7!;(=*icFjXQi$6V)D~O1i}T$|n9N8mT=TI&?-lv}6CnsDcnI*R=sQR(tsHDp7i@ z$;@;lkFD+Y7s-<)$;406kzvcrQ0<}HzU~dO(b|KV<5#KOq8@ut{h;`Cj|SR!?ZLV0 zIN9QimFWlSPL#XhPai)mVEJM{{?4}n7UU7L@XhM z8OrQ?tGpy6USAvr;yxiP_?(&-yDax35pOXPL>wUuma4Jh?5aE@u3gXr@qiGT_F}et z(h59FEwR-U5b=bVQzl^X8~-sK;Cs?E5DA1xvE@S)-n;M+#oDy_AQB1jnGcr971!YI zPPXSF5J`l%%NGl_+n})lU3tEO5r||$Oym2n4v6W{5(&AfD?vOYM5vCKtvk{SPlQ;O zyc$FbA^O|$dARql2cj5n53K|7h!6|kN?4rzoMuRzwK4{gN(eb^0XrK#0(X#%M{fs_ zMu@LBg{*bH7%xJ#dbb0_V?xAEP+>N&t#C0S*=Zk$CxqxVOT>;w9(#hW!+7*T5b1;n z%isrneKpvG#M%YsATkIs{F|871tj%HB6PGhh)hDyxEZW#09G0L5-k%${~7Q{nmgfPtC+b^{03Ffp|@b@Y~9)OX)W}@NO7)2}A)Q=JEsN z?iqw0Lsu^P83^JHAqr=S+4ZIN8b}mRx(wniAvW{ng>uOupOH8eas@;oA)>zXqjthe zaEau8=P(dOgpiGpu&E=@;a}G|EF8o;Lc}-cvp5$d;jgo}{Y?<>31O1Kj|Ph}*n_TP zVE8Q%#e~S>2LRpl9~g(krmj&SN(f=-EM|7&tZ=DkVcuO39|&R2OS-YL7x-QBuwx8} zQbHKb=F>COH|U~PeK>m`#79Cz^0T-1%k=TPM8Et2h%!P{om6Gs(Vf1d7~LZiL6j4s z$c)b|UFo+JiI>_BK~xap8$VL3>W~+nk|VwM2t*|ziasl{=0^W0g?{Pu7{n(+oQdb_ zwU|FnWxF-Y0P&d+Mup0(#yiRzUB|-_PeD`>qKGf$|K_4U1&L6vY!F`vF)56{Mg523 zeqtx>ToBcS2pTPB=VF`VuiD@(FF<@Hg!~O{SS&juLPA;ci(|arr{u^c{$AggC*sv`O6Oi>D9<#}pt#w70c+n{G7TlBrQ1d&!q_JljU=Xpa$Zu4O%7!!y=?9> zx&bzpnC8|eN~3D$twhr2vh**KCrfutK1oZmcCzixK{lG0-m9yZ&Nq1~L&@cF zxiJm2@x*k?%yF{fp#zp8>ufOgua-A?%X9~s-vu2Hl$hS0@|*obV%mRpoGdo8UmZ#< zS5N&7|0yxmXep-`Fzty7()IsI^M*Iq>8f|5x58L-E7{CtaM9+(t)$YFuX^89if6no zHlGN>f)Mf#m6?CRvxz8%*uVgUB_Ue#oupo>>{^e+gHKaISP^2Cm5^D^zA^)eUFT+i zuqMRXA_1Ft(8dUfq(`$r*bqW}vMMVsR>!j+OWMo@VM~aGd;{rNt5f)6sk>)B2s=W& z+#+HE*6|Z=Rro>>_Jq(C2-w&+68ysX(RT?52SS+EN!SL(<#?3C=;$&KM+k9#tcW>p z8H0aaowi0G90`%a=k3@B=i*t;M;5FEag-4Cy_8wrGjA<)<#Iu*K^!AQ%Es2L`8_uu zB-+}n1>r;pE56&vy7%j@AR+s<9>j4%=(-Epx9?wY^4sIqCJ-kmF-6Ei&d)xDVw@^9 z0dbNLc2C5t%ZrYtNDN)R1%xvp-hY&^V#Nj9kuY=L2Ev69^Vjeh1*y*XIsd4(1B5Ff z#_^fd9kyKBfnv;Fw+n?tz0KP7z}67@o=o=HjACk-!|pX+o4Y5wV&B#c3!;<_Jp=X9y8^NW!w! zJKG>}IL8`KfpK*2|ya@41Przgmou46b>!1S&Z$eDGC}bteUVTJj z&l5)wX9?k=FJf~f+wfh|W{wjGA3`LI;-fVZ6Z{sPT6hA)IYRW<&AXqfn_i(-m3MLh zah?*x`B+$(_ctUop1XnYB}A|ypXHpq19ziiwx0rVfe?>X`7u%NF5;(la|cfl7YR}1 zFJww7tK3klw5EB3@S{YoGF#il|0xm~sXie52{GD5#KN8)^h82B(-*`gLKtW8RZD)0 z@Egwe#zhbTgm_;qVit*e2cQ_I-uZ(FBt-8xRc2J|t%HQilt2(cgjj9PkIuW=#u14J zFM~k@6XJfPh^@5^!bPsG+pd7POo+%3WhQnQhI<+J?_C8ELWs^gglyN^Qarl6e0VsB zD})#rrNSn+YT6cE$H0UeAVLWdlqF=UKCNnz81gjpD<9wT6_GDqNb93O0Mg9syp z@oYW^q5FPZ_qLA9KmC_TOdIkP#2rHTP3Gl`rI&H<_3VLc5O)cYStDTnYEGk34Bzw| z5cdeN>xwdSP3n(Vmz12$0})LKc^fgyUw`i!N=)Y+)=z;EQ!W}wOx<>QN;kDSAw%h< zVl&nN8%s=8>=LCeLwo8XX*PJmUnEbKZhfqjW~e*wK#A#e!-);D(Zuxqf;#D~jPQFX zxeN@S)Ib|gOsDM{D?4nUupQa7!3KY|yvcp;*vr;u_s&O&=?AUf>>m=-Mb2rmBKr@^ zP-^L={Tu#MV%l4?x!#h~UFIV_YRG@lyy2T=J@v#7KhH-uU%S|8aM3ZutyI#7pGML_ z1J{-fSI+?vO9*W}5t|*^71v}(s?G;-pAbpg_%x}4Ih#S6e>l7d37h67AW{f1*qcwFw4aYZ;o<;O5RV99T&lwQ?HyK(VuYw{1CdII>J$7N z<^eHMBxcoa2a!gIwS3}8!i>VMNEpxC3F0v!Ru_tyth;nK5^t?{gLp!S^cV>{1;zN%(H2BDA!>H=oz{HY7a5MoS?GAp&O!imrd$73LJ332|63Y#_S$3@ht^vB0RJSW7l zVPa;u+W}81*JaKi@(7VCr^ZJ15dTCm)JmOV6cEC%vxMCZPQV2Z>FNt0-Vj3iS;)?aJ;Tv;>}uf;;w>S3Zi$#y+;cq7p|ffr zh(bbi;5!jYj9%_SF@p7iK@<^U^=h8V&a09kF`y&_#5+Q`v=A~ko7@vf?7Vap#Ct-- zJQA{K&BZt+w-_G|qL>f`ZUWZVd#)jhkr;ggL+Zw`_hiBkrhxcN2oEC>i`sO$0>wyFOaoCxh*|z>Y-^CJF%p)3Pe6Pj z#B_ds;_OsM{CpHO%>+?Rh<1DjrqX2BVJL?D<}46j31L;u=Vj^CZ$)CB$1@N$gjlU7 zW*!AcP9pK@O)iL9LMW;$vvAK$oHQ;Q_yR;7Av&)RvCIH{+`k%h{uPLCgb?ysR?@4x zwxCwE7*+tHo)Gi9DYITJ?QrrN5d0RzcR~nx!Tj*zHTXZD^|J`X4?^6C6R;bZ@=H*w z`rR!C@skkO_@0>8{M2z0|2U=;#NpHb9x?6KN5sZx8QP-6bj=2x$1q~bMI(u+OT~F< z`^21UD7_r2q1yl(OH6eSJ(8*ix2Q&PROPV0NS-WpQur$U8uMTTN=##oM>NPr6VufO zO=KpWjGa(&>3(Kp18qDp4GPegeII(f4q5-CQGd0($!oql$hG&8QH-aWHfKatM-PntJ;*tA}HhiB`Qpk>6G9%&i>e`EY> z8FBZweWYg2B$Y_c+(Q1tfkspL%*YC#Hk4x z4Te}o+-s1n^m!lGRcJx*qE=5E5Vef>V}6=c#m;CoQmvAxw3w`nNQJj;Kbh!)LK7)+>t_5Gj&Qu0;^%$!F1~1r``N{E z&*9?CiMPc;Hz9L+;fAy0@taTyAW+BB;4N> zfUqJ&8$K`EOn%=2B<}Sp1Yu2xbafT>?f z(&rWCNE8kF4B`kO6f*_vd4N5hley~R7Z8qw2=^4R1HqfVq8K+O*MK-m2=%EVb~r2+ z57n<*T?gVAAx!wmoB5VLT~Le!yLu2#gs7S)V72FORU@%E<_C!5gvjHQ6uQKZ#674I zg(jK5UV$eFQNedjo<1No7{w4TY6{{cAfZ=E>{NOMu^ZY0%kEHy9p8+FNGl7 z32`)pXE7GWc=F56axn-GLY$u}X39PH`lA?Ot5rdqBE;+fF`Mt?f&22`U$q8tnh^dU z`JygK!Wa}ot4li&X9!Wigv@qv`|C*bc54s9lMvDF%B+XuE!-+WYDW-Wgvhwok}YE8 zc;;^2#x5Yd331|+fPLwFW-V%!OH5Y~X9MoL@a)_d#Cbw2lozt7S+@8arE{l02wy^sIjhRXw~4{;#M;RN zL0lk2n^gWa$O+9xts0m*7{oqd^1`LY~jP z-lS%aCnHsr$Up=UV$@yjr0cL*u4`2qlEv6;+mCyf_qz z39Dv+xJrnud_{J|JO;lRq?)rqgc0Ima|v_l=raMuIC)?$h--xSi@zoc9;7;Eq$Cp%@>VZ2}QRh%kP%q+rl{{0x3bGy!pk5FT18Ogb|$ z48`!3-vZ(;A?7|4vlmPKa6Q)W#x@Z52yv8e3v#!4f)a{RA-@AeG$FR|b1d8jf5Nl1 zAJ_V3!=N}9jnp3U$9qfXHnlv3DhS6^E;hi%Y7gSm$>E>392w+QZwTcv--dN1svk;Hds@f&Wx{IBwEJZ+&Xlc%(ay|1X+1d~{C@ zy=?&-rlMPEGnctfL!#BzI1sUf*!E4x4jfW>fJAg^Jc#>*2-_xM z^Ijz5S!y%(0UMS}4Y`y^laVAVlwWe6OP|g}7re^8OPL@q`#0#Sa0m z*@8>r0`*J~352i~2wDD+m4i^Lw0dNNNF+qRNkVod%D*0o6{fi$k_hq4U4>Q0E8z63 za@`9M$%NSDtitkN+4n~=l!dQBJS2n_FQO+D-rJ8vrs*3HDTHu7AY!gg6$MDNx?Kq3 z5g|sqsj%pCFLof|b^1MsR6=ZyRAl;1zvKCN(v4*x(g+d84_7Gu8TcK=IJoZ_pV$;cwav8@v3 zWaD}gi76cxgUBXCij#oJPkxLOp?!HvK|CYG{tbLT^^g$Uu`rmh7DNsqj@9$-PLB<% zQLADC*MrC<#9rPN*;f-#hD7$c?I4~LLdR6hHcXQ{i^QjgJ3-_TV!uShIw<^Oz}mom z4~Q3(;P0!G(sek22nw_U@sbdp{OF@z>5oRCRyp^z1@Vdy9k;h)A=Lq68AzEciSeg4W+>M^?cML=UA;x)2nC5& zVlzh9;cm3TLKhHk3DHtng*g_L;vu8p7j7U53E{`j91UnT>nghPI~&h}C?Z6CrI=M@ zXZazK(d#^jcZ3+OE@3BjPQzcEcJD5Lcu$B|*#cHpaBT~Uak_J}oL^6EF(F#S2-v7| zSL~56Pg4L+v(#b(AuQQbH&g3)z&TrbAJy zjNQZ_J`%!<9|zZ0C;9*qV4e?)zBup9`Xz5IQ1N zHc#Fe7bB)s&Ij?85SMuJ%iiw8F)Caafv6$GKECb2G`ae==(n2Jc`1lmLJauA@5F?@ zxV%?z#SlatA&wadSs#;4V^EC6MXNx3BgAV9G264@hdvTUTh@Z8Cxqt+RW>Fe2KSI1 zT5kgJoeK|^*_-_VtR3?k90}2;d+!_PP}xl0XCMHI=oJn zP8ql13zDow%wHr=mOg4$Nhfx!zlRdjQoGm&*=S<=X{ns7!}A|aP;%K(A+CWoo|q2U zKTf8#dEqEzQ>`BS)$%5v?&Tn}T6RAfC8kYmezSi_Ob6>n$d+x?yMdod;<-NL0AxC zb#J}|W#V((P0)B>0m70Hq5D*rm+m+LYSpTkuOO@lk2ieddz4B{vup1F!yq)nv<7A~qFju9eiJl`+o(v90l#7<}f z!if;4Z3OK0SGTQ5JkwPNahwowd@lUrc}GSd(Zst0h!cc(?vpgo2zNrnoZ;2zSF!l1tuNIC;X#PD9wJtFz!;}a zJ=Y8Zaf%S@Pm0-7-O0u1w=zxF0&$uU=T{4uWZ|ZRNEqttfH*^lrTop1Qs#zd^tm6> z1>s2uM}D{4nHk}9Ky}Ut5MG41Wx#hEk%ittt#Zy81;U#U)vZLVtGRzuB+3TKK%6DS zF8=E-yD$R(=e4WXp%{XQ*&zH0q0G;dj*U>ei-bedc_1zkBC)-IIoLU3QM!Kt zhyX$qIV!Ux=S7JqMqt0iAOZ=|EMLeX6Sf>jBKq`F5J7}^%jb8mIXz_`62)%~K?D=R zE|M>FjXFIFi6yI7fVfPEB!49~UR4p75Eph{4I+dPC7CMhlh(AwC`P`=S`b$Vk&Afw)Qt{l~4D>(jk>mQ^=96A)p9=pHO!dL}72 z!LBYe1#yiK`FDgYb3%0%YL)t{Z6Lx4F|QL}MYgWlEhL)!FavR&5J`M3)w(ePJR9c5 zyj>t}5TfOMzGIwI1nw=h_u2#ECLs)+m6%G)d|lM4s;qq=A_!sHQoK_L{ z+#*C=KMB*mxnnaDhMtE(L=r+{lPbHdbGR!KqnlWQxJ`&L55#O&lYjJ<=8v%k5k-jA z{KVtWey+HD;r_xF#2rG|Rf^ab)2F9Vt8%9}fVfKtBTXR-PfEt~PVyf*g1ASBZSz#v z(D?xp6eIYK6NqR+1my8mWbfLlpv2T&<6-`%C^hf4;Xabb=Rf+3{}Gd*(W2WaGRa|JCv)$Mmt6Ro`pf8YQN|XMeMQNKD(ziO871`$VyY-7H+&XqYeC`O@+ z2*d+I*sT??w_7&qAaU}J1VlU`!tDiYVMZVx1>E0M4MYMV#vb6~ZQ)(;NMoC8MC<|U`WOlQk9|QrCWH!~w)RN3WH%D(L7E_*5Tb@BDPLc_T#7_h zn?WGb31Qhug{>GnCK8EehqXXt5F&XDA6LIsV1tBN#Sjpggvk8C&$1XZ&j5*$wz?pm z5~5?Y3KQ7;!2e*$@)01i2(i*z%yw=bat6iddSVoaY(gwPq0IJ`&)S5<%=R)6&j_)! zO3Vf+HNzvn8=H;=kwb_*{H*7oXN&is7#61bAaV)un(th+-RTtmyq2g=0P&mdO#+ce2&+2+W>UK!chx_fGXU{|5P?g1g59&*N))42>{Jjh2@%H6liv1h z>qjK2J!XJ-MF_PvVs=0N1+K%dkDdi0pAZA$m09!w?VTvbh<9^9ye33sCZCLbpaf4_ za|xIaqJR)P`BQr_`ybmkTzkcMu|mip!`t$W{4851@WE` zGCoTFd43H}uvM3?2T@FjE_{cwOz}YcTQyhP1fqlx+vOCQM|#H$bR9q3Oh9}fgr%B@ zZNI38Q;z7aTR@Z&B4nh9iTaLPgks#a-3H<#A#(XyVJG?+&qJce7c&rLgb3h8mCIQ( z@ZH|jXBUWaLgewyw)52z;!%tnBlm)+AjDi}{`T2gG69Ju1^Yo%5@P*i6*j)8i6auD z=NM-VlH*!D`5 zrR{u&?<-38XCqz?UWv0__H7<);*_{IMoe(bvirDwdZ-=88m)CfL_(2Gb5HTCBp@w^w z54)WO@skiQ`8=Rywu5jlBXrPt5QjbgJz~0WxeBv5u`w1Urni=dzl9M~E*eQpOMQK$ zxo=z^qV&?M=z0TeEHRxkK3TfQaJCwfy+_{si{#0Y_03Px!lpx~qr}wBAfiDwnwWOF zB_|8rUr>OO%k(q18ffE*>7XTJWxZ0i4@dTh?(M%?-sI>zb~2@tPxMe?I(YbR_790^ z|5s_Ub@#1WqtsG!#BcadiRp}$&GljiYd%4`$H@PpdBgv=zm?pO#W&G1;z5G#@BjbC z_}4PxQ1c$rHrYLUq9wsrL(Ce;zn2lKD$J3t9J{k4GEWxmXw>kg<@lLPw|hHZL(7P- zn(u5d#4=)|X4cXVV>|1i1;PCUyBiR-jM%U3Bk8)EKSv`KH+0V*6mMYo;Wn}~rB+YS zGU71Z-xRrwc<6;JS+U7`IkX&j-mu>ou^gCJAUdkF)bq8xrGZ?@UmS1d7~|f0bB>zAd#r!4#JTTyZF?JCpkrU_~4H7DG)~qaqxtg z`RdABp%_6$XFwby#NtIlw&Z&^e3x8n>J7q)5E{m+%;w;X4k*THJs%Lq3GuR?FYyhL z_eJ9Mf%70v5F(Fn@uzdm6h9wlzgz%uk`N9jAIERvU+b@F0Y-f|xxIoQG=<@$17uoFYWNA72{#Qy1rmZM1HHI8BJt zjv{u}T>}pW^jjSP;tV0$@8|RLn%^u!*RjYq5`-rqiui_0>*CdLA9(WCC=gzRaEa#o zmU@R>LNV-)-UZ=Jh?9Ib)tjcapOHx35e?!jAtLLQS<#45IA0ieBo>4ZA)5J#S=S)F zPbh}uOB{%Egt+^epZlAVeIE&R^8^s*39;{nm<4VtY>&j0>Ld`pglH0=%1jN8;ooYq zVG4)~gb3fF#AJPk&qOg&Mx}wcNQi<=RpyvbfM@8xsCfdyj}TjCE3yxJ$Kx2y>@z|5 z6JlGui0xK7auBsDQYRb4B|;d_l`y~O68vs2^vwYgK!{I95>^}G)Dp$$^F9wmAR$g9 z@J$+vf1XC-OUG9rf(X$gly525XL~gg&x2os2qr{~l90&^D{v)2Wx-nzmkE(>Dq=0q zs>`Do6Do>8gb<112M(Q}zKwC?U@Cns0LZ>Ix*j zhm?W1N{F5MDr~2A(F`PH!zw|95hD9*D;CpwogotJ^=A;*2(k7ouSEB-#_y{uM%5s~ z331wtPs8eN)EdQ@RaFDxIw3;%w7B#wJ8*qNxc3`~8-&nK7O zd8?`~_Cu`-h;0GlHX)2#@I&gJH;F}JS$jngQH1E$l7H3odlw?H+d&z`9ZGl$*rlP( z@SSK>D+F>ACjgzFd!?#2uxnSJxzet`e4XLb@ zdOvhBK(&YE?t2Kb>F1fK@X;*`hlD3z6RQO?P1@kF|tSVWA%|;aAyBsEpPJp zLw2&k?R@P~?V;H7H~WX$LyFfenVpZo6IBo1d;Nz0RC_Sr@=4b5V0{_VPrUz&<_-Te zLtW3;H5r%V9Os$CMaK}glDj^CIae;mk6qLAwjg2&F_NG3I6-|A{*b*}?EvCFA*Sn! znaS#oOVJH(<5mbFju7VrJb`f8ABaRBkM|%R5Mogs-=8ER1z*R8W~CtF31P?=l(Z;( zgv-^%$>kst2yxzxcX7AHFGQ^xuLqcr+$!gsrvE$wQKKVSgb=^v`w*=;ir+r3htCG_oDjQpR9LrRF8Df@w4Mhdj}YT|jO@>wSE2u- zzxe_XF9^}Xm%n}bW%fZrZ|Y(YFA1^toPY&sZrg!`LWgA_UJ*jGrI)_BZc^#F>NZK)fMD zo=k<5I*-TWwrBB&sZSfhZyf+!(G`?*5)YWe0Q6yuBaeh?oBF^ne=5yr1@L9kHq5QtJj$PZ9qAI7!DUz|nu z<{&;2!X%!5&u0eUx$twi!`)Z=4gs$U8lnsb-LbT;)W!yV%gbO#~<@O*d z2=Ule#6Dbc$9Ku|2S-3u65`khF}vb;91lh2n;rx4i4Yg~-k!C`dj3GyVZHbSh|h%B zn61p7En8fL#BO;P5LJYT?=NAaezwKeQRMFi;tL@T#qi;X)H9t>jG}3$KvWZ=o}Z6m zb37ftsqe?00r8a((*u>*l&oPFQH;8=-XLlSaeRP~?HO-+6p6#neL&O_!Z29Ej#`|+ zDPY|OUl4VK_`)}Q5Gn-XLGg`k{Xl#p#PJ~#b})CTHfoi{zDpqL38BY#C@WSl#={XW zwSz!>C&bUY0;W`Z5f}cW-7kaqL5PPnt(XxT5{Fu4-Zm7(PePpV5U?K_Pah-kE-wtk zVXuD=ii`O|@bNRJKS7DVeFHOMiSGzkG-TZA$D0Pz4V&fya6_rm^QncB)z`7 zPX>|;b}IZu@?>fG&yR)8ps$*w#D{0>qz(t!Ax6+`=YV2FqYuvFgtrmf>AjI8A5;lD2 zWE~X4y+8uOk`O1=RGF`6z*r=5bk#su5yH4a$n=G7xk!|^XbZxc5LLD+?09Ua2S_N- zRR>{12XTm#196fN2K|Jr>&goJ z$uOTa5`;4$O!;!?o!J-qqgGw084bdP5It@RSc%K1(Mase*8|~72%T&Js|Cq(!}5qsO^>?72wxmgoHco3p2fgkP`FK>p#^Ujk& zoFYU=eiG^m;{&Uan0R9fh|`3a7B6NNI%n}H;O(x{L7XAPv3em}d-0|Qim}&eCJ0YL zB+gc48{9^1M50T(IUu|UF`n-v<*?`>9%J2qZypG5LL~BKlHHx8D^Lup9}7U7B}8>= zF`FK~dk+%F{T74pA;gX>5!Pl`wQE6KB!mm!^KXfyodAjH zXV!!8BgA8SWmc}eWg8N~{u@E~6Jk5xP9t;fd;Bg5y=@HQ5+S-(^D*ypuW*5Oa|crp z0fa~zC1zS5)baf8ZVR`92qc7QPkvltr28Fo9r7K`Km-wDaDRTVRH6nR|LnbCCx~D| zjO-|8PTmn$QH&p|dq7+!L~s~ip02wDuRCkeaUX~fLJZ~`aP+a6GYQ48)jj~?3L&=0 z_zsu#naM~zoO%dEC?UG@jb(ps&xk_e&QWs^R|!$IQIXA$EL(9(&&L=l&rD?5l#rd>wGhM`JSVY=zPop#C1Z%dh*hO$rC&Z zcvb!=h#Q0$xlO>D9v0M~7+)?sfw)Ns&y5ncu!WW!5+c2mAR-7+!*_W)@G=yOzA*09*L?j{F@-=#6-TUAI?IyKTAZ`=lpiII{nLqv-cpo?eB8m_@ z(_68pYg^!ciOX#-5O)Znb&${Rp4xIH`mJII`hd7g2+dt0R^P<#8WO_;&x5!}h-<2R zRffXSVMrtlz6c_k5GMxkR`r!Tgc8%`_IXt>V#-A$iD}FRAF0azJh$x>?9FVflB%C#sl?Rhr8K{lG0nuN>AYy@IFVk-Ucx`8&H zm=16pFPpyc#YU8vb{Y5Pua-CY&QAxKM@Cj7aM3Zut<+0_pBeXEy$ibe`k(m# zB9;)E6=IecX*3Rrb4Fz#?h|6_ay2$sv}ZaJHbXvvh$Dnu89yT>zzrvKh3n+M{JOy( z5Mp2yUqqDVk6%$!l3IX>CxpW!3EP^t8rPODWGaG4AjCJmU(AtdQ(mC!7#Se|kw}P0 zzVD5%S1F!&=qnL}NFsz|3kiEKw7~V!yEZByk_l0gBV^uPx9Or*J+N#I;vpeMUlOz1 zd)neF|2#|`L<%7uIEmSjs%If6#!K~1ARZB76JIP?@bYOBB(|OJ0wR?VeL|F3bEmlD zNF?ZW2a!eyOFIdB)!P!Mf5gWU3C&KUKx7bNNU?}T3pUI}!u5m{L?$63mhv$@zYSs}HYbb$@stqz zXSHI9;lpuvr|{!A5Ltw%&k{2OXQ!zshL$4(kxhsrd_rqK`+uBrf6#l0uH)3_86ch$V)j@yR`6I` z@BbLP6So?>t^wegHJq_TnI%K!$dq$R+Js1%GtZeKvlL3wj6#X#gs3D^Nrpltq(T`} zq-2&7s&Bu~x~{L*`>c5XfZw(DuKV2gUTaTC>^N!x;u#^5awN?9>VwBfB!4;&;yEGm zc}i}5LOchF9+4M8ydZ=%zq@VB$u6ytNM4ly;w2$&y;5SKEf;=5BIryqh(ba{_7kyY zo%M0rzxPrKh*yMYx|1J%e)WnPiZRmmI*1}dsMHDBHj_#Bk=PoX3Zj@0rTidl_A@mV ziB$P*5U&Z*-j^?$eLBz{39ZCT5N`-EnGYsUKW<%y#Mjn$L6i_;>f+!_KT`oTqIil(p66YU11W`ta?Exxmbz&VZ6eums2l0*& z8}o&1{p3~nT_WB81VlL@2Kp$m;&zF67I5^-=OEq_qSivf+7=(cGrzCK6@mCbi0%DU zSy|Y2{52T=u>{0NLM*)}W?#eVdZNG8&JFKCd?G|u96wmL)5!mtp>uf;;xi#CZwc5= zd22iZSl8|oh%baF8Lz@>{D$KHNAD$HKzt>H1AnfDUYUy5IV_n`0pc4WO8h0P@PPF? z)bnLol^`kzQFBv;sqUY89*GfCt3iAxgr6=yb?bp)ZyV(w!xdzYPw|AXQ?O)CEx_5C13<_~^uTKh`es`nAiK~xi>`(zPQ@}7yuCAZeK z0`Zd&3+{`U{-^HOQO|Xal|cL=gxwnfzZEmx3C^7B#)}EL#NO!*6uFH!ydq5=-Nn8fZ3i~UXu#-g#OCvw z7)%LXX@=a3zc}8^8Npo*u5P$961^?l4#eAH`BoK{_^Zi8B;LPK1K~)BovC7$ zCsO>4M2SON5PJx*u&t1teqI`a#7%)F2q!`)?Bq8ENBZJXn&yNKAodbsw!Ip=($)iy z{t@?Or7>EOeFl{DeA6qY~Mk2Rr1c-x#SjltUQC{nC5j|w(C=lL+7`j8k zG$a%A;h;J5ql6HjeoV~&L$vy3E@@3FVwgbjwk&VxJ&@yM~I~lBy66K&Sli9 zpj)OOjuK+*CcgH1Zh#UI^(Re$(5-f zjuYa30H1J(8sv*wHUHCe5CMcpD&m(u={D()g!D70x$;=S{=E^H(=5K?D&Z zT2Ynd?mRUc#R%Cm4@58_R)tDg+WkT+BnJIl03w7C35WQlffrnhk+^YZF^Et?9C;&U zAG9O!0vjizWgx-`p*=&uJ_ye2Mlrg_tN;;Ch^g)Qr8cvgbwr|Y)G81s2odTmW@$!u z^N=`sb`6LKLJaqlFdZY0H%N?HvJS*aLLBiBFv}J$xFRw-)ds{VLd<rjkM z?>2%sO^5@TQg*lP_q|9In{5FRNeGiY61HZEaTg>s?Y4n9LkI;2emc7Rv>OtSTkHUF zmJlAf$}E5B1zgj56>JY8iV&JjC2Zjkr2rJ8&97Y`q6uN4EMiT9M&KP2IhKwfVhHi# zsF;2Fk(i8P90+s*agGq{HuGbkM(xLSezOv15V3^tA0}ZjnF_e_ImF8q#CbwUuZo!B z<$bZJRcasILBtV4r@4?l8hj)ai3P{KKwKb%mnGjf;MV#k64QGh1aXlNiw_8yX|(Gk zBsTf_fQTo=y|n^1Z-lQL3B&TkATANYAwB`2IMP|fPJ2DLjcO0&H(E4tdS5VF{2$Rs?P2JSVA+^M_smfRVe#vh z^{}zp!-bAnvL%9UrbrqXw*HIc$QX2UI7#3S%1A*jhE8869;Jj_0m}%zbqhUw zMvtW+ZV*BW^3w!5s2VkD^b1d&OIBf|wuu&~+?iESf#gSbNo>p^_m z>W2P!VA1(Z9}roDNNJ|ZKJDs@%kC?h^#^g65Fh!yzt2|097nARmkk7Qj}YB*gzWLa zffY!MiPHsfpAg-(h0OTcsC*cY;;YirJ%0c82qWf0M@&IHA;j*%LYCIm9FTKd^XnxxDF@rn@rM~T?w_Tm^6WBu%f zAc_dlZ?F=3_*BaUiCK>qgD56M$=)_h$>4hy5>tjO1M!*=ZMySwh}O#dkk}l!0>m3a zDDWZG#f{xAAR)ZI5=03hYWXnw(9yh3NSvCq2E1NVKZ922o0g{+bdt zT{Ct)5;v0H)7K%UEoIidat;0sI$d=E z@re*0HN>nU{vv)7C#iXX_)LfiaYEK5@Xct{s$Q=Sg7`uRuL2Rv39&9jV%M=lAife} z`2jJj>DeU^3B8D;Aifb|GCzmNGdvD|Yjux@fT$ouQ?V+0ps+Fn#RyFc1M!^@OPBC_ zERrU-LSoR*6Cf%HarL`|C6vcqM552}Qy{7cF>RlK1%8OaOF*KVp8@fM5Dzc&ZQVz& ztVA&erbmIOCdBV8{H)cEx?PbdP&fzTCm~Wki`cKY>v>2t4?hp$7a_EG(zs{j-BC#B zoW2O+Hz96c=Og4QjebZRe{~5&4I#RI<8PnKR`-#Z8JPs4mJqYFrR>_|mU!$F^CcNX z9U&aLsxlkzmiR3?JN7Dw-9i7J6hEb*$_7<@K8zAm=b0T_{F9jeM>LX{ZdVVHE$kn- z6{VM9k2=-E#u8J@Nq1%Q7GBLjvWIJzzet`eoo!Mj3s38H86~FItGd?9MibKwD;4DG zZ?t1ka_MzhtDZKVm<}GuhvT0 zx5^qn0)z`8@<#Gw7ZVQRVM4fvJ_uJrOyD=Vx}-Qep;ql2BM0F|h!kZ$yX^E|XHRtq zHU!~Lh?V?++`<%h;!HstAVk6!AuFg|;EaS(Pcsk)31MHZ z%4(0i#YudOyEzDNLR?7`vco2(cy3bMbs7jCLS*ur1rHb>#QzWRsu>^-5n?z$VP<5v znYeJX(tI|E!-P0=RLHs+DdX8p-3xO-93jNVj{H2Of#XWi-|DLId=S2bu${tFr<10M zNNg@&2*QsLm{5yZz zVI_!Tgvd))VV|`U@tnn%yQ@JQCqy%T?7@bnN3dvl$r?leAtK-L-{7YVJg`XZWdkCR z5Iwt!*@c}!Qq*&mz>Oe+2r;*x603`CF%XI46`Mf>6QUR2B~zx}39nSi9=Q!f2qCt_ zh}Z(>bvQ9~SZxa;ln{=~C9KEl-WyS?veNB9gb`xjWGQQTaO4XlW>47#BAgKE`~tZL zQ#XA>;<=dvh!cc3)KtLqtad9Pku-4+hzLS7GZwKGc2*mZxRSjW#7RQz=B0(HvrX_X zYSq_$AWjjY^?WgFzNvLIiczlU2I4d!)?ZX%J_csEs8Vd~0V0wROOu4mMLz|9aV`aU zfjC2mTmB+;tgkM9w{M+t5X4zR=sZ(lqy3feJJBH62SgMh2HGjJjDg~HsOMUvj(~_J z#J=@P%xKdwTsFRQ*bhVuAzYnAZ0b<6W+=u>#bY4O5#lmGI@>nNQwNFXEC56-A=0Ku z*eczM8YH}PgFu`oM9YpMc6DI#F(le{3I!2Ihz;BLwM0#Ga4~yOd^m^;gph1gVP|Hh z;uw5}4#Y)5{N%^9NIp4VN3Bx#J`EzC5GDNh;nE5p{N)UNa0bLBLfrnT%*5sga6fi- ziUyHDh%7T+V(;RLiz>z|&VfiIMAa(+{|}bqRd3Us&x1%J#Dpp_yQXZcH3L!=pD>8?>>gSP2bxH=2LWt%3 zHe$2X7Hg2$eme!kRYI8XeSjz1hv0A24Tb91mEAVokd7W#Po@gu1|jx*6|ivMU)_*!PG|!nl@NPp37J-hBY1!`UeFFi8X*QY z<(usKYZssxKY}zt+$2PfH$PZ*cdy<^*njE(;uawkCkU9r_&KBT>iJq1N zK-?pQE8i5{Qlc`XF)%;ns|AR2sSfSED1UWgzkhQOP&i z-CRGhjT30z#zl!?w?_%EwE}lCvj*ctVIpIciKlW`Z?} z@uKBq5KjqlogZo$dpJ7-iCm8I_r-8u?a)!p6Zfp|rT z4_ZoWknPXYD8`M!3qceSV#8?(`~3ULTqIgMF9uOe2$z!rcA=)M6coQbJU@N?BsZYx9s8{LThM86omZh3w+M41FXboi~AaM~F>R1WZjfH2{fo zUAKZLC&XKR&ZCu=brBL~ZMTDXPl(xk0j0s)GCd^v8SMb^fe>igMp?W&hzdfujS{l! z%eC-RGT@^pi0_1m`5|Fn%DcIu7>kYq0Afdm@7eqB7%pR#Q<$$Gwk&xvd1@V&*KZ=FSWbe^!NbDSS z9K};B{vvs@R6VOw_VuBy4@yi` z3p>`!MibK-#b2@?g5-@TxwM(nxt=zjm4zycJ;3}#5Uriqa9=gEB*JQ4Z*eH1L_gAjkx$=rtH45=VPS8ZVmi{;tf=M z)J`4}b>axxM!e~E14V8l9+Q(HpL{#^8`=&mNpHaDZN$qhn;BT-_Me4Z_+K1v=Ef)8 z45nU_jYn^brrXCt=NyQ)MXim5$uGXXiGMq+s(?RSd#G$T2<~X?umle;>n+d|15S?0!Sd@{@ zQ`C=V&*y^JM~Lvns%*mTHiM9`vtIzhg%Ddlh?sY5h6WPn-z@^+N{IW5#H_rf8qQ+6 zBrgTwMu@IGczq+~>>=SXwTMalmjh2roihyDDK`qbheH(P!XS5c>(?St?+z&$|vmLMyHU!~sG~ z<7bL4s%e7@^89nJ}v ze?U3z`G}PQ5Wa*Ml`dpAU3z^(G0u31K==`&CqH;Fb>}4fx9Y1P1#y%Rn!NtES^VoV zicu1%2Ev~Z`5Q#6hx2b7<5}1CAdV4Ytgn#meR^RAicxd7BZ%XK7{oW3%N5A*HF}sz6EiD5DKrvY*@j2VDj-~b|?5C(-( z791kRYx+&A_JFuV2;XP?#P7JeO{i7Trp_P|2r*SGX07afaExiCE+7&Kq0~;q#*co2 z-#!<|xr0a|#EkAz_R{XfE7U5xT2By{3E{|(7h85Ga{&@22M&NpCdBnv5$pMU2(Ii5 zo#+GN3L#FLOIZ_vF|L9g@Hz}4g%G_K@d}l$X*<-a&_Z7jR|%1Mn%BqQW-mk{OwS+0 zHA38K$xp<$SL=>y54EzFZT@+e{6{oWdoc41ktGS9Jw_FT6&8i{u(8^MzR^9IdQuTy zt=(nCtG`H|EbR`hl2x0g8>8C8f*nQmveDXuZ)*klwjBn;QT?FH!Qy(_c*!Q{BC&mhtW;mn7)wm&WKT9kX3;1-VDSYLcHa-dkzpAtVUwB zTT2jGgcx~H#5{Ih9Ee27;npDT5~AA-5er|`4G)S3yjB8nj}Ud!BuvrznFz%=*g*i| zJ|PD4a`oK|r2$CjMuN80g3X!o*VSAkh$H$UW~pp|C*;0g z>I>o-AxiYsn9{lCOA`-o#V&O4<4#iU`pq zniq#IEO0>mm_1((qL>h?yajCPt7)r{D2z7*@tP239mQ-(xCI{Kj+T!B@rDp5bos>l znEx6S7X&j9C4~6+R)yUguojnFjdV;vyd^}?SirLiYV-Jw9^H~7m3n4<2lv#`AdOwlqFmW-6uY|Dn zR$&R|!Do>$5G(`njS%N}IuLQ<4PJ6kykP~13PJ=&i`mW-$@qI7*m@O+?}W(SBVu}y zwVzR|S}$J%qLL63wkWfxMY%ZH8lPqjqKXg~+DTZAsVaVU?MB;x_(2GZOJXJ-Qi=;V z-Ct}3QB4TVQzABSLj+FZ3l?ty@skjTH;UNHf&jcAusnDhh+l-T4&}=fi*yRm-^%~G zEr{QQIQf=;&qK@b)82EQJ%}1Y^itusoowHZlg4S8yFkjM~SKaI|a>uMz8-7jU=WoA_8QwuGVu< zVw$zMX+3N#G0jWLlv(KaeS;*s*6c5mCrf=_f0gY%pO}mi)1}4D>t&;f=~%blvcz3g z;V8K@7~8U*HlCOk_cfMJS*6zk+0w99f3>{H_Fr7(>-wf$M~SKML<9SW#Poqpmi$nz zeLPAnFEzw}N=(N%H8&VxJ4YGmDG?1qH>!EV=M{A~aIfl(2Vu!M%Ft;C;!%=n@iR9T z=e$FY>%t>K5RQasvPQ^`g!~pFQP)obVhUV5PJ#X7Ou+j)3@T!QttD1Ae;%2{Ec5qpx;S~`Vptz9>hLE950r#(vk@{X^hnG z2*QOBk#Bh2_nHr`$(HAJ2H{GG8~k`xAIb3fs8!d-cLU)@2z7NSb6XYP8i~D0-9fk$ z;!U**n>4@ObR;}Y*~ggDFB!aL+GG)FN$pD+M%gb=U!c`^6L_uq(wcGYMQzJ!?kR>HK~EyDwg4s(q` z_z|MhA_;pgsvU%4T)00L#8E;Fu@N(eQSSKdW1~ABgg+rZ^0mGRo=@Z`Mo+tmAdV5D z=QaT|8TKd>iJMa)?J!b1gsw65^b>gdMbX^+Yks&QAvsM2H|`em$S!Z(AhptIPrsOo#>inAq@a z;Ws3%PO}6NLWs-!DD$%$`rzMr!sodlLJ6^0L&`4c&ufEX#G5Yw5k`nmemRd)of}T* zMwBfA5l)D^9wIi&Nhn4!q^p;LI6;VbFMbs5t9RRxP|jWsB7zW;Re72@;aqH-0mSvxI1;#m^xsKe7SEs64P0L=+*Mbj9r0 zxo^*raH-o4BAO5_`AX`9mOI8G;pl4zB8CutViB8NxkrYCde>bb&Jp6(O$m!?KWP>c zV-g)e#1g{4ml~^_GfaYnm!1=d^Mo*O%GcW~_0vTnZ-X<4I6|!9iICvQ^_@sOb8-Q3 zfe>oFRG9Xv&UcY0Q*sA!kq~ze3fP$T$E}dqx7-s%JR#2UH=N;oFT6g$vwS~@ON98! zr#w!IBJr2=_GE7m350mLTExy+mW85L4Zn2=L?R(RUQuCLvKYLk@T;CLh$KQxnaSVn zO1tb(46mT0ATAT4zmAmke$#Ix65&zDKqM2QRfdoae|BId5`%^Xg1ABmKVD-0HEuTU zdFSWBAW{fXz>6w+wF{I`jDpQ!Ag&VPeZC4)Fr58gZ@ADCAg&Q&i#1P|7kUSv#B@wl zK}VP|<)V?q)bT)wZ2QBfcpLHb)F<_@vBY$Y_>N4y=Zi9wnASdi`WMNQrR{SoWZ6aw zQI=zY9?wE5tN-j?|c~MUrPfRl|j+U?U{nQ89^!6|RYI&0@pS#L4 z_nM`m#8kOs1N(=>w9T1^@2W+1nXg*~B7+cT`%0O^;BdUK z$~vhUL?$7Y^OHb6Rp{et+n{B?LEIt4wR8b{yv3{>^?calS`b-;_`pjGdM}#dIq!6X zCY}Cy;oK#}`MGV_UGrgh(UYTBGZ6O(5j04JRa>vdA2QjbmLTpE!l|2xu@7pCP(S+F zv<8t)h)5d|`w`)c%P_@vl|Vco#1aJ&lUSLrLNW9P3qa%$;%6H^15r2+r{!B*@1%x=YllLPo z`yh&OL9q*nCxno`m#|Ey1$Zq*&(Lllo)W^azlaq&PRAvZ*w)%0o)KbXtbnPTw<p zDKn{06a4+SFE#-2mJnZ#iP**%Cp;JCdw4X6QbJ@8!+m&RvrR??5=qfkAbt>{!y*Ao-!(o73FA(yK~xiB-D?T65oE7K z;{3|BAbt{}R||d;;el&-g~!tc>p}b?g#R7hs-Mdbpcn=FHh}m|2#xs?*2{2KOC%Ia zH-V@j#JUPTlG)V@|8>jyZv|0Hh#|RRcHjOX9_g$4Z3j_Dh`#*jkzQZs;k9_C%61@j zhyJ@jJCNU0=)T%lj;^9yXSk+GXC7byFUB z0?D?P5C0;0vUGp`Cs|RHp$bY&Z?At;FB?rvi|+iEJ$#+!gOba#y^rf@9;y$Esy5^)$%6qzv&_m&I|vD64NpM4eTEhQ>!0I@@COtB`CFg-VisMTJpryF1}KJ zq4!Tsq}Lp45V}##8!qqC!N92byH02u@hbNr+W-Gx{A(MrU{Gh-_1k-6(3aqJMSAt* z-`j}CRZo^JUA|Et84cHAjT+vxaW%VTDhnKA&^F?lb|dNyv5k1>*gZ0v;;lW=hG2)} zk@bk$M!d%Ct}OJT*<_?Xyw?AN;tf1&ts!q2u6`M9BYyp+fg-mN3#MI_yKQQ68f^!5 zENQ^#ZN#>hf6A{{-M2+f_3fV>Z|0(;P6p2tg4UsT*r)-9&^ZUlNw!=q-?=y4#N2(hrOgtcF!i?f)+U&e#j zONe`=VwM$ZuZmiwG~E=0Ga-8N6Tc^^Z#{v;plg#s>?4G$wUEu4rqU0I1DfU_TnLfg zUchRt5Bejq%3~@BS3_D=!%5R;dvlD39)mHh}jE6+>zK6y8wh2A?EWe=J@FIIExuI zWHE^Sgz(`z4f?O>ZH{8RFI)=Z03p1xRoI2Jo^y~mdUyqhgM>J)CgsQV{Ah~ABa>Ai zya{nfDq%|>OvQiQcX4Y#_z)tqTFlnZHNz7pvH)ukhX~Y-)>;xHiw zR`V6FfmPW^MDN`Q;s_y9E-A9Adkf|xq1$!~2wy_1Hz?iQ$3e)hXS93w*{t2q45}O9A^N(3ppW+V8y}0tvBOC}j6ao$=&lVWbO) zAVP$jsjv>}r||@7*Kckhf(bEFPsEz-JAD(i%Jh^ch!8?dX)a;TW+!pR_egR8L?|J) zwiL6+CHc4#tu)IUL>M75_+>ET;}0dHRxLkw2t+s`@=TQ3T8kU_KWMSj7sLrdSn$(r zLwg-+f@0`Z9t9CWh!$^@*ub+}@vpXI_i+#>31NR&$Xq+`o{VB#cn}EU6d|mWB&_Ij zOD!Z0uMYunnh*&aB&?*DBCdA7J0Aujk`PG+5;n8Y4NrIaDMf%dLx_WXZ^F$%&xWH` z)y_Nx;w&NN^TUwxCb;9j?&QajAfgCyK~asJ)%K1>F;u%pfrutVQFAGC?_3yyMDq_Z zAYup+oT1G8mz_R^g#N1YAkGn@e?I|hV!RciLheDIhKqB7L|T zo6{v6SK9U$TmunLh;`k?Ea6w}G!&zdrGmIbh{aAqmgGDMKUdce-UN|Ah_U<#v#O+{ zcur)oBppN|A!hI$6XR8@aUIj8JQG9`A>x?nnLbd2koRWkReQEnO^7O|=|UEd;6SMd-;3L&1y@S2wLN*g4stnxuz zB}Bk$0jn67iQfz}Up@hGjS$byiP+)($Je0RgW!v9Z zdazlg0dBNNF`R8m~n$Eiwj?MhN|1Qf6Pg7AGmg zmW=~(lMvg+O4#PQYTOT{{P7@e5h8Mi8f&sTDFF4Ojj<_++l08FtHQ$Pj>VJW5pB#s zq!Z%jAt^gPF!m#gvC`KZL3{Ayi;aN%?&2_9Q9n+1TLj`hA(C4QS+j-R@!)=R?Gg~#goxh4uRf}shX3a~+AIh0fDp&|sVS{g zr{Iswc?&BLIfO7#6tWBxzk{eBRijpe$R$K8z8W<#)pjrvXBDhLJ&WhPNB|kiPd3Rs~h)0B&ze3D*-COkzwJI%h6NtxzsB;&wokmvek+2`Q z6+}KEO1#9(&R`dQN=Cle4x)e%yZLRB?M*7$pcq{T+JSgN2-POM9}l&0;U+y{Cy1wn zc*i$TZHy*yA&l>d*rCN9c=FOXcn^r@gb3XzWP4P;pFuHpHE{;B*fhHLbh;572Y`3#K#RpAt4sN=F`ufHjGclWS zwE({vR(#(NqKFVn-nC)6>nGko{jl})22o51>2DPl{m^y+60R=}fp|>_(-}hcVz9Xe z5&^EhAl?w-5x;3+^x0GKNR0CL2T?+ZF;fLhygYCc63aFRfOt!YXFJ7g;?D3FNKB3i z0#QncluR)TJ+~|hi4jjjK$H=}yN!sIwS0-EZ66hegLp@X(4hk6acAx<6r-w5HCqQag()4*SxhzltoDhRPPM2$_0 zO2l8BWmeZgd?$o0-^a0So&zrRIM$|us3gR+NPaH-)A8$3KkQ|q6% z8^kX{$j%Cx&Ak1119fRy4v61`IK{_4W33c$KQx^lf~XR8vwrkX1EpKwDp1XY5rD=~* zV(PKGf&D{b>M$xzZoFuJElMqiIW)k3N=#?_D;UhtTGJEhtp7>#hI<_BVxV2Qc^`UQ z^G6y&ryYn#>EkdJ_M{*W4_KRa9RtFV5Uop8SaXY)Yf+2^s~Ctqgb=?JGSyw(%#cvj zHUZ&82;(SKHs3)!W+D<^ME&R~SpdS55Yw`R%)&fT z2MJ%VMIgKgQNf4mK~@JXk+3&k3SvJYikd01W8?SXVZy?vD?l6|#0Yy;mRi{#&zOcu zSAjT4h^!7m=Jom$ei93c)`0LP#7tYhGO=25BkISmP3u7T5F(ME-!o%;RX!4JW^Mp+ zh!A6M3fbk=_eLWz|MVshhY2C;%-0|kO+JRi(r#Np93ey{|LEHtABdBb&sp0+_!8o- z2EUWn{n`T*ytkbThyX%_^8>vnx&^#J z{n%UQ1|pCU{wI0iCjXr-61R*zK?D)v{Ywc`R=JN0X^vC&g9s)>p}C0Nk=2Hy7-dce zL4*)udYC#JbwzH0#7V_NAVLZ8nIDAREiN0s8NTTq0TD)s;PI+#_Vl*jPz>kQejvgL z;mqf8*F31jD{j6>j)6Eqh^%;iVcBO@JbPxfD*!|UA-)|Jv0=t}F{o87vw}dJB*Y26 zwzSjOSp07HI28)w6d|&tVwPhw10TY>$?61%(}bAWTg*OgE5wCOlcJL#A_=jygzs9C zp23A12j55#X9&^9O2E1$w0wqozDzL+#92b@*|I5YdEK`#{KUOty?bts0?v0YnTT5*{kEAM?%BkwzuUX&q=1McL}iH*+b773Loq}l*Fan# z#EI6bthebhJcj#y?*@pAgh;re$~5}K;jeQ*Ng9ZFLgXZhS@qFy{QKy;^)`r0gs=(Z z7hA;rScUpg@gxI80wG2Qh}hDYrgM?#p_m0Ckr0k6l-T9whBz@bNV*3ii4ey8T7+j_ zMY!~4G2{V=%Y@ijCT3?BO~!8@xoa+nWI}XXC}ur3bj9DnZ7m*wxI&0y%|$FC?+KnO zmT2aKNFl_iIKGWI{o)n$x0<;235ctNXvf$4RrTG3i>G6-1-Ou1+zG1VyzmO1p+C`ajKi@w_Ru(8B+Y-pD3arG}NBu|+1_>25cmRI^+=HuVG z1xic}Tzb~aMiWz6S`+y-yqSMs^-wZ{vk0H2WQG}thu`yrIuG3;y)#(@wb{8XjC7?S4NpRHVECQ<_#~Y)iO}i zTZ5OB<*n=woxV;yN;;M*?5)gU26|jQ?+yfUgAhhN_~y-*=kFr%wBuk9sf1XfD`g*S zuAD?d;-Lp3jS$VBsj#?rtMD9aKmFk#ZW2O?&*QFp&?gGT==g9Xh+BlX#6RH+xA~_a zac;g0#BD+(?Gv(1EmAX(c-_SiL^>gshYDFw&yeLvc$_x^kwJ(j--S#g@Mb0wXVx1_N#&M}$*B8w2``DqH(hjsBB>zJ3OAnp>P zX|xL4(`CnL)Q|q|W+3hnqHdgkrTNWuKtiBt0pdO(?sevAO_I}1B$D4w1CdP#OD82} z6}k?mHChfcK|CPD3wJ4dJY+a-l|%7t5IKbCHk+RvQoU{wYSoupb3x=1V&x1mo3=(z z6Ny6$7J$ejM8azomN_%@3ljP2i$OdjL>NCh+k8pq$4G2fUk2h4A)4NkuuYzw@tj4i z^$HM=388aLz?LXXDMB&&JX{GPpAas5Y4zRZdn=Hr5v~DIKnU$!Vm5Y&zbO)%{jEVf zAw++E_fD>P#B3xS>(+yKN{D=+fURx&;64)V*KP#yj1WC|l9GJS0~c=Imu&{|oDgD} zh#Ae_6p3P3cisl#1tH>Vq-_6{{NG5-i?apsk`U^#VrFspW;zmfw)P+j3E@AS7ob)S zX@W#i$Sx4C2+>p~WPu^Ufk@m*cK}gDh{8vFV}7%I{Iq}R?*yWl5T>7n?AOc1Em4e5 z$DBdDCdB%35j)ZIUOObJOwK$ZO1oIr>%R5Vq}?yg7`#;)F*s{%9>r>kT}0C9K>frd_OE^Ew{hK zBLJUI5g@)0BA1tXOf>uB!oSA3(;&VQBAcJ{m>#ei7l#5np9S%a5bFF}>+1apm)Mma zMT4jy#A1H-)Ky)T9Mtn}TVg?cC&W{4eouM4wi^??-!=(EH6dbZR9K)_;&l|mabYrupM)s; zEo4uox51@pC#|a>ei7n0PnWyLkH#ta!nErkeiPz|ttwl;G6_HJ))Ue|)DYr@vy?q3 z=u?CG5mI;yL@gnlJ%p_8+JD_&9KAFHL>(crf9HOH4I--jS7`?2wA&Fq4jdkvv(t z{_va3aGi2Ll$ZwicB+?+CZ;;3wX(%K>gJ>5vUT$=^|bNC^h~U=T;{SO3)$+nUH@u% zlPAQu$#ZLjlTc#%v0VfEhs3n!{cG~NEk(sBF?H8yfE!IM`BGl(!?p4+b?aS`?yUL0 zXx{K7*2SR1s+LXBHexO7o5TPA!T8rU;vucHWeKqkU(uG}RflfXlYeg`W?N^-n6KUp zWI86_Zq)Fmsb%kx6|Ft@2yG)?_&UAb5Zj20r|pr&y381kHUyWi&a6k&HsX~(?#o)1 z?pco1zPES&pm+n9erqSsOulH2wh=EZYoN$!K6$xDYkZ-TZ1A9&Y*(c6gQw3`|P zHXSn%xl`qTcD$L3cXl)AExVhH-bl}lvY~Sh#M?smqL3Lc7_c3Q+^IPr90`##MTz-! zFX)Jbz0yMvdkFFLzL4!)ehZhYo9%uK!if+Yvc>F3t;b3f<6LwBh`ofc;76Wp+BO1z zQ}!r61K~^vtr{WID!PbUCEoV}#6Cg{=UW)(ZK=VPgoU+*AY2IHby>*T{1_dK`cZCO z48oNVaU1#B!NX1LkZ4}@280_SF8GPr7U#*h>T*}B6ofk=9`dz8@02Y3P>eaV-huES zgmq6bThy(?LnJ)&--GZZ#ENNrB>46a9??$I`2@m?5_d$bP0dX!6ytl~7ZCdi(cfIm zLgpL{K_Y2R1&9NL2)wJp2FtQskciZ)0&$QKy<3Rb_8Ji${m*r;2H{PJN6q+AA?pX7 zLowFr{|4bh2#=*AX4c_^I~EbOAPx~i>c>x#*HFhJkB_sOjQHnOewYwW8>LL$?(=>W zBcoSy5Jw1cd5nqyNAVLVyay>tL{;A#&B+fZ^1rbV!YndYU%UO!+ z0?VFgfe0f+T4%m$a7$SW6yvmC4-nymQ0K>_T{QeK9Er_edVx4Wh+PtXpL9qlo-Fh3 z*at)eA?zLb8uEe&TwTqW*$>1?Ld=O%VW*zo5}{V9#|!{*iV(Xy3EAS<<#UmUo39Jv zG$C&B10PNVX}?1vCTR$WNJ32Jy8uS1ti;*z!?D9aoFPQ75HSm$mp2f_m{BzX#92c8 zF5ufFSJtgXLTBG75K)A^ zT@&2ukZ>Aq4B{Li)CyX$xt3o4^^_bO3nG>f!81k7Z=oZecWM3I1jKnljP5C5yRM8o zfLdh{G!aA`AugAxum#G`@w?=!$z%{02(ihKZ@=B9gue#Qk52({kr4OO#cZ+WkM5{d z^D-?!#1kTy{|3`*Ti_~K<(Fw7E)l}Jvxr%hN4G^W9=DhYB7qPN{4VqX3hwx8Fx`AM zh(tn6%U5E`$EpXR7$fe_0g*%qg-0rE|4t+PE_ro-K8VYN5c4B#f(V+Bu|!9Ex*Ykuf4TJwTClGkLzWlwFmEnYS~PmU$}mtbuz!6 zHeP#JG;*|j^ z$3hS{2w}w60KWe51%LWvZbcwc36aN-&7bM<0KW_@I=umrMhF9bzSWzT5sv655tQ>5 z#7#o<-zQ>G1=fdr;}G_oCt0zxclC1u?c-j|>lpI>W&ctQy8J_4p~*l9iz0+o&+o)W^UScxs3 z7?y;@kTab@JR?NkLlXA=$*}iG80vKc@thDVydcDe=@PcU`5k@| z*GPMUcu9y_etUXU=J{F_BhR-th(baPIw4^8TYd4@VCBO;AYKvTQl&B*%T7Du7<>AI zC?bUMN`3|4_oKK~R!)OJ6cfUz37AMugxc+W1h}VR8HeZDqq%QVF!t=~f5N`-k zxkbWOU0(SLi7StXgD4?{lQqAPX-*iPApJE@AH-WiOgYU99%p=Tf~|E~2BMS@Za?`s zc87gpP^;wHh9Jrak;4ysu+UwFf3@9S8i9C62;&1{mKxR(KkZY!8HjR1Tq_kZp<&c6 z)T-<2OhCLR#F|MG);!Vn84@R}CxG}si1!nfSlU-LX3MTW?s=9a6evj zo&w?%Ar|w~-0a7mn1WhmS!n^{Ga+`%q|CGRi)pqmekZ)e^)vLd0E`vY(b=DM*ZtnG2$V5N^}OEVIk)5lB31y8y&@LRj4r zu^GLNMEPfnnf46L zStz}f+mzJ9#uC%Ff%jxnES4K1`9o6r7s->Qys|3U#A$M4l$b`?metEf6Vp?Irt*+# zD>+Iot-{~c)5a6iA1{pM_nYtRi|nBE^1oW%YNwBEftDzcO_;o(TQU91DKj}T5{Magw_HZXgmq)0IJZ5TZMOMVVHt#3#(`Z7BrdNr-#xM65VJ2bV~?^b&*c zB80*wG4r@E84uf5y_AC3Pl$8ZRatS^OIOs7CE9I393aH%DgoONWH%oP+udzJ93;d9 zes;+I#aehB)wt^#AiN2Y!%snLp>7|HVnnNV0O3OjZ6;z$j=OP;i{70;93n(q3SUPR zpNnVDhQ90q;xHl7=1SOzgGRWh;ufq0;s_!7hN`ex<#wAj zNK9?k8-yPr+8hwDvz5;+ka*R(4~V0L2$-VAYz8jIYp*?L_XFWih#G5UmYcRj3B?$( zV*rR_gwWxYdxuztf3=qFbU_>^g#So>i2M6<%TNq0zabz32yvXBpYOmDpsiM3g#AWjmZPb+?<*2WS% zdp3Kx8HiJaSg)hZ_IE76gW|qzEkK+mgd5+OFZCOU-@Aj?P6H81h$v?<3mY*Se?MHp zW`HbfruqU zM|~+Po!Qg|wW@`d6^QeMXp$&kL!!O$*eBw{DiCpm=;J72zgH)3K`~ri)`GY|2%icu zi`sNw6$z94bs#Phq98!P9Q9w~&9q&oZU7Nah|m1^hLBjj^(aRBpiLky5#qvm5xczq zbTJYk9k+r=AjDq&8*FLj*AIy;8rwl665`ZPG20e1+Z>4%CwG8IB1AYpNW{=cbRCJq z$~!?^Cd7Oo6 zAW{fX86#zPFQsfiqD{#@5LXEi`COT8ztR=|YE!zqfw)Epzd9j%6W4JzN=#?^KQ)FK zQ!W}wOdV~)W!ZkY-%)y55%;VfHkO!-nD7>zDI3dD0l_{1r(MP^&OBT*)*1rbXK{agGb)UZ~#^I~wg9>fbmxH}5i_eD-vxJ5K! z|GYlp2+>td!rq;>cSo(No6{V`OG12&m9pMrm75~b@3ta{ctTvs6|%**SK&(W*PK=$ zUJ+swFL->-x{4FJOFNZ8ye5SHBVM`hH02;_RY|!3#2Z3*^F7Ua8g|B=Fi#sXhy+3m zYAxk^ZloSTF-De2LA)h|-h6(VRpml_Uzwa%1CdCG@;>~$!-peqt4fx&2l0*&{X9f0 zWXi&1)T*uy>L8K`(cVhWix`9X`L^vkr~1B`o-JK3elC5=U1L0`Z9uEA~oR-G_O2^43t>At2HT zk-1mGRJ&{9u82?2Fc2ApSiDEV>Q=;-p;p-%j0EwS5Usn4*b?V8xV)!*Vl;?MLY%7? zvp3tK@tF6dg0Ud72=VNTkS%C;`@crEJSKq1CdBncDy;OA&M9;qdurq$atLwr6aRi} z`nVqnPxFZ&atZOkT*4;U`Qj0}Bey1l_(F)b1EoyYS@Ro;(bi}Rh&)0#@Uvb#M~z5B zV(QmvAo2-e!OwtQcR3nQziY8&CWrz;)F`U5g-1>eM=?A*&jC?Lh&77J%zV`Len>oj zrVFBo5OpO2_Mxe{FA@d=7l8Omh?@NZ)*`>HHxeO6i$D|;B9za7a+HSP68q-lB_O^L z!fvF5z39XSqZlqD^g(St3i|z!h_$t4zK%nMAzZ=ZY_v%LcHK}zb-(dY^ z%yA_A?`;H8L5OC2en6L^H2kKX*E6fFyCBhPff)!>?|+Y&x<)CnyB6kwC^6mOojDCgOu1+zF6YK{6{P`!A9wOPS|>$}%6F8jBLs1!Xx6veCrULRCS2tgB%@ zN-ph`zckRs6H|eej(ks_R_@3K_ssjN>m=-B}angzI$fu zL#gFp&EIgNsU;sVt=FrPn-v~&M>_9+(!Aj#vpQ)F_S=3HEhBzguxZx+-x&W|MjYg! zDZ3ci#sDn|*3#J0K>odqxF$kRcDhNx3uGd7w>D~c(`HS#kbMo0U5J(uw>h<~!4S)c zcX=O|y%@C21}zBw9J0LuQOk(uiW6o2wc@8pEs*d0gZfVcuV~1pF1fM?EhFBm^_wD> z5zlS$MBZ*?i!Nw6a2M_07`=>GL8DGSWZI--$UXRrjM&ZH5@^lBE;G{A^W!J8vfEP+291i zju1o63fbk|2k~IQfwwLoP7|VSfHG?y-V6^7_cV3|VNZy`gN5u@;Y|E|T#0iB;XnxY z0=~W2tYO>Gm1kCXfH*^ltz-Gw!mAdoL!#Ty%OD&Hp~+iSvRw`LZuBj^K%6B+t9?RN z5!M6`&iqom2EvIDle`4XD5M1c2VeB^0pU!D5B#ZJ?2tbTT}OX!KM*d22v1gFvaoKN zNEBq<0CA2G^F5?&K%ZZ&kuW(O0OC9$G!msOcws;@B#ct;fN&+mK0dE))pq~SNF4XM z55kQQ(|U-ROLE)yNKDjz1j3yVYu50YqP1IbUEtTsAP^S_5j%`e8X5NM3yLwPI2eQn zAw2n(SuO|FaFuvjlQ0k$32`NopME>1-#8S*V8as-mk41IC1kyf62wRxI35Y&G9ey$ zsWA6`IXjR@)P4%WlMvEXd=rDUhQE-wzBdNM6+(2#Q(^O)2sR+$A07+Bix8*ymG^u! z7S}NaRdFD$65{(QzK^WWY244&JNXKPHzBn6nWMd8v?=eV6F?2d4gYY3lnU0uQjb4Z6WIohS0pUvs-CcayYA2~SiXj-1 z2EvaJZByDX&3@`7NZg9}1j3&XFFWz`y<6YGSKhKJ1H=tN*z!pVA@5&&LNR*kWP!Lz zh={FxJH+wb?;|lOF$csgLRj!&!t3sz@ZBCUCl5pbA#Pn2Go809@tvr1qX5KhLd-W4 zu%Ur7?x0qUbo>h94k2`c4@wONa_S19_~K9{zuvA6yFJ9wAhsm07`4 zmpT-qNn|;Q`-G@_pvGc?N8|VIt(*!F4+x<@Tf|Nl%)qsvVaAmp9unfn77?>Aeu+n% z?x$CScti*bejbP0LlZl69Ra)QKm-!PT$>-GcDi^u5-$T4X8)4}1refaD=C|i65A7r zF!N?09uq?2yfO>-xs7|TXM~C%f(bDwhSwNXkDH(v-j7;=2q8rGBwj>Ay=)2M1tFd;6|)xIH&q}JnPv?lju165E zkxYo)3xsUpj|bb37`4Y6#Ct+qny1W>O6Bg)yAH*j@Ob_BGZ_e_vL#;CD@(4saAvD#6EX1fH1&J9qf(5VoypDXs@A*0Za z(IB!35y1CTpVH5^1&Sg6`V2%4A*@RHnFinYeve$87D1%$}u zr*&&yzWE%rYO8w^h(bb4Y9?Y<*Z0~Z5ulg?qKFVO|1>TQA~*J^Ae`M{xmM!wA`El;u|3xLiqZJZLRVD!yqCP#CJl(jOAOX%v1l0 zTGef64u}#$1oLS>rakBELBh!F3y4xe?E5Zd*9xiwkQkGh52B0^!}t>4b$8dDKw|CW zA`s<-*g8VYTH4>k!x2HZib4D!#Nq@#V6AVCi}L<8-$7ImLdjf>_4!yBiCVR>Um1v> zgm4ez>6tX|BN7Vte}MQ!h@`DTrrRm|DiXHJzd%${!d=XkAG?eTf}dAZfv6&c`c5Ic zGiKQu6l24N8W7cln6yKM9h4RhLE`O)IuJF42)o>py%&$^g+!BqP3HZR(A5$mNyvBh zI&>@;iH+{fK-3Xpl#+piv=2-9o-9uzO%FJd!3 zT*UiZ8AuHm!q_JljU=XN`!CB%OrP7K^wM5)Lj!CqG5zQhFAH&cj)&9FF5UPS$&;nE zn|{fdytx}nOh0@uYLJa4rj82~WFx+B`K#qk zzIVY^KGoBFK1xipN`JF|NKE^5eJvkhZ5)kK%U@-`;YL$SJ}917tEe^MonR``<>mj2 z<_&+aRa0xayD@%Ht1WiGMVk?~QuKHUYq{qs?u50g+6BU#5Sl-Q?0ebSH1tRqN%w&` zMu@Z4A|{G^xfh8?cE%u%6XH=nF}pg{-vf!x%MXG$L5S`xgv_S0gAEdAP8U2mCVl;b0EJk`O|^spS##^EjbX>URQ!6(L5L3t5fD z8(eKO2(FyxT5F(L}p1pPJkAK~~E*>Bp3Gs~o z&pkG7#odJPm6t%AB}AVfA!8>`_Cc*0{Mr+Q6Cu>cNm=)^5%}|ZaLQE>&V)G0-wY)K z96F;IwTG{Pa3RE&a3T9>;(%wu9r*48;v6Ab50fyR!jDQQhV2o55a%h8C}QrPrsH&A zV);!Fu7p_0&w8$0UfvePusM1ggc~6`J`l6f?KSYM^U;-eLAVoQ$537tvp9f%-GbBy zATAI>ZLSLIarJ!=YE^UXKoA~;$O`Aj5{;jPN6#kheGK9vAv7}Evh@)OIIVdW7y{xF zAttWj=gfZohQA-PjKe`(CPcQLfPGC6MWgHJRuloklMwUwiP$jxArp}}pcf6|3L(l1 z#mrY;gNrJ)H=lvPl z?i;!xvBWzb#5F?va1pbM#a~w-(YpN`5Z4JIkLNo{Y3{^#`y%VNAbben-9x|>4!^_Y ziw6PkK==}({GEsuzu3DGwW_kmdk}tv*zru6y~uBU0txZaR1p4zNaAy37kd4wMB?St zk05RkV$wwk)7@XY6^S1T86a*FV$KmU8{VTc9@FcxCKJRhLTvO9vs25JkD?d{L$W~x z5F&q;kXicNu|UF2_yxpmLX3MPWJ|(Qa2aNbJRigzLKN_oYLDXQO+Yb{P8EW}U;$AVQ2>FJ^6@=P0A=XfmiC#A8BOs|eZLiibCl=vvZb(Ld=~Fd_7&@(myEw!*!o z6)T#92q8psO$l>e=8BU>$0S7%p@e9|j{t1HFdLWNvX-<45k`n#llakKQCD!Q?mSio z5l)DZ4l2ysJxv#lmqlu}-{u)_-z1*EBxom5+uYoq6n6}T;ULSj0w;Z-!qV&90mP5lx8fTxE7p_5C%}D&tO; zAf6IpFJC>nph+C==v5S3gLp=W#eCZHj+6hj6UaE{Qy^jp@ry52c6<_xM}(Sc*@Jja zh^M^U_Tq5w1?W1ScW?v|ONeAX^=F0cB|MSms*4kd7lcsf=Y9k(jlF_m6wEjWB90J& zCj=~Zw)qYu^fcT+yd=c5I2E?3Ru@m}jFMac5l@KSGo&mt&GJeM48RK3E~|gO!z{+z}P`uP>hL+ zw?QNkVyuyv-81Zh?~<64cR?f*Vw$rm`?B2c4T|x!=K~P$2{DfE(h)YSmQ=&U_;1%j5x;NNoP~3PdI$V!DY~=Y?|= zk$CVV0YnxdEEg!VBWjnLAYn1%9f)i~^yw;O@3n8VL87ktdk{HKZD38 zgky@3^$DMXzk|a^WrHXngfCxm9a3|A9*S{0A{Rs0O6 z;pcp$St*F`gzylwX5))~wm{brFZltYgb>GzgzTVia&II$tojL}ln|Z<{QFUofXAZ) zjVnQv5n{>)A^R~{AI~UAFRunsP6$HL4_wJi7;xtpfM+rm~A;!!TGFRWUZ74>}6BQ8Egb0=M`zk~!3<+I7A&446?C2(7 zuWTmbH^a#iF^F114B#WbyV%ND6l3LmRS|PEdrd%|Vm|BjxD*M>%gB+!o1KRItfQ==l zo~IIIMt;M6k+d4N_b-wsOG_-OWiMR)qEKQQdTn2WY&0<~UDrfz+3!$0lw6K{zQ2Js zo|ta+ohpBNx!4TZlzijATHfR$cU!ql;`13OF?~_+oBcy#dOaptp5)Xy3Z<4C3xC6Z zN=#WlB`xCVT^MBI3;VxtPYTfPkqa#{I9NqQTs{g++{4jCfld-Y8|m zA56$V;At&20}`fjCBpW8PxcZ{b}$dqumuGKk}Z(5Mx$4!_Qb zP^;Qn2tb@5#CJ0Zi+ZVqD6S8^w6#+5?0gA@2I| z8Dze7cqZKJVVWRL6Qa*pzBKlv&ukQ)M1E-b}^OtZa)fjCQuX9~)!=&cg& zZC0y~1mQ%8PyCn<;lXK(QL8>?j|SmPi0qGImiN{I_vO299S6dN5FM5(F?GdQbrfT4 z`UDW?2(fa2lueP0D?p;#J}nUE36VLIpGIt-asUbc#}h%g5+W^x&t(+8!p}MDp##E= z5R(n0Y*L#;MJPtu+bJO23GqyYpY{CQ7T3)-2&RL$K!^@+C2aXmqlG9&ZOBXz9)$SR zflo|{b3KYg;FvieE)qiXwSax;?S~i5hyT(AafuK$Jmbr*j=|rLZY~QzTqZ=ocoCC! z3BpyduIYxFE{o8fCwtD1IO1L7JX{*z&>zFdmmiThL5 zfw)eH-iZP>b8nx=D8|r@8$kFF!tkAx2}IYj^t-5_ofVgujm z!gu94p8LR`u|!tedexMDAZ`&tcvQd+?VgLPM;Ru@AOZ+6tDT4$F-?58M{G3#ahnk4 z3R1Si|FSu1RqV9GAnp(%N-Silbr$+Q1nBwk1@Ks+EsVOudPwjACbi62L-Ks+QwIp0Iya&Hix zPIf`n7Q`b$j9Jc?byrMkhhijOwgVAJ2UK7R}8yub_Nklh+W|#=C!SxABu7D!8s5igqW~G$|}~x;}NHJif$l6 z332$BgiVfeI*DSWx?BJeMu<6`)Y$$eqsx&HNH2j1Cxo4m68mtp-$GP-7^qac_MiOY zKcbP^L*bB1vWRg-PN;&wM%OjK#%d4g$}eQPeMh<=xz4cuFOnxq0hZ;mcH^Y^sP@p> zSz+D(H@4B*!$h;D^0vuYUZ{Rh5!0lBHeP#J+=R(XwgkRG_U!Ctf3>{HBdl!XQ*QNm ziE0n8=KN;=PE40TE3IjSdnvsb}k2)T&-PR6#r?#Nrw;Gm>rHj)eak zH4x7Tp~?sMyJicsk(e^DJ%|`WIF*W7z?dNdB;5C?gLqDe48Ak7-?*$|B;p)8frur< zyC^Z66Q_%(HH@y&0P%tlFZv4EnxHrMgFMBv8;CeUbiJX%?&nsIM6I$v+ylf*LhRNS zG2;u5h9l8Av=@kYLdg04J+H6p7$6a{rVof$gplS*neUBKJQVpjupfxmgz)9Nro4;m zhd)aPBm+UbA;f-(h`mvEUxiu~VKo>;0wLBlhBxtRwhgGePr zl$A2ubmNBC3~!T^TwPi|VG^K@<_<^&>t-%Ao)!5NGUng7``Zr+Wg{ zb9fRiQ}$tdKok?=9v@OQ*0aHH(e!rvL3|^`&*4Hg>YgpW4kxbzAifi#XSI+Wc)>cN z|3~u~hd`7NB6)+9eeJs*rvpxxj({j7#HJ@AmXH*61I3tHWeTE<5Z+pRg3Ze{=aHD@ zcML>1Ap2j$gqZ!7FK#~C zqzbiaV~Q(?Izm)56R_pZA8{$P&D9Ga>IpHUwTR6dF$TXAt0!FoVe0emLGd^3g)DE@ z+eIib-TU(A1{nL~qLIYZHtmwEcve+wlwK-XRW`uJ64O1KU&ykbKh;EXMs(F*Bu|!Z zdHj&AP-|w75>r80b%Sg)F)caKRK9H3a6DT(zI$y0Z9FmkXs;u`bA9tol$egPsr#$t zO?K;SE5EREjx9<|H{1SZ|B#qIt4)-TSeTb@kGn{mOH>ANf)J8tVwTulT^orJQXz$$y_n72 z(OHOuuw#1=)`W=Em9S53U!6w6ajrTD8$!g0`CP35oA5_wvw0^FwuBf~EM!hEnLdi) zTc`oz6e0SY6SD=G#(4e_>(dQ{9U*2*_?_s}eI<%frPBk%X+kJ17cg1RSNJaZA@2pk zo)GqDGNgoFT*xEftm)wGS_iUAd}12uDIh z)bkyG#1nBkFj!?Eh_i$^zNroSys_#3+8Q z>3~^&u1J_R9S*{U5K2u2%y?eONF)m5M}Rm-h^lNcTP0AyiRt*9Q6SC}!knLkdTN6+ z?j~#-F&2a?A-Gs$DZstB$i-AUp|?(2k!v?zarzyJq2YKwKe& zJzu09r#41}Vho-+4}=#X#vPV2%Q>HKAu)XXLJ(I8u_sNHU5=MsMK5YCUptgCX_1{9;K@;VUygc$us!d}Nuj7P%m zu_1^XgeY0B#PYOT<5YI0juD8PgcyEMm0326d52>3tK1CY79kFLtFRTJ)wp1;ZoLge z03ntilCt)9oGej{?`k_i+$O~L?NWB3!({wDPa3cr#2rH9^1a#mk9}2*VmMgt1#y=U zw%dekU&vfs@R;pm4B{Rk)B`2#$NI;(x0ED32;x2=Ect4NY~P)DPRQqFhe13bgn@&I zwU{S0MAtFn)=>}-36a3(2W+x=jEgFg7Um!x5yESLh;=ko$E&Y$Mjr?shOo(E>pnb)?19+7Drl$>vU_ulw5wS7hQCrb( zRit7EB7_jxCOplIh{gT(nN#gSgc3r?_l!NdeI|YM77`Qm>wqvhVHRcS&e z5aEQ_%6Fff-)iCvl$gG`le!rOA-QNIF-?|u$WC-|Eko($oe60Tu(8CnwfwoPwNmRA zNE#ph_!r5OCE0@#nTPw}(I_#sYMI_38%<0d^6F(v=cak1G=>>m=-#36C=Cb|}jQEF)@`VIdnF_rafruA%n z`3a=!|0m5GE-mk&b$v=Yu3r~l&V`G9LflICj6}><-vm#eFp=ehh#*ASd?C|P>e36{ zuB~N-AR-AdqQ8($?&5I?iErLtK|~SaVZJgu>{o?9GQOJMK|~XxzO^a~sSm-GNspVQ zAf6JUu%!w!F3=f_TGedx4-n4?v4kIH9`1K+2@+l2{{#_32wx8gYd=TV9tkz=DiF^J zF@#Sx)%(^`0}1(_8W6FBm^59&WW$UkNGz_c1Mz|o@k%O8DX$(+LYuas$(Da!A8~|G z=UW3OeY+8aVw@K>2l0{+?%nvZqk8QNNVptR1QAb&@IgYR>3ImJnVyNQK)fQvFTK`m zV#=X0D8>LCWe~3k@qLJtC9NHZN8;Bc3P8Le#4wR6dv0jF7sV(TAqJ5^2x}`Z3ZlY)3lh@2WBv)ie;1;zMcs0JdD5Ib85*t{#B@c-k<*LEP@5yEzbfJuj~?ulYJ z+)@XTM2HFeoQW^~f!%L~kwJ)1ej<>rYk>>8j=`@-g7{2`$__%dWkTjdB$9`X0g*|FLO)Byrj}Y3Bk{pV2gDabw9S&RVhaDM3JKs zOAv)mMAy-!Za#>wgb*GOFfThNGbC16F9K0a2>lUK7Vzm|B@%{RmV)?3h|INZSn9ns z`0eAEtqg;bNWTU;_}Pgb3mZUC5WPIp{j# z)7F3}BSeg;nDxCd=?oJ3^VfqYC&caQ z3PN<^OTKp2@5Tvs+^el1eiFiZg^>BV^}uPS#nc@jei6b;Q_OT<@4ShwBVgbz5S4^* z<&*rUrAwb9Q8IcDh$=#)^F7Trb@RkuwS2Y@L^UC@G*sA{`gZtkU*KX4qJ|JFyhLoT z=&LVk)%9ivLDUjr%zP#G=tni4k+%QFVGwnMc+7{O7JpYvLop7vG6hjj2puOCHelEy z{Cw#Pmz`C7H8pKzo#4KKy*O0XCMH zY8$C6}+;`ZUnS z6VsqD9r>@$S=q>@^!EL$`~HUi zl$eIu3$>m+i5P`+^#7!J!w-55)G8k`It?u&E(*AJ`2TN=e=Q?UNa`i~(I=w-EeT#J ze$YVvy^J_^`XZU{x#6+MxLtqPsNqd3nsq{UM{8RVT1NbFZeW8UmJz?uI3aT#ab^Ts z5M0&taRZ{35zCz7Wsx^8cpx=@P4FKSZ{QQ{PV$A*llq}$#MWznQ{*z@x&B#l-Jg5S z&~o7M>waUza$vs0_9rWmmZH$SDRS@r;&?MZ+!&-)eDC6P^nOwA;D7X=f3X?ywn*G8 zVC|%v@H@<#*Dn7N=7f-^2w3Ln9VbwX)K2$793#a2YzZ@VsKY%$aYYb_wUCM0Tt6>bq z2pAj-!jcftzEajddzTv$4r(t!SP`N|OTv`;I^uzoJxgDKuqK4QT+EWEhx(xyjtcKU z*bu_)lL}j)B*KqO{&4%*@z@t#I8h_i&4-&Kuum)79{ zhtA7OKsXU%_f!cpcXh*qelPsWKsXa3K|{!1xcbY{mHV1jfp8&&o0$Id_Bl_8WWKj{)AmaHkL5G_ zF>Z#4nFSt5Mk42JClD72;hrX78@H}#g@nVhE+8%uVonl>+w-9TI>gzg@` zNPFj6T=U(swkHTrLi{?`ik}DC4u5g>ckB(~3MDMXEc#*(d|!2Z))#~qAqqxH*wNhy z__tcHegKH8gh)~sv+H8hdFZ#gsyrBkHzB(60qe8h7U8;px7$z<*9dX+9e?jmynGhL zcp)1B;yNMpecP~UCsyNUaBcJ`5I%$`R8e7}dHpg_jQg^&Abbg-x=zIEc0P4Mq9T1f z2tPuo@M#Uc1^PHg%-SOd;ZF#K{;F(7md8;PLpPFvxIu{Jn^c&d%Vu0jI3F_#nk z^8d$|G86pk)^D5%;uaxx^CO(*<=u!zty+*W8$G9ui^%pL$m+ZHepS z6HK;(ctnU4TR!!!R%IcIQQ2_^h(JOFSn;Wl!AK=l>Cn z)E>4tc*^2t=5|LFgyY|G8(?F#2X~&&J-rxFjO0#-yuV1EEL91A$&8u|S46dkGm-fX zveDYZvWzBj^Qg(CsD3c!XF&sPy!PNMnj*j7^7aB`2lp%btL07h(Xo{ezc<+e)gDIl z|IPlP_7LCeiQK$2K!U0V*}vmI)gBg1ual4IJJbN_Cj)*9-KgdbUwXKUR)=-x)}cpY zx6gOD=qJRjlrgal+x_tKRwP>VDFYEfh~hH7pJC-(5fa5`e}IT2L`)05Q+AfA84?yL zKS4wh;;>N6p6J%>LgL`!DiG0x7{^~xUfK3ICC?Pqf_O@Z?fq2PX^pJWD8}+V^&p-R z;(HuFZM9e8Yb2~In;ie=v5O&u*o-e!O6a!|iG*FvK|Ci!6yH^-+-CkSBr-lKf`}zV z^Dr?Rbh^YAiJRK3LA)TuoJav{Ir(~SJHeE9xU7Kpa$YKA;Og<%q?QV zWfbFQllCCq5F&N1gxLmuJ&lBko;rvGLZm-dWnC4|j6-7ju+AXf5<+Q$fJJPO<{(l0 zvI~erLil$PvI~Rsw_hl2P(i2Fl$S?u9lyr0$vUnL1&ELvEWDp|wvxuEs+d~Hl zRRe7hp9v9uRmuivt;Olt=$uI)G70fancuq|J8nZU984LAEJFCa5wQA4zBt)BHFz3` zY(h-9EM|Ldi}3oO_{TFq9Cjb)g7`v+ z&hu5+kghg(f{pR|`5^KL;mJ=zEe?yv>GDB-2G>7doP0tQ@R_?UgdOjo>+s#a1VjNL zBoo9;YnMAtIXqVDgD50KYksDI+o+*EPz>*P%Rv+oBAp-N_`JJ{9uk+0R)P3R2wM$) z49?Z0Y9yMauLe;}h)#D^*?0ARcq&Vqed|DcBgD~*{P@Zk*QqFmdZi(V?}P~F#}Y{= zj>W0$m{mp~N(iy_m6)A=mX?cRT$XGBQA!BuK{2axnBaiK(bR1q$_TMBTF8v-&UQlL z^wpgp$_X)uAEP$3yCUvo^qaf~#1BGTHc(+(4ASuTeDt|}ASwu<&F`xPM;`Y_t(q)4 z0OBVhT%L&8m?^`PkvMhcAc$Xt_!ZrnIZA`7ka)WI2#88T9PBP-reoYbAra|i3ZjY- zhIdrhUgc-_8}-EO7>H^@3^*ocsb<;uw>nsG0z?fV!dvk@|7^4HWIe_GmLO^gF=(-b z1*HDh_hVhHHHbPwgbbIkUn|chpev8waSB8|A>Q9?&6=GF!ae;J5vM_z`u%%QJnn>) zZ99AF5K2s~TEDgU=Y91b(MV#t^1~(BuA-_|D7{?wDzO1JmY51o$H`{9Pc%pJwRX~9 zBu|#A<11tXD>u2I#MJaya)WF%F?HCYAb-=x5GSUgsqY(T?n71sPa2ungt8Yy7zOHwZ)p>?DbgcTvq z9~Uw&&j1S~PUn_`uqK3}P|B2=9>IyJ^^~6=YzQIsR%T&OL-Ff;U~VM{TS9!hE@lSZ zrs0o%V%u5}rwFlnnks8Ipt(P~4%6lJAnXVs;79FToxZCD64tkxSpM@;J531n0ApXceZ)PB@z2;!x%|A&9etI99I0JjRSXh+?dKBnII`h*G{PBR?h!-|eq@ zse*7OM8sJk6Z_k?M=|>4sDW@HM2~p_wzj8BJ0$FOwFhyI5Yk&J%zVN}+)e12s}ABk zAufFtvD@Va`2TTZcV`f;gt#M8VTIk__@Va&Wpo|ZH@bsxC&alf zDs1(ZgE*Bn)awP}0wF@~3YfFAq7RCpo!c9P2O&1{83m)xT3$uMYHdFd7YSjnDq#^n z+;EpF?Arhkmk6;gk}rCU(8MLg&N~K!xJ(EIK9Vxy!GbfWRSLpkAUp}tCRmxZug%Xx z;Y~t?{<8YT^6vOhg9KNIrWx1ak>4D(i6E{M;=o;g>iGACGf@odz{wzd z2$4HN$lCSP(njKZ$0;Cu2~o*6;r%{l={_U|K9~l=j}SXE1#Df?`CUk;Yt01VPl&<^ zO3X&@fgKV%pUwtxgAkoG1(29?D8`VZt3cc%MEpv=)0(QmU?eo!t^skM5dG`L%&)x`z7C}w z>p(mp#JOiuW*B^=H;Un0W(eXTA$IUpeS7n4J0sy^X$0aCA>JLyFmmK;?gC4 zn*C&d{PuBwv=>AOA;$3q)JLo?;8M?4C1Vhwgs48v_t5elfYarb2TVYO5#ms1zAiJu zAB!Az7(_TB;*C_;u%C9^H z)K{^I*4rC8JZoB8S8V@3Z z5F=bwS+^59ZYaj#<8MGj5@Iu-`V*SmCLf70T@yh>5kjAje`>4l!_!#=8lx(U~A(2~odV$_@y$a4M_OJO{)JLTpJBvQI7%T~Um; zwqHQR5n|UDzFpyxyvIl=j4A-}k`Q)RRM?KJdw8PswSpoL@q|$9%?kzV^=_aT{)XQ` zydp#}U&1)1@4;{+TI801cufeya%Ee zfsegBxs4~GmDpE;cuR=w&PptFmmZ#qmDj2UL?R(J%2n9%dxf#6Rfe)U5bp>v=Z=8c z&lrd&R$YCgVEfM}BZ&}KUkKTiA0>Edb)`i!5XppSXDMWE<*U?DtJ=3y1o55_CkCo8 zjbE?okO+@z1tNtI`*=!TrxS$hzEW*v5UGSX#;>DS=w^KHUc4j#@qrMz8^rAH$PGBH zxw=LSB8?DL!v##`Vhh}jz7Q$}@sSW+V}z`S(?nbx+R{x8#3w>5ddRmpUJ{8@@}cJK zK%^6*m%B1^*=2MI{kn!D)j?zsLV@qc_qEf6sYql5cLMR55bef@Sw&BcM@S?O?E)f` z5Q?@Ub}4Tw?zVmU+6_b&A=HNo+1IFV0VsxC&=W*9A(WPh*cye4`0b? zxEOJ{axsWXLe%ha+_<8#w^6H>+UtR+BE*GeDs05{GF+5b&shednh+9x+S|__&2fJ> zN^2#E8bT~yufiS&YZszc{qi#aQA-FV5kCQQnEMta9==-xqK*)U7~kq*{hp^t*ww59 zQBR0CFEKN@c(DKpi?bU*nEL;F#5D0b--e=Q%QKXiKF;wz4I`#pG?JKhm~mO=c?cYsdlmeK|CE?+3Tvg6kP@zebm;%2dBdfTdTaSw99@8x5iir8==lFP#=n*kpHuE5 z+iI{m1}zC5dt_1r`S&v7W!IO;3?l}Mk@<0Za-)VfjZLzYiT8GoMazi87O)0GEF)f+ zW+Bs9U#5>11PiWAX+YF6;vq3_WE%cs9wT+__0&Ho-oU{}y2-U>WXwm)hy&mJrpRT) z7vkQ_OA?Ewq2<6!6Mkd#GUCN2m9%DGDU3$0;4h9h)AeT`t&Zoz@IY2ciQyiaHRTS>>P1Yt!8ePdPj%J+v7YSjf-0}$4Pn3W`DdxIk; zAaP*yS`apbFqkD_2kjr?zGLwD^&o5sv6G8hlO=K#qp-t95T^*Sl217p)+N;ki6`qf zfv_XQpbkpxq-QrgST^I;77(Wiv2GAQ04U=Mj-fMnI|zG1R3!5H#!4BH^f% zz1Z~*S6#G)hd?+Hq6a^F`?TqM{OcNBKLWy;5Vm}?7oqa>3+T6cFwYEx3n6s*-M-^) zR2&j!1;;>~Bg9I+8~4W4EIh5D!^V>!&J$waMG4b#I*9XyJPj)lu7rr|A!d&c=ng`y z>S=8Q!i^BE?OU;5=_Yudx{tsPggYS)w^n9xN{gdVjH=i6ATAIh+fA7TUhMN6iHjE; zL3j{i-&1~e>VR?hT{5uT3B*N0{Ab!vyQa1{?FtI6<1e8g1AkH zeto6v+(w@#D8|72Xb^V@p~E*T>DlVAGZKm>F(B>|;zo>!SuGo2jKmGa7a;BtqLgn1 zb7=O>4@h*p`Vz!_LiFU56vFyNtVUw?h}R$<5JEgt%Fep$yCc!8AOXZfLWuZUk*LQW z21w}4dI#bWA#93O*%keXIG^5_oeUz75V2oG?2E1F6N(XHp9&&~5Z@;AZMnk3bdfNq zNCWYh5EIr2m`_P9e)~M|Ne2;3h^#j%?9$mW8&Hf%6Ei`C5F#{L%(BDkQjvIjHycDK zAr>x@vTNg7JV0XWpf4c82r+u4fNd+TGectYt$YySgwW9wuz~4D2T|=|$%hFpFeuJN zBejP)hrMKat=#9K3c}UzvIf{#?IEG|l`P5s&Rismn``|=@?@#vS*2|6g_1B-d$88f zZjg=E95^$MtZaQMV;_)oP57Y9YHMLs*OBE9P5|Dt)rFFI;!h0NQFUxS?n zPl1bmLflHed@jn|jEy)EDqlGbL3R2l0#$ z0lcd|*2f1A=Ug*i2qK0M0zVbDEF=NH)U5X}2JxH_JNSvNxnEx4BxRc4QV_9(u#Hn; zv-1jZfmjQPM762YeBpsM8Z!2E9l~kU$tYE3_-jmMB8;j*3II-miX3h z+X&(fAu_iru|l(yv*!_Q&% z^u?W*po3;0J`h5>R>-V}m3g6Gx81;Frz7nGCd@(a^a@G}z?nwb4 ziV1P%7vIF7-7uU8&D?Mo#5Y2CM2Ojv{fWUShJMC<5Z?)*{#wX7mfgU~@B0ytK$H+- zpOTbKay^Nsvcz}l-eWVq@;GS-h%!Q46o}a-X(}%7Ir)cyC?`Y(pBJsX z+@lO#`ANeF5I+b}!>2V|vMBUG!nrOAL`tg&^`v!SxqAL$FNCZ(sh#?b%%wW__JeB2Wvt$spgs}b~W=^j*;Qp2CxfBp} zgm4=rV5PePf>5j84NL=3Plz3pl-aG@>G-~ibN&Rv^v1sj#UnoonaPOWLr`McZ1^}g z82jX+k;HUc&=r|uUThbXUbf#bz5zCtn0~n%FUw3;@j~)i{Di+qo-ED$^h?&iYW#GR zm}=(B8f2r1>AgkGekp0+A`>&QaS*yTSUfap| zJxWZ=y8mYXkeJRgcrSN*)uJAymUcaU!+%Oli%gZY0>|rBBdyW%f6=_*i)QxMdayqd zzYLPyCc{OW5x3H$U1H`Dvj%@;x^874%n2bGz}Mn`{&5@K;N!MW1#yfJt;{7%bW=D1 z35oM`5XT9Trzv6EY)-aA!oXlAh!ccpYawBN?=tWXOkrbYgE&cu_ik!zL;v>pgS;wq zE(i-k#6IRrY0BF~qE-d;m=D5|5Uu(Onc1QZI2}0axe$aEAp&Y7Y_6k2Hj1&TdNBxV zLKJCBSs&@CXHbG*>#g!mV5n|U7 z5gVB!!`0{>(^rGABZLhf(+e&!I*($=U#^T5;kSCM>G;Y4j6*4Cxk9v;FG&4 zVILAkJ&iy(5W+k~#GKdP#!G2l9N!G$3?ZJjS7jqwx5w3JH_0{-j)V~Nw11sO-%Y4h zSyy*}I7^6*jzV^p@>zp9eek>FS=~tx7YLE6#<%Cb zvFZ?t(fy+p2oFNEc2Q=&GCe;eOt#vBxJZa}9VrX*^~X$?+=lCK_g1;lkiJpRCE+^pKX7R9)7#~XwXA^KZN*n!!K&5*ct<2ndmLX7Gt zU>{uP^hCnFtse+KLe%gL268{dWguby?gj{dLZqEiW;V0-;5T*6zyJ_82ytIol{qSn z-GXAYczOrKO+t8IQDRq??ZI#A2|e$FxJ8I5abgyEvORw9u08Y+L;xXzo{L%HBh@dc zRbw*(LEI+9nT0~8_tpx34NmO{262ZFn=S}h%jO$#QDyClFc5bMaW0R~fI3pu2eqng z<`WS22+=%QnXPZ@l7xh#X%vY2goqq0WCu*QjzwZe+EWk@2(j*&kS$-x9Fgc^^c=)P zLcBhu%G8^U!lk$S1LHtEBE+z+66VzL8-6E_yd4iBkPsD}M6Ag^aXxC*9gR02f(UU* zRmAMam`_FG$*Z>@9up$7pM>4t)erZ`9A!x$f(dbtKT+aWrBhH0;g9zqLI^Scm4Gb> zS|~!|{}{XPc&y*<0pKZ>xVJPkNLt!U^S-q%sc5IAEv227h87uxM5qX5R@y_PC_>pI zRFZb7h)N;(UC;NtUO&$BJ?ioQ`*p6*?K7@(u4TLKDTq6S@QM>Kz2RrBB9Wi)3`7he zPME2&u7#&?tHLBjAYut&@`m~64O)T2K&Q^DHjbSrX#k5$;0=5Y>(1Qr-k}; zu%X1%)GJ%wC#UUoB$cg){6+F)Da4^ho+&zf4JD?1j|{Do4JM{<$2C>ROlGb`$))1r zusYgsVtRC_k)p%7gFeWbrVjtBc8<+te8CtxahmYtu#4T#Adzn$2F(L z+ed-8M~KA>MeOxU<74Os-?3v1h&V!2q>5Ph>M4_vNLV}$L_8t%Hc6RN`dr*WYWBkr z#C<|^-7jK&y3LC~F?z3`03v}9XEsQg?D)j#NaWp}1R{|T#m&V`(*Fp48R)$>0g*(A zn{&l1G}8&!=XTAV3gQ7FnlDpj3-VHNN3Y|w86X}KV(up12^*yti>~9yk69p+3DL<= z!UhyR#lLP3mpLF(2=S(hPt0w)b~K9N`gI4Z4`o1atExFhaZOxUvwLWgCdWbFa*ln@)r z1WYq+F;172XYU75K#0QIYRn>V2p++Hoool<86jdV`3W2S!Um&O>CbQgQAmgr{iW=C z*!;6dY`N+L;yEE?H6rG>rW_~n*6Pk6iU=_@M993G#Ngj5Zj&pB7lc?jTE^6B9$TSS zC950(@sbeX@j}+vb`>61e`DbR;uRsf1qzw?{2V-XfBc0fh}VR$Um#<bAdK*jyWz_m=HD3E~|gx*Qd=JS`J{6yu?00EqX5 zcsEVNN`HUFGYVoOPlNbC2(wZF6CFDdjbi9c4hB(7h<)qTSl|@naY%S+hJpA<2#L3p zJqrl&K|=Y+SrDHH@sjUK*P`8d3nUyip9k@o5Xu4kg!Zpn@q2g4*NY%Z2yyQQpNze6 zQz44cdixa+rG#*6BxOmKYw@pZ<$4{&7eW~EQ@P?>h2pMyg!)YoWrR4PE?_gSjjcef z8k7|UqMQ&1-ip|OdA0|UD2s^!@s$vp!+F7c%Va#p>TP}x#5Y2OZI!W$9#UMOofZ}k z;yWRxALFBdohPn9t;&3p0HT5r&L;#cV7?r;YOVbP5I+dw*RN{}ErD52A(;MiG1?k&P8w&~+s0Jq7Wb5GR*Qnd6LK zYmsmq@eD*QA@)8HFoVP~osqcQrU=B|3;!N5-NDP>Hzr)yMv3Xmvtt8c#FUE$64PfL zgX9K<(G@7Y+|`!V!G;pks%aVWnd6fRkzC+p_!r5OrL!efa^;qe!6-4+FCJef8%#_~ zLz*b=G;cZ-C6_jnCe+b}6Vus^j1<>HYw)JcYBwkT)$%3}m%A#~?cZ?|C8i@I>)Agf zrqe>7EB2a1DWlZ#MSa|0YRNZVju(jxJ`EVHg7mhidZ8QCyx~O?dKsvOP0~fnh|ibA zhy4GI@vmjXRTF#2_nI#_jg|y^ZceBp|6WGy)N{T(C-d?EWPBbbHfVU$GHM*;?+Tps z&@$o=Wl430SVsIk-BCUx*Zm|~5NzD}VI88D5l>#2D?f5W<2X`UbCUm{cmq>>wG<(O z(&cCwap$@96uFGJxy?(3%DJYU&~o6!`ix#itgIw4_)(OjjNJTr^}-R3H*>#oUxST` zr+Aiggi|_P+&4y=Ir9Oc47C;rdO&3T~|&fZj+=J#s+U65=I4EXl2) z9iG2h-YyS>9U%f937PTsZbwjztkB0G4iIAdSuxwuG3+f8(~Js0*b`#f230mk*EJc5 zW(kEL90;KmE@V25+e}2lW7-Q4j)YKCma_F)M{&<%Y}6|dPK5ZeNyHQvw>&~ImW+A} z;vgXm`69ck^F2BtvFhb}5QhlS$U)3T1}xfu#2(9!Ae;#iA17w_=86s@(c|4`5H5tc za!tt2P1;tB#J!_mK)4b@bzuuO>(E*}3}V&hD~Q8{c$h6@Pv(X-Los%4`VPX45NUju z_kO)naj#%O(GL(u2ytMWgw6YL9N$-#3#&l56T;=Hgar@Yi2IIrl74~kAVdH^FW1M_ za4)(Jm8-QNjuPU+3pM6`zZTaw%(WYb{_`sLB!s;}#xfVJ^+qv7p~@h<2ytzNko^jo zj|T(hjA{)wik#HLL6Vq_mMq) zX&{QRue=Y4P(p+b;%kt~b8&8^v9~{nFhVRJ%a=pzyDvjACUhMH;tU}UXiM0ZBzOGl zKD?|C;w&Kwg88Orv-7{97zUk&fjCEqs3k%ckvkGUwKw;T01-|Iol+@Fxg_g_V$2$+ z0CAoWVJFnsh%E;-kg&Zx3d99M-07^&EVtAQM`EbTSP&Npagm?mTl{j`ZzRgS8Hh`S z`1V`OL_y8*-B!SSWS8=g7<*+kh!{eojgT{Hw!zK{tMS^M?2TtZOiO@eT`g^J#s*4;OuxxRrbz)tE`uh9*dSj!6P>j}V*rqQ_ND zOnV@ay(k$(93c`VdH*5sLA&b3TY9LJY_fF%^x&JCO*v`~<`U zLhRrt(~eYMh)WBDHJ^caNQi|I66U<+@(L8=$LZ%Fk_qv&vzQH6UW~g5^ORnKNFl^p ze$ZE9>XBF!qv`F}AW{i&q_2cUImP0+bA_Ycfk-1n)>aYgyWbRx11TRsq!VJPAD`2I zHRdsDRfO&*5E+D6*q#4BQljt-%a1=wKx7ialy^lA)h6^uF{Z371Cd1t^}T$N_Ku&g zkQn;)D~N1D^yd4>nmrhU2bn%hssNEgh-I@ROw=O^cPuvK`~>lc5U=^tSk+;RKciMP z(W(ZKONeJ9L~Qfcqxjx!cCQ9R9wAI73R$-qy>Y4M$l^xl{`oBB6XL{helo4?1l;lN zc&{;t$Aoyz6S^aYE%30dmS;544YzrL7(^i?nlJz;^@zEBrf042JwavyKALv zfysZZO~_o{8N^#c409DR^HT=4D2Dh!7ZC3V@w7z9!aF6|BN1-c9mIP=xbvY%EBAG{ z0QDkV55xyT>@JrurF)kuQBZM_SD00`lTzr?AFm9XMi4LqSEzr}bE-w3g5kvjW2QtcGF4x23#Kzt{JGoQ1Z zm}aVt#HrVlKvWQ7yQYv$7j?RbM2oqTLHr;@Q88c8-ZASd62YlcLHs1d;@^Cc_5=~0 zZaGmt14JbuG(U=2VOe+vis7tg3ZjY-2l@$_Q|z-!w6^)}HkQ#kk*ZDTrD^ z7_Du|+*JHzNSHn{2eJ3!zX!#qzLGM#JcS4)rk9TfUx2YsE*eNoYixt$a|-)hL+Pb< zN=O}SC^3z9%8>iNUT=-0LI1G7NS-WBx37}l^c&I_C8pmz&eX{U6Vs`O8!O`6v!0;j zGB50G9c?%?qD|K&15jdm|8_n5hs5+hgW_66(|)1U za><=~_)m#xk81)0%TuOvkpA*NY2NTFp1lkfhfczynUSL|!A0*QZl!R(E5r!@TKoy$ zdF2X-{e+l#Qo^jHzPr%vI&;!>5VnK}A1`KhZ8s>8Sl}H2!j2FD2lyypVJQB*-su$u z;s7B6jU-HS&5d6uhDSs+2zx>#S@YLmX6z~?Ht&uB;XsIyPJG7($3s1lc>4A(2uDJM z^%1f#U1w(`(q_hka3X{@KPGCzk&cx}JbjS>f*;PSr>-hhRo!g0#ByEVHS0HR(s->Z zWIba_Rgh?A`T)csLKN|NhNX$Y^N@&ol?=j}5Dy&%Y^8eKCnTIErGaoEMAjU>fpqon zSxCe*$pqm_h^4Cq>|yz`Nl2VqoeknJA#x35tpAHXxkyZV`v`;^A-poB%-Be43lav_ z`5=xEA~cDw0+{sE3JF``QxNWi_!TN(2~S5nN5X#DGY}qx(9>6EXNGv-S%afOo`X0_ zh?d_(tOa}Ti(*vvdkMmm5M%i4$2+N+bCI~!?+pkqLKN|B7xP;QaGLo;*LX4LS zSS#1=xQnY~RSe=7A=VVAv6s@!BGjr?oj!v&PKYb%{1bjLy9E-n?Mp$NAVhwdm^muv z;AhY`y$pm8A=)&Pv9$|E+o2dYmwW@^ONeGJs;t}L>G??9E3W`?k`Q5h_b}_)dw8B< z%=}6aeuOYsBxCda$D5%TOFmYE@F#>RpSkNg_1+F7s676>hL4*)u<{=T=G?tx9@y!#bPBDiyK%61OW4?<`ryDaypzAQoYYpNoAy(R| zGJUuBbx2ff(FAdh5}WwZs++baA~Eb|dl2D-n6pjH4!1RLhQyZTS|H97qJMWW%U#?T zKegd0oj_b5#4mml>V_@daaaAwLR}CS2~n;gW8oV{jYX~M6xS8RB|>!XsKzEmYTzWL zjY|&@mkBX}A8WUI)`ejxhH9H$Ag&N%0RKjnt-h9xL_|R!5LXG2H$luC7K`v`=JXEz zL0lum0KP|QtjC=Q6l3?%fgr9EqF}d(Ip4DoAn|jEK8PEHh>n*q$)goBkhl^%6hs6e z2Jr>$6Q}9-Kq6Lm1c;l2xWo(Qri(k`wT6=;x}4R`s>7!bDzvD-+<-VFbNmvzru!azh5V$3Kh>sKC+`&Z@djX>Nc#Be5KjRr2o zqy5@_CxW;`h&$m@R&-Jaf1`F<8H0!+L{)~2y(zxm75!Fw^CyFdC4^0!h@JbS_Z20k zdRLBIfe}+K8c0khtPhrFP0P(i>1Dg$?sc%C#Pmt)OnLuWO(~LHmL2_zSrvKUBN?0&-5K1n4PV}y$4JW39yNy>AcDGGKcDBv2zgphpR|8xW zRUz9#P-41icRl-u#Pny)bHz%X$%jyC*=|og{HMgUFjQ!8>7x-oGV1F8qD%| zpb`Fr4{a9%B9jmm`4ZMs+9V#e>hrR@AhHN?W4(w)-7HT*VojfT5ZQz{87^YibYJ3> zywW}aL=GWFpA|BjkeTi%Mop&&ARZAS`U>9;I{Vs5B;G|PgUBUBO0k69a9Oeli9K!8 zK;#jk_OvP+Jv#$;KmFq}K;#o5(?X54*8hcn-9$k)h{uHZ#W%=pnQ+q>waO~$5r`** z(B|77NSihqh{UdC`5>MWqU$cc+_P|lB@*{OJ^@ic2;YDf?8WUJOOR-;^9;l@Lg?5^ z*_{qWIIS^U@f<`UA@&ZJv5*nf=_tnX_!l6a6T*b=mG@vkmmnl&YP<$fM2Lh`A&c6Q zd>@IeUEhItL5R~zEt$@C(LN+BBR_z6NeE3|LNuyai{A_i@h1?k2w@W{WIhjnj6*Rd z)RcgDO$f_;5!;!(0*_Oro0oxjLx`;%By9OI86Hn~dhIKSw}jYRA!dU8X83=8aeM`c zcZ4XurN&kj&J0J_vB=^li1&mzT&2o_(-xgaA|$Q~#0NsW)Df|W^6KwMJXWm%QA`K{ z|E*#op5Q5dGfZnid?du7w_=tO6S4=zh^kS#`cL=s6Cuj=)Y+!3M^_-Bl%fpcGa*jy z=3nRZOeqq3<}?RULWuW$rL1pnzjsLdYOe~Sln^0&NlTTwt0od3QUoBr5TeaJDeF12 z2QHCBIfy}&5n{n1A@dJwc>u-m)R%!MC&X4hdN#(+cQ_K34lO}^CB%Zp8ccVKF8-eT ztF;F4jS$Ah>P!~hcr%I-*j^LFcS3YsFJspyCgP%sW=4Au6@<8?BxM`d54nV5SZHg3 z_(6y`esc4BFanNT`PQ1o4Xyo6qx7Pl2oz5|71wK-3W8&MzTz z@jr&|#APe{f%r{`^-cM{o9}O{p%~Gh2Y{$0gxh{0)4W#Yg+!a?gF)=Q^zT8EG7~X7 zDgD$PC8nDsD{jDuDHjbSrn4>w$#;#P-w&mid6p~dU_*)N&rwMDp68=e2|celFN4mYwBpjiK(lvk>aN5@MXvvbX@mW z%bR>H*hSIl$CFr;n4Zw8XaA6x=I+W<=zNOZh7!|t+V$|C64M!pss=Mdho48fU#I^? z^M-3#>lu8q^oc{uh}+FCiTwW?<6p~&FE7`Vf2bW2j+O-PY5b**{CgSkq4)FU;{zKX zMCPnbS%Zc*E$Xs^JhgOlAX-NJsMXgxLo6eX&v%q>3^x>^1;JK6-|7&xjJVmWNAe8@ zL1U1Tiz@!0cmu!cbyS3FEel4=h|R_I6uFGJ^}uI}JBtR@pyj~Il6s6-4$S9luhSJ7 zl#filh}^NiINr<$>w6h2xH@MmdRzSRsDz8#N4zaob>suq&pYBwX>)8Xi2a1ntq`)& zl}$ZRjPx@~QUBaVwuH#yOSH^;d*cFLY-?o@c7!mwDPft$9p>X0pPPa>K!|Vr8-MFc zYkVCB2UI}V6T-z*%KA4sFF`SctJFX^5TcrI92F#ehl}VdF@_9mZR9K^!53YbObtpk|GGv^KB0f^a896~C_{ z^|Y3u7$zP)KzI;BU?X5pESAkdqPBG}5Jw5IV;%1`uPVe=Xd{HB?sX{2>C22yY%kq4HRS5Edvm~ zgfNR1v#tqwRY*))G6uv+LTK|PrB2&_;5$+Nd>jZrLUgxRV}_dk_}3dLcHR~ z`A8o3YmZtrWXMDi0ff-i5HdMyj%QfvJu(JyiV(*}OPGGJDXupiP)q@Fnh?|ZV!`)4 z*3_a_MU0pZB9IX73;FR%_diZRVrTJ85J7|}@vh+!`9g#f(bDyOU5=neL5b+ z=vzJ)L z5N8NcGmvi`S-t~5gL8DuL7XMTmgi!&yov35)T)Z(79h?MB4VhFy`AfYW9(M91QAXM z8Q+KedGT966eDZaY7plMF_q`KH4m#pkT7_>7Q_WYI6o7zo7+w=L?YT^1Bi=+uvQYY z>BleQny=u66^KiOa5q(DxAR)ycYBTH77&*SaiOFI+p4Vl3bktGmu(=f5MuXNA@g0a z2iIu=$L;`el@OP@@QR^yAAXmlY}^In8X>&qwPby-&sRsS8uWcPi0gzn%ip43dS;{| zv3|!s5H|>68N!dE(q4?;J{ud`frubPCj&k~vzNv+6r(_458@^vO1ewgMB%TUNVJM` z1QAIHC7$J12p9B3;$6=}AfgE2JWR%J##+8c;#`Cah+BmC%ty|e?%DkiiF|E05YdFV zI#87@Ym!}xL}xd55Vr}jiXZ5=HpmKBkA^8cLEIt4<6;pDys;Ngw@eK51`$Ju5`Ofm zOGPVuCti@801-=wshe7`=M_!QquPVo+V{8r$qoJ^8mK*38U@LBE^WOORS=dqf2e~E z)gE@t$dI22^2LWfok}hKi{!~t#hGfk-tAqzQSBjH=Tn_*u=X&%Lu1A9{j$}leh@bL za~*BC_Aq0Fq2kSe&5w~au`l_n_qH)??$-e zJ?Dldh%7=Bz2tjw&RcJZV))2AfXF6<^&Nh!geX)CiJTlQ5IKZU+!e8v{iE@+RR?n& z5RVAa(NxToFE7NOzV`*XAaV(D^{#}i2(QM&o!@(O1Cd7vXWkWQdUnkxbR8?s^Z=1h z2qS)CrBSO3yO7Wx+zZ5GLflH1uu2DSJYB~5Rv!>g2%-5>!nXSK#nOJhO2AcQF&gx#zdjR!Ax zPBsMbk`U|pvb-?wN?hb(FN{FEBE&>J5$hgrhRdyqV5A<~}Uj^4?svp~Ej z#JO>5?0xZSypAKRW;Tcqgz(++pX2#@JEB%?-!~6LF(Kyg`Su>pEpb8c(l;{@9|^Jk zl87B@G}sEo7`Ji}h);yLxKO~}j=vL!#KyoSAU+eKgzrPNqG^jhNHiW~4x)q*-U+Hq z)1e>!pLaNK0iu);MtpD26Z`t&f}qn#OAucOadWbSnSBx96<*GlR)Z)b#Nq%cyZa!n zDY}k>D(gU$6XJ1-fc1XV{v8q}2R4BCN{9;?e7D1w|FxI%%xo(V-w2^HNyIW|9m7Mz zL!NB`@tqKZ+DX`p7Aj*<3Xrh!f34EVA+a!$_2LIsl@Y z5GB0SQ`quu84|aB96;nI!TIJK;g|CE?Iwnjj7mBFRye zZG5ruGZOaZ?LizOgvwif%*W&2Q<2bp+7W~^Ap;~A@1{2O1D+_VJL=km+m0k2;srU6DE6S;kzVk zt{#XZgvjkDVcK6th`l5TDpNKD_N0CAiU<@QpxqkZjYBqqy7gE&Em0Xsyj ze^*H?5(4+JAbbds#Jh&uGG<*u!cA-l!j}-{?WN2*X!>*{3TGIBI7x`^d{;W9xFrve zc=2o^2tPuY^D(4GKTIV^oZ4>!!k-W&#j5PmCZkzMl;=$W5kQDfc6|IZE&DeTEsUpw zI7Nu#tJT;rOL=XxiFge&5W$34{EKfB8{7vMPqiZ#f(RkR+oKZpJH7ZDit$=y35ZZaY~3Pe z^ODn^A~E^cG7w>e_{m4ltdtfkL1LVS1&A|*cvUH7zm{~yN#m6@D?ywk#HS<~8~tzr z9_{a2xeCNNLiC%%k7U$z@i zeYRPFxIl=G!+0WeWn~Q#vs-Qfagh*_M?`#s^`uQ6~7k`&e%W zh|7eCsF1RuUbVP*mY3M0R-GNP2gFrE?71#w!*qskK%(*6eITw8 zB59X^wYaba7rB-WvjcIR5ErG2{C@Sgx%Hcjohk@v_{&L2nO z^`sLZ?hs-opZk?;ycZWE&S(3Ah#`c$zlgc7n2WOs%QpTXVhOQehLqVq?h=U-(^H;B z_hH18iv|)?f2AP#g2eMJPfLrlsbzBl!<$pF_p4;4DM7K;lTRZ%J(!AlP2X#02 zrF1R<-L4?hztsJAZLL8jC*wSALX$h$F;Mo}}m* zeF;M`8XqeI5l@IK55>%+RvW+6jOTs>ai0*jzt!0K?rrd^wtYkehy+5Mea~B!Jar0c zmF9{{5Q&7Sl1td@rt4ZGVdGW}B8d>$9)USe+?+*5L(-KFQ5N zq!MDtV=?M zF?p^wh&)2a z5N7;bwV$gx;SN&Fu>K$l2@x=yZ~E$#VvJ&_CJY4eoDkc_3Yd~(KRnglb%8#JB0@A% zm9c^|S#BtX;>u7EF9_io&g<|+o_CQ@myQ7Ok`UqJRoI!l#yE9asipw&iV%}OtFZ;; zA-Gd4T|5fJYeHy#;l+r<_Bp6k!Bt~GydlK+d>KnVA8{3lrUw~_w}dF>UxQAshmA+# z(?BB-?+D>LiBFB2e+cg?baKN)5bp_5ERnJimEQRO;r7KC#0Nr5>dwcbZ@e%>ty;Qx z3W#Dtq`#1`pu%@JhDZK15FZIKh|gNsGbk93*2Fr@1o4Rw**nFo)k0(30~pq7Hi*xJ zh~g>v>kh$qV(#X&xgbgiVg8OUP+4P#pYuC|%s`Y9;^bxl8^6|9hJGuXdkaB)Aw&S* z&|9>0{uv~ErYr$bMhNBRs_b*(3Oo_CwX!*gazgCsroqg8Vt1k#CT%Q0d?iHJiG0hB z@=3VQ5EZi$#5Y33YVnhFZ03(bF&aHs1>!p)-hJn@VJu}jNQ^XC3!;J$j-%Dt_x=9( zI+X0!gZM#+XK%#pyIUdt;#7Uu2;wIpo;$Z-13zxYt(rDsGl)t;EdDBHHAneol8xZc zS}Lz;@nhCj5LJZmtr0TIvw7E$7<0xNL^UD$1PNL0(qMdFm744X@rw{iH~G;Ejh3jQ z7+F1bgQy|IQN9huxYSu%NZiWV3*t8+-gXf)RTp2JE`Qx>3!;_~zZUXRPxu>u6vMNv zJ&3(m{yk!Pbd;ElSKjA~64Tj|yANQ*l#2!u(>c>m$t_FFE}`^tao>A&u%X0Me`LD+ z+Kx$Eku>#-`-|ks((SmP@}CvDV^Lz-_)dJCY%nq1w?|2l8+zLuC6`Ls_v>iGiD_}3 zks^A}HC<#QOA`KSd6P#5xG2saJ7kFxQ@_%B_791vonyK}KJ|HLl$h#&sfYiRm|pwP z)SzvjS-X)=_@6Xycy)CbgXW2wtv}h_3Px$19egCBeT&nADMf zFC#9snJ+JW+-@u~SNBbB(D0_|hd9WsJBr()WyB}iO|3J;GUBW6?d4y7d>@P!1pB*8 zt3%W>;t#j;M?p5vC5C;1`|rR6(J|C`LpBAT&La5;Bd|C%jj*PUttOtw~u&R=(3pkZ8SlIS2k!f3r4AxBGD>#1qeq%%>5u{ zsTC*sA<<216$mFnbmNEf47X}wjzs3cH6RWWB7A~~t(v^AClZ!D)`K`i2wx^)T{TR% zBB7kJ5ri`#PTyMB7_@`~P)GwJ1i)z-=I03DKx2KgK}hg8%0Q zXSRblOo%o7L_RP3`?z{E+jJKQH$r^mg8>(JMBPKJ(p269;s_yz9F?-uhfm`?w06=y z5blJquI48_mJT_AVysNE1>r#me@}Im;NEu-60HW>gE&eEkympTHs^yg5-~R%L3k3v zPKWP%ee0PN3D)lr2rokP@>FA!+b%Ul;&Z$U2ya3}P3JT8UmwE1)wV%yAdV5j=%Ijx z{`jwL1SdwhgE&rzlskN$dhA^hYE|JdPY@>v;lcOyW$iZ&L}EpzHwYg>G)a-N>hjFD zNW^wO0m7FMNjKG)*8M`<6BL~H1#yxPMK)44`QykTD8@o_e-M6z@VOvkNND=WUlq1O-N)PI0qt-5UTh1nboqsc&_iOpXWgY5yGC&s`cBxVJ3<(VZbF2!Gzdi zD`GltFJ~b!#P14-5JH@Y7O*L|ZE@bSd-!z_p@hg9Ct|gY!mpqhs|zDQgc0Jy2qF74 zdUY8RZHGsJI75i_`T|z&y~h#>r&G}&&JyA@pZ8gGt@AP@(woMBI7f)65Fy)D{PQ3Z z>nGm@5l#rd_hP1d=nej#-@P9P;yfYD97Jq`z0PP97|amlEBFNMvrv0C9y7 zStq1S$G)IB5>IuqL0lz-pBkUO)Go#Zi5Kr5fw)G94X4CRZAd2@B<60<2XUPcX&Xdr zcEAnX%V^*JDTo_{c*svwQ9UklLNOLUdj=wc5UYH|?3a23u9bS9DFShm5Z0H3%tGZX zzOS@9yaEwPh%7#bJU^yGE^1Xk#v2e(gm_XQW-|iLc_T5-_&tbQgxLB`gKcxtyokiy zoMI5sglKk!Z-NsodxS)W)@Km62~jkLuL78n(Fuv~KTAQ}A;d#o*-^f=={6Drww8m4 zA%xBj-cKAAu7O13yl)_431N3a$POzev_iFqw0T1^VNjfl25JvOwg$;}TpJsODhN(- zL+fBewTGleS#phOf?r5p?Kb=`k|#?mBC6$Wb4xm*+C$ae5p}Y`+C#f1N($3o#(}7Q zaHf1@9c{Sw;AU&2*s|?9w&NBn{%U!Xea^TjJa3iGMzx2>OX}G_)E>%ybSZfNmwVA!Fd8?-IAt8yzuwmHOin z603XNfH%a&5JVgyUbhspm-eF%qZkv*jX=Z`;;k}YEI6pI6%zZB zCxW<72o-+t!Lp%Nxa|Hez!*dVA$ByCGGC8gyHJcnnT5Xpq7 zD&qTkG>#5OF>18ufJh-kbdrSa6-~oKUnd*S1CdGy!;cc?)&K1V6vKOw8HhAOnAxZ? z`RsS z(|5Jn97Gl&qVMuK%ik+-XL6MJ3J}?Zcsie-?|pv&9%Ndnvz4WCIT7pF_WuR>V3GxrA7#E@kd>-fu*rhucOFd4$;dQ^ZUr>f+xj@AW1S z`Glw*C}idPW;a7I9**4#;xQo-TB@^&eVl!eNV;VW;t3(X1&Ua~rNA5{7Wdl;;wd4F z#k>EAg-U zZ2VCWZwS%;3%}dD7uKK{`uScU-V!4Jser`?Sm0UCS0)?>@s1E*?8Izhv*FKCj5V1) zAl?(gk1zh8w^I`**q3+sf%rg(t(ii$GN?a(x5ucQ0#Qte@keBAZ0{ksWOa3aAc&8I z_!h0kIy1d?=sM&lLO^^X#3jBU@%){yc*d)?_8AbL32{~=W>2jwaPc(3<{XF;LOkK$ zb8FM{IL%bfJrAOk5MMk*%xTI6$P9zdDYp;MPBShvY0sFkD zVa3*622CVBXGVbdN{GzaGPXjX;)}#JwHe+h~)!!-s(1tH$^!}bo^+`uKo%)GlGeh}g}@0WD$=Lh3K z{3OJPxe``h-D?SI)uf(@ASwxAE0wUKi8F9wI>P<|h$=$V<_Ou@u19g&pZzcyL^UBM zPUGi4yx)P#7emISf%rv;ONJuW^LHc`N8V;x{42gz4(4z1v<92@`5^XQ{r8}F6`uqeyul6#ljb0&J+C}fLmN!|b=Azi^AEJa3)AVlj z>>m=-L$0}sF;j9&P-kDE(A?(M>*z3D%@aufz$N?a139&m!%p$J8`-xiBdE_7v zc7zDy^V)2N_}U_ILrWjT0YX&pjWcT>O-(`KRR5tM>@vk2q!}5oD{PzYMNh>NZvFW#6d#nf8^Ui zPwM^&iBEZBK^!8)sr^!>s~Fa zLd_?Ea3w@gJ2C6@;Akdll|`uuh{J?9(L%(UKXX}$gyz+$AlwMCx0!%h^zwL&#BGfk zAdV1X>I%LPJZEq*5>sqvfp8~8_Z@2N=(nl(6F#bBHV6+wXfIc1w#U8*B;U1R)xA6tN?< zMP^8BFI^47hY-1Z)=4N?CrDB`&00__zVYNkZiFne8S`=k7-_ zs{J;B@FT>b=W5LPkqKUAzo_k25dMUSoFZaoNnsKc!*q=`hyX&2O_Z<$d*)3+B06UW zh*N}!=i3iA_e{ifc*$WK5T^;T#YoI5L(0ohj19(nK?D+_C*NZ(#AY{sGYnR-1rbCD zGfOdB+^B3Wig9(x0T982kOTW|-sX3?hsWe#`l|$Qfw{YSqZ*he4bngxe_*^L-S!8i^a5kAOH!h!Tl_tqAUq zzaRb)9w5#U;v1i%V_Q^+XHvWE_5u-3h=~tGYE60;q%Tj7yLCrv*P7YXrrtdv=pOShv|1wIb|afuKu4TUV^Trgfh-R5v0 zh|7d%;~`;Z+)m@!+LcX1KwKe2&zVxT$~a^;YL%5w7>KKc*pMP(_bk5HAThZ3EQo7_ z7{!lKvpT4WdjL=T&x5#52-h1TRyEBG_e<<$mq6Sg#I-C5i;YXVidxn3z!eY?gqS*2 z#Mp`oJd30#?;41kglIoUo%LPphu>G-%pyQU62ihxjhz_Z3a<%!`#Tau6d_#3ikWxo z^`_`L)+I-SxJ8I&-$l&B@5VJGJj`Q2L=)nOsRnb4bN_)vWaeEEw+Zokgp9p3eSH`S z$LaAP?hqnthKN~NMw~@L8kqnhh7cVs_=+OK8e=4K)gOR}CB(=CHFk3P;btf?P1S4p z7)DIFXdp3-E(no}YkOZq>1AAyMjdP@F-=&IE#Dk%=7wZWx7L4=JXsRw*T^rl^>#&x z={^58b+W<4^yu^^ilVbKcA@0bUP-f#Hk_Ew9AKmn44pj^*~jbK{nhd&KON|*_*@-Y zgA!BKjrHsw64Nw;e1%%l*d{2oyiyi2T|Fgf9pQQ_~ zycizQf{VUO+)AlKc#<;XGwvGpis}U79wGerCw!7-dVh4g{(RmUL>wVz%n`APqT;?t zY)kC|BAyT(uZ!8vFB+SW2s_dZ#C<|+;Ae{*NVndI#MfCpKqL@i<7x@(H`NxW1Jft> z1d&JxM>`=?xO$&LF&gLe29ZRF9{i+`*Dvk!knr!>55xmP=uelh51pjvk#I8^0OBDb zroUHZlcEQlL}H@PAP~uf=x!lqiGo1~koZuf43h+?%{P-IN5TpmV-zqgkF%0O)rdhMy-1GVibrBLabUNX6v&5 zt8)L_dMt=cLhMgcWx6G9aVW;OCn5SCpe?DT?PN05jgU<4wY5Es^pn5?v5DH2n6 zP6Uxdh~Y2PSo@ywGm%)4X$;~KA&hl|Y>sse9&a-^I0Zy5A=Hg|%CYffA&T*^$8->R zg!rf|W5;8c;paouYbJ<%Lc~uMv+FaybVM=CDosH=CdB3fA#1GZH35m2tLK7vLWu64 z#4PQk;vEu2W%EHiB}BWv61M&AOWYMv-n|e+0U_?s6R{6z)fZ8WZ?YvIo)N-0NWy$4 zXLduPYS}Ung@m}utI=L7yznx~>2H^Vcut5Lj$$_YrNRrv*m-Xyh$2Gtj}$V;5lwK6 z&6`()ctMB?nTTm$by^^C?y1|Rb`cH?V2N@rRE0W3n98X$XKM=-cd-% z`niKBBZO)M-&$eL+{Q@woIMJnoDj{W>MU;ksB9#R>~OscTS%+`x2429nKYmH$QZWJ$QTTE1bm z*9?@Hnpu9WlMN=Oj;f6nT`fm9LdoSKn{Rcr;l#9EtfAt`^QmsgHgW&{SIe7x>Vb>m z!N|K4P-6P5zWqaDnp>KzaB38wf>O)P9`yn@m|F7vtvp0c3|ggXTOi%|=>MX5!+j*3 z4L*c+%|^?JpILhr{r`>euVut*n)Q?qiS?a|mIOaN?Nvwqy^MJHS~Gd@xn=(BWF;;~%ZM9Q9;-9NGGa3oN4fUM<*U$w;M2M%>JYVz*z0YMe1>CdTcm2H z`usuh2Fgx!QtVObw+SsHu9{X)k;{nP$EGQ=kKfQm%YnV7*JJcD;+Qwe26I{%xFFYc z#-AN;<}_tpgWgkJ@lZ<>JAb&ieZFO3c`*MD-QD=blWt+-`}LNGawESqIfSqZ8cjJZ_!k~IUIyN zA!bGJq59fuxIc6}^8yG5LX?~oG7m?FhY6?7y$r&U5CXo8xa4-^PIToq=~qEG5n_}H zU&46&?i?f*n%n?!kPu(qsIsjQg?QL@$gP_o4iRF{e7@&ya)B<2;W_LU2xmfkUM^x& z@7RAt!rb>Z2p2;5@IzES2WIv`V)%$y5Uzv>tKdUl_awiNFgz6p;xHjDtrs!x9L@Pi zEU3N@!i^Bc!=-Gtow_~}hq@$zI6{a_etb;7R}NQ@2%P#5ggYUoH=aVfux7vbQ^=@(|2v0&ZGEij)%MQgN;q@vTgcl(u zKM=By!!~tAqGow62ya46Tq9i%L8SU!HDQm>VQI7NtP4*?syZebd_js<$?36x zCahkJVpOI41`$dK!>ek{a(4C#B$DSTz4)gC7DfoGy)Bsd{GJy`=yXyBafT4hA_VN+ z*jqTm2#9S4;w&Lv&gRegfTa5}@I{ZKcX!5_t8Z_05EltyG@rj2VlP^u7}qm3 zKwKh3#0tK7+k+2fNO<*W1L86ve5Z)nCZ(VmNIW^M3E~PN(q4#IhbnzPB$^m>0CANN zgSQEo%3vM*rXHTA1>zbZ^n`qBQRmnVD8`c!Iv}nSqNooa+u8a%8i_;Bx*%>4qCGzp zt&Q1#t(bUT-4#RxA)@w)nEvHR+!xhw?E&H@A!=Lkbv5q}n(TW@nD+|vhwh$ciUv5YBfgK_Oa zVyh40HX%CtOIWx;r%ouwxvs-N+#!UKm5@cxD8-fN4kt%|h@k}UUwzoP7xyycstORX zgh=Yzl4XcflTq!V%4y$g7!>ECf!f3TF`@Fol8aJQK~Va(zYaE3d&oSHEzj?!r-h`6 zj@@4*PnKr;)yRAF8@~wE9;OXDP$wI#J*4|IRwR9$pN8rO3DfNBXv4LK4c6loH$1Zg zkey)Z@K?*5d}oJ?!mQwz0@WTyuBvDMP$)+rl!g)|c* zZMnK$=ms@!c(YcW4f;f{NkO-(rOhF@=)1(Ng>yh-~LF1DF=giNQm!uWGwv4Ph94e8HR#LCWPZv8GF?%+8V_;fBy`K z6he&Q$4aPe>F0!mhIKfIR6+KYs|%VQAF39GbhLBlzI)tbFEc1N>;x!?XcL@0@r9*Mbk<;xxh&O~dH&cb>bJi5V$>e~-(hpxOyn^F+(36V5{FC!k(7EhP) zh$sW`fe^JA4CCOo(2qg)DuF=OomsRqcO(_(+Ivyj6w%69*$7f{fLz;moBgBMW{79|NrTES8C`biFIU%%7 zL~P@zT3nPD^iTuwl@Mu-1k6nPb`EOQy30Zk-w5$!l!!gsH@OmtjbaIi?}SkBiFAdv zU8W(i$VLXDf)JY1r0h|n7C0rB8fk#|L5RpiG5a}46ZbMy&a?*clMseF>g?Nuj*n5R z-mlaIQAvomeE&Do_TAbdA$#2(L=_?C>++q;m+r;i^V3#ZAgT$`iXR|1VCM-36yuVH z4v1fbcoQpR**89ILgL*zT@W>d(B)ezl>Y9q5Q)l?t{{FBqN-NJVj@y}kvJCB14Jz$ zy7DPGEyR8BulsF%FA#gL|9en;x4IfLcq2Z564TL@Ti^fl4E{$nkeJ5G0_C0?`(~r` za<-0j9c(BuO;gU0ml(XvLb7bk_P4sj1P!I zgy>VG&Xh{RaeXe)?<5FkLOdA7k5@V@!}Ym2<^CXC2oZCa-zA@YBG7LYW_}ukDsMKvu^yf?k`q&d}q_EbPxfQ&=9kBCSHXo#`=Rj(+VMJW)wqNL z5W$3qXvFUl^;2_Ej3vFEg9stS)itO*u_&9iTrM_L4*+^ zZ?BLwiW!IJ`rfd83*rnRvX)7iEZl82ilL(P0mNBCT+)@X|6}aF<8p4l2Y^c?bw|x*Che*~_!Ht1 z--I_%DJKra2;E){B7hLr-wD{k8_~E&Hu`Zbh}(oP86#v5%P!zzw!++BAnp(%Dn*s8 zUGWIdw?AK~Q1VYY5J(8~S$topjxI{*I^xDR196uS-||(N>x<2}oaAJ#1R{tMhenJ867KTWARZ9n5so-B_IB|6aN;CB&MRxUb4?Iw@XlZ>2zsnJ!~v7?W>d`^E3Mpfuv=~ zvOh?kEPcFHBlB?0PeF<4y0qo>veCp;ZLNa*e(cuKD7kE3wxXUko|uXckCV$SKcyoZ zt-R`wmN(hV!9i~2*>Mm`OmkZ{u)j%6Cu_fvuPocFhf>R(Dh=@O64RhG$GdiC1NW?iFgcY z`MFIX9ulGnuQ_QiPMUyXd~356L<}Jk`Q8Z0rjfY1({{^t5V3?9ewVNJui1lBjz=xc zK*SNkl%G?Ss&4WKwd(HmT_EBKk;AVeJR=DUqxE}1BoN{>A8)f6{z?f$gYE?hqZ;xQqf=}Vc}#L5CBju#yP@q`ds*Z5N9Ers}_AJyLiL?R(3&*586 zCzwA*F^v4JKs+Txe2s{i<-89@!dvG!h$KSfcjxKZ)PZ;e!n?p0L^2_kyyE*QwNBAO zF=o3ufJh<4C>oi2{AmBp8?y{=Nl3qnw0AYqvUhkQh0!jWqrUJ>G}uNte{nRf_@*==rscuk1;s(kbF zqrvZx*cx>cL^dIOt0e3}pc$@4AL|zYB8Lz@QT#c-?2M<`-t@QwB9{=)`-@oMvWNIB zI&fGJh&O~-`no04_JMnGw<0&c+8?KCI&jR4 z`WnP1LfG*W+V_6za1zDXuA2*@f)LAkNZ2!*GkCN=%jV``OoHr^2@s$u?Cy7{c!NI9W9EvUm@r@8)HuLH9y5=L0xI5@Qi0_1O zRgtp&x64}~G0?IML?t06tEsa!y~g9`6!{ZZ^;;^Xa26ALHr=ZbiUn; zX5@t$KfB2??FdN)R=KxXs_YveXRxtv#$>4WgD1v&W0s9u;NW zZ?Cvr3*sjsBy0Gr9``|AQLD}z`~{+p5Dw`rS<3^KuaU4+ZCdtE()f!IrM$eiXsar2 zmGD$E5Ql^QJ7Ri;?=g2m{k<|uOsfaTKEa477mXyQm+oAV4LkC~8>N@lr{wjpvBY%Q zlV`G`dAV1RG;T5K50WQK9fN9Ru@|hap~SSf)98BHXkt2WM^m|Srg08RE)QFcsi%!6 zrh`S}<=uA=xPWZ4lCgiZyvawk?d9!LtpiYE+PAcU{Y_$ertMpKJ5%iyC^1cGh<}%u zx-1kK8s87qMta5j2B90(yx~4>{S2)P11F(n#5w!ZzWo1<@!w^{rP?x)NH-WQ2|jrF zc|G~>GUDl{7sv|dk6MJx@}w7y8s4;`{noNko9&;YWyCs_FY67ljQIYRW3s5wO(W2P z;P7!7^@v(V+`=Fa13Q&;k@uR!#-nA#%RV(wG<&fC0_1h>Xw2b)d9~^Jyjy1Z5i?7VY-;@P!v*F^75O0epelA_qm`dE| z8t@<&ggGJnD+SEi>8cRD!w%HG1#y%Rf&{+pkaB8MBwncJgRme(*J5?HB7f=(Bu-Wo zfUqP))8lHao82`T5+iGiKv)q%lNSkdme=70yBjo1K^!B*=KFkGl?z_CP>jOCA3#_W zqSZ7Zi*jFze_d~_auCM}v37ufCDsk-k75}0{RF~>5PSKeu9zG9rXZnh`x%5SAx1P; zV|M3vk8tYjip%aj4_1P(Cq$twpK{QBTQO?YTcv6c4ulwK#iupM zkK(}q^@Lgwj)XAgJFp+}+*OHUgnh3Aae@%b`GWRQD@|J?;k;ep>p!o+lY~f$k+2n~ z6fKdk6E_3lM2H-|d*{|>!T8smX{iL_6d`P?1uQB}>nMt0SfmW%G$9VENLcvxJ-A#w z|AHzAXF^n^@#>N4nTaUI5(N6gtgEFagh*X`NR}` zTc0IJ#5(l=;ZBGVOw6pht6oJSad0mXmk439Qp}WRdKMy~Yo!gsgAnccNx{v|OmIhH zS8N{;o`iV)n9oL4DvU!SZi6leFG37C#7}`=REWQ7;puuHya_R|NR(+)5IafJ{me1kZh&J(Rs44qy>LHH0N$WqGIw)odnma_@NL0lz7 zrvf2+CfT?L#mLw!196QIJ%);y%9{0~kT6vp1>!m(Z2JqCad=l;U0o6~281smq_@P( zaIdctig8EIK-?gNvXzik*_^`T6{m8>gYYASOFCbhpp=Mf*Ch)kg1AWtot9GO+}0Sk zYQORn5Vr`?^b|k$cU#nLbR8S~r-AS%M1r4?jR{%05s6HVnIHlPv6Y|czS`6iPaqh4 zVm64|ggEg@$cl4@+(9uO3g&^hLx}HwQnoQ}%3>sz_$>etNQmJBr0mkyzwi@PtY!k@ zE+JZ-ma_OQb8#iQYRg|Bf(YSyUci)2Eq;hv^}TQ@hHm7SZ;`D45lo1M zpVipj;(?n{jKHi_Anp^w(@4U^LrxDsB4Ec_5Fv!fn=EE)d@67itfc1#5TS%9ULayG zKS=P@BGaf%ARZ8+)odZVVX^}c)gQIp3L=aUL)(g(@ntRCFL7VH14K9>o|Q}4fzo~V z(3P9{n1P5O#A^pBs~l_)i$t?tyFo+};tD_O+3@_^3{-pY9UNKtPygy~(MavVd(&lE zynA9#R6%%lC#oJcR(qH{{h91mvLqZybNz>ZkUUwc4Xl>=WQ`nzY7e)!#?;G3YY!nm z6y=+J7j#DTgBa`BdfIsHLC<`G+`D{>F0v(laeuVD$tM%-{SB&hZfb*q8>P3<9T zd$K&D|B0ihdXVqm05@7a;Ip;cZBsIQb+Yg#(nSIPi{=e~@U)kqoB4&k=vKNq<}qA! z6mcu*@ZBQCzFY9pChs|kAfgFjIh!x6d@&Svij&4Afp|!W#VHb&r1=OBA8dw*uBy1Vvy)CM%05v5;wd4PHWRT{`}*Pm z(gP~RAd(2Nai56gY-@sd&^@=R6hty15|c!1Tv(r3s8y1{4Ysh@00$?D^jGE+|It$?ZVo5@IBu%JMGmG2S=rRB{IpZwR5m*VQC>`X!?n z0fRe(cuR5=(nUhh&)1UJ|t$%L}d?*7Rw-OVLQlIlhyp@*Xo#6GwFnmk-GX#L6cXaNkC-h;Z{8fmD4pI9L=hqC zK8xA1wu$SIm|EQ*L@^-(vxUqn$;A_i1(pLrln|l`Kb}vr@X;hBLPQ22N(pg|53jw> zcI<}4-Gf6wyeCA+Ej8vJaidws>gxzVm1h9|>`rf1R5RXpdtYsvHaA6Cvb$gMs@;JGr6j2(%ps zqJj_;0#(@jl4WC&7?WrW;xi#0%#kqB>|?l>@nY~K5MKzPyj;X4bz6^1x>+}-fcQ!X z_v`#@;Z7IuWF&u+=^(xlLMKL*%^Lmb6S@w4&zT^;6C#Z72D&6KGZcxr^X7o4B!pp=V>M4PQ@?D0KoT+)3l-3a3Fz5fo1>kgK%Mbf5K zC^3!853Yf+Pc9lsOmEkC$x=7;+Ktl7J556BVPlD@e1EbmY4=;aD|dC5&_76?EFBqE zBRe=x=!z242ObaVWuuAdn%;_Xhj9zKqvUeX&#-#hcw*ZB=s5X?8jpp@E@~6;N6VW$ zDab+obI6LjC^6mAwt@XkVrnCcmme!Q?1@rKp+*DzyTr6lVH3ldW<5nnpZ}jUZ#XmR zW;ofY2_BnV{XH5k`Ur6=?VX~=v6th7y`iW7ivMwiqup-1&KGHb2 zM{*4kg3YNQjuE0MpQrvRTLY&x>#EW~SQA2PpOo3p^}^#j`G;PDI8KO(CKBe_!Q&Ka z)q-uAAZ!TX$!CyhKbvTQgl*H;AZ!T{c2<>XB~HRGwV=g0AnXW{vYPMMVBW_F#dz7| zEeLx;+~D=OnXNSZktkn~2f~36#|;E*XwN!a#ho2j0K$Xuecg8GpjOSyE(LLt5bgP#vjNQuaL2o~Nf`(yLVQ}F&N8xvy-4k( z?aFm!5Elp$aaPDq3#7O!a>iQ~#6?0>OqZ|@A=X%287>0hPKlm;#l*e!__td8LjvLw zAv6-jZ0&1#3i_@5Y}7$`5aKZ}i``qjs2qtKUt5FlB!meci9hY<;)jI6G7S)3gfO!g zGiTGI=}6dzw+G=(h(rf5E4G-7pTQ%mI)S)Mi0cY`7N_I}F6mCb+XciGLa6Zh#KTg< zaFXJpp$Wo=5Pr*q%;mjB3Azqf-yR^Y65<43wY00pp7BWBoz@G)H9~ajCuWNGns^{# znXe7vIwAZRKcuc=5-uATYxM=;ONhgVB}`Z0s~p7;#_58%K?rj`*XW(maQyZO+CKn< zA0e#l`QcS_hfYH=rgYT@agz|?ChELjG6c`QsI?vp;uay2Zu9+nPE5vyo2^5Jf$%59 z+Rp+Oxa6K5YSkFG5g-BxF|e(a9jnU6^Rf~|auBx(F_UkI(mF(_h+-7q8U^AGAx5qj zu$Lx7l8|^cW-N$6LagS83}tTEvl9uw3k54OF={sqIR|#b3f#J6baU51&ByO zw0R?7Ve+fdC^22G81)NAOu1+zF%2H*ElYa!>>f%?f4N21!^RR*rRzzu#r?cokd!LK z{6X?$$-AIZ7V$C17A2-`?y>c<(ZuxcjhEeB+XGgKX=| z34gS_$+lf>)A3!7#;$|BGvwIgj1&O)~(eIRK|CXbaRy&})8^Mj6yxZeDiCRe z=*p)T#U}T_V_`FWt3f;`MDuvwx!2bZM=`7oeu8*G24doYiq9yR>5AVBgL^gukwJ)!{5pyjrr}YJ%R`kwWD+9X zOu{Or9mA~}zeO2D79pDP|KNs>NqCB%qrVD>SA^IyLBwXcjrf4B+*&RK@tP1$d_TTO z|9zE6q&bQ~WD{cNR57z?vtd$fOtoU=Pf17#NoU*iZLg? z6No%Q*zqJj&m|9cynQ^ofXFAr{DC4i^=Dgc6ywDNO%Mfy7(G?UuJ#Pths2DS9v}({ zVYH4<#vYwshJ^aKULcAH5j{uPon zKZAyr1|Z4^QO%1H*NW4YpcuwlLqU`iVow)7MSS^R_^GwX7!KkiAx3qTvO|0`5ftOb zR2hg*gixF=U_-XaPa@H!*C-GbggD2yh|uohgYVrE(=i}E6T+xgl`YL|hLgtUBN>P< zgedB-&gQK8VT)R&GF5l(Xv?}eh|VVSioxg zG{yI>L)sh=)r4q&SIGKRoM?$!^?l@g5H*B|=4ZF<+hK)^DxP@@LDUjLE|;(i?VGGa zG3Es>2Jw>+`7(YQ@g!qB5K}RGDTq2kY(A&Tek$Jkiel6yE(h_85U0jVm|gX|CrDK5 zt^#p5_`f5jJA>3%zpT_2C^2o)@|xm5eTKh9BZ+CYtGDcX?Xc}Ay}W38y&g7}n3h+i z$gFn__=;rTQr|yFo-CFBRVyoZd?Z7OY5qFDdf8}Vsx?AUK6T9-50qRcdETt2jVGqN z6piJT89ueh=7iq*qvcIDtagyQXHMU3U2KuMJ4K{p#}@#T%IWvzxr_F+V%BjCfI#zV(V+MjR`DAz!bd zS&fzhe{9I;WyI<)lnp&*mV zA$SSO%=jT7%n8xUTaA_4@4;oo9z%wMI7$f15}v9u!J$AL0A!DrJ0BwxHKE*3nKrqAdV4YwUd}#QT~Mc5m%>= z17S^w`)kx$+0ATUbRA_cj6obH#P$)YY>~?joQHNgHwlCdA+EpW1MeRV3{ectHd8^^ z5@OePK7aLg)@~%SwoeCPM~DQ6R%~IhMX?3qhP9ME)!>dm&zi@7+5}i$R zWfa5n^b!zGgy`O%PdVs&;v*6(m6n4zMF@Sq?NFzaV{n1{v*}6@rwP${iI8RWS&Cb= z{>^F-&V-oTS-=v;>gSr^r)9q^Pjamns#k^Rt1H@TE%;S5ucaPn$0>!wZxD&)V zLfl;@WoaW?KSV+?U^j^Kgm^YaosA4s!7B|Owc7{c0wHwE`3~$BL+nwEiPi@|TqH!~ zE+JcSCGsyMrffV6!krKgc8b`N;{B0GocV4J;u0ZRR7ly^9dG&~k+Rwnga;vvP6}Dd zd~H7@rj;B6;Yo-lWg=$zE44KeKF4f8coAZ_BcISw_8nK+f}7fd@Fv7Yz7uf5^Xt!1 z4DB_JATAT)Q>7{!eYxi*B(@kifw)45=yz(&?NnrcB%BLQgYY3lNsX8}#xKO*sJGkC zfVfJCbFM9!)wpt87jQ{)196QIy>>|1qK)s>gCYjj=FID!7zX-yY z5Ht88jyrPu;P1y*nFoj)gqUkBU@o!y@e_64-wT8vA&U9QwE7d&@V7QddIiKyLabE~ zGrjirx}qzem2wrtEkcZN<6oSxze`f^w_7Uv+499UUl9I;h~n!}YWn+}MWVgrCWrt+ z41X?WCQD0lk(jdBAH;1!l#dj#qqa^Lkhs+R4v0I1_KK-Ld z;y%NIT+Lf~ zBMw9;A)00gnY!`PTPTLP^bv>$gve>7%Ip_J;49y0_XI>3A(n0vu)?5xJY}twZW4%a zLI{_svc3L;Z=zP^_@sb{AjHwWQZ~W=_**0fPEP|7Nr(@Ye2P?gYkgFEcs4*o^`8{; zZ_!BYVO&oyndaR~dr$?TbwRs&*jVkMz$-;I(_GMH($O>wJe^+}LGeuxH&Px6l(sB3x7tI@Z-8APEOmA2x-v|L@XgxyroR(XD=}l3%2(M5l0BuZ9*0v_8vcWiMazn z#1kU*rkDwCc;IeZ`~CVL5(uF?T)^&r99)1}wX$k3h)0CD;V5M}@>55V7&2uTh{uGm ze=TC}r{X6gaiMGkh$n>D#uMzmkAv|5spU>Nh(toX_$6WUU$~l}7%s}AK|CeI4tj%{$CwId?3U=EfLGwvLYT`M{6%95M_jj;A!R- zs|0lwlOYE2NrpO z_)3Vx*8=uLS%&*p#Hp>s9R*gx%3gSBlB`u`NM zxIMByNTm7P1yMtYE9Gh|ZI&wT!)c8U22o3hdroTXY+fr|tlJP80^%njGJT`~MvjZ#_%O-d?$I z4ke}qN1KXa?30T|64Q07ykyE}g?1>t?EOly9yXSkt{jyjlXc%&f#lQX&Ho^IvNR&^ zhwQ~R1t*l4uI{B&FB?rvj~r5vj~v~~86}tVXSJxOjVGp-n&ai(KiWJ&Hq~1BkCr#N zSGk>h>}qdEl$e^?G_b!(OwHTp%FT{$n2%D+l+KN42(ft>Sk^7+&h~tD%;v>J;mwj1? z#L@>{K-dsM-(1S9ceKX|_VcK2AZ!V7nvcD-Tw{Yf#g@+9LD&&OX}=1aEf|Tb>YWbv z1Yu8z7&{SbUFOmcU5Ed*ULYI@p}9@UiWfDzjKrD!+8`VWu~wb$zwq|5F%sRz^#O5$ z5avhK*)U;PHzX7X_5*Q}5G7q(v5o8jUNm2%p$Ec=5WWZa!u;l6hN2i_+YbV9iV#1u z#4Kb^U@{VGD-1xKCPcsPV)h`iKkl&ZGaCxRnGjpORoH@oKW?HJR-zFgTnJ&%M8xc8 zKkSV}J7*b)GlY=yv3rw;Wv7t{Q6B}ul@Lw4N!hzRJ^TqD8Zrii8zJ_t7qLB=U7w>E zM#~w9vxL|>QN(&R{favlL(|5CI7f(arb1Sr)AAdN(S6fI5a$UIs3B(2gF6e5m=iS_ z#05eu;WNTh3c~D=*gk$5h>L`1k}hG*dv-j5M1I)}5blJink-<;!!O}AFDIAJ262fH zr5*TNboktXC`Nd@c_2Ipp>$lpyv~<5K|>{HHe%8b{BFM$uolEsLR8O?vg7Rx@VC}nz5&EFLfqqHwbZzA1zsXB0~`gr^RL< z{0MQTPRNw1ikBfFve^aVCLvN|RoI!AUDAlrxNtuRe?mk% z@^xp~>+pSL5_%9s03mj^Y0di1F~Mb+c`J^9xJ`)3{A+N~ZL}k5RZYlI5O)Z1krxU+ z4*%Dd>?7Y>f(Rr;MsL2yTrZ6>6vKX`HHf=}(BVbLFa77>=OgjB4TvB@>>jJmf{Wt9 zP>gP+b|CH%Vz{D|H91&|zk^LTID!Z!#NDfEOhZk@1I2I-KMCSKA+Amk@C^oR2P09U zc^X6rAtbtL?BSN#xKG{Uy9`XgYA|BTMI(u+#Vs#coWRu_rI%g2zShIW64MLkQ)MTn%I_liJnP#Z zBu|#2ZEIwkErOC!V%pWNvR*ctn7-ShAU|kYP=}JsOv#UW+IV6ryk;yvFeUc}vZ4E{ z|7dxW<3HHT-6uT6Bc`nnHn6`*OqJZ@<;>}^KT0hl8{*$3rpX5s40|rGorCneLk&VV zs(HhM*J>Kx(YH=Tx2vPL4lX*1xRqYGOPN(yf82SQIi-pEKetjeAsqMs|EWm5U=+jE zzA1=@ggA0bmF;Xelh;Hcj1orV2Kb!0wMH^q|DZ{4o|;(^-2Wd5g{u1 zxgYZ)3df@BNJ*1`cua`T9RzGy4^v$0e^sOg;t3(1ZxOJ$3qo-H+9A6Yh(tnk4gZF9Z)brVZjbAy)EJe7pOb6`N-6T>4dm4wH0$3X@k3l4zmY=$RNartzyPTe#PCkAD0b4WD+7$ zna^5iegwxDpfMCg79l=l@{^6$wZ&uJgYAZcctwcW?L^GiSWAqqe4?=o#A`yF>Lp<< z%lF425o==zBAXC}x_l3mfPd{5v!KZs5IKaH94%z_SI@M@B-@l%CkTe5W+%R$o6Ya6rk%^HDeBl zLPD%KD`JAxdJGAtr}ID*5#sPyev)?Ef&)m1J}v-JOo+euIV|7$uEb+V>ZeUWln`P) z@8Wh>E64A|(6&oJloH~DznCo^cNHfPQ#ULF@tzQC)74p%I~xkobu1aO62u2WbWN2q zd3DYRBp$t84Wf(?d*|{3lu`UKBrG)7fhZ@$p04U_qtCdBNW?GO0OBJd&hp)n=DZ$1 z2Z`c0n?QUbgvK&8wttbJ8xkuVwt}c2L|if7fk{J*zXq-Hw}bdh2#a8TMsnSrK`6#d zZ8H#G2%*bQPZzwKdk%?NY!`^HgwUI)&YrqV!=<-PJNAJ1Mu@_L{9K&DkMvNCkpcTa zd?&<66(L)uu6Q2_VekPEm4r}TEM?~&DB+YmruShGRfKrGmhU|^d3*qh@#?-gh#!R5 zlqqF5&9zn`F;d48L^UBw`SSEN*{6pi5g&03L=7P%8fq+Xo_szMCNVZ3Y6;Q&s*tTY z+wm(B4`-_*m#5>u_V zDKZ!LTsI_7>c9Pi4NEn&btY5o?(&l#L#zlZH&8;kHH%Z`xnatz;9IjEzCdh?^YTUT=tH#2xM*lNEZu z3P1~j#W_3b5w(nXX_J>S^Tg2QNSQS^`;Foae5KG?-rCr}6)hv)pwvK-%ZP`5dModm zBVK@(11q;^z=-9*{2!h2L1bt;dAT8SXaC@MGaqf~Yj~sGbez9+d$JoY?g;U=*x#4$ zviNhJ26`h6=(rDrIUz(+0UJLiVIC5imkxk9N{F*=e7m0ACvdOXH1-e(3qnYS@x?bO zBHSPHQ8fo)Nr;J7e5UBW0xa6aT7a-3gaJP$>hgo7sUlPKb$fRhX0HO%@V*BOO545F%BNpRXr(!^5_VSDgT1 zO9*2=L*H-xC^upO#?rs+l4un{j zEMSMGx#C`daGNU#M?y3?C}Ov|bjF!d>VvZ&P7vbuBmvuOHS`Ypb@lzugE&cu%7r4< zAtQAz662jNf^Z_lH9l;+E_=@{BrYXf0&$8ENIa6PyCVhY&hyye?2xgl8ZRoSz2b zDj|%P@w+|JuM@hCnAjH}t`Xu(EMN3k^9W}#3fnS3TqlI_ZGPa)wjH5H|>6u}Ym?T6iW2iLlgM5PpQ%?#An}cWzxnqNT|@5H|@CJWI&7 z9P6Wt1YgJs;uazL^9t_m^l|->SU0u^gg+sqvHX12{YChDo)T07B7hLhzlqt%;*$m_ zMmyaPAZ`;v63~*lR{v{qSj5S45O)ZnlOSZXKPBM1Bx*r-bfE1SuPPD4-r(efrQC~%Y~fBwq_)gHzTZ(x5@ zdl(~%lix^ktwq&?W+NKlMym%rCB3esU^w^F(Wgke|4*7Xyt#fi!}X==crd`i(HSl} zinx`&^2aX2IT?4t-u^fPBAO5jH%r;Fj)Fbtb`{v41@Vv&Qh}6ZjPBANiJe_8fQTVP z6<>}}@v_HgB#gJYgNP->P`;P*x8*&$BQYt{14JAl!n+7rv++IfY}9_^yg|eh;**0q zTf55|&t=@`e+5JWAxzAKtfMdk4~o}}z6RnEA%b5?nbZ1#gVA+3$N7SIObDAzVzzVO zb#Ek+7TpB#gbi?)rmBB*ay@n7Nqg-9+Mx?i~6nLrNFjuS2j4Zt?58pkD$T<{ zq!MEFG0ES%pe;b+Zd?S2XM{+~6SJt@m!Bb_U=|G`jSzpuNSU#=bTJYm#>awqP6#8u z)9Dzi?s!;gPI5em7lc^!7cZ(@+J=XWM54zaUJ^oeu7s`Vb!`}GRi;@Yh;%|s5>q-PgUBF+*jU7Bc4=HfVv%Voh)hC!A1Y>7FEn>TqQlEH5Ltvs9Iws}>~ar9 zqH6d{5U&Vv>#Q=n=yM1UcUs3~fOt&^mp)>)HRL8PCp|p!3Pd&`!udk*(>GG^bDki~ z0g*$9;5||{)VV937wr}Q21G6)+O8C_@^P8_(Upfr=Ye=bh$&m7Y-8X$oC3NHCxAVkVK32Xb;oFz!CUDgal86kRfm9WeC=J-uL zBu@!MIU%m_vz|k4PQnA$UoBgL_(+JL2YiRJAIk=yRz>OyKzt&^=a~Z5Cu)@`60NR? zKvWQ--y8wkFfSW-?t3kig7{2`UQYz9#&`lQKqdRBgZM&-U+u;0P*mp()T&8lZ9se_ zgqpvIC6xDYMM80XI}qOpaW7Jp-5a|W-&YAG9YB01M8_U{*Zq6#aM5x1j?N$|38Bd+ z>*;&z&qA#d*K`F@MTn)h)tOFU9!>!Zo^}WEgAk_5BDU*oFiy!Oi?l#g6GGft$kwh6 zuSKoek=PqV4I##Mm$H7A-|>GiXG9+mwS+JU5VOgnuYE=_oZs{V@skkV1|nv7(i6W+ zo-Ee`QAdcfGBKN!s`U`X*#BuDh+l-L9-+oseJ)W#qF}B8h{K`(9Td-J{A=Ldy*o-w zPmbEH31gpJG?JKJ3BMv+7%6Oz(o4lfd+K3hiRmrPG@1EZgC0nl#_j!s5P)g1-A~=)5a6i3)hY1F$YRcBWo0Q@Q;=^`F4<< zysJ{z%P285j&ERplbBw(9VHjs4^u{|Wl2N)yTr8j>^gZ!cJfE0cPBIm-Kgdb-%-`o z@brBpoCvMYJpvbfgt(QOjTf@m<2%*R&DU{&1qgFOXj+QduifWx%F*Jc6^NsR2r5%$ zJI3_K)txt5$3a*S!k#ZjxT~#+AMMk3Z9!NP!uE!UX?>|GMc3io%mIWIAq0;_Y{e#{ zE=WwdbOOXNLfE>C+4X6rZIKw&{1galLVSqlhdzxOb`%L~Z)Xt42@$}T`2Lb#OGRS3 zzAFeDLO9Ogvxy$|#vO~iYiB{&5+eM%kTEr5e-tA@d;x?VAzF@>GFj0FO(ZUDbq8Tj zi11q?7JA}j1QO-jvR*!zHui+Sm zVr(520OB+u`VUiMi#s=QL&72C4hUyL6ga7~SF>yJtcB4XgFv_t;u0Uh)@ax66^e1~ zS}=$+goqpVI~0T~A<8dF*y~~=oI1^n4g=vvh+m_GZ1Q364X9N)>mos% zCB$_BUm9z%;Up3V0;55kBg7d)5v%1bL*l$%EQs@jNUWB!cAK06kZ=f&2XTQAQ78El z#`s@2iBIhR7{o=+n_F#(7AS7N+ z%mm?0h`Cj2Z1k9wc;-+_@+%OR3Gw};kexB~HbXIXjmrUXg%BAsHCEB1|9B)^TfGJ0 zLx{u15_Z&aax4-PF64o@N{Fwf`~>RlwIU>b4k`q3jS#IKsx#fKD|;Yef3_IJbwarJ zP-8c~Pwa|B$*lJvdgl6zIV`-ceAJkahni}o2au+{@-yKe|~Nqh&zPP3F2!-0=v&cF=S5_ zy8n|71QH@7M96gPl5x7MFsB)ayM&lj#djjq>xqlmy8@L!1QBAsf{5LJHeLy}N~Ld0 z5cdc%xUHBiyQ6aviKoG;Ac6_8ikEuqRWINtiVYWmxKD@*eKDI;q>1N#^-Pq22qA>x z7$MW@J_65+mUmDG5lRS`AAG^C^fVs99&6tk!~;T%?8P^ziTLmqU3r2;14I}h-tCvL zX1S_4NF<+V4-nLpkkB062}A@TqIsEeg}xN`sV4??0TD@v^~HRjuET5s zN=zrYuh4=KQ!W}wOh-?+A}jM&n1#~I*J`WkVPlD@k9wM{PVJKel5GdC{)6Pn(%guj zvd)7BzeS0u>ytJ0veCr!=6yx^t5xg2qU7@SfOYk>@x=6--UPYxDqD4A4^CMBN6VXh zQPEMZ@_Fnul$dUv*uefKF%67)DIYWHjx9;w@@h$D&oWZE_^IBA@?WjBa8LbyIs zV~37)I*(%br0oR}PY4qm2`g1z{TPW=8V5im5Te}y5o=+w8F#`Qk`94*M2P3dRoMQ{ zH&>t-eS4ULcua^3T}5n^(=!hwns2uN@q`dTu|oEu=q|4Hcj$2pL?R)~!udAJ8#mOU z7^>!y@-G%#{ zK%@|&_W<6FzU&)_V(9jA29Zh#l|BMi@wFOPCewDE0r89w2R};L`<|0<>a=x*8;CSQ zw2N!StZLVQi?eL>3{82C1`6k5q8i@bzv#5U&WK#Fr`u_PAb+uKbF&KZw_akZ%+)#g}_= zRb9E`Z4lXna5y7oX8pDB7^_>iKoB{E(7dkBg7kmjv;*?srmQQ2YN zfTI)7-FGAmoFYKv z5u(4XkPQsZ!{v*~zoJ0o6GEYhlr<|**ok5^9~lFpfDoAh0+!io15U}`ZI1&{NC??S z32VQ1P6rg@U19==B0|(930V2$8|6rBYyAX7F(I_~^376b>fS{n+vO>U5<=uw2-xfu z?=_GZq@4nyln{H`NSRSVbsQ3he4c@LPl%pEDHFWyj^|RmI`{&_2SQx9DrR*@Qt_KQ zsWu%%86jlth0JgEC;XhN-Od70PKd}yBKC1=I!@0rm9jy6Bt#uQCGCc-2tOZ!g#|+x73dyDhaWN@6gQAG$VJvDZH$4+M?%AbA(@q-XHeB+7%7uMnX zYHzzr5Y>c`qzhTwlg{H&4AGV!AZiHFOhv*vE!*vjM51ynh+0C#Z4k2)^H$>?a^ZzZ@hw}lY#{=<|r%zJ^@rw{vmjrBq$534q!`!zy zh{F&5J7PL}pqMr3cXS;}Ok01E>%fR97mXyQ&bB_X1EMpID82llJgOcxmY9YmrO7U| zRCGmhd&kj#kUUuucdnDw^qYJMC8oWnj;WW8CZ;b873EfC?!_p%EOQ-OPa986*NBYe znnPOeL3YbMqd!{S(?UjVoqRnZ)QM`c{T58I_2^>SvGUBOQ8YprZv2BNU@~_3Feb92?f`*J< zM(of@Y*=NWc@H_WtqsBvjyE$oxu2nj_yO)`e}DcGF762Nwiu!+U|WNBUPJE}!HWzK z=7fkGCuIR!GVGB!JmnRLqlB2*ou7~X;t>9(INizyVL=GTxdLY1dm`>TI=#sSVM&M& z7bR@@>Cqz8s+&LFg0LdQG(Pmz@9B(BNGSBp2XTxLSv~oginACl?YI112*R2WeHW|o z<1xygqZqcuB_NIyV&xLPxk%DIoPk>%_yEF&5LZ;CY^!c3-1|RTRSv?I5I5_jOuT3k zp4}DFqXL8-A$<5Gg^XT(rlRXOSn?T!Jt4X+<->%FQgl|YJf0$EUYW)CT{6nCB?wnS zRP!0gQA0BEWQ(>xRYABBqEIAa>+J@#L9JSSMg-z4Ay)B;5Kr$r3_xPrY$=Fygb3z! zn$X9uYmk@~s1D*hAxxu$EWzAQ9SPZpHXtq#Vk$p!ZrIVEW0435(ExFg5D&EZ!s97V zry(({TL%#CgwW)5gm5?_WUDeP@SDM0+!cfeAw>E@*1IO+HEPw? zOid7;g!sgdS6Wo7yBLX@r9DA-5u!z!8mr1*SB8Yij@}@=2@$8I#(*bdr z5It8&nO*O8_&@m2r5}hZgxJZm%ELdsdZ8GTO8SHFA%vc@l;yn-wLs$fh=Cxk65_pp zZ_;?s0RL83z4Sp`BgE{>s%*peD|jomO$I|iTqne*k3#nF#%ugUwY@Y9gfAhsj1{xv z55Kyj>$oT$3E~DJOf&hC(t&TwkqGyagYYB7Kp*}+Kh-f3i3xgjl|me`{x&jzU6l$y5+`2oe5W%oc6YX@$fIr|BR939aX@#ELl}f(Y@B?<8O0^5q8-)(_`_xJQWId--N1Eq2dG;^l^gAc6^D z;UZ;Siuz1I!Y0=Q#C<|sbrP^y;(yJzk6F6}LeTV%}49~D-AVLX|!`}>T z^PF+-)%f&E5Dy4ZdP~YWdzU1k7)uAN0TD)sI)03rzuPh#V_V`n5aEPa$G@C=BObm( zF)EL31Q9`q=;=ac^wFmV%6Xi|pa*a^!K`Z~!A1!b4@Blmcf|nbvquRsSf(G_CwTH}v zck+X-kDj3F!MMT(_;){ObH+Ra@sJQ521?lH@)|tTXZ*$IAYusdgwJvo zbTq2_lvdH*2J9_b2udiP^GD5OIV!uO?xxZSU$KG12`Mh!DqbX)c zm~_bjkwA#v=>k?dYGOwuYR%t(cti=l^Mp}W$W$agro033m=N=ARM-LOnmi<$Rpx_u zLWptq1*{-!RuvMVt&2b;65^493TxM87oG@VYElB?DIwnTBWk>gs&Im>I{ZC|Btpzz zE@cTjm2fG!XmS~dWI~MTE@9`yCb!Xb2(&(eNFjvpE;SZW#Y#4|!{Tq|N7W9#rtYSXsgK%@~OkPm%5`R?%<#W1M*4&pf>GzN)SrCLS- z60)o+5HASvQ(KiC?Xxl&iJrY{K)fV`C*PUnl{5^0mI9N1f=DOCU-QK5nCAh!F#nUR z$-sX;OBsat(Si>@TTI`FTIG_}6htN=e)8ks6r@V{862>*IfyJmT&?B1)$bp?62+)( zp$y^`A-0C_J&=>4@m$8^$toaT6QW8_%q&lL*oI>4-ysB%O^C%e`02M3J#Qj0Jw*&6 zhY($lN!j35W%vzuUsnx8E+K|w37B!GkVF(CHLw+kH-rcsC1O)l-_J#2>6*46-V(xM z6+d}%=<4N2G=J6(#5+Q?8!TdK?+#5vqL_6Akw=KvifYVyS6&zr%`SBYkxvMxwnEl) zVWkZcso%STC?JFu-?(DG+Tj2sJkNCpQAmh$eBbNJr`GsQ-Q#;t5JiMA`5tl)_vQx{zzPUIs`;H zAzb(qWqPYCem-i34F~a&5bZOCOtn+BHj0sUaU_UOgs?6ZGnxMGpGa&J8G@)FgkC2h zYyR%`K_rF-jt23W5S`qlY`I=4PBU$H7=idgh_;au=3H?fmnn<$$AS1ti0%A5jwxCl zf>Em;&zJz>8zI6s@yRa}BQ7EFGF(gi{TMXhSA&jd;?6dU1StNG&F9A_U zh=h&;*5$84-0R!be>sR>gy_Fc%r?4>*@a>lu3rh_aM*tb#p4%B*vRRQJ5geqyYij^ zjD2#^NMd?K%SX0Pwd@{BFGsrt*TcpV)7ZYxWJ_LD7a$qkDdZ25CrgTDHL|S%Uf)n+ z`sR6Py=*iwHJH&%e(Z8oDoQSYEDx)vjVGoHa>vOh?AyEzSjm zqr~)7Q3Ly%#MHh`j(pys&?6|d99P@`|1L4L4ig&AH+WKv^ymLc^M<$jtDm9Im&HfW ztyD2H8ZP<>aVxEG7O;NJV(=)S$=VnY=7exl;KyT}wmptw_|Av}ag-3N4f)2)8<*o( zZTbEL5Eg{c?kQ#lA8+E6qoc!P5SD~cyvZxYs>^1eRuvpf1Yt#pz5!CEda{QS5_NV- zAdV4Y_+kNb8z#gHeAcZ`0bxyu8T`PR_#v_Qg=0148HnSAP~)lWG==WCGTCF@a}YL! zSlEHrGS~aOLf4V9{3QrmLd@FF&u2B5k&VO%p9~Oogm5t8=j*BVNk`&*dKL(KLadAw zFb@Zx2qbjEvq3lzqU$xD2=$6LL_&Vx4G2dW-`0OBMeUN#Xk=S`5O85CerO%zj@q?ywd|mx4G&h;>T^Eb8u{?I^}J zy)qD|2{CuQm^Cf_ggcYJu73pKOo%*h3DdbVUIWF5sHp(qLWtq~*cF}ZVEjZ0)_(pG9)Tt7hA5h9PDuJ`%i z?$1cHK3omr8X?Yy@Kd*1|JQ1}Gf6cdt`lOZvxwc&--u^r?MMFxaf1+__~y;>b(w=v ztF#lFjrh;!)t(R@yr`1D!WXaTt6A3q#7#o9))cV^}LENT9Un!H+7U18e27>S*ME`q2)_n4a6!d@9 zUS}`}UqZAt;rGl2^c;gkjL%RI_XuGyQNm0z#^TjU1KN)Oai0*gV#Q2z%NqQ}Ie0)1 zgdZWQHuJl;NA31Sts0SL0OA25cJK|h=|{9NIXUfp|!W$`XF)ic-}k6l2Kai6DXq5q?g< zO1@O$(b9e$6A;0K=vFFV(z#0(qZra>Q$U0e;x@mBd2Yt3eMo3doets=A=a$q*M=mP zE=Qu<)0rSb3Gumylzlv2vkr+-vN<3g6JqL9HMYOqm0?H>_m~Ib2_fA3idoUeX*f4< zs+|uaj1WIRirK1x&rMK_2X>1b4MH7kX^)hE!Ld-wY zPm6#fjO_F{8WQ|Y8y3*V8FOnxqzGv%XHamCBM2V@5vsZ&`GBFjTD9CkM zWXe!-`8~$Ffi|6(E;~L^uB!9g3E3ApK7X~m$*Zqf$qoCBTY?hP+>edy9}?5FmRa)M z8MCLN)bdbnBmAet)O(h|=%?fG6r@FY|BL1gUsb4MG(q_-9!4jR_JdA8B_5@A`y^~h z`BI#u$Vd5uh#hPv?B(i!2fruo8{}nOQwY`96 zGp%$(KtvJZ`z?O|WXur!v$OyC2t+g?g2pK`)ou|NQLAR>J_Zp(2*Cp>^V{5~1rk56 zhJkoah&z0t+p^_D?2u5s_!LAeAwC)j*(=XCX-Ft+cm^Vl5a-PK-y`HU{`Bn+jso$5 z5C^Tr%=S_}?s?dP=OE$jKBnQMBLfo6I!X96JDTpozGgm}o8(?5JM<~b5$WAZ_y z5uz_Yrz_%_J|0pnaw!7wju6Z8`4aKnz45#VYh4T?oe(-Fglzep3j8kl9sU(W1|cl? zJzn2_NO8~mOUppKCqzJjnAs2Zvp_v>r&|u<10mx04b*p+I+`P~ZD%EjOhRmUd zu&MeD;v*q0JQK3u?3Dvhj10Ht2LBnnMc5iN~{hf+!=z=tME=b$!Tm zBpmMa2JxK`BX|i>v%L;3E$qwc1EQP|yO;5qtsP}}20KBn#o)r2tM<101o^0BBNyDsU0_(cds7Zo->Y%LyB&+k17L=7Q+ z@H?wp-r9&4&6=CZK-3cAdKW2+Ej+Lkwd&#vBM^0j=>J=l-SqUqrJkJ5V?q2T#Ibk@ zo3^^uO%$W|zVRUH3GwkC5exh0Z444ynok5_{^Z{?rZdt-OyTj#6DTpYk~zy@#*~XD z64TQuPO`Kg`yQdh^xzhk2G~?$T9cX}^G}#ni)5P$*S|=fEXilp$o6_X)<=oy+Y#;! zvdP4>LwR%gBG=vbQF6H^!lQvUotWm#ogmK%x@?E+H%+gh^3bF?8i#&b{uqP7ulc1e?c%vn*5R9cbl9~5t3u38Vd zQ!BS#XdCh6FO3wrjkv|HO!>48aeL8r;5)^Q7_l9gA7s|fKx9;)Z2B0vTP1&XyqP^} z1{e*UDaK{Rr7MO*=Z+F@3#%_8wq{l{TuJyq5+8GgfMuZ z%D$*v!>tP$MG{CkgS8zxC#iT!hPtUxLSgI7JAVmXL)z z)kLEh`zDSDaheder-f{IUcf*kcHf==!h#S_j_|F@lO(H=@N6{+#2G@E3shNpr|Gwm zsJ=QG#92aE@eDle@)tZ|Ez+I_;v69~a(F+kB;yg(%O^8HoF~Ni;ZkO@*$c1YwCXz> zge4(@cJr;V=MUhKhtA8nAgl;+Xgwc!oL+}Vv{C)%gSbG54cCM$K{D7H{a;OUTL|JJ zA+GXCjps_1Taj2aVF?IpLOk&lu*~NV@kH;1r^`TGB1G6~0b4mqVIhj)RZT5n&Cxmww6*jP-4DXnT zezG6LO+uLP3$mJjezgs?YW=N4AZ`(&_L&O1RAKWQiG6D3AZ`=FOjXPZwy1waVv*%B z5DtW>{i4E(HZORIL`<8LARGyimZ!!%@9W@csiDVDgSbNo&8Y&WqP@=n#kl|N42Zjg zFb$Woe#4jGCoyd8c@R#77{)W#@N>)YbZ4xy6$ocS7`&IT_QR&&mF@dhT7z&Q#CN_J z>AN5@7WHFQmJJA3LMZa9^X4dw!S52^`By-=5n?J|#hL1{5LZ`Kv+Y2*6JqOJRpubH z#nb4sm)-#3L5SsJ1k7~o&x@!Z^L%fD@FavO|J9B-YxoR_$=w}5coAakeK8Akw{S#4 zlz9h)Hz5K~DzVU16O!9hY+jFg{;jEEj*dbGF(CU62ebM%DTVqkL$|zt2{v5 zBgB%sA~v{>J^rf2-1h=;pAfT_idgmRd3d=@Zw+4%euRi9Qez&beQ~`hD(pUp2ZR`S zQ^YKzdTOBm-5qj&5dMUC8!Tksqm;fNQP=$;hyX%7TA<1{9R9BZExX?e1`$YzHvCvF z-K(Z}T#~L83gRIle&|Zr{euR$O6>IT35Xy_zXk{A(r!du|++t&5&3uj|TCG5L#vYpah36FOaazcn%_z5Pp}WY|86(>PXae zc>&@vA#VDJ*faz4JxJUvehK0UArA1Rkgtt;EkYvGBmqPiA@Y($Onuen%}9LoN&*p1 zh>Rd1^U{y$jcO07g%Spn;#@RQd#Lw!k}ddkZUL$w1T<4^fKAmNX67fz%>K#OKytc< z+FvA3mIj@vk+uHm(i+tsg0e-pgQT^c2PK^fIbnSt4nkb(VuUUz# z+Aqz&THa*+Bun|BzVBb4+Cx}PBm0NiL($<6a__mZ)u?(9Q`-nPSv}w>>Gues(cnAx z9wU9P?tjs|;ZErTjE;PE#UHXytw%topAwJKSQQZq(9ps~!kArpAR-9SZGw=NCxpc)5nHC((G-cr-zR~H zCB%GF0lV63Ya|k3ho*ptBZMGFnK|xXg9`;_J?4XWK?oxiF=KwII3@3Va2berLTIJ% z%Xt*0;Nj=Ob*3O*5~3YHRp`e@E&K_8=eZWdD?)tfDqx5GOh~U#A`wX1*tH< z2SPkFysowhL;@kY^ShpvIzGq4gzOhvKqL|(mG2vHThtp5cMgo$4kC#VzYE2zb=PRz zsuG)>Ad(4DHCn=6*=lq{J>S-C4~P^(guYW_*-_*0^jdMkJ`kydFloa-WI65^P>j(> z4uW_?h@+ljcD+X={tZ4GaRkI$La4TvuqPGG@IY_!+oK@T2(kAh-|iW$9*A01IN}6| zcZ8_1;S)eTKH4Y%rrOdK@Jn)1=%_0jB8HBJ&<#$8cZdid@70~`1i1&n8 zE>>YW>y9lzB1dKg;sYT%UzM^W7x$e*V&;#FATkLN$*cq1Ku4KxcPL6i|Is==suKR5 zZ`zUzqK*)+_(`2zj-A_xVgyU_LHs6!;#VOn%N~ipYH!>MLDUn%*p1&CpT8O}gg9&Z z1%!FnzbD1h`R(bhDebFKVmh<+ut_lY$wd>1>7nDUvMFnex1jXWt>^Ft*i>R#G&WWC zey`y^Bz3Gu{6+F)$+u%Od9TX1i&0{_-Fsw%Y%(!@9Ht=ea%j*+lw9t5uGc`DPE3zn znIsqAb?SiZ*IfO-THa*4wHM?c*SM#l#8mN9Bm0NMwA<4!a!r4UHcBm>8{X+rVKU;TNCgGJ+6<{N)`l{jAX-juB!F zKW*fk*Qy^#ge)Bg;y59q`I$5}BR360B0rjeI6;Wob0XF^qva_i#*Q)uagq>Q>qYE7 z8(E0Nom3MLrwCz^BxHGp9q>p0(fFw#P7|U&Ow8t6uL(mjK6*?CVL^y+Qx!hHV^W30 z_a3uAoFT;GF8uE?epoURs}9Zqah4Es6;)YEzutJ3!!2bVh;xK+GErkg4!s|WVl11s z0K|DhxYhES?AISSF})PG2!tgeN=#MR>l26SP>gRQmx8b&gkgk~+3a=bhs4*QpDOMmH2{DQfysMR7_CztxFR=!3 zhY&}-#jIxegFZ;?&9MP-mk@z#B`m*cE+mr8Lb@FYXF}-l zEsQfBUeQFYIyLL6F;6?!Cj8T zR9g=aUW5qbNu${U37*qyQQ-x`n-Dk7DKXQNUWq71%tl`jK7_bjBw{wgN%(tywxb^i zUqZCkma<*huDGa@aLpgYJwoUS`Ra?|&2SO8->ioq?h|5pkbo_-AE%4@;gB8-!jBN; z{FFd(jo&6Dj%)}8@qiHe8$@hePBZ-MD)tWp;ZKO)wfx*ozd=7yj6q3HK?D$De~o~3 zpV_Q85=(YQf(Rr;T!oMg3^3k-#9>Jch=+u@$d6XoQQb!!iBq>@K?D)P=>y+=)v48P zB%Hg%g9s*sLrXq=7a2Ji3AMAYK!gzDk{Lg;qvQl$<=nYhB8W$XsI^gLYqeJ6FHYL2 zWDuc*nD$(SN!lI6BbfmusURK`qS#N&%*vh}NByW?n+Db4^2}EMffe#?U36aLvGqqWyj?cGpj_WrSW=y$gA~9Vs-$mx`k~0vcmo6`K z8emh2smi+~S-_`3+DJy78t@m%lch^j>tyfKA||24)Sz-;gKRP}{Scub|KM^;10|QY z%yk=R(~0TgfQj~xH1t435F&EBgzd23J_dWV z9?3vN5ked%WdYgC@kS-(5F-%LglM@*nFTDIVvJg4Wzaep4 zW=a`~k+^;lh}VSJaYe}1UT)D5i4KNKK_n33)FmN%x#AnHEnj|X3L=pZu6knDt@+ep zD8|H}Yd|CsqD!@y>AWh-K;o|PIuOZ(Xs^JJyEVx>jD)BC1`sKP_%@Q)$diU0LE_kt zO(0SUVX$3=wa!^H4~cm7tsve|LPw4HRohHPqK)%*5N`=#W+q_m9aiGMheWswL>eJF zrStiORTleEj2eSIAl?z;dx(_X4x5EP;o~g!fk-FBojiUMg2w5sD8~EZ10XU8F~W}@ z!h7!JVkAWK4}*A5h~ibM>|W{b0wm@{n}hg3hy(n7pEHVzxHu$Ta2!M?A$lBCWB0Yi z_{}i>!$}ZXgxIejVN(>R;NN+$jRlBoLd5a^s|B-`c%go@%{vPshY&4?2$_53@8(D( zU9kl5kr0WC`7dgx06)7bh8IEP62k4Xn9siWrl1(>m25!d5n`l|fH}W?f}bn(i5g{gwRAqaXZHz;$deO!a#AiZ0oG50;->Ts6$E=NaL3|-ZaiN%P zTlEz8oCP_9C?>?wFH)9X=;w-B^-nK15G8~dtSw?2)|9V6;?5xt5MK$Qz~{nl?KZxS zgkHKgh;M|L(NV(sm*wD93-zt;fhZ-!@PiU|t*H9HaeyihlQ#51hyjeOEW=y$gA~78m=Ok;V zJZK?GFCQnVHo&G5)2%F7X1^`>Ad+9ds{KXsWJzmsoor^ivL7fhb(^ozAe&4~=NdMb z53`&efRf8?&omoo(}`)ygh}$CL)O{I+D&NpSIe7Rw9rbv=i;{gC@~#i+{peRG5u2f zQeJ)SMte{Un!c)3Jo9_?*}%#29eCJk>|c$9@q`EDWjQaLvTBvs||?SM!ZqT zBTjnPNRiu!i|-}MTlZ5~iM9jpO>e~LZNz)`w=vrGHgFnpqKrQ~-ps6%eT@Wr+TazI zQhj^q+)?6f;j>=CG$scuMQpNE2oProQOqZ2`YQCwMg4GD8VlkqAu1yT z%u-nO8;OZ8<3XGwM16k&6K7VmL89)#D-h=i;l*PN8lrE5gl%*J2unib>xf{i7;O)xg1A74O>si@&-M3xk;pib2I3+i4EREb3C^!^q5kW~ zbP(2r7{^y2XL{bi8Q-tfSs*SEqUey6rIon%Laq9!^bv#&A&yNIvujT+@QS{|gaQz@ zgc!9?#Cq4R!;|6@u6zb@nGo9if|DWo-Az!dzJ-;5xI&2c-+2wCLkb@K7i=g6ag`7w zen?s0O=m4p3{#bI5O##v$v41dtsjji7BkLQg1APAlw1KDJ16iMis9L>3dD6nB&qP# z!Iz8hlQ?)vEr=V0*fCMcif#;AhGJOVsRve}$l|VQUVg$e0{QaKS z_|0&9xd4PCA-r_?jjr!%icpLj!^9x&5W>TPZ{=Tp6z5iloTMP`5@O?iF^gE~ju)n! z@1+jHi4e_}NtmE(KU^igZK(;unGj`sE&P>piFmPvW{>tDTnI5>a9d`&ZHNcz`QE&a zAY2Jymmp?^Y%tE0WW&0Ea3e(K9e&fiVN`PzqnUd*5blJC{w!o!B`WQZs9W0;ga;wE z@8y@;ygY*^7NawJgYYCoo&i4sv+Uj%6eE5>Ul3k|SY9k4wX)xPTN01!Te7&ceRmet(Fe~%Ln2Z8VBB(WC&bi_VrJ4sfZta=oJNB1BZPgn3LDgJTz}N6%83Rb9uT6IAK&^)aS$Gt z^iDGb;ZKMJel^(fuDU%@j0?w%Km-uNsFjGdi9387iNKsOAOZ<7CyZ}G4V#>W#D1Oe zARZDT`hhZ2o_~Bc62rnLfCwUlX$KXyr*mQ^7M&-72qwf}KKqa#7J}<$K?ajSgb+fD zFX_}1P7Fw z+Qaov&hueXoQo!E4{4{IWtCnQS*U^#t?b$Wo2orX!d}bf*bOj5GRwm4FOnxqrbBCF zRj*?WQSG6=pGSjivi9I}UqP;x^n4YnAAAq?Y@kio9&FopdrCBl5$zHP;u#_4 z^TXrE|Egq2*r^4Bh$O^}0wJ5CT8I<6XrD(Qq6pECZwYEU{ScmTs2%(SL^L7Jc2{T8 zN13=>tsfK)B8Cvli=<3#v8N{L2Qz*K;yEEc?vXN0)m3;Bc1%DNh*&~Y@f&u_6V^RI zF{EvtgNP%$mfZC`#w!)M0uY0!JqZkeg zUW0f^2sgPpyC1G;h{U}gi6CAPBBxfuN^h*dDd0`J6cDcov17cHowhxchGL}8c?%+e z5Nr9`Ikyhy)R0IKr-Mi&MCXT6CZDnjFX-6)=sk!eLMXKoGW8{waVhz#Q5J|~Le$RS zS0%hFH9)NrJkJ4eI?-wWCAyF+@T7+Eo2LA)bGxs@ujUUzpg z5}SLMfk-DrUsDll^=k}Xf&B4kIfx8G^co~!OP(dRMlp=*DnYy_gyLak_T6>yE+oe9 zs{-+X5MFQj&W|2m`0rt!@e4#IA$+y?d1DR^J5h`*-8v9igveblV2_lw@K7Y^YCVW- zLIkL*vM~QIHYkQ!FNFpF8Cc{H;?yv{yJSNe9>|gVP$FuWBF)39&s?jm`D7$4Sbzt(qW;2+_Ax%yv63 zd4*c_vbG(F&xBavE@DrOmEDk-y|yEWFNCFP*q(I0QrmAW|O{+H_*t%fMKk zG^|-mWIY!>`K#qkHri|{cNyr>1|_D8mNc?|NK9wsX2{!om}Z4i%XLc|;Xfs&yN{?C znd=;oBE4_f|Dt)r7sYBDjbUH#Pr}4F0y=$^c$Drh5izfht#6`-uf``5#4$pQxFKe1 z&h^1b;|k3f5XTAe<&_4L>^)G7V(1jV0C9p49>o$iDK_f^5?@STfjCKsh`j<)t*hr~r|br6n(n9)kio*wbR!|3)knjr2FVuX@_ z&C|b*SM@l|Zx7-wA)K=%%x{RL6>61fRYwp`gqY^a-zCm^czwXaja@)E6T*hq`d`{@ zTZv-iJ?{p>g%DPKg=}c{xGE%c{Ck3MC4}+-F*|nZzpi$%8>0onjSx5aF#2=M2mJP# znbjABJ0ZHZkTB(N^CZ-&eQR_;co1UvFMbgAY;Tm*-Y z5MG3+9iYzKm{|sDmA3X!5Z;6^<7;Fq4j(*&gx2@rAbbe%UR%PZzR8P4V#oqL5Wa-? zhhONYx$P>R`5m5a0OB4YN>@vng6r$wIBKd|2TiL@V z1c_zJlRyL#q6#N64C1OKs+MEfJ}ZE!;c4eXVjH|`5;0G zF?xXt>(g8hPZbQ+Tm<4VAyW9A?&+It<58<#yDtIpgb?j`*?8H`OSqUl%5*u1FhZ;! z#eY$U4Dc^%jbtT=a7yq)3=&Td7Nf-U*5xb9VaAk;CK6NK8+T>$4L1cSy$lV#+5nqM zOm}!B%2rR^j#Jvc#tCNi^dAbPAn3|2e-XNPyOgDu#moJ>R%MvA*8)n~V zpiL*H7R@Hf+vnvK5k_HkeKR~=Ew*Bj7mnSWkqBB zr^K{%rqC!kYJdsSXP-0*-K6FXzwklF$Uxpkh#psmg$~f^r^KUVF_sVXw3=%mF-Y+) zhzLRi+Y4Eh_Idn~>2uT>#4|#iZ>!3@ht5(%F}DA31rbSzP5kD~ofmrIr6#9Gdw_@{ z#6$xD6UBGJ^Hf1mULc|gF^%7~wxVe164a`bLw!NS5F#vI%-(M`X@^91*nJSs2@%?z ze_mZT;riU&WBwpw31Q2Z@(vpoi$5}+8G#_;2;sC>%BI$i!xg>Q^T8lq5MoRn-_-Sc z`b^XhrI<$`;t3IAD`d&s^7;b5DA1>&+pMZY~0@o#mJFA2a!k!ReK3jFH^zg3rSWS zh$KQp?h>;Ba+TvKM%eV1Ad(3&+(5*x&3CCl;(GXN5GjNR*A%ce_FcqCwAV-ikxGag zzm=K1?36MRZ!A(kydgwOetTh0VY?kj#8|!o@s zj~kW?;yod9m4)nc$~s(58ap%}#0Nr*6bYF7#`1fpRmYqQL1YplJ41!N)yN!%#N;kt zKx7f3YzDudb>)M;NNl=R0wS9b$L5RKuKAsfk$5641(8FDt=Gg%_WcW^%9mGdM z=-7!^>lf>B3V6h<5=1T`UKgvf{L17w)T$C;6^J}Sblfdr^&Q>PkvKl<7l==Un8=4z zH~PBbw@+)US`hh!c;1I!S>Q3$4aI2HzaB&ZA%f3~SV@;e84_j7ny>iJu&s~~*8DqY zEn`!V(7xINL=hpr%K52{-fd1H;ga79#Aiax<3sgB`+BD#5i&~=#1}$rJ|JP$<(=?c zafg%2Ac_g0+F8sxss-ku7~b^)5G8~Vw-&R*ZrwK`ac!6w#8*O?>+*C!Ck&U^UwKMF zd?UoY8&WpWyGDRw%o(c=qLdKB_;zUjg?DR_m>H)DqKptd+DOz?mYt-5{+igC_c3q%zmwnnM4Tj^D= zk?131yM(c>VqomiPhQts8u3|;UIn!V*Lg_E4%mneI&M)js#Ip zh=ZS1S&ufe&m(cAs{sh}h=0$Rnzxs-+B$&(N=)^t7q5aDQ!biFOx<3&$`Z8_geWoX zyJ2YqY$`GJ%1e?-cC-jWazf#p&_rVX^|#Pqhcu{?8UaXVzE*{uAl>>m=-RF)-Ie7?Lb zN-aM$#!aS{d>e7j8lh30MtBO+n=UsB-K6FXUvE6XsGY6zI<$>A$3A)O|2-K0+D3eA z=0MqkHiLShEy44ir!Cd<$+?26Q!!t_5V-oWpByUEu*JTwVyBfebJ zNRiu!&AaBx4^ND6L)(GJd~U?(ZN%4W#73tz)4L&8{TIiZd8O+hqlj&@PN28N$}ySH zxue9}LXU5aJ$pU^mq*_eXM;FKh>7MxwxAO$L^0NF&joRu5FMTf*>op0XC&tL$p>+Q z5YzcrsFS86uAu~7Ed+6r5IzqiOw-}5Hi{vs{|w?3A@uqBBf~Q;_+8w~sszMoLfqn; zH~08tg5US!qANh0C4}UVh|ONI z182u^=08E4BZL*tj=MipQ$+t)Dle)*oF_#0GQP&iLKUy{v1nHd!jceul=#V-v)%nr zjG?x_L0A!DH(zsB{ATqwBtqLXH~Y`)=>j3%EEluV&KGbNW4ojUh>L^>F_N+{pN+dv z4710rKv)xEPL71_icrP{ZpGe;ATANYDOJQ?dbG#6Zt-bl5H^J9vOvuKS@{50!T5ez z5VnNq#8-rWEvvhT`q9il4B|2&EEWsdy7~3^%}^gC1#yKCDg&g<>(^1dz~=Y?br4qx zagZOr(@$j<9{s!JXo9dKgt&mO0X#JH4eE#giuNF`5n?5O+PB+3!#$5Z*$KpTLf9@B zvDHxywkXEx?p;CLAcVOiziMYmF5XNVb+S7MdqOPbtIl22PU2tG9%(NSHwkeiOUjlz z#^PFO^mQ!|w+Nv;PQVT&-@!{+7MAw~ahnhcGBswPaxDz?eEJ$45DtVm&nM(AE7jmi zwEpV>ARGzNYm10IJi7)zSL5t;LEIsPIiD0iaJhUMYSoM{LqOamM5Mhc3vSU9Pet17 z8xF#W5W1C8HtqT_T)Q^S8VSOg5Qev;%tvn_&U*sq8-Q>j#Q0u9W_hdUFw~E2!G<7Q z331PtZ@<;JRg6U60Y)I)2+`e8#Ja>Md_|(u<1rxI36Xx5-%4Th)C`GI?eQQy2;s@= zO+Kw2;T+M*X95UMLd5XJNO>2J;TlTXp-CXT2ys(i!ki)%G*PRT6if!;O^6G8*;sGHp@m5`4o^uw717=G= z_!GkKkeG$W+2|qBJYyM%079s%sxsqpEk`7LCYgc=q=bu@Mctp$8;O(Ut3W&?#7;h| zm7O#NF9F$dVJ(OtLQJ?QWO3HNu`rdc2N6t&SNv$zn<4HBs8wS;Hi8HtgxN;{OKw?% zv;0YVTR=P_M0mL}YqjE;4~ijvvkgQjA+lBrSm21n!${2EvlGN)Lik)3v2>ptJf`lM zvKzz`LP+@{h1UOU!ha8)75hMh5kjM%lr4R?s|dAfQ04&;;e^;Pld}GAPv@Z8!|Bxf z8~!tf`~RYe+C$3}7un1mp4(6bq3nxa18l1H(DizX>_Ggen@HOA_5X|H$FZCUoCI)jo}yM zozHZbfNBrwLmSyY)E>MhXUM(dAJ(Ai!TrX#$?5^GJ>-s4F}iqpTPV_Fhcyb_q~;Az zFVZ%uiYi%(9;Mm!kD${}iAQN&9bXT2HKGF&1+qvG5roLUqsqFd*hV4YqY(|_86mv* zn#|&bN4_C3_G=7?NJ1>-=R!?7y%YE2YJ4n+C_-Fhe8PI@M7*+Oz1s^A(S)c~6fy%} z8D97K{@68v-lD5WsL9@fctMEXWr{5Jrpz3P9%b)9#1mo&UvuW`escyAl{4Ri zcu9!<+G?!Nja5UDP>9I{@rn>jB7|&Ehh=!%>H>=#5U&Zb`#s+`P~TxUis4?J3nGCK znQeK>v8lg562k`PgGeMq!c9I+xT6Ce?s(iQ1d&7t{TK<;y4MCj?e4?AfJi2UVS6F- z{usLkwJI#X1VjoUveyY%(lS*SBodaFf=DGqWs({jZeN547Tp5BgLp%T-Q&c})MI@) zict|-3F0jwZcD^$-EpJ$NHou{0+B|Df&KUu94k9NMB-yu4TyJyczjL7R+U`91HClI z-yqTnQ6DH}|Ev<>w8rU5^Ns)cSY{AnR*)JSdvK=*YSqCBEkV2|gnEL6CC#nI8xjkg zT7&pNh?v(B=G|vHE^_@Epade55bO9<6hknsABZo6IL3DxX#SXv|AM0mbwCsoBF|EZscrT6fMWDo zHxNV#A$GqMu~BnJ;ljSmlnF{@3XcpANB z*fbEo2r-?XH#S}&4VQX0%$y0Lh7kQntFo;fX9uC4udbR6qLvU=hxu8OixlxRde+=| zAnFK_rm4!##NNYeuQ&P32l1N_+LQPRe!nI^K&=|7zX(JcUL5XSc0lO_Q_sK;QiK#%>RhFjoU<^txhkU-)0GmooyVoblj_*oV zLejDR`d=hZmd-A%lXd;x@(D^z>)YEm$R-ohYvPvjZHm4hQDSPWf3tx$otR!LnJ91e zVxc**T61sx)$%6C6kEz|uD2L~64OcZ8reT2riy)D%h!6JeS=cVqQebsD#A!m92Jpe;*g0#FII7_b!h#T0-eT4~Pz|R} z6U-ifI75h4Ap#aW`2_xi7uE)XI7yd~ly|d9lqM7Ft5SE09&k(Xb*Qb9(;z*CDAgl;+x=4jxj6SK4L~pBSATAJM z)p=ER)7}KnAt`o<262%P5DLG_1}Inulc33JCbAUp`6%rEEZHu=IgB&O6Vf$$`RfPc?hmW%OhX7OPG z2roh;b>gMB@lTymjF?{{5Z;8SOBJ%6>UVHyda$7sgbyJM=StY%=2`!s7(?22p~j{bs|>yx+hLj zKD+e>5lD%DR9F{l*)7zM-b4C=cu0t)5n^WTScQ|VF$vlrf(WszP{Nw6osCytr2aDi zL@*)78mh8gRhy5XRxQgO1R{hG$0Uj@=$l3z5}z&(0r7|s^CMN+{%$Dp1&rN}{q6QVpr!W^oMPol*1RnYz&Fk{L^6N#y94`-QwzTY&IUS^~nXn;*6 zrdyp7Wp}^+c0uyYw}XF?JXzY@yjE87T%3p!(}isgH^?Rv)4G=}-BpokHHy*UNjQjTLgdWnH;7K}iU$_+2R{Q5Lx?9XBDOKyFb~B@TNef5IUx>b z@c&({uiKGW_$~%SEFsLENZ9Hw!vp~akwA#OPX+8`;S>whkG1(3AQB1jDp83oyjO>RAB)Ck zf=D7n&&hmf=+GP|LN@}lK_n9*x|kOVeE%!$HyWM`B83q4ni7`nxpx=p$FSRg?w)!TiTd7!Al?wd-(JkNUr61AgxcHBAl?$IP$Fh;)^B-orf z5LtwnR4!z?8zuPs9;IFNAhHRum>*)WGbZOPit)RJ!p{E;EOH1jCQZy?k-B0Qm=J1*Vtn*z4I-BimsFHl%j*+MkbEhofT_5*u2GK;#qRpL7xP^*n>OP`J#OfG8k@y@Qx7wZ3`)#VB)91yM){qbw0C zc2dM|xHuPe5JiMg;)kVrFS5XM-mZPyg7{2`{rptAEfcrnWwrx$wFmKq5Jyt^vS-CC zA?nB4z>Xk_3DGuG%*qYF;CJHGADuyz5aQq{RTi=QzrN1hPj>_Hl@QVVK<_ypB1fWD zb?DI(#5Y3JVFctAuR*C!sZJ)$|EE zAifhKmnWuzmmzqnpvG?ih;l*<)KFzprO{hajQHWYASwuc8*(PP1{jKrbd3`G*>0lZk0)X)Ag7 z5{EA+xm+~-NCRy;G0k)}k>?(Beub=tsrg?mZ*qXsMft~U@fnnu_Fvh^{vk1aeX&4( z_-t7_lv*Y<#(zpoyN{9@ovQh6iL~jeMxmS3yy3Uyx<{7*EphycEp@yxgBH;}j_u>o<45U+NtGBp+Djz|bBu7WsC2#19t z*0Q1+kIZvju7j{3gsO*>i4OYWET(elO%P`Y5#p%CX8n>KLap*WcN@f6La6ebME8s@ z9;>{pcLZ^c5W##6xnSc@ymdSw&I!bMLX1yRXOBm&$CFG`_ql?wB*cVx5pzi|x`z58 z>EZ#xiV(UB_{QUYGZrA>zRC;41wsg8`Aw+ys_l{3*1{LWMM7*iE@4k*CgJT=xS?%TBU9A1jH3WxIY%Lk-@&WA8t9}Ag&T(e4HAq zwqK1ahCfd|17SyqZS$n;{%Y-9)T)DTqCi|Dgb%+L``+~yc*((w)6YR%CxmpVh$)TnVAbFX7s4 zqJu~O(-szka3jRW<6>sKBLgo|a1Z|q!krNQe0A`Z$O*kst9(b5f$$(iHNWNhk^iAd zNF*nfgYYCo>Q4!K*6|vC``q8~1B4eLlneN^U8$q-1gT3=6$o!aXtftJm*z`sQL7B> zYC!l9BHfrD1ND6y&JkDX{|4bp2)%netMpiN3dPuQwAsP`42bU$qIJ4}d2V*}L*iho z79j2uVl(5b=TH6|i$p)KRv`Qc(f@{sU3hZJ0EuztiXa{kLUMxFeCKFvLLx{(1%y8# zwtp5djc?QN)bI`yA&3A%Xpd53PPI8BP>ex=Vi19ZSUF9=ewj~^A~8l^6~seAsFn%X zis1NdNVvqSg9swTxwcX^Ix5=)F!(fXL z33Jm+`}K!g&)j_=9{oVcqRiCbT~gLq7cy`g;n+>g0KkSJZ& z3&ayb#CZythfgIQy)O6E0ue@tArqu5wp$i{C$`n=2O^vh$9PR^;HTGbQSG6=@8To> z`9=MI(M0W`dx4uQAoX_&svwLvThaiVsy$rak|MiU<=q3x&+beAB6+f8I;389r`wfr zsPwW4`1Keoht9w$$7c5s{FZAUU!2xx|2PLC zfe`v*gzVDDN%+~-m}&(gkq~}sglzLd^RB2>NzX2VNFqevtpc__t394%>MOGWkxU4? zqf!<;|2*#bx1!4+QV6llPsAeDTjSry`o(r2QVFsAppY*!G0aE(C{VZo;te5YFPF02 zk7Rd{7&rAMh_{4z6eD0QqIW$(A|&-Th%`dj^YfH?owqSY;>*lCAl?z;2QLmO`**_S z3$qL-5b1=NZz^Q9$ByCz;?QPS5E+Ef+osIMKN*FWnN)po2l1W|(qH_h$5A17Q9o)9 zd4c#qh{Zgu@$EFX2#M8MJ|Hp)@x3Si3l5lEhJKhJ_JNAA!ZIz zWwNQJI3=$g@fbuNAr1$LnTfvz79U=Pf%rrS!%{wxRTK9L^`k->0V1Ce%MVDI;+!Ek ziPv+C1W`bUEAe%TpY@8jh$m!kA&{1SP(^oa2X_FZ@M4CUxSfX zUx4^b2>Z1nHY?I>35qec|0@t*2%%}D%obhk!;mOgkN~2X5bG97*wv)COGsELCW9y; zgv(6{6DF+nKtgeIDu}Oy=s#M@>IQbg3526o8i;R%xLCnU3nnT$D8>=81_(R-LhKX z@8AusJP;LxsN-k0r>Ts2idyyhT|S6PLf8e1S>?DIZ6wC*DFX3>5J!LW(?Aa!;awK1$ zF!+n)$C$KX}g=F8f24+>D6v63-H%3*A ztU`k9ua-A?g!)Cf=d5wtQDWLBv61~lV*2Z3f&A$<)A1;^{Mi`)DKV{IrE0W8^RNNZ zm-rU$|NGN6sd>W(J<>JWaPG`h^eAnbGa2+z;!#?2P?h<3yUjvk-}b2>juE1NnHqCn z`d=>t*U;%8juYZ*zL>RLHts!&;nRB-h!cbuQYU7bwhI>{vHazn|JT^P|J9i7aR48e zk<#9~c8$_dF(=GOQf7w6-nlJwk&{B2L?Thr!AMRa>1L8BU3MoWa!Eo|(nS=Jnv{~7 zl9EuQ8jPCctk>)NL%y%`-Q)ZL@7H%dJ-g>wpS9Mr7Ki{sG(S*cYs+MK3{bLWIfy_) zEL_UZ*Nbtvi)uKHwFePI2>Y*u>`RloYmsoPa{v)ch+PpvmQd4(=Wzp^SAhs2gvm?+ zJ38qEe$+}%I)T_vi1+*h(WBP6r%1V27hqlE*I~4iO@AiGbzIj>7{U?>~BhI7|qaJtLU(%(V-sRn}fR zK|~OuT~Ekz#g6!8+0pI;B9aga!-Z_xU@JUVd}+>Z5Jw1MRH4eUlr|@$R{7QWfrui6 z^GH5kYM5Y)h3h^L(S+DIM47o8PkDyKBGn)eF@!k%g^+0_)%PLM;~xSdmJs$8%FHSt zt_g`0#ZVA3Ld<-o#3Jmz+=|3Y$1o6ags|qPtqxK&#P=ieuW%6mA%w~%C3bzVE{l$jBCVn9|3Wc5R)eItxqf3zChP8eL)O}1VUU+6R{UMV{m7(Hd_WF zkq{SG)-^L^m#|beb zLB!nl*4#p^$`U4nI6;Vl3?XyAv%v)kHOo^Vk_nNLq0D6O3geNe$Ug((Bq6$`YOHp$ z@*pHaSSpB9gs5!dzmo3L_zt$Dq=7h12+zfQJ#l4qAgW>`LWgpk!LGgtR210;eD zUjmUrh#A3Z?7MLb4LUe|!Fmbj`E~*i&Qvl*TA#N`dF>gzAJWx=Rc>}}+LKLkQ zu&}_BDyYWTg*QQ5B*YxPGQuFE0MFfr94-ctP6(?+Wv1j=ScPi*sZj#r5+M>NtFXB% zh2BW?7L|gyOo(m#yR(^T4%J9Bn3RLaAcP5jQXAz~E$Z(`Z!V`twI1atN_yl88OL9G{4U*UTmmxr9*XJKt5<=-{t?M&~>Mkw*yc zBo(I6m#2klh-_Lxw=3_y9o^j=q`hvL8?s4J-8UPYFw%Xh;l-7^z)C?x`?au8L7=>0{=RJ)RJ4c(R%AgT$m(_P3ktd`&zq22%o5Dy4(?g0*Z;xwio8$!IAt8qFAreieqAc{cN}lZuqLvT`I|ZyV{YPUY zH1pPhs3Sytq=;>gjTn!_*VA1={7#6mn?-D&f7@y##J4trs3*kQrK+sgXFcv%M7nPR z(Le~Xj~a71==Kw;;g+)*#3Mpz8jD%&dE5C&Of}pBqLC26S5=wOTbVW%54VAMOo+Cj z0;cf6PKE@t_5#sF2umqnaWlgJKSlepyg@V*B8PWzofW!@P>qf+d_X)Qgq@a%b-!|q zMWVBM7l;-@IP%j-bZ@5OH_l`mKM+p|QN|a7I=ROF6V)ge>;utCh;(Nm%MQ6_ghWtW zAc$v#c%CL?j#lCcNURze0^&I#cJdBuPebDtBwqUd3gQJJD(9=SrNaXkBcW>^2BM7+ z{ma$afu@WMB=iM`K(rI${YNFHQ*K{^M2T+%h?j(L)Z`~nFZ&=tVy!_Gh*yO0<-ZcW z_((jc;u9PLqJt1x`9fAYHzps|D0nLa@tP3J771A5nimg{h*O9M(MgE3LIKlr3&n5F zwy*>cU4;0}Q_Qwir{OzTu<;m(ZbEG3r`*Izx8oVpbM?nT{6UCTMJ0B-*c0~|hCNLN z@rDpD`RJ zY^{n3k1G zkZ|9g52BwCBfV9as@d#tB<{!xKzt;Gri^d2bJuJf5((l$5PNR@?~G~c2Qk}WX0iqa zQ;+Xo?}uqMF60E$orcL0mQcAL#mgeI&H*Sdm`>NeFS$FRrxr;q$F9#v9+vJo_e)&O zZz!T*I(|p@fRr0dpDr3AT~ycl7KO_vt$z$q`N7ocq`A~9VrwO`Z~NYS*77E&8ih+c zem;s%Bd-7OiT#^kYVq)%^v9bw#-eEH+y4oc8!dS-J!q?7n&(g;Lt6FY|D$=sFNaSw J^)I`)?!Ujr{QLj_ literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 b/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 new file mode 100644 index 0000000000000000000000000000000000000000..6fc8b929b8f38f393765add94453ff6a03810840 GIT binary patch literal 1291766 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
!@ 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�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 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 new file mode 100644 index 0000000000000000000000000000000000000000..292395ceeaf47facc735c5546d5bbbb61eb283e8 GIT binary patch literal 7025 zcmajjd0bW176))dK<@#Rd7ctD=W-bZLAan{vXvnpg9C^nUg3%;f-*bwGzTEb48s9Y z>}kD_gg|``L28tmQKmu~pat6Cgdz$eiM}K2TCP^w{gco4xAx+5&fa&g8>|MO#~Xup zNH%K!nEUpv=5ZFfbJ7*bsctM=nVKp0jB?{#GL@+rY3Xy)6zPd>8CeS#D$E*{H374a*~azZu2DrPs!HMrln8o$_zPuj>~*n+dU;MBg6RQmwKU7 z)+erZROuUaKKCRGf?8J$XbaAa)6Z61@wFiu{y!Wk)Du)|)wb76 zkQDs-Bc!Z23(oMlwbGRdij)+w#qXo@{IWWWk4aUrCyPu%C0>tyf|xaD$r;g@*yQom zA@YVthNUQ1oZkM@oY>}2{~mweaQ$#6)q10!#H&fxWvX&EoE2yM+vwGvvt_Jzj&$>cnR^o`Oa(?>rO@ft#UW;9Pvq0Tv?R=Tj9w29Pk3KP5c3||CxtM zzCyn7+tJ{4h_?%NXZ1zf;*htS764wCc-a~kHm}Smfu7Ed`AR$ed6_Q%Gj6YRawaInmG-;0r8*y z?8G{IU38GI510Yokoe3(DN87D$VUET;%x9n#OHQM+4;Z{2juORD8U;O|4F=*oypMV zk&j&Jx`0iTpmc*ZJ6$S+A{CORCE8-u1 zBCv>`R^xuA`@IX^ns|>9QdVKsj`x>A>?ZIw#P`GrZ1EQ|e14X$-3H#4_~rTn`>o6W z0_s1qcqe!};){y}Ha$nEL4M1I55T`d{NW=!d%H~wpKrbad%%w%zE>i!I`f6UqWUFc ztH9e6-{&A@1({`MkoTN*0K5b7`q2Wbu|0bN`6jC);2nvNIKi`qS>c|@kFq!ho+n<~ z#;2YeMyNoxcVzCEjJDz~+_6yOBSy{vCKH;{AT-+1YY= zG4jg>HG!8AUtumVmkguP$RBiQ0q;!wuj2c>YN!uBuevPSz`GD1G*n=hXVq>%_3Ju* z2JcF|hL*rSt&vn9|C#*_@NUH4$Q78qaquPN9ir}lcPHLLCa~J`)h5XAwYv}AgZQs@ z^UR_7Fy6nNX}#b_5?_3uXF2*2PN;s`NB!VEiI;8T*}u1b{$J!>qXy><+^@WdH+B-3 z`ga{Skl)Ze6#OXSrQ03ZvYR?N$X`y>1@BF~ZKl9t5_Iu>x<+XL-iP=zBLwC%c-%@< zzuMmn{Al98&=A;`mWUv2Ezc!M{rUnf*L-OeuSe{OQ18@PWkN+{d#eJ+4J) zByQj2UO4c62FhMAwHti6&#%GVc{Unt?J7K;#a=YGUr5i8@0B@Lpxhm8&zI)JF=hXw ztMWGeDXW~+;4?51hue8Q%e`=R|2of9-tZwyM1!q#-Kb~57fAl1I zACh9Ti#(3{`?p@W=B#Qq&+>~fiDTIx$(Ky<4{~?OGxD;wyQre~tG;29(|<-^Hp9pF z4f4-lP@jRa$vgj8_Jvuotk&$Mtt8U zp4D6A2cY^L_osrNK>WJ90^1g|?mF@l`(wdRB;IHS&$1_$h9F<*t^glQyy7I!x_4{g zYfMSVT<{^p-!S8ubjrLPsQySv3iwdsQw;^Sw>IV$^2<*x1|LTJP;Z_ccQ#WXZ+|)) z{OiPjIF)CHK`!`ft2JmD_({Y|-2}EQ`&=EW|76Gt@c$xy`D31WRYq(<{@kal!G{wc zc1*nHIS_&g1s)mj(bMt*aB8+ZlrT0b~4#T~CWkb&WimVUvKb@fDSw;1h|zs3)-2LrsfO{heG7cqQ>#xjai)^sN&4Ly^COpG*9W zr94YFxO5Ep+g)mJ4_uRyh%f2k*>{bTJCIL0uL*u0@jr>*kH2f=m?6J!t2X##;tRdR z@4Lomyx*PA>4Be5{A3-09q~RVL-ohk7=vFxyswXVZ4QY)h5VfJ7T{BePYV#w^ZY{m ze$ME!1;3DZ+mSr;=DfXe{eB1Vsl;b(=2_Io-T3@}&szpQjd&w*KZf@w;rIDrzZ>{P e#IMv8SZ4L|>8PLU7rekPCVp6+cz%`zjr~8l2)f$< literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 new file mode 100644 index 0000000000000000000000000000000000000000..8d0e39b0e109d871a7131a4c5f087213b1dae78f GIT binary patch literal 7025 zcmajjdtA-;9|!Q7l=Cfgzu&07-&3fRE~g7=eUcI-BSO+St4LXe=01{ytxQvs#^$=H zh#qYyW7KT3xeW1Zq?=n*OT@=_wPM+{ydN8>-~A3^Z9`qaR$siNOcNK{0_J33C0&n=a8>;9wbBC$U>CH7@q2R%-Q_sC z{QSLkN`3d3`yY}vhxqtjZOR#QItybG6XY>z3CT%LN%Gh@KR1JFqY<*M_z4ZXGL$-@ zQAM(RZ32YMI1^6y|3kx_4KnP?Wuv>3@1fM%Cv)DCa&b1et)b?v{iD|^LAln^hJ%5U z+Odg{GUrS=z1P-CQN+e1CWQf2JLe8XT#!i;$kv*64)eHs&+Jh6JL zSG;aTJIa-2CcQN$w%O0S+q-UmOoY91J&zaBDiTGOGH1z|a|W-i7n{6LkrET95F0hu z&GNBm3B2N<43=!neI%K?P8qb~EI7k|3W}|+H@oGt!liUKO3JhUEh#oz)9CAa=H$m0 ztdwhphXfc)lD_EaD zHp(^1zF73GB&bT6Fy;)ofxTV#lliuP)A7PuxlZqX?AuY;`(dA(r6@!vMt zv%%U$dB~?Wb%WOBR^oTO47@pUu^^8OQWT1 zVM)C?^1D~}1#d|FvE%maq>1qY-RUxo*xdV!j=WpwPHzqzhLdr5v?i`4G z&qyA;3Gvfp_RK<1Tt(itY6y5!;`e$=*@JYWdgP0z4+n2X{IAyqw&B2GE98$Gx`Q_- zzNb`RPwKJ_k?->J25&*U^I$0pO>o2KU#FuVcuV5DX9%n!XO9i4A7I45TM@rhM_@Iw zvA2;gvj_%nP5kCufwAY>OOU^!G6DP`;w!)5+07j<-a&psNd)-8#6OV;tlyC@s*o>O z842Eo_@}l~HqBoB-EOG#Rp5sZ-y&YmKiu$-M)gyNW`Q3{d_X^eZAuJ?L;k$$ zM)1RkS5p_*%;{!pkyp##1m2POyXgXpT7G;b^22s+0q;b-se{1eUCU-6AGV?pyfg8& zU-7Kx({uRus{8nM@WYAU+{LqIxwk5+uhp~*ybJLTpYzOd;;b&@muxKt?@GLZy}%T0 z4e`i_Z7l;of_Q169m}i=zKs0isYk%O5pR_yu=rE4Cy}rH!-Wu7w}%h z&u!${vgJF@qxwH5{RZBf__Dn`D>U9#i2Os%>)?HeFR|v?Rp+tA$d5XI6TC0+AI=uo z>}OkcAs@Y}1^h_jz3OyT`!#AP8GZR4fQuVQbS+b^f2dR;d2S%-3dYg*o#6UUVD zKO4P<2eewEkvP1d^;PbTv-{ahBd;~ZziXhu_P~MLuYzx$-mlmR-XG68I}Rn+H{SV| zq}c3y=PK_b`wv+SQGr*c*{KkTO7q{zw@mPl)4%j8UOf57p~`4i$xlq8+46VvZ8LoI zQ&n%zAW);T{h7(AHs*FfAw5j%QK&i`!*uKp-&fhe{z}G zXbLP`tzszhs#QJU-zDC1vA{k%(()Yn!>!N32M~X)lV{UB%5eX)tNWz&UdD|0r+GXZ z-}I#hs(&U-0zQ!V><)pA+MbV(iHijTz>gtbKZ75Xt^!;5aRo}@$7DbZ#nYn6Yar| zBYxL=JS&&oxq`fty(9Qg;-!uP8xfy_A4~KCT)>Yfe(7_bgLz z4cjln-@k93H~28(GYfgPCA9q*s;?C@8hkkMKULZ>)j#~Jk;2?f$Cxn2yg`41PNCMUgzyn6ju1 z)!(4M0{jf(Z&ul{mPdZ8k?$X#0e&X&b}j;2R}pm)`OimWgO4U&WjoKtbj$E#Ph`|5 z;Aat^sm8PD3vzu_KljXL@G-=zU$tYldhSP&@B3W=_}Rq&_$$w{6XjCmPmcNmd@S+D zE{fm(=B$s9Kfrc^mlJM#)6MsWIA2p;~@cmm8S`9vd`1P(lJ3U?>j|mq> zeGh&P@ex`A>r@>Viu$Q={Q>-3;yvAY))?A>$G~H@=fEctpX?)^?_W#gs6HEY5&S&j zt%mdL#=4^`kbk=GD)=Pg7ktLEgr@a)f8Fcq!6y^1FW!$jjUjoczH`+r@bigZ*;im? Yv(oY32t^NC!GA#ffJ~kRKD}f5Uo)(`i~s-t literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 new file mode 100644 index 0000000000000000000000000000000000000000..c46326387cf9c89c5384c6c0f27bf43cb323cf4c GIT binary patch literal 7025 zcmajjdtA-;9|!R6I^T-!(p~ENJsqiJwa%$%^hqmpwVF$bj+8E(inNTmq=_w;BBP&S z8y39cDgsj2ab1+McINttqm ztNf*ko0*g%kAuJb8m;bYtE$_4#n?mit=^rVUe=YEa7G-L`LecKN_s|y+4l{G!3$%P zi=9-uwaV*%qI~z3re1ByS#U=4;!~0m;xm)d)7;V$W+eK1n$-+^M;ajV2;o(sjL=(Z zqReggA!Nl3;*9?u8t!hk%&9{9v3AM`l&WoLeM`#2-K?dbmQQ}$<1Yl&T1Rdi2o#MS z&;}`M&XO~EV=aYzMtn+&vc+Gb^Q03MY^7Kg>zQL7EV}3S5Mnl*6=zCg$|h@@T zcTb6?uS69rTfOF~C_7RWwBu|z^M48|TP?7<>HEacUyhPSQU8`yHhbchpWoV;bxwAw zHN!&!EJTV0T~~T9x+!PO>B*IgzPjA9o9*6z9BZFquj0-RcZG@CzWfuo8E3-j|HYM! zc}qW$-Y%A{MBc)>`yaiso%|!qWt+u%-wsyQSO2K3Lo{Jm4|sFVlr!k9|N7#pKS_{I zSfQimpbBIg`MnUm5Y&I|?SCL=#`S+Qplqpg&S2Sd*O+FM(5cnvBcW{S{Jbn5d(-QA zLsV<*|Ihp}qMABY!h$pB2K27+#--e_Z<%jXrS=X-Rb=$g#p6Y_$5fF)+(6C{N0g2E zrQPs#JwDYKW%kzhol&+nexcOw{Fvj<>{aXZUJu)5QSX;AR432)!R$vtIl0+|$WL3- zAG`+fe=I2++cWF2E%Kjrnt<0N{)5ZDfiq8axFc`wI0(EJ@r$lUvKR8i7s$JJ*nrn2 zzTX`;=92Q_Ir8UbYeg@;SxB!0QrkbIFa> zId+PXf0XM1UPQe2ilMB)_s(PFEppxk&k>&(HH=+5k#hw31u?$h^@#sg*?-lZE-CV7 z6aB&K6K@~n##&BPl_FoWA^^Mr@sedO?2CTP9{E_CVDSBk&k`i;>{IoF$b0*Rf*(Nq zQ-2A&A9n3J@5}K?aV%k z%S=UHelP*N3GtZ)Vs=MsW&!fWhm*jY5}*B0%*Iw7OGbYCrZn(o#P5p}GnZ(M$;eOn zBm=xT@m1B%?C!;e9_05|XM-O|y#7If={>NjL*97g$KWl9kBbzuTuo;$qiBJBow3*e*S92Jn`b|JnQmo zS3|xf{1kYB_{)w0+ZyYfg}m0sKYXs33A{7$(k`AwgxP(Lyuq?7 z;3dTG9we~2KiB9Ze?jdg_@Tt#Ro>5+qQmk3f5V}B;9ZCh&=r_^?QgeH{gCoD@WY7L z(h=B?Et=8DH=Jq*?@D}Yw!rM4Mrt5G{L2pTZp2$k1ZH-w>TBf7&v$`$C;sGio-Jhw zmdIPk)ULif{uvG@e*F`kgcH3gjngO2A8rFKrRn<&nobkXK*n23|(|>{~nw z8uHnGdC!TS)ue<#n*yEHT+uYN`b-k10?d!7xx&N(1ℑisAMp#O3+%~{b)O=i ze2sx0NxZC?XZ^gL@%h&HX)yRv#GkI<+1<;z`2BMtEeyOr@ej&*Hqv6F0*%CGxxu%3 z?|*+uA5**WSLM>ol;wNSXsf$E>2mgoN`R5`16*mYuBn( zXe3U*GyYYs&)NNlyn(X0&zAgx2HTB%=&NAg(|ePX;8Q=Y(gr0prD6Y)R5m-u{ish( z?2@fR)!>t7RUabKlf6#9WrBZ}y-ijS86V`Liasf8WTO3lMc+2V$91av43DZijIzN# zub1sJt8Dpn!U~_CkEV`5w`En=MEJ7wr=CkIc-FSndo zqsuh#V~DrS5tu>L#UD`pZ(`)&1Bk!$JI@@B{B{9(`@&@KjQGwXo`ssWR3U#geGd3Q z;#al{OnZ^G8S)X^v%rrf-gGk0GLBcAL%z}ABk)1Q$A8Z=52HF0ur3}?y`*;iZP~t;scy@8{-jm21b#DV7 zMtt68o*l05z{d>km!06liEsSQiFuA{v_tjtQp&(b5T9?vv&6Fa<;dHvuK*uO{4wP= z9sKAd-sZLyeg{5^_+_6fk0o|;e2fpeR1JP2@v&oh=2c!a8ub&ns2=>bv|$XCz*3H*n|FIHYJU8Y!v{ODCp z;3pA(z(Qa#-evgMws6rE@RNz(xPxZ{zS%bo)t_g16Z{n7OJjI8t1)Z`@?7{`@KcGu ze$i1{fR82K$wOep=AJ6ja^u>ThsD4(b4)__wSN+Vh@t)5A zMLtkhAAADwO@;z%FDS(C+l`%u;N`^YWb-UGIcf>2@A}jX{7m9ob9feWL%tCC3Hesw z6NxYB;F-oH&85h1*kliW7V+1V`=jq_6KCYhWIXsJ;tNLbOnfF7|4b_RVJP@y;v@A1 zHtfUilTm%X#vS}@;=R3icA)8s3-Y%2Ji(_BpYAKLOpTSn$Uo`l13r~_yWu?hbof2I z{}!Ja1wM`VtYV&ZKiZD>UtXPoPbc0~`8>Ak7(}3c*wA3`bBJH8EwI%syPA=2whje9 Om-zm9Jac{Tw)Fpl;MukS literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 new file mode 100644 index 0000000000000000000000000000000000000000..b2a68b13e87e4037e894bf8d541b26fd055c346d GIT binary patch literal 7025 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 VOj0@D|9+WD{96S)b5fnH`hSj?wqF1M literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 new file mode 100644 index 0000000000000000000000000000000000000000..637b808a56a236557c37b76a5957c889dcae35b3 GIT binary patch literal 140105 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 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 new file mode 100644 index 0000000000000000000000000000000000000000..836a4b3566ce34e812b1f6188d74697afffce628 GIT binary patch literal 88 zcmeZZfPjCKJmzxVoRPLh`pr#8Dc+=_#LPTB*Rs^S5-X!1JuaP+)V$*SqNM!9q7=R2 h(%js{qDsB;qRf)iBE3|Qs`#|boYZ)T$gc?#q5)4|AzAdVrHJ6YguYuiIq{19+yr@YF=@EQBrM*}QKepaQD#YMkzOiDReV}zPHH?vB#GbVH2@*}AMpSH literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 new file mode 100644 index 0000000000000000000000000000000000000000..c8391e766333d0e22f8f4c436f813ddb4cba98fb GIT binary patch literal 88 zcmeZZfPjCKJmzvCBY?FmY9>7l30?NpQoRflAP{f zDr&xCs+C>94I?$Eregoc44gNjpqiw)B)NppH5nR+?$uvnwM4%^7)95~Jbb#03`Dyo z9<}Oy(EU*zYS-?E8{Ie`H9>XBa7l3qBiU7ynw*%E19akY?W0!Hyc}+5K(+lZ5cA?Z zISr~!mP?vT1XCN(k?s>dTWxMX{u)J}+8X@&fX)<-x3?CbP~fBqwa@&2JOk$km_9i! z87@&I`;zm^Qi~GPQ-KckT6n`U>_C>E7F6T9-icp1C#;29D9mtj>B501aErI{*Lx literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 new file mode 100644 index 0000000000000000000000000000000000000000..a2d9b56f0c01d2c4938a7f86658f41074f22e473 GIT binary patch literal 88 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 L!?zeJZLat~>soxF literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 b/tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 new file mode 100644 index 0000000000000000000000000000000000000000..1c79fbc6b4b231f562d078e5a106cae05869c6a6 GIT binary patch literal 191451 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

=D7)Vn@F5$D8K3fAd7XyKHRGa6 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 literal 0 HcmV?d00001 diff --git a/tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 b/tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 new file mode 100644 index 0000000000000000000000000000000000000000..2373fdd2c2263fd739127af7eed55bbc7b3c1160 GIT binary patch literal 1056014 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

HUpVlooI2?{3gHKj1eJX{msXlek!kAlcp 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

ChTP%`w+!YlOf4FPOL5KGsF8 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 W+y*pSrBofWMYjbD)u#f`fJQ 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

lIX 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

I- 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

qTj&5m5wNmGvbyb99QD%Pm}0n)16V+GopJw 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 Z%Do>*dKI9!6-6{70%IU?lmDsZ{{dG|=cNDu delta 13 UcmZ3u+wtTvj)oS-Eli%u04)IpTmS$7 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 deleted file mode 100644 index 5caef14a7472c6b5dacefdcc9a296fd7e5dec739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170512 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 Date: Sun, 23 Feb 2025 15:24:24 +0300 Subject: [PATCH 121/175] fix sasrec freezed --- .../train/sasrec_freezed_train_config.json | 3 + modeling/models/sasrec_freezed.py | 96 +++++++++++-------- modeling/models/tiger.py | 10 +- 3 files changed, 68 insertions(+), 41 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index a53ddf0b..209a5671 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -34,6 +34,9 @@ }, "model": { "type": "sasrec_freezed", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", "sequence_prefix": "item", "positive_prefix": "labels", "negative_prefix": "negative", diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 42194c1d..6ade4326 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -1,11 +1,15 @@ import torch +from models.tiger import TigerModel from models import SequentialTorchModel -from utils import create_masked_tensor +from utils import DEVICE, create_masked_tensor class SasRecFreezedModel(SequentialTorchModel, config_name="sasrec_freezed"): def __init__( self, + rqvae_model, + item_id_to_semantic_id, + item_id_to_residual, sequence_prefix, positive_prefix, num_items, @@ -36,43 +40,55 @@ def __init__( self._init_weights(initializer_range) - df = torch.load("../data/Beauty/data_full.pt", weights_only=False) - precomputed_embeddings = torch.stack(df.sort_index().embeddings.tolist()) - - self._projector = torch.nn.Linear( - precomputed_embeddings.shape[1], embedding_dim - ) - - padding_embedding = torch.nn.init.trunc_normal_( - torch.zeros(1, precomputed_embeddings.shape[1]), - std=initializer_range, - a=-2 * initializer_range, - b=2 * initializer_range, - ) - - mask_embedding = torch.nn.init.trunc_normal_( - torch.zeros(1, precomputed_embeddings.shape[1]), - std=initializer_range, - a=-2 * initializer_range, - b=2 * initializer_range, - ) - - extended_embeddings = torch.cat( - [padding_embedding, precomputed_embeddings, mask_embedding], dim=0 - ) # Shape: (num_items + 2, embedding_dim) - - self._item_embeddings = torch.nn.Embedding( - num_embeddings=num_items + 2, embedding_dim=precomputed_embeddings.shape[1] + self._codebook_item_embeddings_stacked = torch.nn.Parameter( + torch.stack([codebook for codebook in rqvae_model.codebooks]), + requires_grad=False, # TODOPK compare with unfrozen codebooks ) - - # TODOPK ask about freezed masked & padding tokens - # TODOPK use rqvae embeddings instead of text embeddings (freeze / unfreeze) - - self._item_embeddings.weight.data.copy_(extended_embeddings) + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + + item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) + self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) + self._item_id_to_semantic_embedding = torch.nn.Parameter( + self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=False + ) # len(events), embedding_dim + + def get_init_item_embeddings(self, events): + # convert to semantic ids + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(codebook_sizes) + + result = [] + for semantic_id in semantic_ids: + item_repr = [] + for codebook_idx, codebook_id in enumerate(semantic_id): + item_repr.append( + self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + ) + result.append(torch.stack(item_repr)) + + semantic_embeddings = torch.stack(result) + + # get residuals + residual = self._item_id_to_residual[events - 1] + residual = residual.unsqueeze(1) + + # get true item embeddings + item_embeddings = torch.cat( + [semantic_embeddings, residual], dim=1 + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + + return item_embeddings @classmethod def create_from_config(cls, config, **kwargs): + rqvae_model, semantic_ids, residuals, item_ids = TigerModel.init_rqvae(config) + return cls( + rqvae_model=rqvae_model, + item_id_to_semantic_id=semantic_ids, + item_id_to_residual=residuals, sequence_prefix=config["sequence_prefix"], positive_prefix=config["positive_prefix"], num_items=kwargs["num_items"], @@ -87,9 +103,9 @@ def create_from_config(cls, config, **kwargs): def get_item_embeddings(self, events=None): if events is None: - return self._projector(self._item_embeddings.weight) + return self._item_id_to_semantic_embedding else: - return self._projector(self._item_embeddings(events)) + return self._item_id_to_semantic_embedding[events - 1] def forward(self, inputs): all_sample_events = inputs[ @@ -112,8 +128,13 @@ def forward(self, inputs): embeddings, mask ) # (batch_size, embedding_dim) - all_embeddings = ( - self.get_item_embeddings() + all_embeddings = torch.cat( + [ + torch.zeros(1, self._embedding_dim, device=DEVICE), + self._item_id_to_semantic_embedding, + torch.zeros(1, self._embedding_dim, device=DEVICE), + ], + dim=0, ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim @@ -129,7 +150,6 @@ def forward(self, inputs): data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) - negative_scores = torch.scatter( input=all_scores, dim=1, diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 7f24f733..1035f009 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -72,8 +72,6 @@ def __init__( self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) - self._codebook_sizes = rqvae_model.codebook_sizes self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( @@ -93,10 +91,15 @@ def __init__( self._init_weights(initializer_range) self._codebook_item_embeddings_stacked = nn.Parameter( - torch.stack([codebook for codebook in rqvae_model.codebooks]) + torch.stack([codebook for codebook in rqvae_model.codebooks]), + requires_grad=False # TODOPK compare with unfrozen codebooks ) + item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) + self._item_id_to_semantic_embedding = nn.Parameter( + self._item_id_to_semantic_embedding, requires_grad=False # TODOPK compare with unfrozen codebooks + ) self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) @@ -241,6 +244,7 @@ def forward(self, inputs): return item_ids + # TODOPK (decompose tree) # else: # eval mode # last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) # # b - batch_size, n - num_candidates, d - embedding_dim From 632045f4dd732c85f5bd8f86514073691e017f4a Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Feb 2025 15:30:44 +0300 Subject: [PATCH 122/175] sasrec freezed learnable --- configs/train/sasrec_freezed_train_config.json | 2 +- modeling/models/sasrec_freezed.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index 209a5671..cbc9af5c 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_freezed_beauty", + "experiment_name": "sasrec_freezed_beauty_learnable", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index 6ade4326..f8244228 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -42,7 +42,7 @@ def __init__( self._codebook_item_embeddings_stacked = torch.nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=False, # TODOPK compare with unfrozen codebooks + requires_grad=True, # TODOPK compare with unfrozen codebooks ) self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual @@ -50,8 +50,8 @@ def __init__( item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) self._item_id_to_semantic_embedding = torch.nn.Parameter( - self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=False - ) # len(events), embedding_dim + self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=True + ) # len(events), embedding_dim def get_init_item_embeddings(self, events): # convert to semantic ids From 8e96a9bdb3cbed652cb1c596e20bd681f61b41ed Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Feb 2025 15:33:17 +0300 Subject: [PATCH 123/175] empty cuda --- modeling/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 8db8f069..0fcd5873 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -11,7 +11,7 @@ import torch if torch.cuda.is_available(): - DEVICE = torch.device('cuda') + DEVICE = torch.device('cuda:1') # elif torch.backends.mps.is_available(): # DEVICE = torch.device("mps:0") else: From 95e816c39a0e665f10c647417c96219ad6d727d3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 24 Feb 2025 18:07:31 +0300 Subject: [PATCH 124/175] freeze sasrec --- configs/train/sasrec_freezed_train_config.json | 2 +- modeling/models/sasrec_freezed.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json index cbc9af5c..209a5671 100644 --- a/configs/train/sasrec_freezed_train_config.json +++ b/configs/train/sasrec_freezed_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_freezed_beauty_learnable", + "experiment_name": "sasrec_freezed_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index f8244228..dcaea8ff 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -42,7 +42,7 @@ def __init__( self._codebook_item_embeddings_stacked = torch.nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=True, # TODOPK compare with unfrozen codebooks + requires_grad=False, # TODOPK compare with unfrozen codebooks ) self._item_id_to_semantic_id = item_id_to_semantic_id self._item_id_to_residual = item_id_to_residual @@ -50,7 +50,7 @@ def __init__( item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) self._item_id_to_semantic_embedding = torch.nn.Parameter( - self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=True + self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=False ) # len(events), embedding_dim def get_init_item_embeddings(self, events): From 61b5c54afea0aee5ff3e4146d4f5c9ce2bcff223 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 10:53:12 +0300 Subject: [PATCH 125/175] fix cuda ordinal --- modeling/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 0fcd5873..8b96ac52 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -11,7 +11,7 @@ import torch if torch.cuda.is_available(): - DEVICE = torch.device('cuda:1') + DEVICE = torch.device('cuda:0') # elif torch.backends.mps.is_available(): # DEVICE = torch.device("mps:0") else: From 6bad6ce0a57bcb6ce3d33f05150f0f565196c4b7 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 11:02:54 +0300 Subject: [PATCH 126/175] remove laplas logs --- ...ts.out.tfevents.1739517568.laplas.230979.0 | Bin 343437 -> 0 bytes ...ts.out.tfevents.1739620895.laplas.473812.0 | Bin 191451 -> 0 bytes ...ts.out.tfevents.1739715883.laplas.236512.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739716174.laplas.237976.0 | Bin 1531738 -> 0 bytes ...ts.out.tfevents.1739517574.laplas.231017.0 | Bin 390531 -> 0 bytes ...ts.out.tfevents.1739716254.laplas.238391.0 | Bin 1508887 -> 0 bytes ...ts.out.tfevents.1739736855.laplas.341454.0 | Bin 1291766 -> 0 bytes ...ts.out.tfevents.1739731427.laplas.311641.0 | Bin 7025 -> 0 bytes ...ts.out.tfevents.1739732357.laplas.319889.0 | Bin 7025 -> 0 bytes ...ts.out.tfevents.1739732803.laplas.322005.0 | Bin 7025 -> 0 bytes ...s.out.tfevents.1740217007.laplas.2652164.0 | Bin 7025 -> 0 bytes ...s.out.tfevents.1740225602.laplas.2693646.0 | Bin 1072545 -> 0 bytes ...ts.out.tfevents.1739518113.laplas.232484.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739518142.laplas.232572.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739518184.laplas.232702.0 | Bin 226257 -> 0 bytes ...ts.out.tfevents.1739615921.laplas.455204.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739615954.laplas.455393.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739616148.laplas.455908.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739616253.laplas.456274.0 | Bin 635 -> 0 bytes ...ts.out.tfevents.1739616467.laplas.456753.0 | Bin 88 -> 0 bytes ...ts.out.tfevents.1739616949.laplas.460160.0 | Bin 32235 -> 0 bytes ...ts.out.tfevents.1739617215.laplas.462145.0 | Bin 191451 -> 0 bytes ...ts.out.tfevents.1739716313.laplas.238741.0 | Bin 7746 -> 0 bytes ...ts.out.tfevents.1739724358.laplas.277589.0 | Bin 90724 -> 0 bytes ...s.out.tfevents.1740146925.laplas.2313159.0 | Bin 88 -> 0 bytes ...s.out.tfevents.1740147036.laplas.2313784.0 | Bin 1056014 -> 0 bytes ...s.out.tfevents.1740149051.laplas.2323452.0 | Bin 900416 -> 0 bytes 27 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 delete mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 delete mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 delete mode 100644 tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 delete mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 delete mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T17:30/events.out.tfevents.1739716254.laplas.238391.0 delete mode 100644 tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:28/events.out.tfevents.1739518113.laplas.232484.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518142.laplas.232572.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518184.laplas.232702.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:39/events.out.tfevents.1739615954.laplas.455393.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:44/events.out.tfevents.1739616253.laplas.456274.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T13:55/events.out.tfevents.1739616949.laplas.460160.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-16T17:31/events.out.tfevents.1739716313.laplas.238741.0 delete mode 100644 tensorboard_logs_laplas/tiger_2025-02-16T19:45/events.out.tfevents.1739724358.laplas.277589.0 delete mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:08/events.out.tfevents.1740146925.laplas.2313159.0 delete mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 delete mode 100644 tensorboard_logs_laplas/tiger_simplified_no_residuals_unfreezed_2025-02-21T17:44/events.out.tfevents.1740149051.laplas.2323452.0 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-14T10:19/events.out.tfevents.1739517568.laplas.230979.0 deleted file mode 100644 index 9a870830b41c45a45b0ab3467d98d493bde9acfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343437 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 SFy1h^m1KyZ_T)pKWnx%$^! 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%0A|_9Lj_z;Ton9Qx$}1SEbwh~OIs_qBB4 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 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-15T15:01/events.out.tfevents.1739620895.laplas.473812.0 deleted file mode 100644 index c45b4cb1074bdcd8e9f95c08f74ba4d37492748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191451 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 s9Dq|6Zajd(~|)2J5v!va&Rry8&0nt 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 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:24/events.out.tfevents.1739715883.laplas.236512.0 deleted file mode 100644 index cc3b8f372786ae779b73fb27c1a6e4e670a8ecca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeZZfPjCKJmzvLAG_;S`{t&j6mL>dVrHJ6YguYuiIq{19+yr@YF=@EQBrM*}QKepaQD#YMkzOiDReV}zPHH?vB-i8MdjLkzAvpj5 diff --git a/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 b/tensorboard_logs_laplas/sasrec_beauty_2025-02-16T17:29/events.out.tfevents.1739716174.laplas.237976.0 deleted file mode 100644 index 6d0c0b6ce7937e7fb46e353d95e4ab606363fb2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1531738 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

7p{!-D_>rl)rU5JZ8QPYX6* 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

E(dO%g`<=_ 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�iXi%xnpcCvom3as*a1bcm!f9OG+=ukRZT5Tw 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Ⓢt&w2gq*WPZG8Acy=yz2H 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 R&kXF=Rey%|Alo6?$#h~hD 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 @+Bz@3r!nAMEN}_iqDL&&=BqdIM}I} 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 C@9Dn) diff --git a/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 b/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-14T10:19/events.out.tfevents.1739517574.laplas.231017.0 deleted file mode 100644 index 07044b8f01ddc37c6ff79a9940265e665ef2f188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390531 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

rbNkM|PAW`#I}AY(2irE7!@ZUMbZ$>8 zQyoDt2S1nCLx9}`O;Ta*MlA$qId~;GXh>;n1LXIgI6=%A^BTp`r3|X17{;R&p~E$d#KSHc#>3TJZ~<73mo{hw1Ysk zE_4!VxR(KfiySQdZV$z?-qJ4pJI%!iB013SZ3*$3Kh#K*)~{WL;1UO!E1V#?@4p_3 z{Wh&c5XFIJj14Rk@1-$4(Rek2%N(5ER>cowXAh^lF@Cf0n zw3UlDlY=&SV~QY_gUj<}@I7tJegdkxSRlB?fsycH>MPy9%_m@dlo&xA2djg{;P`gW z36dwn=0Euj>dBKydUHgxr@Lg5SU6-?ovSZTp8Ir0bfv3gB!M#>{sM)hqaE{Bv~u&} zh9pmZimik7=1DEDi=ybX07ViCBXa9x{dscqtqI!Gc8{_r^i9oQsnFgAw|%tN_B{BF zOW94{$0ezS(fn!$-%*YkD|JO?dw>kLv%m!rr*VCcc=-}4~?r@Oc>IlcScTXS{ z4BF)*NZ{aTb31U98b}CeDSwL~k%RYZJYZH=H9843al%IgNgPNe5~wgfMDHzc&K4m^ z=3qm(2b{RrfKD8AZT1C03J2T1IYIf{ING~ajV(iPmxH)2)^OGQ4n1-4eJT*#;~;mt z6fT;dZ$W;gnr>AH?sG8Ezysb6Iz%7;p_(-aQaOlHlEC|MdUXB9`m~16{>cCjI5;47 z25T)1+Fvm0+Y~_>2hm2h@F{D!J~@VNS|u0f zKbn*r_9`KG%z=%%8^rcrTS_Vz4pl~w&cPvdVJ(nL68)7HR&_@3goAQn*HEqB5?xZE zOJz3%PdQlJ-y9tG{g4u{!lx&KXB=$oDS;X0r49tNFYALKgM)TgB=Ehm7rpqDo2Vgp z&Vg^f1Dx*TN#mi)szC@|aL{C<75wt3JVu)ItK~2RnH=Z{-ztrL^2~;Sb@SB`yyQS_ zlNYpnva$yOQa4QmSscu+aRU2OE^P=1D;

n}g14Y+-$GnGpfHH^(D*#esuF4hrT4 z`v|ZO)j{x@gEqofIQ@Mh>Hp#E`N;@!IJkCR4%b(=K1(WeE1QNOmxIGfa%iMAri_4+ zS2Gagaq#`I1R93Odl)9&=VKZ%>cn0 z4y=VwE$$uGVo$qR1T$J5D=Gs9LQc+Wv> zxHC9s7GES4`rEHY@PUI~2abZs+LA76TwApc!AB0hJP~#)RK@fo6}+=HA}HkG)f_W8 zHcU#_?7r%<6~QMCBx47eO%x#n!GMQg@wAz<&LM2ue7ZbIlWs)spFBw?)Wd1YbB<-CYbLMXt9=g?WQa z5q#xf%^h=SZu_2|>G6Hc5tMRp>awuN_rQuOQsGT^D+Fa6=$>|gz%z@R5-{wv4T5hR zjJjQ_4gVjG-7P|d+d;dRA&&F5?<;QO9H1iv_VJYNcahaW`}(00&S z1T`EuCb~lLi1xHe`e~sEYB@+TmBXNM#o45S)!Fk1%-Xa0$xdoAuugRLA$f9PizXTW z^!Wr(Po8W&W|8R9ljgliEWFvP&efMETN#Io20S_3jlh0de}O{Md1vrdq&Q^uIFcs| zr`N$h=E-wGM;ee&n6k1?)}JR=O`EKJrpEydLaTQDl?v@uQ4iFPoTp_>@?_-hI{Jq^ znHQC=y+Grr2Z@9e_te=x<;nH^2kPhzR5B+x>3_jOt6heg>%1~-S50=tK6hFB`+8tI zV`nLxnE*qkM$m1pA$5Z9j7^VjBicGR;WZ&Q;_4+ryKL?*6P1kEx039PU6NNv{$pqC z3}t0e|e zb7$4q}hLpu;ya**^;22DivG?uH~-G#u4 zgKfepuVp*V(GJDL?7axY9Bk3EgS(=Pt>hTGPCtmingjKtUNCs@&Q%0Fe0&&z4F_*j z{b9U{30+6_w23JK2?uNLNulk0Z#o)0?zTAsTMp7g<*+Nza5!nwsR3dHQVtr;wS#UA zUON$B-A;nQj)TfbQy6h!;cf!byVxPH=U_mJ3q-G-OXpON_jW)a<6v@M;l+wO|MlK| zb9W~M4jg37l!2D}i(=BG?cjz$&cUI4VbbaGHhO8i%=Sd!$ie;vu5hEsf&NMz%TFM1 z;=n}T657q1aEml4<(NMLXAV@HWnemG0A1^$_bC8@3kS}AcFqey`p#T>+aUvTbhBDZ5llPCx%3D zu;7gi*xQVzPtl~tO%R;tU`SIrj9h(@9z)X?%@ADRpvy#IA9o|8CFB^UXtYFdk%Q2? z!dJ_~qUgOfSkwkVBnRs<2PhJdWjPALO%9?rO5y1zbyouVwI7EdmV?L< z!ZD1z+=zhpTSW+NanL1L4wuTN)4sP##zX{h91K>of_JK!7s*J0i@ED>P|rv~MD#L| z@8$KKNZ=ppS?B5-DNt_|B1$qWZbo25_+OxqbhH~6i^>bFipWU8&^vXo-jRY&iI+q# z4?Lej;=X!joveSPU`EL}ZKpQY8H6q<{wo#QE9}SBF8bwZLq-Z3mDJHcj1-h@ysPcE zTHBR`eW(9p|1?rCesF)C;=9F(1b6yUSGZm*w0fGuah)StEkBYgZbPysUJvp70&1?{ z2w|gB>HX1ik`IF09K4?;2IZJUx}>T_nLmO%9GD5SBYh_Bk0VW5AUTa7frG)v{K3ku zBOSqO^)?7WA_pO5=CJ2Yo*k($YI6vJBo1C2wt>)|*0f0qY2gTxIfxza1%_RA_8}F_ ze_cS3!okx+W{`Bh<1qsK??fTE%R$I6C-_qRi#}`Ln_fe3kAuZ#F7VoHZBJ5R$;TTA z?sE{+z!fHG9itVNC&eO2<={~V8CbYYx=Sk5T#HBWfP;knmM~=eq*?-s?k6Bf<6yY( zsdATy3t|F#)+Qr($U(PTV(=RGflhXe>wF)!D9}@XJyd4 zY(HIy8EEwwK{^NfT%6!R;3)b|=B&F<5j^4G%Q6|9&CQ_mU?a!9K=71Rqr^BF-F z2Zvud!bq1Um88Of$}b4AIk>RZ3-WCSnGtY&$TtM9ICwNz3WWyK3<$_Js6gGL>ff6)aJ z`;0qEDh#n}f*_xRWN?8!E!O7}Fyd4*1O*(7eI@LdG$^Fq;b#3>B6!2WI#X}(9Mz7V zINj1V2;OoKrsM(EgSOFro95c~2;OlpcCidjmg~`3ss*MU5xnO>;gLOjR?(YD4*HW- z7X%+T=sDI7I+ZqkN`Q8+9tb{iFhh97^0_`w>22naYA*zZ9Q3fY0tJ1AR_EyE+oV7Y>dFI>7$bbLNmHEx11l!B-CYs#}14 z!*n{5_PJ&(f>I7n4i5m0g86j3QKTS3P{x7eq!i9?-*KEY>1+pG1m8GV*vt_|f86wn zfM#c>ASmbH!xJ&Q)EfDVfZiRaBlymN?Q~PvvLKkA>ErEYA*kTMG|of#R_Q1@^XznF z4uVP!TCBB&Z$FdhAIP(>0fHYK%&4-5>yiL}atwiu79;q{!SF@GCy}$xA0}Yc{ACEL zIB4C|614g^=}o}Rdn*xCbD(ij*bk)llHN5oY*~Zg7YB!hCFr3`9%+#ZNqsjUsNtYv zb7xRholn=RC=K0$pq7I+3C^%S+=b4A_-AiJVAf%92gP=Ziu?Ag-D*5y`_8?4J6=$b zgH@Ab>LgG0{TcTg)RQMWUs@~bw|CtQ5(_(YjsNZH%acA@Q6m4_OBN8QI`J=1NIIfd z<)Wp-8ql4w#T)A2AM@nZX#?kxP*`AFC+p9X*H=u@_IUYa5upz+{FMsrt&9oKu6%i{ zGs%-(FV)dME-_c3#|_7w^L`} z5*Zz(pK>}0&#O7VfWDc#LG)K;dPCJ)a1Vh62X|bh&|^beI(GYI*8>EW9Bj>z!@d4H z2a&r<6>mlC|IB?Kc^%$tv2N!9P~V2g`(IVP2X$Xs-WtwhIDJ4h|{1g2|U1%A`W%z#a&^IEeRlfbwRF^jRx1=!L+W zgH6KjtpPrjG=S>$>4)G12l{dkkY5-(iZsb+pBe%m4m1u6gYKW>=xwIaqd^FKIq1L8 zMR@7ZXG2oKy8SQ&ejFGVSb+bYGc->wR8vRb&%vHZ3E0auXa}Qqk0yeX9C&oMfr6#(hJz0u-Qn`IYI?OMZJv%Gh=aD;a>&0aq1~{sUo#N| zb5Ocj23f|ldXQtd)O`+uvm8Wpa)tEIFXj?(an5`M=Qvm-Y!Y=|wTX@felu8zAcO;{ zp$&9-bZ`}^P}zDZf=~|bjdX@8-&7Lp=Q((AR1T5T)aW!<=)NroE^y%9O$L*{m9`=k z$`rRDxX6J*tP3nJTCkdcj1fB#L~_t`vj@zJ>_b;(Y?`+R!6gokKeL3j3-W_Vg{k@n z5JYiM72yc2Ri+OhU~Pd3g3BEAd}a+dFIc@LASUP-f-4;C?BN6XdG2cni0EXF;3@|{ z(`=!6RZb)UT6tCou5oZxcutQE@T8+qs|HIDT<0K2ECFkc`*clOc!C{*Xb!YhtRS{q zPAzHD-4}8MH#le=X$v7)Y4hOY4-r$h=J(yIO z{;>&y1P%3i(y>X!*oum&$tcrZY$Dy)2? zjo>KqkqRbJQxRlvFiIF%wYoEbCf2j_XCQda z!N8-g(5!<_V^X1f*(?MvIB3wq7FKk*LUa9qfH?>ybNbefKl?xGMaWH3|Ee!awho0%09!n8qbFg!@1ez>U{7eqoTCxJcD-M1h@&b=r zwQC9JS89mhH3z?DS%R@i@)ZKa3)UgX;oyvL;+zlY(h8FzHzLU8;M+9`r1Vy$oz-s7 zw;;&lAgF;S^xo8$roG`Kwj;>rU}lm%RDJcPqfkn7b|NU?piO`aq~=E3kb^E6xCg-- z4q7&Fgl|PhbqTPr-G|^U2P4`DF9@G?&zpeg0S6JhO&%u;S zPT=>TLXUtucaI_Xz`-t62bl8J{5t_dKbax;$ibp94&d@)3muyXRI)-)$bq`OHJF`P zzK>MU-DQK|69++^9YMji4}Ig+hWSziMI4CQOW@0oUZ;%#_*u7;a1U%$)iV*SUB`jovSZTp4oasRBRXIOklf|zd#}Bh_}>;jx0N?LGq;et2$V3 zp1fxlFBp`txLG&pFyhF6)~UI<|SQ-#<@1RA{e$+Bxl>Ug;f3o-Fu3 z^bdJ*+<=$bVNFyfkVv?rMP1o?BcU)q>FYUI=fMt_?gW?qFIZ@GhjwBekCvvdOieq|W@;&e)2 zn@x7cepRkR|G6_(=S-&d`&1=ovc+|Br#kiDJ7ddcjnvuE+y4e(nw|g1gf=>tOLQ(3 zo9`m`lKwvqgI1mWU~;o% z{YjIYwuli}anM}L35r^{cPAh`S%N^!LHEa2(B$h2RRW5Y>=9UVFsD=otxJ~mAt30S z9Dxl7(d}K~jH{{v0jK)AAdqlirC|$wY8qZ7Ak4}gfh`Anb_rigmwVIx!Nwb22&5d$ z@fKct*swznQbF0(2Z0?2R_XR|=Iw2oAN8XB5!iF^p@|fZz_<6Lf@+J?2xJ@>n7G5! z&(XaIP?QHDaNr=!$`T&EZ(>TonJ4EE$T=8c>;Y#l+tC=ZacnpOM-Kc39ECP_o4An* zYmzP?aN=NVxD3WF)T8+^tn3m3XAYJ;kim_6T~Cq&UN)iH34m2w4Aa;)9M*=!V-9zBTL2Rxy^!ogrPR+F%n1;Zc1A~p0aB)r) z&GC2L9wRux!PV|wa8);U3~7>HmuCokI1qm|hrN?VeI=mU{{;eH4yyGXAj&9m3IT(f zXCv_Az;%oh__XM)K!96S4g!A;lt(&(W;^L<0;F~Y2u^Y^LwE~Iznp3l0t)xPM{tUR z;Rzm)H6oujNwU8XK>!B<5%wV7^Kme#&@JXOg3}xX3Ii|$ciwg+pzGeR2m(1c`ql*u zRJ~Ktl>?5!46VEA-hrbKRxnu931tMLpx=?0s=l1C?E*oK&eFdSXtW#bR=1; zuOfm_4$5D zpo6~+q_-%h_tsgxyC68vf$1|VP}cMGA;*v#&>g`A4l+hNLWdP;6$H%F>4o4T2UeY= zaQtEK#{`7=_eBuNLEK>rFn-nKECIsoID$(Y*ngM7f(y}$2v}M^2tgDFGauMPL5Lx} zFI9<$A-K%JN@quq`RyD^D)d{Uf#3=UwyW&mU2;SR0(>g85M1S8>PcZ>_`E)yS=n`A zEP`tsgp87b(_l~f7rj?B0l{?+UMmaRd$NLQEU$g8gCLrN%bzS@g40M3atx0)O-68o zgD+YV@SbgakN_PEKoG-0NthiB&U<@`0OfK$1UEToxXu$go-U?0-nwwUsH3WTc?M-a1(CNI{3yw?uvW zN6>dNn>g3Wdg8v2x^wdMv_o1aN05<%B^Ulmh4!v#7p`souJr>lQebqkj{ae!;I>zh zcKqaiY9#FIN7mUtjTB5aAFoq3DK(1V!I%CAEVMeq$U&!gdF2dp0Yz>*i`PRuzkoV= z+k(ld>2x%Bz~N8?w>j`hk;1RCd5cMf=6(?f?r`9%VFTgq-qG&x3Eztd5;(Xfvx1^- zo2^NOOLw9WByzA_7y?&K{zyk5^)_Eaki@}v6$@B%>|f)}ALDKyNai5S*byvpN8Ke& znz8s6f)ozaa_nHcLl?RLFlN_n1a~>OeMwj#e)Jd3lOdsr2<~xE?I?wmw-#2UNtasR zMR1=3$0;&6(SGp(0`d(~5u|d^?V%mm{^&;g3l3Ee5j^0aNlW3&iO0vcB^6-R69j1- zTz=pHBW*8f6Y%a;27-qibX+Wl-a#!-6Y#t`6Tu@6UVo6nqok>+1e8yGh2Sv%_Ve6hR2%dA0;CU20YCLG3ypmRi z-~|UtO(dW+cogloh3~CEkjcT@b#hQLx&53Rbmj4%2wrksT;57%m z!dxM1ei9wb7#!9TK@JBqSK7grjZ2)*4AK|Tj}GR@%Cuma1ZT*pn!wD0ghmLzPUXCn`*lwc*DWGslxX_(o!xE zV5Hd#!CMYYlbvCUq7og!2|dsk!8;BVgxxwvDl3#pg(2mt2;OrrOX>!T1~}4#j+!+H z!3PdLkGF+3F^9*J3eS!XMevb>q;WFP(VjqajQG+B1ce-UOC6!r*;XLDz$T+k$0lAnKM3R9iy^0l(}wBKXO{#Gbao7hP?X2ry~46+smTMNh3^ z@?i7r1g!Mij-Z-@hTxyGdYe&JJ4P zY|n!TYB{jAl!CL?0{Wls6m5pUtRtIwPBOHDZNvTdkUSYW;?ZwVPo4~qG7=T^H|;@U z;n-<)uD(23qkBVS;`cCtz>sBsfkM(bHtd(^$Alj9NS^G!qYl=aC;$JzV>8Q=lz6EbN?$9+G}rnR@+ys_krZe&;N)1Ay01VoS`jMcsiLxLa|3( z*+1pUm-mP2468_?ADmV2{2#E;>iH8bb*xRsq>w*BLh)0)9?ba#v{v}MN2@Y(nliQo zyg*>V0d({Lm$v@pq(W_KHUdiy9Qw*(efP|H1cd&`L14wfu)$VvT6*UR0nMHiAP{q4 zI?x7gB)+E^VD`^<2&_36lP!U1Pu7hm6&@BABCz2A+?^r&_WEuFIPEA#AmQMOO!$CE zi!hpF6mNV*V9P<9V^Zk3u~`nO(0Woi0x1U$!(E}x!TwhW*scBpfgK0w@9p93ju9^j zSQ%N3z@CGROKjm-BUkz~Px(=cK*m9C12Ih9oI>X^p4&El{Z9|wfrFv#-Qe-mvlQgF zZH7S3L5mj>7}|N_A#w~yE-E5$9XWFM)&_B?c+;#|@ zIVf)E03JU_ULqCNT63>b@Zz9NvK=gNSrSM8{{JbE5h zj2(l(hXb9~j^Gmhmi|T0U!H)#mxIXRZqV0t_+HYa4sN;#{5Tjbd;&IP{!conWV(48 z0)Gzf3tOd@=K0g{l}3p(5uD^;Ut1m`% zUOU7H!ZwF{m(F$fbaO{= zo`Z`)SKv z2{>7H7r}K7o>oaAW5!E*Us^TsA%bWQtiL$Jo<2&|q(Y|SUm>{3fxO%qGQLlv%Yv@S^AN;xaC?~W3K)r@oE*cvQ*RO6 z;-IpR9kjY*OV2~CQXzsk4x&~#!pyQ5dh+C4{Uah-zYt#%3tOJ5 zbM@uP%$9MYW+~H_6IdPh7bqm1D2*oC<5qwCLh_{g>pEC(o}5s5Pc+O{;z2^;(&{={ zf1Zpn*Vn!_%*K+?mtBwl{(0)5LVLwl5!z>_v??Qc@>jPy`iDIEe0iz%jS$_LBu{?t zUT6Q5C$$?-(D9C{_(<@F9{&RtS}nOL(@E*t^Is|Bofr=|o?k!{Osv88c?%Md-)Th=0hxYh5F~TZYMePZP0_I-pj(Gf1SuSpgB2KV zU($pC!)X^0+~uI3g&C}~E~QUGKesCg?s2fVn*<_ay2OwQyPDoWaG!%EW{wa%Z*c|z zn`ChaQaR|<%@M}8-!YSbsk+Gs9&oTCRai!>Q!|wS(a`${(m0s(NdlLKx@;go@7*H= z4>>Tn?*PM!@_G^=Zu<B?Ppa_6ETd4nFjfgS|(7CIR^l9}zs|AnlGdq-w1AM1Xo=F@k3tn3dUr;*X7D z0;WGLN07n6EhA^x-MP_h0vhW7MDUyg?Gy*ddO3>r&;#@u z$|VH^nH;FZSU`=^%-*C)KZ;r+c*%jzPIG8b;zm>V>2690vN%u<7gi7s8KOce-1^W7 zK{f}=A9z4hvxBr(715^$f>#_|O|pU6>wD5@^<3T?!D|khN7=xM(aRc=CYdFwBFN!D zBhMKY!srnMw9X!mAeVy%_bfpcoUBPe=#Wte@;GQCyi7P%_bu(Wy=^oeK|TlTS9(MD z0o`ws3WhBwAt>PBLWCVy-9Jb>dK(S_f;Sv!Y?6ZaL^s;u?(uXMg0~#RmdoKom9idb zlCg#Xf_EG!th0g+p$0ThTGlQ`@ScNN{e;`S)`GXB!jSJP5q#jlw4o~;Z{hWmfbT=r zBlyU{77IBX?%n(e0iE@?A}Hh_+R_YKCx6l);6bS|f=?XWyeNSWO3lg$m~6NYK@kUm zjjZ5mg&G|wK3IDY!DkNC{jK0c$8b|p;lb*o2#Ps~oM#OQQ;z>2;OHGQ1SK3esL0{= zgGa*%Snq6w;0p(mwKg#RyUjoX9va&s_{xE1v<&*DyrY+QKYa%Tr5t1l!-uc)4C$@% ztbz-IG7gSxv4(<$vr|cv%+$OPeB)sEdNJ%+)_WrXqJh2$$~j07cJ~(f-H9SVYttzN z-#O697G6QFw3Oakn*;?RsNi7O8Ao{iekkoPnHz>7sN^7`u@l^o8q&^*?yyS;esItr z+XmXSyhs;-wN|-~;3o%f4$5G)($96|plh9PA*kYD`6WBh(_iUEz}$`r2&y^wzR49d zD`S!gkgiKX@QVXctp)5^m8MTXx%2^o8V=IexxzLDcRI&&h?dr>u!#c%@ zuD0L4g}@^9zd#}B*#2yy9Uh`Mo8-y(?RBu;JXzZRfvER)waz3I<~rBOdP1SF-nGf1 zS=!CitCR@Uz4})ww6`!aLi+GNMWQ(cl zI@11)X`a0EzhI%&6Q+xGu1QUglAW<4<(l8;mFo@BPzv{)gO+-tLwp}Mg;b6T)XxHqdS)!fF4U);u*u^Dv6p^Ys)ZFPd>yH1i@!{bH@`TzXW z&H1e%@SGfuU+C*j0L)iJV8OwOITqk#;Y^>c`-9seu;gHNmJ1xW^w1#{>~?lQV8wxM z6EPH}M|%_9?~W?Q0|MshJ!t?>|jw! zU%HX$=8XXeBpht3l*7@2#fwOjlnjRYoR7eXgRPs6 zgGt^2+SmNHdocoM4hFw*2B%Xkr;rM>@2^1M!a=v`F0gsWRW$;Jwp)w9l>?_zM;JD( zgpSy#`))ws#=#mtXDB&r=u0ZRc)A6FI|nhsR$9@p{ig`H+s_z*2M1#=IKu8M7as!b zJM2T?$w5MZ7@D>I*DIElf0-cg;-I9jFzS>n8bvDP*P0^m=HT8CKd|YeO_R}tW7Y^x zaL|5`JM5@Q08-(0gdBkn2j<(Y;cLDLT`?Hr?S{aYgNzbK(4Wwo&KCCUcmjbR2j5oM zL$><0i=;`}ZBHTa=OC`u0p505@qvKV-e(Y;T3W6&_5Dg8fO(+op!ii0_aEx|)8 zo{re;KN^W3fP=kp!aC!@bL~izT6MdI;4}w;bEIHbJmwhztFvPe1ahFX-V=-?e%vF# z`b0c}GaR&aa)1MOH0Wr@q9;iRf;h;3C5NxEJLrm-)w@y=1anZf(-I8&_$?<*8uQ>G zg0mbXPZPtNGBI5huloK8f^!_a8z_a^Nxv*fg@6lL2tqiB=;s1=TPN%%AaQs;f=~_; z_d9}NQE&qSzMp@KAdG`~xi+x&@ycTa+3mhoTJ_WK_164?qO8Ye|_@}>gk%QTH9H3tx zBYGYRcPSu<M7*i=3t*h~>cLvMpFG z2&Oa7nMSh^+~UAswhd?w$PObFe45Wg5XXVt1u1mC*8e*hDd;yp=QpTlq+t1l1ESOJ z+ZK_)ue_(u)i+Y$KQLZ2Tf8}&K)KUjppbNWHB`{vd2iAbGE(sKd>yQJq@bkcwn*)8 zQ2>eibNc80KF0b-3dFDVwF8xmP7xY4`L9%H??a=D+M)Z_<&%+u@F{il4K%>Q{t`IPJUm1b~4h|i*g@y_3 z=$~Nh+e!q99B61rVd}dix&~|c=3fYsI4D^mgRXwB>A1h8ZKF5;JVlZ@C|qd)4K)*K zH*E8?<_JnV92cv@>pfvg<9b|9NxE+Ff9L#=f2PY(-=;Qyz z?oJ5qbI?a_2ICy`Pm(5m)$V~Hm4h97o#Cvcm>$FBXMGSn;J|yV8C<_Hwt!S9Gg3p4 z#=)Y4j-dJ|O^X1fEkh7I}!SrL%<_ z*DOHrf`hzmGO*SUq3a|>7ndT);Cn}}wyyASsu$l*X;_`>m?P3K0F3P)*~f_x4(1-pTJ+=Fcdj4QH4P{2W1u+Y&vsY+MH?_VH6@P-4eYFl_16ip|R zwO-jHc*{XddrP?APKz!u@`2s%2;Os$kuHa(69)Do2fc9L z2?QTFSbokD-o`K6OhD+hlL$U?FiCj(_Qiu&=*>96?+k)M4l0GO2#pxkt|O_?S1$y? zCl0!(TfywT$-@b-*l->}5eFY)#Ngq5VFdxYu~7&Hq%+Ze*`yMnXvTmbkj?ryYgt5!vgVJ=^o@ z>S_;3l2lq6BrOR^QbbCHL}jEwlG*Qk-p|`j-{%ZJ?`XCjA3l+Fyd8hJ&GH zX7FC)J?&LCaeas2GY7qe7lTxtQJY52QoztE1hpLWA0dHOURo^)@Y?+e!50qZ3-3Hi z_x<8WK>K@N5PaoeYk(6pf96TUo9^y91m8H=|HKBqy^NM475ry4EB?2W_??3+Ax{?j zy3v8+%go?vScoP88PmHXsN>*5R~eWdJ~fGe zqsNsH7|7dcC!%0ylRy}Vj+0eyN2>)^^Wt^ipyO-f0asf${Q}KXJ_ytswEd{Gvp>YJ{TuVn_%7K2RG4$7aK^I4q zn`R*}Z=;%#! zB2B@)F9HV+#+TTE$@}UVq{2Iq8UjZSnyWa%(1a&-1hkYJhQNt~AR$jKKKQ_ffC)`T zA#mp4*+EAr(Rn?cfS^U=5x8*hW|1?rQhY{3w6D`d1g;#6JY@^Eri&^`g(#UAfg1;n z-dI8Y(AM-H7o$BBfjb9*3J!30v2_)xutaAr0uK(1_t=8(*#2~sen-Iq1SdIY|I-pu zb$ZeeeRQ@C0#6Q76HP!oYO6eHQllze1gALYB)o)c`oq0+_W4&j(-0WDAAv6iA)0p3Gyg&YsW5QD5d`Nr z7#Sz5pf%4lCt!CILj-;t)Le3cZvA%Ch!v$8DnSD zVXJ)`JP`zOpsp^3>TK5)q)BO8&L9ZpAkp0cI%xInM?kL@=!ZCU7FU40PmM!2*NmM8!3hB-S!V8AiygM!9@;g23tbisowOl`^h{8K{yAk zO{}4_g@XsFaIEn)1Q8tkv%nNiwf%X90H2w+5JYnDvX2F<72T(!P^Qh&5JYicdgBs3^^i$ac|S^6OeK|4?#2sLpzzlhaTbj z1c)>W5nSQG`;rBmE7?HvLLl##*0fT>5VZ zD}jTUyH=1SJDx=L72Ad!O`D#8y}d7u7)IvTV?aE$}Co=#x6B6=aIu=B10f+P-R zN87=5S>$+fJbB%r9yXXK)4fwf3Qd1rAfYhia=mOI6bkEF|M!ibfw!j6sZE`Vzfz&S zU55l|rd=&HAbC<;Sx^6vCnI{7YeuhXsY@bZZB@PfQ=UvvRu^wix-U;~@`wL`g;w7Q zvK2S0&N3qxP^&)Y@p`z^$ONr11IFN6PnTzb$8dO9a^*SPP3*HaeV*Bu#SO(H_BL4#qjz!v3@K zFAy+dj{<@m4jzBC7xqBgwISf@gl-6OInZ1!g~lmIX$BZEsTYDL9Bgkdh1HHap`?P? zv@e1@4$>Z&!O`(&=@?PK;eiP9IXHRU1}e9yE0GGtc|#EtaIjZM87+G~r(GEFp3w-N zaxkL64#u0Q29OH&6V(ws6uob~;4(1E5?(>fGm_?ejF?kn)Hyq4*A%ToC9eVfnytog+ zTMjl4a0P|5P#V*9i;p09$3c{nDae-v(1^Rn*bqS(2V0k$L!WUM=&aSiOj88!IoMoe z33|bMCy;}lzSEWt4OPA~yo73>gHaG+vi3R%gybaH&xIVS{_9E=zCKnrh? zm`o}xadJaY#esK6GdO)k?+XF4@tz1ia4=6;72GTCBfY#^+&GQkBL`+H>_BEc?G33g ztlAerH3xQf_OLh0{1gG^=>Z5naq!y59?W;?eInq{j}Qbk9CV!|gDah4w-WGaX(WQr z9Q4nWf$opCw7+yE>oS5`4iZX@Vg3F7^ciR8auvZB4vNl8VAI({OGuO2KmvlV9OO7V z!i62<=$-F+MiPQ=95`5+z`O1S^zN;0eiOlW4txxy@a~j3eLhU>l#1X72NUI;VcM;3 zw6os(++74eIS5-WOe_y^p@XdYYcmnlaWH(c4GbUg$%&k$fYK}k#@*TcWO`2v=xDvX zh~!Dtsj6@O?VJdpfjsGMd`NUOe=+uUX(5}q!uw|~l$BkxZa4;`wYNN`}uf51Yk{o|a(GmnOq zke#tJ3Jrf<4{T>_Sox(%s&R8}k!`M4HT8n;jD6l?y&2TD2$NfuQoWe?UU({`bw; zQ?IQ@ke#vW>+8{PcgAiy+*mxd>CO#gi|ZD>diDFAv6g1@#P`OkbSG@%hCec)joD+| z#Ha0V_9VB4rBP;h(oOiSVVI&Lw21Ca$EG68tq_=Upp$F|TJyY)kP4cnwg}8P$kuU$ zd(K)d2pIK6hQOSIjS6-!^j^(v0(_4;A+X?Ji-iqzS^j7f0eL>I2rM~J&^Cu%>tdV< z__F6D0xJ$$wzGu|A?dVpno#0}z?y@@nl|A1I+l)TXDs$XV8g*@cT12{aHO5n)!WV? zkZ@4&(hAyYRnH^GaL?Z#fh`9ordoq!)De1Go9+lgAmyM#rajcG>q-Zx_hy75u;ak+ zg$+y?I+hN=R4$7^Amd=Hrzc$KtGbOG!@R4P5ZH5&6=w^NvyC1SkkTy%fddEA^DSYe z*|AXsY_N($;K;!UU1ul>d$pK=i;js1oH%&uZw{tP%5>fRj@;`AoH-aW!~*gy$3~C} zMf+|caN(d)7h71UBsC^Lu1hKcR}QiayFJYn1={FI8gSpgl#6bHnZ_9GT$KZ<{-6;6dujH^_c**#qSZE`3-2{0#>bxT?yzuvkHL^2W4Mv;oJFCI&oID z>=S~s95iX|2J<%9pC%Q;_I*L%%R%8H2RMG$kxr3@HTr?z90#fg%wg$T@8hI`^Y%t> z|LvUmaS$m!3T-M{?j|5eRSv;<4m`J*!>YijK?H=qYk|O@gYyz+nA$gDECC<#+8_wv zU`eVJR2DXCOu#g=4hRA{@Nlq)tx+!F1e_S$3Bd&pvcJo~ChCcZfJXUU5d?9N)ZGnw z$3CFh3(|TZ2*uH-2<4!4sxy?jy`vAs zqVB2)!Z^68U<BTNMnZ~2cge}~dkV2;yr4vUX zh~U7e`El4f)^!!BusLKbf=CVqbTfw~GuF`|&ww2h5JYjH5M}}0($>%}+|2PJ1eZAI z_t_1qtJ3I*{^D6v5M1VHrWB3w19YHh);oFTsYgxOQ1oVxVh2RPYs$w^2 zS@Xz;hRjm_X~;Vw^7 zq2GL61aTZBTRT8!WhoF)*KQ?(cn)p{OJG6!x&i{0tE@$kz`@%sHn2>xC!T=JXL<+{ zIk@}O0-_Af>1#WT95*4j#=+0-mT;-Zkup-jYR5JNNgPC!+Qau{v!lpJfudXDFVMh9 z!H7pkMK_wN&me*SU|hXxXr#dK=?&4P%xV<^4WIu73Q6bH@D`dH0qQ%+NI^i;Yrk6B z;7CEhkXs_RM7J>{?!Qp2mko~;=oxBjmZt7MM(Cb3f2BfutDi<{E(tKJAT!TR*VWTM zj1>GYLuM$=n@z(0$o2L1Pa_4jFK3H~J?Rin@DaWLfQ42oopBboja*3Yz}c&B;90)T zFQ8pt%)zAc7Jb&vEloj?%t6;aR`9fZ*jjRl`W#I|aD#&$jjdpz+jTl0dAWB6f}0#z zPB{UdRsXn<3bAev5ZvOR{{R`ZI;~F=>$`E;2vRtxHL?ct`S<5U@~Eh~N$fmrhBcSCC(80{nGeAxPsOf4(rd8`4|Rrz+0V2{h5Xs?5TtWp=;;Ch#b0TkXG=~wf_ofnnJ9&p6Q(>N6+9My zK#;+~9urF#vMgi{0nNQWA;{#w$yj)2{r0GP1RRk2g5W*}Rh8DTY3NQR0_xnpBY42U zfgC5;7^h8VshY&sA;{w3+*LDBJoiG4RFH0J^6ua6@Iww3Ubly?rJ;EQtg&u};1LJO z5hh@M{0U8ap$}Uk$mZZ&stwH5>_F#VKHIlN@R$RIky3DO^8Pq!(sf691UVdd&b0>v zX-oR79lfvTm>w99;YE1h2glY4C~fJsQCa z4)lc8b_=UgYe= zGlpiZ9_Eq?ZZa`~Vh$t`hF~xuU?l-B8%;w{!ode;2WT|$>P&4K<~M@Y`wP0vze$$SKFI7msb290}@Xe>Eeyb!@#4s_ND@1Tvgr1#cO z{T3s5$3e{xTWF$p^Bg&7mxH})ZD=$ zS8E>upPddN_{4#il@ywuGNjMx@cqXS)Nl~JR+u8ScuwcGH|#Y+@R@_Jl{WCC>$q#A zNtw4y5!7<9vaJ-{S4^Wr4Pow<2)=O8C)fr$U7SJhd?Hf`g0CFBZsY{LHkfLXCe588 zL-37*=fW$p%nu%-kF48DP6)npU_8+kvK3!lBo%sHb4BojgTul{<5qp{)`$RuMJEyb zs?|l;qR4)As6p~I!Ol!^Co!wrOJb6Xo>#vqJ zm?!`Djh{2?EO(MnST?aCDTy!)ao@#uRQ1SY|QlY)6o33bf&snmP|IzZ~PBfX!UgOQ(|kqu=C`K+baEuXW4{b zKr^arU}5tb`fzqHZ(R0oci5Bzi)B(!j+-){RA?9241pO3#mA3;#WM9c0v;E%LSW8; zaz8sbGo_LyrT3og5Lj@qRAL8-`#v^dx;8}nb7{$$`<0}h`G!Qs) zFvZgp&cr9s5WTBF6M+*4ej}{FLZ@yEX_95%X$YJ-Xpv|ETF1uF37pQmXCiRnpyl8b zaLH!kKvF@`Yc>K`4hB4x!t{z|hY8sEZXNiCUiU0?dl?XgJ2ugE-g{|)QAt2+` z8U&{}7{0*~%->~Z5zyg?9s(~8yj>;mvCD{F1Vr4^M{t^ht&eSB=)quZ0vwdLBJk$m zv9O0@x4iKo0!%A*AUMOpZQ(49ygP`FbM^AsgTRM_nL!RPD%#^2sW4S>AA++S_~o0! zZr>wxG;oLOK?J@W%)Raj#^w{6kP5+mM-ZIjz-5sO3_9mMkpQ#U;|TmX5S2+F`&=^Z zRaty6LU5h~W8sal)u*RelL{}i%n6F?#Ksr2rh6iw9pn>NvDn=6@p?M5Cn11Z@ejN2}pfNK#wwK1i>8K zbQWF(fA>QI0c*OsBM9NZKhPRfALSVnAXnyzAe4hc8%^M;gLxMMiU*%T5XM2@o#xPE zVYdeaEFFFh!9@kYvjJzV++@gZ4eksO@wVF^9@l-ws^Xix-#C=RTIZC0ITZlg;G;`UrdaESw_QYUcH=|b;IsVY|y zT;^byu)Swm@rE~~NjKyZ5JYpJwc8e&+0_OTFnmW6f-4;OshUDqpLz6lUt4|yK@0~i z_n1TRIp;~F!mxcQ2(EH4cajNs>Xpe8p#1R;f>;iY3EzY8m^hi9)?Rn+A&BE3X^0dg z9UeH63OoHCAc*I{Z>`Quh0aN{j!|^tGKkjC;Pe7!v^!DWmT3)+Gait zg=rV+Wy5*0T3ts|ZO2|Wk|!S|{*?;tmDjkeIePy;RU}WIxK>a9kS9X}nuy2S1vrsN z*e0po{wYuXZ+`Mv_eI|bcKk0`Xm#dgH*vGAlFsA;lKD-?>)|@Tfb#k}KzPBtF9f9I z%|ejO!9Uh^@G+^REdg?#^AOzNplkAB2%7xQWdc_0Ux?r)2hA5qVSB57bY%7Q?8OLf zaj>$V@TE98&)%d$Nw6-06b_)RJ$UwUqJ!?O!d4=<&4Kk86WCdNOPN$qo3R!_DhK5+ zOyTaUT{M8I4BUX=4hIJBB(TJO_jpoa+VIT?(m2Qp65cR>Z6_T=cOSPM!CekkopyxN z*%m6K!h%)15TtVuu5Shjv(r`)U@*}D!95N-u6Krz(s(*+wX*F21Q{HtUT_vxeRUZ` zDhz0I1VJVT(?3{4cc=fa!+j^?ID-2e927bjKfJs4AQf6^8zXqY!7x)>NFKfXHUU?T znxUZ|5Rl#CEP^}^QqSALpvg*)2zX=YhajJW>y52p!8WtG z1RQG_h@gOjaT?YTa_1HuPR^PWjNmB;Q$rn~CRZ(;R4B|1L-34)ksIvctnUmuAk$Yl z62Ws0{37jOxBJ@bq{99tmk|_lP~>3&(bXk%nb;?T7z8gk5W7nt#64#MsnEk)P^uP8T)fU%F05xn9+S|)=%@&2U*>~c>*P|SgSqAh&C zy=ox=BbufmDB+;|g%pNm`G*luIpiLKQV#aEmcp}9+E)qC54exuH3ur!-5_D$7y6I$ z|L_pOo8JIOccH>(+8us(Zo zSE@iN+^wla@R5Vrb8O(1^1=*4mQ|YLT2Jr zI`r1pP7Xm02cI2<4Mnxb=_9L~aZ3cBIcR-a1~($tbRY+v{G<(nS`JpuGzTqDmFWa% zU+jS33kNzgWYE-JN`D7stxgEOau8N*2?@b*v7|z~uH6uPS%H9Zma8UWl8G@UHX%k>Dy&r;~91L)Gh9@1@bSGeHttx^#4%RGm zfYpyorV-HT)nEk1J=pxDzPcHdhHY#@^5pFYM!!G36WQAkO=LXwQGgwjN2u1vNP6SR8M}hGgePeS(JVv$d+t! zowvB&{BCD#ui6Wu;BLLG3DVv62PCwvY_F2$jAy-Dke#t#{tx=?&e&rbEyT*37U_~L zu2$RYOZ|Rl?97$g;?0_J3kYk!eV^9-Magci4K5}b_Tu^|&lL@~yoI5ImgZJxCLa(jg-;)Y0AG}9k$-&-*Qn+(yVM_w))T$6zao{n+8uH%M(N56^?P>(p z9GtMQgq<$AA4r9JOKK6=aL{hL4a{q-LB}Fq-TH<=!hvOp8O%~Gq&@QaK0guIa-i|R z8AhjDs*)xZPi#{0Z-+w4LCPjmsGL`nO2C`qW(e#!=o@bg@daWN0)lV0LLlQ{exf`0 z9Pk)TK#^Q~1oj+!=DZJz=4C1DdzCwoC56>`R?h0z>$MHJ)|%{qW5}I z!Mc?q0w)g4rdz{yD;Ey}+J`D3aOS}9wh63nh#7SILX0LM+?|9tDMHc?Zea&cyh2H%mk8DHuWXPu;kT51gALIdPVrQ zOn5jwOZVDMM&QN4;!*Z6p7gL9U-@2DZ*$jlhosl_X2p5i@ftsSxI|9>IAI zY9~6tsXb@ulH01|`Uw0vu$d<$)J`W>k_txUTMz_rP}tKE7KC4DtgKy_D z+)0J1dB+fhaIkup1FXBK8BIX;NFxNH9Hbs`hxJcG=(-`lXQl|kIJg&b6b_wJsUQ{B zX3@2Vq7#Bh z4j!$ufW7Cvs!5aN7rP>e;-K)Z1*k3Bv6O&&bsh*VaggF8fnH_pvj{jC>xJMl2XD99 zz`e%HbqR3X<%1xagHaylu)=F2?ZWjj@CC z-u*W43n@`&L%JxT;@txR`@i@L6q3%Rw{10b_O-o9MhZIrsD}-X6ignKC)%grqC(=n zfkMY$$Jp>l!6L22n!9`3nh@%&_E##j*E26#bM&gcT4bbP;h=i@hmivJi*n+vC!Zf6 zVZY%2*guUFeDj?xzG!{=I>CB_>kBuCg;rk>yNO$kY}}1pK+T=I;JLcaFCc~0PO!bW zwHE<_S=|vNb0B^tgNKguG6~4nRzh%tgZRq)(BeeWMWE;b5fj5$>jy!88-^SvVF!8V5`4Ou;7aQU+;~{3Ue+cRA=W z(iTeYH>xBc+;$RzbPgcO8EULU0|{8VWio<$9B6-&!qbw1?F5XyJq)*yJy!L$TR$k<}?m{bV5wjMza2QFWn;D^#r`b!VC*GG`c!PBq8 zCy~X6Pmv12a$6BR;b8O^d-%ugDT!3z!wuG>P9-U0^#4(zo= zP{e^(dlOjR-H6UonIzjFc*#N66T;TP^J6}f3VWy8A$Y}se>*9xOPr%lz}U792#PuI z)OQ5$Uix_i^r~}4P{P5w*=L}?cNe<)v}L#(f>I6+n3zJ~uygePu+P~O!D|lG>V&-m z=B{*g)vHb32;OjT>a#tp^?TKk9K#D8Uj%PCh_JB*+0dzUG_Xe9AHh2g%v#&Ru+piT zq{36f3kb?M2o#3itc`936Y$L@6v2BAE;YA>c=?;P1kB$PfuNj&A6Km4jnQmd0{V`) zjG%&p8PlA>X@(bFU9~+n20j`y{LUTHbI$U#5Md5YjG2aAMg1)dY>vbYt}7YM#_(0HXi7&YofGjYJo zVg%ng7=Bg)U-Bj%Ax%>5{|3Pi4j$W@fumzT+UEm@G6X+4IP%^Cz8~=)ODZ(GUx}cO zgMU^#z$JZ^O9VK$RwFR($!4B=`q{wp!<(!~o*bVyr|RE4DS!rMo{vnBie3f2?Mq_e zKOgH|LwT}QV!FtEXx2&s54D{8tKe^;kaWZ++i7mMsVO0OGEk`=Hkc>%{qjY#H?KNE zLZSP}df9NE{NK)4@AEf~654piU#ZaEp)OZ6&&##yNAhIQ|Dk`#ldI)gi^mj>Dj|_@ z%*^_-4MsvCv8Tl^5q}+-_>X1=E?R1bXci}z>)*C*G{mj-%uK&Wv}%SSaGm+w=?KJ%cUKRF&(!du;xJP zoGtWq4OApeDn7gufei=kZQLO!=%O0|{agQoK*GWCV+Y{ysWtSMPL0`zz?OqMax%EJ zr2H+Z(9`!20x1XX*Ucg6MC3gJPUIg&V8=mW4-2^5dlsF**==r!K*oXFQ3tTom^YAA z7^`lIz@CFPaSrf2YLpHEEm~V5aNywJZChv`xugXFhwN<-IC8N2nj6$652gbFEfwq# zIB_s$jSoCF13HF&I^F?+GY27t!U)dQ^cSQ_2ee%fxNu;6R|4JFRm>uwZ<#v+R}Qus zTEbIf^$7&XQaus4anQD%B{;RLq6dAfvo`{F4%W{VmPtCi4J8$Ztv!ptgM+;DW}tuh zNgo3I7x^JL$-(9QCZMP7cbkB9PXZ8la?mx%9bDc+YXUNx2O~Je!IBCq@H#H;Nq~5F z7y_@~fJAfHm=H}faX0Nq1gAOh|7r$nS~LqM6^`_XM&QkX=3I9uk{?Gi@wDix2+nYj zYa<0aqbqcgg8%#k1U?+x-C+TPHST(nCaum(LU5LY)*T#Rtxx=70^;}GMBvN8>_@in zbILY41G?qRZ3O2y=wNFK<6iIAClyY*r6KU+Kx%LlX4*w9BtW@QCW7-Eq~%&d)9ZG0 z%-(Jbb>lzNyM{F8F@gXNuF2WLlp8wqcX+3hhaivxd10*1+(eb$1ZTB;lis;KOUajnE>rupAcN+pviV? zNZ(Rw(T9IK+>snuyIaA1 zjr;Wfpq?g&Ac_OujkX|ef6tCoFyGV?!6gnxD_B5Gr{kprXz8>?aG8Tk!Xo!it@_O+ zAX{D@K{N-UvG&m8#y_+-W1rCp!4(e1ki07dE zv^jK(kMSoJYSafKNZ???3|olHJx9CJ`$i5&kjTNiKnqBpw2}6V?{6H9;2H;_krHST zkV4mf)O;L=Ac+GxVK#kC>EYfaPxj8X`2`xtlc$}fqFyD3SCd%y`g6VeZ7dYhj&8?P zQF+WV4+7oWNq!alEfkW@mCUx9rrRr@lRT+5pdL1uCpTXy6t&yp8$?23=%jktaGo5L zI$yK1it8ytt#$rNh4zjMiPki=GPp?cWX|Gx`iDIEKB}kqz{fRXNF>Z(Qg8p1C+{!W zAr=R@Y$o{O(*J;kRu8;Wbh72SxHS=>B8V76Q(SP9nI;!LET42vW1vCE(iB(+F;H(EEuUbU88k zFae$t9|S2JBxy+CuF5LIL(X03k`hmsXawmT z_&#xjo(J~RS2;FX6N}&;2ls`+tv+pbohD7ncS%5y!NFHAM`)wyLu1K=dr1f~IT+er z2JZXT(e+HNH{C>VpM%xsEaBj)tu!=DP)kMdfP?iNWRQ6HFddaFTYncp76)Tnm_t#! z>Vf2-$N6R;c*udm1qZ0^vy)cXRPzAABMuhL76z(ceEP295)WOLwAVgid6XHOzc zx-9nu!D9{{DOy4Eq=EE5J;4o75?3QuB75ae-?sVD)3x{qB6C~o%_K|TjFE;@jP{z!VYo;G@qpn!w@ zlcn(eMKE0eW!0(*!BY-K%y5O4H>T_&O$u#Sjo=vvTUsB1e%ji@2~e5&8NqW78fi$u zs{5xT0-Px#Yz-f=MB*%T_WyQUFv!?ZtwG7emY zO&|kvdW|Ju({wci?>UHSZ48pyVEPvwv1BNMat?|oIl|zux8BQM zG~q1)&fUi%sN_K8>i}owKOaRvfSEdiDh^r-AIiO;vnPRoP3tBh_`pH`%a#y+!@`w- zjw>f4_{f1m&yx@{Ol2tnOH`*LsOBJgpd*}UueOo^;q?m$K5^js%^0?Yq|*TEwrVbd z8V=SJ+JKIC7JZ7=jnqQ$nFB``;juenGd)YgE@~sF<)BY{Ye>84PlrHfn=D1}g@eX- z?Lnc%`SIkS7cF0b;424Rg|9S^dN;v$@?^?S zNrmKY{~$0{V)K(m{Us3VJj|Tr$sIN+zd!?dQt79ysOJR#=_D4)pQ(4hjfFyPydi7y)U;BKRq@ifkeXF|Hu9*Pi|bUE7r}4=uYt5 zAN7SB#6qhVobeV9+HkEa*%>?8Td^AFtCa?`ov}vofs<@j?9U?GT$f$17kp>zTd($_ z#pORL2vN*$kO=J>G;f8-erS^sWM^#C5B20XJ7eSCw-;?5wAPDka{bw=$FF1g-Okt} zC(nwORZLDGsIJc+kkGn0gL-Oe`}z$aJ7e$ntw+Dz85?n>qxf`Wf;HLVx>u!M{eEZc z9gEdskGr3D5%&4dOlV`~G+(i{b|f8}S~gD^&xQ%VHGJ9V2yHuQ(s9mRk$n-Ea-bM= z46;`KJWg&tH#!VJV8+3tfD_QxY#Dt$!o)x|1m+w(mN-C0xpNq)pnq`)0t*f-Cp&`P zx)!$xc;T#$z>tCLf~xv=w(JA+X}WZ?rRHDLEe^6$VKsBe3RR>oDO-UFTy? zfGBV}0virq_qTuq-IUP;)b^Z(K*B-#O*oS=Go-YNpBU?l>34&?7y z!2Uif?FrCGUxUDbgJH|ep>dl{G;r=V)kEOOL6dYRuv9+0npDWxunB<^2P1`bWGN+` zXkRmW?=}R^9PCkWfm?S{hmi_#vvwhH;Xppg4Wc}X=M1gqJORPXBR_AGsnp!$FRc6g1T2 z^hkww-%cX%;Xu>V9fB8Kuq0rT_GtuXIWQb)4yThVQVCdm@GJsf4mO56fb!EI8q4SF zokwtvgSQ&)kiEswgH&ib;{pOd4n`Nd!i@Ns{siow8;amO2W>aH!cO->YXVN42uI-0 z!P6-gkZ1U_n1JZ1mk7xrkfE2rhAuGSMD9VO;B>7rpa^m9|EZ$iXn_2@s7sNq=ecf7&Cs#zC$AaY%Y`SCt&Yy@d)0 zk~lD`wSbVxZhgr}fnv_`U!Z}Jg87b)q8qDzt|NheSb4o`Xrv%v(F0LCjm7r}6w9sn zRq(e^NIKOX@|xY2UXLat1-gp$u)&c6sb;BY^*v4c;a9bh^|IlSf}!QQn)A1=7)M45 zb}jlV71}#FCsy;lp2-U`QUKcZ^baEi1AMxQoz#1eCt?55|FI2*ePJx-aM4EbSDgn_ z2wtI6U${Xmw7TDDf3fDA$nWF=+MBr=f1d070xE274igo>&^}Mg%5?~mIq(^24LfH! zP9qiU!#5(h!NJ$=E--jmCpxIOMP&aEpW0ahBlHNssmy zG%R-^Na0}r7Yi5`C!_b4&td}vw>fy$#}S4&jOjp{6!3jNf>aI+9qqw;y#ifwTb^_n z!5t1F%FIAldkRgg?zYDfq;b$*_#9Z~{0npg%}EVo1a~>O9K|A?SXD%v1Jkja5ut_%`v zkJI~OX)7lL_c@4YB!#H6(@IE_60f)-c)&s8N?WiO51}j7jFz87ki~&&wl!2-o^?-tX75ae)>w%-aK+>d=on)K#ED1uxL4knwxrTJ6nDu$0a;Rv2^ zF!YBE`c8fRl~x#i2|*qQZFgG0^Xz|m5iof76$JSlnB`c&TE%d>WFT%@EP?_K0t1B4 zYhN38iB#CIHUYs?4k}A!uq(9e2>}-@uOoQIL334CaNAT41cbl8iQqX0YOxY%WPMPB zfMfmdASmSE^&~e~*{C<|N~Y(fBY44qfu}XJetUz?p38>cM^MDUHRqiWtnB1Znq*h| z5W!0hT6A><_s!~byz!J}4uV%4d~I(J)8sl1B^Am|^AQwt@Ux={h&L>t73MB~j-Z4C z|KT?9z1Ap#R5+DZgrJmz8sXxL`qVswfLUQB2wrob{K*7fUMi!jNu)k+5xn6*ezgST zx^{j>DpcMqNAQ+|hqI)xX0hcP0_FvOK=6(OpN#OB6!b%`!YxHsNO>-Vegp#L{QE__GJfnmZ;s5RFH4eq~_l)eFX=rm)n7V(Y|a7 z9ydc!$-y^Q2k`BGlwRJey0u17#lg`QR`6AE6wUQU)7l~Uz`@3$R&b@Ndkkrk#lDUR zK5}qe*h^C?o-~4hHf5a=RC8b_d;)e=&gqK;teM&!!6yzzSIOYSs2%jK5!6TtK@A7f zmYjq=rLGF3!rYU+5q#!AWsCy^->c|D!0hq;5Y%!oQyBedW4f09r#<=%MDT@!k5^5> z$oOR&QenLDU<6+|C_8Qe;kOFuGp=>d;RwEQaB7ViypkGJlL|rCMj`mlLDw(|oR84_ zK)|JpaR`2J(CC5-yuCfzk^rye8VG)J(Eq(DbO~-2L_qB^O$2ouOc`zl^8;RXBjCf+ zDF}>vv6<)Zha}KtR z9#R5tcliqxl1_Atyyn-DU%g45^cqqR8_bikMP;J=z7h!ug#}aUWy5(g^X4MWY5Sb~ z32n0MuT*GntFdvK9agGc7J&ffjtMQM^Aw5z-#nc z(){NE0tXKEPB({z)lS_>lU}N1BXHzk^aNWNsqB5604vX21Wp`Gjeokq)DLC^z*;nVQ&s}zga+y=6)>#)T)~!IK#o_+orH+QC&L% z{;_P0z=wm5S0x}Fe(gE|lee`;aF&BwCkYHFs2f8-wdt@1ql7Nx=7j`&Y#x{!Fdi$({12P*Sqxc?y{{f0)Gzn zTHC_@msRvO)7oGFf&dOoLhRwaTK0W%4Dp}T5Cn42vX$%^N}q)7)V#R$SUsQ4`G9q2aFhJZ(VrXjebgo-IlK`o~3IvxqxM<)4W#UE$2*}V_gCLrNo*L%R zNA1%R0*X56A-KZ97vaHvDQGe6&1^rZk06EvB{zFWte#RtD$J5@MR1jaDnBz&D0)W+ z_l$yfB8cTcHADDn`QX;{S~~b(4}v%j?g=Y18YxVqlYuW!?L!dH!A?6zXkYu1KC*Y(@uHh5t1kEx7E`>*o;&d|Kb&b8yplG z+d@Ju4iqvakgpy_AI=8D8rA;WS-s0a>oz8EUife2bRS;xzu=j=ysE2MmM=Df39f0652i7+&V06?p zI&$#3^B@E{9N6hQK;1f*v82M%BSR77auB^t0?QS1>FnXvv=IoNaNz4;1Kox`3n3LQ z8IDGf$HCLiR*)VqM{i_aW5y%M=fFEd0vG*a=rRcT_7f2laIpQ96DV&~qN^YSc4#7a z%0cc0b2#*96OAQ_^QR(s#zAeN1&s9DM8}9;kC}fB5eLn*B=DeD8+v(ny|Wm>OAb=6NkO*% z0_{H=99xFq6$d+K*nn}q0sTMR9nSlyZ=hYX>HcN1h=Sx-8v-;57$MI}Jg*eC$O6=8xQg;0*^~SKGpk$r^N!HMMLv zg0~!~dRsx{`{22x!o34~5xnD|$q8XEdOr{P!)?|)h@gxEw*e0DfuNj&KEkBz!Y-l7XiFh6Gp zeX>@rAQh5SY!Fm&Fzv1-nnd|N8KUaES) zCsHAJge!t-4qB88?<#TnL=Sr42M+|FIQUR3ftrKr3rK}l&Rz&=I4E1-0mBTtTM-bu z(+9z44r2B=!n){1^oRS}!Vf_$2NOmc!>rqu%}IrQO#=~p;b5Ea?n}AE&xZ-<921P- zD+jxUuhQNayp!HrcLiNU@Qs6)rtYw}--7m}LbzrWg6|yEq}sycnh`Sy*z+M8!4D3a z3ooQlUq9jq0lBkd5&Yy}^h9Ax^WZ1(1UU9jL{P`UgsZ~DNx@Jx0(9fABQREG^OM0d zjUdzi^>Z>m`SxR%FaP!`1<*jATyex+%R?GFq9=Pag324_IjR z#KC^zql+H3AvuW z4h*l@L4mP;D{_`3hQ|?Dao};p5+;tZqH9jzoe=_S4wk2zL%+ggS*utdjwJrKBUWFihd_L zYkT&k69PL9eB7+TKyi~BY0{h;Hv}>cRtg^ldfs8E0s&!bJQ3J)ki0>7(I}|WNvHL* zy%9KYpeqbeUr&pzCKZkppGDxv!GuD4IQV(o00PR!`6F=Rppm*O$TcbYL4e=zAOy}F zRBV)is_M%q0zCSJA#mY9+Exa843!EAaL!VMM!l)TC?z?51Bv;Ko6jknS|c zSC6up-oC@dLO}Q z4z_%h!mYkm6G(+UpB^Ic=3v?_SFr4UiT21t=Hwta!-3KX3Cw7|L_{hqc$0^~hXYt_ z123Va69GFtpCLHQfm5|JJZY!YmVk^-MF@O3a9&~yfl}x51c+V~BRI!_TZ%9x^l|(! z0@}O0LEy(hdA>EYGigFc!z&ElBRJ22q3~k%O%U$2 zAP($(-JoQZS`7hRH^?Cf=HTdl8<;3*c8dV{rY#YKaIi#A*n8{Vmfkh$F0?@q%E8i? z!j=r3yTeI^Ns96a!Z?_6Rhax6*3p`PT}L}1xX3}|7~w6BMYLS&P12x2&J6E=xv?OdZofN|9X1Xnre7-a^RuI$t$ARtzRAeMvd zTr)Uk5Jy)VDo&n)AdZ6xf#wjgc*9##;q2}i2;w=YIb;tq{dWljbjX^8Ac2Fd0BdMk z8Z&}`w6pUNByymCKmsXRGwCzVvc*CK*EkSAlfq5iVdpDUh}C5T%S>d4~l4Lu=|?Ln8%STHP0QF&+1wz+$7nKq2WE?3LHFnOv}t z%sh|ut%nVc6sYw2AUfPKYB-7exvBNC;gN#>tz^!x`%p<}|B}B_p}qZ%$7pWbF@7l- zDVSecPyaAdV4cuTyyW_1D>70r?RCBV(?~&=;HBcQF|ln49`xovV4>9;-Mz%yl|`xK z0-BWTiPyt*egWC{l0aSamK6kao#~ArnS<;*E|3tNMzh$KCcX%6aA3a763)Q$O{7AN z{CNa7Irs-m;ju~uoz}WKJrKby4u(2d!F%--x{|qXR4{@R4iri)pl|w=#-vHgU&0XF z=3w+*dw?a2*AehgEfPU02cNu!w?5CBoL8uZsh?d5FxB zIb@zmrn=^3&Xjoy5g9U8M02-W-R8NJ3W*Y;D3z2#DorSb5Ty*2gi7A?{?_y8UB4yX zKj8DMeeQ71{;sq4ITkb5j3c1r<_!eN983Z;Xn(FTy>WJKax{Vm9O&vBg9wUg@aZVM zg&>84af@uAg>K9dG9;(I2?$a-*wEGjOm)7S5#UgsgdmNBKF4h#sK$w|(bdvSM(~h> z^q1!FphvR=QelR7DuQ$lW^WL~Mcdnj1XS(JK#;*f=y)-VmXWh3U`tLmf=muf8(YHa zNsU?&&|E18K^6x=RW_jWvlG3uu>M>gf@}_q#<;=Pdq=*L3Z*sA5j^4`qeu)M%F34s z=y>QAg2x>6QE-CUt6aYk@M6y!1W$egj2*%CkctigO)eB8$l)NbzdLC3oV&d}k(Zu)`6mEte z@l_>5YP7xsg4Y~e+vfs@l7}l2ux(%$1ce;j5ZJm)~e1Wz@Xho1f?9j8gC6+1=FVzu)WV%1n)WU z4KaoD<;ivg7(G@(@PUKGr%tf0pBcTdzuZ0v!AA~mH+O-6v2FcHh0UW>5PafbbxS+Q zlvPe6pwq2s2+BBEu-+8LUuoKm0N>DA2+BD)l`Xt4>iZ^L3g*v6P{F~#nKp3o{VCdt z&Y!pt!DkM1`&)oGWfZ+m=e$xwP|1NpCudkuD@(VP_@ysL@P&g`y}jY`B)Q(?7~=P= zLQuuQ;!(nrtLL`QBU0&XWokQnw)Z z&Vl}AOSo#LKbC;yowp;X=AgEp0eE)nM%ObAy0Q~N4F`K>+QQR-33UI%!1a3&)N&B| z+7!BJsMERk->jkLi$`QMeyjmmT^NGO~(uwFKtCttNx zSB*B)>`v(9DSxHHczb9@s&2B0IYRPe!T-=dpB#2mONTfv|g*{eu}a)q}DEID{G!y1BQ+@%CWo_&Wv!a>DZYj}DnDTjdlOFtm6 z;^66hXJ|9(#2f;W$CM+m=AfOMBkURWl(wE~!z&Tk{06j>g6@;A^v1Gv#5V*|4hjbw zf^NTiw1RxMS_HNnh!-7$#7~+catt96KM~k*kelKH#y8j8AfW$>G3pR$0!WcYIE% z_e9{vLH=N2^SWvay2LOjy$=F+4%Y0jhJ*Tg3glDze5pSI4-PcFY~e`O;z$bS4np9` zfyZ!Xh%?Wl6TK{tp$NPQm4x??77jLoW;hrpi$CE?b!f7aHSq{6bnix32GpmWs;!k*9jOn~^^ z5(K9?$c?jt4&#r}j}^|ZKyZeGHCbY?=(|gnROmW=HG;DowAo||=|80O50sv{9zh@n zA;#7qqcvj}sZcU*GlFv*v@4K8Wx@;t0+ttVMG(Zn05f~2*to9`0h=RsAUMy#j8F;W z-CVw$0FQEQ1Q$3+mPjGW(rg<6b}#lJ2&H9LB!4BOwEu4JB=S??OklLzwCRr2!IdXqdE z_2w^7NIIFK4yp?M*N91;Y*Jkh8_bj1WuH{`pXvUIgu<$Joqio-!+G+*_b0zMD_%)x zw~>FP!gw9yudB+evHMQ)WYYi8Kjg`kOFD_d;??N=$>pQ!%l;`(iq5VTbs6n1B6;%h z|AU25TW9)-;->p|A%B9%+j96>-R3`_e#cFqm0vjRKOgGd9YH(?hQgx;LN4j+kqYT9 zy$~dDu%_G!UYa|cBw%z}Uj%nJNDy8D>o$E(M*_sN2Ovn~VA(-2#7@5dfPlTVgAgQf z5Ib3THNeWDv>T>9U>JhC9NeE~1*N;+`H~9h`XdqC<6ulPH^_fDmo6jr{y7H0eGUew z8$!1N&o!jN1|1~?$sDBXSVF0@WElYmY9}Iiz=2hXEldw?(UpJ=yQd;Z;XtjuHMow5 zpqgOecDM zyyqiG=V0kTD{wC#LvP@8=)M?11_wj#I6$`>6?8hBAh#4jCI|Xzo)A1)dWszMe$5pK zvN%wTGk}V=!L*02*=jX{Yz|Tm3Y&mx^l1g@!F328agc6r3T^J$(!c05`ArBOb1-SI zEqG1*7(tFq7$w7#RErj$*P$d%LjgTo_jU~63KqXgInI3sw&!B1slP`}!`I{{lQ-4VRypv?eB*nVzU zB>{Jqcq1s{V0I@PxVG&L?XQG=^+iz3!Byce+T-$M8V_$J1t56G!Q4f5@O+M=JQ>pT zpg;sA92{{Fmeqfm>`s7N!UY7S9GvYZhUv;FH2B004Mp&tgIX0U80zFkR|R`@3PbRL z1NnV!APsuEhYZQMZv=vm92f;z!Y12SWdzL0iA3;;gK_+tfyIk_d7rO z^G>x&K~Tv-T#f^HPO-@%L$ckTj^GOim9xZPDP2f!@b~zUg`kRqBrORXf1pkedQ|ok z1YbGmrtb=s2lC6wkaq0OL-37*{l_HGY1#@p=PO?N0>O6WST4)Jv7WQjFKo6sj2!3!d>533Q z@9dmTfcR_$f;tYuF4%#*PjkA|ukhm+1V1?lJ!lNYK{50imwW0v0%HYsf3jC+6Ub~j zKbz!9>HWoZ|Kv#lG>|8y2`5#OhNUbgv9SD2y=y2>#@S}8^tF2KMd1C`YQGBp779t{ z^^H!d2QRE|Lh|H!g?iXvo?H;|L#5o@dp`+cVBFrBVax$kuB8)5W znx;yZFU@7i&e-U(dh(l{vCV?}sys0p*^_K?)oAVU>sWrbGq#WH6_uu&cWxo5L%%;D zVRRoX2dF+v3%f>k#ytA2$_d8>g3J!^Mcga2=tkr-& zGGUDSgF;2wL!auBlg|h1llWNeHAIG+AH_J1$8E67V+b zJ_1_~o(p?=PV3*K-?YK@R0MV$q#K*UUY)ydNrl(rGZ5HwFvZmhv|Nnnnnd}MYy=J* zd@MDFz+Kz6k_ttxIS3p%(5`g{dqbZ)1RPtDkHCoojrVpiLZKJ^;;zjoK;X=Q*I7fj zRBGW(DwJp!B5>hgbt@@^tsB;gfIX_k2wXXcp6>){!(EIBkiIWP;Ko7S7+VOxbKjK! zmH1Bx+&M@QIf8Mf!eat*M}0=%!NHDiVhD%_x}j`ncohOq4mQM_!Ezh@98zJ>(P{)< z9Q@d53!~&GOeMgma~%S24zflGZ@Tc4YfC`K=*B<)nG~JmK)ag|{09%#Bq07(a|Avd zY?$T(hIg9Nw(YvXtr7TgQ1QS5cDx_*gj6`xMi#*-4z3?`2lb=Ig9%vkr~?8&4tDF= zf<|_BZvp}p{aFT|1xE~TRp1aa_Oc)w&`l@E=yO4r6CIL|?5V+rV*htZo(pC(L1aDfA( zr&i!{tdyPvwzQgxAee(OyR1O{;Cy<}hZUwF2;t!A2q{2}figMhmak_bxX6J)BTML1 zGGq_|dVzo-l!L6vwh%9KcN+nDdJ7O-;vh4~5o8Zt(;^_&eKCT|95~2{L9YMh6$H5M zUxwfc2hoZ4kTBxZK>`{}Rw4-FAnuAafYq!{1pF{vi{L5;P9q&b&D5EmW~Oc2h~OFr zU0>Ni<3TdC7qR7{27+)7a;8aO{MwT$WJrr&X(EW=V2qz9lqcOcAYkH%od~XT;I-Tg z9EPdWcH!9g-3V@QP<7Z5l&AUA@1c*q4uVJyHmx^?OM{=$nLt$JAp}tzY>l&nV|CR! zm{es25^zS-06{bdvWvxVd!*Y10%YGCB8cH2S$LcT7MsSM*k27MJ*|N7E8B$dTYXor|^uOo^AD6CuLOKN{ktx4G z1D%4|LtRxmzS43gf&W>0z58w87v4bgYQ-a!%F2*%0$;rO3lx&h>#dzt7x@{xlTN{@ zntIq^r$9mGgG%a>8G}gNKiV<%*D*HSDab5Yr>djvo=<4O(7#e)yw~T&s-DQP{Y36O zw;5hf|IjJ06w8S+SGI^GVgK9z*gtg&YKB z{8Dnzappe|q;c@}kr_Ncl{}7sas3)MiZ0Ea(cvKnQ|;{_^yidC1l%@lh9I4Thx5!~ z;+Pe02$=f0C4vkN3Lcw7E8YEcmDlL>HV85~kS04o*1I+}q(ZM=?Ga>g;AG?sDi#l< z1Zc19gdm%Pr916FL%L!(0fUp}5Io}GLV*>i98d2@fL){y$}xqdVU&+;3)@A zcl5xwpH&b6DVK*J$m3v#@JubAq^z$5%nliWAfE%>c4jaq*qHvOKLw0I@QedH;n5pU zo>|h>c2+;fBY4iiw!OlR%=Rl&$&kj@PDJp6gLm035a*aozlRmery?le;IX$k^y|=r z#*%^GLD6C^g69|djo=Z9NZ0+LXXtya5AJ-QVj$p925+- z1A`U0hX@$#s)?YK17$foD7I3h-@`7ooe17@kl)$_w0}f>BNY~O+=Ji)2c9$Z;Zo!3 z4g@S4v>(Ao4lYDlz&V{^nFMSoIfUR72P%=piWM;FRzxv2DqA{-i>> zl>vfs4xD;gg176%G6Dil8zHFRz+=0CO&_ux+^e6vo6I6MzBZ99S1ice} z-sS`8T*G~o8-i~fto1U5!q9&`nn|s#7lQ8`1YQ#sxO5AktE*=2@Ig?`!CwFWuDf4O zKUS^heh6wfC{Zwm!#Z#2OrYrQ83eT){LET^l<=sf_J8k|!7D zwQl^+j7$Ix9yXXKuRX3%@t@PLEeVCev+8BTc~a7Bjq3X)VcQ9n+5T55jJNaVTdGC9 zx5SVwLZRFb zQej1MKLnN>tQD42^^=|2l7L#Dfe0iV7?umKGk8-JLx5__p$M!vNIzi#V>8BnAz<&( z5eTd~*y?N#K_gzgB%p)IXaqJK?E7X62lOY>1+l58#vzb$&}oSUI2)FjkP2^pOh91E z!KdZUa9@2*C;^6>CL^%pAf-kE8JGJ65a6n>g20{w-Oa9GG%L410qM)9BXHp0+-?h4 z*kEYdz0K-dwz=;DF;Z1RgHBafi?(2gVAaLeDuG$?oiJw@J z3J2#bM&QE1@^xYuaq{$70$%iAhQO7BGG`}BReBeN8rYRUv~+#b9SJacz@Aq z1nwM+m}diBum9*ohUB(jJpvC76e7fMVBM9~1k5|S34tdE^21MngL)KAd!3GKLEy!K z!Ukh_=lSRgsqkaob_CuW81%G*?9Toc1Y{RzAvnoF$5;uhi=6+H0NpdY5%_R$-@qJx zUT~+m{>lv<1il;`UFioJoo>+;v`<8b5S-#**9tKVY-;w94r#s~0zVEC+Bra6$gm6o z=3hRBz@LNRgY97J%bB$MaZ}$AK>!Dn7uthM``0^3h4Cv*5uD~gG)4@)4Gu;Suy?!| z!5I!#yE?%ajSRYo(e1Srg0mbbAF%?*{L%DoNoJ@mfb9aE=45 z)26Uz|4h1AWcqkl1VJ2_t`tL`S^jOwL2uvaiQqg35fM`OcC;D2K1kR3Ah^K6oicm4 zlj2M7_~?E0LlDe?vYyaB?7v|!8B*=)GYCRBXya@F7e79siM6D65Q2*wJTfzf*|EFn z{mH|xgAs&sP^WAUXQ4We3~A8yO9(D;u){-G%Awx%IRP~qR}oz1z&hR%S~wdmAYjj{$!Eqxo9Qx>+MnJ`f90XAuXwGy3@xpID z1SEUpBe=zLXt`M_f?FI67;6f}-~RP-rse}aA&BGPMY0nN^jWZ&>S2Rj0;Gf z9Dlr?{vl81Pwp*J)ZaFaM8c&1v46^wN5>x$t+e0aMDW5B^@SV6!l?JY3l;5smTgFW zqAfH4zt`LR2lTO<6go=tKN8T?U;%=74tmd(fLo>t{nuO{rG_AZgPaI+xD}|klvGe@ zyBxtC4qnf(gFqWOc>?@JD-k4eU?e;^NxC9}wr$q9u0fE*!8~hg$Purj*IIG24G8XX z@cxk)me%&@LxwbI-)02&IQUj!3I&O4Ul6eM+ExVjIgmMM3JQIv(};W6e>;L?4l=@x zVc2M;-lRh5>7583a1bq=vU|_U&nMvFv^@w?IB+vHh0TS1X#Y9rhYo^N4%WP~1lN39 zdSQdILkQA1_Er>a1Q_>mLGXkF!_`)> zEGmIU-2Tz-2y!?$rse>%M^@8cYkEg-1i2i1Zsr1KRw>fn?fcfg2%d5Kv% zM(~^i(K&CJ(OIX6RJgbP5`q^T^x7jlcr;^qH38<6t|BPlV8JRU`1*DAI|A;uxQ^f@ z2Nl5%ptG#kTLLDwy@}uz2S+WjYaU9gA!#+aI2bhkW|_cxhHh@*V>Aj7UcCmV+dBD=3c%7)?Nv_o)bqI7oXahD&NS z^yc_EzYGM$9JqWIgG2VJ)1*RB#3KanIB@804?`ySD-zIUPA-BH4h|aF!?>=;JP2sg z?HPhn4&2^b!+FUk`i~1@yB( zvL!$g+^Fe48Q=>Ct6Dk0-%d;i$+CQ2$ zm8SG=gWwwnH@r+hUwJ=0RbKtp4#9U0t{6#SZ}#(kWJuQwJ0Ym%;8mzQOcE&$AfWU7 zt_W&4SU%MT!0y^i0y-}3fuNQH88th&waJ)v17BJ6M(~4!f{!N9-lkFJ)LyOo3p9`? zw`;no)ELb^MPlKUBlWJKJejPRu5v(gRAT~9IQ<0*NvCRm2i4i**7hWMvf0IY*kGQ_ zonNWaa_zDl5(*`E>Se=u^1n~+?d^5+IH3pL{*?;jEsTp)owD=Wb&@Ch7uVB2q2p#z2G}zbJPZ?EL*-!iI5d?@xO}viwNV=675#WtoyQ@?2NrS zqMrO_XKenBSt@~FY$M4g*Zi6F=65?|6Lv?cTxmPRilFgZ|A2(iIb*5;DPWLvo&IW-Im zOvDe}gr6F$YRq9&-J^5@R`j}$z?6e>L*cRETO!XAu(d1&ff)zpdQPyS+Wi&*Z5E{? zFy}z`i8<8t{MVzHD#Ei6Sa47)JYQs+citsZVb;DU2*eyH2@gPyTGyH;)E2Gt5Lj~1 zcDfW|$F880qNYmE5lA>#RA>vC_Zm$iLsEYJ5`h&56Ue=+l z=biN#fgJ~{MZ(KydL9}=j$yjuR|NJPlvoJ6RZe`PGxETeH3%Fy*xb$nz_(yJsZiX% z4uK;F>v}jt&zu!B(k?4%-0YuemlFpA)FlwKZv>6ypMsksaOPm5h7``e%A~nPWl?Jc zE*!jBDS<&M7=5e*0yhqhx0FJoTL*JUg@wzzAaLg( zpqmXeZ94KB0p@+=5qNMAvCI=v+!xdP!bw>@5qNUY>y|xOl(e)V722)ri@=M6PbS82 zx$pcq0u*NTN8ruD5p4+^-f8oR0G|f~5uD_pgMsi+75~|EndI&4p$L3_1D*(vZRzN7 zgj6`IF%p3<2PvjvFdA=2=lsd@$09hz!F(%6NS$5YlT^@ES3=;&fy**6RNCh5BcQ~2 zA_9L7)D{YN&($^PjNB}KDuMtG;(hF3pftdcRB#(J4Z&#+YVB>IYosUrraKOqiQo(e zGB3oS-sWGie3$DS1ZO$e;OGb^56bzFA$3)lk06kPO)o7V^2W+u1o(AajNlvxl_RAv z|E}D10z%W)APC}MO)oK&R%OtZ=aEGl5S-_r>aHDZsJOUMpV57>w@dA-KXp zRCi-=944VHo{Jj|5QK4X-^UCrjl*a{b)H~^;3^0D8ZOW@{oz_Nq&+332(EFk)7=8j zhPE&xK=zy%K{yBM!o%f@POMfYAjZfFK?DaGZ%kq8;-++Ra`T52!F3Mi8Hz!*avxo& zFJ0k);06bmWlZ76!LPbxNY8&bBZ%Zcv&4T`WJu>e`y+_qVCG&6IGJ?tJpo+`&mxHB z;PGrX*m=)Xg8-X}=MmiE;HkN=7d^(7UKIW2haiaK;9QP54Dd8gA)SJi7fXME208^l zHanMu}8I=z~AP#tkQ_yp+`Y;5-a*GL=e z6kJXCpki}3{3MC{s=eyvpF0J8%)G`DdP(`OR2XlZMvSWBd8KmFDR?xop8lazaPf9` zk#z@)DiZdiCe_i5>}a|;qJ?r9e#*D`56EkX z8@wJgn63!PwE2u6o`d8W7GQKKpKd_k{Gkd#0tYL{*+PZchyCPF5MBHo!5t2s+KJ&x z-oNgid+qpvAd!P;6Emp#evpRf7N;9E|0e?^aj?$S6jpmGts_GU>eLLuT@K8Sm_TmG zQF_XrqSX??Jq`{DuTS;+Ij0Y)pr$8-;64Y%UxY4X=3Uw|pAamIAen=At)-yTa}J#( zxo+%;-~k5*rXPp4Vdk1-NU~?UAV}fh#2O3O@0oL)fC)w25TtToY$-f9^s(Pl0#e5J zM3Bb8@u$MFhh3A52#AmBgWw?t8Tt~K6C+1g&=wc>Ly*qFC|NTIZ@+dPsbKz15kUqA zgKO-;b%CJ)0W;_O@Q8z%VJUFZ_So+&dBJmnxc$^`}%8aj{)=ReIx zkjH_3YZuTey77Vlty^;uD z#UbI&t_UhPkSwx>7Ogetg*~9TCxXu$C<~L51wUKRXf-|RB!Wr~4hWkKD*H<4nwyz} z{1ANMz`4H_xW$cZLq68lTTdgX;=tQLANF(_NKcjNBhDfC%0UZZJ3~T?6RD&^JCzFv zzHy*D(Ht($^pYiDTFX!b-#Lg|C56tTyALPecB?Q1)f{v<%p zw}5?h^LCO75}8N@wH);8>i}Zc$}j>p?~6w8gM*wN!VUc!C-xH1-1HWLIu7Ip8bj=d z8_@*3-H?FbCkNe}q)^cBo|u4F_mU784`6qmt3F8Kjr71|k|&oP>e}L;sk8tZ$dhgx z98|RAbAw4NTra724duz7uBj^XJM_Oo;8dT#Kq2WY8PZNQJh%4(k|)RBs)r5cNxP-* zRmL3lIz~d_rswst;XLW3v`Tfv_%{>M%{jWr43?X)N*>~L_t$-(mM^aI`l+r!hb+b zqOD-Vk&VyDFRrFn9|Wcxl&ASXPmjHa2$=s(0f89@FM@5rqtV%90s_V=A~5G*ri=vc z4pO5n@vplFBe39L(ONO=3$7kVDzrH|41t(~!Zb0wua*lSpd@1?0!t3OI@`mbPKx~r zSgSA=frNv#XAMA7DY{2M*lr~RRva8$>jq0*$G0S4o6bZ8)*MV2B!w&MF45-Jp&L^W z*l-ZC(+RvZ=hNoa=kX#0QV!NSx9EPQ zRqmuhMw8_ToH$q{>?&=VxqKD@1N2uSaOPmxc`2mK``&_py5KbkTsTm9D}laBP3Wcb z!j=sPTseq{v;)Z(S^6nyhHggS#({bZq5Cn>x0DRY;qg`k?i|F0dc${j(-Z+M zY=t0zgF_j@mbFd!F{HxC4^jlDIcQm63%llP&*U z%R&BZCs_Q|$%KHQ$?gaOIS4Ygfs8qxa|p0L?SgSyoc@CZqyr~5tk&mg$KfwGSj)MJbml4IxqK?s652$*0gtolgN<9$HgHC z<6v90IW(8*&}K%+usaB@a%Q+K5zG=Xe*vH4Zd}9E6mW#y1GqvgrYWa1Puy zOJQ>7jMW4*&q+fN!NK`4rf^s>xHSPL;h6}obCC4b8j4+vj0kw8^ccYn4vuVfgvXO& zXdBn^aV~;L4t#`m$(X@IX|B&1_zXc52Z5_CAU$W%DKez^TLlPia$sKR3~f9uTnNYx zFGLW{!F_Wl&~9Tqfq?2w#Ry_JP#S6lMjhPgf4c5%DS}uIwEIb*W8!|=wwm|-6M|bD z7=3kx*2xumWJs>@pAp1y@Z8fLo;N;hO!DOMbF*6hlP3kxK%RWR(M_elUWe`^7V5{= zyN2>)yRlg+eYY(rC-Bbmzd#}B&g-f=i+B|oBx3JSQ$g2_PTuX zi@R`QA%b`g?v)>hpFx|x5pW}04M742C(j8hrcPeCOTdSmWeDzYkY;ZNw={L^324`0 zC4xi_E}xaa(MGfB`O#ft4T2;No)5MF)q=p2q{6O+>k-`L;MrMISe){4I{^}hO$hFB z5SDrzHn+U~kbqN#TM*pmV3M&5n07R)CZN0hb_B^B*l%=z=f|E(2#|BziQoYT^Il6} z@|kpF0;Z(yMv%gR%n>^X=pEuofKKc_1gRW^2z^iO+gfu8c=+W2f;0}2jO`)5Y}j-H zY*ddRc*wzmYgUlI>R&rO&KT<>Navu>BU@Oi_;~}VV3KHnAcKRbTn9KVK0s5(xb8*> zGC9b9EOaF+7N?U6i6cxAWN{!@au|F?AtMNQci93#HU|ZYw(#tmQVIckvLy%}ad0?V z3>S6U(eO5QuoS^#4r~SrH~5b{qw|GIFM9+}IEcM$1^_2G4)#yAgwfeWh2$6p zY)wV*j)Sm^rm)kjlHM|PR>(k5!a@6UVsL(Ml}9QJK9Y@~l!GwgX;GTvTALD3^5_YI z_Z&nDA$rxIZ*;;PW0r^D0|)w_Eui1Rqx5^IPJ52vBL~*Kgm;m-Pnk)E)cfEo1fMw2 z^m2eB)8_9W;EmE-1Z5nIvay1j4`OI5diJ$<2+BF|{a_6X4Abe9-m>rmf(j02r4;9x^4hIgQuwzP&(`zf-f8#Q`Cj#mhwFa z=$%)Cpo)Xf4z3Vxp45Z@?}0xNeC0s7)*ikpzo9E++8k=q>YrHhjf3UJ=8$qWf;PM7 zj%$J7I|qY%J3+s}|GH$!eQ1rKngfM>5~#ZWqXRjHf_btCYB-qG!d}=J`{Dorfzvu7 zsO8|z1el*|z3p9`???t++$Q<5#gT%tDpnBI( zo}79TsKFUlQH;Tr`gCjD5X0{MTp2cE+kNyFK-VVKLq2`te}B_}4a9 zA@Pox+EXRo;7LESGxnZcgG3mYLB>{`s?7NI^a!sx` zzuOt>Toa~pBEr#*pzB3{K*H!AFHunS>N}~J?2L^qu1CM!8M`rXh$wgCfbV2ytmnIW z_4}Q%gB^~E%ud^WAxyjEk4zY&M#WXpF1^DvhG>RI;Wul-PYt#!q_BGN;sNAbvif)| z0#gq52(Rp!q;gG@0JSmk2+TORu+$YUx^}N6K&NFA0&@;drr5*r(Ti6Suvl~-fdvN@ z-Q2+3^CE3tSiVa^Am%{9Pk0K;hRi#p!qWJ31eP3ViY*~5O+;6p-dUNAK*GVvURE&w zw)#d=!SCi11XdiVpRfT#&Aqh6(|AoD0&5Nu&q-i-o%jK%FlxmM1U4LuNHc})eG2IW zJ1X%N0x1U--A&=m=pwqLYE=Fk1hyQ+shC6BVsqLv-?aN30=wS;8EY8XPEVd3!@1@k z5ZH52x5gS=7OkLj&78|+2pl*V0#1-WbbJn}Q2X^W0!I#7X$cRa&R9kJDNfVAB5>lM zGEEO2JZid=ROq**27xmNhj$%?OUFObIlpMcPXsO;q&YajjAuIrlL{Atnza6B+U3f@ zgqN0(c`%*^&MUGl5V&!mKHD0yvLor;bH$!A2;4bPI3=t;4fwf>3~AX@Sp*&&q{N!T zgErwW37FQTBLYtj+DAJ>fJ1W{IK@$25O{H5G0h6>+vd~x^7kw92)sF1^h647>k~(l zA+4$DiQps$6Pg)A+NiR_1V|?IMc~6hgtZh_PWjhLH4Tsc2z)uHY9oPbR+`oNNr2$dG17&O~sI1K*2AaP46yUjmla%s~*ufmtg{kdq## zm)-Z#^AViq;F?4X1|8IgzOXtLfCI%GYd=T`Hm)d((fU>+tcx&5~0JE`z)kb1+eOg;kGZ{jKfLJ)$*ln`1 zl7Q;rrU)WA*wN!C40m2f?>~k4TOf$ypnJRn_|JM(LMo_DvqEr_gSR1$FkikA4gR)C zQUuW)>^W!zhZc{zNh;jk;D8{81C1b4m?qJu4VXU1oDsxwpkinb{k)542XlD28-iOL zT=B7m1=+GSWJn)Xyb#235Ef($dIw~3NvEK@Va_kmK&Rky^8l5M^1ByE;9u-g?;7e9 zc&yD+*;l(Vm%!Z@{sM)hvou&vb$*!T1JWtbimitYb_%A9ZK)b|_00$p_Z_n8Wy76< z9oIEfuP7{~O@{oUzfxhmXXWEm75yf-kxqegaXtM*r{Iv*DAAA`Ka)t<@BOac{;5+? zzST$+y`|(f!M^_w7Dl}%EJCz+<(0+c2c)qtAAb+G`47mu(gYr4b*HUY)%!0H#B<;) zJl3e4f9O0?p?u_P1PL4jnMvS)LnB85Iyk*WaEAlM&ED|2s3To-5>)#RK_UlJ(oTZ< zgnhe71>1=q5F~MMvdkRb4+^H4cy?tOg1a1)EOUoj+Ux15BHyDD!95OCVjW;-S!GKy zBu&$=2<~&RKzOj?g!W6G5}?tg8bLA#idtrHDYe*vfY6{?1P?fnX=V)Gy2 zGXKPq6b>9ptYPo5Q8Xzfq&7v6%7MA54Y(V~O(R2!Rc?tOjRUc;HnhSbdN~0nZ_6Nf z$ibK#3AC?Prjw+ug|Z0JIcU_u8VWYM%8&|?WgQS?a8TLZ3O2b#(1whacNYYi9C#Jl z!?TSGXsco42zdlq9K3vB3hS)aq>&*FIN1|HHU|gVTSCvw*jNI3IrTyCh=UdmCNLvD zkIs3H?&^o&F$Wi(+QMn=x?)n{^g2ZZPdE_Qh#_OdD|(uF<~$fd4hJE@fuP-M%WP8N zP24a9xg6*>a{$e$Kj<3WC;LYtc*?=15(zl89YEJ4hJ7B5AdiD}Rc3Ja;RGu(q)sYI z2=Y1j5hjI)GZkrQ$lo&&!7~ol47Y@g^TG5#ZP{Wfg6ABJ)3kve^DODd`a@rY-~|WP zp0=PiRhKSToziM1f&vcqWLkh^`spR)px-&qLGY3T)uYy+5}1@lfVTa71g|)V?;?h^ zBQMe$XHVr9BY4e$>=`Qv^q;nuRLD5L6hR>eVZlyN+jcCCxG(coAb7*Uw5K-EHY%LX z&`bNTM(~z{otuQm;s$6fB|{qYbRB{s4lW%qfq126^h9>aW)p&94m{#tMDC3~_b0L6M?VL_P(AVP#$~pLX!3LU*?Mlzy$@`2ERB(_o*dE&V z9ZEN@EUhs^@R@^$UQ!ql_G2a)(h+-01eF}vSy;oGxmRguxY5A|!50qF%51>5uEl*) zLHDj5f+`N8glA)SSM#D<0la28A^6I{hG7<VC8-i~fDDSidjim3izv4N} z3&D2|M&7gsE6w3{q{8(C9|YALSlC&>NKLJE1k8QshoFXowm~k?ctlA80jcZHAgJZw zqwqQh@T(k1K*7Wy1V1=ZsD9C5#Kn|~&W0%#yl9+>K-qVQqibP@~Oy{LB$ z<;mH@o~V3F-_V=Dl+S;GLefz>+*wt*tF#5llOe5|{2FP4d2)eTBh|!hzL!a!tQ=M^ z8_tveeaBCenK$U`fo$jhl?vkx9dk?duyqq}k|(1V)YCuYNzZ_BBHODOQ6v&(EUdSG z%9DB#W};q84CWG?xaj}D!l)(XH$@f0hZK?@(D1Yt_$iz4ACPm2IV`D6>4%(>L!6)U*wq!`t5=SAh<>0-71r#lip*KI2rjJ8l$3e41DYQ->^Mh1~UOfSU zJqHuE+6a%|TS}W5gQrYF;J`sZ7jw{AJo^Bt5a&J>f#Yw0@Wfcz*bxN;#MFooIC0SD zs|02YJ5@!1-MpCyoH=;Z%Nh1pcA@v{<0i~O;KD&fQ!6+#peU78=zL%v0#^bUB3IA|UrKMv zs(Gs;@Z`YnmNi`SF`^TU83R`%@Z!MXjTjb0-=tG|`336{cymxI?6O|zZ+D&?bbqJK z2u^bFbg(6?Pul;5fGVAB2z)r$WM&42dDUeEELGA%;LE`rUn{Vd(bz{o`W0;ir#P6f z(*)*kl%Xvj=LP!^_;K*8oh4|^i=~s*_D2pP@aN#sLK}E@bUJNYow;`eK>!D-LZ8c5 zse4ay3@-2V5uD}#qU^zYb-RfK_-GzSaE1d9sU^hwjqF3fkPIUPXE}JEs0a2Ya?J?v zb}&N_$blr!6;7|Vq8*$=eJl~2<6zQe3%EY!u@vtq;5rAEeN4giRWt=q9*^J#2dDblgFWb7CKW!uNJJ3H!NnWK z@W@=NI{|Lb?jwleAm@S)Xh#5TjLqJYir^*(tv5Tsy3u``lL}8Q(h)>+&_%%>lAZ?A zm@eNW8$k>Q(IsNgxi`5BsUU0f1VJnZ6D}Bo+>V}f%bw!gJOsBmC=)w^@vs>ONrm%= zpCgFl;9FC3NW86NNb+Qu)|j^cf;^|pkKZLK`IAb-NkTxdD|xhtdrG1kj6oek5Wjq3a57(s<&=K@Q{NTM>E*6N;`m5 z(0jQ9K{^LJURlAI-A!p{wf|Oa1Q{I6-s=K+LBr_sq(iOtA;{!lNR}O_y>O*7!^k-Y z5M*(X5NHXd^ZvErxaI1@2(mel6i$Vb2Hn9R4~|b0>Kjw7JRpYwevM22yp0bj39@DpzaRvx?jO90zMX*A;{%mb1N&M zhd#110kW+n2%d7#DclLtPRP^#vz4k1f;Mv7ACCN8CC?~gk(5PafbQ;zUVfD7H%l4F?kF&jY{ z2el$=aH?KT8ClaHW+1MBt@$X$MnUQi|nzCiGq12^H( zeMY-d8<7eV?O!9P^VNZZw%3B0qIB2xR5waEbD-tktYzcxY4g%+zfXS0> z>nYgx0l`-e&U`b0V=3cm2=JU-j^G;yt&FT-)tq@v2{1TNiQqd2XOwNhX4l4d1iVfC zilCYUZB=8a>+{o+f=M+9YB=bsqYJWI{T>rA_D~&yS`M<~h4?&e3piZ6|2|H)!M zIN0^t2_|1UXG}ncpymkbIMB_o1Eu#y&S$^qPdiBcAoL;XK*9aI0$Y&#oH?^$h(h6~^0m z^ljCA&5>p#PtLzoPydi7KctQmg@s(Aw-|H($2J%Vg?*=+t4&0qn>QMgJh}67ec=YN zFzVgcqeL0)ZfTI6u^FubfBhcV&e(yaxl=W2lWNE|*TEy|1>YH)_GP%r>q&}-328mE zK_ZOHvE2ccx>qYMlbx}**3^^V?2L6CI74O6bG`9olk07rdh@%Tu`*o}RAv?Kj3=nE z_zy@J-O0U!R6Y95(in^||z(Y;hfLSzqe+J7cq7iA8;t2hyFf z5r1aF823$y6?wS3($=d&!3F$gP57z7tf>viB`Yi@C!Z;Wp$JSl==01I+(+q}5fC5_ zLtw^%M;CXv=V^C}fLm%22+TR~d~O31*UhK5gsR&{A+X?}qrN9-4->T^74qC;5QsVO zZ(##gw~Od%yYrs65m<7NWM~6DQ=X@h3N0_)K_KCva~D%+898h?0k0kJA+X}WYpoST z&Qy*hV5Uk60&5Ne_uD{PKq~#F`yYLXz=nfI=WW5@n>q~%fnBo@NI5WUYXy66S}iyTMjyJG=_v`lKJEqF4#RqV8?-)&>rzAHKt1p+pK?%z@CF~!m}RJAG*yle9 z5jb%0I?)_dlB?-G)yREs5IAx$rjZnOUjMq397ChI#R!}@sPj1v?Ju3|ML^MwQUuN% zh=LuU(||$e2q<3k34sd-@_WtT{oYJEi#oZo0)ZLy~i_gR+SEsTBr1%Vp}kG(A* z!u1*bX~(KRX3pr#N^&(+XZ3*cD8`qM6+h z_;H{lED(Ru_(>=MKfm@u;LkzvR4E)^olF}r-?9}D1aQ!()CO`^hQ*{*)oc;}X zAO*jaeJ%uK-5iYI33{zRu58N62wB-%_UQGpFBxTIWUtJKkX2~CMthe? z$|zgO)>27CLfVoFNu`C9^gG}8^}FePeJ=6-1Mau$d0w5)Igji4e4azVJ+Da!E^?6H zKS30$P2Uk06kPudl74q~;urgKm|J5Cn11c9Sif8W6gU zR=B+s!8Hz6={vwu$7^&k>FGHu5d?GKCNy9gx-}U=D&)kkL2#V|4;M$c+slGp`Lb8( zBe=nV_b3PG=70DdsqpC4CImM*h^w#$CEpA5w%fhE0fJi`e2a00vdj9qq=JpVA%fc+ zEC{rOE#^<@|HI{KBLsIic$_SUN$Oweg>1=nV+40OXwuCNzBu{NW?syI0|@SMpdal3 z0WX23?4LVL5rlB?>7Eya-#kt)_iqZ1APD8)eT58s4g}G;?Y)OA5rlEDc%%$8`u2ZD ze%2F)QUu`~)XWz?52!Jx2Lbct5h5$ zfq&oKT31)6z{4_C6TCwL3G9^e7bqm1diPXBD_8jMC7ptlf?8N-r{MqI$=rGF^aCXB zn<&KmI>x#?1yNZWMLTo)4<}T&-CwCN-p980Md@Seo0Cq#kAKlWbPAeI8z!zETp3Hk zzE%6$vUP@ip;NGOf`#~O!uwtXH|g*nurO-L@DQJz^ zr2{$R`rdnrAd&;Ir!BOcl|`4_#lFm}FHS=c!-3ly8))Y=BZ2^B)7JX2%d7#$U*}5yIrD_;V+JqBZ%kVr|=POH*fm_ zGNd0ZD-b;6z_Qo{y0m#r{|;|Wst_b_&`MDb;u&v-k_w~W{zUMcgOAZt=&(xrI03mw z6aJ}gj++q#Q#Z3T4&S{q;a75(hHvTdKFA6?CRAWK{^MfGhM(( zX~l8^PQUAkAcKQd!baEp4X#lH+*Im|;57#YTGpVlbirr>JUj*<$mC%Aa~qhXdaRm& zeTG92yy3w5x)iR3CeTOvNn#BISsWa5JOqyS(&+-1!U3ZYyyf7-Itx%dpfiIEN&m%I z1lb&T7+XVfvwC!0rP~2b1UVceZ+3^Sixyob6;@51gdmrLJ;LWbw56_%2!I_^5xnDI z=N5Bl?ONWEfKf?+;5`S$FDxL#>Jz>4jrX2~-~$KGAIYG!x%DDap-QfUAdiE&cRb)m zd@TLL=}upO;3Eg~pW4AJ*Z3S#;r+-(2=X~-Ei7_(?>gWF0c`{I5PagGkDDzx-P68H zz?m^C5EO9W)ItgtOAYBd<9ng25fpN;wUa%}QgEet^6Ohd2^RF0mC}0`f>I7H z3Ttl8j&Pz8cbd!?K^X^zr>x=1oMM`k&NVxLpqztaB{mR$`oMj1&>1?W2)=OeY^v}H zt944Wf_>x>1YbF@@Hc_E15Ic%!!g+s!8Z=F1Dqjy^iJ9%lI)WqsNf*_q7|q->t_Pj)Gz;4@V8J%I>RE`hafi5R~!#|HXKY$w6^*C%Cw+v;hJ0H5FU^^Mr22fy;acxN4(E+sSJNH$))e z!0LztTsZztnN;|^tqB4t2NMoT;MBFnI|*o=*c^e3gE^HFXfd$ULIU21S|X5h5NYBJ zr*f{*-CK79+90szV7#y+b6d43UA}$mRyzbX99$nPf$xL%?IuIIP^gN)mIJM$=FshH z=Pm@CpQnbvj)Nh=F3@YCxeftQySpK<=U|qwMt7Y09ttXZ_e9{pL0FCz=zYENj#Rk( zs1E{14jd$&@V;u#8UpTY8-T!x1B-c^vBF{uzH8HvD^gXKFUkYt=d+n9^4j6vYWL8JPf;ITFGDXCC8d^`eo4lWM0 z1!Z|#BLd>Q#Rxn&aO`UZn`RU(C7{8ODF{3{crV=tcH`4e6R`XMAUMjw_l|ZDH)S3@ zz3XkAiNK2kn^Iwd-#e8i*3HFp5FF#6GTI(Q_4SL$kU|RPA~?>$%q13(ZS;{o==quJ zBJk$GFu@K2CyrJp6&j~6MsR|I6=$trXWvdw2pG1183G>;6o=VD)m}^bgx=`;N(3i4 z2)k+nOS%tzPAU`{twrF=L2f@OY#M1gm;l=!`Uw0u7<b39cgCK|l`>$qjBIfo)Qeo;zKLpn}7@6P- zYtOiw5>PMe41!<|ROeX0h#$V51ZW&Phu}H~iL<@II6t#K0ZlY7A-KVT%XKU0rWDzN zfT@E55!~dUzn}0$*UoX53HXv4jNldrw}s37wQZMaQW|#Y7J}Ox*r>UI@37GwNrjDN zcM;s-U`C`c^Y&&9O-e;+p$P7B(7uxuY#C9ZPb&DVy^r7?2fov!aC3Q&j|A+{dVnB= z1D&=mP+;Lbmw?clu?Rvr&}=4wq1GDo#%?p~34$;Vyr;UsrRWL=Qb9lB8G>*QP8myJ z+vy1-2`E_p5yu0ygBu}>5(zEqH59LelB@ysc=pk*`r7M}$zSYt{u4LnOCVe5)o`=>lP zVTME;qA~jp!3y910~SWza_&9xZJ*6_l}oejeery_&rhIwY1UwTGR={kaowT@Ac*8Z z>}Ub~?)RZ<`zs~dfUDc!aR!7~mv z_V9rn4dUn{%mi0G1PL5W*y;%SjkHY2kS6CXNAR2jn@QG?^0PjD3^T}Eh2RATUGps= zrO{;?ac6y4i{K>(rIoheJZ=O%HR5zPAV}n(^=vCx^ztcf1dL4HjNlaqEA~s^tF!5B za?l5sY(tR5!8A1){D_@QpQ?gQcOXdSAX{b)$0jzRO{F&VcOyvQATd+|jU6YxB}3XC zy%#|$2l7gLxas5PMZou72N9%ka7SBs(^9yJI{|?w4k1YA;9QtB7_~mwn}9YQ%n@X8 zFvwU628UPC9#NlaD+I4OFmkekvToO!lM1o^as-(ixGX;k%`cW;Bp`699fCI;+)j0d z^n%h@0u1^&A;{uD?~DW3&)M{YfPUMdkTm0I+X-nVrif{z>= zs?^y2pnwB2B?(9y zsAUjfa4{4?AqQGgYjE{>O7B1|?nNLd;$ZG+Q@C_+FTGT%_l!pHnFC#6(YrKOXBioi z!F5C4GRI|s{KxWU%S zA@t#7`IAowDme%%KMD^HuU<|n`1*cEP{qNVc@Dz6oWkgHYrnIl2!3!NdMvy!|K!nn zq{4?|UlCMukh;bZ7KR*?5>Tp8iQp#(IeV)R8C68~JFOho{aVvG7*6T31(|ytpb&GoYaG zEP?7H{sM)hGp|txQA`sP2a+e9X4Jwu^Q3}_qR8T4%WEVQK3ZNY>&}xet5=H_A9%ck z(55^8N`>)${uwFKU9MqF<|jk`MgNc||L@JcVYX7+o!)`$j9v7omi%UC?ARSsG_BL@I*?7See!C}?{>zfoet4#xcFhOSM>5Ws>}xu%$#2uJnze3c(=wh8C|P?3V{U&4y~*Jie?*; zi;sEQSp=3G+?(P6Kig)|xjZ+Q^9ZasI0eGjA64dDAr%rwUq&F|;DVzQyq@=xUZO8N z4MZU2z~`$y98zl7omBAKc^!d_1Jm+@P}pqWMgojdZy}I#5GZUuxtSSMLBNl=dkCyK zm^Hu#n!glZAmH@Ua0E6S?NQHJmj}X{%ki1#gYdE~5jDP`mpCEAHpxagSjh`{0T^&@(zJJ2R>`8pnB|FIz@UbHV=UZ z2P1`dl>6ImOC=Q&+7=-2}I3-W+uA>FRe^vd-5VnC;UH_G6w=ELd5|*WHcAM5IasvL3dV-{PbC$`__ajf$H5w5H=|3*c#?3R_-NWdU`Je0UX@@zvU;dRPGRPAhsWZa~wp^mP5OMmbBI8qBjV^c@DgO z2)RW$?^aDOO*3mlZMw1te~_=W^@Iy?fwMGoRWIKen=r7r}GxI7xcB@XmYTEfv) z^(+ZkKX*KW%N$(a-~?k@Sxz8ew`($js~lt~xWkrkM;ZrD zs7*%@$U)QIHt^kR4ec-PyQzgBh=YTZg%3xk_|w0`GnF|Au5pl1ZU*%ZO`#Vur3Z5n z1apwz#Rb04>pg}1N<{~C5nShB!CDy@z1|K4+}yeZ!3_?I)vTcD)A#hY+cIq#f}0#9 zzLr6`?-2SAr1x_rf?FJ%6)pnP)d%>HAz4+fL2#Rc6lJOKRoc;w32?1hkKhgmEn3Ur zR$L-I`G$Snh~O><*{V`_Qh1H_Q~H^1MR1P;{rQeyV)T7G8PfNh?Fd3R_}b(EEOi3< zkl4PN5rR+-^hOEu!mlq)A{DY4??Dj8L2|egYqgyOew7YUzg%6Nf@Y!Fn%df(HWGMd z^k1Nmbk_L-bOrWOzJ?|Pq~KoVzgsVI)aBBq#C)w#v0wVq=KSzCW2TFu3r|mRU{4FNkE6r*$5tSP@L`x zVdsC+nT3Mh?+`rZpg>Cw`PhU)n-_y=iO6F*vsWf#5j@VHyr_;)0VV0WEIVAb7z+e9mE*D=wseIGri=+y0X> zUUJaU#~u=vuYN!()O>D)Adv$D0i<@hGn{}McFhpH;=p%?6eihkOC#XN8)XDZ98~{w zfYWck(v@nbB&`u7bI|jiB{=ELra$WipSB26I56(&2+kwThL9nRTCa*Al>?tOu26Pt zEWJ7F3{yjp#=)LwFJboFtuLwYp?-G+=^S)>+!l z1X&#Pd}I%sAf|`_U5}9n-g0obs{^zuO4?7r-dST2WOLB0lQ{(4imoQ$#xP9;IUMX5 z?g$3H<7fuh95)d`E(f0NY@kPa7=5ZT+AtNtI}V0U6ZSys%3aBj)}93f?>T7Z?*gS) z9MlMSra2422M&ycH8+!6j;JEw)=C`&c^vHTZVxBoYG}_iXw!TIA33PpV+QSe4Ie}* zR5V_MAfJQl%WPp&LH|7jNQ?CleBxlZjj;dW%B%(in+fX?6mf9P*9PuCQKswYI!13q@R@^1J9~)fcCQhsAV0JfK`{rL z16<(4e7k%CmgjCqP{KjZ|Go9u+r@=|8-_**N;z2C(gFhf&Tb$et-djWG7fGE|I>?l z_od5#S_SM!P|m@ysScp7c95QY-5Z-C_`<<4eGB1Tz!mg9y*c6tg0CE$DwV;akd#B@ z7%m>QMDUG+pG$0D>h%GS2yp2uLr}rNIz<_{w!KV$r9(Gu5PatVg!iq;H#|N-D$GA^ zkD!u+H91FM(fO`-3DC}ULQutlw(y6`c?R@B_hvgc1V1>?Yh?i)ChTucD$Eb?L{QCv z&jBZxarpc|0wym#j^HN;-e0X@OAEbr1T@e-iJ*o9vp6SM(eCnk0yKM^Mqt*T%{)gh zwuGB~hixEv(m%HF7pNmo2K7Fn+4+OzW)chEXV$v9^5nMt>6)vKtL`GOMfqQ#kaQl8 zYA*_1T9`=kWP0PGUn8wEPx|XCh?Gjz*N{*+q)V-=J5Mf@trM-<(5XA2T{Zqnh4H%O z-4}Vr8wZj+8UHW(hdlYF%}8;UeoYS&36~A8En8eOrZ&l9?YgGu{kaB@bFI;qg@X?+Az4#bX@ zaJTh4`h+gN+X#V-gV|aZa6vDC{;W4w``#Ps{0d9kw>lo42Spi*rIK{fvG z$uZb}YlXmugGJTmFi?7YBmtc_svxlC!2f_FsPErTlhU+@?Ge~ z5ZH5I<|701$x~;NA&ooO6@dc>t%8Iv_I;YLkN~B5>IfV;`0VNg&4!iIU&;7GZv;*p zT-#>@;{qqrJK<4}{s^2oIG5}UD;*7Jh>m(b2!RU+6@eCTM*Tu7atssfh9Yp~VBDHR zFih!&^wzoe?q~$=91Qs)g-FBa^a*|5#PJ9`I54%ggE=Fz z=aOTP_Yx!UPu2XsCcTtdLNjL8U&au8@@3(@zy=p&3t#xw+89Bi|ZLzUKN7g9lN zriI`b2T@-oVE(b@7y)`Evk@HUz&}9>8lAsr5D)MIndeV1SLl=()pO&ue%WVb5L}^9{TAoGA2V> zI%F?`01jeSOCiQ9nl49~HuoTca~!;D;|vRXzq&yxOnZL_!Fdi^s5(Gq{h9p4;^8N`c1Q$6_y>AQqCkN1*qE@jC!6gn%bev$Vb(|I%lG+Me1eZAo z*<%HX(&pX-1h;lXaD@Zg96NA`>=jNxpBNVeS2;KzbLptc8sKn@fFBv3GD zJU!^I`CbTuI56Jk31=QjY)FNfqfQ{W#z9-*^d2is(KIMZk+g0SIpV2E3HOi1QO^+v@b$iwJIV0I81fP({y>R49LQ1;H&2 zmIxh9NuJ$(0-DadhTt{_XBIiYk+I5M2x!&gCW1R0M75W}3!9$t1T5%y7r|W)rn=d~ zb?;I1A85+#Pz3il$n7qLoNo@tNd>$5_Ys6}u-McVevVd-Bp|>p8bK%rYK9V!b?O*H z!1{`Z2*Nn95#|tN8$Z*&Z+}@Ff^ZI2eU!sZ#eNe=g{)T35JYfLAgspjk)st#@}&B? z4(?ka`iU?rzide3Q4DFXnT>O(t;Nx zPZsCZ!aDQh&5z$S-;NtlMM9zF&ste`o>YFgMI=g-(l;$lZln6^=c$7Vm3A1_h z6iw`-h6j9~pFlps)2p8laQRSw1P?e+GjRpispcUBl!XmK5W~TsdO|l$xgw8%_=uqh z9&*s-uoH~esTW4T&#d7HVma{27rudJ;W?3j?xCX)JmO$Og&7om(EdU|+|qFf9&=!L z+X4=iZJ}3St23Gi;yBP>Z3DMk^m;)mw9}k~;0XsUr#r%cMv9FHa7dqu;3)@tg;!)< zH_Qtrpx>$)2;wjne}iHf)^aDG;#(fHAmWH)No#k;3WsXOQdjM<5ypD3<>vF zAV}n(!5K4f&|NlzfC$4i2wrjUTv!#nKin&j04HsI1W6oR6Ba-{oEcz8fN`tM2$DGn z=qUk@k={| z))4BaWlAbc*>M^{9tTg{Y{2M#Bl={xe@p;^j~t9$B!T+%^?ZfenngHn9f*GmhjV_`!jqhdqS!*N_r$qel^fY7P>bxdKF~(f*3-y%GdJ zIgm|vg71pP3rK};y}ux+;oyazHMlDn$_Z#Kt3Y5jfXz?7ye)_JjYk!bJbBwo)Zw2z zDS$fi>j*R*X6q1gli>jzi!?h74Pkv6W zg>~l1|9jI?)}j1Rk|*DPt(A3zLSe2i@WgtN)xPih2<_Hf{Ojkbg9_t4;2SNv9v!fO zWY$4lRXMV30d}nM*o`&Y!(11>a__TEWRpft&FfPmJ9hynE z7qlfiW5@KVCBNAjt3C%b-wo0pMK-w(5!D*D$yNA^H}C&g^QTJUM1ltC{s9T23wBZ$ zjn6$ALw3f-{|o(gXRN$rf>=H-vmM#ux@2K(so(F6UD3cs{Ql}QL&8%2%!DxpeF_&h z{FwNRTp9vLdE$?5&Myu6p7t<5-0eC62fU9Vu;Ac(oHd**T}JQTO&v}ku;jpKlNoGU zKZ`y^P2A*%z>0%T=j2eia3x*J)7$hc0tpBHi=AOju$-psuuta@NI6J5Yz|(22d&9L zhabFzK*qtThf-*=qMI=R5d~Kf$T@HwZ3ijKkA5aV(JB~$H3vyAt>J9f$aMtBpWZ}Z z!@=1obC_B7Dw2Rr3U?9Ma-d#$7>0J6;6=cKfKUW>92iE(VAmSU3<5UaxR1b|gLdZ~ zVeMCgRs?LD{s4gk2a-i5@Tx)KAOaS@j78wcfvtr#G!MOXihvdio*;1IVCx_!h}-*O zD*;<=pCNGOz|2qz_0C5xA|Q6?O9U<)s4TXE=c;)*1Y{^ABXH&5r?8S&rO(i@<{e`E}uCPv@P~NrjG!-y!hi zpu4>-Oj|UIcFxW|%|mdM12vfg44tu!CZjXA3lMm5AXl)4dTUP1BSX6D^BKW04%A}y zfwfmzGXlydl_5CJfmp>B5)UYiAwcW-R|MW16g9Gh0lH)9+=W=b62S=$^ry;Ud1eWn z2NQp*M&QGNYMv9EACPmH4C$S>g6codX(u^Q43&f3)QzJFc)Oq>0$&dDg54osGJ+m- z^G8h(_;C=m#sLDI(`BSW_*f+br#R?+Qwm=ey`_J+o8B!EoaUg@Pe+)$Z#o5|RN5do z!@&hRE0{cgVLlnsK)1FC&T`P8n*}`8=t=Jnfmc-#_;cVamqGnao#=$ksBkp|0UU$~ zFRYShdC<$uko(;coZ}$tga?dy(UxBBlN`3jxT?=yV}f=e8Xd}a=111sH01=VT|1eZBz(0o7GRV>ja zpwf60f-4*p*RzMg5_7sTX>Vi7~=_3+Evl+U%hqH5d?E^N!VufzR_m79oX};7J};> z*cI5o$;p=vk|8azn1kR32d%C;z}H6mdmsD(1nQ-HBf!7$CIq1zbQNBSRq5MrE&)qx zwjc=OAf-kI^EY_XOXZqI+Yy9wkd$r#-J?aXNrjJVcOr=3;D)L-^ijLwOF9K3k6--- z>gW_Gh)!vKZ}{OQ3H(olYb?%K4;WBar(kxIT+MzrrYR73Ci*W>NII`3b`%}Hvn7ah z3X)Q4VV#|V@fwXqueDEyleoXFuvXR)_l4Z}apQK;OpP~ggoY{v{yNM$s4(8l_-N5` z-HW=UQ?Nm?mj0nrkeNO~Y^B#&O2U4@zwDnn1^Sb%#TAEZUJz_pzqW9lSQz!TiIL*_ ziEHW8?HvDLJmCBM1lpAE1?y)Vph@X`=uHHX95l>xfHl!k%=0Zn@!`bQvmz(L|xXE1P6xQaQ|b8csI>-Bx&p z;4uf<^&DZ0Wi2cPZ1kX5_)WjA17acoFDr83FAV}cA|F8w< zE3~3b_I^`8Ab8F}_B|==ad)K;7{_|L1VJJPKeKJ1e~vS4`RKZQLGX%$7s6+qp9F91ODec|RUk;>K*7`m^kjP!2^d{k zg&>&&2jTO0$4!PkCt#sz4T2O7Y~p1weM%=fq+^Hccl_smlgdHr94TyGYCto37;AYH!sUK^6y-H`>8e zUkN>z0v);{c*{Y;df^L}Ci#=dG4yY!jv$+Z6K`zcjn5(4h4Q`E8$k{SO@xQlb6c}k zkP78f`Xk8YV4#)^TCO-9O~9_RgAlyqV9#_j@C~b4M!@x1!w|gZpkjvuD4D355pZ(M zNCY1^=sUm}Im_zR3taaZoSQ0$kc#4>TSk~(b z?OlIby97ZA2g5Y2z-7S}dU~g*E=N$xLE;`K*!}WUH!>uR>#GoyaiA`7gHiVu-z4B+ z({%{SIT-LsxS?F@L;rC1UT;9~g@dPUZDC*kZ?wWSzby#9a-b9Lsi!NH*Z66iH#i!wRrsu6n-eCMFzju{lRG@&!kjUMeoP|3mj z<1$Fu{;eIUuA%Mwf!RPd^PC@K24CBB z`cCrXp2JDMKplCq&7qT;7en?YkXRUavewm=C$%(QYtGcSYf50-h`&G~>Ev$cAlfzG zF^%NO{%>nxoq4idSVPghuBTd)P`t!2dr_ zHf}tJW`Kg_X?Vcq`~=d}I0#e67tkm44ToPNu;8G@LMI408A%%WY%5v$7(SaVRM?h5vYhqfXWyjOff zV8g-T8VM*Vo6_*+YE*^5mV@rXdta1g@93{|EKl+!p3{vd$PX@5( zz~;UaL?zB{K#pOWQ6mHn9GD)G!2~}mx;8YyyD0)k4p#Jbf={-KMvw|$6qOM;ad7pd zEo9jq>O#Pj&{hbXIZ(4U2ZhMaw3$)n&=!FU2Wi5|_c{0@y=05~s3LIX;Cfd}nAmY+ z4H?qWn9c~?I2dFm1NX9tHUzAg+YNy`2OkZs;qY}!B?7j;R!88$LAzyg*weV|2>}i! zeGqtZAl>2ya(Aom1SqfQkKiZ=u9lWi*}2UY0yH!SBkt0tVxLh`rfc*du$7ik54-}llk{kfak2u^XJRV;xArDO((&7h-~tC(MN&{P zvYkc1xcP<%E^-hyK@NR>yqHRWQnC?(OB}4~VGBKD73n?BVVp67%N!IZTSM3Jr|8xD z-TnOtu5hsFvl(1k{+P}aKU`pn;3@}OugIWH$Ded%zsF)T1c4k#uX)1B6=&#Obl^`* z1VJ2FWVnD+|Aj-yujHX6LvW1)hv#zG-*Kb@0drp1APDB5!D1O?RJ{%)VDUKz1lKue zc+eWkU-qT{(>-dO5!~P)L)8M}Wk$67@yXU5!A%ZyT%~aR)e3q;(Ol<+;1&nh!sMWp zZ)ZY|VSvgB1h+ZZCA?EB=;$!IYbwLt7r~w1fWeM1Fup6TkYaxt!Cej#HkpHB;nYep zq>Hco5!~Zo>&zo??C7DD1e`azfFOi}gqp)pEbd5$G_T?^f=~{$nwZ0eirX|qKS>Kh z5XOO*nK?uS@1avO)q8Is2+95|`&B7G}z8U0r!H|M@%3{6r6X0$-f_3;e&NGrp5(Qu6c)k|*7xYGIvu z(xO2_(c$IJ9Y`pgom(sG2!%p6Gwp6DI$sn+zws0E?XOfA@3?mlMCz%tWh75-tEi=a z$de;uCWtdtrF4q1;$QYpd2-wwYjIEA#&lb)>G#^gbz))Ew+2UvzonYe2Mn#W2wF_ivN7E^E#{(@9L~^jCk0W%HXK0Xrvul0ZAc*3?_L4bR$>!1LwnxL;BZ%gp z)Z;khHjEdM3M0C7LhyitmrZS-3xXI9wzsqf#j=3o1Z+Fd1HnTM6uUcs zx!9UE8E=j2jUbkTy&a`+e!(pot>$X?ix2Y1fcf=$eoHe^WGbVnn2%E3J013UK1KSdDm z@%uOg@f;}qu!McxGd2PV-q&!;Xx@QQ<$p|-Hir7@iWZIiPYK@tZm>f3huYsEpz&>e1Zf=n%(I1q=TamD z%+uJ6ApJLBm^qAiSRp3hm74*A3=VFuaR>3M4K(;Tci(~FH3xTeonWOetRNNSA9f+g zjx#ewQI2MC{ii%w0nA9o1BTMmXb z7B2UC&1g5U^EWdD*&Ga7><%86bia{f>$q#fcBVxE5K`sZ=x;esu z(8ha6g(Vrb2;OlJW@Qd+JR0+LRLASmNN>TeA*4!)wZ>7g#+2+BD~-Dd`F-7cq- z3bWQkBKX3AerI7Xx>lwY0UJg?K=73VyQMa;W~M!T9cMwsLj>PA7-DD-W3>KfC14i>(4gxDKf=t7H=X3r2*au6ac&kE6X@HwTz*n>uVa_yBo=;oR_p4@lbMwtG$pfTrwCl0`xhuAon_+AqRRdi4N0DC^}QC> znJ3*w))y@wT`nbgQn`i7uVbt`PkuVEOZ4Dkw|GL&ssEJ<<1J|&D@yjLHY0g*d(T?> zhdg%_vSLoY^(Mba}OvNN{) z+{|CU726qGdA4Lism@?~vduL=qE`IRHdkSUq176iN`u4m2+>KdlL+IAG1{lOT(h1p z*%_-}R7-xdGxlNlBF(Mots0R{u3H+;`gJV7+Zo%eZIovB;KxP;*>?T|5=PfBqK|0C zKFf||XY5F|TJ+nUv9C5w6L%O~-H2>)4f~h+{m$5z7ahbNnO(C9o7knc*l(CH#))%d z#I539o+OusCP%gL*D&XohCWHQu&7D%y98*c%|l?p!Ktx!FyrMp+Lb@PW&r|A4n_xA zLBAC)wELy)z7T;G2f7|Yf6eg14>F`FEtepWaG<(W_`<@d?k@=#?y(esl!LwPoZwWm z=IsecQCxvQ#zAQ}7x)^OK9YcYZmST;Id~;(Nr>I_R7Swn4{H!ub1?ga1ZM4Qc9nnu z`s)$ca8T6J4*Z%8r8fbUWg8LLa-g=y0St%UpncAU)teF6aWHS81KbKe(}E1idA$Jw zdk%IAFJNf1t&rY~BOYu=;J`tIkqyB7XBDJ^irP*DjvVAZki+g<^F0XIA>D<*iGvw~ zWH8HWFP)DxZf}ghnFBN7TXdg0wWE!&Vv~IcTsSzVZ4J(c*K8+4l7$>V;L5=z;Z+;Y zO1&--khazofg1;fjqE^Qdn|oUJNN!D0(TB3>e+*VUY`_FA@!U&0uK&i)*S=+!6jn| z&}w3Zz>|ad?~j68&%uWX(3>traFl~4?+$=TqGlcea9WPQivwHXZ8$of3fl-+YiWz% z7zfP#TuSq|oF2)h}d@1ys)D&6x4{5kLzUiexloj|XxHB&Dk z2;jizlm#4EqpwGX^zGvn1m`$-Vr&N&zZlRJVhdIVAvn*$6-^I#{PcBCQX%z1FoFvl zJQ!mOM~bET1XStYL~xOVqUjcJWL(2{1RR}r2f-x{CV>r%YM?fafYPh?5M1V9k1bs~5}>R07(p-xGjB+sgLf#Mgq>#h z1i^IG5x`NQDDc@d$2k@M5~~srF_W#|Y55_Z-1Z4xS_lFE#42 znN*V@g_*ub5XQl(N-L;*t*uJHE`^T>!a4Bpa)Mc-=1wGFb^Ip;5gfFW%3)Ug^e&`R z(9N)07o2&nvs3WB?6_uY|L>zn;P+Td(c^HU3TW<{`)F|<9vJ;?V_cj1P@B8EnFuSM*VrwUGce{ z5;}LWp=VD#AMW!LXx}pj@W|d0LC&}yMZFP3a!~$BcxmnQzBj{yjxIhdp@f!4RP>`8^e&julQz`>kCq0cFHr#FSmn};HZ;UFSg*s*?6hh85o z?r0!*$id#O*08|!lsOqv>h}={VmX-RDTkpcH*XP8VK5rOBMvmd6{0*B_8{Pf<~Rh8 zIryaK2}-I?D+%ayZ32Qg4qEQAgr&i@9SE@Y6(e}U!K@G)SXkWoNDf&n{+|!Gn1JJ5;&0gNx(|yvLP8# zuYPk7Jm+Agni+H*J35d62+%?Bf&=woHsCwkbu0n(tL7ni$-%aLau_N4NuSWom+2x% zmSi{vmi)@C26pyId_K^6yQ9-iR-d`?#aa+P)? zc*{Y?3*pnF_oX5NlC6yqWOHy;O#)e8Un&z|pt>JH4hKnRq#$ehkUkDqt~`h!mjk8u zmQZ}xfVLWDJTgV_j)Tp@OI9vy?>?6dNv+or1n)WUonQ%tkF|>kn7+Xr!3Pdj3h#1C zp6nV+K)-rc2=X{6^tFZMol9C0V5B2O@R5VeJSn&Y-gG0N$6Gmqd=3t_wS$ixw>S~t zInx%wCl1PI+k$_GBziISNwY^#z(IyEx9!!$md>>8AK`?ckb}x%D_A$84^2wlyj>6! zaS$WyvYs(2f?mA`wslAFnS;FbR&f1DtL5aN&susSDCR&Z%L(obZBRkL%8y171pIoP(=5tg+wrrQ}zzg|U9$wB-kTj*V~jW%RvE;^$=eJY`8o`0pnct5<45{+v-XAa4e_D5^!AM&K> z7frD=BmFjsgq^%#j4$X$uaAu~ej>2q;7W`m zC}+F(CCA{sSfT4bJrW5Al2B`y@7kH(%`FEuKp^EH>AW*2nr1qZ3WH1=A&_yPd)FGW zCbUl?V2ycG1ac12x;w+#&HwWyq)*w+5mD%W`^0dw?K5ZH0h{k#+urX5ZH5Yty+jBo=S9nQeC2o zz<~pMT}x1Vl6#vBsj{*Y0!I$S&z+!C;GXpaEZ)`yffEN2I@VBNH_M2CbrZWIaOR*( zxD5opno6IaLsHcdxNtChvJITLzMEDUvA#C~R}S)g_Q4SCx6{dxo)q*&;KqTI@FKAu z)n)kveDoQBz@39J4ISXMe+Sx?oL4jmfd>bBv}GU<+;xal(AOV|z>|ZaFZV#{Kv(+g z8GcOz!BGw}Z(Bpsn~m&)*J88E97a{QHptQ9etgvt9L5^WbXFUV~91J$JgJ=ci`ULd8 zxD3HL4*Kc|FR;p$>JngLvl7914iX}rq5bGK^p-Vh>>30YIM^F2gW03!y(bkm6s|*X zk%RLF4#MYd?$c{)^rH<3E^*Lohyysadv8rDoawb0!DSANFFS#>gBtyx?s|DEf-4*h z-|Pa;S_Sl6QgGjn;3@~kq4uzM!s;|Kq$z4U5d?D3XO|47RGEAxAnE)r1VJ36soKG! z00X+cCwq-Cf@>TEfHOQ>AEiPnc&hA25X^zXJZETebbKlSUCIw4xXwXru_frOw~8TP zd(E;ugor)}JOGwcxDmt9QY|oVCi_%C*+{(mpUT|<>20RDNOBnbSeRs+HMHKIOy}i8d6rC zq>pgjrh6g?=fG#79T>lP5~Rc11P4Y^8))ftFrDPdcSTQsfjaV}h2c@n*FBd< zkXZOlIsTWcD^E81nyZ;(-z%QL!-M_;g`{(8c}G#({%!P0o?Nb73+v32+uK)a_P+Wi zl7vF()>>J2o=ly&NAzIo>a&D?J^WWHjQ6f#tVpRtTmzCP1CG?vKjg`tb423m_CvBr zBphy5YyXrd|8FI8hVsno1mFBGSQzzaohb3T0cI8C1WG&h9RIHO`3cltcn|->g>UFw z#;Gqa5kzvZLDv*~7KG6*%(L7i1W_FH%$CEDo9pTAe~u^>K{N*tX%0Hl4|Hx%mYa^? z0S662gp~<7xrfO?m*`|7h~dCVSQ|HUPyb{BbRTCSc*udOo&#KMWGo}#gkcVXSPlwK znM2H-T)KzBr}=vXk2sLeFo$#bO7wZbqU}cnk2zTJ!2_y#?)XWD6z};7K^zAuorDjH z)Ei1Ws||Y@(%2%d7VbD%RsRYtTVV8FOC1o0dkEwhA_b}=;g z3=aE(;28%Q!WWKp%;e)ph1Sz65F~IAt0@74JpZ)>j8&;Z@SFo1Ju4W$z~v1Ay%tp? zc)@`~jX6XQdyyPH5_!ixwp+IB0=TC)h|FlaIIY?Y&4QmZf(wp-Vg9Zp* zaj?T#3ibi9^iKG|q!EH74n~TMKwa8|t_V0&(gZ;=2QiP#Kp|5`x2%1e-yA^-2gl-U z!Rh8X+EjYDwFQDy4pz1Ff=9|t>1Afgl-3B+IMCOz2e;?hisTR1)I|kBItO3JnL~2u zylVt3sA`8Gg9GcUw(w|2vv301&s9b6nuAt@y+H5k*<1pG13Dqd0Q34P@0%jwhhZxEF$K z4ixVSpEnqmokhUjiG2~|a4_qt4cIz%qB&-HPJaZs99VUfz&5x4S!_LJ%pe5sIPjOr zU{Xa*Pco$DkwXx?=b+IzE7;c6{W$?s=W8JNz=6voH_*Jjk!AqnPa_cIao{%40qzHx zxR45$G)E)&$U#P+IW+1hYD_?7!dL|P9B93C0-X)lmJuL5Gy%aU4u%gq0Zs4srFYTH zj$#A_9P|@jB=)$Y@g`EC==vlCg&gGWlR^Hm{Er0OP@9UNh=WHJwxB)ha2^4z>H~t$ z9PEmB1pT7a{sbH}(Lzwn!LwX@SU1I>J^{fgvk;VUa8oXUXZe5VaePCp$)K*zzl2+BDalq<+Qrc#pg zY6Rao_+otoYzCSfCl%5^u0>GE!GVPqV4Re(n1HQU^$}EY0K!5Gtu5bZv)e&s6M`Qc zge03l&z-Mm2dD4YEeNVPnB->x-uq6_Mu2ym0fL_#9N6Rvd53qsBF8Ylw;_TW4hHF4 zK;+E&!wIO^xf6le5H>%Vbwv*Cs=7`mc`~)3?=MhCo^;JSt+^{^#x4>I=XI`ib>&I5 z+j*KVvs^b3=rQy!P)IsKw>pcaE1FLtd9uUQT3BbEoV~W8NNwwjA`%LpFR7Jv=gF8x zMxwm-gR%)tG59ML#v3JlD4J_ue*wvpw%cmyAM#}ENNw>z<*D6CBi+;N^Hm+=r`1z2B24sutBw4Nc%@$W- z{<-A5t9a-YLw~{^{Fw=3{IKP*SbzJ659HDi`Z@#uvgZ8Kus7Tl{$FGF;g@s!Jpeq( z%HAuYl9iQB-DZanvSqJq5<;SVkLqq|(AKbuN{W<(6d5I>p(rY4SA>jypYL;iucz;M z&J*81;N7`Ccb{>cbFCj8Cx#G^vEexa8xG=Hxxvt){h0&=R}>+z<)FR3&~=>ACXIk+ zJ&O_8aq!}>Eg1Fs$C-c$D@zgBbKri^9#YD-CX)!}ugegKIe6UK1zKgQ(Q&ZkQEw1P zI4DkVfbqjq=t_@WSKlF!a&S4!0n9b^%t({Qs(eHs<3PQy1p4|~(PVA+r%D749BdmS ztR1tX8%#K+G&d@*y`5|!4VER34Q+WM%5}LLbO&3 z1Rfk@$GN~EUC*ur%=2l5z>|aJ{p7G{aAp7j_bb{U@Zun4mIt&LWkv^Ks|K`3;LSna zPkS&qckTm;uv6R-!BGwjh4Uppx~DfKz^FqP1jjh&Cmb+!HSZ1WYleh(L*T=~x2sZE z>KA22BKWrKfxwpo0}Ffb@3EeCe!Z{Fa@Px$!q7RTJDKynb5W&I5U2-T|`X-WquiIxLILm>`4hej_^o~Ap4Q?4A zILE=Jh1Sq$*_ys2f|u1?1d$vp_OpU3YfR|+2b&fEc-O&QUPL>RJtA%bWQ z{DpDhilVo)l039@F@p0PZ2V~rhEC>3NrdYUj1a_d&@f008JpbcBYHAs1%eA4TshzY z58ao)BN1Myu0{~c!L3bV=+(IN7XjJnYZ1h8kS?4(c2D7ETLSWXZ9s65gQ2dDup#pw zhxciFZ$xm31L->{XwTH4m9r4lEePT{n62dk-CB-jl_kqhVo8z;}(E z2ogBBujB~bZ@i-qkm5*F1c@A+doG0><+=Sxgn`9-5M1FP;Gi7@oXp81V5Idv1W6o3 zeX$0A?MHOXput#k1Xno-U*ZH$Pkj1JBAj%yK#!k@Ud&ec~bc=+y>j>gU?y7|^hvp+x~(+Qr{RrhI-HmwvWJJ!K^D+TVd z?>Yf51OYXRw6-fxLbKv*Z7A`+gqocNEeXk+7!GZQzM@Zk+QJq8>Z^ zYg-XuxF{9DO%8^X3OffJ*sVZ7!u4ASQaRWo%neOG65W}A9F;o=(m1fVZUgFHd})uw zVfQ@*w>X$=E``dO6CaWY13WVj+~&a7&mP8oSd~t|iCI|)(m6PxYYzvu4{u7q2LDG0 z?r<>EOa>A6htazK%|Haa<=AheNvntCBe>6j zO*dyybG+(Dz{T^=5M*%hTI3B0Z(7ot`HSj81eqL|?h#ffhvd_`fBTS^2p(|YvRVQY zVphK)O@f3{1X r1g~l_r`5^!6!7@Q{O+!sZ_PZ9B~%;EmB+1dlj~>hA#Kvbxg$ zbmw6o5Ip7}(NGSHE9OR!2nX&~Ab7%o=4y8sKd)vE0SzyGLXgdYt*R4Da%w}L2dkxD z5ae($RnZ2{G}twcL{QBAh9H-Nd5v5ld`Ldcl%_cSK#<2lUW^P*H!z+_BFM^qA$ZEc zY-w>Z=mni#{C*2c*eni zmA0U|*PA|~SvpM-Jm=uSDLe4WXlp^5bTvmAK_Leb_Er#ocx872j##%uQ1mb0sx=JA zHrY#nS+h0>UU0C~#|t7OMb`;vB5#M_B?l+3%E9#hon-`c>Cq8EF$b+%iG`zLPF*2j zX+~!RB^(3>Izx!PB`twAcIt+plmoA1Yw+kGq50&whCL9x;$TrL8RTgWrxlz#?y3mN zI0)(|fm6Ge^&!`Adx#o>at<8iws2-*@n8Zbdukwf&4KMWYq++|U?lT4{BOKnR zQ$}kOfgOe+_`relV0X}Uz7R$ttjrsZ;3Ef}6YasNtleY+o@^Y2pn`)!VSB0Sa6`JR zynRqqEwPYuMRh z5`xbhKo?I?SSa2}K(6T&1l1h;&^rW+I=-Uww|t)KA^5_9%3?>T+&8oni4d@KI)bkp zlp5H;+{tBhlDjlz27+%KctuDdbhpAR5<%0#06`50LDOWgUh6?~0?tmFi{Lv4l}8+5 zNaDR)1l&=ckKhLf{YD;zeziYoZK9FuLIgiKh&W{rxtpK~1V*|40ScK;-&HEQmyhe9>z)*17m4~4Fe)Y*fg=YCZwV6s zzj@NEJ8bX;1Wp`$T_T(bXi!9d)`!R95Xd=*jJJd%Rw?wuX52F#finjk^gZCR(t0{n zHzza!feQ!Egqdnx?o2vOF1r8cD+pXUu)J$4?6g$5g8;Ri$q3vy@Docw;n(&%1n87s zN8rxE_*w}V?Wv`8&!^!x5gg%QiLe){`ic4bNQ7Rxw-9)6kk-T%#+|=HKmYba?;!Bx zV9WqFXj!UHKh8_;-$UTVLAIX*L@c;ON1_KuWg_tA;QdM|v@*R*dsUM*KSXepgI+x( z;C{4#j^aY=CkT#l(Db?#%sYRhrG_cKIS70>IC(}m*4ZmYPJY%4icb;va$qF9mmV3c zq$?~ISr#Dh;~-GjY03Otp$&;((ytJKKLk06k zSArmr1F5wH8kG4t5m52t6@nlR#@uypAi%)tHG<PY@ML^ za4S6m)GKQdoaVqPL&#&KeP$3)J4#XQum8gt4lJr|;B4PLK?Dr=qJ$uvg9{QH=&u!j zkAU$GO%OzIaBRzN_#ER%zoP2J%@CaBz^u72BS5rbE{UKT*aE>h4$>1`L1V*(tprqV zZjB(4gX24`LDb$WhJZFV+9HVJ;DE3S9z(M2t_K+4>LrXp*&-X+S%R$^5 zM<_ATqR({g^4 zAgw}u9Mm5{JO?dfh5b9fxg?PY;}ZrVxXeNJ5eY=>aiiZjkM@HRByf;=QVN%=+D<1C zR&N`MAd!QD?!v**6H-A?Qc*|KA9C6qVsXP)m4%fE}vZI z>dPnn@=A5)!n9!o&Nu!86f&L1M^to0S_f1~KB?kR2kXrz8#*`9J-y2M6-f%eovoAg z=aWBAo9HeXnmLTng6uz1p}j4)r|Tw~Jh({m$>F(m^f&qBv(NKHio3m6k(6+BUY-42 zJ~@AZm*{;_uayLAKm8xD(CWxT8KU|2xw+&PZQ02L?}uyr269aigJ!{og9JR3ytn$a=>Myom_xW~ceQP%LftzSF=$2PhmxX*#Bmke@;DAF+{#XNTe864yZ zyR-Z2`zMkJo-;iWWO7g@9Qi!;>zNTNd%CD|ttWOH!TTc|(V%%Hc1neQ0{IUKakw}ww&57m$+g&CYh zkjueZB{59RD4a@w;mb$_c^p(`sz+Zl@nbI{DBvLGz8DrCT}>-EO@rbQJmX-zFpBGHxsCqgL|+mRJmkY4)2wrk9s);>p*LY2D4drKP2#Ps~w{d~gJRMr{@jjl8poD|0wGvpQx928lQuB{@ z5tMT9Ymx90SoMA_0rR~x5WM1GW^WJJTsie30dE4b5R`GC+};V^TC5#Nz}b0^5tMVF zS?&ZuU2Zoaz_L*eg4Y}*4YUQDWew;jORrZRf;SvEKivbPQ|wlg2p2>05xnJKMYsf1 zuZj z^IUu>f{z>|y>f=mbIK2s2m=?FBdFlOMpXiPH2O3o;B(0v1eF|g8zzS2_&z@g&@p(A zpo)WD!Vb#Q+LV0W2=LMQh2R?pHp)k! zHcg+-M(y@SLH)1#N(~3fO@(7uA{JaF5pJb4MDU%11zTkB^l&Hooqh(55&Ynwdx#9= zcOTNaZ&p%M1V1@AGE$nrgMsvNm3Y`RwwJvC(T=K)@?nv zRREzTrGKPCdu#fq>0VWya-HOpUa#utZ}Q2^Ub>>DmwS#NDWSBi&i*c+9DZLW>KY~< zOYpAp{{aiFj@@xX6h5xaRkAYH_@Kq#_XArQ>tj+pe(x)_7_!Xu{*gMtSH^BE8m!}x zY5szcj%Vs6Lc7M!G|@?&Q(Z(>#%@fmBmc58)>2VV=aM|Yo-A_p%&s&4wldbU&o!MS z*VTgvQh)y&B((0pvEI4{l^M^;%GiwmLjSrlwtCql(a@QP=DC#(SERmroOIEBwz|^H+n{JPB-hsYxr^I)OF_Y&e*4R0=N! zIp&cF?Hbu5u;rkzhYeh9ca6T@6fGnO>^N9*KniPKEu26i=)RF5u;)Mn9HI5Ad-N6U zZQz7J%z@0s9zt%%q>~6kZ#yH9aG=mg4u)~5jR?5h$qj+@UqG%MSUQKSC*XX-5d<<0 zUR-d6F`-I^1hnbwg}{LW_sLRlIATGIirI6HB5>qju$B}8+br!tA}s&vgTRS{o0<~n zs3NC>f6+Pq2;>}OK9j>2-{$lmr`|CLfinl))2!iT^RzjnNd^0Z5x8(LT`mUG>$x-? zR8|i|;L3r$mjp&>pP(acWAB_q;KqSC*&a;y%zI3lv~<=P1nwNPT_T0P?=Q_G;PIgd z1V=dNvivZ3^mswQ)vd`0d^uQVYY#p-oZw(+wjE3u zQuv$zKkH`*PI6%M-3~^Ve$XJ`&6h$1r#MLeCd`VDocMu&^~+x(IL*OMC3BcLq2osa z8ow?5U21$5*&uzwAL^BlYqPNZ6Ru@Nm^q-Xv>5W|7=i7O1f zGLe3=e4T0$T;SkBH{n;(+f2U?`bvr#eNfHw-SOl4pJY;!1&EF z`Vz1_+8Dt_4i*T9%&s)@q-83t#?261;vi{~L>Nepr=^ACvgQclIhYsV2ntEwbI7eR z_E$>;mpK^J!VK02D7g{P!Lkj41P=W2+(38p?mh&Jc59Cyk%PX%G3THYUrB)XfKCXm zaPTwG6-+8&G{kaYigP@Sy5QjpfwOxL%U`4vKwF8q=HCwmM^ z(e1W%nKr2uY>%y@zo``T@YWM$thwStlKn6LWq(&G=(xgFv_0U{3xdt#>H^n`g;qb? zlqO15GNB)5yJidVez?YOpbIPH5H+y`$SvAu-(m#UIasP_2EO+O(_GBEWGR9h9Mo9K zp)7P?1c|VE?Q#Su9E^^!2jiW~mJ*QCZWV%?9JKgk3j>ne=s-c9%^C!$9GGA8fVc7% zbZT2j%{l~W91P#+AsqfJ`$n2%e%lzqEe?8)mqPTznZ5)JUA-B>Z4N@$%iv4!g~0?E zhi^rY&cTm3TiCBI`a-~{-0cYNa4=$(733@H(f_n_(oO_-IXE-N94`B)J|Gd|+LDiAqN|U{aZZ^ zC({2zO0q42M;v5*mxHR^tC1vv+A1-E#~henw1@t+?_3F}N{}LW!ok$7!Xbif{T30B z8S022n*-Yw5>PYor?*C})EPkz2WR$rK>KAe9Y}-;to$g3mpdkh z5D;j15FsUc{UvSMl^mXR8o>(=426N@1cH|wY-@NJ^6$ja@%d*( z=MWTg5N>G?GoLQEA`zlCMI$KTpq;7%Tv-=>fq-)=7Z8+kuwjB2)QcC*CSczAI0Uaa znC9vVgRLV^5TGK9M^MJW`R-C!YjE)$0mYpX5tMUK*xv~XvI#-6w`td*XZm9VRUAN!6Rf{@a}BwMQSY)5eB!`E zya)2##WZ7WHa8E!XAbh8$)KO7E}b_tVn6|cY7U0Rx`NDc)>hIa?}mj4zHneA%xAnl zyalZ{W(U7O@Rft$T058$DLzjkD19wP@Qs5x3HzbT?zObfr+wlTf*KASdb`5s>6ea> z2;+2KBlymNrLZAI+TdnCC}{c)!4D2z^^w5r{FmPea9sKU!A}mNn%IHWoa>$hyf3Rj z@QZ^Xxnh`6?0b;_uP&bv)N+umcN83KbXOA)EBS)JY8V@NesoO?qG*#2B%jn@HlWX6 zwFv>#lTW_T3DgnK%PAsh;X3m=S8qNUSgNCOS|^0SFyB8wA=7DjUq!c9&+1DgpL}wq z4%VAb?!4AOciDtZ2S`#lF0W43pHFW2xKnqRydacNqYrH^n`g;vWZ-w`dj(vE(1 zRyG=p_k%URfm&RXKvc>d+NJM)X($344%#e}f?Dl-`a*r)d^iGI4zhOI!10a~>D$ZR zb|eBj4lc*J!OPQr^tpUeJsN>M2LUggLHXoYT5t0+7>7X2L8A;?;cGtTE_uu{Q*;nW zIB>4E1?^vU9t5oTDMBFSz-NsVl4BnoBjC*bNeE;d=nK2)nWg8`i|(K>6@dc>`T2Gr zZN7qz__*x{1dbe7*4RMnHIr%WHZycO0w)eC8r#59JwrWm4QD&fL?Gwj{BA2)JLod) zw{6~HfWVo9b5q2i)KmEyiI93>4gwbr_BW8jk|J~3(bL>H4}mKOYrnZd%O3-14?S3a zAp$oJUT=1UDFZd>O7Ra3mLPEF;Dm5oH~CN)BEgac38!|=sEW z!NKV@_F$>oWdQ-HomV69jDy8m5-7AOze>O$)vXA8I8fPa1wn%r zk04;6>vjab96SkigYv+=A_8_#GC|9Qp3%y zdl3Y1kUh;2iocrDsT@5u_9F=7VB2CV_;J8YiCn|XP6rVLaj@dFHxyaEp;f4JzK0MT z=OCz!7}7@$qn*`povjcAb8uPP3NGAiZb+K+!`ucz2nPv4&LF!}O3Nh{9qbW=a^N$> z9h%#jXJe z&T)_*>eK{N;N z)6HOxr*QxQRm!IkoaZ2EgbVCxYh_PBgljm07!D>2n+WK3XmfyolS9rSxWIv$qCMnG z)aWzq*&!N1EC(&Oxx?u5$A*{yaFh~wbyK?iVpyyFD{aZBP5T;#x7*!tSbW0!=0 zWkr_|T;f1cm_a+NS*SAs7e^!_i044`h|=vT~9TT;@PoT?R9Ee50L{e7$Q3 z5;%BM>JHbBb*KHMRarL>BywOr+y;ElOKDfy=x!>4D;y}P3cE!q9HVz@vqiTNBypf2 zEK%CMRpA`DXw4>f5nSb2$DI7xG04Uy~k#ge6rA?q2^!tqyXy4 zCripgb=E!+^&n}XcTk1mxaV649DU&rP{?#*j;rV@Z1eRd`K0QtI#_Q$ z*)ge+ZsujDV0v1Ij^FQ{wAO7 zCD#?T9oF>>NeLhQm#sG?6!OV80aB52gWh`xo?lrPxLz!@dT`qmQBv?fh9;VKXoB~{ zHGTu#>+A#L%ZurUt;(z!g6kX@4VJ-$2iua!E$X_r1%ewKEb@)Z9Beyo z1-06XC}_UED}q}bWG}FXiprj}K$qB41;K3&KE9TKUW;~g@=%WpJrSgHa8}hG8Xs)_ zm|TNqi{1$Ca4=WT4xSgrd?g^xNgcu6e*qipV0`}!DFLMoG!fk6plx3d@Y&pjzP%3J z>4)Gx2gPnuh^apKowLTw@?*NlLW^CJ*EB zkCv0|{U;*G;Xp4@4C3VPIwZoE_EQk#avya!Sr0)T2eU_5!Cdu@w0FCq z&vXP&IoMWs7-HSKsF5ahdN~6@J_olv)_D+Mn6eH*DF<1mc2K)Uj}DHTxf>&R#X-1@S20lw!-p;%PKQSgo3#y z2;Ok;!c^FhBH#sG!rAn>DT22g%pNWjGhhq-mF5lGi{KpxodU(+_UmCVX;QWKJ_PSM zSX3Z`5q#o6x!4jio7}4; z;GlvG!DkNKAIrh=?hRV!y0gv^K{W>hL}C~`_#X@K6Ph|B_`*S^L<;8u2BB zsncml7lE{dU<9=sbek?b4-E|H2c^U(6oHjC8=qXXK_YC1a>|V4lX{7{e}j7R$>%v? zIst*A_9QLrlU3*H%O}O*X|$$gD= z{ggh%k)&{2%e=p@vHpDWKjV|PEh5_yTB!C%Dzx`MD`Qhr7Y37ja+5|K{Y^fZvv0oW zy`{x;k`kKssk8N_ghD>)q~s~u{WL6uU}Mey0Sm2Gc%31d*=)NzSs6Pes!d-Uuht&G zR>n@RDIdS&Q+NPb<~sRSo!~2DGjfOOY|A%zLx{`sdWq1k@AIs5Hh71PAS+`Ns_V$V ztc*2GoTU??HqnDDa_!!-?cdk(Z!2T-FWu15j~Y=%P;2$yAfa^zn}+HR>Az$*Ss5Gq zU+7;~#-3=lL{xD&-GnT0ouE+{>fcw!J{xgN)GYdT5@A<=&xAH6=w^u)FFKP--d3|m zcEDf5n!g&Rrn-Vexd+X%hh}s_V8g-LWLubZF7hyma8x;`G`d5H>DQ>F$X=@*uaxZZ)lh0>0vbl5)S6= z5<^+<*tR6Xy*v#BQVy1{bcUtstLf-ScbmQlWE_-tw}mgC<1dj24IlJJ;K0Fl4_nYZ zu=q3qGbd{yaO9wiflz>X*<>&QM@|ez;Kac$FIPBdt~8Z^$d1Dh$T`T`Ck)thXj4VN zaIfJAoH^*U#S^-hoTio3V53n8TsTNCbAr6~3GGOP0kvZgxN>mtwgVh(cl0d*;lAS$ zxN*?A!Vv;n_M{WfhH8osxO3o~;RtIQ&3Q#4^t73X;0OopI$J~HTH96xw62+qz=MOS zI&z4)Sxhsd=x{v*o*Z;*D$E$n-*JXSP*IqUz>9-37IvWe_L(gK1xYgycymxD%)6gc zxQ+HT6SWKw9OYn}a157C%NKOf^pn$b5FF!R&?S2)kKIUTVpQ#zhrow}^ssA@Y5lR{yL~w?Kok@q_-Ik{GXI*T2 z2thap9mXGpQdOgAB*MD_O9T-d>=8CV9)3XPL_pR?8w6)LxIbJ5+OxuF(yTSf9>F;d z+E_V(;@j}%B*IE9DS}82rUjV8Qnl$X2>7h!h#-oCPS>1Z;xmtf1bh|C5kzwksVxCN zwSOFmd})a*g7X}hCs{+a>L_axq1Q)u1Th>KkG6s-`(tQ-X}^glf(slh&y>Kju$hV^ z!o?hK1hE{LjFvzT-wy=@G>q{<5XZq#QwbPf&8EXiMIrtOE^=UcMFuX0>u6oe+cgNm zB@Q%(x`419A)PFBt4|1mcn${jmxAKRngntU)62sUT;^cndlxvC{gOUF9kb3LNZ`O& z$woNn>wPqda9e&BK_UmkW;?<4oZ$TgH0cZ=q)4=UApeZ{j6fxY7X0EJBFpj<_F?^>^hq*ActNge!crC@bME4qi) z)tWk4f2E*R-VWW3opVOfNnd%WOl{01^Q;|5;7 z=E~%b8~W@cg6kY?uyluClV{N0?Fq*!1UERS6uu%~G^#8}gecu=1SuS7SvWyJ^VB2) zE)V#I;3fxSY;3_)S#Kf%6R&+okoqq`7=-P8CUPMG)&{>2q;W7y*p+46{mt}2F8Qp` z@2>*PEe__a^Mb_>JZF&zwnhyR+~%Nqr4@X(?(~)b&Co^&(m8m)(gr3ayy{QDqLxh& z+~L6ARt~+Q-_tj6jh!-ryBs{~=?3pcb*Jygw7V@3+~YubyA^!1c%Ds~G*+cGg8Llw z+U5w_{wwzo5U{o_f(#Cp3Zo+po3x|v$AJ6o5oB^upzH`*cILFtv(f(IPD5O(d_ zytjJ*Y0}UJT@hq)V0GOYdVSX4M!?+F-4Q(GVAl{aobC6Nj%^n-=!xJF2RFi`U~{;D z&M~l@+6%#B4s?E4!;IOEXGxQkg47T^;b4>S0J#tEMu+AUYc&vLbD(bP051<@(9eHs zlfDRYIDi~GIPEk`pET*fmHr5FIS9P$2s@|p_h1B1 zIhdj>hMl5AY9zw+S3?oxbC4ysg5W78a|l>5XgGob4i=0TgTbn{^wx;qIugM%4z3HQ zo0)o_r_)btkB>(1oCE)@5(usanokz>ABUijgIwVhA>#+CC&)D@p3^~4#K8fvD})BF zSV@54;0Xv`aIkua1hgC$&|fLy<|G6!Irz~*0xDge0g3R^eJX-t4#MJv+Qh?jI$+~v zF%3Zp2V1*I;L5XVIuj#u=L`g;9L(^r1Fh(ew3rd-Xn^1q2lJYFf|6Ml&APXAo{ON2 zgJHsP!e>h~u9J)I7C#R`IS1;(=y|s#gL)9qX3jzcuQ}N9)E@jQ7bz0ZV#^W)Z#WPw z_JC_sqG}0PF>4uuw;U+`a)zmWF4O8q!rc`J-f^&4T@J>E2V+Qtb*ZZnyyu{+%o(z? zd(z6mMu&9>K5%e;qbt1Ipio633~y+R;3EeqmxZGc)<|eksbAVA1Qi^p^l^bt6<#z# z?Z&MLDmnNO

#5jx`}oTA;cEK@|t9D`e2{s!}ll25P$yeBwY?B!d&yEusi`-C+-c z&m0uCmcgb*nWqUbtT01R&4EWFJ9zkP745>QWgI~8g@YO4Hc-`Qg%ycVX=Z`oD+gXe zv3r8&#`OeDkG4ecjf1g8b}+K(d3tN~@wGuv!@BKeY`z_?;Mz}wuKfg ze$l>0mX;L34-P_|st} zhCwa}YB?w=mB7@?V%ihvEO$p>HGDvO<+jSodra4C-Z5m`&fU8^PM0`Ak4ydy$jI~T zxv77Hdh*FFdOnsFKKY-WmdZvoJxh|ppy)bTPf{q1;u<|P(>wnRFa>S!L`@4LyaEPa4zFl22+p{vYuF=aVtk`+Ue9*ZkdW zydSLj4dgdU*i<6?LplNDL+&E5;UM3^0S@&@3?#s#bp`@k4qSu-6WR@UJduF0YaSr5 z3ImG9E{lN2#>rL#E}S@;|mbTIPgAf3qz;OY)U}%mgfi@IG7wEl*G@L z(0^RQwIT$L95kOPh4ptedXWf|4;CYE;^1Sm!=QPf0Ucv?ANUG^oC8r4;k3Jb<7i1d z-nblrGY2ML#h|@){20=tpI_b}aN%J288O)AY^FW*@FVXLxN;D5#2R*u9^H&YSh%JF zfg1-?G{m5A_DKc-9$%^uxN|VsR1Cj1Hd;Y|#lC6;M>wd;@PclJ&lY?FRJz&$5MiB&Pdj3S<#ewxr2VtdnReu7^Zq_33<{&9kScckm zI~@!>-b1nfU-gxv9IO*=zWf;bQzXKrlS&AVaiHE`22(eiYZGAKya@sy4t8I3f`!ui zUIg4tZ-&5^gUc$e;Ou_pGXV}`S|IS_pxuhYFjYN`_C3X(tq}NguvS>7r#U2uP8+T; zYKtI%gTq1|Q(4`FW_zjM+9L?$psn;EbUG3oLasp^&Nhul9;K!cVO5JYiMn(7P(Jwl%oplC4(K{N-4_uE0r zz@?D{tf`oS;5-MDeQdzTEbb-&XRH803s}Nk_;OJm;P*>8k(Y#Ag#9qI%x&dj_#y=8xbUP;8y4a^Aw`qlYH{+Nw2>_J^AGGpCLN(hWe{X zT6pV9ovSaOob>apPKUhstprYb@CPVlIW#xB zDO9SdllAA5(?j;_E=?%uLTG7A@4tVZdZ^Ie|C|{+Wb3^hB%gF`RY!l5PcH7WO4RPc zre-81?Ap4{{w|;NnH4AsY;QZB;A8&_7FvB%F;^6paoeBVar)DI@Pe=L8|aCJ6;!p| zOLuVin&^k%ItO#i#gL`xIiEzh_bvdz4Gye=t)Rom3OZTBYvpkSDIBa-aE2|tXUrfG ze5*nb+~nYVnj^eV@utHopVys0kjjCTkt4J>Tjxw7jB0ioK^h0`OoKrGvu4Ks0nJCI AsMlqAu*R_m&igizE~NC(Q^WN$+D$gW6IX7;Mg$Y|I}g`(0zLs^+6 zWHc!J&c|^-`5n)3=f0mmpV#Nz_j}&gd7bC?_>N02CH&uyZM_btB;G!8d}T>qH&K&` z^C!&ku!6-?JQmtn53*9VTsXyJ!JPRM=S-MC*=oU}*|R6i_q19vf5yTo^R1@*CpB*B zj9F90;s4`a*l3dMufLmDplPl0)$8-g|NLEx=Bmw9RTuu}Z?~B>XTbt3C4&st_>*ln znf#S5j)KIkQmCK3a^aQrrhlOY z{huqTyxL@sNUW--s`9zfuFHWH?|6)JqYP+gDEpkLARTZnY;7sVG zSN*Yy9;TWXi97M5%O9Q4%~?h{3bAI+ar3|0v;8?vNoDWPznn}}qN?@(+M6_I@s#-! zrcDt#dVEPQ$6Z=O+F1Mr&jfBQQ|X}86&uu7m8xq09Td9io3Pb!(S`b|Wk$wdLRVE=wdt=m{@+I#`n8v%nZiyc|BE=a zTGLlWl=&CYQ`J$`phW1{2CuD-hAZ4p5_9DbM(CQsuv?A=KU?b={MF8{&m%?c!LN(a zsKdVF8%F!OhHq>&h~$e#+(x}fh4cn_!;IKvbFCV!jc}?@4{*BKz=s2+8N$zrnl;%cq{rb_o=X^d)&|Q8DIK zS-#DKIG0Yi-4v>MS1`H_s(^*`e7a|N3S*=9{v7^U}U9S)u#nB)>=VE9Ny= z{=HQjmtGmk^m&wju?q9eSbl(qnoDn+<5S7s7iWFPye7-*_Dt*5VsWcpB)_AxQsjRg zj~dNce%0u}UeddD7myN> z8S~mKuUf~kXWI^o8k2mxvnrU^Vfjd-^F2B}URFZ#r_|Ljugmi9CC)vT4{1lA@5gtm zV_uKtos?oB!gEFo^7qY}HN(7!<;#|MK!B}}nB*@{YmRv_%fHO-2%%5b?jiY*VlB)| zSU%6&9HL{tFCqCR&2=#^WqI%Mmhk*@*;$gmb4G-D8OukuZx0iaoqmw~iZ)Wr>$ChZ zhtA-CFLF4^pP!_Uc>|W0)lQ(o3Xs7eJkkyv^X+|=E#@s)K0muNNSw6Kk-x8Y$PV+ZSUys_BQ$c0x=Qov z4w$!Oc{_1i7}(~Kg5-@ycENmWmJc>ChlU62?MOanQ#Z_8v3&I~Gx#`b<}i}qtmKUO zHZ1SE)f65))~HAF2ON7~zAej7n_v#<)_oI5zEMgq%(r9tw4JTs<++X#B;T%UZ_Hb> z{7&0e;P$<&J;}d3(--sYSzh(CImErldr9(j^#)+R1IynX*Ak{Cyoek~2RvKooJ@ol8lJ_$hj(J;_pZ3li&a__hiR6>xM`FGc%a7~c z3Z@R&d4=So>_%h0Gs`!e(hA($ZQVxll}TeUZ^!a^Hs)Yzmmf^>Il2=tZ_n}#+n7P$ z{*AhmeDD2}Ft1>FrN*Y<{y1Pe$$#%P74r@(f63MqcGUY(LGmRRreofb<>N1!LX}Ad zeg0qDJrna?SUzNi8Pv6j9ZmlJXe$rQcV+pyl_qf7X8H#+CH&v7lK6Xv3+I20Pr6#v zQnfc8+}6G-I`23sZI`BA{4cAmZqLjQvj3pe&7Zhrm&<>2LYXqHXCuXw!PgT>Ni14+ z<-e}h+TGB(yM3q8q3=jxYkcbJe_`#_d&JpBih{vIG>P2yB<3Ha(Al|dV-+K=e>u?V zum7gL;v2nH_B^eTf2iPHLvlOE4C~t6@-O=3Oe&}-p4HGl)$pz%BkWrBd$*6+f`4I! zE(`72eNg1QF!-z8Uu9rH{dl}sKGkC&HH8Mg=}sh{v-Jk%o!D*G!`lQ3j}4>4fOh9^ zVZJ-d8)TZmsr8rFk-y(fejD@7EZ^9}6poGFKp!I=XD4GGSbkNu3D~^sPRo$&qEyWH zV0jByQ|K{n{Q=USM?=#w-;?Dvr*^xi(Fl;o`kWn#Xn~`Lfj?F+YUml@`mPU%EP-HYv3Hg888=KVXgtln0%u zL;n8YMdg?u#`4L@rr@jB!-C{{L{(ybILi;dZUPmtXX!BJs6!RzN3i_BCUU46H<6Z^ zK5M^Yek9AczhVMj_j=G_ZJ9*r!mrns8_U17G=;&-tZ13}R;3>1N3ndbQWKaZ7deva zRUg{`^P^e5xJnMka-3-y;&o9O^J7>(_oE4feSaKF{=UU9Rm_iNdG`<#Xt37kF3Dd= zRm1!^mUnq?0&h!C(P@opgQl1t&+?ycnt2gpnj9NPH>9p0C2c0lKkLBn4%c0f&cv^<{ zYG#l5`7A%=lrcXFJt+m9H-Iq>#jv6x%^UGO& zkChzeq>@2|j|p_pIE@;^41K+*uE*5vQcv>$=_RV=@$ zn+asrPwGwbtEakQel^P*y2{~(gQgi-2D|uaH0IavbsfnjIecr;ixy^*k*Sw|y-)>E zOCf0QoocsGx1pA~68`VkTBU*C-5OV0C7Ac>l>M8n`AGymzmWE4D3mIN_39}e#NW5I z_^ZWVi=1Cyq}RY&Yr*(|?)GLgIwq33?66j5jjX*GTq2sI82%~j387}eS^q?Z{svax zSA5^!IMed4{{AZI7KZ$$|4;JoLByr+Vr6R>Wt!b5z^nap1nW46*(itpk9+PWp#0KH1il<4Q3CKMtlk3x(>t0V4@e)q00u0|#@a%3-s0v#$gMH!MZq z&%pwF;nBWy-UU@Hfc8_6MH)57rtIL&QgUARZL)%W@={w%+wko*v>)2iE@y1Us*vw zMS?1VAPy{snZR8~uR#Rt@oa)%2M5j>awrL#+?Ie5${GlEaiHkx!qaF~OiorF2GqoW=Y@N|bQf+HNf z2{DGOL3QaX%X^?5f}h(Bp$Mf-nwb`{dvfY*9kMwEaC1oa7)^Qx3&b>e4Q? z?COf(6bG(%<&bTAi#`Nam-ayr&cW@k#_*>8LRZoy*w7!rX%3F~%Hh;AYi|PDS`9*Q zh68^mIf%T=dl2v>aR`F59CX-Y1be#8nM**&X~PkmD{_Fel&te4s<)qVeBR4#iUDF&Bh^!;=nJ|1fI@s??FJ92NMuPbKoizZQlEv z(iX07oQ&W+2S0^txM}KDNm@8-HVwfA4lau1@HFw@2m%gA%s_CFgV?>skoMtq1OYk6 zXCb)6K|#I|bXsj)MnKY(IS4Lu&|`-jERUVkBfvvCAHfw4tQ_Ugb!-y7TQdU|BDl(d zX1E-ttu~^=pZW$%5yWtCKxPbc^-?uRmqvRnM{tb;>sfM`7`5j)0l}~eK`aNh7Vt);=1W-#oxjW#b zeQNWqH%M8S735muYO5ztXEjmOQT=R1pi_D8KSQC?xwX<&vE;#PRZ>q*+1a-S)>==l zTiaOS>e_T6DGIOZ^{4;P`fuRPERGcNvD5-gb>9%sX5t702^`FsZwzXHqAbbgy*Xu=q$L>i85;@orXbe4*%;>Arpw(0aNgRADFop)( z-u)mgoRZE!aGQhopN(N}hQ&$(K1R$$aEF6kr;Q-QLn(!ToeB>G$sDZMWem60InO2_ z|N2}6DI6qa8$(#&emZ_Go4Wu(DhG>a$U$tb=1y8@=Cl~WT@EbP8N;4iE#nAi6|xjT z8V5Uj$U$54^f&@S43{HF=fF>44Aw92(ZTBKGb<5fa4@K+9EN7R+(}xv=)DF(CI=;6 z#?Y&eSeF2`9zF=NI4IN=rkpFf4<;b<(K-b8I4}-0f{(*PrVt=`;)mcq2lCm*(EjZ# zTLK)8ZA9>ZgCWg~;c))R3j}QJvk5^q2P=*lLH8?`v@98tzXd@K2jlk{!MC)?Q>2B{ z6SgDB<)Gnm;XAEyR+WIg$vY6_ad0lf7@BXAwjf|q-`xlva$q~%2xg}GR}+vIwiiJ@ z2dh+#Vcqwgp9pwvasWXA2eUdE!^MQ$i3B{Ec?iKH4#tX%!8ocfZDH=W5Co4o$p35v z25vB%w2(US7=kApsN6M#7c&>C6JVkihTtg&?%j-F^ZOOb1RTsch2R+n4;vf7y}X6A zj;VX<41z)q9z+_!;pF*r2(#HK0>N_*qK6nkKjR7XD9LE^Xap}f7?NxRBl6)JxrR#3 ziwItFa8BD0EKY1nB0%@#WdyG{Sl8AN`c$MGBOqBj2El6%wyiOMBn{5EOH;AjSX;x(}j{8GpA#1aCQT4Kjkt zlTSvG7J4S$Mo_|msgWU!{u(rZfF9l{2;OlpRmBjVtco8I9Rz8S!z5S0Ydf>MiY1RpsFyJiTR-&NTV;8u`} z;1dV_#rklh>6BaoMz+aE@R@^6K1Q(BX}%Ky{T4q$@Pz~IEe0?&?!yNHq*hN6lyPvq zogqARO~@wT&Y404AvIcTkH1a}gK zUnec-^?i%rD+jTQ4B?HB5xq71vfm;2#zDvvL%2U~btGwFYqw7bsyKLJY6!hNm9+_o zU-bn+H3uWW5Qg5~GmC(cjVlm*=OFE=A-F{zDdDz%trbSg7n~u`$2#-RP^fg8US6#@XgqKesVD8ivua?i^<=)At)fkNR~=Fm zIz7HuBWtfGH!ETk({v*j6Po?){y$Nnzww7H9lAUFEF|^hqpIKZ5A~!$po6{djj7e7 zBwSPd+y1GZ+@OBIzH8Nuegx}&{})*3bpw&ABBJy57;*@6*0-F*|K1Pmlp>$X?}f?MUdI(Xh)3??X2% z$g%03s=v|So<;r7ryQ#^YXI3J{`&u^T8^U%pYM=*+h-8As`2l}{)YYa$u?-Ar9>VL zCySopg?aHu!;?t{V0@tGXaWu$dx5~4gU#3U!Q-;}d;-jey++`}LHT7FWZ91oCqToc z7{OW&j^5FSP)n+e!;>NBjMc~Up6Hk2@R8er8w6Lz=GlKOT z6uBCLSx6Bbfn*;qN8rc7#Qp}*?9?b3X(43NR|Fe4SUN@@4(cgz!AIk`s*;60EE)Fyr z8o=0v$zusfzi5bHHwO`^22dLAK{q9oI?563;UHK^AMOo~rmIvzRi+5`a`60_6khd~ z(2=0VIdcU2IMB=2hbHe|m6L1G8)%7OKL_sN`Y=X(f)@T=CbU6tfP-bTWpHZKa5_%Q z>|l-HAP09p>qA=Hce+}r^q~WSLmae`=)?7|z38@wY1?fP1apu+Uk0)?lVEbuT41(z0eUsC5&gJh9Ee}LCPb22r+uxhO}V# zW*CA~98AbJfckY-PbT2RvXKbFIp}#(ANDRZr<1B$Ek`3b&B2-tGMKzvWfEy&PQh3N zXE+E^$e^Minhs80b)10UEC<=k4In~i-9^&E{-Q|;&T%kzr4(%E`*a{+>y@bpA~={F zXaFlcCr%@vx!DW^ksPT1l)<@13vUo$e`zLyC=PPfq%iZvAo>-Z*wq6;GzV5|We{R+ zMBfjWzRyK)o`ai%^x?wrbR*Iwi!%!lT;QN^u>lxqoTrbOu+qf{E^@G7l0I}f992PD z=yl5z!6gpfjg~>z#LkNe=)7(Pg3BEE&5=Q>O(mVzdZM}-!4(cVJePudlO1#dX5>3B z1XnqzKBNy7{ z-}DbN1-s6!wSRTMPmL7&0bPFEKg|?)4a>K`cPRZ7!J@AJ0t>yKsN7Q#)_e3Na*Hmq zU4$1L&u<__XDP^!X3-&x{q`jY5;z#JOa=$@R?)(zW#BRdH#l&ruMg#`?-Y?PrA%0f z;3fytOQdl4=SI4#MRapDf?FJvACZAYx4Lgh3s<7N5hQZpTOfu3P508RZKYG!AxPq2 zmA*d21>4^yE%^8MLvWje<=qWoS8+Z1xa*VckKhgmPkd!?#OoU^50!NS5hQca;*Au_ zlCp=AE-BC7j39-B4I}koYz{8$(ucvZuO<*M*!nDj91f28 z%V5^MB)T3st9~ScTn>&{8i0ArkbR_u2HT?%Vw_= zjqEV%neJEeHFRWRRot@DOPs_Qy*EB^;D?kV3bC@4ph@WM72f9S5mTq_D1o58dUq+v**H z_Z)26E`>V-SDz*=q~?A=@PPxZG#R7>S<}V8ApcJYN;&XbB872*_i2}w>X#w-$U*8M zDLf4`rWYMGuoA&14pwMNLD}@Yf?UIp##IPDb1=g}cnEa7Ovg({j(LDoSVCP^d9Lb%wn}G1`4G~mu5MUsMh1X`& zskc;J6$F(W6zq}-^Y6_JNDHMW8YB41!QxagG-=+?oq&(a)De8+K%%Xu9@z<`wI2&y?a_C~0Ql`E16xIRxC!FLW`n@GXD?IIBY4OZ$Q_`yNw z11Y=>P*)=0LxLE=PY%lJ2r~ywbq`ESQbh>qy)RUub7Np}!W4+o| zp6l4A*e~s7aGR8c%RfJ=akbTxyUgW^x${aa2pnnhidnNupE`z}2HCo1&Uq0rJ{{gV<~Qcv!_ z^qc;no@^lUw_h07sT(N?FJAs_|5Q&_4XLN-ck*~sg5$6J3oP_{$<`r?D?U;>NE&AM z1~1r)-#`<)%V6F1wsdoZ-r-^d-W){C62o$z9rPK0Ci^`C9}Z&gNMP0QPV`Oaz2zf< zwHzE1mWcFwt?Ev`1bq}=5Uk^1yx0ILvLnI?xRz6nz?Xw?VOrnj)&gGw#)o`Gu$}|Q zoBHs@ex?Hfw`J7`{5ZIzAuN7uzd*-4;od(GY~Wzv6dC;Rc({bLpi`uj@#~B1&q3Bu z3Ct+jA4!0GS3Lw9IheX$co=nU?M#5?kcJ2XIB_h^rJsaq!t4vp z5p3mPKzn`Yn|WJCy7bym8^JaXc770Mhv%-MFNMgnx(K#&@JU$9D2abY=g^Hk#0Y{o zm_A1WCgW$-C0+8UD?_k@gZF#%VRwt>Q3O2nG(fPE1E(+jex34fZzxRlQZ-| z{f!$Pdp2Lu3&BwicC|1NejjgOGt$E0cD)fCVa}zJ-rCcW9YqKQ?E^yGVkrX<3YSF3aTe+SHE^^>EL;@2Qf6F8- zw02s7;1UOkkEPI9T1wXt5@xPKaG3*@TM`hR??WfX6qCIWT;V`Xcxt@Z+v*+ZQt7J@ z1XnqjZ7Kyl6LtD9UN+$ff*1~_4VQs@j}2X#sqc6k!8H!DdWd1`ox*vfOD}xG5X5qj z0TOWO-E1`hZqvdMT<1V`!vIF~=}pUlUgyprh~r>)Ul}B3CEOwP|6v5sX?~t-E|JI5cS6e;#W_3S>^7G^X0$&!d{4*3PorAl!DIx+aTabG4O#Rh0 zu-1CAp6_Bs+fT#hlA>^wY)y@>09M5l{L`{A8xv}dA0_q=Fk05~qx3?0Au+*UkUFBN-2ySq2&Or+Od|c^FQin|e z2ySu^8ZHIjf+9L1IkS8-f?FKiOOQbi!-;f|bkT7efN9B$h~EK$k}a1e{9Uk06-?cXt`2 zo4L_P_SvTbKheiXfGPo3=7Ya((}k0Fy6A5ZvY9zy@KbPLoe` zJH}1V;|S6?FiVy~Ve>a)(t<;77=m;T_I#E=%j90PCbkL)N07n6W?@0Isk^r=X`x#C zEP_l9;@U{SC+)*k0&X3SK#;}3lpPY-Z1a+Ci*dUXjo=;!6R(OvN4Gh>=zc3MBDl{% znlK?Ft}{rVbm`9b%LpED(C?rOTrSR}Bg4HxF$l6b5a&x^y|KC~Y2n+T>j-ig@_fkk$A%YhiOjj4C zOQr|W0r%#iFA==t!0v|#JeOT=O1kvA#Tx{#IJneS3KQGS(;y&hK{0~Y99#*I!dLHg zbg+6`>m7nO96VDIL!JEd^mBm74+x4lNO&cN(@yK@W)XScPY8-RXgEy*EfzkmL#{#3 zrVPPb4hD6QK>5b73j_>^s6bG{L5WBLi4BeE7Togf-w?dxpwLbRBV6CAzax0h zK~_B(_^i{QyHS6J{Y3DAgN#o4(BiY>3DSbDbKM8OhQp;Cv=-h#9fwaZCE$B*eFPsl zXxc(pZXCGw0Rg7I$_PGj@N=mQPNv1SBS7!73WCoZOe_>uaecU;-?14v1YbF5rXmH6@QWn`B>Bk@eB&TZ_^5J=ryCyuyCX4Xsfs=-oh?XFIQu}08d-Zi`FQag#a!F6P(rmkX#W!x`fJv;zk}xPj9Ijv z?D(7hp`O$%d0_80Fl#R<3E%xcTWd)u{6n56#Lld%um9J1F|HK-)VT>C85t`YoXZ1ST|_G_v)>k@J-Os6&?^y_5< zOGVOGMN@JzR6%K9#RgxF=;g6Lhb;xOOD; zZbZ^c#iXl0CXth|&z*mxzdac%{Ifas<7b|2LXWt@Z}m4vT!qi~z-|l0t&Yiq3DfBD zM<(=f`@O@8F9U}!B9Df84-D|ay!fNx{BvO)%(^Ze*cDwdM&Qjstgt=LMePfHRi58! ziok~hw-)-~Z2760bZJT#a|CNSm>njZR!KK|LO{BeC4zMvtksaf=;?#56A&F|g}|4C zaFD_F@z3abq;ZFK2-b7(G*AW;mv|eI7L>lXN8rbSTqMkBi>K3y;@O;Y#H2>dyaxl7>YQsZROrI(-W5p3jO(M$>S9CzX=0ew9k5d?5>Gf@VeKTTas zzy!N)2m(3SJx>A)cc#%XPJ1VF0W0^Ai(MJU<5%NRQD9al1pD`4SaO$Fa$d|*p@1Rx3eG9Pg?O~1cIF$Y!Y^# zRyUvFN4k{iJqp1t4y=vEV5@wo1p%jZ#v<6w!Or1Qs5`7l9|C$E9FJfR2UCR8y@MtG zbQ(Y9H;Z-h^}fqCLv(!zj`YY`mdAWAqI zW7yDPEdej$*CRO2fw8j~sv2Z@5OB)CAHfL@UX2uPjnLWjJsq_%06`cBcZId>`};$C zkQU13ZbopD11sS@?f15+69J=pZ$og3gG)a}(5KE^Isp?kbO(ZP4h)68p|4uzy&)}F zIPOMpnuFs-!tN^Lp5qAE(Q7Y)GaNXji(zG-J3a(_$lj0OEC>FLB+#}(MpxQW&m2N< zj)N_ogfmTzuDg*I!nTAWh~S{pSqWIRR~tq^tL;Y-L~`))m>S6xS07qBs~( zAc0Hg57VjV$CjrMM03#RgBWt+&FDOD+QHKZ&U4TuR0KoAHd~S|B{-i$aDfB6`C_>B zaqB4pT78H_aFK(n=@OVWb32_W*t+-vf=e7I)TQuqWCyw_!Aj>cg3BD7-7SXt#y{7S zE_u0MMR0|KPf{ryukJ}-ihYx>A-KvxQ%@O8Sg%1RU=Dc4A&B81ri%>x16tDund!>} z1lKs2yIl+mlwyvMYk0ci7J^s~N-`uc_rRt=0!ka*MsS@2v8Ncy_PnnkVBN}O1aTZl z9!Nm*oZ>Z^DKOXH`3zT{Yn>_hdQGm_KRv;R6#UA4ch$JsW(vZ>S1OX5uTmp$!}8sK zhC-#2_x+IK&_ZWRGE=Z1Y)=iWb*7+Y=M9P&w@Ug$SWR;G*2vmt3flWOa>(1!b|{%C zc&@kqpQzB^@&3IXB3hr?MrI1q#lPtvW(o@RzuG@&c`%<8`-alrw$@@_s3f}-3{=Qx z5C2H;O4+}_La$rLMJw(|?$SH1!IogW;COxmZCN1(k#iWGR6JP{iXef5l`&E{7chqw zZ})~CMR0=y!{HK8=#7XY_w>f-;|OkYu;GRTJeoD3Bg6OlClTD@AVMsKgi0M3(t`Wt za0H1Q^cpXP+(+Nq65ulSEP^BsltznTOmLw!0cUh05!~h=QK(qmI$G0lTh}eo2<~uj zQW&fz-h5b}w2-y@B7$TN)P)wl1r^v4uy)K91SuSJeJcjbiMx&x5cM+#K`ICC9mL?0 zt3?M%-94`(xXVH1Jz+uL*zq`N!DdMUf;0}ky_Uf447V}@A{yL6kj_EnPcbx)d0Rz* z&7Io_GB{`@k-nT;n5H4f;$XhH(4{G1bO>XZoq^yU z2dnn!fl2PUEu>59rrbktpM&yf5#%OZYD~ba2M-WD;6PhgI7=zdrQd1Y`MC(PIan+# zw|n=O-XbmRh|fom!-2cI6vDzL-XUP~+$RWfIWSl#g0OR1BMH!NS%@HygZOn)FqE&L zWl8k&7YH75&~lL&zP-q$&n2HDuMy;Puv;k8n_cNNg>)%;SuuhF4&1e6FlMYC9fqYh zdWYZ<2hYMqFmc^xIt)89{R4u>9K4?@fuBXv2Bb?~cApSD;hD4KWk*JD7#I-oWySk3OOhhZoa`@X7vczF!MWt=Nzov zAXG}4OD+=NGFYkb*AV6f2RBAb;PLqc`i`rcTo=Jh4hF0eL%rmZL!^c4ehm=3;y`V? z2r9?6Dkfl&yb*%e9HNexEP-6CnIcdk9K7 z@EjwCriKIQgKWtFIf9QI1P#`Q*h8=BQ{!qkGX$SF*mg<+InVkfkuK@Qm?QYiLFb23 zn0i}2h=5rqED?O+AYAx9^y%K6ZoHf4*akrv2mYf)u;NNXI&+{C*A78B2Pd6maNoXl zH0jcHhYkoTI2gT2*qQX0xPy$_gJbOTZ&%|B`esGW){hzaCkLecldM$e+_{o9UYzfr8?nP$<)f)Cgu%-d~ zM`m~I7An?F7Q;wAsXkBX6|OWksBPu>%8+&n(;T0xq%52pTBpX-J#}6*Ke-=!Aq!zcF607r%j=g*}N4>&7{gd;0e6CJ4Ma@OKb{e(7eq^5%P5 z1Az|*l})6ewtE9z2hh`Mj$kbZ)`7wl;M&O(NSCe!Yav+2LF`!>bO_YVBcR?LJp{fS zOfC_F@AYIl$@tPqf?z!dP49}~;WKl34QF@A5cqK*vXMZ?!tc9Cm)1`-M6iK_H^O{d z`s)_7%IG{^j=-OTtM_Hl{}(goJR-I z*Z;g$mIwkl2(K@Okx*VlS~$1U3c)50qBSKj`PTQN1YGOT4#8#)E}RxNVh*#V>%)RmM%7K!S7z)%cEhnJf@lFV~agZW>a5vW)L=phb_6W9f z@NlsddOK-dB|xg}h#-iAA;RyCBCi)QCr^w; z5X?cAw{T#huJbd}rJ&Oj5QK2h?y??y`<6{-(gwy(K@iG;!Aluzby18ZE#!}wj^Ho{ z53Y)!r&=cq0$RqoBRIl==s(*eRg>wo)$7dJ2##_vNZ7MJV@%`Oqy@Jna}gZlKtov% ze&|l=MS!vT0tCl7C=oUQsvmy;jex7six8aP;K(;UQ0udZt{&DIw-iAb2Mh6C*`!WoX`5KO=!3qJ&BIVe{X_J&5h7*9Z>oBjyS zaWGxj%F#999-Vrd*DDY~1P8hf!uBkm!fMijhu>xdksOT85y8O=W90Up3l!hR<%)w}N325u6iOGMZ z&X*4(xWd5?4H@`;e3MH+&gx?bu5z%+Lkdd!l6w=-q+J+-7!JA%lNrgQvgqXAlXl?< zu5oa)SXd0qP^U`*LDmrnVmYuBjstfOT-cX%snfYA1lKvRiO~av?|Xd$3_UI&h~q%F zlL+jJ7tbQ~WZ3}kVqBlBwVrIy*;>)?*2N*DEHqo~Q{!r@C*#Z3D%x9H+$FH++}b}w zq0(t#enT<*Q^reDPxc$>TLWvYCtF)>Rb2ZXIffL4qjs#Xk+s*8RiD0$LS?Ah^SUomd2e zUNooc0FyJ0AV}sQRrtlL!@7yKq=juKk0VIoz^_~avep&z2-rCOB!W~94(f`)@?Ky# z0m0i&Be=^!tZ*FItN)^A1f1V^4nZ0R`_4(A-}NF|facVRLXghEB1Z|Fj_yleYz<$Y zN07lmi@joqut-iIT^c?75`s()9Q7oyeAAM(1c-{RAjsn2KR+hy;r26>0Ik*65ZvQn zw6G{^mDu+_0TYws5!~lsqp*;6;MRdA1c(OSMDT!vR5jt3G@9hJAs|vY2|+do6-{+v zQd!wT0(7U|L6F12w=TjiNUsTW;UJ(Y1wk$c2lGU5+s*4UX(8J-9YG!ktAvWRb;R+d z1ibEliwhC&cT3* z5-2PjK-U4rj(LmV1qa{WiQu%K72P*+)9O8fmmGkp2vozD&^4v@PfHQJ;^3h|IDnsZ zRFzyqPR?fpuQ@0juLt=DtmsqY@Z53)Z#dXATMUkFZ|L&-&d5pxMI5vh9y7+~)pU(D zSg#5}F$a!^L@>{1X%@K#Uytty-g2NMoV_jT7C^t#;V*w8DB)mktOPpmYrTQAuzh#k zx4*`o?>KPzstX^-kGeyE>$Um_-gA&KUJL=A(;5(9?Wc_30|%+y#IS#@FI|*}>-=YoU^bnMBu)kUY;WysWH&FRV34-#!0cB$7cIkh9 z%5tTXK7tAkc6HW+iNksvAQ$~8#t=az2knKQ`3n58Y&`)DI>-@x#IA|{H{di#!d^er-G+od z)6x7VD)cw)g`Y!Q%hV`RPu|o0P5)3&elQGBe6x8!k(7js^nTkv)ssQcFq-aSMOfL2KQf_@nk7RWwofbTLmmx1vvu&oy!fNR&0Yj|M>eLO*nu$F`SYs9cBYatz+mUb~hu#SVwks{FZ zc&J7$dXj|+0$&b1h6~%blgue-ciRlXdJZJQis!ozenF3TCz_;IlKr3mJ{zC?G> zt}tqiU;_u~nR*bmF7qmBVXR791pXXM6b>@2njBw7z?lSV1RFV6v{U#ToTCB=Sl8YL zK>!D_86!nre1Ku!VzJ8${6g`Y2i?91rM@U@He#9_hi;nQQ3h&{5I@!8Q&88;amo z+e#eva45uERPM2obry6sQ|yE$m+ErxOPy3&V$ z$Cu#<_Hd9T?DB&31*1p{SN6Ff*vrAJ(Ry$*#`-1!jfagvu#W??KrxKf{Y(d^dY{H2 z*v~^}q#jz6+9N?f-CV`YS*Kp&axQcJ@EI zH7%R~(@XOa9Ol4XIJ~ZVPrrnKrVSP$IKqK}qaGN|+(C!G!!IpCaFm0wb);~$eNG3` z!e_H(2##?O?s9xM#9zDI!1(R~OaISAbM;Zt zIFL*i!-w1w+ND(xhTtLxi$3VW>N;s;Ary4Hw2uiI)mUc2gih8 za({Am27MU6iH<;Ug@dl0^uX(c@*L8FW^gous~m`gpTzPRlSW^P&7&?Nh~XganjUeTqd8qp z+MAewAdZ7i#v&My)v5!TDQN#Bx&l|8Yn>@ruzZl>SoGy~q~MR7exb(IHdD}e{WeAU z5=kY2Q@t<#848uop{FT|AgQx0nJL&^b*To{I#Xbwd{S{eDqspJ_qS+VsgbqM6ihp$ z<=|NsqeAE<`PF}-LVri+_&7Xi-Sjh=DF`$9P5&@c;Q8~WBIc<>T~h4#F#T=+G*hr` ze=7%%I~H3A&i*%8=yhMs?G6p5&!gv(%#^O<1;_In$osYkUSw>yA@}sp*YOAvI5;v( z0vf5qUlU*-c@x164s;T9q5M#8X97xelMvkGKvnoDn&{W>%?Y@1_zr?w9P}R{g1qYg z`7ylH)9)fk9AQui0C=UDdO#CW5CNOcbi_<99r14X~i07J_FSs4GNp)JB`Gw7ox~i=dDL$Ae;c zzTrLH_He;mg5Ws^%Y5~~@}|Zk@;S&_=_7c-L5zbg$Ppv+K+tE!^GN3c(u=dTi5$kPmI?gp7-e z6@nrTn%fGW^jD3oq=n1f+aW0CU_h`K+FdICOhAQE2Lx|9uq)GpnCmmw5s(mVgP??i zdSX4Wh*Z!|dgt)Y2;On9YPk+vKVe3P!*A6U2;Or5mO3z?&eId5OG^_S5q#iag{dyM z6n39LK*fS?2ue9vXeoxIm+NK`klfxG!AB0Z3Dbuz<13U12tVEf!6y!uHx{;^NFxjg zcw^y$;4=rNSt2lf9zyGw`5pTp_`*T7@bn)4*@M<%&vN@ADC3}!wJuZ{=C2`LnmJ=2 zf^rUK<_L$TJB_DRw}zk%HAi{M#EA+2LRKWvM@n*+6u zVtCW-tQYwb)JtxUz=wl#!cW&VscN&GfO82p2-b42DnJBcH6=L#Bdt0kSjR!o7U3+( zE$y=eccMOKW~&Go@)8jEb6|Z=7tY4+q4UpY?({;ik%RgT^kBz~2)g&@R_opf z0yqf!tOs9ae;Yx%l)9%cf|)LhO~{2)1&tMp#Y1 z;kOyKJHEX{x-{bRUIZsOa1@SZ?^5Y0s^9Xo<eIv zB!VaodZg;YqmAho39xE<9ziq*va!Op;o(4MWz#Y*A~?^1@?jBdQ%b)1eZD3E0(~f zguV0&6x#k4f-4+YYYE@!yu)-lJ>_N+f~y?tJFhGJR>@xa23q(m1wqW;fD%3Ex4Cym zat#A^ry;n;fy`AnY*1QCOWYEtOa!qU^cH?@?WM&9dN28A-a~MmgSC~qa7*X@ZPKM3 z=d%&SaZuev0{#<*_agP=C#PVgRV8`dGz3t~zwvWFajGI~j)sVog+_}*YFusgWW>m0 zim6K7GzdI)GW5?-sC0TaeWeJVEL%Y8Ns}jsYv3R2$-e8CX_2BZM0&JF)?QEEt!m>? zJkKhK(EVx0{)r0xEj8KYP&9weJyK8JNdHa$P*08-s^@SaDZ%3Z7`yMd9>4c-;K?jo z^%^Z9gpj>nuMkIMXOo?gk-ZX?sI){PsVHe_Ta}WAmV}ashKwkQL`La%KA-FH&F}hL z>izcr^KqR!_v^mTbzSG28>NI{5C7Qa@=0;tL8;B5_frv`{^(y|K5E6KsZxz+Ig8K@ z^r+nxxZp&31F2*vGtUE3TtoM%4F!-y!FXQmt+&<3I{`IkMF2>qz-*o}`+4+h6&lh8 zrzij^6!`M<-}eV}yN$r}F4qCvrJ${ah?Shbh2OO~b~gc}QjqE-V!Z;@_M-^O7O?=* zC|JgXtaSA62n0@7!~saB;ApIvb!@SBFaq*t5&&fU1*}$P2Jm?r-X zKoJF1dc5d9vQ;1g=0@KE6jRWKKbIz-=>Hsnv2{NIlu$5jqB65xse_Y-&+hdAUQ+O? zRLq`rC_arMY%!2&@!ttXDFr?|#jK!kFJ8Z*cv=>~D+-p3P-dE!*9D;nc1v3Wcuj$l zzKDISw#40%$3NNvctb(JdSw>kxA`)PaNa>4z*`EchKQJ*Xs9^?L*8`&P)5NJerpVw zeGA`w6&pJPct?TnR=!1JvrQt3Ae8L};5`LC3&d=;b~t{=jo+&Xpqv6(KBV{+=f|K3 zksk#BDkwOf&9~j9X>>#2r9PU*TM=MVvZ- zj}++Di&?3mK3T5)fKL=`bQ7|$(k}Qt-G62u0G}z) zj1sXkdFFV*%bAw_08~@3lz*`JtX#}9G^C@Y0|0!Xpyq~%z59_}hk%FgAOJNKblAWv z%V+lC8quzN9ROb`XfPA8b+WPe>3x0kFaX~uP$?9#b80)v(U2mhi~>+gLAU#2HrCz% zPaO;c&;%sc|3rh6ui?Dv*{mpnV<;I zeoqAOi-JwZRG7i^H+Yihm_Hdn9R<$LA~wnYY6lcy?<{=)^%UsNQ(>|$w^b3SEuIG8 zHw9ydsIbxLG1Cx8u$}>+fr9C_DlAo5g0Erw*x3Lq+mZgHroV{gE=X8{^2r@P1+D-4 zxaXjWd@{trQnI1__A->PLAf zpS)T7hc=T>-b+xI)})KuqLk3+`ybm}KACN7E4|ap=L*8r{|56>`zn-3KdU^?37dMrY{QP7>S9szoi)0?*FBJx~Kqbb72^)1~>l3C^z zhjzw(E$z`r{<1UnMff_&(Tp9P&?eU}{dzT;zwM0u+$C2sf5zEY2zhMQY#Q;=nLqC* z{ZOXR4egAz+42Ydb!V(=ZZGL0tuH}ni>vn5KkDy0V~r;smrCBB@qQZV6>GJDaFwMD>q?Kl8-6wJCKW}WWN{)#~M3|#=nDHwiT%vh?6A_DIdCIGOf zK>njDn{p-98-Z-oNdO!u@b9h6a??zb5b*iM060?6d8P{6?IObcNK@OX0Gudz5z7<* z{g$&(gvu||0XS2z)R}L_nw^hd_c|`K0Gy!UO`ezu4StDGgwnb>09+`T@I=V0XY}(! zAaut(04FJsT_|Rcjto^tAVy;$fKwE#=WDQb9&3#+I{3_D0In41+6dX_=fS^G1lcaj z0Gy`a##SL)IPd*S1l+DK2jE750$;izYjgrHN|?KG6@W7oc-!0^71wfvm@2}Rg>cq4#w6invr_UK2OrXt{3z6pQ_1-_H{ z#BSP;tq62Jx)s2A3e5S!3SYa8x(G~E*$%*yf_i?@cI|fImHp)>b^`FC;PpE(ySlGs zGK#Qg`W^t@6!^DQVMQg0uMr5IvLC<&3Ic1)3-CM^8bU_i$ z_d5i@hXU2*V&*QJil2PLKUe_pr6A&wkZmm(8h|2v_m@TZ_AQN)S|N8v{DqYX{~0x0M( zns;rZXYNKrs_yIpAdmw6pF-AQ^bqg7`B1XB=_DQ2RJ z9kmb`H}xEVD->MdUw&Ek`HnsUr{z5Xgix@UXGUdvTi|}=r~}>rLMdozt<2i*jK&MT z1jBp)gi+wHuEOjuIk})Axyktf2&W)aQ^alu?K4Ke$j%=?1O-3Ugsfs*Pu!osGdT!A zBn2*A`SR_g{gY9Ie&4PDh@xPpjF1U8%~_5>#mO)LS1GtMSATyL3B>prdyUz;y~9^8WnhZ_9AWGxh2X05>RT`CXYUfBy>K-X48o0NkWt*$xqN z_MM0u$-?)y07O&pf-ex)8J&mc8kL#10mM*Hw^o@=DL#m65go520*IyH=w>l<_%vOD z{z_&GQUKhdfN6-?QNz)b5Ga0@3LuVx34EPIl;XGX2+UB*01!{X?mj}6+$Fv@0=2I9 z0NkcPL6fh^TxC~=z@3rV01_y8GgOs5SnYlq0nZx`0oB_OtyOWz&^{!a#lL>dT!|5FP*H@;^~N-hi(cq~}$f!%?MR z|Ia_PnM%Q-ZtBwL%|S^h+1L5?$2M0f&~0-}>S+6G3BtMm2J=z3*qJX?pRX2!ZlIc< zL2$u|^aeV{k2PAo{>}&lT-JvGNTOi*BoWIVqlD)?>EpuzBvY`Tzo#C5+=SwI{AOhipv;kVS!ugEBi-&mjp&Ci zTC-O+fNTnUCyH5h{|C6;?)LB@fCm)lHHg@b9uM%^&>3rT0X(GO-f+G}=SF=CG^BAK z@&G)dAoD*f`@^a|5%|6RDS#Xbwx8h5zqyweA}~|-Ie=UWHu9|7%fR^&0_$=M0X(Ll z8y#9hUd3S0X(6=kJtUbNSETZ1eYADdxQDz>a z67jP&MPmejuM}htRc4)PCw)Xi+B|bKfNvB;@naxoU%hw*0Uhme0BR}F7{r&Kd}xDb zWL4o(0N*L-;U{E$bhqt55wsUh0Pur?;dA-aLHRQND}C)c3BXSZSb~rxHoU>r548&n zz%L5U+!e8dX4`RLY~rM;0O}~XeVD(2?sUf~u2qNufO-l>@lAmRdtL6Mi*DmG6Toi@ zQaLC!D*1%K^6#?&G*FQ4C}4iwhg2ZYdX*snOF7bcp7M&Hsbyp;gYrqqp!VIM(9`m)NJdRb?2kIn$u^xE zVUzh}+=v26&04*AC@D;T+NDu8olnZhkCAp;b#5b~>Jz*D6XoMIJ#|SMsMFyD$|w8j z{h`g|lZAehq@h>Mx}cQs+5cyo%O~Idz9elk(x)%Ndnf$~+$83smg^#`J3Z)OIJ$u@ zbQHh^ThSY6=|T}p3^VD0KxcmufFl%qIwoTEOHO@7V6>?U0BZ`Y6UD5J+zebD?xU#= z;3x%^fg<)s+65OGEBf{TaEyX{o{QPLKg09qNb_C*Y$#~Q55{nM)*b&Yv)=XwU`s&< ze=+l8Hh7iSrUP04>?p|LFNLYbAMp|ri=G1j9H-#Ra}o0%P@IPTtb=m~0@5u5Vhpfeg$fQKG{QxvrD5wq=PLvR^$otOb|rC?Wxn3cyK{+}gPA^HGL zQ_!)ekWDo8=!Aw;e$W7b8wE*6#B6}ylwSzUESmw~3Mf`n@`Jtp^JX9 zYb^k83OcnCu~`L&@a_FTc0GU#6l}i18~oRQtUwV~{oDxPA_cES{4|i=CvoCqY)#6bM@K9sAQJPeu`Tc$otTpkR+1ZyfaU z!43Z1^DO`bQjl_9$X13Q#&1#2EGqy(6qub5u^ZLhFj%|mD1cxJu9>Q^J9!Gp=o+#P z+5)&j!LHvzrj>8;9f5r_?E!>P5Z#q;1=zC>H=%<1H~|QypthQ~h<**nFO;>DTmXbo zAZsgRQ_gh95tP210uW9?RxUqZLT&>@4L}41c2|{|Tgd>N*LNQ14j__(IeeFh z$>jAo%NV-P13(l7%ffj1@Y!wr5QyvH1>hQ&!%w~K@=5O+x;2(x2n2AGf@A#L$bqIt=Mbpv z6#^idf+uAn#=`F6cieKvFaR+Wgzi;l8_iqc`ihBKB!E~7K8_Qzn<=yKLx81U1#pW3 z<7K?U-*XtAFXb!W01!ukZIzHM`7#gRd`EJk0mM@vH4!tXyLGr`TD18VfZG%pj~B9e zx~ra{KkM$Xw*e$j5W?55#F%`;>$&o5?f|$$!5}`-om<`G1j;Ax-Lertf3nGZ(l^## za-?oSElLaRpV~IMrt--h=JzD?GJAL+nEctUdB`)Jvq^2GTZ~7ZLHXqJ4)%?($$Zj3 z_myPy^ae$g6pF$f8fDY@F~*`+qN_>pZf|JE#QL{Lz`uvfib()+DF}QfVi{SMc#_n5PYQs?6u5ix^IRqC z;?R)R4N3!$N5Q@WDs016uZ;-!KFk2{gn}6r{Ai{}YjDxM@0=_E`4qI|{ra@0d3fQ? zlALS+Pbv7=QpCF05Wz8c1&nS?;B4V%B)v2Ou`0_XxKmi49PKsIG`**mg^uzE8 zfaeq_@ND52oNOP;*7Qy+zf4j4i5CR= zCVmF+hJvX5LgqeTSsQc>0hKiX-cn#BR$;b}Tl7U>xk)X6G74n*UV7ypkU=(WwzJi_fr&MxmG&>l@u8B-$Q|Vr_l&ZPLc=kk%AiGtW+LU!0%8z(+hL%IR@OhIZLU!CnU z-5U+*YOW%HY6{lXikY*bE55y3Ckg?4pJJ# zo2e>*uM|uy7O`;-@7|$ns1$Su@Qnh!;e79HS7SV1n&sI8KrID<{I8Tb;PWjMVdqFq z0N*M2P%C69ed<~xu+hB_fFBeX$ctHyYKIdD{C4aI;3owWc%AEFtp)x~Cv_ME;1>ml zzVl5{%Exe1);LfHKph3AsswDzuzpHtNcIPY0jQ^-=Up}SZnhgPb}K541n`@JN|18AV2V6m8uUZRE{Gl8AP0kD)O{YiPgDmd=P`VT0dywOry1^ScnP4y?| ze)N}|Y`al}(!$pj0~=ja`DD4ub4i)zo=gOb%Lg|Pd8X6Wvy-%@zsF^iPsR=$(g>T( zColT8mfk8YD?&-(h>)R;vgv$sz0D%&nJtSuBf3pI{GTWvuTFBPRN<%QCX`QFDF30& zM~x3mlqOZ~x35k9UZd9IQzYD;IJov|HG z=`@nR?2L6|MZ;nTsTrbZZ+Gzf^GgjyHGs!vQ1HlL_2pHBh;-ixvJ4%`!F})J) zj9n4<2mN(t?8sS@q=Mk_hG>gx=b%68?>l2%b1zB1i6iGD7S=rDV_a%3t9xc$xd(b$ zO&>TKF3gHP8YC-J*vR$L#|VVvjRkOof~mYa;&;A{2!Ylzx&W*xm{PCAwjY^~#aEd>zey5Ma3FoY~lK~u~VA)nN)4Y<8U&f1krU0;^U=3f5?QpXKH~-?5rU9^} zAW@dr{ZD*-fiBuGWI6yl3Wlbtvg@74F*!*v2Accl0|^9 zBn7-j5&G)P2jD<~XSRs-n=}ls82se15P%~EhWs!OuTs@RD1vgAB>fc1i+bsTHY<}+|PL_0#`4s0C0kWovj4y&d5G^%93|-H2@b1Y-Ls0`5SI{ow2dC zF@Td4oK52!${wiUQk$H{1^}lh$m}m>^}RmeE|p`v2>@3L4)c{5-4pNjL>K+E#})vm zDX=-gBg{CShJb8}DF8PL4u>nV?SA(rAds|l2Y@paDDz~kMNI@Q7y8NW25^=F;~RX+ z;$o7EBCP+p7l1nju^R-;`?~CY1U64L18|OlgS;8uu=49J1kQan2jD?L`}4|db+?FTu!Wd;N9^@P5gr;i1Gq>*{|#a`E%hue+kP%~0pLSH zd6Y6gC}{}3`F47{0`R54$%!8_WVq@&8d710GXO48z$``V``7_EyYo5X4#1Cs7q)y4 zhlWKIim*v^9>8S^wmlUxQG+_J^U8kq0^mZLPrvZ8hm6WV0KpV|Ii<|z9`W6YBA6Im z0dR$a%ujs(u)ZUn33ROp1rS0(!3PoRt95+s9Snm1rSC- z6mN$2zL@d`MJO!14j`O@!XLaKSvXM^fqsLd0Yp&n_JN44S!yvKfpfO803s={KO$o4 zC8zM>5cR4!08tdQJ1t_a`D?bL2){xT09>U&`;0OZ9ci17!0PEq0IpGRWQUlAP1=@> zz^g8I0bHjb^`e+rkE_BrU&W&|05>SuSza(Ie>Ty^oH@{>r?01p$NM+6au(S!J)xI z<`iVv4FPL~5&#JlJYFYaecX%(A`o9y3g8X}rXBhD-fY!5R4F)@6Wt3s&rMbe3U+x( z%)aIYp@je1;n+skRHdNaJx}uVR=4R0y2adT9`a1*Y_XiwW?%gTR4MpW8`lV%tQ72@ zSS#_+NRpy-zsT@*qiniTQ2b<`G}bN`cb-Mh6aI<*Cwr_3kS@M5xdv4Vmc95xo2e9h zy0c2EF{_U~O7@o({;|zf3a&1RkQ!9g#v;72=wDzy>VRr_-IlAC6`&g^_f;}na3Z~d z>^_Q^d+=x-1a=%v1&~C6GyjTxWz;5I=Zs#I0U()zvqd5%89Nm}fiK*?2Oxz4qmN3g zNWc>vNW$UZA%#XGm*#@P{*rvNhk0(AM}x%|vMD8jk?0sxs51nMiYqBJYqNbccR z2;d$CMSMNq;`q6pQ3T^FB>=K0aOWFcQ#YF9-nNXzD**Q?$XP39KX=dfMG@Z0yakX= zf%Y6ByYMJ@Eds7L-vM|)K~$cI9i5X=fxsK(3IGo&kmDZ^ndD%gjX+^WC4fg19Q!6< z0nr06czWp*fE)^hIy}YQcUcQX=;;0hKrRI{#*5h0v`P521SiYTzl z60ixgp5XaHPkSW*#T2AJ7O({aCAbi9@Uaj;2?Z-G#B5=(RtCBTfr~PLmlXWqOAHlC zhTtiE4`($1r4;lR^1|3~nXV|pB|{AWuPC@ZS;z`ISotIHSf>|&*A(n+%}*P?RfB6p zE|NX~-cT@7hVSmR%ES$ufh+m}cuRqAYa#P0_lQSB+W2e$fHDe>Gzgi7{_DdCe6kt@ z;2j0-&6o!uiP(eXi zq?p~Z;;RZ};9rY_AHK=CCXE5`fr8*G0_LcG7yqW^u1Ek>QsBEsnK?X4#eXGD(RctK zDe%}QV%v`u;Ctzf$3y^C6yzi*vssr<#-VF)?mZd6Ckoz}30eHjC_HsIm_7x-XA0U~ zRAN_mEEt3$Y(r_Kfhs`F+7_(FmFG$nRcB|HRynPzhU)KK6zmZv3~ zLU8F#z)uQ}NAOi{hYw9epkJ#s z0De&rJYT@pnw%COuqV$LKph2Zh6vb*7M%Pq6+2?+#M8Xswp?q?cTkqx}&ve$63#1(frjJ1RX#l{Hg8XAjEa=uuT$`91J`;cw1#|gFA4X`$ zZ$lAQEuI6wnSzJB{+#h?nF#_mgXaM_LBRlil;e>NMq3a_{j>mp3k9c)`1uMa`s2Ch zmwAf;oTOm;GJfvM;oR|0Zg3djNP+@bZIz<;ywad7Eg$egIw+Eam4QZC5wJ zRjAHC%m8>((3{WO+9toj%|N@9LjW#Nu#Yc&{;V!YL>HZP*b2Z!3hs5~OF7!GbOcTg zKMKHyg2#LxN)K=2A_RK9wE^Hu!NuMD7iYCrAAzJP#{pcTK#gw&5RbZMk3fOCBLF`N z4E6}wahsue2=qMc4B#>aA$;?VqVoinZ+xb-{-Ac%qiD#~nAWX)JKq}$)l0|=&Ima>4UnvTP% zRfk}209Pnj{hgoiQ#3`0BB*Zi0T4pLY<_T3%i01P1PUa6075C4Y9eBWr}wQwU|gL) zfG`TI4-45UmpN?_cyu-hKsW{NTSe@ox(8mfK5b$MfCvhT9xAi3w*p6_2=?A#03s>K z<{vIF@l800z?Dgn0HP>xZ^O3&I2=8Jz?Pp^0bHd(ULa)i_nG5rpk|kw0IpG>z`r7t zD!KFsMcB4J2EcU+)SpecF$Un}Xd<8F35twn~0f2Z4tod^(Fn%>&A(J{U2f%F# zqyNh<*$`|4)>U_sR7bX)EXP=TJWB6aI%b zlTTjpF_l`ySo)xp@J_@Z+gv{RQ9VgI@>nJ}m}Oes#8vvYr+fhOB?bUUp{=yb0yAMTj?_EEyXCAdLdWtpb+U z?Z5~W;jw2FfOHD9YW~yw2*Jf({n6I}WKhtDKjR-f?}*dG0llLEWKv+v%gMJ_UdLIt zk$)_JdlVE$ikPg*aRIsp@$`5ASrq8q7qO~(1N_>ty`2EyJ_Q%}19kf@hcPI^PRAqw z*%WlxCS=)~%W=C=pm!I*0}2*Z@FSOJEWk@}pH-#-cu2vgUqUvn-9dcOBVK0$ctk<4 zo+3-PcEL@koA2%e$f4l1jWTmgPVhn(?cx6rKrRJy_=e+G)m!kN)mo}aITYt#|kVkMqRS-0AOOX5>1UI8ee;Qb8&^VRBk6-Br- z_bq_u6d3OkuxVatWeBud{T{#z3SyIai>M^!EdryTRRAcYAdLUVb=1*r&z=Gb=tr4+bK=N0aa@;}ivgirhh;1vZ&?(&0TRtMn!hnMQV0lcQbAWq0)jCSL4 ziC*^>1OGecc|*YyzPtD0$8mVomy56!fVULX@d)C*C;q3?(4j4WG7551#B6-j4qQ}P zv`r4cI|@`c@ojerX}HudOsfNc_Y`PY3R#N`S`~``e562p zQ;F>urHOw)Nn=$2R8epvg}-*Ar#?Utgtck_KK%t~2v~R*`MwC~I%xp-Oo8Z`fO+Zp ztwms4bx#1*6r`ROGMCoNULp`3(;L7S3QBol?80vEwg|W+^aD^s!DPN}Le|}T@VN!JQl!D3LN?A^hI*Hl?ZGIkpTEb!45v8 z?1D{05m>{<1E`}QZk(9e1~`Qxu&Rw7fO-nf^7B@1TMxl~kdTWOW?pa6?(`~YVZyc=MB@%>{S)Qm-KrNW9ko3`9p#gE&HvD5@=3eB z2c%0KTl7aM;o3ugY;*bKfrb?6KE18K5&rgXFdy}Q`jaU;i&fFi*g3DXM*QFXKz7D{ zn>j!tEF5Nmwz(ej>fb2n&e(-5w@4n^kF`fcd9ij=gpW&it*1nPoVh#N87uc@U?cg< z&RECYMQ@u4}(lXg|m1v8rmE9lp_nom*PG(4L-fSC+*wN$7GCsyPdsTH0Ex&>n3l(|| zhYPc!kA@Ge#H>S+zX&}`9IQtHI6}clzP;syi`7E}`tBSHz?uU8g+jJ3Idmxkx28$~ z9Hn3=UqL&<%=#k&uZqV5I7Y$bn__0xSrxY;%uMwF*ihhSEM`_E>t3S>>SdDw*iv9J zP{bZE|E>reE7S*IM?s1}#GZ|6a~gr6`wajbr{K^C0UK!c2~Ubz4w(tSo`RYqLT2{8 z0xvP_K6?%T2MTf?@^kmsr{XDm`wBwyP=%0k}}Gf3b+&a$mj^fmWF- z0i2}Z;VmJXG3qUz^H&?M0dR_fQ!~WuP`~i;D1vA5dH}8zbPiTw%YtiWA)pj&0^l?S zN5+epTkB=G7BTU_765J(sNUh{Rj!rb+Fah*Z2-^*^z$)Ec zagEd~!5qMO3OfAapD0ln(SRb13%3B^Nr9A~6~Ao%cKn!e2|WV9i-K881Wd8bJXsXs z)VX5-yeSB~%@hAY)_V{r`C<#;0tG|W#q8Oh#kd*%*32HjMG78U@#DI~PUCHNo%Njn z_)st?L&$o5Ey0;l+71^0z7(|KpZ8F!SHX>BeN9&Ymnir?QN(r`dEy6|>uxsyeiW=a z$+yNNx5ABNvu|esT&5swhmg6Q?1qm`0>?M$y*ELQG`0ZO8|l>kla^h<`n~R?!{X80|=(T-GqOT@}TQ+ z6u~_?5Wp1*F3u3LXQ#gZKp<@C6#yX=bd3?SJa6me2#lW_1|XDzi@YzKUoveU0tvIP z0tlnP{<46jt@6OH-N?Q-0EAQUdWo3L7d^R%BAix^0T4mK&Uk(b`j~TP5zst!3qT|V zy+irwP-i1HAh2KeHh?G!`m7f*v#V3_dhZuXi2$xr@Z49CrFbvK-NGN6k^x+!AdnyZ zenESuGa6F6<*5L!Q?PHZh|OQGiQ5=~uhRkCpx|2%UPKz5Y>6W5m~s!mO$y8|ikRcr zg51$GELz4{P93)RLB(i$h#p>ky!#DfdW6iY5LveM|TmB8S@Ij9SRb~LiXXILN2NlJnJ4k20G78 zRtm=HMM(C1?a>P*{Ogv+G`glL1#!cENlt~#--cj%X>9Y5XF9ixHKZ+m4LOM_1%?ab z8ex-_0_TtN(&G(Ff>F93b}YV8HeD%*lUPWrmzS+UG%?`zKT$s3O(`kT%|pHqK$U`9 zfq!T-l>(DbTciQCrMFPBKR@V?ZLU&a5_elVzq`e9gx~xd%tvj{lyp7Y=k7;0P>FdG zTyP@2fpmr|vBZw6)*x`R!(9ML6kL&rnPX}(uCL7vNCS{efoU?IV4OC`zsr*YG6AGe zurY`qX0R|*1`Vle%liQCQqX>$5=)g0xr0DT>H`3&6g+z zk0|h6Ct!mkj?6~j;>=F~aws^Zr_7$)mf=S7-22r4aw*8#&Zm-NC)l6}@)y4XcuYan z6aJn`ugyka`qu9N@+kOJBW95&t#R+-Y2i-*Pbk>M*XXLJ9aN86yYaIR#hLgiLpp{xcL|u51SYFDS5z;!8K8-0+a5&g}%Ckb)`K1#C){`8X6| z-@`5diYPGU3o8Q5*Wrntbh`q8VhUEs3z_FU5iVQp*AM_Gp`d|pHgLEg!vAp-%tQcQ zQZQ?&B2ycE3}>v_LKOg|6jZelvQC``;NNuOH8lXQCbfFfv|*9A~TL5U3ClHpa46VUgsCjj_FfmWpwd*VMP3`G!}o&?}C z1;c-f*}Aq5@B~X~#uNb66pZp0u%|7`ZlefRyQcy8LP2_|h&i9{a2bJjoo4{3p&*hc zK6P!>aD~5P$JqeBQZS)HiRo154M!0i2O9$TM#1e_Vs@ip*bD?V>ns3JOF^Ipe+XEq z;MvUBnTr8@ry!nh@z*l75TXcGot6RkK|#$J6;^ppI}(9D0m}jWq~IqncIQRu;(6=c z>XiU~QD8HJf0DvU;W~_|G#hWcXmV_2F$$|r@g6Lg`| z*s-b3^Yz0wCHrOOJE63&)8vVbuBm)--m@=~XRq4hZ~W|Aqt`s-nae31MkIhj& znPNGq5jL4mYK@VTc6(-U7bS)M!IK+h)A^*f=LTuDxiVmFhYdmzwRG#h|51+oTWHnp?vAOu48 z%>{6j0(E|<#CeNAyoaH^&pZIfD5y^pFy#ehc*B6W-$DR36#P=)%kzX$O=%aG+q0DW5N7-W`EJVzMy+M+)q+#H@GyWjtSS+P(pR69t1dirLlL zS1Kriu-_&C&J@V<^QeZpp8tx#q_8ajPEc?|Nyv67x}HKncGorlE)=Np&$8JJSw0tm z@eMlwoTT8|RRP;un2odUvY6cfPElaQ7d!>;c!K)?3D5TdaHSwpUc{D|wlYIQO0+iv zaGHWw{G4g?ad|Hg*sXsEfExw!Uxh58ZXT}S( zw3u!3Z@C%`X;IoS0PYlw9nD)r9*6oMu*uvGz&Q#;{3Ek&dY^YAaG|9G01pb3)0LP~ zlyn;cuAWW+&QtL7ssh_s7mR1OmV;aXcv4{4z&G|Ojq8mfT&Xz)z>9+DgUW2(i@wna zoY!{);7vgnzA*V|VcZG?^xvKZaDjq32gK~tj^xJ(cm;a^xJZG?ZV}sIw$%rL?!CMK z_)xG@!cR0ARlE^_zqw+md~m-|Ieo}X7mjP;7@@TUuSGTzl|1((77@MKmY~aQhr>7 z(Mu}?95TWI1pWo^HM&#G_t+y)JUt3P5C!Y`=EPZ-bqWv&ioXURn1Z{*1+0Va*3k%P zdffzYg#u^3W2XK{wQ}2Y#b@{j|G$hBC4*^`G;MyjB;#Gbu zZe3UAStVGu^ z|3U$PXbKEn_^v76vu6;{Rx1P$LxK815gTY=pN@dVrD6cF6l7NO!_ag+&LVK!vlPHB z3R;PkS-TOc+6ee;cmp7g0*A|D_QvMvQv|mEDgzKtK~-yh_|x_dc!f->pmG4WDVYDP z8#9#)3qTQ`kFNxfK*6qaVix2w5dX(53aSEdhl2BbpQ5^AdRvrFzEzLYgZ^Zb`Q)9& ziIRk`aseoxoG>rG(KVG%PMRPiougse1Ht-Jx0{DN)5#dnN7^gx++dVXexGos5jL4m zUM*CVdMtd>6XlcVvJ)F+)A{6&;rpb<0iMSZP4ATaPn3`MUP`LeDg1T=$|p~B`9qt@ zC)eb;GCw2Q5n2*}-^ElmCv+m>B?fS!MaKVZ6 z2I{>)i8g}MfPdlgn0-|S9<^;g@O?+ z1gwwahVBToy7~yfT?)n&@%GB-TlnRCGBgiBDg}oR2-&EO>iCym*6k^PGzyaV-m3H8 z`{Lwn?BfCe=@djS;@=N5Nx*MHqdA2DGAJn8C}1l*5*DJ1K2uu^Ad`aaeBE)R)&%@N zz4=HffO{0^ycDq3PmkatV_wZ009h17y%n#3E%+*PCi1`I`Q=|1crR50`QQ6Mb7*~;w$UZ5J=ct4d4+4 zn(q}^|D1#j1oC9Q0?462HCM>K_Wpu9J~x%W1IVRd(;gwSupWv03K5i^-z)h zI$Qb+4Jpl{9zY%iX{LP6)7lPKhZpsgne^Y6!V?OFUHSLfKlQ{b0?e{x0pwG#NW_au z2IV*xi$B~Nz*7o7@MDd>8u{b3aXaeU0(eG&p%(v5J8hhgE;_+i9zX#FyA%cNctVd3 z2srNU2;eyd9zBF?=en_u2t>5&0^kJ&vMt3dJZ?Cy4tsld15ikTi3U4hbT* zT)U_Yf!qKs0BaA&v#z=ywp8X=pOJrVyuB*=^hP)Wf+ez^AaUWO-8gh~Dr0eqyu zb%BtX4&RBNeC-BL22e$TXQ3i{F#S~^if}DCmfornc911lD((4d4p}mV*RL+O^sO0fonN0n||NiT^*;PLNrH zK-T{G0KQUiY@CQ~)47ee`-o*10r*BibQcBYXQtg5MTn?c0-%$&8 z6m&WvWR?D_ah+?g%tiop6qpSZGV?no2hors_H6=CPeDemm_2U2Z!`k!Dz*UlO~KRl zBKF8_7Ot7rg>M7UKtVa*y%T3(f?p^yj=KO@b|U@Bsk}NK=4xt>^2uL!#_B_VvQtz2 zN!N8566GhEb|@`;@?l(~Ybu}AQfVWdSFx}J!6ieb%|o8)Sp)&6Hj=`|uIvlSajV zXfyfbmm%k+{eJrvpp-DC}iru;dQxao9ke;(T#%cj2*PaR#IUcKN*p$F=Lt{d|Y~k5t5l-Wfr5I zvCmtMYb1Z!89V-oha~9ya#ys;_4yo0qxsv;SixsmX>`Sx9SE&VkT#9@=nn2$AT>*j zxrcVf_DKAL{<<@ELh*TN!?t&y&=yxo(jWErow12)YNX|dFUTP_KDk-O$GG~&C|%`a z-?h-gr^5_AxG*dFXsAdPvoU4S_+>mJWio&x6ev|FGW)YBxTk9FrVqfH0?}k8wosXY z2*8$tz?Winsb)1UjAp0I2Vh5mu|&Y?v@38*t7@?bz;Oz~`1vBeZtuU3E}Ds#0bQNfyF6C030YVC9K30&t|@8Q%%G+@U}IpWbp}4FD$!EcuH} z-f-A@G^8IJ)&X#)p!-@S_Tb2zQ3y;l+6dqT1)nViY*eH#t_CaL+62Ibf}tCQ%+7Pa z7)2N`cPoIC6ztYhVyZ1}JU~E_wGF^23cPt;t4Gp!0|XAZ?F8UTLG&9D^N`t?i$J33 z9ss8)m=U4G_St?pjX>w=`vJI7p#6!Tx0Ce)FF!d|V+P<11$xB-_9gf+E*D-mI|Se? z1q%Ftp6K-kThNeRI#~j6r{MEE1!l5E7f*_=@397Oj)I>&%Wm=H!x$97vyBY^4+_SJ zm6*%%emJ|EblncXc?yd7!iw>(gK*=_JHruxCk1_j#7z5Mr=@5}O1>umcu}yFAIF+g z{s!NC?S!WQcvH}4j*wkZOFfSw)F+$`-@XdZr4w%>miz(opF`HGlZy6^E^ zbIlMB06r8brYbV$Al*J_NEMl$0DLJ(=Zoj&F4V(SCz~r509>MAUyc$#>N)@yhWEGk z1>i@49j|N6oVmgm4M{1&55Q##Qho|qON&PV2o+3tmjBaw-HsAO+q7#B9Ti+97C2DbK?I1W~ZbRm46Qz8Zl*v}q)OUMwr}z%>fm z)bSIRjt;<)r^)JGWk`m7x05>U!>Lg+} zrk3NUccLf{Kr{u}a>`7j@6lTHS6bqm4=(HQX9f0pJb=oA~~R8o5{mG4KD zf`U7LXfu_9JINQM&Q^oAp=5to;vd^wrQo};R{C(Dp&!C+lKuteqkg?)obJQ6nYi9; z-R3S_a3Z~dv{vwwGtgx3UW&99Be3<}0|0j^@aHGWr}=#ChCs1V4uDh&iasi`6|w+47|0Xh;{<6adJeK<1u+757`>k3g4qF92jx;JSz( zmvCNyYqi}&iUHiC;Lu$DozD>?D^Y}H`K17|D7ekb$JOihGXxeny#a8af&{)StY7<7 zX9V0Pz5|d=!PYTiHl%b)5CUu7mIHV|!O$MOtu@K85P@z-DgivCAW2J!9o%*RKTsWZ zeFE@^g0rE#J7O2v6-CG@tp<=oL70qyJy!jNleg|3UjgJ&;9)9ahZZXhMG@q`)B<=+ z!Bl=or?@HxcMA_^{REIlfy`Ago7DX)P7gB<)&qD#fhW%aYQ$;yC)!C)X3l@#BKZ_3 zIg8mBWep>A4f}q{0(eTniv+&PYwtG^0yn?40q~51z4l7X_WFLjWz8p94nP3~T3f}; z+%UBlim+f>2LR702ntnV*AFS-9TwXwx$K{gW?S%k}DHzLVRVNG`0?|d+dx`;+P*9kx!ekHEA3$JW zkqUs96udJ~Vznuj$_N;oRR>T?!MV0VrZTk>zfc?}_Wvi`V%d`DQ|_2(4RG8+9Ck86sRv2u=F8$ zX$Z(?ECKMH0@hE!=G;8p0|91Y1mFh+bB>AGUG-5q2>AV80pKSE%lJ0b!t_tZ2n>9; z8o)0K&ht|pFD%(`9RZUdV*qs&3@TJ+MV+QzL|{md4FKvX(B8ur-W|xAhrrFQn*jW# zVDdPAjLpau(FmN%+ybD1f~^H2rX68qg}_{sZ2&Aglg_h32tOR~=HgK(pUhm)eLi#= zJ2%yNj_ChD@=|V(A~hOaQ~9L&)OON{+RKIrHdORz9`a1bId7o!M4Ch!<&%B; z^=gDo=97umTGBCVXE&gv(0+qvqii~#3{tg~+J?D3MO41J_diiSUZFvbbVX^OTPU9# z@#PO~CZC)&%|ZI(Q(zmE62AWbY;*bK_7^XtE#^7YA#7FiCvcOPkGflQU)_sVt1ZzD zNG)+h2)Jo_u3V;m-5v%xK64Oz5D(NzLEC5>y zJTLLoYW^K{G^Cv$B>?Own93uxTlEny&ohe~58yZjL;Lctr+;o(fFek@>H)B)pr4H* zlZ~8;7Yp^8$pAP|(8hv)oJpx{K8g_cK_7r41$sRc*#gZ+xH??vX#l{9f)D&7DDM__ z@jwwGY-R#*rXZ=Sh{X>nEJxsO%eeqfP*BZ}1$|spj&m`;z4HOMP!OggX7ZtXHBp3L z8jAp&q+lZN9s;w1o1QE;&ZKR0pz@MHw~TN(jyr9i7f$kwO%wMHOd#7Y3C zDF{&(vCHI3Pu|$v+RU6=MmU7cpCr@3a0WyhlJY- z@GtIS&JFS#Gmx9!uyic5W7$5F&f4>cYOB6)xQ(_Z8f5O>b_c6x-_)&10 zuhG5KFbe-36y7@kxJ<$4Ap$neP?C!;`n59ve+s^33)r_Wd3epik_#sR1W?e0FL?Qy zvU@m+&~LzL0D%-3@n!V2wsUcDFU9)|fFKHtHN{L6V2G!~ZC9TI5KKWnKSSv1Q@h`2 zNJ=K20IpDAc1+05nLpTofNaZ)0758;nk--s9ZCfVLQR|F=mUR|@cnWsQ@h`f57rsFtI5Qi-?f=Kv zefahKy^rHJ5;989Sysr(-l1o_aI*K7mB>mcvZbruDi#!Fb=QQ0`cr?BS$9#XLSy@Z7i(_e`q z73njBoSkg3 zwZ9soZMOUU8|Cd424%`RhqCb~pA0bkLz~Gb7p`=d=^mPAg;GMh9e-?-DdC9WqGO+n zWSxg>I*#xNqyK<;tG_LspnXcNoeg?`7Apiohab@gXr4T;x0$tHhCp^g5P%p8R^*7- z$lzJHj2XB(1i)hoG+&9CvVYl56u~$227o6N*z!dyU)N5=Lwaw6TL5Ays0oy?CubXy zP=u`UcL2muu;U9qIl$O-3j%Yi?*e#A!5%&@7H+iH`(4}k%< zqW~mO&|O2w-jO2m$?= zd;qU0SXCopi7oYTsbS!pLI4>QOtaO8~r~ppKuQ+`?sjM+E!|zX8ahpq8Ho zGJDV2R|u>(s{oKo!TKls)Z3PE$p{3rtp<=s!LD5*HsSHnNeH~issWHsK@iU;8!{&J zN8sZ8Isk7eaNETX2=Ct&XBno&^#BSe*!G$OC&fD`!j4P70TliNxFlkI?55Ouit{Dn|~$dkPNnla?-tH>4t9x~wgL4;0wm7PCE)m|Y0W&S($d zBL$-!_z6GKqBsO*=5++{i2~^*z7BuD%P<7?e^dnUnS!KlLZ-KGkre{+^~wOgP>|^+ zX2s|ui)0&PD1p18gS zSJKS(bq7#F!K`;8R`$!Q4~o!EPYpmR1?slE6y5#pK?IUN_XhBdg0(;Ry5nxU5)s&H z)fYe+1!MRrMeTMC_eDToV*r413R>|aFMM;QdlB$_rvadXg01`v|90_bKO&%`Hv~W> z1zUDV*y$7tTrSD&H5@<{1+BV^nER11{8v(YIubxN1)ef~E!Vpptx=QCPZP-YtOM$ys%3R|X9zbBoN^Jl?D0tpa%E}J^ z#Dhfjuag1PQ6OH#XFxsX_C^s}yG{l0lY*-2s?7g=Rv7}XHtPVWr$GI=D*K_c1~1x? z4x0&}fr4@Tw5YI<23&fRx0ns!7X=e*rEFAs+vBK7LG$MU_)S5?DhacgXn;oo)-M+T zFjFG)ld8c&w#ZPe0?kjJncRO3%ugycH9sjbeXI4{Ytti?7G@<6Xmm~Glb%+}vNt<5 z7bDnZq(<|QXF72|wPeNyt7oHp((&$~M%ZLN`F>hIS;x=~IVdSi`82puHl0r@d)deo z`rZmabgA6Xf1|v;JJoV!H%D8yMET^tHh*X{`DFF$Vtv;5jhtW3IVJ8+h3c52k zqTESq^Ukji5!pXxdPN z=AU-PW+*GjVw88-BcxosvT4Ly*So+#7I|s)0<<$WtK<**$DOfV#3yCz_r(lATU=Xz z`=kDOXKe3bIkIJg*Hj}mq^w!S+xV{CVC}-E-El!K#d9rm%$&X&9`;sc{o19>MlT<; z9eMyPC}`J1!gl^1n1ev)9DM-CDTsc<58hqz01xaAF#`aW6qrWxeXBJi-lGV!o^1he zf`a>uU)f`2dkTT8YqtZiqF^-tRIc4|F9w6GodB#Un9T3^Ij*XUnxvrfX zh&nx7?+5^U3PvhO*jAJ8l?eD|9|Pb(fuoIprAj;4Be3+61pr418cO&m>ayiF1pK<4 z0N_M{Qk{^6b&}yftJ@800H-JrJeIJhPmbVErEI1xfYTJjzZbKqy)AGFyx(pI0L~Q5 zyeDD~Kif}3eHiiE3BVZ&>`(JDeyagJ5$L|b8Gs7~Tl$LGgQw>wBjEeN1;AMfG~bHY z80E>&5V$+*8~|4eR@L!qB~I=dhJfz%^8n6KkeeuEHfMbCN{sD2Jps5;P{vQg8D+f) z53r}Uy9D4o1)hm~>!3n-C)A`>UoQi2r(k+-A*&R0#?`+kr+fi;P%wL+knQdr@;|HM zrB?uWQed-&pFj0iZ#b02e7}Qz&BQ7pH_HV67Aa z;1UJC>7I0QgdHlpi;^{L{d`2uM~%1Ms6@<6sF( zTKWptNY~cK0Pv@v;)#fzEIeI^B3uZG1#pFeWHk{}8Jui^z&K$%fB*{CFXPFYbT=-l z+S?@pxJp4~3coZi^e(QP9e9)sAdmuec@wQCgS*Aee#|rebz4R|99+dh4?Rgiz2f zf?uy4@qG>I^s@Ik075CK8X#qZR;dg|VDS2U05>SO8z^QoV^`t<)`szg0KzDkbyCW1 z6l&qh*<%0q0B%wc)LE4++fakopshCg1mG40efa_T<9fX`Lw!h!`2yfJ1zKWWkSs7$ zM_~GiVgTV3^!y=W_BoLk5%?bT4Zs}=`qlAGqMBWgAdq2F0U&~ct$azD-l*~x2*_1b z0k})SAS*sm@-|2pfoI+|0Paz6Oi|2sg``>|kbJNXzSA~}&r`VJ=%BCv?_t(3~>>R_kph`hZ>xzG)yuBw9@@0OzT125r z!L>GjXfu_9w=;ueF4O(qqh$ZJ{2$v~r66ROf_A?t1CEZH&wAWZ*8f5KlqWQ7IF}d*>q{x~Kpkfr1(JVs>HCeY|K(qfaLQi4=_6 zFJ#q*nkP_%5I02tNfdnKr%5KgdgF}1gEh(kk|{V{C}tZACAiL6s3ZdLi~_Sm61L~& zoQ^1hezpWa3Iz^r_!@&LYsMmQ$wL)DDg}AH#4JWLs1E{nhI9vzMu7sq+kB_NH+KZq z4ekx#IR&rznJJ?pQvX80zepXx3kv49ld#k;2k#>A>_&e8FDbA+$q9UQ=NAQOZVYUBMAdo{s>KL4kgn znAv_GupTw((W%h@GARgDmazW!wIdO@mopYX76k`KidcB@2sH%s^~VFqreJl7fJKfg z#h=cvOC|z%LqYOceht_4aGY8_8K(^(hXQTBu}`#fZ%fo9?fS_8aw(AU%b8rfy4E9b zB7Q1>JPN$|OJLK&SLYE(-k<{@pMv(j66T=zdOHG@l`{amr9h=j$j-ZNJB+}^O|t7?j1$IDs=;ZA_^`&6EnGNGZO^* zf8GS(D+PypidpZKIyl>#lClLrF$EJ}@T6bu^Fg>`%0_Bf%CjfO66!EnlMW$cyn{T|XGk~8I z3@{Y3et~l{P?Hp^T>#Wmus}(~`o)gNDXyOPIRFh5*z(mRZQP8ypa_qn+yVTeV4;tg zZCkM#&x4d1UIg%)f_6@-?0e3|%P7MB*_Q#Bbs;m)oks}S&A4M>D4)DKe$zIXY3$Ne zKH2c=tyawB+eIiXv^OeCgaDswbzWGFw|7|k@cDs%Ou%cjVf{=~wY$Qb>qK7#EYYH~) z7BCgnr?v=ex^^6Z4Fx&c{G7Ouj<}NKC$s`^l7bXFAzL3UkG~>WNj3m%DNz3=Ve0aQ zIG=RsYzM%Of{FY{pq2dwUO|0uh;#s8PeJunzMjvl7!NQav`ztVpkRY9KO1>zaV7$a@*V(A zQxLO3!Zx1Oz^meacwPYDOhNDzzP&~1f39T{n|J{@L&5NFVs<{cUjk~+DKI`OVsGO{ z;@3>;@-zT`6kL1SmF@d56z`|^VJ`vrQ;;}Jg{79aG(=6xd;JQ)6$3t1aaFkh0x7ubEM%6a>TxCQ_1(7s zu2HZoU&M@k_bx305JJKAFcE7nb1Fp(ymWTyhbl!tNSn)RiHz;_Qtjf$| z2jGVy5P6@yR3fy^}>+->F-4Te;6aa{#Kv_}B z=6KoSSqinbVgL^*7{!k(wl8aS3q`1PkphUO;KDRjmf_=6iSo(t-jzl$KiOnH`8ujt zEB8moc_=M3(yeNAP34nCdsJn*s@)6_Y){lRqyuDui3uWC(qjsZw@=Nv~+Dtx~ zntEMkwA3gHrG##8{@5l{LcTM0vSUZ>y_I*O5gwECA24tAS*MlS8cq-J*wf9q0XqDM zK0vM8^P{>H{8G>p_o7RSoqs<-F%(4PN!Y#8Z$l86@wF9z#}pi#En%zg^_z=;Yjzs| zPbi3M!*7Zccf_B6r*Z87#8Pm9kE+}jp2XwlRvSA2h@)UehJ=0CyY@C}(!7P80X(I^ z_M?a`JnFa!fn@nE0OBe5u|v$NJRYt>;F_5LKmrBfANU%S?sssS-n*|DKq3V*r2?k- zy*?X7IB`M>Ac=x&wIVj|-TFWT43xS8NT$G*@1i@(C2 zu)1~%fHxG>>xfy6VKRRBESwmC914Pr#mqcx41V){SULkhE(OW_V2o8`dZ?f#t!bDA zAdi9_g#xCl8G#=Soz-&zXEGoWDHphpnw81 zk&u;dzE^=jk?B$Zg%s5D#Ajc}b^Zt>$gcqKj)GP%MC`CbTrUJ%d{+T@Prp4-^<$i&=zU?Lib_o$ERPA1V0A?~J`ZFLEIQ-&bw`@QH$VV+3q^*2?n; zSlMj^@R@=({J03ymtFAM4~O=f0eqpr@|J{k&ngW^5j@kk0w|*3)Lt>`yzn@#nOgQT z1n`vtue)NF*?tnP5iP!M1fZCL8$SF1*r;px;S==Q4WNXAe*F88IM`+}>cfgq69AtM)-2`~&2|5CubtDT0|3e>=y#cKpin=mj3Pu#ISinjg3*6T zS=%2*xPmiS?HGUx3hu8LF@4dz1t`K~tK$GFDbV6){S8uWz(a?G`Bng`C|G4GWGymd z@1Y2{g(m@2Qy{O#7mVNb#WkYrcXj~2Q;^tO!mjQ}!T-2h7aalAP|%*ARr2k@*tMuh zIulO=sHI@nKz`iXoWmUv2yHk6;0FaMyn-XyFcQza%}R0wP)EU*SP|=DqKMzE)nCp7 z_(_2(Keoec$s~rF^uXQ|Ks^PIwhGyUpT{jQ7$yhQ zWIow9Y^JL$bKlFOz!oE zHj__I3h#u~Hjpm{io=w=OBnM7H?& zy@_aN?C$bE=pT2+4h;2^nND1Y?~H9*@kjmh&e)Rka@q$*byGk)V_lnPyp7sRW@-0W zBM3mR2ItfW=$JWuHF&S!M`Epbavy>I&+h}Upg=cH%qsd9x*>2_B^tnS3KsD>q~O*` z_?>Pfd77h_tx`mlTd^Uk+A?yP;j-MgnikdSBAi+`SAd(C|E8LvDq;j@KT<> zBa;AFQxLmZ1n7-;@U6Bn89x@sle3&fi3!tk+8b zwiIX^ikbW4Pq?w#DFJvdD6|O;G$*XJt4iwzv zH@*it%(p?H^SWFBjudp{^^^@7zIh0IZ21;|69rq23fQswHr@#6ohk%yih_xm{Ep0p zLVQexZtQyirzr^HcU~C=%i-~IKf_M|oGI|P5wY|ud1p|Q)=Vt|aE1bnDhadP>44Mn z)-}ZdTqqdq!PiR1hT(my?b?(9I7`6-nSiOMt;dPZn{5>UTq$6^#cb7uD%^*QSycee zQJ`wfFOEJGiYogMy=b1Z?VxC0Yomylc7t?~kA-1)AT*Y;lC2GXfbqZQtBJ2LZjZ_5dzX(6)}hj9)KEL*P`a&H%h9c)_m|KDp-^ zo{BJvRswLDg2zjRtj~j4;BsB?p)T)1P6k)V(R{(w#=*$+e7WNNub|)zB4#1y+G`^Q6O~xWngh3D009>Kq z$WAenPETBl!0Aj zfVBXkC`jKVWOCXicr=rsqzB+31;wAltcOhxT!8V*)dvtw!GuM8EudkCdQ>SW)tz_v z?~ft}P3(;Q>D5YhsZ+yYl<=GGp5N%2suXNGJ5W~XYH$p}F?I`@hdk5ywrrv7cIVNx zs8S$`Uf2kmtQ7QDn=MP6nLG}q`>j?lZj?<|3gX&%%jPVr3r93>*OGsuyuIJYmdgt5 zzXzg9LG127w3$l5$^#KHk3;wVLX`r2<3F~!NuBl-Zv@?306+X_58;$^A}AclgP7s{;cUiZD|S0nqh2EbzqEckT>xk``m z9FqBx^#Gnw@a~9^y)kHqUlnGR8v(>p@N23no8x!|Pq#ab+5#Ysf)OV~tdHfA_oxpS zUTp*LlmekZ!~*-P#v^cQ$qoSV6jbvw1{IC8=OJM6dnbSd3T*ob*&uH<0|b^TngB?o zAkJLK{Cj1rMBtvwUI0lH3^^=dhqn9S@w4a9{Q#0Fxc`nHrtNZ|Gm0=vde$!PJ)$R^aH7k0Oj+YzN>a1zQSKm|sBtBLs5# zIs!=c`!M+? zfC36er;3^4=iT_Np=c8hppb$gr-bZ&_`9>HNoNM$1@Ml72z`DCS8Pw5mMA;l2k@Q( z|DVdN`^r%KeJGe81>ge(w?+t9^rQ}WdU4>BXaFB6*crl)z1vra^Oz4)9|QPA!9Gn1 zb02ZF7w^rOviF~Cj<;1z5q}{!C*5nOZb$TfPm?- zR{%;Wcz=g)kN3N}AAvJwnE<{~V98H%&)rvt6QAN$Zvd205H(JPnIAm;3q=?+KMz1T z1uL%c1z#PtaJ_L@&|3f%6qw}m6U2{2;X2nb&36DQDOk3TpYQFu-V!y*%KZa?DhlE= z#H?TEOJfk2{Ph!nY6@b_#cWYmZDRyVV~PNLry!?`nB8A4ibG&aNC|)%3bc1hnNe~n z9trr&ECWzWK}!w3&UmK|evv&4uK@6a0$YBkcpr(6BWjX)k7@vQ6pZ9!zJuoDH4)G} zR|DWD1(RE=FqMHCct!cGcJ%=2DM;pLIi+r|!nKL3X1@S5P>`p=cPKmk#!WgmspXNs zleb?Kd{^ZQ^`rXNqdw?GwFdB;f*zm6%z0X30|Gt)@&L>P8Ulqb3JUzh(5*(p40oEC zh&J*oS~{&TQAhdYQm;%im}wL=l}}#WS*i7YTYqJg7H-&;-RPRiCr=;hA$u|==pcf^ ztvSs@p6R5woh=L3R}iCovUYV|BWyCClvGZYm6b)QqogqXbAF?2I-i{7?jbvWVK+Xc z$^LS|zfs;^rQk~0!wX>+D4#U;`9qt@Cl8K&AS;axnSoNmv%Y_9bNS>hM~SwxO8fzY z1N{C2=B*ajZ`3|}#u|@#^8G(Rht25&q~#@HBc`U{ik`9NX8;xyh#jQNd|ok5-qiex z034?v-BQeyimr7<&$M(}2>?q9s`#;>x@CRw)I_xVHvlInNaN?kjnT}(d~o$dH}W*j9jL|vXf=F8g}pSZvb`_q{K;>&67m@j^DGOmHFSV3VRCnx8Tdd z_OHRiu;KM`030Z|!I$SfD|W(X6Ld6f3&4?ryp00(ro!($dNdXeQvl#Z!Kh&Z=DYd{ zo?eM+-3h=c3cg126;kh%@I1gP8$|%8DNy1cwuancc-*%CfHDAQ3f{W&V{%(s;wJeD zL;%iE;C5fip48^yK~mgJ2>=%gE(`e1*pzf!#=JgD6~I{vUZx3{wXEC*{aN?5?E%1* zg4TS+VAwGGAOtS=?*-r-1$KPrQEy?n#urpQ?ROofF12;<&PqCo;n$T z4+TeNi`h5ta=b|4!Rsjid?_eWk+5!AV|tPgKeZBpcN^yd2%uosGXZP=W<9P#P53w;z*P!T_~C$O z;x^$g&?(PF00JpE%2x#3+4(5~HECSR5&+jIDB@M9u z#@%pPG82I-D@+00p}>UC*I#RY><9uA8}{A82)?OfOS2%4!m zHxGHHv-QV9nJE0$Qj|}Qo^+-WHknVJo;6K&N#m z9y@=ea~FLi;-iG{ISjDlaJ~o+PbT{en9!; zyQBXB^Hy)(vPru}bNU|i0I4lM4;_9)AE0}D7mC4ND3If09;50$c)D@z zl#2i!Q!uNAkSTq#ID{fNI(h+kLcvol5z~9Y@DOI6fe(OK3L+Lu*j@9m)hL3}4?h5L z6c~n!n9;CP4-vTiFaW?)3J$-LFspf{c>H{NMT+fW_bYu5oJP>{&? zhfUo4)fYACgk~s!L<$}$Ntts-`5FWsE8YZktGU zhdcz3MnU{qUiW;s2qz84_r(BsPC=*DLKfWR2p%sO_KXGaf`WmU1Z?Qk<>jbJ4>O+v zcuB!Nz8bZA=7e4dc;qAkNT;9`zrEwl$1VL3@V@#Cz$*$`%;R%=0oM2>V74UT0GSlX&6Thj+XPn-xTuv0Ad7-k=lM%u z>^8hoXF=yT0J15#_?V|9E5_nt@4frE0NzkAuTH@9>c+G}P5L(AEr1*f-1(kx2LK54L|_}Mtn=NT&!ssYSQ4%6#xn;xP4N@Jky8b*Nn!@Y5?yj z@b}HvJ8z;};`b?CUz4uLg;8vuNyV3(nU zeN@=_1c4v-egpVKL7j#Q8xYv$3<7tzwzB$r81|WhQOaW0VSX(BKBTF%0q})_cGsmW z`1KzA1q%P!7C;dNcMVk7!#)k?P?H??DFFCN!IbtQcEA75&j?H%(+NN^1;csPeaL0` zCl1ZL4(_ArO?^3qTbGOU_E!hy6c)BJgpWI)G{l24o7EwB=9<0aL0De*6oy~Xm_I-rk8o`c#0r*XU8{ggg_55=@GS*u&4S<=D z%unWB=lA7o8+HNZlZR6K+QR&#u&MdUs^_g_0ay24MQNdGWdBCjR6f~VZJ;d9?VUY> z>o*K+9`a15TDU~E;c$35$|qIpG#X)(`K11e*|KY`-NYy8(&cSvBnsZ6=?*G$BEzSm5P{QbJeu$2ONwj(OKjThg!h zH-rc2{0Gciz3UFVmVLyj@P3ueB;3*^Ea!W8aE(8p%KGjC~Owqc!HDumjrU>L8omX#Qzu zYu)7C_pPLaJT+Tyx$(;xNE zJ7XWnscF9q-aZ_$lI9t2}++E+Use}P^;fm7x{$IR)gVQr0=`TTY276J<5`2Z{^ zP<|<8n$;m91gwrO1aO>!Zk`gRrK5Wv0rPfC09aC>9V%q$(TnjS6|IbA08UU)by~_& z<$vInIa5tm0PxR^2${2tX z1#%#L?()`=Efla&J_6a z<#~>++_ex`o^TYv846q?giK-Z6r5EYw>1agLP7tpB3Al!bvG12wemQCvlMLPx27Z& zBzHz&iM15~R|*_zBuqc?9Ih0EZ#)U$90l6td~wK4zc>^jOK1QQ*iU!QyifCmL{`SHYitiD&E2+J0^ z0`R1uke|}E%(v}y1n#yu58wg?ller!Gvg6r1U#}l09>Ttt-Xj1*!>(=&Jw&Y0=Pth z;YfbnO}`NaD8j^IF92Q?^k~nQpR5h}pLsA>9{`srce*G5Dw2dDh48V_q{MJI&TQM6S zShXrX6o5YkdQL+2e!KYt^k+?6brZl93fA*&cS|>a#hosTxD6nHg6pMxljziP{BBKl zj{tC$0u6rdk@x4pc%$pmf%gFfQlL9a!V zh=M8egzTE>dVd7Emd60NPQjVsD(u(Z-FO8+>71tkf+_f1t;&pVMdS4=AfSVLtza?Y|?i2B!_1@VG0JkXE=*Z8;-uA>AMfhlu4d6Bf-^Khw`>oEl z2vn`h1rScba(<}BnmrxxyS3_DK7czE1oOX=zNEt#6hYgr5I_V4IV+Xf`&-lSe|ls8 z4*>2`5I&Zl&0v3G8H&*P$tM8!DDV~t*bN8mCkQ+ADUodZV&gBEzFXm5EL=TYSsC4M?Bl-Z%+bd-!>ue4qkfxdeAcg`v zXDQq7XN-Ty{x`D#Jf`3^Kl*&WfgRqhGHX)~fF~3j=jXmun403ZSL~#G0I?KIc`aZ= zHX6jDKD6&r2q2Dv1$+pT>#*no0$;j*0PvK8uuYeDBQWsACjjvj81p?01%nTp zBG5Iz2tWb_20TsoNL;OhK&5dBfJ6#LOZYrk%g+G_^vV7PAc=zGJA}+VxMCFoBOEIL zBvVj7NyN4)m*aZ#Mo~3@XB5LAfHVq9T1Z%Bkv*;)m@a8?=I{68a|#afg~=wG^YC({l|$PActL?; z0AEum9mK6|z@fD8&UH;P%}qrzeo;Y@%KKqdwHWBIw#RR?gX zA$pPoKo$kgCk2eXURj7DD1B7{kWImMe!1z}dsa~hl!SBx@P>i~2?FNXU1Ea3L)H^O z4h7nMq%0>T7S|@`_3sTJmjbn7F}o!#ut5=gBGm!pQQ-Gf$hM74#l?&*i~9q}r(g@8 zs=hg=4<37VRM7zNmVz-8L~QlUv7V?&7a|7(D4?K@R|6wY`cxutW6v-Eg%rFm5i+%d zC%z(}w0R_ecNA=ilCY6q58_T2-yIF$Jp~d)0eiREG7m*qd2k$n4-^En<>wm2znX=B zebIOTA1OGwTEMb)&+CnVaFG^(PZX&37qOvp74Z5kn65z@1+@0KQT%be5Ry^BshLK#$JP1W-(Y zDZe!(a`{1J6hXDm8~`Q%0Ql)R`mbl=toz!~1prDZaO1PK4_0=FLlG`IEC%q60)x3i z_Pd+vcmx93G5}>1jNL6}x?0|NCC182D*%-L11RSA59fb+xb-(KVG%I(;7? zEBti;-|=Jna#{0`XFA`nES1&d-|vU=$y3`_G{PqH$@?iYWuGb}i6|-j=)1B}Hl0sK zX86kzdh||0R6Tdqzfs=am79LcdI-l?p?p#`?+MN>E}zs{ z(^Y%uoCm8BUXlMNaFdv~x{uj*?bQCl?dXXM4O8PEyc4Uc?UEs={+hcNO*lu%+PjT7EUgg$elcZ)AS}fE@*C??r69O(vdLK5lpz zfIS6e^F&PRx86R~>EDuL030Y#St???qQdPENU=2s;7GyMSP@&}(*Y;Z!abG%oG3_H zC}dGz-rAbFe!4jWaG}74FP7MCyZ_JWI9>_Rr5K)^c12Y@>TzxZjZiep;i7nzQuKL8I3de}&r+h4!%FRn)IDgaLk zr@IC+^3T%h)YbCng4M9MCY7_up3gY5aSnQ&(xd^9hAk+SIcR2%J2d1mG$K zm3(WAeZKcK1bXK_0}x1o>njlxACo#D&}vp1fNK;C=Nl#(PC5-oKu_@{fFKH{yb&;~ zA&+pO*fsDKfa?@2;0IHe9q@HW5jq;Oa3IwsPd8L8uRYQ;PxIra)t(GAkVaZ3Y5KUrPam zQ{dtvV%dGS-9(_JRXKn=6htgiVF}}%?jq1|rV2m=1-D{EY|exQ#s~!OtpRYC0)ICl zllK{h3-*1q>j2!NU@c$pVzcugUMqd)W<7xW6dbMKOKJ}54Mj~dp8p#_Bn9F8Pz|5h zi~U`1(6GQ2{hFd*SR9o!2D#B`D9*pC)wWquW?#9bwY8YYbu}YnLJh& z92$*x#-5sA(mdpuj%wsaS!Zoub(BwzIaJyRo6ILao9W7S?YQ^~C57J=%Nk|V`Q+&R z*JVyWXKq4tmudOGQQqD~R&v@dr*?Rud~)diKeU;AGO03Ic0I6eHcAQS9Qb3KObPj& zvBih`Xvcl4ut0dl!T*4HtBY3e*Ut2)t3nUZRp)Bx@FV&Fy?i2MtsZP`jllJa8UQgA z$n$k&=W?Q7AmFZ92jDRU-T9`6`py0D!kg`1>j6BWAd?Sa)>cR1v8ScwZve3rxXe*z z_pco9fSRPVua)QDKY}<40{OuhW-`9SH-(mZ2`nn;1H+G zTFVWWU2qMF5^r;5JLdW}5B6nUYdZDS#9Tl;rus%migTs#;U0 z3Luq&SsYwnS?r7YpzqofKpF*M{02*T^_e&Uy`J6+z;g;-^NF;Phd-vF2m_SV0lc6f zk7r7k7InmHc3Zpm1Mrdpv4Momd{~M{RX0Qf0i;u4Un*k11Qs}-9DQyOfL9bK^V;p` z<7K$mJ9zw10Iw-%;V)pDx~KL*o$i`596$yI?QV-%e9T-t=20vd1t60Gb0;x766`zx zMVP*REPyNuhIbOPW#O4C5SZtu2_Tz-HTwKERIMBJ2n0Wz2;dC`Q_WRawZVEn1lrxz z29QI6ZzZ3)-Xs45fwTMm0+36=US5z{5aIC+fu3Wh0m!4E*8~9zoiD?0?+WpB0QnTe zJ`pqfpSI^vgu3f90lcNamCu0guKR|cr8x$302ELlbmgo-%$fvIb@R7X3+*=oD5Buy6BU-bOb4$ZJiXrlz*h=d@?(v31V`}yL38L<0L2tU zsfyW$=+Sug@XO&H07@tbs1(ACv=k0Vt)wOh?4L2Y7u%pk}NIfNvDky9?O0 zc26`AnAX}9Kp6!oYs9Sk3=_Pl@qN*L0Ob_So2ktBTM3sBAG#d^P(i^AzH4Mgb!jMS zlF`JY04gcyTp?z$wS8~`TK>@tKotcke3iV*3SCDOVfWGF0IDe%9?4JmY18LE0!Ig0 z0r*Zqu6GwUBEdvwCyZ_dJ3d`7uDBS zzwo0mM9~dE0|iBV@9q3!t#RG=b*VdmUlbgg!OsQ`yn>fZ9xD4%pGJ=O@D%qMkT>d8)C@=8NVq3c5PM%i>e zxm6Y_^U}>9gQ!8I#lKPB-k3eDv@=GQTBCf@<-s4?Og`B+{fR7Tsmgwo5>Ac!W1Gt- z|8HmPSoP6z2xtEn%v=54X{Yv)7Jmhxow1`#9en@a^FVgSI{&uRDj1XT6>W1}?d8}g zL<$0hj+;#N42KzQ)ZaXrXS|Za8(Jnu-fu*t_qbC{5#FwX=kK)Sw?{odJ7b4-b#5g8 zurpTqSGrcEoW*^#$<@8#Or!ayow4cG!(}bfTO=U#b=KLY5pP|uQMNM0TP2xjXKd;0 zKjZf z^wr?KR)tMoQjFyEetu%KYUO#wSPpjsP6us?Ybz;Oz6Hj7xSjvRicU(ve^z>1lW&X5ieb0IVq(SH_Q@ zT+zhw(FS0I;PX`ZK@GvBFLf zfy_0x0N7EW%6HM#%}vBfg4?h=0PHFFGEvI3u08k*MF{P34}b#&%j!gIeoh}{1lm1| z1mH+P7guGLqOiIJ0+07U1mHx${tOWd4RyjR05l~r08UY$!B?tv-gNR4ig3>134qfS z$njN=Ar0Pk2pEof3c#6yjwwoPPiYUl@NCz+1OR6!a9k;7kJg{wgChLg{tSQ%1#$cb z^fF{-Ap&LXe_8IK~|)U5#EO~E66P|~0wF9srTHNFaf4+VCm%534sCD#!sTvr3YmxALnMC_IR zc`F32jjsdXM?v9G5ld=$U@-#XXY~O5DUfR~WG(ZJP9ku7)o%b-C@9brvzILz79lX= zXG_1o2UGzR?2!|)BXcuwo%g|FIRIBF*!G3rpQdp!0Y#`E(-uG=1^4)hm<_Q9@g(eY zc?AI1C}2VfyU}A1&Rgtmbp#MZL7-T~Hm``n^^{Q)6#-nQKyy_W=IZis9qL1H4`l$s z6e#l>UE8nB!vz>Kfe1hd1@qSNvBqBk_|MwMO9~*Af*Bhn?EA#A-l$1xWhHJfnES^Qegi?$}BF;JcPiwHR=FvQQ$b3?{=SL zY=eN+uKoaSQ}CM48BDPY-H3qwC=CGN6g2osm}cE7Tn!H}8w}tM1$9CJ+bxT0k0Q)W z8VVqS0?lx~`KGuq3xRD@MgX`=L5j10eOdKNh`{-KqX68aV2ihySw=3!EA>n)#{#%d zf&X$TTeG-eB#JO){CEJ76eOSI#qHt@TpoFxFcH853Z|`AX8WwnJW&MsBy9ju6x1IR zu(yXR@xymQ@)v-I6#V9EpOSag+(i+Te@z7tO+m3CUw29)nc3)?suXxnA0`Xzt!|Dg1?GolH4k~F6IildR=hXW3snk!-k9A8 zo2(QJ$(bi>-znG&rTbSu&S{iQR|=BTugH?xT+l^yP>*^4MtOVRnYPik>(+fJsuZm5 z`G+=BDVX;;U-sM7avDnZMQVR+bCrUKjA7b8cmF(saQJ`0ywx_tEwqbDEY_n3D6#J% z=9qmCQwpZ@ zWiV31Mbl6p-q>#h5KlqoV}2E{+7TTD>V=yDBv24=Uc!uz48V)Fs-|uQkVrv8unPNY z{Y9*!(mXt26JK-?KpF)rMyN2c=6?L?^nZB- zz;gxIm8dBkJXq_ca?0KA~!O*aucx8YtT0%Phe0KB9iQeDJ!O4KS4Xp?>dKsp8M z_X=3`>0wd?)Ysbpctt@#fskcLqt_rH9byOIH3fH-gsezzoeY7)-y8sBP_RReAE(o1 zRuTe-ww(fyNkO2Nh>h%a`6UAFrk(+iML`f>xp^VB&qM@-US|PhQ!thnm3~|+u|Oba zpc{ZU6kH7!u*m#=cz)i$qX&Q-3cUG^u9L+JamH$S_5y%h3cgPivFelws;Eidw7dZ1 zQLw_0-wEh2AFuWB^z{aiPl5Vm39~Gp_rC_qV3Ui3~g5Mg?l>-12Q1B^1 z%wBo^&*Wc4K_Gxa3ch?)VW};w@$5*CU)KS=qhMqgDSLY2<~a0MicJj#@ScLFt3*uO z{ZTgrO0#bQ_&~t~UJZ2Zu^Oi(a$CXye57E;V7|dJarko-!NffRz$Xf#`F$WqvYxmg z(9ZlmfX@`@*75~kaaMTwN$Z9O0KQOQ#kZ_=6lLk72-4Lt0E#F`=Vxjuw>vo=fvIC- z0eq!k$#yAIUh%dS0@m420TffP>XeA3g;^7HX)Mm+l&fKm$N z!KhB{D zVRPOBsHQ-Zuao%HxoQ>y%Eg5MzEcoCScRRu)qo$3i_sqd)KD;abPUaiGMuuRmLR|BZXF5LK+his~{E|>U>8kd$5jL4m zMk}n9eOFWWLrG!c*!V`-bUx{OF--Q^(55e<^+yx_jq>*9m3PqoIILwL$|o(&{?KOf zNw*WvWmZd9R-lw{kNF?lTt4ZrR9$=Ll9p=`USaVcFmLq|GgIw;0V;ja19ZUX8Fbj3 zK0v;FwxokcRtf?tf;0dY6l~!WX${YBUq&Ed%?kj>DTw0xB{Oda;jL07TCV_DQV?-a z%G&DuG)ECM12O=dprFJ{z%sL*g(1*wM>YT}3J&;*S)taVdk83Q$^~Fe!L}g)rX5*_hcLNc zKLN0#U=%;Oce7`T35u}Hs|bKS1;O1V?APOO%Mh5ez65{+1?IV3*z>zjaF+3Ta2Wtc z3g)#GGr0xEcuCdj%nATb6ci+g*yq@qc+{jS=V}0_D44WD%CZHYk0D@msTRO#3IcCS z*~gAI@#M!1lX?Ko6m;h&X;h|LPgjua!73a%%wscg?#2 zxJZGUvV^&B?0W)%+k<)nxI}@J|A6)nOX`8Z=BvE`cu`fO>?Lg7<7m7PbHc940D>r379nCzCta_hCZ!3c0=Q1W{z3s0|MZYyl6)pun@pK3gY;6H|ygj9Y7Iwwp{`skb+=i0h_h!ATI7j8ZHBH zpMq~E#B9y{y)h`ljV>zy1W^#RSj_T|YvIYj?gv%@2&Uj$wwQfba{vRIk~IJxP@t>A zPf*^biOVI+o~{QFLV-3v|6X!XibrH=)|&u4q@X=NuDIKl96aW$(bx*$5d~KcNLaqJ zP89l;l5(~I2&LeV0bjFjUWIojm_FDE;4uZ39aLGysfBnE+vr8c0KzD!v*0K36<)>z zUG{1ZfN%<`;`yzM70ceDeDb#CM1Po{Y&4&o)waECh5oewloqxXum;yyKB=^1xXeK9 zR5pUPt0w;$@=RyeyN$BqH19SK$8w;08%L^RNxgHtuA=n=96pz zAnhLjKj3fbq#0!>!t71Q0i;uK+)~8mZ65y(0avY40A5q@zdg_|)294HAmY9?fD8)S zFB7se24T(!6v^!XyrCc_P|R{OukJ*^t^N#vObQHs@iRDke8taFNZL67Zz`HF zRRA9-xVVbn>9E8JPiQVJyAI$Z1^ajKxA(FiZBdi@mD~o9M?tFrywgmC^GW*~{s8hR z=w~Hi`g>d9PQTs~2%vz1(R@X~c$rRf)Fju8AOM9FwAT=^lCLlEuXJcZ2!Kx%+~Q}U zjvc&b7>eNU^9aCa3QGA^8HRg)97LemfG_|>6f8~S_o6Squ7ZG7Wdwj?3JMF9*#Ozk zYY3d)7X_e%g0|H{_NyukPv9)Jj|EUlLFh&atEvk5+nR&AH~?QL2%jKfXE&MP2xp?6 z11O{5$7u;m9CO(m^x0BR^$*H4x83)B!I5ZN;yKrID>`0kyac8X32 z%z9Y};5!BLcwT>Jspk;{0?!r!_(8#*X1s!prG*LhNe!;CeDdb#F|zkwpN=4S zv@ZG2kY_pun|I1A`)eAae6oL+lm^&nJ}GR!Ue^Drc{R!>Z^=^|WaIf{E2sN1uRJ$x zM3?PI`!~wl>vvdLKA`#Q(7LNKVaVKG*2t}O$WQ)XlHEOk}o0u|9K!gV?8RYb(ghgUD5K%o;(HPaWpt8EtZ%QTw&Q{L{|Z z5yMBzdVT7kh)|42RpW@a?)apOGL;_jC1_`C@ulDBA9u#;n3c=CytceWTU;-A{#O6I zGj>a*j@-xK_GZNTd;O8|HtwoBE)QNf4!?0-`u~8A9iy)X)jSn8-#i~D31Klm0hm#c zyqKruc?Z{^x7C|fO&nC8n<1Zy6kU63?04oYgNAZ(-hdP`_AU35ffa4UnwcyvX#rO_FVEsKs04FH$nJQ() z5q@~Wrj3;{fRhwt@@107$JXCM5ytfv0yss1!h8W!S#ZG=ftp`p0H-N9^is^a9@9)k zpukiWfHeh|o=cgs`&#_vTirq(fDHxrkMg@2uZG~2IYCXj0I;RN(OASTMU2L|ms?mj z0Cp5CTqt7I)Ar_~KFpfh6M#Jh_cW#KP;b+z2n-&s0pJV;Q~6=qCgFJ^1QIj*0ys;- zMBXInr_+xS8069)fCB|uOu){KI2C|EZ7(eVjugyv;%7Zht$&EXjC+FtoTFg$GJX={ zu{U@K|I%zI04E9(`MIH2T{fOa5jKt(0pL6ZC;7o)f(Rc)1SWfo0&sx>;~hL{)(o#l zAY-sD0A~tT&*s~`BpvW%hlPh6fC~lt(?rZtFCVX2Z<;e6fGY({m-G4g9)ocqEcMnT z0B#htcIM}-pSw|n`fy~}6aW_~m@VW-zbkfokHCtD(*U?rFib9Cs<#4rB9QAp6MzQ= zkB&;1PVSrj2t+QM1K<(`y9bKc+}#_lAfP*J9so}Y()iGEQWqOskhFHt2jE4)=z1{= zu878U-gccA0q~|k_aUDWnlQ38YLZIo5&%9F6z=3B@-MMC%Ql#20N^qOAC?GN5WDU)*?k9e^toY;fk6%)aoNh9ZHE3Y_Bw?3&?r{2v!_+z`NZ3I;dhv$juL9^`VYP9%{E^#u@4!NPSyW_oYR8&oNnXLd9UW}X|Z6#P^W$qpXe^9CjS&VHs1uCYo% z@TCc|mL3=E5S;$}*qk+6@U~$yy-zabI`m4%vr4QpXQKcZj^f&!OrNFf72ie2S-6<&9H#qj& z{;5(hO=pN)`qsD^!qxu;^H#_9u#jIqJUbjcaXq)5h7L#22WUDky^8b3m34F zhpz&7PQh|Mr0-W^I2VBciyHtED0ss!)Jf3P9Ere!DYpS6Qt-Tm8vAKE^*RC{NBaYK zK|%IQDSMkH%0WQ8Ng#li6!f{mPkpw(h98X>^B@386!`CuGHt==nJB`UtswxCDTx0n zVgo9cT}9w@_fP<@C@`C;%5<9E#M_Lze+&bVLczI?{Jz!W1}jj6x9*VuQYl!tRKzwo zj~s(Q(2!^VX%u*T5U}e9!Zi^nD~$z^PQkJ{{K#>$R(=TRzl#U(nu2(~RywOXED(Xs z_K5&8DCl#CA0FJh09OvW%}WCChJqR`Rn|^X;S7o}vsns&ObS->1KpgqRdq(d@mCsv zw-j{XN70;XF>xLODb5)HvM3m^P0EhV4!}eD+T2V4*%Z7RDqvr`W#U}y-Oy|R?JdAa2P$f00&rIe-5OWJ`zN9_*)-cvA`7Xo%JX@#fe@=Nmo>t@ok`8t zreH#afSqYkvzz4A8J==1E{AU_Lqp+pWoICfm`~+0Q{n0XO5WN zbUt2$z~^Nn0GO(gndcrSL`?frm$@jP>|oPA3T7JB8k>0@rKv7!aiA&?rG*(IJ2be) z^2t6nQ)QdVJ|!WzxmfAXkY_rILl4PXb?ejt<&zKGR2pET`Q+T|dt}|Vrn;e|FrlZg zK{lRGE(wZ|wVaZ<1JMPSMgK;5d$k6N2ze1-B!Bj4Zj5Ba2^I8_#^BaK8UVOPK3 z_D}g_ZIga--?w)n5RUvWn78`EgQN0~LrPuI15|KQ6*_#3K0vznMeKU>&G`u2AEFMx zjDj37KQ6(`1|JsrETuC5a|*uq7P7fJPwhkz?k(&Fz=DG5hlR`|_)8iBgS+(vU`fH6 zVgYLzwgs2<*BtE)z>0#YIwE#*>3Tf6-Po@$fa4U@L<`uk-d}JjcA2n0fD;sy@`L)v zO&o(0(ATvC0i2}ZEx&5fD0JOn)aiT21_L-nLBHKXb|`UHCIX7%hXOcFfm z%K+F>a7ZFy!zZh3LtxLjaRBToaM&+l3Mrj%#(I9kL;zMG@>KP6lw6 zf@R}Xn5X;S<|p&DX8>@ZfQk9fnj^yljGp&r0dS;X(mVlcK7a29)THb+dH~K*(59B( zReH=Dml_HS<^gb`;5=U-uCUGl=Kyb<7XUao$vx636Um-9hdJ6y# z3JfLuzNqp`I2SW=-3H(i1#&kLiz(gn97Q-$v;%-A1+V$5@>AQoSqP|_?gHRN!JBCk zHuUA`3IvQ+>;d3SK@{ImcCcvtWCVV8*$=>n0x!Op^unUq?Gd<@Wdh(b1>L%iabR#p7kA*Is~P?KhwSp&F1 zK~bKBl@{(6B9OD#4!}(cIyK>^(~FMaoH!%x41ik{P=s&q&jGkiLD@11 zGkO(&AAvNF3jpp=V6;-iYW6?DlTfw>t^n>*@SIP-8y?-e7)3A;xC8K~Kr>a!n)ujt zMBrZ4B>({wWb^v_o9V;j5C}ix4d5OHi@ii_{!Ul?s=RQ{7eF8dEvuxghsKZy6rtbF zs{rm(keec974gG@5g69(27n+6qDKjteXBBC1om6p0uW4rW4(lZ+9XOvpy!mk03J|~ zlPO>srX_gVw`)iMfDj4>d=#*x&O(0_;YxBKfQJr_|GnP+GX5ja!3jET7bloggbc z7iEfI+{lZ6hCI`8XtrOrefsd*D4*=M$-MzKnopXvHkRG!W}1kSLJud82HAK%=~Mbh z_PAuTBch2>m;R0N_D(Yv%BO|(Yl8C0gy`S&5BX%9v)^R1D~*?+l+ZZlxBXK-*(FgX ze>-LRC4}3?{s+ukedN(8`T4T;IFDiHeW1e;^Z`0#BVoM*!h+B<-E5Q}fJh2f>=iK! zt-y~6jCy_*z!M6_9pqOnnta14Zq~IM0HP>3_n6;ta@qq=;F#3i0uW6>-wqPiEN1x- z)TCE7cLBsuklR7bj7Dv@LLk-i9)MU13^OEbeyg5%RHbz#2*6VcOda{va?h^g^l;~_ z5CCx$n7B&Vlg!t+d=~ua5rB9KuJF@`Cwnd(RtXFGA}}B<7C<5eMxXdZTE-MSy)vgN9>5C@PFFm0TKDMnvDf|@kR>?MFC3c5|?L&>>c?;!AA>lJ`x3ew+5*u~UU zctp}wAq~JQ3JeyA*e&T{T$>nZ@)|%21?9P7=G^DlH`F9~zf1tB6r3#;vK`x}TOeS3 zEek*z1vx1aw#_6o8iDphasZ@Lke@1GHd`ibL_m5u7r<)@7V-)HcUn$k5Xjt@2Oxuj z{(RTafB^}(vYMt`2;dC`uZ{Ta9f?EQp$Nr4J_E?4Ad^oKP09}KguqUp5&&;0Xg*iK z)?ZNwM8Hm~3_unI!E40qP`!#F0=17T0Ay3JFo@rLQ80Ka0%c>r0eDA2JijEUh0d-C z2t3WI29QI+c79l-+L*a22vnT@4&XfnW^IK`y{HYYubfo+2_TmO2SX_f>AAiYijeL8 z3%~~oy786%-(5c8zk|6k0y_;90TfcOo4<^|N&In>vecCUe4-$w zsfc-uIf5UJeGUQupDA!N<0mI1^qPs96fF}2D54;c-&-^(tj`Ms6ppI`D5fBOr-XgZ zID&`6^Ig>elu&U0pc)&c9{C(a_;{oXfKm#q?(s}%!&yAmn6s}tfG-q;m0F+a(biS0GUfNd)^&w`sCV&bG3~hvLp5a3L*7&40 z06--L(XIKxAn&s92PO5p7J#o5Jmzbs$L)BAzi~?5+5o;$Fu0q5jY#^q2le66>0tn> zC{XRsPft7fwFLsP+eQGWrr_f?F=M)0@ZcnK_Gkb#6pZADobR1E#|}jpP_7H0mV%Dz z64q(9-B$!o`Hltfoq`j5|8S|vGj9ZZdQSlGg94X85zA>N$5q+QY79Uf1;HakEYNF^ zB8uSfaSDK+6!?A-F~7HM@n?5K)N}y#6r4#=W-~VKJBT9O-aQMzFA7xMMeLw)(ozIA zchm!5+L6ppw&D9Bj20I4M){;tkJ$+@KiRRd`N?r19cAV>lv7Yz_$+cxgKI3GeAZ@) z?8&r2&IlH%&HXdvnU2AoL$ccibK9VNQhnjP2H0pmsg!*{)uVXp+8h1@=B+N#u$LR8{CJ0U#*T|wll1?e2eLEPBF;^>cumGJw9Pecjr+brsicE&zGxv_!#!_L@|@*lc)^412SO|DHQ zZf-FDv@`Z|=yX}N=9Zxd6=rQ|9P!pg481Hn?PYKj?Tl^x?l=0!ow0Abwv^i(eK8qr zaZUI?>YsPU?l?V5{(kPOS%_`R`5o*Z7;ocKV+Z+N%TXri)ljXy13Gq$z8a=~7qA`8 zp5UQl%|jyqW)zIz$0MAtTTz7~7){;{z?^~-Uw)^2uk!8)42swbz=DFAd19s*zW^_I zid}sGfF%WM*Q+wc!7K2f=y23Q09F(v&gSPH8GXUqA8&6u0^m3W--iiU@Qh7z)Q6|D zj{!JAK{hXs1fDyAzuw=f%>kUGVCjA#8=K%BgCZnGTLCyl!S*l-yV8AEDgt*uoCI*1 zf|vJrJtcb58U$P~TLZABAekTLVfJm|90W%7u>)X3fs{|pU6MV(6>WWmvjA)<*swvs zD$5nhQG~+tjsWZ^7|u`sxITCDdIZi4J`cd20wV)4bL%d`CGg&doB^DnpdUXGbMBYb z)hI%HH8%ifDahp`^2#N`5CqC!y902bz~Y5~Y1}BmDeZA1PXLY-=!EhE+}2Oofg;S% z_W^K@f<4>CY{#8uyAg=*?+3t%f(?iGHY3G;c${YX{wjd;6s&L+u*o(*agq??audJ> z3Qp_s#iRkZ3{aCwb?*Rhra*;P&g>0JwGe2PjklR?kkaLwy(-6$-$ef|esi%+BZ{ zPISCZgah!PpuU5MO&l@%Z*T9_PXJt^VDW4T8{oUO8){OtFb04p1;L4`Z0x8V8Cxf)w#SQ2Ssqb{u01t z3a%XH+fc1DwjnTN+baOR6e#htPn$Hqi`Tc#s80ppN5M+Iy=S!b)6*zI`rX$6u27)1 zSIRQZyW+*9SIja2T%|yFxEkw}yagAxtBSJ#T%%xQZ+=6Y{M1_1B55P?dzN?Da!>DllGM=gU3BWB1uJLse1LY<` zD8ftsA^^83IK}Vc``jVI5`iPtB>?VFaG{wh%PzgCj=-|BWdQC{a425F`i%LG*Q=cC zQ3=4G0x>UnR%#u@^O5?ARR97g5M}T!oXZ{Y&e+WdY60A%pgF()!MI{Devz3>sRIy5 zfimC1nZ70j=fIKm^#JZuQ02~Vn7CepA8(DVO_Tr17lJ5=;QJqPT;GSGpS4$q<^X~z z@HwZ#W_;R%XI9$!wFK~hf)0CytirpM07Xb0-v&Sk1*S)oS%-p6_&;t)W;*~6DOgh| zVjsS5!>`J&3pxOJL_sy5;R+p{)de-_r4iQT} zcPqr5?%sI}fMg0RKa1Gnt(O*{2$ha90Iw)`_guu1s-HYTAW?rDfD{S@J;iL^n*u`w ze!Z9gAeDmYDz4%uW=+6g`Nr8}; z8qRdQjq588`3nKOr9jT_P@Z+z49~x`uUrBkivkxu-5#HC+Z1)W_N)PbYzj{Bvujk9 zI^s#E5d&8Oct=5X9|22UI3XNGkXNn-kVC=V7b4d7i@G)feZ1BIcu#?ik%Z0Ds53`k zakGs8aw#a}1xiEjAL9^Mc4#wz4-`BbugcVP&jcXQxvwFBj}+WmE@m6*FEm5Ie8YAC zc@(spB4%6ei`)?SoV61`J_WTi#B5K-Mf?SdUSJHMfP#f%gskk!n|>(5k~@0<6jJc> zE`QBDvd6>WXvrx!-UOASIB5W|S22f5xHs57E^G9)S1UjbM z0;r(iu~3yAt2e}T-xDj(0H~zEU^y@O6jnwl_adQ!mKL@RE`b=V5&}Lo^S5tC-Dv5unpyt!iocLV5U*Mv3&ApW>?v^@6}&X zS|}TGu)#H!PdXG&mD#4W_Cj#P>_dNsJkxQCHI;4mJC}>{$-GU68(^dPWUS2*+3vl~ zOL0=@ccei!o==*I!esNq-j^flSakH?C~vRTGpT&|f;>f(PrfMrP5+Qj#`I||cQ4(f zgi^wbCBN;z<&)Pmy6Pgly!1a{-s%I-oaC>z{%vWSk)19AI7LByTM0YvD#!2m;3N+KrzudV5iqu4 z%rq21?V=X|YYK`F^Pjcg8lLuTUg!hBh5|EwHo;R-1RkO1-|+)rOTqr@5_UIy7v5&1 z=zR@<9R&5 zRfm9k?-&5i6gcv|=tWmGHzTm#{wV+#3P$tY3EK8C%@H`DkpRGzg2aAe)@8>?JXmdA z`T~F(1uFVtmh;x|9E#A+I~l-53jSB}>9_eM{(rFFmI}a~f>CiQ?3Zs9o^EunPY2*Z z!DxP>Nu_59ez*F3eFNYU1!Fx#ELAOA0rlakV-^5U3Obw@u%P^h_|dRmoCCm%0&8V4 zn`Y*uiXymu&IRC2L6NSM?b=_9`{4dK4}cE^5xbSyBE434_OM4vA%M#i=-DZ=yxl`r zpe7kb76I_3K=_fb0=BGkLLhZVDF8nTUhAl`VVg?uOhb65asXE-u-MKo$y)KZn(3~! zl>n|%@SLA(AXif@K~2hDUIpM91%bR=@~BHPo>PjfuK{qKf=-=8ENr^JJBqM-^$!3y zDBv|=rk!dx0D%Wx>jB)Pz-6?U_1(Hdion#ACYgT?R&P<@w@t*BC`91W+q^E#0Nkcv zdp^JOs>tv-iqJZt1%NvgOm`G9eTUr<2(;I44d5;XukzLSF}arbWo&b;EdYNCqWsj^ z-S=H_YV~WQB7gu22JmO8r{dAis7bC_N&xOru;MnKP2aEs?-F@$Apj6aL7_m*KD*As zrRZsM!~pJ7;CEWeTKT!)u|{N1RRBR0+?^_5CywO2M|}u?q7ERKf}&i0)NexjqX_Kw z>jK~b1A}$vq1+WX(6Y<2z$FC$(vCjpdU@ zqZi4nyVTxB`DAm0c7KLE)7iV*O6EU!SOv-_<$gG z@qF@{N|Nm7qmaFbrhQcUH_F>PGO@Efr`uLtluy>>{ic7&Cm(!OmK%1C--S{_pZwqU zPx<89#S7(8ofJd}k1Y5Pn77)ot(!dNSrUF#Y>N^>ha>0%B>W~}&Lcxsp(k$pAyoj8 z6if<|Fo&T!ZxKiiR|oKfg4X^t>w3IZdR&IFK3L2V}? z(~C43iGWViIRMfq(CI5=r*qEZ|LLgsxd75Bh*yxZUWE_-mPB9H2k@GLpg|(GR91#R zoq6LI0mz`Bf3kpmvW?r0`rw~XrqB5R7PwCkVC;$s*nwjJ3MshoM!=?Z8gGI?=Ux^7 zK2c!8U-!b@4`L9w*!(zv&lGfA#kcq`-iHU=x2~Q9P((qUj)Z-@8dZ)WY*}j!pqPTh zb;`_qAQK~CUv3MagaSWa0xgScYK(y2tup{hDOhc*%=)&wwFQCu0~`T-p}@A1-*FPv z@d5%m&CdfUqabCDgjsIT!~Z~v$D9F_Qy}42Wh6a+jw=T{6x{$+P+(;(W-U#W6j75x z3f%!zQqX6Dn01UW#(O$E-gyG}O2P4B3CnAeT!12+xAg(=je>Qr`2}o!)?^@1^UM!G z6$Rb+!XwR7ak&W0^}Yt6nu2hC*G%7uGqez}bG`|nhJt&1-NeUa_YnvL?!5z`mV%}H zy%f7mauO;Z+{GwpdO(EMkc%ml) zEs7!ln06xblU?IQEO+Fu!6=_B(th{><|jM#Yh=Bvw^3Kw`&Qm~e$v+XQG;tNpX{$R zPo|YNt{=)LhvkR<8S+d=-r7Resrz()luz#47S;e8%_q;dHkDbeKfVwpg?mqjH^|2G z$>P#PnRbh%`w-Rhi}*Ln+iNWCEKkxjl%ssI)z#nh5Ba3_D@FO^><(*CN*M8f?4R<< z*q{3H>@bu42rs_&J8+|zxB7H~n|w&Zz9O_UHuc)Gg8%m?`2{v`8r%fCU9X*#h>g zXr~%#(yH7X0G1Tg_ZG8}uBEv2I`_c`09F)qyC`Nh@(!O+ggBND;5Y?0G=wa6j^+;p zHhLEVI6;BJLkT;ebm$QRUL%SCoTOmtdLhdQ?25++7B5NwoT9+cT*8>fPMr9ARh9ub zO@Y;36?Uz!H_lt6Ih6pcDd=~Uul*SyaYcP7SWpGPh60=BVwOMiwKW2-M%4narC`-Y zA)A;o=_~?9t?B^SQBd-ppYsw>IvN32_j&;K6qxfHc%sC@8U#X3nil@`raMDHC7;V1 zE}Dj?7td-o2XK~xlQj}{X5$Dv!y~I`3BZAZar|J#u=S~zQIp0zZv()Qf}KTTChXM{ zr?j_kwg+&I0)2ioS*6RqS13Z~B}xFCC@AGC2IJN!;9-|IM+Lxn3glz>0`XFXsVIW@ zmX`Uh}VmEB$T;2r{_ZVmw8Nr6FxkgY#r z(*c1+MOpy7DA@T^!UF0)S|Bj&nl=D$3L;_!Y(aV~E~+ML4+G#sL2JIN^nlIuHz-2e z5hDOxreLE`!p>Q|#!Wg^I0}F-1p`|0g+_YA#-RxPpXvhequ}02DHC;Y#mgRk+#d_z z3I+WhNttWDh7pPoJa__ts}xLsFJX>D`{Mb?`*o85T%(}%34XnY`}tH9VM_n00IpNu z7NyGc23>uLfVKa005>QwjG?h+S&zi27zcd;Z>gIe-8Pp5IbtZgmcL2sih~N&xpLaOcNK%`2(xi<+dn zXAOWr3Nrb^JJW=^D+owb*8{ju!3m+1JuX&Thk*OVjR1lum@W{pUnU3lATV>}768E% z$W0_H|GuL#0(ajS0(d~dwiY7R-Q}P@0y6g<0759R8Z2V!_jGW*-C^!701qj6bWO;1 zZElHY&#w*K1K<$_DXUaj`*fcks7cMj_5lc`pp2K#L!S@F%N}l8m;iW8!JZF7mUHtG z9&2Qp9R?6aL7!3;cB#{reW*#sV@v^rQ*d^ym{}ehG#^z8)LPFghMDI^D+L9$ePyrn zL_uCYpiP25tMug7(K_*VHw{XavV=?qXjCG#D+A_Y|nCdMvkfQ?oPf@YkM zRf=ZeJAMKR7dFVoD+L+T(`1US>1n7^Aaq~+ZU~E#8$Q6d;m2m`^h>0Q4|>d z6tQQ+M#1!_Vs_)mWSm;vS$Gh@a|*V1>&OB+`Qi6t)3U<=5-4cuEMkurxwk`om=S0S zAd!NcJSCe89Jv#Lj8B#TUQ!T}Dq&+je!wd+)SI0IkVL^u zLm_hw3_Fe@c%M8CAen;W`XXkS+%_A5%~>`8UQv*5A!G~uR#qVJPG%1vg@TuS_37qe z(|RH>sG)SNbUX(jje?>60;YFX15ccNx_1FUIt5nqgzQMf<%Ot8 zGY7Z=cuj$U5kKHD5LGti*?L@s8vpeYfHxHEKgI`odrsh&K z0GSlD;RlU6s;=}xeW=~x3*apUB?kp;wQR>v1U!?k0LY>sx|f*w3{u2}fFt{_1IVUe zPG7#X&1M{));iVYHh^~&*z>=%d|WghB$eOr2arR-zBm!n%m0jD#;Yv?0lcSRK&^ny zu{^yOb$WH%U;w!kj2O%h({}EVgMit?5C9)2xcyAbhK5Sg5tt+o1@Msqr^_n*?3#=n z7zBg?$fKYMU&>?^n$sJB&OIUl(1H;bl#8xpoD^3Ka|VCT%Kn(>R zoh59c&gyrl58I5t0;r|nfwq9@4ii)%V6w6Xz;_Bh84K8@n@95y@G$rR;0FcI_&3g@ zM<%X9>6QEhP)EVXBoWI>m@GyS{9>Av{FRISq`={VGOLhlw?ts@+GYUiDNyE@kSiUw z*pI-yH!T4CqF~K0zV>PB-^x~-B3c75?M!B#3$=ypt@6OrD4+bi?o%1eGPFr%Qdn4hb=^pZaUt@{4}U`~P4|Blq`q>l&Ox)*-}u%JM4 zNy-Y%THtkL{;z%ku%uw;Q+`?3j%zsav7ez({?|W&6$Ll?Nts*RGCY1R4`>eHI0X}j z@dM&t{KB&(hxW7raDoDTzF4S9uV?sIDqPbRz)1>h_`am6ZC;E(KWkoYdjO{>C^;cy z!-jd|+O51y3BYLzstoz;;jBkPP=sIZ0sz(&tdsJq%EukTU&7(;VgNQ2BwrG;yI}$N zb$8846@V=T8_x0^z&Z&JVceUl1F)lD*dZay*U}!3`Y?1?X8`sT6pO^ncAO?2VC*gH z3g8R{^ZBfmm&f7DD1x#^4*+K=Xp+OXH0yW7kGKD}UH}{@FzL)Ux~^Dw4n>&RuMYr6 z3V!jev`4S(_Cugsh$et@6vR|XS;1=)V+1T*1^{rPz^Su{)%h!UAmFlZ5PTeC#Mi8^n~jsVm^L#2 zcv4VzLcok4=-o$6iZ+=Az>9(_ej=7L5X&&z*Syd?;A6 zl^^K#c-003u8dg#;4%e+#)(;aJEIf?I*eKjz?TB2EFsIhXxaw>7v*ID{3v+CZ<%{J zXFUFuB9ANwaD{>-A3ojq;#wMt(7AFYfU6XgwimIq<*K;|G&f%Z;2H%Z$4J=WBkqe4 zNbbEJz;z04SP59S15L*w5azcLzzqtzR0-LTzUny3sBXFiz)cEzyb&?)VlDh`eRRMO zz%2@Lhl^R!s8455lREF+0pKwGbbzbeIL009(C-N=tMTDrplH7Tq15P*9WTvHUX z|hios-Czt3RZE%g{lXn!?%1TXA98o@b<*w%ckFaG#Vv^tGk&u$j0+Yi^xn_d+m4+M28%;_&3ViYwxHb*Y_V8g7QhdW54Mi z^2u}KMe;1y=yNC~3^4m`|CCR*AF)F2zI>+}!e7k)1LmzRto4xJE-E>Np177bPe6ww z=mWGbRh4~stvDTl-7`)Dh@{{}KM|`Pd*LerSFLOTJfXnaN5tY*WXB+Ie9;*IQ53YS z<~Q~^w7iahbg3hNXbMdEZpN&AWq2sLKEVk<38FpP0BWon~nc)mJj^^Jg0!I6SMMPUuK{PJ@l>tNT48Qg^-B{PQnXht?O?9 zNTlH6RuSv9H_#hJNE>hmzzYhx@pUw&4*K|8J8)9~fR_~HhVnaqmh60wA{3+q0!X4@ z*A@vgZYB;#Al5e+Kr#jCO{L62@dy6HsjPem;1vbhx@v6O00mt4bn5pQKnexn`uqm? zRblv9ni3rjAeDk(zTx=&+qQUsk!KpF+fyuNZ|=)f|9UM!+!`UXHY z1?_wC9s56S;-zleT4VuuM?n|9vN>XJ`ZUy}V3&6QawvFtN5Y;RF2n1NKda{gcu&EE zxgyr1$0fWnLo4|sfLsb@ItbX&gOxb((f23-@PUFTzTKprC09fIJGeiN(w$MHAOo3ZuUO$fux3UlkTT_80yaU1U@Npn!r0?Nyoivn(gn zq`e)#0Vt%P&pIhvGjq`r1ZoD>0Qf|K{cQp3-DT?s1gwsJ2k@B!y(ucpt;2-P2t>~P z3807qS)>YkzJJg`1nyS<0#Hmrub#Y&8~z^GuHX47RQ)yfETN!qTt}8wvjo3eMG7qe zlv3c%7h9j)E!u~g)VHEFfG-rB(Gs)Ey@tyW*c09kKp6$Yeu>!=w{S}Y0-AOJP)GQRHk zO*yU{lr&KT@QngPA;0Y`Hxd`d>cZ3kR8e3sjf1_}_|e$4zYBnB3flWh*m#X+_`T%v zts8(E3TEaS|0%4DcF69A0+0ss|JBRR+<2Q zP@u6!z}(-=eulvM76Sm(QDDcfMtIP(c$&>ZGHJ~2llZ78u{*ChX)=bfoS8Y9>kMham z`M>EO^2wg6O7b?xid&>n6! zWB==(@{emT>_xAJjU)R($Bxlg!;xwsTeW1k1c4q-S^&%_SZ^m`wsz5YwcWHK+5pTc zSiDZeT6Z6|6-BU&9SXpLg2V}YK61)VoX5LN(*a;fLHu(88#>Edh$6UUj|5;v!MrB| zrc-km&yEyb90TAu1sO;9ttqu`D^P^l4srk|C`c+0vTxVMnLao) zc=mi|t4RP(QSio4!hTks*F+KSc}@m!ngVCO(8lQ2TRaK7$ZHw^YYN_}iCNpb(~D4q zGQF7qY$#Z8nGYRLv}uKaPm?(SY$?!QD`h2No4z2>wqPy*I|`cc!=Aofm4zVi#wzhuU00Ou%h;^*xg9qE7v*uVO(1K>n~IiLJ< zPPldl{j8p88vvZAAnBZdZT|8A&r)d}-3;IY1sWn=6S5kogCelYh5(!?cywFJhM3Rn zhCmO|4gf9`tl}fVb4{K`Bak|L7XViZ()oEiuOwfVE`T!5DhLE0GzZ{GLGdghbNp3{XGfY%vjX5nfz4$pGpLM8K@nDuJPE*?fE)a721{Xv6M!oe)bNEB3i%HYp(cGj;0)j@1&8>h%d_u_h9M9e z>k8l+1)fW!taHX3F#-zx+yPvtU}aPz$RI_-$oIVLx?g%uEzXISk1!m19tm}yR8VDrWUI%c80;6{l z)+Txmo+$Y|{uY3{6tqo~u)3^^_fQ0r{dWNPQ!vO$!k#SY)fR!MR{;P5CDK~%kfJzA=O%Ok>9;Q)dunEzPHls`|wU!V;OqX9giAl#g<0I(=LiJCMmJQhF* z1xM!!S(w6D{IhEAi3jkI0zJOqYu^qX{Mp@?{~W+03I=cF3zL`ooJLKmz3~D-CzpQM=d_08PRG9)GjDqEH0=C^}4SrRg@=6B~PQfhxm%h6# zXFsYGbnkyp;b?Kjcx4V6IYY~^Ohb0Flh-?x@Rw~2Y;cWL3i1~TkI!VDpB>yF8?O`;t;muEv}m&kRSKqx zL;j8O_Bu|}kRRw}RER1C-z2~3A1VbogT(Ta(VERrvag`}+y1FiP||d@T<{=Y1K}2G z{{iz>PwDODef-mX~^mai1H6z2L z06d|feVCB-y>0yvfsX5A0Yp)t+D5=uEFZrMfm=m!0HP^q&-Y;j)_hh+;Q5H>0AeVZ zeMrP&FNf755So|>AeMqA$wHR5u;XV061FA*cuK*YbbdWvln8&E?bT8M#8D9Pjh|@p z)(qF1E2pLdh^L@lSHwJ)$#$S7`RBd?@QeZhzw)xyBN$IrSFg_k@SK8?e*D;q(A)Tg zSdAe$01_xj9W7)IqaVITO)7hz3m}n#h~+}oWUU>Z{Hvdn2jB$-(-y0+RSJ5#D8j?C z0st>5IH4(KW}Wv=MqtU~&j6Ar*g0RsET><}LBM@V34mk@YDP-gltJO`5O7ZX0^k(| z)}j2l^+9Y_&5szlgerUX%zSl=J$MF zT=NNm1e5Oo(kV#ci?#x?1Ms6Uc=k^KuPNx&RLqKvUCyEicNCj6`|CTEL4nf(F`Kl1 z_*MkE87TmGL&2i$0_J}?!xRBETI<&yKsE&$l@it`(dq&MEnJiUyrZDQ5x%Q*{R$i*ySV^B z4h26Ssj$>8xm{5N-Mbp)`FUfFcS;=kXJM(wE|$F3Cd&11P2-fgke!<(n}+u*bt^ z2!Ij_76&LX!SMi`;^s^p4xp5R{U!qTI8T6w^eUAj0DPgK#}y%aCe7@QI{mO_G=MS+ znh%z+ZkpcsKW_O|8Gv#Mp8w$U^WOvZpa{mR#sR3H-~zwxZ|c%+yAik`o(Q0lg2Vi} zn~pv2;_tM6v&jIyQV^;uWTUqe?t+HljZ@arJyj7UtzVVX&C}* zw=4kgodW+P0rUK^avlPQZ!8Azg93$kA$zFv2tOK!zbpe#M}alJGuFMj`F0ec)65kB zeo}CDiiCwv4gZS3%+ad>)KlQ*C1w-jEYuK4`LPzjFA7|)h*a zd)*T-)%s~^D4*Q?wP&lpzSA5ul24}X8zOVJ9QqNZg+3j6H@L>~$@+F%WS+iFjSw`R zr}1aVGo2ZZXJwBQK9!+-Qa!Fu18g*(G#P3wJMcC5I!X##?9^iDDIzfs=aL$&?o+eYvHfbz)~b-(E!^2y;JI>}34WSu}Mq1n&h_D}hw(Lh7Fg?`3b zguB-N2h3aj?Xa&rN~an>KoR*`(BWhB0qPgT&rR%Rn2(+~Cv9y2W)yr9@wvTL+t(sc z`(Y>ma|-Tn=63=nI8Q?0>xvNoEGXz_DP%Lx-^2rq%A!#KEGdvrP+v z4pm{+9wX$a4`SWP08UZRf`3K2YaGK%J>ySJ1#p@Im(LQ`yHE9C6d`H*3;@;?oaH-| zwN39DA#h)5HUJw6)*FggX8-s2^Y3M@2f&tsd43XRFvb}#Zf)IFj(-?p&1yM0d>|UY59R#jt?*ZUO!POX5cH!65 z3ItpR?gwy@g6`HSjQJJp7VZytMn&cngQ^nV3L!7P5(9M8EVqdvhRM^@tbe4>;wRB z3Wi2XSZ>)bTo~*8_!Iyi3S0~YEJtbJd(@=sD{TN=ra-PEV0&X$6(G=|y*&V53eJ^_ z*o<#y0};3ocou*k1zSdmSxQzY{_N%*JqO?l1+CI}AC{-!^5FsD1prqmP~;P7|Btad z56f};9tKXxte&yVNo1Z$>3NX0SxA|OOqr)-4ha=e%21kAh*GIUQJI>QXpmH>B%%Q+ zDus7{&$@nj*IB2|@&D&qd*^=cd#|-8<7&-3)TCplT>8wWuh^Iq{5H9ssUU zVCAR8KHu(_fFcYnxBwu4f_D6D;9n>IHXOFl_5lz`!BW0SH0#1s{JI}fd> zR+v$S3jy=uuK>7Cfko4f%;4UL6Q~bUCi(*irr;u9cofxfy)6d60|10jVB1B7h3hZ! zMZh%mI)G3LZoieVC*#%dT=yz@D1aLj1f7wv?$4$>qX=hih5-nppzfD4TNI(a2!U3+ z!vWl+K;KWu_OF}Y34tYgcL3a?KsrLeh8w?8Kw!wDC;;IUC?`wV~f1g;xD1aO;zuNfkiGTsBP#_qH-4!|7>ym`HGqwZz=eaLx|03ebAB|gv{ zopl9gtiCmg0HP@PenH538nniv$}wS207O$Tvsl7TtFL^3I<2uV6~J8z(jV|+@5T(q zt4qcxJ_B%%0`CX`%hYI#XQK1>JqK`~g57=+cJHV~7Ro30UJGjr^OFtclg~R0mu2mc;oPY`K0wJ*}f*za!@`wc|k-yY%rf}t8r2$ z7}FsKC51Oy->H`k=aXqI^JHHaIN&$oz_S0G4JjWluv3*`$HSaCy#aL zDj#qsT!KfKyFl{4d9}Lu=pkK|h(T@PcQjoArh2;;? z)I^}v<}rXc3c3#xv7|{|@hZrj!lwY@DcI{FWQq%gKT(7k;i&);C|Ge=$X@7*@Q00g zKLhZHf>(TVV(d4o4Jg9yHJJbsDQMYCg>~z-1y?2WTV(@CqTv2$RaTRFxei6hb$bcm zF$H3N!cTvPrw7f+OI~y#Iz8=Qwr4h zJ#KS8sKz7U*`x?S3I+PSK&PZI`~U_{9|5FNuwfEUKu5%^Ltt^=QUGZbtmlK(fM+eo zAfTN72|zjp78k|L`i))-1ib9Z0X(Cib%vCsmt4S)Mmx_+02vev*)3!yT~8LG2x()g z06eE4iZAW4+}!Ue0@5Ef05U0fwMB*99-xE^)@jLg0A5gFB>m~Cm+_BR6h zPdWoApx|VofOQW1+XXugQQZK%rJ!FEA^Y8OMmH3}P`d|!LJH3D7nxVH$s-Y{YNr9< z9Re>5?p#)nb{k_dkTWb^8?-PGn{q%f9wmOh=P~_Vpi_Be=us2e)0eSA1G** zCt}C<$?$8&^YmZC{<=(l7&a;=fXw+D52ooLJ`{^ zJM9AMgRM*pKq&Dqt6MN^vFaxW{+^Unub58^3qHQ~8b}Jk-|*P)@-lo-|ZCZSR4=(h-vY ze5D}lGrvD--%d{ix+hNoP(gw634RZOx%yB9l8;RXP)R|DTq#@KddETpf_u*d@Qs2v ze(YV{G&!zwDJ(Mt@STDW<5gH~R5y1N!C|g3fGP@n`Kh=4Iz{|KAnesV0M!&^@y+W? z_EnT1urg&KfEo(Q_$?|01GVsUW7)7J0De%=pI_m#vWG?picmJ*1VAkXh3C)+@0De-SH(Z6y{U*bYMtRg)0KX{k=lh5A+`r?Ial4rt z0Q{yP^q~q%$d@ajJ_Mw10$`~|<|iNVqkc0poPMKxa>cF*$}m5v*3kUqanUH*8)AEf78KH~rrzZ}0QX1LexomW@F9WQG49+DJb6aHz68 zYnAR#loDRO_Qy7sPfjYBFE>otbrN9~@EGW-*>U(|DFf3GuB-_ zT(?HyZZz8FI`+wudO>%_T8yaFRU9L2g-A}_(uN3cSIBua+1{3?64B1sVLm4H*Ea$`(Y@8Q&%$pM=8i$BxcL5g*HXNA<`UxH3gNmLgqfK9OuA=cDn%B zP!M^D-#BvNZ^yB&e7gsLEd`7Ds+K*ojOD0FQ85+(j!|&6NWw;x-o=H{F~bi6I8MPJ zJ|DT0N_BusCRtU)~y+?MZ~pr0C0+e&HPH_B_(}^ zq9%m|I|6W|K!YC_BAc#>R{>{DIs?Fof^mG$=lI+n<4}Z*_U8edrXXk#->uRiI|~8F zA~yhMD6rrMT*eE}yC4uh(G$Q~3Jm>K*rSI!f6I&lya1e|pvF&PCnivXM{ z2&)n^!y}eas7XWeF9UF)-~q4A%{e>cECMQ#R{@--K)hYTmfGs#;>E_oYXDp+*!+PX z{hoSn6N+%yCJ2BV1&jIlBAcEX;{mpvO$Y#Y3L^Mv^a&p7=TL-^Q^NpwQ1ESyg!yJK z!F!dJF&`3Zi;TnAmRsp1|DZ6$juV1si#JWazboO!Q}6yY>-) zOBA@)@%y3F7YxU`_~ITL^%1)ccSqxqxu6rc!-k=X$JDVWt#$}T&) z%tqkS5ZpI&*+x| z2%%teBrmE43ye{dzFhtUAe4eLu|n3ic`UAmk1!|)aDxJa&U_E_@4p@J`T9i#fG`T4 z^Iam@>Fw~);ZWgs05>T(%#&uLC$BA0AI6@n0dR|g4g8YXS(9||g#M})bpXOCC`gd7 z^D_By6v687F8~n~yze4llkT-?iGX+arqaJMlG_w`^%Afv{oZRK&}u_70Cy-T-Y;T( zjeh7O&?Tz{fJh2Dr3jdw`c6D_u%FcmKokX=bye6?pZsnp!o0jT0HP`Q)Ktpa^-%7F zz~Xi70ofW7+#x?!1>n#0QV?x=7(w|>|WjH+iju459kB5v{IP~Hl@lCn3CHbz(Wec?g-g{9HWy6yg954Aclg8d@5qU zo8$oo#v%Z*6u1oF2Pc&oI3S>&AOR3ZL2$KzS*N)!LLh&wDu8$jT<(aOOK@f&0vjSa z0Z5?0ollVty4@RpYh6{l0(eA0u8ok%VxsUen2+V%0VGl&dde?BNj$HDn&e}k4j_qw z&2|#@azo)G1da{w1>i9S9eLLM<>D{=Zh4lY2_Tt*VfXnxMdCrY4^jW{| z>pfvKYEtHsfdHOTFkVrGEoh>ugMi_}AplY+Slma-R1byXLO@N&;Q&%8a8VPo3!Y|= zQG{DwBLSpQ&}tMvVp)CrCj@*AM*~Qw!0fJs73YiaG_QlT4uEGAEaX>S7U=B4IdM{N z8GsB5VuniDuGP67s7Wgf#{qawf#NzL(>or8KRXs@^Z{g25M(G}+qDu*Q3S6clK{M+ z;Ojjp^S$!zJpxl}rvS*Jz>F`s4g2ng|EvlxrUS^PK+YEceu^!`i>qg^nF%0=f&hMG zT=lXvJVhGN!4SYp3T~P3Q*I|l3_yMGT4w~{6$P36aQRg0{rEqwo5DN*uPKO);`1*z z>OxV3_1Oym;dj8N5!mUeajvQXbf2mpnw9yN+BC>{Bk1#3j@{wcuRq|m4qGMbF)1HT59V7 z6jD&AAY{{Hva1oO`nVCmI|@1|NLd@Fu;&Pr%-#avJq62@C2XCa3I2~8)6@(=5e57B zeNneYSS6zfa}&)0e4wCB3jynQ5fBfD#Idti)_g?~`c=JezR{Kq&=|zXYs}QYu5hPU{GOG74Ngl-ahoLvU&} zD$yFiCkhme_RZD|jn zoPw{G{G!~6HMst6xylj1R|;ax1gt|Z&mt5dO#2Lg3JMNHs3R-8B?X0f zVm6^&s1E{lz0L#pMu8eX!D3`Ck2|FRoJxn190 zUlbV6kTNHO*Z3jBFbYz_JIKd9LJppx5pg=!Wvio*j2| zgPF!24ds)vYkIOlmye!8Y2hsGo%ODvd~(>v-LkMJX826zmWy{a4tb{Ie9cW3E8d!i z@=4PtyX#?t`J~bU51DCn-@_;=^ccOjUN)Rh?#ufkOW!fD1kvv2_x&5??JamcN*>;} zsXfXkXS@EPjpUQ|C%VW-eHPWBl(6RivyJ7G$_G}yww$VedQVJ z@^M;H8)pd}K13fNBLN>TWX{ARk}Fk*0a#HmF_9;4&HpxDD6zH%aF~LH9Yt*TuY>qY zxL@lSfFl$b@p0R%oPOT;N04g=;3x%Q_CnS{d1o60;`QtSSW}?6LBwqHLvfQnt~v$4 zhJq>U`B3s?tuBg?7w!bWmV$Hq?k)Qr-!>pHP2n7XV-)<5@S5S0M|gk{z0(E2aSF~v ziP`-9oj;%mKWbb7*io>FiI~^d;B*9f&$$5L1O=k*A{KLE1U?8LtI8X|Nea|c#B9(P z2RzXG5O)cHJq7D|4gE{x6FfE1`Ti9E4iud57qCS2Qas>pdeI-iDGEZZ#jIaQ+hWw| zOICpZ94V+9s>-IgTj09q+~L6hoG94OkNNsIJQokR*A#>TI8DKcnS4&^zU?s7B#*l{ z0i2;gnV%!-Hs?k*0^e3d060s5X9pq6c<`tSfppJ10M1dMaEE`V9&KHQfad6E0L~Pc zF)?#kHwQ1d-CTYTfC~kiW(!$zGu3`5f~np^0Ou(%bW~wGI`mXPKruEJfGY(9Yx&7z zWo@4z@N-E505=NOjFT|SxN<)PEPf{faHrtad?A|@8mo@L=%{1>9uz#aa03LiHPQiGprC4&ke%GBrH#Pz9~l6=C}?*@$bQaQZH|C+e>MPb z3O1b*Fe}Y=4-m-t^%8&&1!Dd`-FaRT{>3HT%>{6g0$n39J098-ud6gOcmv=P1;+_C0cs(cT?mx86dFc$uEJI=bVul@+&3I*Bf685aT zjR}gdt+)ihRSFi}60+7-Zygc%eee?iKMKA-<);oLU7diykWXI#_*39{mCt2d+i(Q| zW&H{O*C<$JCS+#4eDI5`H1!*R01C8*@?F-0CT~U&zS&m;2&7c zf+)z?E@a0pP02+OWWGNET&Eyunt(m}G-(Y2M}{=%{?~9gn1UD1683fEOH~A#dMW@2 zq2Sa!G4mBy-b0|@)fNCkDY(k`4vWF(cOy`%&X(M0oq(@=2{@Kh+#(yOs#S$x>-Z);|1aP_LZ0ay@H`_c3leFdeDd~m zg?iXvKKbZ^v+S|h?>I^d)0;N0mksBWmaB?o7vDTPjp$m(7XLcg{u5QZv}j3?13|XY=bEwU+KEnd!<~y_Ss>SPo6&eA24rq;n+*^+utNE z=mDD9ybW~t0eygOIjgYti{j=Ya9}_?01qjsF_AKp+JQKa>8GXyAclh2rvJOF>z*Zw zaPzeQKr98fR!UjMtt>oiHPt{2AdZ5P0111bGYh|4T+^ih;wgxGD`NXPCE}$FpC)$% zkU&AyYat8yI>QL{;nAWl03K0L!B;^JyyxVOKuK_S0EraLkVqLb(VUGyM7y2(^}X#B#9CH~`NnQ07;a7qyMXkN5o;Jph>$SWe>WUDs&OLQOIr%mBQg zAms|L(r>uB4}tqjCj-c$z zFG65P&O89Q6u9u>-t6^*f)U7Fw-`Vk1snJQu)}&h#KSPX<;wu%Q=oiI!fZ-+oI(*U zc`OI;hJstXxcB<@s#OS#9JC5R0R^Q~MC|S7Q+U9A)z}okTMCA)ld$7;t?&n>$=S64 z3Mtqr6|=*6-KU`@sY*5gct=4GC;ry3>XVPa@w`m{-c#_CkI=2!JZOPHsQp#|MHH0t z9N?26u?B$=9k&DcK*6lTB4)OC;6emeJM94Qk%H)G2^(^;_7DPl6?OwCrog^L#Ck>= z^+7=E+Fk%96eu4Mvr7LkyjE0q^L_xO6c{N=*dcNJH54Jx!V*9k1*3OMSQFuFyvk?m zGb;d}DA>x+zhA#SejthvrEwI%X9~XX+iYgU{M0~T?NJ*5Unnr(XKJmf^~*q@_59-i z$|>k#E@dxF&*2EWew+aCm4c-_c^mv=GoEg&y6ym=f`a%m5!>C>dM#>_Sm_LaN($Cm z@O>%vW%zY(Sa%Mx2OLEaK0BWW@STED6Q#^2SMvt~7USIkR8iom!>_bb z+&LP7k%v41R8t_mDPpZumfS)>=cqS;8VWw&;KlCUKk!st(_0q-{Gi|}UjR1q&68Is zg4Y;d0JRj1>aEHme>dNSz~0)c0O}~1#W(BrX>tP>_eOYL1MrgqwOA=jKE4AN>}%75 z0Q{oh$aB7q=%P2C2azue0q~mw#SlLHd0>}>`Ve#L1^`QSGC%3MRlq#@dhJ8`Wc#Gk znlL}9-q8Hy*b+UN^ZJEHQCfI;{n>i=k7*&#b|UO7WN#<;GDk4)%elrO&vcqPd&th} zUvokE zO|BIfqkMALp+B^dd{U>MhPj#7({P@3M-s*yY}4mKXq#*Mh@g5wcgDVI+FbT>wclq%dcV8g5aI0- zUmPHN_0;Au+8O&u7*bFEVP|a2-A*#kE{fJ@lj{YO(0cPvJ7YgZACVdCT-yVolA0S0 zBi=ftu;((>_#1=J&RE~tKj#-e7pRn>4k2H z-T&Dr<8A!>C`dkQ$^4b*)i6~(0y=hxz8W?S?#QM*z4H@+m=kvZSW&Q$PuL9K)n*9- zr4>;C4pVR|fFJ0msEo__rDyH|I6}euAU-ebYl6#VgEb!lI7)%iZV}VhIjoDC^nPzF z0BZ_%oA3)nuK4aj;9Tbf05%lZ@j;Q!$I2!Mn5;_#U`xTQ5B$XBg7bK-^qn5b0FF^m z8^`nbN^gAHK}`P?0LLll-e1HV6ZP==rE$;F0N7FRD@DTG(uU#DY}W1P08UWQE>Fm| z?i|||b$Vu87J!o!9OYX$w>YO^(1jn<{MT#6o`UT?MeOi6Q3{G+aq%?(2MS#HlBz0k z$`}Mr_R9xwih|dCtm)XM09S0zuX+o>k%BI#l-QNHv0qUHABFb-oG92+!WSj@t;fsr zOt*gkaGC>*GY$5_3gKGh}QZSpJ5WBEl^Zp0~&-w+xjeyizUiZZiNL6ug&qU>ntnx1uJMJW&MTNkPd+zK=UO7mvu_tY{730tLYl{GQMC z?|!2Q(y{FTcu}Ctr+JP1=i#~S*e@LbcvBGBM#LTodxoJ1mPZ5td?-kIC1zf!195h@ z{)-5}MG9KYRb_8~B<@5J^n;`TE>Ym-$nRR}{nix$wd_s+E>jT2|EJld+E@hi{kj71 zrQj03{QB(rrFgo1$1ybkS14E;D`rbwyW)coo*e55;3@?PSyI-;U>~l{9nbCsz>k8? zeC4La;~-pG=s%$k0DlTr@p56$F~1T}rzZ>h1Gq*(JWtm8Htm*;z>-@70R&J`n#wOM z{yfAB0hLKZ00dI-fbZkps3VXfusCZNfFKI4G!d|z#W_L*j+>7JaGe78ej>L0(;B>P z=y0hPfM5zDOQh`B`(Ah?aB{s4fDj6TqeV<}mOFk`TD{Q)5K6&DsfbMs&$)*BaQ)y| z05>Rj#3%IC@1)|NsC^qf0AUoQiUiE=sy@zv-|8~}Hz|0??@kC-OZP`j8ZvM)fLjz8 z_7Jkw7v=>ZaBRXf0O1t4rzkOPi`0$?9G`3eAcBH+{7Q<;k&`?SSQ<17z-`Npb8Hbq62M|R;7k&i)w|*Kg zQ6IE}7XgT-z`aJww)g$pG{&;-%K+S^U}LG2E!BIAzi}qa(`%sfU zj9vxcJ_Q>G-X6{7b!h*kGmLU52wvWYnJQ*g_3=B??1M& zO2IBiBYB~I=OBb5{tM=HI`YlRIx?5I7&U5x`Rl&N)b!=(?#B0uwfG0gyt$ z{X{V{jgH7eV19Qq0I3v=cj6n4RVwi=>*%>V0Hjf%S*XmuJ@&<5*5us)(kU2XDPze$;P*Ou#0ljaFe0?46YKEIps=(}rG2)vJW0PvE6>F4=njS(yL*EeL#U;|1Ui1u6V&v$44nyksCX#s@$F1s+aP_ENF( zI*JfC`7(gF6m)hFu(_UM{1Q0d_9}ov3f}RB$&m#!ZBPXLB!2+!D9C@z*Lw%1;yh;Z z(m(+3DTo}Q%wCH#@n6ZN{5pUl3M}~Y?J+v`cuJ_O(+vP0D3~pmupGlv7N`%#%C`V~ zq~O;jDeJsrHBO>6XWRx*Oo93%A?q(pKY=3TS49FSp2qN3Yw3VurFV1@t^hEfD`~2~(TO)AE@C|?(3O?~n z$s=j#OaxNK7XtV}f$b*&i}sNWMqp?AA^^1%D2@{{q3IyJ0zjwmBY-*zO!?K+U*)N| z3MDTt1@M!CV_gMIwYS3x)FiL9p8@=$;1fTTZbFzoUfNgtyd1!93WnbmF~fYtJ}827 z$4UT}J;}`T>`F0f>5|_D<&%}Y!biYNW6y^2$;yG_WaH1SRYGZDvPnd}Ybc*oNw$=^ zwv}5U7~*=namX{B7Cskbu9H8UMfs$~^E>sh!F}c3=X4!xRiw7P3BHGI8mtTqg;@5ekg@@vR{nuOC58V!NIII7)#RKMOTr;c~n( zXZPLY)9nae6d~Jp_IMK% zp?G2?fYTIgjy|0*wey_QNz$n!^ z0Ou%}{7AqOWS3VXFm&H90L~Q58pe;U*r<=QjA?_Lj{NJh<3d4m7iCtcGD`z>R{JuRAhBiF$Vw!K-yU0PYkF zC=#+f|B3?$yc(?pz=MLXsRFiKen@}-dnEwiNkP_FWfmSX1ee6mEE5B`K!MLbA!}c> zD+ooXOP2!hqQG8D!se!(Nkw4zgN^{aDcF_C@3OWm!Uy(vn0E!>L%}aTYc+Vz-?n9s zE>r_>k%DJ2{HQYJ>z=4dTYP&0xJ1FA3^D7S^r9;QIm*2OT&7@UGk!|ZyW@B!`fPO{ z0KOEAogiU**SH6u2+6Da1Gqwg#xn^s4!$BopyPvq0IpIn{X0LS`F_ze1d)5$c!a|kIO#sI=8n0i9Ou1x%l>s;qv&Ib@d!MrYf{fc@O{)t{0y$HZ<3Vx)E znc2M_xR|k8cPW576li4d`yg^A4MTrcqY@JUkrb4xDYGwA74RUjIAWZm)L@<&#@`ACU#< zJaMbY5P*ji6m;c@ z&!E*C5%4^E1V9W08VkhizTB-H0%b-v0AeXnyC`L=?knO~MRL$F0C5z&auc(}OL>P; zgu%Ke0K`+U_Zy#XoasLm0qIx=00|UW@a3zfM`n5>;P%K7z#|GaFBP*+dv7QrU}${? zKq3We_+gPlEx+I?(^baK0Fo#;b6dnFr}f08*v(hZ19(hu+^yp2s7V8a?f{Z0 zP;AzTEgu$-AB_dko&cUupcW=#$79q>P=t+!-TjUZ2Oy1tw~AsG^nMzCWv3|x07$1muaAh8H}8E7 zMOeK#2*5K6OrI&S5r*S%L1yctPyiVeJm){rmNvzBAzF&{O#sg+NY@cEsmTQVS1Ml@ z0U(otR(C|K)F(p^^&w+VB!CwbIJ!t!kGa{nByOdB7eE#TQ5PgkTdxK`8p4|U0J15# z8zNxaj=w2JO*$VQ10aV2jT>U-UG*jmf&N?K0lcI@mtPFJIdM5oqJMTs1n`Oi&pHl5 zYVrEMoLi3pyry6eF9axBWa0m~Na<4mxfD2RNSXgdbDZMdy_*UkkAmQtVz&9r%tffv zsyfdAmk@|WiT-cWFkPo$0V+lG@jW34Oz1r+REDPXo6!*Mmx)G-IZ zTM8~337K;CN<8_Yq4*j=AqDHIlvvNB3Rh7dSU?_tcN7SDS^tR2t3m_@+7$qJPk}+H znC(tocm)BkvO)kw6nJ(LvGY&2<7Jc23X1@Ipx}CmkQL;pZblK>dzAqANP&iugjxPR zfnSx*;hz8$Q&8?NWFEFX)}siLP2~VeC}{OXiRm~6SRoMps{%kN1)CQM*#rZ{_6V%B z{SKgv0^i5V%<@^49|8uSssVhWV3nVUjq%HgMqt2!S^%FZI51tru1(vIe{lml{{rxZ zg1NaowfdccUjms|n&|vBelDk=IWJ~huU?J|0pE@^1Mrms*KsN=bjmg5Uf%UDZQDgn(_Io&bJP@M3_3t(x+xF9P4*_5$#mf-oJv%13(y9`iMy-UooC z2AQ9n$8Rv4_^eM;luvG|70O|LQlp{y$#)*pW#3;e-GS0V>uutC*HAvWF2G9myHk@Q z1V^=!HV%2FlO5+HTlZtFE6OLwbyul}4d#;p4=&5HnuX!xl4g%nt(OhwljU!I%4W3u z>5KA7=Zud3MtOU8X2|7>_Z*8x`Q(_)KeUm2(ji7HA2a1Z7nBlCfAPmQmQSv|utfgg zM#UL~CuIEx%v+rq=^^(TWgUrj#u~L&*ZaTcf$WSe-kYeaQ4ybtwz=Ay^sEv)=sE z&R9P)8(H4wxGaQf9Qrnlc>n6!qnY%AJaYG*=IC7#s5S^Xc8I}U|bO$}TftsXud=!8q6x`s~6ejH5yBvX8irN5< zQsB#X(OsIb83W~AV*prFu(-K|HEVJ<7)3CZ$^qC=uy+yP^pMi?I|9nJ;{e!FkT+Ap z-u4Z|2UgXdn*iV#1ta*N=&@c4If_u-bRvM`6x`Xa#4JB|Sc|~w$jJcgC`jg)YIZD_ z-bY|!&uIWoP;i2Gx~5$=9z|82oB`k@1=U4jHl*a9KZ?+H-7En16zt@u;=7fr;bGVB zIdcFwP@wakm%z>5jYAQv%Zve>qM(Uf%x3g>ipTtBD)Rw2Qc(I(!d70tghwD9BNqa2 zqTo{$Kgu+FH(uXroVWzQX$ns8^VmKmKK+FHaD9XcfHM^2K9w@h5l+((@Tgn~;4B4i z_@tBf=}&kana8>{0M1dcw?c^p7ktJmnLFQI2f&#EJ-#5;Enp_jTgpN<0&t-~YqNy4 z-Z>N(^CDcf060%UBEP&YZ=Nfz`|s>-2EdhqR;Q&bYK+Ef^jE68We&iNf&){;Y_eS8 zE&^qJb^&mwU~Wqx6D!}x1G{d=_WnAc6W0DTL16vW z0{|{i(1940 zIt3dyi&)0o;CKXD$pQfcQ?Qw@_dc3)!3}|X=dS|@p+N1Ih;{WWRYJh+X9$2$3ZnRZ ztF0a#?SVii!!Q6hC>XXz%tnMBz>jye<1GMT6qN8C77^CY15kwAuD1c)q+qL)kfnQu z;17y8I}*Sx3L?X$%Se=~ zf)AaW$rnG^po?hPwTJ&kd3)O*njn`+z2BiqL5sjYw2?}|_8BVj8&~e&mCQ4P{@BJU z1ve$8^7&bnQK(X&ef>XR-s-`FF3YF7o?VF^(K+Su(BTL40qUry!hRd5;aRHXQxX9@ zq`-8d3X6TWunUS{UHTY635a{#F4xzzb_;i0TacK0G?7{;VNP8Q`~VL6Jt{X zAcca>LJ8Xx`@I@P*kk+&Kq>|6UyGP$QfVpzp+CL=NTXomD-~u_P@95)P+kEbodU&F zG5ckY z+fP4pTT1}h6vVuivMj}7ebk4K8f^gNP;h`Bi#xpa06ZdDQr8Z^OA6ZX$?(|^<8kF+ zb(9i-R}|ddDP^a3)%v0)IXMdfyrw|ymY6-9erON^nN?x{xfFPn2-tS*K^+l@JE{U8 zkAmP_$fiz)(%T{Qu`qoA%r%(8#C z!qZy2&H4g(Pl1?kjWJ4hIgKJL(;Wbyh=R##{G?ua%jpQ1xeNmEfr3GNVMWx8a}0rF zbwdDrq~L$sP#5dQ6eDo)`EUTm6xfXru@k#{;Ckbhexm`DP|#P#D`^LoF3PJtI+M&E2lG5$Tgb(jaBih}tEgiP~s7d$wbF@GU|Y6?d1tb0qxb9YduzbP&O zP(wl5I)0&jSEow|_?0XJ@PmRMeCRO5)!YyPLE;JkwG;$A=Bt1suHo@g?bFo&>L{@0 zN54n!@xY(m+Yi?Q_(?%f8!=0o?|{b|`#Wp^@QZ>te#PP9wK?xlAIv>B0r*XU7eAn7 zQ>!&w5K!H{6@XyOe$0p(RE6qypdWf3<&!4Xqv~OU`D9lYFWDxOw-G2QZ23T| zUN)Rh-g(nRZsXQ|I-<%gwf~Ls_CAUqC;xO<{RPS=m0SIxjpUPkPV37rcCGe7DPidU zXB*2Whdw(gA1wC@L0GT#pTG@b-s+`CV&qYm}O@Y}8F}u_DCtgxj(0n=o8w!Lx+dJD&GaN-Y5@Gbi6kQz;Oyb9TKn>;U82G@RZF3U`N6GPAbfz z{gWyLbaLhcI6=WG{`oH(^kOOkt^5}OI7vZ-T*wwyw>g49km51`_7u!6;G0DEPs>E$ ziR*Fz4itRj$Aao!KaC%afvT$joT6YMzlC$kiEun?6(3^?z>$K9Y63Q8t}(7kwozRN zz=?uLCS`)RC8nqk7RxpOI8DKUd|oK+R(%115AmA-oT1=6KdyLnXg6HObe_Hyz*!2) zGx!Qxo8MU|!r~8R0M1d+K3~9`)o0-v(K!1Z0GuiCy&`2*p-wo?^^O5m;qv55S9pN4-_pY7ImD1KRWW6aa4udh<z;BIRH+hOaD-`} zJqSPm1-)&hY^zb`0R&dth5!hpAX%i$I&=%cKcLqW!T|g5oJDhw;m}fcq3Y9Vca{I-YEW^2xK~6KBHwWP|ynxwfH9qvNiJC@n1BkW}v) z$|r*otYy8O41Ob+d;D?ZkY_sWS6!8=|_U0eyfz4HvOCBPZiI zrK8o)0X(F@a0x%KM`9d=BD6i91t5k3Gybb7zOIV%$)O`(0*Iv`u(yy+eZ3Z!Z4TwV z1`tOpVq|yx20pV- zVb)(S)N~5c`GN6(y{sU$uKD052(+W-4Yw zclI_$P14xk1;8r`+Jy2Wfwl$zMBwnW?f_m>AbBrg?!!J9AW)dt6F@Enp_>J)Pf?x` z0z((}29QTVFaBO~I5TKG0!zR40gz8Y?LZ0pRcKy`fY+)10NzlrYY{&SwIULa3>C%> z0#HD~(80>=ym`TW6d@yj2!OW~SR4_t*x$K<2wYe?96%uj>QcTCE#p)G0@EIi1n`am zcfK5D%7r4FT2*?C2JoH&>uw_E-?IH76k#D71E7e4(GoG!v0sEow|R9k03RqA+Dpt1 zeyhQg9|_Up0DPptu$6$>546EqM$aV^02EV@GJ;odPWQ#{rDJU-0w|&25ficGLrd|A zu}fM`0Z>YT&p{DeT5Vf|{z^RqrvWIVpt6{sWIb&9c?5hk3;=wh;LAOJ5A=~kI6`;D z*#JIM5X4Vf>OOcXUWf1HKL@}U3Up)mv~N>;ym)H&g5h7 zLZ?u30Cg02^%An8`!W{lmuS;0U^FVxjO1!EC zfZr5MP!h2h<96Wc_|01f09f`W^ON`aTf^3Ry#~rBBPx~}!TebstwhlL_wvRe&vZluS7jv!)MlW3Qbl)VJ!~+a3?Jqv8@%01 z86|}acdV+H4d;{Eip}MTCGuT}ZVXucZTmDdaIy*ncB)@x}W#BMascpE<(-;vK-6>Ev!RxR`P zLB|f!SA+i^35#AU|O04@}K<=egLMvs4vnq)dV8o+r9uC7#OC37;~Adr%A4}dEL`I|(nncZys z1B%)85P%y6Kg{^$*S(5yX5=^}4uCraE_}&=y@T@$)TEOS699NnkjeialzpRc-ZH6A z5&%yMcJm!*6UxPSaGF?`4B!F`epxf06r8rDGJ$?Rvqwbru&>M02e7R87*MqgI{~2CN27q1K<(`7JLqA z+U8dHfBM1U*8nb4FtA#{yz83aDWQH^`2c(=SgFTv)@?Ih4K-;-UIBnB6x4W#*;AwS zf2%JZeFxww1>L$Ru}-t9B`Cu49UlSsQ6QfoWJ9}dc!t3Arey&9DVUTbWNl231|tw~ z`ZIuQ6d3V6(48-~jzGXVx*R|N1v>l&%Yt|FaJ~JCyb?el1&^l+SYcT;E?!)0T?HVB zf>2_~s%ilQQ?R$cfc4*W7pJr{R{jDILP4y9 zlm)jwjO*<;Vw)`ZYv>$G!M0}nh`3E!_zP60(G0*13exy$?A=|@3s4{I%3A;kqafg? zh_w${TZll(vQ_|YQZS-OnRWg802k;*>)HaiML`!nFPt>b4X@NYbGie7a0+}|i&^;h zGW@jqtPlW*puogf%68R##d*9U7Q=DS$f^yz=E&CwX;rLLlvp zDu74|l5R@b`-#2qB2K-fodHBqu$NC*r43}tD8ilit^lGbFuTB4_KP>**UVIjI)J+r zj6W@A#@Ds*+)b}q4FLBj(C#Z`+q~XKqbAL^(gbjy0%4knbzgs14^;|w77SSO*W=AW z19!$=-9AmWC!~2gO8Aee52|+!RSIq!9hLR^n%fq^>8A!a4tb{2BjvJ8+hoo~R4Mp< zYe+q8uu`zi@``NX4&6B@-9PYZXuWK>Qn0AHxx96XMlhmVyAJ<1%G=xZ0+V|W$exQT z1?k=X&_*f+ca~|%O{&z4P_loy`ybm_rNDLb5qad3{{0bNt@a-Kt6npZcCqzcnI^$MH|3F3f6k?+tYuI!24lBWx4=jDA=JVVxj&K&ZtT2 zT8sq{OF;%7dtNmPz*7-ZZjT2LN5RtZLU#E11iaHj`=~yEcnV(fO%HmhCoNHvuKk_} zAc2DOeCyz>5l81Ca4d2PfJYQ8@D;N|5nGfHsPLW+Adv!>-y&wWc;6lb#J>yxBvG(v zoP<5rDYi%8hU;tqk10?XBVh-s`r}7q%RwUm$rM=F@;4l;8ybo>Gv>_vyvA$im;LqQy%9q);F{DP&r9gHNLf_IH;7NTr~ivI?t{j5~%v z-|Z^^q){-oLcq3;%EU7ZI!dbnq*L&aAMHEwoxv>>!Lf1;fM*nl*YitIrY1c=KtFap zfD8(9GWmbp+|E%5bez8lz;g=T9}qLAomGbru&CGqAd`YF=0Y~dpx6rm@pUr*FDTe0 z5V8>geMciuF?9!kEDCHQge=wbGfr^}-|YgBO+oq!3EREY2rqJfp0gJ~4h3KM)i=IcQKuPAuhnP1s+z8nvdWRI)>yr!V}M83{=XWMf0 zSDJV2D1clFj(7-J#bL9(2O)4#V2%wUJ+a3a@ zw&`UB0@icl0DPmMRk)b7?)pO&fyCDd0KQX@&W~mqDsHk7fzC&g08~-%v`m$a3S63w zK(*=<0M!(zI`SLZ&YI(zX^mG3fEo${_??K-B{_JO;%QVmfFBer*B3F1k)DrGlLA#= z0H~#4egwa$;A<#;k*)lc4WN#K$$V;NqGs!JC_?&)R{(xe;HxiY=59$d5qP{P55O-9 zHu9QjhY!X0?cJtT0f65WB!5!7IZkJ7?6%>(LPL;2+PPByaAXPsvtnBx-IIOLg*wdobvgf*K_p?tE* zitF{T!F=-Z>&r3=-?_#pDQwpxq+T|hPae3fAomPh)CSQRn?nDM^7clZ)02D8%Q%Db z$)lV9&_?pf1~$j+jX%q9@Km?KS`_3JOh?S;sz2Rv<8LP9%WC6jU1WHM(i5S0NDe zJsQ9f3chy~v%48hjv|n=@IHW}6x8rHaJO|GS0d0o{viNs3i{j-velk1h9D3!Iu3vh z1tWg*<=dTvIS8DMPXJ&`!Gmc6HYbmX5jazo1mGA2Vb?{hXy&9f2qdq40^m3WN-6@T za$_y7x9xqD0>F-f4(%i?^`T!Xig5KzI)D=tSn@ly`^?gvfPiD$=KxMpuzt3ft!t4y zAAxHvvH;jqu$<3NzW=z^2Z6PkF9A4E(BhkjEr{HR%a}KBz6NlL0s%jXZg05=*Cv>1 zJ^)7wviOe7=`jyV_LIVD%6)&RUH_`uI{+A*$MIEt|EWLp5< z6eQ?M*wd}!$`FW{-vNLR1+(~;jN}tb@aWdIj{v|$3VyU!WgePs{~u%b9hY#x^F2bn~=R{_Ldb|8fc)DB%#t&lG37#ic})X3N1;IP^sj1zR&gg=68Ls zr=G|E@7Hxc`rPMpuIsFAD8iHnVgOzg=xi6W^)vV1MPSlo831nzE;);sS!jE_;3cY0 zI{-cu9B;;NrERIb6-Cf=>;T{j1s@jhUtFWfcF8~1)r1QOoPLVqJH|-_v3m}k!TkUzF zxUnkk`Cebs01!lh_689BLlERXVP;P^sZka5b<0T52X zZVf3r>ir9E65VL02OxriJ9mXFr@*EsYEp-p69L?$pkuj&bz3-~5`i+4DF7lVaM>(o zqt=z;0;O5==>VcAh{-j-48V1BaRe6o6%p*%KU15YzXUL0NL>dPnZF13+2%^7hF z<&y`Vk7*e4OeZ?cUv5&P_=57u+%{wDV7>X|k6C{5*Js?CqolCKc2QA-$|pzc{zDtcCt2?vinxQ9v{6d<=KtA-^2v2WwkU2V z%BLc{Z_l5=^ahAG0Cy=UZZBa~jdJnN>`;@b0Pazs^gzVMr(|zLO*+18I)M8W7!2iO&q1qo z5ZJrN06+o-0Wi+&?8y4h0gy;R`(q*&Gv+2<@9J}5E`THo*4^csfYjd}LQPUp zSpeVx1?DqlY{@wbyjUXMaS?!r6lA%ov0mG||4-#$;8Fm|6h!k5wUzUMd8kRzH_y_^*VXFY7P_UC&GYVe6kg)5X{V(%;c@6;OWL2jgA6%NkL&AKhRCF55L|s{H+1JqG0$SAzPrc?;UDVqsAuyyrw{f zN!h5|)3+mF5oZtJ4FyR?Ql=a4Wrx7FRVM*tQ{c8k%!Cek{Se66=>*^{1q<}l*p}68 z3=kON>H^>$1xEaAvyy!~TOqLbh#P?S6l~6tvf-7Bf)F^{{5*gh3M!}a#n#p-xDasP z>jHpW3TE@;bgVje#{WzGhh74ZM?u?*{Op=zwOvt@`o(zx$fsbhkt+MSY~}(43^rc@ zP(Z=v4gwakd^YY|<6igy_&~wgTvZm)%5XM{U~Uo!ppb$E9VBdM#JQ0O7%U71@R5Sn zGsW!GqcOh`u;?EOpooHvu@W|a-DaEv+{p|B@QDIdzOiq0=0?14b<~Im0L2vCDitzw z(_y$tRUab(lu#fuS7({aZ%NTJJeV2-;4=jW_}<$t?I0#HVQ^I<8wC7p8tfhWzA z0eqvNc#eR5cX@_OK3*GA0DPz54*y?T*xC0sig2tZ4Zsfy4xg5?hc(^t|I&4nCjiPR z(0!`H(gQkHpa^4IJOfZc!6#=SQ_5Zb0RgpuOaPS>tmn6EnXFILMWATwO8`G97`aN! zhRhxpjDTDJHvpFFe}m_yIsI1&_YUn1-+j|9}MYA^^WB7~MsUMMwrGpl9&( zE(T!Qm&{Kp>_sf(x$<>1Kk1eAXd}!|_N{MzvhShUa^tN@*HBt$^E0K+)t672`r63T z9WsU>c(8q1!;oh>i#7b^?^4^$NBQIjt;cn+-h6U#rk8x(i64DYQh0W8dY!C4pY$2j zRIy7?Ylo=H;V1t@d3(oXFoj)htOv>`Cm;Dk8^|Y>4aX@KRP9=UQbLjGA6suq$ahZm z5+7HH9Rl1DPX9NUx7tkmo+4_>l-Foy?BPjoxBmBiAUk7^M`vha~?HUZC_$uHrUymTr z|5Gsla|&j>5;3W~1~27ln(zgH1qFR#q|9$(96sVfXF?eOOA2}>%GmdS($=U+b5?%` zaFl|>?Rf|K#h@Jm5AwjdBEn;u~-K>nC}PfwT#hCu@ezA^?sQ7%2(ZmEBM`P&6TmqNrtl@`9^Gd= zN5HGiPyp@}JYFVdGj$T4A#l)TIDqpM`0%;BP7}8{BTzeF6aWtjrZkqZ>!p+SBJla~ z7yuV2sLU6!txaukH?!JG8-OPTrhTg%y>G-$_04`H7I7!HM=B~k+k+{=D0A3Un6$sg?E(36RBszUE0B;I9F5pL* zc4@AI9y-Hj8UP;(J`51D&X*UKATT|1CV(pxDDf%M0pkC;UOUKkHUM7=-tc>%(}Tm&G1f~s%4#FO3~Pv|?U zE(H)sflZ<+Yc{7#bJV0w_R9eTQDDx84u$5Mrz5brd?kRZ6!i3yG1u3%81(U610a}! zVs8;^*?CwNil9@t4nPP67iNgrL5n562uxJp0N@%0TKqu6@U?j#5wMQl1R#`x!@Nnx z=O?QmkTP>Cfa?^vF5zR1F)Pj^@S^n&0AUnVdhuoS!(L57Amzd?05>Sebr7*Bs{0Ni zuvgm{KsW_$`OaATA>LaMc<;6kKm-Nrr|?C+&355wUSIu#0B%z7ozEGB&-yJx5q3X4 z1R#=v89xQA$%eVR5ExQ<1V9u8xqPhAB|F9%fh*_C0Yp>at0ZLW^bgEJV0qY405KG7 z<^QcI6TNXav!R&{fLIE$B7`h%ZXf*L8sL2lz%2@P@|Q2ka0Ff)@_n!!fZG%t=QGcb z`tI0=o}uQm1AsURY)%W<(4lTSQKi5*Z{IGMd9JroFnZ1cxxJawY?SbetM}Kr`YHvj zXC0Gw69t7JID7TMh9S>%rs@aE+b_ADf+_{t2Tkf=y_JIEiU4^NE8#_y?kBh&s+09s z3fkr=DFT&jJ0ZF!^zc7X-rn44lN1$E`nOP}VE^?$w1G-Nk7;s+jW~1|O7=U1{jm*I z3To7?6=D7pA`rg%Z!mAQzh8_ZWA;3}!E)1nb9mr*`U0tRm$Lp>67a{_s>%|;9SVGx z@FD#!4?Ma}S!)a6E(N>G_+>N-qb}&3{y6jmfO`~tFBPzbrW=zHh`(+R;64R$>trlm zD?S#1j728_Bv26CLXEkEy5JKWJkn1CNTeWP9PjQr^nHsWcv_qRkVHX`HbRze6nFpu zpK4bC4=7O85;2>{>m3j%7q|m>NP!POl+ZJFrXvDTFFgPxQ!qS(@9F6>5SJ~Nt-T1~ z5e0_)HmB_~=i>hH)dnvBDHP~9@`C`ipJnfX>@uxfD8(}^TaH1^HrRSISL{HJfq+$KT=lZ^NbMG zq$8)J0X(O`pd-)gyDi6W>x-gT0GSk=Zzo`7_g>&tULQBb0mz~t#DxEVj6)b|(yGCC z0lc6&}$>D8hNq2LN7C;M-Nod=Iz9OP`01eFWe& z1-5)~b>H}Bcqpk>nF`A}x915&6`N4V) zA|Z-!bHY0SxfFO0<15P5(v~35dq z!2murcfMK!fs9wR07@wEeJ^IOYb`$`Ahv0|`>(<3X9_mIlQ0eK&+`#DG)xJ=7YaVA zNm%jZ`M(gDyRA8ZQVN_-NLZT>=4%mn^|~d1uN1V*Qe};n8RPl+h=Xkaluu9$Uz`}g4+?rW7PAX?b8wyO z#&#Kiatdlogv_m4V=Wl@xS$l(H3r&vix-X6)S!sO_#+wjkMHhR0I;B7{zf4iH^owdB21W51;CO5n^{73&|_>q0tbK9060p) zxI`g~a!zQ2Ao))cfD#nVHxCT$S#IIRT0hJtYx zBIY-xh;XKBXN1M+y=~%2-+R8T}E+y4exHNeYw$1#In8i=hZ8%)0kzAD~F+Z_SZ?cD*Krog61%ue>3h)X`*CiVj0M1dhsqAhQ0;vr1CA$^9;5-E%)ursw*$+4;zVvAv01pbLY~ri2=bpt=MDioL z04`8)L0!c3duynpXIPy*0e~k3roE-i^i9qQ1f~T{1aOgpqj3_J80It?0hO*(09>NL zoo`+r9HTc5fde0=0k}*-{0af9emdF;0o82=0K6!;S0G_(C8;>eur8Plz?*{gl_J*f z$Y`9gMrq6g;6s5UKk7GrUGrSjB)yUa0IpDQgKufJ=&FwYTUYL148WIy6Z<4=%i6BE z5HP%ADF8nT()q=AJ%60U9ocB}6#)Dx==qUn8DDzZpl1kGtOgK3!OYV#b~5WZKA)}P z{8|8k6!@g_&+baE7AV4p93uch6x19QvTub`8zJy${YC&+DbQLaVb^}HaYLY{%@zQ` z6dd+fW?wq33qqjfjcouzD44mI-$*qp3wLB^%Xa{{MuA}ub@sOF{TC=ge!y-3p%fH! z=ZD>>cioOazq5M*T&JMaNX*izn&R}Z=d=9)!YKGH5VNDb7vY+zK_?RcHz;VTEMa9E zO7QpLSHfWc;S|`L3R&8t2>dS1P&NY)K|zx_VisL7WG{N?AI=s4Zc^~FR>&exxKtzX zq5LR-ND9niM65P-B`%jdKV<_Tih^Y?#Z2pRtqF?Iw)7Z)XbSXq@XZEEU6K*dHL?Q` zL&1tj37Z)F0)N;|oE-qfQlK+j#A-U%;-wt>%1#2fMS=YUzK-Zt+&a{xPA$#=xJ^N! zhbl82n%f%z)m5$l;wZSqljx*FxdAAjZ0)z*1m-8}%_o!hES8V>G$<0Kg~o|H>Rf&K zq+p+&yku`u4+QlJcQy=prnCLTRr!ixre{$;Y1e9Z9jrH>93K)Ww@%$)j*>#JzI*Cq z{rP05eG5g#?G>7c=1w;LC(7IFJz}zAq?x%3$|s*p`9mAXCj-4kD?0A6$A|B3p8Cf& zlux#hS}B6;4BDZ5^5?(7yw$TB#VWMkU%+d!JoX=e2acyNQ0*fj%UoAgf!;WeHHQG) zp}>z{C~~@}coqVwLrekOr64a-%yQ4$;s`biEdku4An>r5rJnDHlQ(%2YXJ8t7&CxR zuOv0bmDMIbwg3_+*!Nk$ek%3BKjg1_P5?-xKy*UHvJPCw-JLwo9zYTWmgB^%qUC`c z^uKiP?MVO+C|Fl2VLj)3ZG}LEmlJ@86pSlXW&9EFbmM_#E&!4#Sh-xr=EfL&MG-8D z&H{KuLBv1_``B!1Hw5;da0ie=f#xI;o1Q%i&&Nb>xd0%Qf`mdkneRU`B8>wV5U1i&*2uFCmoATL(o zJf_*<>j0ippp-9Wt6zlSWiiwB!U1GbFkvh|+pN7;CVB?%s+$0^DA>y<1B;`VwnV@q zI~u?X3T~&0nL^a20|L_~#{qarfiJIfwLjJe_Zmy9?*Mp3!HOV0AM^6gd=x>ZbsxZM z3R*}-Y}K{_hY@hOl?dPs1yTHn*<%4M2O!|N?je9|3Y02T**eWvj}cJrlmg)G-+*Q! zR^@!_69R&;Gyv}?c(7W`?&enOBakrR34r$$gz^KC%@^+4hQR2&3;;P4R0&ntz@Q&^ zpcm|%2_Tn(+{OGLgydU>D1y(3mjLo85G~~gUbZS?2&`3p10bJ*_WYc@{m)eb5cu}| zEr0?FiusI>e)}~s2;4Eu0q}tWO}=A4tz;IinQFbu15il8T0WQ2#%jYU6d^C>1Avbd zZ2Tl;!u}3;e$rg42tW}9omTSQ?ps|&D1vk65&)kl7{u4c`RtYYAW(hf3xHw@iuu&_ zpw`QAWx4aLG5{qMw7Dl@@ngT>USsCX?*KkiFhNbqf=xyaMooH_T?ya|1*sGHNlTB; z<9yO@aW#Na3U2eoBDVITE+|6JMzsLGQm{*(pEF%$i08V)8#O-k*MPf>g4F#&rd_Rm z2t_D9-W0$$3Od?L*gXH9_$Rt+L~{V&DL7>=V!`rLmr#U=V=V#vpg?j*$R>s?!Jwd` zHGpyo#+;O}paUbDpa>hQlmS#w;KQqdZm*^sL16a<0f0&hRvM`@vE6)}6VDtZ2Jn-D zHvEwD0rCP|2yl8T1yDsn`B5n|^!bsEnw0lS9Y8e&yGM)J>;=>85Ey%<1ArO|p7ZTK zBlIufp084;Gk{+dtQ{t0O_PqzMiE-4bp=pMf%`T!mVM>}u0mB9_5kpk0&6V^D_owB zKZ@!PdI2!iAoG*)ywnh~ixr@Ja+9{i4CW^_>YJa89llT=xc}NKlomRjmDaiX^2scV z6Y@>R3R)wWD^+V4@=WKFPOyBv+xBxPpIqmuUI**VC%cD*$bZdWxEdve>Mz>W$@=rj zX|^J&iN!IL5_%5&V;jmR zGs~P6&dF{35WYU>Utr#9*Q4nQXW6D=v@`Z=%Wg;i`#zAJu~UrSYB$Tx)kE7{Zw~EV zC+N=Dy`81<(x|95i0oU`qdvmh)m?AATyLq$KD0A-t7XqR@;5tUyYwC@-&pwIH`?U- z`CG3#^LIOAZ*FszkF$>QLFi;?pZXDRon1z;d}gia71|klBJ2{aq8Pfv@)%;PA{u18jk{FR6*-3lxGx#(KL8%gjCKu^^rh^(UymBp zTNy9Y1Yk~q(mes|UgLp3#u~SW0I;Co!YvWI=ApeAMHqEqH~>ouyv|5j-fsaOf&5e( z1>h(J%T|h*^2IfYD1!O6F#xP6a2myTGp?MXiNNQM+5oI6c*EDX4pCO%@$xWd1ppfg zIxZG62l-80GcO)A9)K+cf&38Xi_HqJp(Z_ht_R>41<(2TphtJ_=?G*l)dz5#f^3RhLqhqNY!zLL2#x$$ijVRqOK0Ou$eZY*WF z4!(GLamtb10Ng2%>=UsB-P<^&?bvKDfb$e=br7-}F>$LNkAJ?fBMhQ3U@yQveq!@GuiH{c-!|B5-N7 z1%OKwY){}>wuVv^0&b(N09>YE2cMr`kJWhYhERn#5#e1ps!0bHS=*BO5M+ktG8X2kYKuUs zo)3Uv3eFqzBbJAU$PoxJ_5~0^K@mS#(&lkDTrNzz;t${&1?6@^*0iZ=EQ&DjK_Gxo z3hstWSRF)Xx95_Da27ntBMDuc? zW^A((6ye3I2ms*}JXs)Qw=b4%LSV__C;$-@oY|(zYPYB1Zf4@57yvgZ_!KQ*Pamk^ zMF}4^-U1Lw!H!?5%yhCK1vSa}UOa#(3V!m$-=b*9XaqX@-2)I!K?XnOF1u%=F$f5& z69B|eur*u2bUWB=K|m+?0f1Nv9!Z3(?dp&z2+SJ&2*520N-v4n#OW<@Ey6fA6~Ju@ zq95_&1~dCOpa^=8(*eX$u-j71o@{%mj4A~YOQURI=DFTVf!}IF`C!K#y->p6-z2)u z)mJI#eBVZHl2&{J!G|s}4MU#k9J=W*Z)G_>9#skshQ`*xdMgD5Q~l)`zwO_kbU!NP zR-LTBQji^~q-a!|X;ki_@&yqR{mGXf@+NdWFraJfvz+}xhv@^Sl_$pG$AaL-o2PL#Lajw0wrrvSK5 z!9IRSXK3l#Vg!z8KL(IML3chvFE=O{iom)iPXQ!SaBZfPjhH?9A_AiG&j2J*Fz2)y z>m8_vySq*UvH(1wU}r2}OuDWRcXz$zuK+xxVB|9i8(5JNh?=xcmJJ}80#+_yI%`+r z`Ip6~-T`<-fr~P~OCv&`g6q{P>|CPk69S#8@&Tk$U^-RC^jZwXs~F5L zd<2k2fyO5hdpURr&XhKaivc{Qz$H`2QeHk5q9(;heg=?E!JVyAR-*m=90HYsuK=D< zF!Y;%eR(Hdhrs!gZvdWBFo++l*y+WFI|%4qE(ef7LB=l`GwyuzI|4b~egb$#!3usx z`Q0%LZ)CEKuLkg(0waC^a$c9xY80Vu?^*zv6s+dA-Bl+g;<=0P9gU9t_1Vdyplq3l zZMLw)pH6YtrT|`0aCMr1WoX5(Mok*hyg7iE6h!eF(f7!0A_R`cwgm8s0*QprgS}P$ zpULo=)&O2pP!P)xyXm?WzZ%X5lmWb<;Feg-hI*GxMNNuoCIFC4!8m>?(Cc<*@hXPw zi6Q`RDHwS`!VY^y4MP$9vLpcBQ6O5Z%DTI@?S;VO*=hjZQ=s5ypSFnT^bvvB+I9eP zD0u&oU(o6ilaGLJaz_BU6cqEznRe!Bd_!QSUN-=F6r_*ftK#p<@GMn$Y7YSU6b!v1 zVO`I-8KVe$9`^=NKtVA-Ci;`*k<$nS&Fu%^0|nX7`Cod%`t}IaKI;#lkb)l@MQr)@ z!MN`0V>k%FM+%D82${j^!!uEYs>QEP)fmIJ~ijP`IbA1U^qY@z*h>iwZv?{@!b&!^mU#Dpo{`H zJ5|OnXTSyfUX@b-e4`+Tm)_D5P)@-|W4`3ps{)TTCdAGIP(i^0fruSx-wgkz$J#6eP)R|I8Q-j%)fg`j zUpIOQfS(i$)aP))(Kl`^*U&@B86KML0X zsG*?meF1wExyA|o9bW1i0r*8hA>ZBGHg`@E0$pEk08mRo!~hkxG&~y*bR*wy2Jo8# z{bpjeq0KB@Bhq}n4S;EXGV`oGN5s;d+mK7S6X*z81hWVH8?=N%JGsf$|rjTcddi<=93;z0_D}y{3B6P zsN1D`ovc5f)J$oi$eK6g45EFe_V_2t+q>|?M8(Vl^Y9%%U8en^4dj!L1cManBZXEd zC5-)lwxN8|Wyn6ork=WZ8T5?le*)Kwd8?HZuPaJ6t~!HW(at^l!ULPp7ie6HjLi{c znIJGVR0DuH1;%^`Gkfq7y#9Zod>{Y|3hun(7lVck$3L@KnVJABDNq{2zf*e|{vpSV z7z*Gh1v!%?EIwww9(sn~Plp4rqM)gXnAsn``vrl~0 z3Ei41yvI#HVgi5@6dWDSzf-L$9-}68beRaij)K0OM67s12!8p*_EP}ZQ_z9$t=iOW z)+-dj-h4U$2MTIzrOZRI+Y5m=#s&Z!DKOWRu(7cocMC@gnyWDR|<* z_a!C$#DgS_HtPYLrJysDu$W#eI-zG6aeE^GHwp?2RoT6o-ft0*CvO38j)ESOWbDb= zvfBtu-@F}wI|Y@k#7y+U^8!o`T6sdFjplT?7IXckKb-L4gvVs%uocqX`13 zYxV)SKtWGc2^+Gz8qbTVD<1^lNr7!gA(Ia4fuCXGtwR7VQlQ&P$f{$T_CQVY-fart z5(TN*d}YR1ra<8GGz$QiDQMM6%r-w;fd{KzAx8mtQ6O`ZvC86P42(9}0Pv*F(i@pR4Q;0-4k709>J<*+emW5cd?9t?Vy50Pv;2C|S$`UE1Mi z$R2wdfFA`dzwwE*jCc6e@C!2l;uk| z0D%;2UnOE4+)MD#AzXeQKoA86Dl#_ScXWT$q(K)h0JuuQE4~)0WYilo1Onxk00dL; zB$t=1&b<#s;Do&wfDj5?{rN!%trz3YIA+Kd0M{sJb6LoYv#d^`2U{_ ztbE+wcBn~@XC?rMrNC>QfQ5IP5|2RR&?Er2C^#{X4}UtJUys1TvB>~#Q*eXd;CV2{ zI}L&B8&UzpQINw&0@7y^6O>O*u=hR%^ON=FlU0t3<+atT7NN9Ib>x*gS6@E4;)sLX zX7ak<2;P6>+c4yr&b+7)dC<{n50p=)$^GkKz4_z={Sf*0IQx8*6fVyUsFU^Qle#zC zDwdpF;fUzunL+se3qpyA)i`Qe#T(SL4*`3T5$?o&|Aleb1a z)`lZ6sq7Yj1PZKT_>m72r-UHj^*bIwA_X!0Dy^s8kB&s3py(ceBnrBO37FN2L3rGD z|3D&u2NbyROzHgclRHs_x1%2dct}C;4k5E_T!_E5PX?s`NT$HlM#>IU8mOQM3$CUC zctnB82fm`Vucsjb>4r}Lq)@Phub67Q<%V51nz{F0?4AEeT|596i>jthOYZJ z052%mu}H{X_jYzc5%Sf`0lcKZQ%Ar8TvhPo`1%=@0A5iLmBp7rzmC8^Afx0e0Iw<7 z#81hev?gQ;YEoO%UjW`v&@4*E!~-hD2#kIE8$dP%dwIs{qOiD*z-W^ur~mqzzoo#v zw}freIXDb~_9;pL-cfMrwT!h5@ZNyHQr#8+-cw+zDPSUhK>-5u?zRGuL%|I%DO-M0 zGYWy)=(YfIDd_NxU*TidZx#ZRR;dEWqu^e)glV^YyB2}q=RyGa6dd4--kY~Rh{w;% zk4OL%Q1H=6#1;kbu0RofypaL;K!MY42|H(}hQC0eE877mq+qy?h^Yp#^C&{AFC74U zq(H=hRhv(^Z1wtnX8=VM=#1pY6xiM0iXv#9Ve4}7N6B&D+ZGkH|qg#&w@SOtLS~cd;?0-t2uP%=T@PmSM{(Ir<6H#xX6pc`pkU%oG5hH2iN8SiJoErmQc$HKWzSWEag%CS=mYpkK@l(c zT+rWg3^i$MlgR+8DA4UGW_k`vc%VCZ%Txf>6m;e@pf~n}%tsNf8q5GtL&5I^0eh`K zX&nL!+ROs*i-H|L_{A={ri~G>&zJ+CmV(jmrR;{r*l7qnu$u?qHw9Pu38AMy*y3ql zV}peNOb3wp$?jP~7O)`79_5qKZ3nu*{N#Z8<|li!pDT}3oa%1;h3AnzHTmxJ=j2knQ{!Fuz_u}T5*;m>w!qohz{>(Dw`e?Hl| zS#!mVtIp#PJ)S@8pD1tdvw@Qp;dz@*qkMA8hd;D|eA0Hmo??`Sd?`u^=NJC54ds)I zTG=a7W3RP9c+$szfqAP(i4qkTn}z$Mow1cij-C7O`#^TaCi%b8c2{b34{dWD?Q^_N z(4Dd0E(_%*Ax66q2~0jwAK~pXjF8JcoqlSfow4yh?CQwh?2MhhE{PR(5w#7|i>XgIIRMjJL7+Qj+5Qo11uX#QQKOcrY{CHMHUT_%A898j3of zx$|5Am{ahGFWTBu{1eaGYKz?gSWqysiI}-B$SFnNqrfk?Gb0LLgO&=a#24s>Lf~Ap1OSc{czl+y33tQ75IC|R8Nf*j5|gAX`g_~O2pq0W z1#pT2!?yyK;NJE!0&Z{90i32FhnILnNiV-6V0JVEfD;88;S%2Cm@6m&7S;E@$SsaJRo|1TZ>qyoU3f~nnA zS!9ptxaT`ISPa02f?#U_+uyrX7d>>EjSRpQ3jBBTv;AU@;t{#gmi7RADe&QW{J_w* zc-ipx#+?B8QIOkCjdi|Z+X^+wb$=HC{uIOo$(T<6v$(_)Y}OM%00rMZOIbjl$b%@t z*>!yZ1X3W|tH#{KFD@al%0UA_5Cu1~MeO3;qj;T!ef0nUS1Gu|5BQWH%$$HCq{@Z@ z2&SOL3>nK_(AEHfMK?wO2%#WziHu#2(%*uBz<4x(YZSbDz&|MSzTlVdW1JR%PzsDM zsIsQ_H*G`_EYB(cT&EzGzuv+3L-Ba2>67sQ!YJ4#;U`?(@_mOQ)XZf7Zct#%%Og)m z|IhW>@*@)ggj3M9C!gCs_yzwR9t2GR5J7=>f+}+_y3`RhX-)P_05>Tpyd-8~zoNki zI6j#JAd&)=@j^EDfIt2yhP<2yAc}&PE+RHRNOLTTV6%B4fM^ONkXY8^Uq5njAd$q)~6bl!9 zoR2C6>tFt%4O9xs7mrsA**DD&CHu`^{jm*I3N~4sP#k~dmVvPAzrnoKX4-t_`B(q( z=mj!)9{~>>PhX&~@A(C-+as(H@Y@&#;0^`b`ifbz+l$o^h@BV<;4THa*Lf9EXBv25kBw?x<6B7{lmYfJ6 zk%F<-Vm2}6*?I&g>28BxZMcketiVs0R`_n^Rux>EVehZJ1r z^DhI>ZO0KVS!Do7reN@1A=_>chu8CMUYH5s5e1j{79C&jPk0ru-q#lZQYhGyDrH^G z?H;3Nh}!!aKq>`kg<|HjtR1e(FVT4mAdQ052V&Oic}*V_;if1Dz+(!Ob);;Wd?4=Q z-EZUpNTjU2R_Bq?S~qb z0LY-=RvO8GmyIv}_33;~!RzS~7QJQXY6N08D*<>zK|}(d z&_CAVGXf8OGzXAPf&W9kp-evQI|7qstpU8HKz*i!&3$T&JF?2&DgfS5Fe8(nXWZN$ z|D`wV6##fo!A5?6+OJmK;!%?ddWr$$P;ii6T;bE-tTh7e2~q&L6j+VqI{^hqE5#=JbXS^8CgY6mL7eEmOz7|53 z+B6yG^_6Y=1NcP2Kz@>Yk2VYNGlVM-0#HmrZ#{m6Rd^DvH+oqQ22eu5fI&Ph$?f$U z{V(No9|qtv1s>xC%*$dVPD=uxjR5e4g299NcHpQ|{81dBI~qVK1q*B?%r0^Z9-+TY z(*p37f?KmCENr9MRP+oE^W^}_C^%6hVf$x9Vh~p}4!}1Gj0*(JC$!xY6d}q{7r=K4 zj`0HJqI8`R2s|3a0Q{h!?;$m&`IO%h-U$9RK3H7dDmrvBfN}~t&k!*S3+FNf`YxUZ zpn`&=e*8*`-u|%&eCRt9KqUoLNkX<%tJNa}x?h>Fpo#(; zelYuh%acqH(2AP}p!#n>f`sWkmKY#VJ$E618VY_s60t_lU*Z2&FXbfweo-)(&ut(5 z^bIds8|ShNKrICYZH25vbDBSDQWy1=0De@*?*PgtO%k>1Wc~T%xSTeML3TIF5dBsl|0l}Z zJ1cOOV)soYOO#L6eE35f$R}@p)mMmncp0FS@Iv7q+fY84)z4m`HgTsK!XrNZ3(Q;n zNaMaDQzNGfdV##ZjfV#|qc2bgen)1MI06sph2awbm{aiiiHHsN^jU=>^qMmffCUA) zlcg;6?$fRaD8@|zU`c^ULzRuuZ~Xy*eeb3LI7&g-E+HGm82;7<@0|(2ih{S}#jO3^ zv^*3+eavhC))f4_$8+LPm0AQod@=-JLxBz7FWD_75O=6A9?l0~OF`H#erN1H?G-43 z=b}Xbj!}>`NR{QxT(55rbY?k#6BK0HiCDhZFZ>m`p12Z# z9R<5^3gQ_>?tVWmz!#tWt1SGHQfk+0|f>@MNH6g7+#HiwfSZMjuaHP zldu+z2I-&(hP$@{I7xw$jf7cvFH}W9wQ@UvQxxnPtIigO&cb6J?K`^woTk7tg)bJm z8_*m@@Y!e#z=?vST>|E>A~}hG)|Gt#oGF+RDr82st_Kjf_uwFaGZYNu+ktIw=qy5D z*o?yfTqxKZAYwyq2KPe1;gKl-R|*D97PEq726(UfV3QWK7JsgFjaMoQDa2mh`3Ih4fU~YC}7o!M88fO4_QZT_s#!SjK z<2+`;=(7MWQeesV={bBZ{)r+?eRmGPB?{W{6W|WJEk1@o)G!YKmnrDNXRY=pOvXb= z_ri++yeOzWB4M)<_u?j59P|Rgy$XpX+00dKz5g=f1ucdmR2tAwK1`tAlm#&zV7G*F5 z41D7OT%#bQQp%>43GoEK`J8(ILMf1S6|xS)SMEU(p1er_aGiomCSnoFgK>SuXzc?4 zVH9-aV~xA>G;y(8qV@>D4GOy2sIn~~O}3#X4cw3lAe;g{-Wd;E{S+6KO2(!Gh@c=z zO~}Mo9Q09ysM4nZZc;Fu|D~Ox>}Mh1EPW0jk^*Nxe&(X7AFdp9_Q?VeMZr9NE?DB~ zF>6qS>5|s~qA8fRl5f`ab+Hv3MoQ zCnLl!>R`S3q~6s~xw7<9Ta*-vj9=Et`t!-*XO$J=w6f-iIyk)gC(7GfFngvVZRGoW zlusUY{6ibaCo^Ot6ymMNd!UrC>&ZX1p?q@74O7K>HRgrz=YNBFt3RI%SC~&+-52_uyKQs*}f0&i@=J7MF8$o;KWZKUe(lf5&}})5&#JltmH>(4&0b?3IVOHUjQUh z;K;`dLCRD75Xjdk1CT_)N?zf%>ftR#;709t01qhG$9v#)2NUq$p|M{DfQJ;kxguuH zh5lhE!Xfu+0Lc{Go+@E4PFZ$Gpjp#e0FNjz=cnTwP8b!8!0g41{Qv4(QYg55Ps&<` z-YG<&rEyaLsT5qFC}ABI7<(aL{i_*(Gz!!%tFrTl*5lVZ{aH%@k15b~ma(X3x9_3| zdRy86NT(nqR?H*=$KvsVEL|DE6AB9Sg)C<2*NG^CsigqGQwkPu60wELuHs3k-s8jo zGANMog_$p^HpZX`s>xCS&nS5KK*WCiJbfC0n=p zb-u)EM-TkJv~zVQ09h1#I4xpPEh`qF2sv?G0KA~!p+vyq_U$i4;DB;>052&R$!kP2 z)}-KEZ1ka?0A5ib8Yp6)J<7+U2wzqD0C-Ko!`=dxoxUFb9oX%D0NzmWeV&Z%moCPI zG3O}*0Ay3p%umRAC)wa$g9Q%)@Rou^ev!qt<6*zhGwhNM0q~B3sF70EY)AH21cpZq z2k@Q(m31=a`MCrB!|n7K1t5ol*!v>ZGfQ#;Meq#O0+36A&mt-7(aYun0-CmR0C^NF zdd?$EFUFm*XW2La`4qUfS7lM^tA?TowR?2|6j0#f#*aW5q3?`H`u%qMfljv48Si6j%f?nwj1S62(TCn0JRiM z;-eY!RuOo9@>wS<0KX~tPwDOU>F#e)1m#j20H%Y;{N!X_%rG-wyBOt@Dm%Abh55-r z_03OeS}v2H8t%CPrG@Oo_BvNzKDjI6q}*!9_!IfjVO*C#wxN8oOS-k<+FkM~#cwT7$A{)C})kk={9!=Mk@4eP& zH`*CHd5v`)`J0`wwVg-HEfYHbM4MdC``FZ(zuOsGt$j|OqMfld{}27`&e;FVLeFdbS_^G)y;$@o)Zg!nwf%4Km)wZ&|U5 zQx6iBqpo4kLVI{HGukyg=PQ}riw3ntAUe(wfH?(CRtQ+fieNmK7jn%BfCU9%{P@YK zn%lEcgwt3kx2-~7)A zY;WfYz?uS+3K27Y_&+lXTaqsUu%V#sFje;G&~^N|?|I4_fGq{KOZXWn7Z>0>e!AEf zz%dF|OyJA6HKlkG_F=F;fa4VS^7)qsWshpnL$~W01mFY(n{EnO@yvm^jIUi248V?p zPiy$QWULv4B4l0-1z=A>+*l!t`!2vuN>{r9z<~mNO(~nC?TjZ1Y#v7daHK#|DPphM z=Lk@fcC3v8aFPP`+alJ@rDG=q+S|tfI7PvdYCfQNosXA2EIM@yz-bEf9r;||y!CkK zIOu5{04EA81u{0n%s_^kl(OkA0A~sUS4!BaX6;iD*z){7fHM@_8zp9Hl@@^r)NW1! z;6lNAzDBnotP`H>*gZ8FfGY)FwNkcqPsJV-p0bHaY?zWK4cD4^i;I_>N0GBA3oF-+HcYF0fU~E7UfXfv0BE{~F^3Q1DWXFS)fX!qpDTYfS(IQlPb$ z@2B4pHxNaz9NPjw5CtJmMNF}!U;qM3Qd$AHN@FlSp*{VHC*tS!VAxZr_ZWRNbKifEyHKZQvipm1hqkz~Var z2&dpIUxRknWxJkhQzK?r}gK0F1(B^k90Fe}g zo|m#N5i%hHY_1t5-sS3mjAFYD`gCG)f0Z6p5bH8`keXYAwitK_NMy39oh{~=rDI#*w%AUox> zd}Kl)-Wi+Yq0%tqna<2M;qq3C{5zmZfpeH@9jv!faOYu|y#J<_wkX|Ce=Mkz^;Zf6 zUsV;CE-!aM)QpM#iSqUi`ZPzO6?9FCDh2-fe`o`hf@Kw>6jo*0t|-}`G4YRWs8X=z^Z*aW}4UJBmyQ@odMjVpzteSVkkd_i@VaH-2mLDpya)T?U*zT z7e@Ca_5hGTfysFZbLr(c2{q}`{@wr*DcHGF#LAP~Y(k*Vw0;1RDCoy;vA?h-4Nus_ zx%LO}fPz)}Qnu&YeLR8r$#4*WhZKAliCL2$x%i#`huQe+niwl z9#IgK&exGOQO`%<`STF~QYi5HBxPePb8($hb>CiVnvB_fTZj|T)WmTB(kZx7BVn4peLA2Bk*jq9JfUDh8!=0H zIut*H;{XQWDFwq@iP)PZ#_A}7dy`23GANiACT7924wWJByX!On&nPGyBV}U`)>I&H z>COxQ&nYNM6SG!r`rSgHdeSTanG|TXmav|!^~NF~`8)?e76tlZAsb{;jF;zK9Xt=f z3kq8P;+fKxhqx1HF=+vSmlRAq&+nI%+08;tx}>@oz$*%d@^!}2(34#exc7P~fY%i4 zSu12OL#N_WL(It)0Nzkw`dGp``L^^%5!(M)1t6P(O>HG?gVU=31YUh!3*apUKG#G{ zxwp@21PZsW2k?%9%Kdzn>Z-OO0>wWz0(eisNNq8@Zum)oK%cNJ0CFf8y+O(xA~xMa zVBPrb0CFj?`7C1RO(nRPaV~2ofIJEsyGdBHi2bingrmpz0LZ7nL{pX3hKr^nAgbI8 zpn!t7c2eeOpR@ykmWvJm_&|Z1r+`iW>4MMSY1-rvfIr3+xNV;SVpqPTIiBhJm zpZE&_s};uplu+PQDq<%*PG=*K@aqJC&lH?!&o92qYln-hJE9!`e4$|WcnSM9xz&3V zq3HT40HqZ8J(IHBUa|P2=&a)m;41~%J0)yxLT-0g0A&Sd)kO1NccnnZJY` zD1ViTnq-z62%w4rb!92fClm1@0(X zhyh@#Nh)chTxG0OWj4O!=g{k|(J<4fSzkW6tj`*GVmqfTD4(2AzOByHmruG_ILp7j zJ7tTYo9d2+AW>6wiYFYeu2B{Wc~T%)5jvk zpmrt~5lzwE^G}qw_q&auA|YhO29!@Wp74h@kWc#ko~cOj&dx+BVfg>E4ds(3Z#gRT zmh8EM@I3Y>aJ`tfx@-FfilaYT^g=IC&rt{9fz9X()UsB>zV_RPhcIJfO#qlvaDu<0 zgU?;XpB?FlBLFNY7|l;(w-^(OE8MS7ngOt+pmT42KH13!$IvshX=(}JC8c1^8#C(aIKpH3i1}JlE@`B0K}C^5HlD8w!e=@wDWCEE+ZG zvZ*})TM9JR30adt_5}zO`ke%DjDo_u0ycZ|qX`IXZsr8wI0f;p0=9b4JDd}%tUm+b z1Ol%u%v+r2|b`;d|L%95GPB%fo)9f4odkTiu2-sBXrI`pMH}e4CK*1+d zA!{L&;VfhQBu@a26s#I0V>Sbu;-O@J`^x}MQn21uz{b5z%Ro(%EBOF8MS;OZ74}HI zGalXUo#G4NGzA$!{08`<7I>;I;<`ToCkl*>{*STy@T<9f9{?V*sWU4fn-sG5IY!+! z$&Re-y|)NSQdHU{X;2{=Qc224gH)QNQj(GpDMJ13?{mF=`Ci}aspt6v-mmNaobx&N zxv%S962^wV$LlH!T3-j?K!GnGaKF`^g8z2b7~BBhNP(WBh)sDJCqWP0^hpo^Ckoc` zg7vc}Gdm!VawimkGX(+D#Edy~=!?MdA-4gzP%x+mAGhtyi9kU4LIeO;3R>Iqv(0*1 z%+3~FzjMM8UP;(2CEC$ zH-!rqP?P#z&j8>{!SGFDwmiuSCk^A2vH@JCptqI^Q_#DP|FTBxdja4I1xEaBowxif z?)hrGUIFl{?o%C%_qqd5X4(<=eoq(I+N$P`_R_8}0GUIieCg5La0 zt%@1KSqO~y`W-+p1&NadOgMIaPXxmE{{#?1!HftI>uRbZL*R0!S^%LGBu?drYAA%A zLqL0@LeyV5z%2?k=!%%jl}p74Bu;JyAdG?)b0y6G*bBT^Wc>H$0B%#zhF_AE)9?K= z6rpT>D*)jX6h@0!)X>)WWBv7^4S)y=s_aE5I8tg1R#onGZ2DW}p(rghC{e6;4ds(pt?gwtwOvgSJie$!3MD&409 z4;)Khps#aOnRH;rNA$*>`7Qu(pMsBX#BA*NfL92_n~MQFpukdJnGLV#5Q4zg<|+Ul zQlMcbWz`3l;T0lhjMV@FH8P%w!ffud&F9?wq>J=YsRA_bX!q-?a> zZd}Hk7o!OviGoFT5*C?~gmbZ}OdG%x3I@B1So6x(n&=q@zU>d-DFxpZM6AQLixvp@ z4;Tm_nSxM$MswK5=Eevdd@&fnGYUF1=T~I^K52!($mC%FQYhHUkFLAkaz6g+bYD6W zKq>`(pG54Druq>SAw+o$fHVrGFXFeMo>s$oOnkKrz;g;F%}`|{yT0s*BKRH{41G7JRc{4QOu@_Xyk=@;?}R{MzzzU!Dd?uoyBW!HLj-m!>;_OmfjvL#??oGb z+!-&7*bCqt1%H`2uDY(V&jNKVJ8W&j)OgappjDpepJlCEEQ^Qe& z%6p~&-czuYFH(58r06^X-~CPiD5pTvQp{%Gw#Eg@Z6@XbK2V_EpRfORtjtCc+@_xf z@R5T3r$x*tXt_25nM17re4?P(gm0C(mFJIu=B~2Z|P zn)F4@2f%jK#WIAy9QYTQw>or0lDv;$vV&{QtiXWM}NhABAHJ?rhFN+gt-3QtAcW8QWx*n(RPTw~mNRxS!e(;qB^mMpw4W zvs4T1j1_!Jt0#Z6Gd8vLC|PV;=3}(Ub%#xQz4^PHu@=o-Wb;hAt06R{I-_C4Tj%@v zqin6xc>&rPJOBG1^tU@>zpj}o-|}MH9kj)@`Hw&9?{~%)YT3#+e|$6yv73!E-o~)1 zMET+QJAa_AVZ^`}@L7pjJ zIPwL6B?Y7TQKscRHfAEwzRfoPXDE=3RAGK<9di&!`dSUZiUNBx6`qFdK8V0~of-hv z6xb~kv#<+GH4yOC`VHVL1zv-NOuuLER0M`**8w<3L4>+0Yj(a9ep{WjnkM|!aoJFy z*Idf3w{eo92tPv<0oYPdoGxNhwMSPX@X)X&06PjUY?m^fjs|NGDAjKZ;5-F-8e(Qv zZmExe@rCvP>?ttMmaw~%UoS@>_l+_D2MQ!B`9&@rGH{cO_lp2HQt;-Qgbf_h(Gf-1 zpe_aAM1j&J0ed!n={*GYq^bgNreK9ojrm@Ea0Y=6%IW}IDDd1WWbIyh;A%(InN9#) zDcH`BG17K2K8zxybn61Zje-}}yqg)l6c6FIZ|nxZor24^g{+l|=M)rStx8V-7bsYF zT*zjyhj<&RcUErz9u!3JWA2)^wDds{6z=o|aFK!|d~tQh+5ULF%C*h?0C-YxwugYV zo6-Vj6m_W8uVOfgAbGw8KsW`-6M216Gj9?C3kQj4B21`>m;m4OR-eSBA^Zy}ED&rTdvz*4E30D+MKIgz|;c26-U5@%6fYqP)GP zujb2j+9~*>N`YbFAKFNzpe}f!ysoHj8A|qR|I0R3DX^I4BDa~FwFzN|qCbHf#Jtr9 zXQ#^-4Y&J^ULe8yP4K|6^aWb1DP^UXe&Zjq$*rvb?o*(>T*!9j?ZU69#Am8 zFF!Z5lR93hrfIwzz(WcO?@8F>V;=uA!!vCkfJYQ;+9+ZDE{Bal4{i4T0Dw3ODqc!i zrrY;n2;4q#7{Fr+#{cBWo715H1bV9-1rSfcbbfn{Ge5Q#fq5mz03=W_Z=jI*WK6q^ zz&aN*0EraXTS{2BY}bhhn9Mu{Ac=y9qXlfq`PaDKoS%Lgz!M5Y{OHC|t+7HBp=hBM zfTt9^?ki=F;^%lFF#Ew-0Lc_+rwiGE?{AwTaAtrlfM*n}z9eFs?FT$V!1nEV04Wrx z^IK`h=M@?v5Ou*3Kq>_axgzFp^h9q2iYuG}q*0)AQo>%xWECSYZrKF@&nZ|NB4T5F zv+&Yqr`s0+q*HLB7vJc*OX`3k9E$S-kU@d!QeMVic^&R+Ae(|w?fLx&KaOrf5p-g&0mz|XU|%8ASTLmp0@+J$ z0C+*cshRw=VXZX$woXb40`QW8H~du3RRQa8POPjO3LuvPA17rt)?9E4HEDEe7=Tw4 zEagW6UF*<$4g&KnA^_x35Wp|hoK?I8=k==2Q2_EO7_~r|9q?Vz21VF5?H+&v3O;KK z*~7;@3lW&titouR&zT^2O~K_(64qw%3!G2(yz~%2Aq8gq)UJi5$`vR=_fd}l6j7kg z_emDpaTb753WlZ$+2Ml|@mh~o z%U%E|qri%v^h1I|YurrEIz3IsDMdZJH$i)i3>^V8d7uzq|LN5{mHA zvKfFH3Xbr_)y-~?IfX#0zAXU!q+sl0K3=+CP=|nxX)6G~D7d?T7nLSo!b$WZ^|kpG<3GjHbpil&6gcsG(r4te`{)@KzZC&69YkiH zt-grZ+CgqlQ9fy{lAZe3_rO5|CoOFqxmNb5dE2QdpGQFijbjv^0PFz9yXXyS`Q1C>F#-?g_6Q0cCYGX!};X(z9RYi%!rAI zt{Im9Pn5UU;oJhb#fG(GQ9fxi{10s;pHxU0DSzAlW*JHe$Bp=78%zoLO6I}~C*_wq zS$;zJ)xW{K)#Z+n@-4={^U(`5e(oE1;A8X!TFsZMJ~~$Ij6iv_5&*|3c=w4P%C^{j zJOWVfO!is{f zU8HPcd9)U4($|1y0IVsP)LX=k#P9ruKwF0v0M1enW*}nO`uC*>m{zp{aE^kF??kLe zN`NT>rBmAiu%WMbv`8ri<0&t_?dKzCKK6`2{YEqvk+5p@s(996B z{?j)(AP~@b0Dub=_kK=<$=04`Fn_XIy^(R&Uq z1f)$G4#1OwJPm%Sre*78D8l#GBLQ5ZU~D#@@oBfI0|KG9#sKi5VD&N~vzRu20|JRl zj3TB|p0FY-AdKTZ^g~fXfu< zRSQ|=E&op_!hXS209Pm|yDnx;YKBcjU}e?}0Dcr)N$0m}ZHdAI?$Rat0Q@PaP!_VK zC%fTEsEbz&00dBA$}hj(bkbUYn$)#oE`X~Pl%Ex|BDEef5a|7O0f1{13>YnBxr#Mu z2t=D30=P~=S6-EkTl9Ph0`rTP00^YuIKP#4wLE+^0$cr;0k}bdXN3}bb1Du`2IjO~ z3E(CL>i0!#L4f-M6k+|dRRDr0DB~Mlua&3ZH3#=X)&dBoz;qnH4Yei*XG+qZ8vuk* zFl;p6d+V{X7iyBd%_ab$6nwrcVIS3d;Gu(R`>gmsnC$?6+Z0SJ6tM5+3wvXrvll=(1)X^=)@zY}4g$S0_5+BZV2Y)b?Q7c) z*H<>19Rd(Z!Il<6mRRF~%U1Cnj{vws!M74AQ@x&qU%o{y#{fi8uxgu-X=)mzqGyoQ znE|*1;R{E?aid?Ip@5lLWi#VT1W(+a=+$LFYGXqogp!Wlz0qIG;RLC6*8CsreYu zxc>Y8iSqW&_g^g6Qf;va<&zaUe`q85cy(F7D>{jf6t9#b%u@4cO>xEnu1VS+V)cnXGZ<)=`1JXwn(#0J^`NT6Vg zs|pht`VK^(w8{=ZA_eXEebjm}op6=jD$4;t5(VqJh**Wv8VQP^m*5QG2?gqj=?-_Ufwu zo>QPYRmzh5{BNNMJ5>V#q*Kt8|A1z?o97~MKkp`h3<_58d9fc}&2a6uiGB!xObV9G z6|qFw=WZy%w&%A1WKqzQpZ&OgtEDFblg@+#$fiJJwh9{>^(h{KMdCXEawv%AyBYVl z-HNB`I_O6OctOGUxBPM%ACpWJA^ds_fR_{)xeHimx1G2X@M--3KrRKfd>Qe)U14ib zgwwYl0eD4$J72lBxhey9WP2CK1IVM`h*-qjTG`<`*Nl!y0P-pLtt)2wKgL}|P1+g% z6hHw5QKuzr&q!sQ$L#Y+0q~jvNoN%n<=zkH#20JR02ERX!B>~ueR($+HK~7(OaMg` z*j0*{nym%SGHRyg0C+=zUVxYl?=lWg%D!`W380vQ7kq0#i=zVkr`Wpo6@a%CEaq88 z?#n5Q(K93-C;(7GK@$Prves;RGX$15DFX10g1{33_BGAzAp*HB#Q;hvSie%pOglDB zM8Iy{I{;-A?BUDmdt?nTML_#o8G!c`Tq_l_Sz#-11*hes4*<$3Nbj!9bTTyYv~TNe zp8Xaj(&TKn;Kj3eI^;_+i2i@SkFk;5UFT6r}OlL%S~Ovr&^&57YtpO2L9a zUWM8ne;k2#HBGYq8q!x%P<~&)G&�VSWC`j{BW<_15;T;#E z6&(TmrXXOFgc&Ln;$CBCbY}py6zpgvWhwn)@W1E??XCdoC~_iJ?kJyZ(W&kQ%ufz(D4*1`*&_4kJ~D4(3B(5xOdm{0ajh?2F9x!xKjg;ges^|Il7vdtce zd|CgReTW7rwD>2=+q?SWLV5oUzv@sv*`(v@=%eL$`YJH#=j6hLdIHpNqzzO|G+F z_oz32w=;HCj<+m%@EbjZ)cf>m81dGrmDb3Vo%|fp&R7l2Kj?3F#@?N?Mjm|hT?X3X z`uM-p-|vh)|J+-Cc9nG~Vr%;T3HCRPx6w;nAfLRy~eyB2a{DE5-n@ zpkVtC2~!)k7bk1eU&#QRreHrWy*8bB8IJ@-$HoJ&q+l$6hI8+4+(u0r)=3w@848s7 z7w5U~{uBgud}9EtDA;jD$~vrE(+UBB^ArHq6e#kfIb&8bKHTQ3$_xN!DQMeGnKd=} zg6C9Ech6w-iONj@kv_0tNl_h3unV-@OPZ>g)yJLBSNhyLXMY43B1A zi}nM!NWo4eFw^rBz@T1`D3Nb4* zDltb920XI|;7>v8y&~4TV&WJC9xZnQ5J16hzM@dP%1`tX?CO@@q)p);W2>2bk1>hD1!NbI? zgW>9V2o!Y+2M|U<)4L*8mK=Qrftv-90B%z-D2R^)-i=<4!2O+f0fbX9%TvOPHxyMN zF!Eq5fCvh-4zy=gFRQ*I@Mz^j0Fe}ooyhNu^{aA0z~@sOfIAed&g5ea6{9)?rf*6B z5Jka|M^ZL^*jW5M*r`7OaF>GR0)CkGz74nvtDBq*Aew@JRmx24P>mQWxo!v-q_E+!GOMZSCYqjbOB z&qwvL;Yz`_?oxS-UH*GSYt$eA6Xorl{cDMQ(24Sis8Uee@eggJQjifoSFW?pY6433 zk97KD8%*~3N@mq!C;86J7mpz<==?7*Z}oBO=kmw{@1CO__j#GzHfW^21U5P?>T^n6r3$oW(oF_yCU#$ zKqi1k6y)v}G2>qHwFo3QW&?<$plh-UJL#xfhQPw?TmX+L7&utMCOJI7746Yx`2gZ6 z5b*JW!b>y!KP8z~2q1xio&2!Wh=O2T0`Da$29QX>*=1s;(!TF-^b89&lmJMg;6E3? zX~e9sP;tvZ{x?b;=6wo%M7`e@-rz2l00 z14yS}2(SD9^pBUK2(ldtZ~p4zGbpg+2Q5@ zvMA`m@0Z+A9faT33*TD;$fh9o2fyy7c-2DGq?^~<0LY=>*h2}+I&%LS0<(Ly2k?S| zJX-;~=RX}60&ZPX2Jn)Cy?nF5Cx<-@MaWz&0+35V*>V-u?)9kG2$;W+0(eEi@NhA+ zYIn#N0i|sn0OV0H=Czn9mJ0BM&6O7&0pwHA+lQ}u{Hl-VE;{RJ04Sg!rBuWg_M4=O zn$)tSD}dJ&JmTL&(E$@YNZRDp13)1K$KLY214}~iFK)DbZvaIUtWcCPrzTSbs7Vh@ z`T}@E!Sho}O!fX7JV<(;s12Z)g2Wb5COF~ih$5`^8UWz!-+*Gi&?tN9UIYyF1_3Cc zK)r>SZF{GE5P`mrh5&d+fiFM0Py22Ze)(1n8V;b8f~`*cn1YR&i%^7zp(6p5QP3ty z$guIJb(`rL^>6k)yC2tYLj*LdRN zINfg-0#mY<0r*bA=A&Y!tA8a10h9SF0sNpK>8XJEIE}GHK-7CRfEo(YeI?AG$z2S3 z`mY7>lLF@@Ds22xn@cD{j@AYMzbNP<5wimSHh6%g7r7b0Zwj_eR$*@8oAK=VX`O8V zYAJ9nR%UH8)QnM++^u#1sH5PxlwXva@j(Lt#r$0WOox!c$yQ!!u-UP59m*%2YX`rB znZ_Xv<&zVCY?O`n9;u4b!qx#p>s>?njtS0~8_gq8@+~6m0J;VIMA@!jm8F zmnQ=-qaehGUoCgu0S{K)T&Dv#NrBfHe%qb4%LvpYl|i!rm{Xu)BwwsG~K@pfE5KbK|G&KU2-0Q7?qU(tSRu}TSKISM{?6S6Ti>!zXz+VTwmY$(`0Rm8-#61)>| z)B8;TY$-6%mawtQEK^W~0f)B&u%lr4I{`cGf1@1&ChxZcI8T8jPQXr1u#HAwNWm@u z_7u3@;RnFh#MB_LWa3@`4ip$CD6@yc(YUheb7wyQM+#I7rA%XIkur+VHtR3|CkjRv z@#91G*5To>qsSD1GX-jVOLKA2#+4|7UeIv>E)>`s3)t^tHzf$1X?GHUD+Ns~)R?M4 z=t~5mTUY>aqhNW4fL+Sdia;RqmL&jp3Wh)6yA!g1;aMvaJ8J+JD9GHvPbwXoif4TM zQ_lhLprCyiznih=9z5oGSZoX6A_Znv{Ord8VMgc~cG=ql@TA~~w}?-fHo?mzEfk#q zT%sT|MZ$)~t;eN?qysJhyeRNC5VA8~O>jkX#XC0u-W0g2NLYBt{XOUz?u_sN;6p)# zj+Au@N$h|?w=bRmd?|?S!6%_U-M)-K)kSXrmno38WT|kBjh(#&uug z{x<M~W9*!%TSFP^@2&SNFIiJOSZ;Z!FeWD%$2%%u!YysPTdO!$zhGUwK0fbV}_c_0- z^tH}J1ZEye0C01ajJZ2k?M`1$?)+Pt=cjcH-JYJ?ER_4go0r>W9^kt2Oy4uH++lEopye2QH1K1QiZgy41U03=b+PD{YXDBBeyV6j{oz!M4{3RGB|q%UO%Y)KFTcuGN=vHbd*GxPDs zsv(yENT%Q_zwNGU-~Y_Kb&XL0@Qi}xe24PWWOqFIad>bC04WqqE9Uc)PO00_GX#5d z1dvL>)_4&+9rQ?y!2a7B0MaNho7tWj*!+w~V8e=T0G?B@HHL4yOHjgPeT9!b0Hjlp zHA~F4o8{r3=&Uon0c21hzan8JStp*OCgmvi1&~QWYrdiE_vwp42yDKm4IqnxKt9)< zcKi`8>vx_#06;bcP4_7=X|-GtMR@Ho5I_zE`bGSL)=vJN5ZGEZ7{Ch(Y&(dV_S;xI z(3?Ge7=V`)ynLX-c8~so2N?5WMgYjAU|g&cbFTi<4>c*R?`Qz8DA4C;q1MI?RzN`4 zd@O)G3c5}gu$a6(_$PW>YaD=l3J&tV_0EKvp(w(mfC&H!DA>uz3+WxC_|-U|r3c_O z1^yRBETqs5FLeu^JqbV|1+)12mD!t4;n(~3qA381C|Iw<*X$}xWat@Y@1F+X4F%qt zge>5p&2R+dE;9fWQ{Y+457ztbtb~B3Odr5o3by(PS=~$bdl-B$08m1~4t|TuR}J|D z1X3Q(1MrT5biRf?BL56dt(uHl2%wY#4}OKu7aOr57Xu(q6iszs{wqZ z;IpNOnP}d?8Ee1O>i~SBVCMl5yZidYeiXra{6+wuDX8VQ$A^~;_eQ|GXfuEc3bNMm zvrs>H;Dtv$+_wSvLcyg&Quew^e-4VUWyekcUnv-Np0AR3GsTm#+dJ<8P)R{v7e3d0 zvkm@JwO*IABN zHP}f^0eq+63!l~qnJ2%An)IvuIDj7%7#4`w7s(5}NMS+HNdPqzEa$1!-pj7|p&buf z0QgD4dmrABO%>xWu9yB90KX_m3l+0x^B3U7A{{HN0sN*waR@(dP5c%A1MR$G1E7|I z4ZL7qxysZGeM&n0&jYBVK;DU8e!c!uECMZiIsz~qO6Dh9qzhPqq5X1{Pp)v>SpoBt zLmQf(Y_)WSOd~Ki2Bn2t+U~A*4ds((AKS^MnZ6u_U{v=#jYFR4)P{u0T4cS-MERtf zd~ZE$FrU0OAxvf}m}`oX!a~b^^|Il7@_CFv{`64fLPQ7M+y76Lx3_(hdGeE82Z>NV zIXvbMZ6u$JJTOZ>U9O^r^2yBqvW?}FaiQns>ElcHBD^N{Pv8bIZ}o$)r}BcHl>umH z>|KA$Z~y;3ke#td_J10?Gd^NB+U8nt*s5O8ov|wqcaw$RSg(S}(|}^E44{a!tBoTW|huXKb;VmrQJNWDP>)U+o%3ymd7P zKFbCbc%-16v2DNoL4Uh5_FA;Q+;vS_3EJZN;J?)0Y;oo5nQufn$b)|4o|d#a6BWj#JRdUcfX%4{SuhJj@-y z2@29Igv@=1KhC{Y7+nNlMnUaKF`MOCBtjAP^!EaAl7gXpSLxTJvH%3$Uhx57PQhy> z0UJ7MBHrV+W!x12rzlv$hg}CxOkIv5*xvI8U_rqIJu$nfRq`Ey6LYTtI8A{=3x1iS z$hiQ4)q`#Tu%zGy-xQZV==li*rW^_aaE5|8iX!$VYC0fMRt7T35yaI8Q+& zuSJZkZP^(C52pkG_7vQW;%8`un(ss4V9Tcf94OecQ<*(7_=?lP)1}Vjiu)pPQJMk3nSwkAG22wV3}+QHPhh*y)e+>{HzjRH+R*-(0Lc;6Xur2MN3ASBVQSYx3+paH%d=b0`Q^0_y9i}yYM+4!sq5!0q~{Zcr4$GZa>`(HR*WN4*-`bP#Pm*XA94m zB2X*%1>gz=K|{pM=+XzAO1Uhm1>i?PF~8%d_nzOCC_?$@CRKlp!2Bt=s-?ojPha>W zaO0dJfB*{0lSJ%lWOG9Vx>>XYaFv2t4@Imf!3rnM8w70tT%$nDuYZy{+{1nAtOxA? zT&G~uM7|36?3YidNxyF?0|=zRu1L(HX7t6Q8N1~o05>RD#{Wg9`Tib5kZ1rYQ%V27BM?QC@k0TcHQ0D>uC#u66nx(2U(I={OUfDj5q*Cots zQFFX;W#Tgp0HG9AP8GA(A4lQ0_1KJV0B%v>y@>xrBgo5`1^_hixZ|!hx01*_7F6HZtBTwS8t>TaY z03s=vW+`B0^95beLtE_|2;dF{(R^D;!GU*p*0$Y%ApoK%_|A_IHN3c|DT-j2Fbu$5 z3gY?UnA>Cq2N5uzJQ6@O1?!gc(O2G{ieR-aaYXVC4yT$ym4JP|MlMK3TD>v^V zsY5vE-(cQq9hW5ecZDsU=ml~soB$6TOJAVvt;OuR${9Rvn>bnzzgBcoRVcuGO|DJi?`8G^^pWmRhcBvTOCTfhX4n{b-mecyTj&nOU&m9oP-v=*XI zslDMQ04WsI@-BP&n8aiRj*Z?5AeDmC7nE33i>9oQ6Qt%_ab{C`kMuWvfE{>=DRrZwerrf)k};mU4=7{Ko|FhA09T)TC>+hWIg23)eHURP{$Y>>DSDiYqM4-!z^8oTGc#h+mD0s%V0t}qoe1tAGJC7oqVnG1jQ?Qut5>dW#c`gDYNmufr4(@%Bf+_?kb69pmsC+a!1r2zsaJ)!}8 zrl3|&$_^TKVhGfnjsZ|X!DfDkMMCfAxbzmF_7K1q3d+{~nE3KsFLVy<4PM-foF`vkx@3RW)VmtG_d$BRRT+B^eLMZvQEeBJ%) z2)u46XkZ$EY6|A_Dbl+pD_^4~&AXNk;5!8;d0ziay1Wnp@#{8VXt+;hk|(*8~)yjoV8AKPfoBN10WnDnuY4y8Q~kFA9PUl-cg8RQwFqmH7aE zQ&8?C;oBKnZbA`Ky$S);QlQ2&R?W}ba1w3s^$mbJ3M}{#uJf7JxX$%Lu>^qWFf#Le z+f2j;q^PN(d@|~}Pc6(e4r?f%oOEcLtjVrvQj``Jt-M_C8pM(!%Ki^+B%eGdTr9ueIpH=+3BNo1v5n=E8hza49)i{n5bo^s zFEDSlYx^Ae2yr|7U#oUA2p;$teSx}+k+P`*AzlF3wMQs`;}jf86|qa^PjC-h+4eSo z6BLN9N!Z}P6NAvNX6yV20A>^%(x3Q;JkdT5z-bCrYl_*u z*pt>M!X%Xh0G1TkSn}cUh|*&SOz83iz!?e_@EgjW*zdAK;81Nc04oa2x{6u#58amt zxWuOdu%=*mnUwkEo-{!~^?W*jvlJ}gyL(5CjGTgiYiTBca}=nw=QknwUc>A8-gU?U zU_*i56DfNp`nCu~2>$dEfGq{*KZ;qB-40y+nCqAaz>Wgfhx~h}{DsTN&Lj;FY{lywlWSp5@#2L&tmacdpFwGBkTQ&J1yA_cxYO^=+AgkO#0zZL5K`uq2! zpzyemDQL%Aq6jTwn*q2)!Mh4&*5$oBerONN767~`P#ed84=x_6D8kQPtpRvbU?h_= z*U|115$L4b4uB5@R{Z9ddyD3KAn-U^8GtVZllh${8;_n}j)25Q1mH3Sad!o5wN+5!<%Y^H>}`xf>c0r*oeX@!Js4_Sl9p5LuC z00dBwmdY=r?Cz_99{RwFZUC-QV7f}ot_-xt<-;eko&c^*=4}j|w z+*IUu!1Xo8HB;@#z5oI#_!22$?acnC5YTpCKL9rI;_Se?Er1i26a`k1KFCebZ)L8N(tNf{;`ealM~l@%e{2R^+4F~ z-(cSA>QTA!OT+TR&^;JEPa9M9xAgTbJn>ba7bMjzPujO;9odcPl3Yct}CYClQ-gRD=t3)j87uJfdLYQ6=`({C}?dXmfQYfH(>s zZx*nr11oWrK4R}|0FNo?!;hl*IaipCo*^f24uE(HdbZ*x{Adk*hQN*A^8h4JFey)! ztx^*AKp9cgV zATa&XasW>$kn@#m&xUMSg}{@aD*+@^P}sgbD@_&PDt)BUY5>nDINpSxE@@M>7Dbq` zeJy|#3O)=Fu-vhR5(EaHUJoFZ0?T#+R&~S%Z!^kK*#sbsg2ne$SlGS&cwX$oqb&fQ zQ{eNAe@ceU^iY!?+}aKxoq{&}dV});hkGHg$bT1r3<}~DL@a6M#is~V9o-8clY+w6 z?bu7>bPEJpX&nHNML{&*vi9O|H~gFS>US7GHU$%gN!jD)|C6SF2|NNIhXU&me)C1M z(VtM0D&`*p@PdNgEtOfTL3yqS1Wq*r@REYyS|NKr`yrlFS~u<#fLsd9`36g~9_%BE zFlT@zfL9bW86jlSx=x=FxcN(aKKp_PIIzl$sLa8YNx-VS;6j8A8 zyO8Y-uEf(TlT9uFctgPee#$3b*M@5o>kK>r6jNYoC1Ofu1Mj0I#rF0F@RkA(FEMK? z+us5KvCwTxB+JzqbmCVA1P3fKm$f@UoTOrFU-; z$ozH#Kp6$9OGHdyR67mFu+wfv5NSHLX*%RBTpN&O8weuYSA1T;T%`byb48TMBIXCVC_(VY~UOCt@rJpv6pgkuBz-J1c z^6ihybqszXaIfhD02LIJ=ZTrm+6*ZIJG#dK_(DOe_5!|8d2}!Wmf`ULzEYsVbK<#z z7yS_kUYP`-l7fE!>F#$QnT)^@#bf~AC|F^{k6YVuZ~_9GYEl4HQSj`RkgfV;Zi+xy z@|R26a?F-GS%=sctt?6?;8NWDbVA) z-4lHm;52>Bj1mB~6rA9vKMb38`3?FWf~!ga)KT!lLc~nRp2c$r1)=2tOox;C$)+Df z?Awnn&M2R3eKD}*U-={l4djy#f3BCMUE47MrG@KrZq&Pm^2x9kF0w0U+L|GF?bpr5 zAS$-IY0R^>|NlOaov}R^RE%Ae*2V#CbG^DWwO&Zuh}*PVvv=iY zovo`^tsBo*x7G&YmY9 zesFp=+Tz+wA-g`*-)wQ^pI+tq^K!Evo}Uo&YMk*leqECwpRo33B9x7y$ZPa9jj25^Fcm<=MPeA^PIgSHEc0GLrQi?7a? z>Hg2EN0lwb08Ub{oB#858~YT`3m4uj0bovnN?!r z2Z0l|JI?c6tr;VCtU6Lc>{r)1AYNG zOMx1{AE!;|d`|>4RO$enqhQA;WtL{{&;bPtus4(M+PFc(82vjdt1Yk=+ z9N%!<>dy_EPy5ZYUlfu5M0dS$9)LzIeA`{vpAW7^9z?Fh>ej#P5fA~2Ba^7|Z z;6_2h0={KUCmi=0-qX7RaHpWgQNmU(yEX|$IMJmCfD05H=Jk|j`)<5PAU?4d01pbD zt>!n0nhn57g8dCm02e8^x1S$nntMncMc6e#8-OPT+VMhWVn0_Ifz{3f09>LVMqSLB zRK^cPz`x}n0A3V~spPvvUX7TDz`&tH0C-cd_`R6*pF9(1*$%6R0q~(9^fur4{j?0H zAp^rl0Pv-t`8Xj9Jh^%SYSQXkqX1l{V6Tse?b~d43IV+qV*y;DAa9<4RR&JM|8c2W zasYl5Xc&mu-Z#^6^>0eacmVzs9Ol)INv$vMMol`Zt_vW50@rCG7QLhue)&XR48TV=%u-}O9ANKx?L5T4z0D%-}ZQ`F& z$pI}CA-t6VfEyG9^cS=4BZ_dp^!@uh05>Tx%;wv&n;gbXs!3W1Acz8iyO^mLms~|n ziderGKrjV{Q)80=P}V@LeJ{exBwW1crET1`tj` zzh-J|SKQ7_1RfY~0}w$$D<)+2>w}XJNYK~`Ad-Ud@d9SjQ(TL{$?LlT+@WBb4nH$y z5W{P3&h6R#e9jSK>RSMP&c9W(0^aw+6+?%6~L!Rke_z*3t6{KmPN z7Ktd`*YZ1FFB`5D+%Z*?N3NQhi)iha6aPecdw;H4F4wrT?ggq8w5a?;8>tk8%~&Q6 zY?+yglKsH{vW-;=zI}F;mxSEjfbiUJe*!m%d8<=Kr^`)mp279Cfh{fIfn(_lq{Z`? zyou9aqc`s0c1r;FDd_!P#FlP!z>`j&A6o%gEN4~6r{IOVaJ?>#RzOO zb^{PkK?0xVwXYkE=Od>N@&J%PL2EwQ@wrSQKoM+jcmhbIpf|sjc1Mn9Is(VKdILzJ zpp%1;>7-fV1XLy17r+w=)K?0bQKnNliclr<1Mrjr6I&(rJ6^2<0hhx80Fo&vU%PC3n*0Ey{fK&=Rnh01@$Jcm< z=hwIp0BIB~xFuqSMosWH{nh9efaes zAcKOzdj;(EtQJ2J&~Fk2Ad`Zg{A@Fum<|~TI7p%aWKqzrO2~qSCgHrkMQJR6YzmrI zi&_5gQ#ey9i+Ttkhl0Zkl-Z(Izx+{?+~OVsctOD_9VNz|u3Lt{I{icdFDWqgRbgfy zn*<>+P5Kl-E(KbT1Wa~b5Qo5rmCpdYqF~ZkCAN3#?N$glW~Tzkqrh>vfMu1BfHeMm_h=8F(4uIDb*t8R}>9OB&y>ZpAmjDVW z@G23rw~OUlP=wj9@&FW3aPpgomHuvlmpypezXtH;ZvekPZFbjIcuqBN_!|Jl6by9| zu=V-t2csr=q`d|3mI84fRhH9UJ_>=F2!5OIf7bJrP%zI#!ZHqMuSOvKWI2F$6xgg5 zFk#QZc>hDT)=w(I~=+gS7xYQeeTS<}~}h(MKS+ zQbG9F_wb2=V18l5fNf%&btj1w0eq(5)qlPRjROfNLZ)L202LHW8^w2iiLWUkF!f|> z0ADDmJ+91ZS6AYPZlcf*z*h<$juf%Cr}pAr>@SOsMM`9*0 z-j2bXOmzT1DA4R7Vn%~ITB3(m?A;ka4FyYH@XPy>9>*iFWO)|=KPec^Uk%k!k<$=3 z`Jo$tUleGaRAoOsLSqov^`$3(-xMUz6|(hxzG)*6y|xd4S_<^T1WZvOZZQJsIeh`t zQ4mn0!e-d4>4SjLxqbjlN06E4xBPmOspjvZP(HbM;AzQUzc>yWn0X%fYMbosi>8Js zExbO(vfee6PmWA>lkM+oGYdhtn`at_Jk#-S2TVS#ge8~%1?H``{uL+hz3w9(KRflchX+1JU!c}QRawZy zG(3bk`p^-;aSDb$=a-?s%GE%xXrhG+fD;s$d+;spEAHWv_&}*U05b}vyyLx>#t0V_ zA@`jJfRhyXiTNemXM$QF@XP-a0CNhwRtZ_DtP~fwQuKZPkFooX$NGC82i_hs?uGVF zdvCdK4M%(LB`uXw+S*n^Rzo2xi71guiDX7d5+zxg6;YB@=yyKv>-W{?dS7q7KmLC{ zu5;Y4`*ok|It#!l3aa?xIgJOS@Th9;S04bD6rAU`MYo!7-3m1+WWOH(D+;>v%T3pc zKj4+jTT`wBu%=*?6Thb@-qQs|7`5~!fYTIYcjuEIk#?>KOs@(8U_(JW6ES;r#T^$) z>%4CRu%#fOm58ysns_(k;#YS8*io=~j)2*1biv7+%ZmE|>?v5#OUy(oB{(e^+b#@% z0|l=9R2Idt$@qnudF3I1GZbj?Ga|fY<#W-0$xIvx;4B5|+Z0(sMs6JfC3~X*oTEU& zPnqd8c;XWroS()5I8T8pzr$hABEbL@VZzdQ0FD$)JEz31KQXc*+S`&WwKegIhB4IRIx0erSuCZppWn zD8kpQ7XVx+u;q!*B)gIL8>c$$C4fs5Xj=-Hf@r}P6ybVBCID9ohVh^OTmH8A=YQI| zHvrrys5rxq`P!zm4n-I}C>MY`1)cdoPf^$g&z78y$_L;mk0W5F_7Q+L1@ra@Sz&l9{DTtcPzm5F1mpzo@Ew331(p14U^Z~FBLW-M z>j3yu;K5IfU9F*vx0R%4Gyu3xK?R>OZTOUpe}Uw;H&^~^D0zc|spFN|q-A5WQIlT& zYzZKM0@DNuGhy%XyqNE-HUMr?;FKg}6ZImlp$IWA+5rfppv@i;o8I<^1p=1#9RLJT zkn&8C9S%3_guyQb0JkW(*+InAopQ0o zy6fL4Z?BPyj_h-YhX=|h&$|7lf5<0;Qgmd6Eer}#N;uyAxBXK->1696o0=V*i}17m z1@l(h3$tXtM*CvW1EgQI7djk8A0VeK5_V?($teg7)Hwhknu2CE$}BypIZi-TYK#EH zP*BfLDji+k4;On~ERO()r6A;+koB0>3$LztQ-2IV90kD#g{-6ZD*Q#hY-tSOF$F95 z?k)Yo1pEfxA}|9GPl0DM3A=Z~Vl4VEy*POiKmr9}w^UeC^XGWu#-V|h0G?3b(MQY< zpIz__MW~Ip29QX>jJA9a!$LtW0-xI30!X5u6`z{uld_@!fw8vs0Fo(4=f~vk&o}#y zz@=|z06e8&7C&U=*?hP82vj^6+m1W~Nm+gkYSO8Rt^l4>u*_D-=Bls6AT`AuKpF+=Yeg($caj)INSk#TzzYi0 zc*d&RLeUig!_+GP(kV!uC}OtqGw}3^zo8F+3<}2ZJLb0^ZdZ&VEdF&3z)K2lu2W+B ztw-Y@XFa3q0A5khbFngW71?4i_Co-GObT8qDzhg_BXLRm<@z81uPNBEP00MFKbwjA z;P5dRKo$i~_eHE-ksh8+zhHM4z#9qz>&5J-$?DN4f=bu>0J14)rLMwsj@9i(V1)4l z067%M^%b$#cY4SnkU8}sfLsc8*YbsEV+CCiI9>P%Kpq7J8x+}#hYD{H2pAI$AfJL% zUlFrexGe;Mr)OgUyrsb6v5;l$amMeZx{>h!3Mg>l2lm`lSa1SGD7^m!Kp_Q*#Ul3V z=L`JSDBhF|pooHSdkOQGR}M!Jy40iqD5fBr?^|6oWQivNC#F9KP(nffDFW8cr`c5m z`bNC~P)fnCC;_WG-y9cN^@qI#@Q#AP=LBqYmvea0j$KS9fcF%P+a_lAJxuXTbk@{2 z06tJ)(Ore{M0QgA3 zeKSRN^PwGHc;sSG44{I7@{fFuRcC}RYLcPCI{=jwOf^tp@nv~9Y1rWK0l+5;F1Hl1 z_A@@>LcnyTj{rVX(DIFlwQ%ga7Bwj~yb?ea1+_;+%yp4pAp)-Bs{nkVplg^Cd(+GP z69RhX)c~p~@Hr%AJuff9E0ts=H2}U+P|qj$>)SlULx-v*-vQK6V8&D26FG->peF76 z@e{x|3LdM8S!vm%ISA~vX#h}5L7V%^tn0f3bp-O2n|JyvkNHl)j~`+-Iwjc)feE)- z0{B5evljy9p!5cRMdie80Q{sNQp|4^I;w?-a7(?~0jQ&3L_Z~F(XHe#YSK(m2LSaH z=Z*OzKdYR6lr|~GC6mw_ z-+`ONywydqZ)FpsN*1A=u>*WR_V~Z&f$WSOyyU0Gh2z%u&^FhXqbnN)-5EP`X@6(qQ(A#tk?Tl?>@wt)w!_L^6q}kHp@n?>pO|JWcs~XKe?ToG2 z;v;oUE4YEsmI2jGBi_1EZVl2+zm9ZAJ7b3q`i=f^XRO3-pKPq*f}LoK>&n5u)j#iy z9kkC+7F@Ss4`PRg{E_iC*0d;+Wo`_`Yfk#LuZ518&{u{Y>MvpWQ}l4Xxl?Qd0CNh|#!1+_Nji8m`>}iTo_{@^Cn+fE z&kyL?)uR$Msn_h504ykQ<=1v9tWm>LLW=uZ12{#2ivtHeZE?x3)rYnKEGh8hSC6(k zV1|Dxhs>7)U`4?ge-V=`u)=Bio_Kix))f47R%Cg_FL63JPND?hGzE83B`m^zs1N!t z4e}5Iu%TeUG$GsmC~+YIvKlb}TMFXMMQnJxIXI=gsiFeFj)LucYsez|P+Yu-Jl+w2 zJq4?H8uH-bSbPlV?TF3*94Jr@RAN)Uq;E!j&}`8Sz!?hCdyAOEhZYh9=9%^YaF&9q z0A=>+^~GQW4t(eZ;2Z@lJ}EKh{8{)Lccgb;0Ou(%3=y)l2_NxXUeRbZ0FD&wju){x z>m~SUozi>&fD06~Q{{&}dF{YicJatT04`GS>NG#A=6tCF>a@=6Apo2x*d8Nfmp#Xh zK)^_S7yxGqRt!{RmtVK)jDWA{2mme=yxqV@vls5@A&~Aq3cw`_-usD|%B*QP!rfhC z0Ju`nmv1PG&yd5}UB>2d0Nf}@DiyGZk+)i+CPgfp0KlCB&CyD%%IW|fYnFPc1Mr|A z;e`?#IN|n26k$a_DF9Cjs(5 zv0-Vro}#u=3&0f$hSZ5z|Aof}p(d4n(FWj6LDy^ndwgT7JOT?Y%>;0jg4Ol>j-MxQ z@ataLU=9Eu3O@3C2fC;>;AHJ;-}wN1DQNLb%=%4O^BgtF`_)1K*C=?lK#^(2%6cQP zdessDeiW2klQ0|43|!Z0m9Y$fKLtA$NSJ1#I!_KXodQ>R5%XXCz#TPdj`eB) zHz;r^7c=)Y({UdZ#_0eEpkUoZG3z+=ggJ^}l&cHiCIy??DKqBgXo$*fM5z@r}3k% zbNkyNP~Y7Ez-3Z+%?6Sktfzz#R%E?&Iquv~+Q$K%~D1z+DP9oRF~M%zgO1 z)Unxq03j5Z{}i#EuJ^Q1AKYyY0=P%PS0jFfm2JcW1n%`b4B$Qmha4nKJ@gQM8E?-# z3Lun%wtN!yfNq!zieR?v1b_z=tX2@Qtsb|E5Ez$i0w9b6BYyj(Wt(|D5$L3E4j}v= zfP;{^{rdF+fx0RS01qknb%vj_K3f5gH4MG207OvW!e_YZN@jbZ2y^9a06e0=fLA+A z8d~2&K>M^EfJh2<6e+Nm&R1HaN`d~J*M0sPdvnml%<~AF-BMM{W9}&7e^s2-=$fh& zyh(JGK6xMFiJ*~k_MaiobPTJaq$yAPokf*`KC5yXVUv}DF4tnDJ%fIFp>#hmIk!?AwdzFz~P2bSgk8|CetKX;=nBY12AsuTn)|4si;DOk5bM;70{b|FgkSFQMM zn@slkN@g<$H`!YG)x#0~{=Z<}YCoGdvVd9h@t45pK@oH~iatP_d?d^`c<2Q5#Fh0g z1rSYvKu5q6c9MOc5K0ze!E zB2N)Bx4nZGJjFi!1mH0Rlg9A7G``6nL=l#$d;t(o!6zdjyYXlx&H>aGeg%*~LCq5- z_U+KCY81im=BaoO3!BmjZY>E8h)QV`=SW^-@1iA6wbS{;BS3LXsPOLtvC_8#1=X=4R{k~!Kdt8m3IL>2kde&qX6!T!|NL7kiU4F# zU{)_+FFv&iLZ1UG5(9WiLHHMCcB;bmA_DsYlmWb=;P!42^N2o#$InL}sRGEPU={zj z{6sM3hXLGEH?fFuKTAv?gAi-0x{n|d@x7@FQHLT?+)M%1=3kUwzF3u z&WVNYJpp7>;4qu-t+Ku|3-#evb#DMU6kKpuWTGxkbqEO7_5+YhL9{@Lbx^Ry-?;TB z`UA+LAe0}W*?!^&{HmOsJ`g}Y1@hCB*0Sg^52UkCgzm5PdH zDk+e8@^XoWxeWrN=Pdy6iGsKF64q}>3Vz)yGty`=G@RfpQ-Nfvc z-SeFYyjiynKn(?VR0Zt%Ew?WSq=v5t@QniPBg*Xbk(liWEK}SBpq7HOd~1xd>*^Z_ zbX%hb;5!BPAMrHZYfoDQy!^HT_(4I(jmj)!fMg{Ctt<2a{G`A{SHyN5pM+nPxpNHw z)KOr>uLs)~c>WpkOy|y#N79r%RRWYx`mMa&2%F3&&C9~2lbrm8C@ECg z>D4Hk&LZrYbD4(?S`c40kPr49UKjo8G&0SJN4Ey5P&%aA>a4{kJ_AvC_;=h7{Eyi z(&i|!#6bbN2v{Du1Hgg;E&lT#+@c6q!v;PL0dR_faDLu<(uqYlk7;EW3c!+rW_+FT zy_xglP?MtT!T?xN;4b6UFgdUJ2^thcw10&tpwM1D(zok{Ns z6yeRx7yvdDY~_{J#7DjHkHUEQ#{g_82>&Kwmv^kfW&Oc-69CvzFzS&Kt2K(m@5i!X zNdW9ADBwHLj?8Ph2lb(c_fr546zE(Kur}d6aMnHQY$|{=6f7R1$VNPiI)Wn9d`|;# zmV!8b2}(pm$5jZ-_sIZojshos&|(<1CV2oZQc$ZbWLGwB) z{1AA0w+MhU1#xXu*rlP7yAXIZt`vX^1yvFeD{K~KkAPF;djOXx(7&$C_UJ6bX^G#W zasaLrs6SR>I{EFYP=u|16#(2Q$l^CA7U{a<8v3%Hp8>d2u>OvasRUT{LJ^A2d;#D= z!TqyBrhPm)9|22+8UUUY1o3l_dYRYYH3u`yYXMxQpflfP?dH|o1Vu=$_yNF+f?N#= zGdi*eFSOX7To2$11#33(g~_kxo<$KFbeawLYY5{_!OUJFmXNK6Ke(4EEdX4lV3fUp z>0SNX$0*8|#W_Wz) z6$Cc4Q~=;dL3EW08@EOdr-yxyDgp4PKy3`)fdBmYJ``bwnh3yk3Opt#F{3kj_-U;? zD*I~o}1tOlYiv0D~ATTVgD}X=> zv^NUaj0HaU7ih-09sq(UIL9xvXM?tiQ3OY|-T-b<;LwaOcu9EJ8i6greE|ehAW#;w z_o1rh2+SGPAHZ!2-aintQ*jS}BA|L@Ab>j*_{jKag7#jxDm$^q5CC^6D7`9XsSfox zCtgrL3_u74)qEuIR()hNY7)~M3E&R0D&RTr2xVy z=-66?ZM-@|6@gPUjPjAlK%8H!*n&<5~`f(%m? zmOrn{dIWSGW&nt!z^P2gmalCkMET^>YgU6{ezM7Ya=_K?(o~nerYJ4E)a-PlYbu{~ z`|2Vc+N~pA0^R$F&7UF9bPo58kap?x+8pJRd1AXp*knF=vLHfgmgU>Fj% z`Q)yton*l#cl8lnxZC01C~xnc1|8Y179T2fx z!?$>V(b_H$Kr#h-Qn zz^W(&z%vSd#!Fay^7SbQG#G^fNTt9zPsD!sUiC*{Xnh!f=M>x@EMyP5&BnjAw#y>` zq)}kmLCAJ@mFz_kR(V7Mc<~QFUd%2%8~PCet6nhx(kZYH7c#4bK6r{qdOQw51_get zm6_Y{i=ik&-)-gxFsJ1ZGLCI#pDIY=$; z?!bMxu;Uqk*A#qF=Ig)fOpl@_d8nlU$fDpsH&{wc=E@^bWRwoz4Fz*H^ZK)c=`95A z{dx%?n}U0(0+wqWu>payoYw$yC|J}%!eW$H;~~tEo7n(zDTrJxWUg~g^g|IoD(3;n zqhLiRA-gs_UK0V??Y98(DR{Y^UpV!B-CG2lWkmqqQgD@TrF|T_4}T65OiBP0P|(p+ ziK)5x;o=wrr=Y)G8>?| zXcz+Otv&-Nq2N2eu=wI}6Z}aB7=8gzO2LKce1(i$56? zj?@BpPeFs9kR?5`-->{z@=pLCDDdwuX6JIwYarllT@Rp)f{Dxd^{JKN-4Spb-E7ET zL&%;P&>Dn5+#LLhUU5`ZcSCJ6XW z@wxKD5$IDV1n`9dp-7P_36G3IKx!xfP)$LqftckSo^=s{XKhshe5K$-OEELPR(J@3 zJ!?AwsG*=togXCjtQDTyJN2mxfNvC}-QXj#t-o-Qb;-Hz0BR{v_$*}k2Ug<6Q+f)$ z0DPxFKUsx!^s&c3S>8wb0Qf;c7T;Bx^{z913Fv650r*M5)|&!0WX?QX{kSO_2%wIF zp6f)+_d=Q{`nRre9SoqJf?51PH;?Cs@sHw!7Q+BEP@tNq%)V{Y2tpC6Du)C3MS;s< z5!;yY`4s{#H%0+4Rwwh519bU{v68q*luz2fKRq1gC)JyppWJuAP2Q=!-m|oA zbWP=xrCF|0&nQb31Q)fo|1;#7PE<;i^v&r2E0j-8I_1y^o6IK<)Wt|wOgU1Dl0uCM zXB%bH`Q(%VU1XwU(I_v16$S6|MxtQow40I*JxO$ zIh3Gnt_6u58wK4N8@9Bs^w-Y!wTRrR>(mtC?J|s7Al==eraRghJ8V*yM)D6kV?QL$ zkjm}QlS7+a`|a!6X#QzuY;>l#v_-+Vvj`cMbZZ*%)-C!~CsiGx*aq#4{ZjfH{o~Hq z`1&QXZHIOYL|a@--~Cqqyfe07&>5Ll=JM}|<-PwS<86GgBSEGVQ{Dx=8gdr*f{vNc zSHqIEN~}%rYCJEzW>g;lrWAa*%WH(OM{-ewal88gFr%O!zi)N%zPAvYYrDGJoAl-QzO zZ>J;hUUMV>OA6BY@d(mp_gW*+v3N89D+(+I2-tV&3Y_@2?mrHIH3iKI6xlOZU0iP- zb12egR+K%R#j$!mX`S0oYTpJWRym^AC(cKt4bVfCB|aib`zdyTWG(7(dkpaE5|v zUgDY1*1r`3KMQ97I7`6@o-|)PnBssyhk3IBoTK1@3qOzT@Gm@0`+i|Afb$g8n&@=%t>E09>FTC|k&eUU0|DB&`#c0Jum&=P^o5zv={D zjjhvWIRGaLT1*tMA4Uvk6~Rd>0XS2z$Xdj_^rG=M&TjM?04@|<;CpY=eZF-^pF@J1 z4uDG(EWEAER$mLXLEzyzT>!2W%$h1C`v_R)c^%9Vn60D_;4%e^X7JlO zeEf_MnABqj051xvP5Esd7ejHKcZOsqfGZTV3{qmz2ghwh5tJty0`R7ww7Ck4`?&fJ z0^)^x09>UYeF$F_-+mfSIKSBM1K>kJ<}G>lvhUO+6v4XpK>)rKY?k9Y_A`UrRnyJK2ZVZ%1pye9}0JkWp;^lJ}FNcE& zeAGM#Aee%l?fKqYt#6+ZnDx>Tz-Ct&`U41~;4?o{ z?oD+)uFZXXa|1v)1w(2D%s9c>8TFxXbRd9-6zuCOW)UAo_Ca97m0JKJD43QgVKwoq z3K8h8cL%^D3d*!3ENsL9V+4HDLjXil@G?V@tvY>2genC+BHE9Kndc@e1!0E!rDtsB z*P?{KSEgK}YpPPPLVQ_jX;Ea2VCE|MKSQ4Bs7{WR_B%DE096X|G8GzOla+!l_v54; z-7IFKbU#<1)F_*-6qsmtmqj>TorUO?LxO*!yuJC-O|o&C`{YoiAo=ib`iDw^aMpO4 z+K67MDB0h0-Cl&-9Q_~gfBwrh4`iliE2QWFO3ai%hok5N)Y3}C zT5DNaA<$b*6+kov&HM3FDBgZ8Kp;=26Mz^BLRJXaIPcQ$2;@3;0T4?;DZdPTt-|4* z2+a5E1|W`tW*xmJW-iy}-K(HlTK1mD)* z3NG{V@v9ZRZz3So7zQAjf;syH?6t!&{99WcGy=d=3cm3JN`@@&+Y?2&7dr|-3I&!A z#jM9o|Ahz`R*eDhjDoq&BKAnjEDV97k>dfRQeea9U*1nN3P8ZQ^F#p8DHza4nMEYn z;ygywX%c`m3etH_oU`Ja8H&*VlLmkn6ii>sPd_lQ-iJU|xC}r#1qTL*n3;DG9$=X7 znG7I?8#jjnBT@G9V*-L(L`q9B&9Vp#EG-Bi?vOB=NT zWKyt3SBaJOGz>(*WX%i!uPG=>6|n&VsR;t7y37KQMZu`+{J8Gdckx%$v~D(lHxzW= ztHOpw-^Fi@l_B#0WK*!p{ z7I~$h2;Vf90m!2uT~5Rt#Vafj=yz`gfP4!4Blr>g!#mg^psu|dz*`D-m`d2QNOPQv zNj%m9D4@VBoF548DOiRgnCt5TD5M}RQ^0BphvC#}R>%ebMHGx3pu}cRw@5<~O!{vI zP)tF19e-6Cgj_~I6ubpM2?g1MMNA~n!c(Np_4EOhQqa4-kZm^Gk2~#@yaT{H3iQ`X zSl#6x8&H#UhwcLKo`Q_UJWao+gh%K*Vs-=gK!FXvg>zlkTT@U3xeogPlu_`CPyWSB za#(@DT+agl$|(>X7cz63LR@NSzvmEuj}%N6@QjNhhx4ZaR8t@~Tg--eEDT3LG|>*gR|=M7 zN?1b9hW7}Bm^uKcp`iOSCD!Ff#aaZ;3eExeMnNlWUbYgJ2oNyX=Ln#df>HMcOtZ}= zTmoIFk8l}1$}=C*gQYSx2O*_ zdp!WuQDDl?E4-%J9@l*zrd|e6Pl5Mw30q-&48QqW#9aZ*@pG z7X@mTy#795i~{PzsAJav7*8TI&pX2un3bBzVU$lw-({%7Oyi`cW}aWI+AHlkblZBA z7LKWZ+31?eC%5EzNY4b$IE|oY*UUddp6QsGM@!#jzj8zQpbn)V!O_q+_rLqMO!b{~P7)br`ilX5X!{J<2DIbbr%7a0v*iFRD9{?t4^Q3K2@fUxcUA&8MS&+DFKEwL9gmu{>Fs9# zmK5Zq3D~WxA3h@B7+(#*ih{}ceAen?F#Z+UsP+wjH3i#NizsK!+h_DKQBwGQ1^Au?DLx)z*?T9nh z;on369RC6EqfNDgTSlP>2`7{RT%cg$SS1$rUAqv050$C_E>fV$&q6hSQjVA0_A}}X zz=?t&J{<0_W*c6v+T~eS0L~Pw=evd`SAE6*){*u-0Ju<)+Fry)wRKcOeHhWAH-JkN z9OboJ{e`#j_rd&ZUjVKYy!fujmR+mCC7(_s`vY*JK>v#p`|4G34>d`!i9|zzH1#Tln?1pMOep(MJO$6Xg!Q(tJOPlv79W`l= z$s_<*DRALOkSDw~z=_YNGARHb3c}YYvZ%;K_+{L}axws43Yr%yvo4lD%2AW<4w(kv z8U+`|2-x`@-)-8=+rr!E3;lY#|$5;k09 zjUT?m_$2@WDNs<7uv^9>G*JY$W;uW$3dW`jnP-_Q*c2b zWb+@@E1?K8jSK*UQgDB^GCNRTV~>D-e?tHdD5x$Jv8i*G;a{NFE%yQlqrjA(I-n{& zjUSEZ;Qau?De%57V#|JRa6(O*s%!+{Aq7L`N!b1ca`-i~^1xvL5fn^aDr9{|e#S2{ zv+|<=9#N3+Qoy_pSoAwmz!)$+0LWi@xA+oK0aW)KSMIw+qtQ^2|3i|Q2qWuCtc_N^a zT>&7Cf{=GY_FA(!t{jvt`3&F%1xL*UOd(1We{iyAUjU?2aJh!x4m@N=IBL?@?lk~1 zD2P6;#LBc*;hgySjamRNDQL%!qg6$K&uNX6l7@e!-Vhr z?2Ul(vVf|R~|wq$bbDjZ>4R{%v6Xr1CuYi=|A1#-U89Y8S! zZI&xDWAC=FP=v?Iy#SO@@H0x8&H6Y5Pkx+p=mVgXf&*2`O!##DI27UbC^Z1@DA4Bl zq|nLmHUbYr2LO0aL4&D?UC`Wz%eXPa1_Ss&K|2Qli=4PV6h)BP4h2v~K{vh=(5Ji% zk8ZWwjsQ?jfw@$HwRsnhzj0lxM*;XqfswPAjU9Flf71Kgj|EUcfeYW>5c$}zIqHM% z`SAcMDY(z)SPkT=P9d;+mpXt?6zJVkV(~W=@hAN(K?A^N3O3~M+Vy3jA&QXSRue!K z1tCn#mUuVdPrALy6aZf+=zB-N22Q%Kf+DQypar0sf{yPbY||2kljz>2+5o;%pnq7v zs;yq*x3{$COaL_$%zVV}@e*`vgPP>LbvA%+6ew;Lu(4Ki9wU(TY%YLW3M9O2m3`*I zG6cR(UjX1c1vY^qHm>rADgyTR76JG{!OtWSn`AN@uWCs6wFJOV3R3uLtCUU64xtDa zW0wP{qhP`tA$vQ$&0z$tv{(h8o`RB{@+_}Uq8V1bouhz{wbey&b=u+6S=4t!h@>+2h3Z2NWV-r%Y-j${Qt)q840EJ?RTx#)c(Kc zf$WT(b^M3Mnq9JqXq#(^$K*yqcgD^*Fi@IO8ElQntG82{BD`I4F-xVX6QVQG&R8|I zX^rF`cE(!&nkx;y8F(FSa$UYntI_<^&e&EA#=d=RBAaaWVm;d8D!Tq#{qxS)pO&{|k4jocBj*2S#@l$lxLlSJIq4gE zHOObpgpQfeS3?UkzHUY?ItGDNnsWe{Qn1KR!kTqGegT0s(enV9Q81%}h^4g+!ZXiT z2Q36(PQeC#PNJvllDjCvIJ3n7PErsTslwFj3~+H*Cw?ga3kv3xD>J7{mNh8CXtn~t zDGG9WDzoPgVsNq+Yqtu3B?T8wOW0vSog#|xz<&(@D+;{$4m8n-V7$Bc?!3ez3o8&jue#hbHGNgwZ%)HwHF-%aDf8%MIt75V6_|S!+Fgk04`FH z%vX7RJno#z8oQ&Ip*+D6rr-k2>{L%eE6Wmq?s%5vy`A{0>FiWkUR;~ z>F0*WY2z-N0k}kgf}tWyeWZ2(HR+(T1prqHR&*DzLpl}C2#k!d1mH%2ZVw4NSkrM1 z0=mOa18}E6j$iTD??QMb0-qCY0eJia@D;PN1%FG{!e%-E@T4G9B4*jM2jkBn)&4Ai z%M{!nEo6S<&2YJJ*m6ezUKG@+%CpN6X)34>OVykJT%kah=Ph|ZuiyyXEL;G1Q(&4Q zW;aqaMJR&dJ68Z#De$u5Tgx}4W+UKS=mEfo0+oCvHX#1fWCThUdI9jIz;;|su#0t*8n%Q#lk0Y$jB+aG{G1yw%;>_fNl%Mh6N z>;{1A6bM84@%4_kBM`W>B@n<33QkQEvAf0r*AcL47YrbP0%vt)cBdifI|2`E?*O<- z!6z3XOP>2^3jz%T?*Ry;pn`8L&p9!AE&_U9p#Xv?@W~Leqoc0%K_KZz7=T+8I2o%l zlhxxFA+Ty^1b|=)MjTLOhvx=PLts)xB!Jr#G~=b`y>)i@-CC&^1Kz_N$1A)ca&j5r{VEkCjh3<4Zs5m9!ynaHWdxK5V&dgV7@!VUv}D zSMmwcuP?jTqjX<=_NYeLbfuuUuB)u=gc)BEP4F81Z8fi|A2X`AGFDmxlbRB-(I!NCP0Uy z=mT_iwGulxJ!c4d;!atq1Bj;JeG37z(JsTYBaQ_c0AeU;H9*Wa_1K{aAeI7g zcNMlnC3qcb(xzTh0mM-dr>DT=$Ar2fuwbJWfX5VM@nc;2YS`kHInATA0mM@f#CJ1J zF_77y2yN1407#&qs)6sw%=E`4zZGw00eC`z_9uRg?Jp5t`!g+V4uC`o3QqIGQjZV+ zg_<-sX&!(i3Rd$2tlD4G{DHuTm<0fmDHzX(!`^pZ;;Q`C_(cGoQjoVo#LjP;jpy<_ z6qf=>p`a#6$jbDS&!Q%&w_Oh483j9%l-TB@j;RRf%T@wNrC=4m9eCB2t2GE5nz0(d za|*^z<68$ks%9XNv|=rQGzwS?5$jr4ITe9BA?pCVpkM&s_-%4=5&k7CP}=|?odVOA z0;WIO5HGA4;Jyh!1_g>{d=GT=nZ2k<(MPuccu7G@rH~Cv?c;)go`ybvR}|Ei^J|Ab zT*go9=FlAgGAXE7!|%wf6Hi1DipT5%@R|axP9mmXX@%b!k&AW%$fBUATEOo9{M*Sg z5pH_{yrJMisF=k~IP)4cY3z~%0J14~w?mP&=(es3fe2e8067#iD^_5ubQKE`@aD&- z{`KRWOTl|S93C3n5|64z#vcWcM}h1LpP%>HI|@bE8h0E(J_Yl>DKNc0f4k$yY_SP| zw-j9XDP)4Wa-3znD=-64K*212Bh|T|Ie3<8=@AP6g%kw0_WpG5oxvMas_-~$C|{rC!6gR8h~ zmAAqLKp6!`28x){b!U9)z#(l{0Ob@s^c6Du$Pvd;r%w-d2k?=CzWiDGaJvCNt*4%Q z0;r(Cd#@6+Uw=9TMQ}8}0-%zD=5Atk@NF#40bZ0{1@MW24SHhM^4Og2D8lY@*8qH` zpf8^yjWv4M1A%AkI)Ew)%=zx#&vVw|EMxqln*hF0Ah1_qSql%~$Ga{d2tYLjJ@_3z zNBwO|P?HX3BRbrN$s z#{l?AL5COoX0T5;_Mr%_UU2~GC@7hu$S#{`yhq?wO+0{l3UvA6kj|p?NeDy^O$5+D zK|>!QJD#j3kASyHGJszcgzyi}->V`9f%MuG0LD@>^Q?YIiJ96PSD}1zhTh0|Fw-b) zYUVkl@`!Xq+>vc4Evz;l)##eaCp8qjq{a&z@f|;EpGW^0@=WK()yLAu5{nF!Plidx zHo_+J$zfL#r4csjTTxOt*=Ag$Y&xGboY_sLmXLfN(XZFX{~P7)-IB9eHmZ}a6y=lS z0)Ep!chh-W%3i`aMJK% z(j@4x34MSf`Mri-%mELF-)l<&m{O3>uVfe-GauKgR(8+?U`D}~Im+z92DvHdnJ#NT z1%NpPJ?(kXz5Z_l45#l?0i2{@gS{d#1*|W{WbzPOM&7FRrX{xym;{s-=F%?hnZ<%cX-~t6p3MFjFjn?f@lXlhnD z{$eq^z3&K~44gH54*(|$Ecvz0S=+ZgKoPz>?gQXVffv8-#G*g zV+r6g1p|0(BK>L*9>U~4It{>!f>?ersO=jWe%()9YzN>91-U;I+4>y{V^AN)L^uHO zrr^OwF&o&%Y5)Slx#s{}rC=6cf43doP%5dT%*86AYl7VG;zIgV3{ibKMFp0D=`;WyG1BMz!nbx{uHDaC@@!< z4PIShQ*s%=bqd<@xs2iSm*E^h)YTin4GQG>O-My|rs8SeGBY0l0Ti6p5V0+LSKyaG zF7pF$lY-;?#_ye41$a-BT8kS10x2*J6Ec^A_e0TtNy+slfFKHn+!V8`{YID~5TSkx zz%2^a@(T!a+Md8`r5CKd4Ir3;i7UnI>7oAk8@D^`E`ZwX9ssyYLAtGo?WpSi3U%7?dN_a(3W{|FEPv4hoGH2Yc?94d1-g7I zZMnWYZqm@rQ2_2!@Vb?N1&4RSMI{H%7yzLZM9$}D%%$X1pgy!Rc?{qI1v}OV*;4b4 zEfM&3GXX#t1p#lBSdvi+e)Gj`O9Bv1fxkeB1-`U3L=jeaKLzlRf|U#Sw8lIG{36qM z`wTz?1>seS%&q6Q{wP9rvorvYD0pBYX3Jm6a1w3RDIGv01;;tC^(!+&`Q*#0W{Y5c zvdMh%>Dk@VdwrAfG^0Vg7LBf{d~%Sxo77~{Lm5g$i+i;EGvt}h_(3sJ`vW%pP(Eoj zrd1N^1p&&V4k06SDnjhjBi+c4Aim3I722My6H!ZsQcU@8|9So>0)gRLt~DL-9L)!--x15-E6a zkRL2(XS)*h!A-F*fFueWQYB3N_CEYe=yy>KKr#iU=>j%%_z^t4vUA2j08c4c@?D7? zaPh$_bv)|_14yAjD@(|_J)Dh8;=9fa1MrN3b>GCyT@PD(2?K0B$)Vd0RpYQ zsRKx-V8Rw5JDp~Ohhc%1QUDngw3*0Hm$cjRx1nT>CV-a|)bSco#vm7bK3iYIsQ_M4 zkf^WB`4Yw1%9)M<&+bO5g@*zLnFvY2}X&jUENo&_L_f|~J) zY+;KE{K0K@p9A0x1^#@quDWgE9@M17Df0njQ!p}HnYsRaa}0sf;DrEkDDc{;%woT8 zAA-Qt*-HTAQji(SFV&Q2Z9(AS*JS|mC{UZJ%ud!leT#s({z?G(6!=b5W_#5YJ0o!X z;c5VHDR|jVk@-nOA0p6Ynht;h3bxLaXP;kwS3#g#o-Tkw3bGIIt%Kce;;j4A>Wu)3 zC^#D>WNsUx@Fdj1xXl2HDVXs^z|s;I;$_6?s#^h+P;i3pvR-jucP{FKqqRPOQVL{z z#^+EUuigmEIAj3e9R;yF1uX2MHvTVJOAG>mI>_a&2w@QW~8;}NE9LT+aUlSDHy=d5Zc*&6^=0R z{80cE6tv){-X=68IHL&DRZjq@q`-$CxAtP4k0%0~ewYCGM8UWJ?7iK3dlLfNjLZRi zrl9PefX!c7hv&sqJDvhiMS<31ewNefSUj5fS!@O13k8!D1Z=UweLRF4q+WKKokgXlbfZxl?pCS7Vwkfl7#*2$kK3RXbbScbF z%9@&=+<4%K^xfvDl006NHOi**$=2<<%e?w%hM{~?`o8?%C~t4e9(poq?;Q_N zKB@ZQH~m9CdA0n2Y)pKX5lRWe{>%O;pUj_mLv|?VtUbaj%6zch#t~WW6`vrq#ntoTZ}rbRW1lR%DI2S8l7?8A(;pdc zW2MzQS#5CWZg6<_kCMgL#i9lI}HGq>8Ea3;lr>cwnK-e7jGsMiG|Pp8;S=!3r$_d-kGx00KRRod;k=!Sp`-)|9w4 z%@J5R_yPcH3PO7bnN{%L7Cc2}B&}yi#r65qAJ~6!g3&W)8+#b5N5y?ezp;Pk|#ppeK2yB}1UIhZg_` z3c5a0Vt3SDwMXDmzN(+~(U_XlvE0_6%Z)4W$5j=;`m0RS8+D0-*NZp-!RioogIAOIIAQ0B{qi_c$8 zLm8lK3z40WLDTL69(m`|0kD!u*ID1yFaApn00Y8#YU zv)-2YhrOdx34rSqPrm^OreN4d5t~!`1y5s)+xG*&Z3<3A@mm-7YTrVAD9xz@ zaEF4~i+~@bl>lQB3Q>aU-j4UKZJry{DRhHy<2rez_@oS z0QV?Zdx%%`6HM@G?0WY$0Pa&TYJr3;npWzLA_Pus4Vtk5}+K+jVh0X(8$cp6`{mR3&K5o<`Ypr6BHmSJ`&EkaR?s81MTx%G+yw zbF(b+bNDM%DKInnP5)3Susm=`wsFpt!zkGwYx>(Zne6kK=fIaYWC|sfwFsyEFPOJ_ zv%z~=NA-vT^Z=Q!Hi8aE(Ff={zmHnfJ#HBS!MhFvh^9b~AEy(QV2vY`9X<*mhJwj_ zeXFxV$#oRL_QY`ju@nrSEo32WrsALfUctry;wU)zTEHgF+lMy+-On%u@R)*8HUd_4 z{9qnxQf#F;fOrbzO$6*}sn#U~Oyy4jNT9%bmylI#5-mbt>=#P_Pbe^4C}v$dmJdZB z>ytHrL<%bTk%9Z4<(MF_s<$nGBnot{Dzln`_+kW3*4Y6_rl51NgpCh*oQ=RQvoipm zQlNcHksWNUh==s9z0Lzjq2M^5wQaMv5YM!g?79Hp83j*|NZ5y^I=Bx@A3Fg^r68tW ziQS!&jc08;7P|m=PQi>i2^-;T(E)XO&we)mX%r0QL;4piv;hI98V>+3C7BD7eMX4W06O!BW(u{JFjWUQ(dPFRzPJ&-#P_ z%l8BDiUL_azl$y^)f9oj{cZrrq+lb@iQ9z5&-Z1tENQZ_mzB{0kI5@g;!w6l_|o%yRZL+kqnFU(5vXfr5ob zifoJH(qjmG+xZ4S83k&~`S!=0{*w^M?Uf6loPwZtV%FPnz-|D7$hMzIjY8mnN-=;+3Qq47vF9b3b_fLQECuk10&{*gLxW>TE&?l` zzX$M{0`&!AR&_DZ4S{!a%K=nT5Ww#gFKja&m!glDRsi@yK~=bjrJwM?5$3-B1fZIN z-n@)E`NUFt)TBt8F95z$kQJxQ8bTE>BA|HxD}Wjb>~fV@zoUluM^QGQ7QiA^#Ip;2De4*<0k=*EiJ?LzcQtt6kMGlVjGXETtNRNiL}3Qw_kc>PRDy`I_zu*pq_#*(aOwmh6YZe zUw7yLpn(Eoegwbl(+T_wr0b{v;1>l;_#GCX{AvfHKIknG05H}hGtb3`#jI{sOAVAy zZgri#9%dRfo0@t4e~jIUKh{n6IPg|!;aX{zN~`wLeqF7jUAs0(yM*?%qf{bGN>nNo zWebs#wW5SbC9);aMzW<6^_%Z~evh8>oSXap1KzJQ!{_>Z=FH5QNsm7$o1gbJ8Re64 zuV>f0hVn^i&Q+Pj_wr=~1N!SU4tb`-80ys>8X_k-$RX+KGK;Kg<034w}hfi)zcybXBVU`Zo2Vh0P8W&}jYjWBgMK}~= z0N^ME!}hAMx!S*QTJp_sEr4SbNTT=-DO1;#C_>Zp^#G1jaCL`-DeckviGYczApmO% z+CElhhbOPV1HAzkjR2gW;OKY}D_bvpj3O)K;cxZfyp@o`TpLd{**% zRy+a=-t7h8K!H(?gavy1)Q?Myk%=WdN^#XzQOO63JL&2WqB4(r656{vI{H*~v zQ=r5182Q`jBTxk4P+I_JDcI9rl^v08#VZX)C+z^ZP_UVAJhR-GjDOQ=og4wUQeeX` zbG)(n6wZk~&pQD)M}b}w5z}m9fWNh-ZJYs|ryzkJ6tlkF(N?I_uN++fT%cg6K*XLU zwJ=4XMbGm9+$hjEC}2IK{qVByYF9S^7b)m|OTZ*4FY$!T=;4X(C7mBdqoR$IH`|$40k~73&NpIyKk>U0ityu>HvkU`jQGh36Wa{J|7i;y z9{`>deDo8r5T8;!<}vH+58w&~S-ePe`YyFys7V*D-T-iwg8jTw{NR%1(-64WDHwnk z1vl+P%=!2KoSg96H3Wb+1y9$A+38Dac#YLuBMiVb3Wmf=*|^d3@uprIn>zrmQ!sqL znB^8a;_WC_zwZL@p+LP_g_%3|6`)S1Pl^KIOF;`hGVIqi*#v>3r7-~fD7ZI`*Kio* z;aR9j0rvs;Q&6>Ty9J71Fee^B00m#9d>e$Ou@wSCQXT=gK|xuHm`!jjyn#T- z+C%_>6zt&#y2V>*;t%_(L&*SwD9}B`Yiaz};+;y(9;W~ZreMChgy|0)i)S<+YNi3W zNx?K;-8<#|rX8pc`G(H{gis)uB4Mh-dgJ%f!N7C?p%fUJ^8(8ix%dl|+aeRdEed>i z#lAy9SNt;0nwJG2i~{{C0n4BLXb|edc%K{qw<+kRq{39Hf8b8b#IFI|pr65NtW$&~i+8{7t#(Mw}6c}w1v+lkR@rdj| z=0^aL6h!cg?+UaPBTxi~x?%uP6nOC2k9QjBczc%lfKmX_6x`V@V!KV-9YPV@FO>m^ zq2R5Di1q(G`UnDgy($63QlP`jBLd%VSTc}d~)L|3t8sR>8U6!?7w?V zy=y3+l(h7cH5uXF9>E!3$2JamrgM01g3L&B)JT+1uJ1Lz9yXXyzMTD3meWs19VLaW z7Rc&l!};XZ!QJJ1=DKDfYWZCLPn5T}V(3QsI*Y^aQ9gMo{SR#a930Sj^$*L%VwAV}kaTN456tVZ$B^3y4ikJ-` zo`NlNM9lB)vE2yV9XA)iLkgO-Rb@-vzLg;0)ocNPM-&`cDq@!^J>>|D>Awg-0tKN% z#LT~X{B#5iGIRkvrr;XinGl*{j+Yyk8Y}~lNI?nTCYHanDgKHaD_#L0iGnM9C0b#t z37#D;8LJNztiNgi;0Xm9fkJkp=q{d>+}m<3fD{T0?(>Il=$bqf z;mDcw08%OVbymW*@5tVXz`(YK0G?7%$#1(WHz~|P;LKYi0BICR`8gMt(%0iZtGj{; zfM*mupQ*y4e8O;(#vR@Q;5h~A{D6`)UG-t8Nkc2P0eC^dwjmOB<*ok|1e6kX0!XLe znwx-qb1-_2fZHB3052&h>?>xcrtfw|pmO*=02vgh^ZiW6)ywg3x>@uA0GSjFt5#xP z$4<{i5&DVE0lcDMk_o@Ta^JUF1jZy<0?49Z&=U!}7d-Pe0>MkH0Ay1zevOo=nPtTx zV4ZagKn?{v-zqbuG4Jmq;Ir=pfLsc0JQ1_QZ6B{dV0)*N0P-jZyD4T5bdTbJUUIxW zfY%gQ^QU!1U}yn~uypMy0QnS5ohD+V%kOtVVCaw20Nzkgs-VIitTudrK>H160TfW6 zYAPa~9 z>6ms6z()$k7YUj368C{9LV}hrfKL=G;dlO&1szvMATG}zKrscHe2z$0W$I@HmaYv1 zP(r~-{w&o*u0DW3!KYvVpD769=S;J>;ME8?o(%<1O2L3u64o_zPb&l-riTIeLP6m| zzFFj)qy+*yc7y{cqhR}K0kd`9kKe7bd659hDG1=JhxR_J@KnRvz-Ry!6zK8d#N!zr z_NYmxD`NpvQZTzliAnX1@JnFP;s*e#CO4rNFzRgzX=GED-^P zX$b(TDKOr^Yd$mg=p%6DLLz`~6!`t$?SIo%(-4?mmJHxK1(x9w7Cx}37Xl9ZQvv*- zK^aPhm8O&;0xFan2%zX0%)f&yC=X60CLAAym+F9Fn2P{vn4 zwH*HE*y!(dnE>i2(A&yyVeB_rj3Qi>X9M^}fp1q;w%~`e1_DK9xd47suz_FU^SPZm z9>T3s$_HREk*rT@XsWUR#^}$|oai zyk!fY-v~y~>3fgHA~R-<&!f;YShC9^U0RFsj}9Owi=G{b_ubg;>(5%qRh7oVw0;i_(2d4)2LY1-AxBj5Nt&9~OS}#viUHBfA zxOTh!NBw1C1#<;_YBa> z$5rt)fWs7+^Ow)%h>C*<>{;~&z!3`c`8?-^Hi>csbVA<(u%aNCpJZ-z%Hae8J{s=; z9Hn3Yzi=!kbjTY7X3YKo;1~rvR`I2|?*7FHWNCZ?aGZi@b6#M%&%haht%4E&))bsw z%-4kh#99E36ln0`6A$P9`1erg@(aKz3Wj!7Vg5E3Jy4Twv}e>Ntp+J6u@0Ir3e*-n?!Ab!DR|+oj za)v%v21OxoR3rv)j)Kv9q)c;~Yas&i?NR{eDL7&#W?R~CK8ZkFhAMyy6dV)sT?|T2 z?-7XB?g+q*f?A$%uE@~rjljUl&Hye_VDL=LdicBHyhUl38h}d_ENaUyEH017quFyM z>HscNur)x;t|=NWMok*+-4lR21qBzx%;RfUT?Ag}^#3ne*~;*`U3Ez zAm5N5PrUQgS_E#+*935dg83m5cF1aD3P>&tWCzqVPBff$CqQ09>bFSdoZ*op$^S z0uznL0`Q^0fFI@%m2dD4fhi^90r*m&$Lk*iTT^i!Z>BQ=fFA`(bA`-s*Q;qLLSV=w z0R9x1^boOAJ9O~xq1(}^00Jn`a}qFb%@iSuu=%q#fEyH?IVxh4#v9K?;N6lL00Jq< z4CIFhD6hh)R8-0=06`QuT;_)d2N-og5zKb$00^eQI!wZ{s`p$%K)Kg^05>VvK1rF) z%+SOyV>g$D0759R;M;~mb=Z9AUxJ`jkv4oXWjU0-=C#eB|I}~(VBxO17OYmss%a%0& z!YMF5tIUFGXXEemgv@mS?owc1z+cAep5VVy^UWIpL{N}-Qp&z;-!u>P!8mFYfJh3m zyaepS1ZzhGE;tzjh@wD^-z5^V$j%l4OVup^qA8daE@pnu-4`NY5wZb_|-}8 z932oiKY1sBSPJ%)idj`#JA1V9yv^~>R#N3{N~=_^{%0r0+Hu6 z+2vVX7b6%QdAD)MGo3D-l4bcFU%f^%1y9l<>S2R31=*r!vg@Nq-9_pCxQ~(bvf-J6 zr1&24E(SxSh=wnZ{wK=YyIyUxe5_Tp4w@+#s`rOBGE<=KXCN;;)JY#D`%PE=v5n0X z1W&yvKUlSV6vA=;2J=>L>F`Rf^`c_}dVnlJ`x z3i4hkv%qtY@DzB#r)&UEC{X8zL+;$G`4e^8KOq-D3I&VBQg*~)1D?^A#l8lRN`d-z zo;1Yy;64=gC;;%3f}WZDJma@-x1c6jloSF;qhQ}hz5%dDU~>ctAH4_gjDp#G8-34Z z`k@GzxPAigoPw=oDr{xD1s4%0|5yUx1qDV-%2ru;;wc{&(=PzhDJanpvzMXc@DJ$c z+zJ3MDY$xDz`k0~#mkEWTYd$QLBS1v&5D9pT@m$Rtlc*NnG~e(O}%YfUDQHA+O!71 zD+*>FmauOZ7X=}(;&Cm2EDE&xs|gh1Kq2g$VRo+yX!@1x;Lptiupj{GWDxqyQj~g7Q8pOnIltXcR$bd20Z#DX>iB z`&BX)-a??WZ(9KQ6g(Zo56IVjv;u(<j>Z-1-T={Y|+D>cuA=3+%5p#Q_$v&lofewibGAZ)K&xVfr8Af0`|PNlNtistknU0 zq~L>(l)bcZia;PZxd(tx6hv2uSkkw6O9a|Z>jj{gf=|2>@XIZS>j;Fn^#M>qL9Hr3 zo;c(bUclTtu0Md!6r}J~+q~5NBTxjd69WL0QqXd~m}%=o;Qxd3i$MUsQ1HD2d z#I9ojR8p{3#7_|SJvt9XkSrPxpo#+77cmocTl)=x+DJKouM`~Rb3`wnZLdKM`3*#%vt%}apA3lOxlx;V)ZHMy7doH&1u)%zi>7~j-4lEyslEPQ*?CNF1`D9i9 z?($VN(~=NXHn#sK%G;Z|b(7rg*^Ww-Ps&XG&_?pf$j&D6s;`=sC?zcTFWXo?xn!M} zeDn+lGlch;{t4V5=B;)W=gQfy%}>z-WcteqI&4WFpccFq`%Z!cuQcp+a|Upjf)V`k zje#BZ;P+#2j0=Dx6cq6Jwu!bW<)}&Pr=AC3MS*$^zusfnR#yb}J#qtZl!7gOBKCTQ z{T>7sO}Y%=7zL$DB4!dFh$r3eWO)EMPQlyf5|&-QWhRQCJ?km}YYM{o?F4lr%JACW zm51H{PEasJL&|E~vo|QhTT>qZHWUC5wnpmoX?^rxoHLiu%jS+fRIJq*2GH_7qUYD*i+ClQkgl}j6IAZ>{%8Dz=4A2 z8zpSkiRO6HJ+AN$07nW;BlwMdBd<(F5fn#7060a#NPffdjrntTBXB7!3V;&@wtS1> zT>D%R0mTZ79Y;+%oR|jSJOz23l$lnzGoDGC`0F`<3ltPx7cwoAyUS37IhS4n zaHBw<4`Jryc*zi`QG5m9A_d-QN=$uS+)e}nbh80mqM%!I6*gsh*f|99VsimpreGJZ z?tP`Yay^g>4&PFcyJ0yCMLd6bz`4u+3+} z+aNG-+XnzwDA@IrUtHnWq#FX46^a2|rQqrtWfmYd7>vM>C!Ya$QIN*(y|uow8~<7N z3@8KOO@W%Dhz;{GpMxTt^Qi!EjeI81_i!@mD$A2X0uR))Q1WH0x3vc zA!cKS-oVo(Y*A|fK@_B)6S8+L4``qW?G@Vr2&N!XU(7UfvT#nU^h6oJO$tWwoy`<+2CK? z=w2NGgi%mk314h8;81uRu;eG~Oz+YxmD z;S}8B7Z>b5SJDvy|291V+@;|2DG|He+|3sOH=kYrA}F~2gO_FJH5-XQP{+OiA}QEs zr_6d^UW|8?@5${CAc_K2ewElQErwq+n}-hs5KY1Lll+{Ij)^#e|HZ)oVknq-Q<+VR zvBwGM%MTG)Rr&_ylb5S^?1A;k2J=a!j)!DF7I?>_wD9`sUG=V^d@}Uv z6*Pd#ifpWI=ZEK66M*%l>*Rpxu^WyAU8 z>Hgj1XUlG1Mbz}mzJH>;z2}pR6(?Wjr?bOpKC6t%{u??n# z{N&!yuA%Z&^T-VdXZ#z?TdkN`L{OFImjM?NrM~!Jfgsp*D$PHyALm~?2kDGAc2Av^F(aOqsz}w zgzY2F0C-Hn=*}Y6&8lA#0s$Up0VGl&ZOxlxIwcE%?i0@eNTNU?hZh_VD#h=|Wfv|0 zNTxu?NWiKsP4LSoL~sef6AGI2Rc61hq^(3vT5RGDAcX?sC?%FSRC*qP4wK`lRa+&NTPiB>+BAV8GAcc`(69fWQLZQUJvid@z%+_c81CA#ihQIe-!hT+Z-A zrXQTbU!Zk~l>k0daQlpq?VtI)CyH=qaW#Na3ifp8n?*u9Ya;Oe({})0DEMU|W%t;0 z{1WII^bV^NbVvYYPxYrtJWf!SvPEBO&P z7lDfYEdW$fF#QF8G%VZU1oUf#0)Q$C>_FEP_G-H$2 z7CCk0{!z7M}R5l`cauXO@YOMx*z zAUvV-EGdeh-mEKtItok&iCNr4BRm!Tazi%&zbGgjBW14^y1hUVy1nQQ;5P-;c|ta} zMl%ut&rccvEGCon$zd%-Z0=5x56UMa_pCVp>ywikTA#Fz-Y*-`@4XdD3)2hM*1LxC z$?!Q|vI&aSoe{j#e|_VSXFB&UB*^X?Zel2(tk}Gv9yXXyer%E?yFOxTACwfXwcl7T z8_p*;NA{5Gjfr`WXu=i4f1L1!jKIu_?NPhOqJjJ|5ATn8T)_p1@o_8#s#%DhJS+n4dZPr7nRA4hh*aU=7A1Bp<|Zx)sW6lVfozW z)o=7JDe3bIz+npP+Y4D}`C%sn%vU$H`0Lp@LP2j{$W&xI2#=zSJ(~ltqM(>>Jd5^k z5{@Dm7qtX%l!E1a5!QOzB0MOHoTdoi7zOV9@^hVo_u^56rAONUI8H&c$9#8@!Cbuc zxwfVq0BZ^cb>|1~W-Q-@B8*fM060NGcS~LxG9fJ(0l_R002>Ng^AB12>(BU8`9Vtp zz?K4IzCG{9ovlh!EW1V_g1&6o(_G6gvnyk3&s#C>RHJsE&I1<_MP?9PMzxOPC)iUIJTz?z?^zbpEw zGHQ}t@-zUR6d0f2*G0}tDn}q)VAC=} zQ{Xi~%)Y+Al!}_<(0dsG9|~%tcvkUy3|{fP^=t(IUka3VsjyKVT6oPMeT+T;KMG1R zBy4Yst@y9hsm1_+KLy6Ty4O%^JTAW3ku+1X57Scb}H8Rl#|D!37flK@?Qnkg$w#SxZoaoS$0&1XBJ^qQK~}m{|mw*&v`a#1TL=1uM;X;=j6+ z0RmS;odCp8@MXD>85CWPLZDr$Gk{nMIxQ5j8^xV}pqYXcovb5&J*^ycYSW>OX!mO4 zP3up?6Uk$Z1!-3BmNEM zt$r}&mHgs|uXum!9>2HH;d}G}(!DHT_q+yHpeHV^8#s>fo zC^*K;?oK_|#1qusHlF~*QE-?Khsz7SgHQzBR-XaHQ?S8@PqMdlUygv6*%ts0DaiWH zPclDv{WAjjkIDf&qToXzKS#Il15VS&j;#WaK*4nWGSZ$U#RH7hC#nHFrodyqlwI;k zC_qgzDf|u~k%BHeg-lQ7RWbtXM-6}^3Pcz9?$aeZ@Q2Mgt`0yl1%q0NS;pAKYf*%# z)lIDadbd2GprTTRxo=y8-;eph%>blO&{r&GLnoNJqX?TXv;dGw!E940vt4u>zaJy* z6aYM>;KXYwYj?g|D2lK*LlHn41v<|Bp3mjxV-ffk*apBe3bxv*u=9aRqY$`Y*ABpQ z3WjAWvnr2`FA>OJtqkA=1>O4dPTxLMgutWeLICL$ zl?&-NPz3EX34ja=F8va**!~Z`Bk)#H6+k8h!TVL2Vdf;9mMm540N@n`_tW_`9F9J&0U(cp{QGe`TziLDEM?inJx7OX_>Ci5Rt-g9=-8nE-ck^q zDq@3=hv3J%S;BAtg%r%!5wY7ZE7ehibtPH=iYVxGRmzTk>WCMT-RF)5@Q#8RyCv+C zpe=rp3A4uncu&D{zGWcBYX(l<#?O)g_&`CkHUc&%yEXn~xj9S#@R5S?YP?`##9}<7 z+4K z! z8x;{A3A7%j51@(yw})cp?N-$uMQ{x_0PvN9ya6gqy3}GC0y@jr0;r}ya|^$c!ZPPQ z0$Y981NcUPcBP1IJ#}UV0)qz`0{BkBLS7F1?Nn6@1QHyK0Q{h!UWLx@Rf`62oPs9&1P9}iac2=|dpQ<>H3jqdM$9=Ye-$DyxXA+mCn(6j zC}P`(+u=cyXn#Ba8w!r-Nm*YrHwP49OtS<4wiH~L%ggk?ec6G)yS<43PEugSFUqZ9 zo5msVxiA@k9R(qiq-^WnW%zYBEg}_wJq6*#%Ix*_4S2pSdg?O(4ix;pEn++8We-M8 zTIBo!fFlJ)WB5hlr_=Dx&0n1|0Gy(rlJPR5JKxh#gxQX-060;QHA~21H07lTbkoZL zaGCm3 z2%cq}oz)+K38&uyaG}6}A2Azn%LUKfe%Jm8z?FiV6QwLHoZ+El|JEe{&ixHYlCZ_z zPR6K773HM>&QtJo72ni5Qq=>2i=WE?T%aKNi-2vsRIwC+rB0Oq+$bm>E@eN2@An~K z(zzPIMGDr;5wQ)+kIqNH-0M4lOBCom6tcxHj^lYQ|7Je{T&6&+6~E{6Wo|5raA;#4 z0Cx%=92c++Efw*fbw~DZ03H-5&J{DY^8dLr*7svG>%RsVo)p~k6tK7}A^6d_GP)&z zD-`7L4Y5xaTi`E{@KGxOS1IT%k+1{N$_#bdP`eEPFA5TClvxkW4E%pk-ro*@Hw95m zMQm)@uv!%1XgdLbYZQp&s;nsfBhF)PyNLi?r(i4J7Bsp}U5+BiY9#=CD40{!hACR_ z9*MwbKUDy}6bzgsVSPr8#>3&&@{R!fDA45<7BPNf@Cf}@U}pgS6vR&DCn64=IS4h$ zMokSs00mD{lv(wnb@)Ygy+|Fv4GJ=QiP^HLyPl&6S*AS!1XA#V7rI`%osSom17dpt z2%^BZA3tbv|0*jK!Qo_I0KpWb^3uWan+>}m5H(N}z)cG7w-mCtR|%sLFiIQnu4>v89OEeh@fD~JQbGWH^mV($(V0^|Le^cNx=wy0-R&0Hcr#u z9-0Oqih^TCA~r(*?H&|iox)52(G+Cx)6?WyEqxFOc{Ce93S2TVq@qTutZ9Bvyd8PUfWUg$a6WlGrN%v)WoP$bt#-;0wsRlQK?@ICqfJv%IBg-83JLrme{(77pM61+V$V$=Xpfvk+M49|0hag6(-?rrNy^o&v1s7Y!hug3@IYrc@K{jv{Qh z9Sh(g1!a7jSo4zyW+PCs^#OoK6y#5kurKQ(;t`l!84nus-xH#JJ8CIEO$ z!F`_BpD?scMG?kFCIU#Lz>Qy^(CyR)oUs}Wc>*Abf}gw&Ll$@*e+i@gQvoDXkmw;~ z8=oe9Lrro`e*xeL1>dWstg^rLZv+D7WdKN_pm|#fvv3d%K|q~l0Z64FBw4`R{l4S# z`cB8^0C-A4$MX`lFaJ5tV;=Q<4IqtzE)V%RNW-t-hi`%J8vxHJNT`vp9nqaHqdo}w z6asioK_0&zZ{DP%c*#_J=N*6-6vPctV!2u4a9xt}=8pi)7CGY3 zL>Wae+N=N|pMr&I%4~^rs2>9EIf?+@P|&81UsKrm7EVick8BH|fC8NZd=CB9ib@or zue%a}w-j{UBV@An|8qoEPA4INLJFSnQB_S=5uPrY`dbX3h=P-$0%r66$Z*u8{`*t_ zyrW>r6n^5B=FR~KY-!yAz(n{Rdl@QDJahf+4`sJj^gUHkR`P)vcAnv`jeUWflmv!XQslu!_OR>U3` zn+Q>aX-oS6_)LM6@jPaD242uq&g=)El!8u*%4}7@j64*fvflszUnux=T+9Z1jmF?> z_#gmf6gZw2vZT&4aRM5XE z3bOdJ?^pvvygoT<^k@K86bvy@V()EU;CZf{6=MN>rJ(nB0aKb(5QUnQGD!xYnu3wF zVwN*|nLh%jgC+p@MuFl05eqU~^A&-|%_al*PC-cz5mQ|96~FGAI!*=fgMx|tD9fn! z+IU2E@`E;j8Vag93fZB`i+GUepgIGFB7(bkZU z66koMeA0ia^FLAE-i2e0&?ses%&Cx&FT0v)=q&Wo%#3 zO<9LCx-AeoU8K=4;;mD+Z!SOCV^j^Qj6L@55Bl56*m$4)@}+IM&qS56-QNFEe^cVh z=L<601;~3G=(id%pT-$);=;brF-!Vt*czk6F8EElj)2QfO#p`} zc*eJo*pE1gi{h#>2Ld=kfqZ3q_OmJ;5A2fFhXAmmVDJzzJ10Dj7Yf*lVE~R&aD9}N zecD}!U!aeoM*uiRLGSZoHtI?3M%3xoxg!A_r(hW0$$ZkjS8D_en~ecrO@S+)puYI| z(**>=M~?$=f`Ut9#jIPpB3{63a!>}qhJw+tB6hP_!yZLQSD6UFmI5~q5&Jc<2!o>b zlL4HhV2`Sp4Y%BlC#cP4P6c2`fqRh(8~EC(8Z~M4LTv!{6j){oSjS1L@Zhxh!07-S zC>X_0ChhvE21nSmekK4%3I^@s7gub&u?sb6i`#4frzq$t;iq&lDIW7bbkhOgL_v#X z0%kJcC0=eXHJbz~;v~0Ou*lUoT*0{u%}dTr$`Q-~t6=AD*G!OM8sK<={;K z+$ga0;^mK}J+~lmY@RWIixgz3@>k{eiCzfkrI`Y_M8VwEQr5J_?l}UR=WPRUnSyFw z4t(o(JWkeB?RNlhr{E6%KU^|xgP$dz)w=D-<;6E6>scUGZ+aZhD6RT&3Vbw17o*{HlT?sI;&I;6*|IK`QK4$#DE< z)wMqYz?*`Bk*aL`57jm(LdCbE0IpGxyo7JWJh-+W0=3rG0IpN;hF|ZoD!J|e0_~J- z0r*hh%V!Fjor!#nz^xm00DLLX8O!J9<~zPZAWg{;fFA|5b5&U9fpUEWY$BWh_*2la zP{a!6#=S*glGqtQ00leOO4-#{A|C`6A9ew7gMzjEjvvRh&G3|`Wrym6KcTt< zftKCk0mM=;p{^ zp04t)*+*_8dcIw^f1g91W(t_Sxm;n}qf;o^_Y(ZEjm;G7 z)VwJ-F^Okso-s0wX08c1La+ES}n-lo|5Na|3Knex6@0Hor>(V}`N!eE>0Z64F z|1`g_IHCm}dzx!Z1@M#tuRHD7^EUhNZtP}m+5plhP@N)SbsujWL``ZvW(I&~6lfpj zr{d37-hjZNud@I=r@)kdMK;dth9{^^taJdppdfCLfE~CI5Q8G@Q=1PUoq~kvB9>ZE zj{izsvKIn)Nx`^k0sH=OZZwL}bg?dg3<|pM6ti_n%?%OI=(r3(CI#Ei@QZRa?eVju zaBBsCR}`f2%^|7LhD}j~He!7MSrlmVRa=wa)A5Gbv)2s(WK&=&Qe{cG7x2fq&6TwP zawxc0qQdU2kHy2VT`$)I$faOXF9DN|ZHJSF4jT*sSQ`SxZZz*_ZC14lh%_9*w(bEh-AqB6diP`sbFPx@(AKD9`h=R_1`*xkeAOz!wUJjp4tz zYZHDWP;$~4Kp6#h`DYP-r z0;r~7$Oi$NwNZpWitn?$0eqvNYp#Sn*7CuF#JEX50KQW&@3WAF`%lCf>%@c9#20*0 zXk&$9$An9G zRM|W*3V;P8E6@Hb1nf+@-f5IiZdLnv9#$GzLo3g_znRNyH!RwY^2rx>YU^D?`J~<& zZ`tq%0dEkDT=c7P$TOWEZpkv2yvKGZpB!HLyB;=}Pg>X|$qYMcjX_D_q1H_={HKo% z=aZ{fbeDe;#+xC!xNEb2qP)F*tBvKot!jNyKFQSn&_?pfkY0!74kZQnq@}|DvW?}F z?V1P4d)=?pLiyybZhrzdhU`>JBDSj($ zQV9NZ`bKvGaDsw|T~yi3fc*}r4^_jv0=QKx^r z?FYbtf|t!ySfPU92n2R*834eMf(l-octopAupQt*!dl`L~7%tsN%)XD(3P@vAsjG{JG;MJ0e`V#@TQZSj{5^+CG z=Q@he;m%|L=O}Qj6tJqZ8m0(nu4DktQ{c8=!lY~S@aJEoHXXnP3O@DVOQtqcx}gYD zZ_NbYM!{8nX3E*Ock!OY4vXdhxJbceex9qSV;elGy5>F?z$FSg@e{=hzV#QQCOyzv z0N^qOYj%p*QG@?E6CluS5de1z40%!9D4(dVC_>rhB>+4qXu*#K9W!gzYy@_{Sq8w9 zf>LXKbK>M}FA&(jQV+lt3X0G29p%|m@sercqE!H{Qm|54$eOpw!OM+DVpaq2qF{Eq zkPTbpFdQ|>(qSC{ZwiF(#H?t za0f*w8E*{0hl1Ju{NXzw#1oV=%}fFKQm}Qf3VRc67mFfz25tr5M}b^Z!VGPyz9Ar6 zyaRwg1+}?iW~m&8Uo(T>?E(-$!C77}IV8a33X0%4bq|0W6hxlj_osbph2MPD;{5;u zDd=^L-wc-j9ltdO%svPph=Kxs>Ok_DfWD|n!Z>pP!4zx?<7fCcImZzA{oNA4O$y#M zQ)Tb+)=Wnr(A)|@2nDzKvak1w!I233Zh9O*C6Rl zb{;?^1w)bqY~}WcTTzo*-E#vFMZsWxBI1HsyYb}S?O~SzL{o4mk^iS>A9;o%=pFC? z5JN#>s1hsc(z^u$$&ar9h^1gaotRD9t=A0Yllw|CF2VX_gZZTYS}WP$^+%SYv{1PF zRlRE{pBy#TSC$#uCmX@}kFy$wJkyz(m?F#dNNgWZ9_jrHKr#hM#S+%GZT349p=^EA%YVIFo=`BAADr~U!vt48=_<4UkV3)jV`6r! z`||cE!m85>08%N)*X8?NpItqHK%cg)0X(HZuvWrSvX|m*G3(d11&~I8IltRHBi_#n zMJRfr1mGD3yC$fx&4b3TN1)kyA%N!;=;-s*s_$;x=`g7TzzYgq^W8?Gyrsb?!cI#S z0O=GA=&QtTCd|hFhm)N<0C-7(aaR#j8(faZJX`cT0m%3p&_%#(x81NrO-fDa0w9xu zk_di{t#|KK1f1-;0eD40?@ki-Y_d20#VNM$0U(QltZV_hI!%uA$wmGe0J14)ahIQM zHn=0+uIJvd4}csBiui2>F=PMdCpy@nAAnp6mS;*>X+#wsw|Na303eToX?%(3(bV%H z=&uxTWe|YZ6m;ar!$wUC}D5w@m*!bPic)Om*tH}V~Q=q>=#E$&DhiB4?H!%PoDDdeg zWm8g&2cRZdCQSqIk%Ex%%B(d1lLrF*4QB%QM8R2pw%I_X9bFJ8c{dwCF$IRaST|{U zt5FC%+%p$I2?Y?UX)% z3JS(03z>^%vI~kZ?4bdGN(y%U7P1PhGCVkGd0{PpDhig5kTB2ID$7uWq~RL?e5F9c zL&7$%vDl74-A+RQ)f6nS60_v_2Kb{GpKk=<8wJ7RC9KUm#i1yI%XSk0-znHPLCRR4 zOO*)3R%`+Ag977AV)iXdQHDV0Y1;wRP!OFVWLbLS(hv}}*#+Py1u6YRtgoupegwuW zHUm&gL2V?jOBwpS7y*L~djZr@u$*tS*tB6h{>JrDH~`=m1+QmG*n)AcUr>b0eun`3 zrXV4eH)+c+{8y^#Yze?Zo2*azx(He1Om$zBPbxmY=?QCh+6}EwcFeYtx$J$XkJ7^L z(?jcBL;2*iLq4*qpw9;pOka7camX{BpQlq~rRtTfQ9jwiJggozm`}z$e=eJ-{V@wA zg(+`u*UN_U$;^@-@^*dF3J@)B8U9a{w|D+pWBKW^(KpX@a)T%Nh=$!&z2EB*`2TRo_CwcI0rPAgOyJIqPj`#;YEsf>LwNl~`{ zXr(8rjJ@@ATD_o^u|cDT$zC+gJcNjA-SmbCZ1!wTljrslM&G3!#h~KmhfDHxOzf_s+;9zAGA#d0Q z0Jao7;pZNW7We;&Kx`L704FJ^?qLU1(vElGceeaWDLNbf>?gK zYVY6|ai~dCJhuRFprDTLiVDX7wxu!n}*A0u$)#7+RGD44F%k=buP zhWjw0yBPo{3cAeWv%%(D`lATLT=oJuO~GD1bEXyHT7kfhg8cx_P_Uws-&2(LV-o`1 z#~uRUOu;a|dj8zb8vjI(m018dOF__CA+y+c9WQnyY&!zLg#sf!ic%gb8H}2A?A1{K zt`u0D7P9@xLt+rvs%;J690kWc`Lz-s&R;;_U6>7k^Az;pbxDhE=i(9hEx8?l3l!MM z#LPjt7Uz%osSW_#D9HIDWq~ut;qkKA%n86n3f!LYZIbA#0Pfr8WAqMh?CS;5r58 z_)EaI$rJoCp0hR-fDZ-NqeN`jq25&}!W;iE0KOD_o+D(*9!6#egje1H;77rEZ$4wA z(SIZY)8Zlk_)~CFuFU2}55k*tBDJCc1W@p$Upv; zK$o5m00dH?#-|Hk_?dk~VEco306`Q?&KEL;E?t%*;5;e;KrjVO-ile-nh$uXdg1#- z05>U6_LH#tA!pm72vfoR`U0HG8N=hqG?3kTpwW9`Og0B%u` zuO?sv-?-qHK>L?30EAI+6@WVwtjG~D zuh(-{A|RNO10bA&0U!Bk!zQz5BGCUu9)Ppj-v*S-CYHvl3i$oCX8yE`sE zD8ixqw*Vsl26So1^5;k3y&ik!z5@_N!J&s@=H6<&5sIMk@dJQp3g+->s_);j@ucdv zQN;jaC}_sZ-GsWW@cR4=*UtcADL5chW+~0uC!(1G-MYTMu=3pCOo7J0!?Mi0MQ2dL zZ``+ky=!QuKr8&3Y*6;J6a@8jG#iIJ)2SYsEbIND_yC$IsC_-49yT~rV5^)ad-QA0 zG?eatt{GS_8=fin{-uXpyXEwOh`#MG_@5|mug1{L^5tJ_?9og?LB~I|k(mO$7B=#} zanm-TWdC@lKen-%0yDEHd9Tw$R1xmf`Cnk(>X$uh$o}lB1el-4+2VqCjxjxfrfrNw)4^*Jjous ze=>js3X1u8Bb#3>ZHXd;i5Y;$6qJYX>+$k8&qAQZrD*^XDbULjG1bXZDFW(aW&%i} zpi_~UrOO!}(pT-64Ir5Ue_m^t6&R6lGOlSQsBdv+uyt2!}BZs)~*GRLBX$TF*A)D@DN1^v|0}! zlLF_NLMC1xi60Gj;c)=3DCm8j?*jH2)e}W%!A=0kqG0Aw0c&r#Y#ss;&b9!uDR7(0 zk7G5lz!L#KHrfNop&+J8nN2NoJcc6NO?Cv3OM%gC37ZlZ{tbb|F{c6KQK0ro$S&Tl z#N&mj;m!bFQ*hW^$bMMJankVgy$gVR3fx+Y*~2NK4X8;@z0U)9LqUWozi`c@))s+T z4sHMnCC`RB*?j-tVDMm9tqURLI4y~aDJJX>H9h0 znKa|Aw*Zt-;QNhVO?{@H05vJF%N+opDM;@vW+@vx2O(e=eiuL~1*=ynvG4~Dc&rgP zCiKrp^Cj>^}T@?%v0Nn_2aqmA$vJNyhsv zagsf%Q)~??2%AxX!E2 z`}I24byg~XDhif=7P0x}F>VNqHFyBvD+QB}iP*dr1!V}NZ%6}BO~G=0>2js(V|xTv zcYXxm8wLB9sIbjOQ91}HoX-MKLqSlGGE@3yxEKM$c25A*QZQ65Vn#VlejrdAnFFAX zg4TTVjqv6s`~!;VnhW4N1y^?q*{L6P(@+F^%X|PoDDa!l4>fOVau|US%EndfdDtYpbbBZs22uuGh3y=y3+jM?TZV?(F6LU4FS`^F*9 zbiQnQC@U{iH$wSj#QP5Qu)%yXV);W^=&GNeQBr7=)Tv%JoKJpm?kS%=y|N3UnrpiJ z8|Cd?{B5)R;}L&Dlus7v|DlcKlP}NP%405evP3Ci-P%94v3%0MEJ|MJu{wus>Z8Ywz>C!2ezUeXb3;={i>%Q-j{T{O>Y3!6j_U;Sd z5CvxZoVZpCdQC#0`?vuBY$(X)=U3j<&d1-{`Ei2)*izs=U&Nv+KjEL5+U&sq>?j!a zSjyH$G%H3;622P>z@CD^Mnblva~Dqpip@s=I84EtU@?2OtD6x5>o1K0aD;*}d=t>O zb_?)Bmx{*#aG+ompE&q=T-F>#hxy2LJ6DF)xQY>mGi~}aH3$20blBQav>fL z$E3*s9HpStTFS(e+MYuZzKqra;7mb!AHHtJ?HhiEZpXC&9HU^;4GFtA=x{iSFu!gJ z02d059OL)tt=Gj>$%wG20FF~|@Pjf-JJ4N(BHYoO4#1Uy)qEzpXI1xR2n3y&3E%_; z?fFz)WP&Rmdse-j4d5gN=_jO&>BizuXY+&e0Gy)0@{@qsFFl0QL+!2$0Ju?bncr19 zeT!@(dWH(mMF37y5N0H1*{chCBk--$QULB0j58K9FRQoZ2sHIs4#0x~2W>^B)#-^Q z0vZ!m0XRcJL~DLf%qfp{2#6fk060s5jk%ZwPP%^wfzAr+0Gy*>)d~qK(JGscz?h5c z0i37cD^K3c57^`)Q1EFZ08a`OI!c+LMIj!y8N_S`aDf7&Od&?-fENYh z^n}dvh23q`q=#YK0bHb@%Nt((sI9^?Z%MrODi`Q*(~M*u+-{B0KzGF$PaT^R(%>zqzN{k1#p!DvlJyZ|4f(W=%EL^IS=3(1=U4Tc2_<* z6@iEIF9V36VAnelvy*D$A>2pnAOP1XxV%P*d7U|dM>8G|LjXilpqe0LXAhr9LQUFt zG#tPU3UpWV8qw4&TshE-iv$ow!Ki2v8+q0a&#`Kbjs_4-f%{|Kc*U2|uk97@jv`o{Ndyp2!HA1(U}}*q+$oJ5dDFZTA4&qM+!PkgfAQic3D8^HTvNP>{>lq#az~ z(-Y;BP7%$n!u(`|`J|qTtt_ITwJAyqU#B#$cMau}iA{oJx(d&~BWRr0qH)MGorQiG zvdq@DOHn=*9 z7H^f?M+($XKDqqqAKFMhxx~~+ej>eRDoP12<@~XY<&*tBUy<)R{G%Phe$V~`=B-xI zES4vWE?-AI?%^CIc;MT#1AVCzvaq|y@v9=DnFv541zL=sfYwcR1Vy;DPXgc$1zq?7 zf1RR3J|bX{qzvFL1?l_5ET+>aoR+NI)gC|+1rfy}=Cx|UaTH-y%T552DHxW@&%17& zTZzEa#4Z5tQP789w{GY&+zx^BBf0}fp`g2_6P8Qg1=ryZ+~6F5uSD$1mGbBzuGFZ5zk`r!c6ru>HyLx zXg-5auk0C*6CbCVApp`T*z!Zbx}Qy&j~+UQ4F`}xK_7m0&Bg(HKOhi%cqD*F6rAB_ zKk6D=bVnezs|J8f3I_0vt|Pbm?m-~*ohE=R3aaiav&A|KM<8%++IRquDG25JRwZ@) z@qpVbQ3fEJf@{~6ncRJV97T{aEdWm_u%D&G*6q$2hCoujHh`xTxCDvW)W=yN2;AMz z0OU~c^MizaO`bUmfd{oy0X(B%d=DWrdasSgp1R)C0X(Om^=}Ew8@aduMc6Ew1t6D# zgV%&C=t~e@Xu?A%HRpEbEk5yWQvUn{R+{D}YxNoaJ*F#_Ots&@;>lH3IOO zf`g~{9VZ>Hj76YYV<&(&6ujd*#dU=%{`OwlwF|&o3KsNJ;-`GN%|sCf)S3b)r{LOU z3A0g-8jnDy4`u+~QBcHBfO~OZSTF)riu(anP|!I*nO#@Pz~8v>%dG*tr@(QEi1pCZ zXoVuU#@Yb*KtVjeNE zIRW@gLB;@H+`E=xgCdN3<_zEq1@~;E?1Ag@A_T_FIu4+cf|zpxrV)3`1cCC{69B3x za7`1i!`sYXBVaey4Zv3l#_`ioo|ReZBGAU$9Y8e&RYoFqDNr4kqA&J13*Z|Cd&(v3 znbx79D1z#d@^d# z>+3K-soT)}WaS}iS)amfH&9yWE_+k&8pAKFMhsg-0SPyDb&uKKbfW`M>@^cE-xTH>2yf_2eIR#_HxQlo?hyN25)y`XL(i=AU-P?lupXbv9?LL>GEv~=+KlRT$V-J6hmEYa)D;BX6xqpKF z1LJM999t)sDwcmjuLg0s3?9siz8cc6O4%v1Ae?18F)aYr6ik>eVZm~nw;RwMsQvlddkm$;f#40t%Uk$0+Q~8&Xc4N0F4}n=mD*!lCQ0dICmMaRJgFwfWRRE4rpmvPU55R?j ztJ!=}@0Y>2qTR`S9f0E$Sn{*X7Gx;l$&THR)&p>*U`h=?XjEwx{uuY$zX`wz3Veo3 znBKx;xNCTA*bLw#1*scFY)}uSqv)Y;EZYj;6a|s(l$l|`^8N_q3^oGbMu7!iXRK8A z8UG*5`|JR4nu5p!ViwhVId0O45yk-ADR8|aVa=m5ccCUF4L1ScK|#t6exs{J;!gzn z_A>==hJv-v#B7~$i7x_+IDHzSS-Nkw-k3n zpun8p7d1;GvMmCJwO#-MDLBaQ9xHSIv<`t`QI`M&QQ-bf#B}#O!V%7D`2Yx}pc}vZ zdXKI#&f_~L_yGu^ApA&MW@DQ74K+z|S0I2;3UtZ@Y`Wz`JUFRt76KrQf{LCJcIni# zxhO*ZxNrdB6nF+m+1`Oc7Z6BZbPd2&3cB_Yv&Sxh?-5YCd>z0w3KaQ@^4LQ|vJq%G zJqkbs1y)`nR_dsUUt}pSVgOvHpzm&F7WuXfehHW?j0X@&!JE#?%&v0zEYzf9f&>6J zD0s#AfmP+Ecr>Fo@D6||3YxqXvJC4$Tpr1On*<=5f+<^+S=TT5WvEHs?kNCbD2U+) zhph=25r)8+<_`eGQs8E+#HOg~<6-E)$TR?P6afo%}-^sT3rwvytB$uzL?m_JybZ*v2Xa(l$5bb{>O^5I*}~FmLtc0hRJ@ zE5pa39#?EK93J>K?LeE9B}~OmWitY;E{z0`NWp*w%51j6jJ^oSn`!{KLxIytWw!fG zn{Ehbuhax^mjWLRW#-l+W)uRQs>cCHqCmP*#1-OGVR3*e_QoX(nCAf2AIhxd1XKIKvMb)l`{18$I;N_45HdqF}a}m>u{w zc@+W2- z-Z97BTjmo4;41~q_;n65RePkM2zth$0IDfaJisrbIp%l;fis`O0equi$RYu|bV41M zOHQqb08m3gH@3I&sSU8zBMP|bh9yw$Vhm2#(~QOi&VvbobN z@qhinigq9kUMSt-v|R@Q+bJypSX1D}FVuNqa}!T<9kFW#;1C7n{I+Pb)t7Mc)?1}5 z02>ONcJiBF1|?oaO&W1r5r8cP;}lic!VVF*N#BG*0Cp6-T+c5MNeNkmBK!^!1F)w+ zmtUndXa3I@2)vrC4B#*YUHED{FLxbWtFnku1#pA{b+MSa%#7ZSBJ{q{5r6{)RkmU_ zW9#1D2t26i48W0s=dGn|b@$L~2&8#*1K>o#j}R%Fdq@p`%`epU0C1Foj*((^wJ4RL z2z~8(18}CmF_QluUS;8xn@v9V1#pZ4n{FaD;r;1i6k+ed0RUVmNab5Y5+@#{<$A)rw+6u=1zD%VI@v#kK}V*t2OF!CHf0M;%9PkyL383*7r1&aLI z`^{(C;neEVr3nDsDTwT-%wCN3!FkM%4{`t=6y$#42V)#)gTJ)_F_QqCp&*|h0IOmB z0C&DnjVS=mQgEG5j;E-#!3FE3dvySuqhQ4@G5ghSTN?U5EU485aGnC4AN(3FL3arP z3g$Bacv6tQSi(lVbE!a})sWc$E>O_FiID9p>N*O6z^J(ZyeL@1SCp@*DZx|MS&n)D zE>iG3Rmx2J`uU*<5AQ4l;7!3ezVunAK#u2>4jxV6MaHF*Vd?~2zEMbWc z7dxOPttmDD;738t7+y(xP>rjy3zuyK;7@_aEGf(D*YqrkFx0~kKmY~K8zjv2;prs^ z1diDXAdrIggGKDBxA83m7Th!f5JbV7av^KiHVmg$7Yug-2&Q0}A-}NLXx?cQA-;4M zfDj6_c(%9B>})#(25&b75K6&~^U5q@`f8j{cJFBhAdG_C5dyaL^m-)}!M)5JKsW^% z77|uwQTYRbk9r3IT&19jUk|u)_@u)KO#WmE;2H&jU=?PO`UpRCn}kCEA}HA0R>%&P zwm*X+_;nNiYxblfT+OO@jH!2J=aQ z;Q^VtS=~647G6}(sdo+KlgX|=vU}fLy%3zO{j71wGo7xH4`ppF4IZIJ?yM(~YkZJ(;DVQ=(%0~4J6(i7U zOf7&16toyEVeKlX;`JL+yYB!VQc&y24_Vpaxdug8u;3SfGzt!%;ulit4pKv)G_FbV z|6WGv6g>GVVN$h@AS8qo=a$P=rOg?Eqv^u!OHWem(E>Nd!772mm~$U|F?@=@c6eL15r65rAw8+VZTs zq~``l1e$!30C+;dYQF96MrkeX-lsOJ0C-A)!elYCu33oZ_Kv@A4pw3QW~S?98)a_^n~^cp89r z6gViTvXkLm=A$M#Xv_pqLBSPXdOPaa8Rueb)*JxuDM+c4u(3`WJ}APJUGo8apujRw zz+#vFQb8bY&_VzoDM)`UW#>PBsY77U-o*euQ6S@Ip-$N5xE_I;s-*xvQ;_ss!X$nZ zaaDGu?+O54DDW{AGK0Ifnlwt+6u=J(4EDBT!*?9O4=v2z3*aXOru?(pxs&`Nim+;lIe=djq!jTP(Bi|l z5pecA0N^(T8oa(z9y}AL1CzR10FBt{;9vb=kn!#h?aa!_&3Vi``d4)e6k=0&ri1d_J=l-Pi{MS zSnheElNw41WBxzeSU$OaY^?m#5J$Y;b!p9?zzt&F>d`Z5}HnOB?xuelG*Er+l^@8q<4bB`bdo`>1DMT)Xt!Rkwc1_s7PFD5f#}>3R*4S!Q zJ^6>7v5#A>k@Yy*p)cCx>eXsZz4@n|u}a4yWUV_anuAdO5dDS`Z=K!aR`MPW+x*ea z*z}=)&_C{sZNA(=ekkL^NVLV(aM&O94_jP^4^#2p8ZV!dR`3O}>c$ywW1q}Axu*5B zedt}HnrZ+KW<_5O2XiHCpQZzz%QINC5r8!XPx;BD0f!=SLC((C5Wpb{n*QMHW(NLl zjheJ9bqfF+3eqp|E6oygY!Nut+X#Ry1ylGvZi~XSyCZO#?Eqj$!Hyyco2RrG|CM@0 z8w0SX;2^)wpvlF2{7yG~V*=nX1+K67fv>VpI4xJ|um`{q3gT6y?CrcE8__cyerE>2 zfr77|N^H#hY+Piw?Xn+$BLxY3k;)2%=FLz9pVaZn%qZFuH zNZG=+YCRCRvCA5OGX+VnBy8NB0ksG`xncw07zO5~V%Ggb>30NLKeq$mLcyneC3gO> zIvzT%5FP<=oPth15;pK;7+y@ecbFppR|;BkC`bf%L0k~1HIYY>_ZjHnh?Ue;5 z0i345J4=NbM)fg6O}cv54S+iZMb;7)ZR3i6Kz4&X0C-TajGw%B(C6@A6rrZ*EPyi< zOxr19qh6cgxjYR^PXK2rupFq&ELZyAs?+Tr7Xh53K!1Ul$tE5Ag_>mIeF?yM3Q`Kh z?DUG&`3P9H_W|HZLG2JBE1aF@jKHyzegG~|5Vcmq-f8&azI0R&2*8Viwll@dw|R0p zimYxq#^f-p6}Bi_Gr=2%sRhFJFmq z%oJBJ#|I_@2&5p2-;w!wvjrXrZ0(&2Ac%q`K`Lx-i-}3-&*~iT06;JW{Xg*QQ+LnC z3tU>8rvnI~;Ej?p+dQ`U6BHrp#UlWr6qKh)n4(PzuAHSVc?=+of>b_d@VsV}D~hn- z<`V$n6cmhBX15mYwM3w~)-wQCDOhYJVs&j?apf%cMJ|AA6nxE-uzN0(@bG7kr~p6& z1wW>XS&Ni3HPob*#xDR|r(pb1G21gt4}Tx-zAgq3Nx@UTEN1Ha=@plD}r=vXF%cY}oi2KpX` zQ#A8z68ncXQYkRoyhXmte~l@s6zq!oV;fBNc_uk3=(7CLmBM)l8^r$y%v&8W_l11@ z)ZiM_MU~IZfCs)!JJ1+@t;F7}6(IGDo1((YXNbP*Ar=#5{kt z#q(ev66OQAOM$9~ly%%WDhEYqE?)>BiGqc9d6r=v{TP9QjKu(wDG=~$3RmS6bwnU2 zZz+I#6ePx}Flo3Eo>_?Ny8=K81^N7LbMf@#4k$vihpPajQt)8En601r5>G`qch(1R zp8}^&0w$;)G#o`Zd0`!Z2NW2)3D}xRzuF+sN^JvxhZL;!{_AL_^Y;;$JZlqxGzxsA z%IwPHqgn_UYiCC0E?~W0mf$?**Mx%r zawteYCS<-3x8b3r=Oar1&nQT_EoSpqKfqJfZMq)<@SK8X(friuwf=Z0xy{)YKrRJC zo%u1KcGbB0@v6WcKpq9*eEIg2*o@oguQYFn1Au%ALimxgfvX1%LLm5}6MzB=-tfNU zeXauk;@V|811O~6e43QSrY^?=3pu&RdDKHr04Sm$vQmX9N~bhM z&(N{h4L~sk*F_>$^yBv#1dQgK0q~LnqlF^&`AKu!mo^8U15iRi_sasds-V>j6hU?F z1puWKR7_H4C95{c5ZL+bB7iaq-hLLarn^rrLExDFWdN@zNaoeRg-z|;5itDV1K>3U zsw4S2;~)9>H{GO(KY%wBMDYtm46RQbLJ_|93g2BKz6k%|93V^Q^jJzpgP1IxXpEWn|0f1@>)TanpnG>P?Ma~9|5SL;3~gEx%|-2^$6V5dkmnKg5-%(*50El21A0L0H~wDM2(+!KhAd^ ziZCei8G!E;Trd)|ksU1Y(!M>)c>sP;5I0Q3#znWlAH^vb3IP11V66{7r13)!TzWfb zSOnk~1wMLWw)L4~BzlIsT}uG`rl8$1{y~wb;K`rYtzQAKoIz%uzws+t;yZ+{L-}O2 zt@0C?X`Io}%=7jGRAY&f6ny`Yc$Rr!iuh_(sn^ly~6S5>lA z-g({Y@hG1(2>e4E$tV9>$y}3v@-<2cM+g0}jpdWWCP&Gw&yP?>xaz-P-s+o|s^snL z<8cS-q0${5*oteJJz`T{sa!Lp_NvabED z91+NVH~@eR1q#JdmR_NK1A*zy)B)I1P-VcE!9*?_fAf?Via>zUWB|?-T;atGlcfE49w5|{0XRlM+*&F7^izKzyT3k>*9f@ z8^zAk0UW15-&ewvpSx^8&#*~#764ZYmK>L`uDQGMsOp2pJOC#suy`tFns2r7Gpy5I z0N^AA`2k|KHtxI?YLf1cMF37w;1nxmZ-O1o5NPVW6o4BAKg?CxtLfju5XjeA0pK(R zSEB^Xqe=B11hV5-0dS|lpi0QH*X_b<;X-HX1Mr|AIY_|5c1w?=2+jK%060TIHb0N5 ztbZvUaQEA=0l--b{+eU`(sS(r6k$r)CIIIsupTI36;s$<1hnI}060%Ueuaen{4O>^ zAf%@e08a`|uM)F;9ZuLIVC%C3zy%7dUkTavsab9a+_cyQz>9(;KG*$BA-)y?vreV} zE>fW0SIE|Wjljz!d&KVr;7!4=5keMNl!-qm&nnCTT%y2r5`Xg*%NC#}jhcB7z-0>7 z@Cwe}FIxv9F#dxjfGZUEbr7&F-le}02>fgfz=wj({7|}Kwzu({FTl(efG-7WuBkEu zlP$QIq4V7yfFA{=wPKcFZMz#asrxAh0R9xT_TUxG*9N$^8jU^*AbubH z!3ZlACRExNfWRD0Zva;*Fy}WGmi0HxL7@Gi%K)xX@MwoJJGJP<4g^~7^aT(>!SYHG zOV^d>BH%Y70Kjz$)MxX%$6gATzba9R#lV!~uw>pwvQ{eQu?<3xWK0w*cIv zAb@{?67EJzE?*K@kK=4$`US?GGL-}N1ov+VeezL)Q zQsKM3Y`XD=3n(qjv#73j4ds&u6GCOnVq~ikOg-_famX{Bc0ZrU-uWdMqI`0qe@#7X zFrVzSBv;mLVcrjv6c*mBt(Ohwlh4%EH-Jeg3}=lt{s{`9c=(@)fR;yq(qpz#R%|_}0PQ8%DlHKZ5n= z6ad_%z)mJ&`j<`4BJfkv20#)81$03=fo#OpjA6!Y*q{_J%n0QV?R z9r(5PM<1BudYgAhCjbvAXi+I)HJay6qX^bBy8=j~z=q!?koLVB z{`|+JbqA16f%Y^pi@c>i21U5Gx)*>93fgvQ$HaNc&k*oV?gQWv1&1}Htm~qixJkY< z`vb_NU`Sh@Wpv(9iXyBVGzdTz1=BpD-n22Lr~D0u3v$SjSA;`&O96{7$=rNAax#IFCW>w}tfWXu=L`AIy07@vh5+Pz!qTkF%ov&s3A^@cn`0r6- zFI)@pP;%$8r2xt(=*Q1}vEDcs&jaWMEC=w4f;ZK?f)jcWM|ja;6@b?ijBFuh_a<86 za*5P$4S+Wk6!UYYn=U;%89np`opk`-QjpqP!oHcL;b%zkTMwX|f|)INt?tq*6BHq( zZX^}j zh6(YQZ^KF}0ADHSxJkk)b5$py2!k&l0#HqXs{+5{B+mR10x<*Z0DPmM58qGUTYr9g z1oVYR0Mt+rFh|OAtp_F|V0yq2KrICZH~229*i>Bo(3s*3ppJr;u_AULbprmzZE$e` z@STEX{ABm#0=pd4q!85;0De%gbi0^ot())?fpeQr0r*Kl9p4$d+2L=??L834a2uq%OvUzyo*qUi&@M6@&3 zTGOED|M~;j8GG+`YngD6{&}>`_5S+x^@8q<)n7AOwyE$;5+dWTZfJ<`b~%4tEBk8f zDn~nG!}T}SlYiJ5>t(u1_TqeIHrnK>QDj(e{%L1yyNU=|irK4e2z5WOrD4Qd=kT_b z+$OMOB-$BUe((?a$DOfXww;!LNbk1~ZE<~T@kjmh&e*FHGUQW}t*#^HY}qK|ZFH5k zny5dyp8|T9*c{mo4`xMQ4KX=_2g#y6_zTr6J zF&WMQn$i%mGD+EpY?jO2N|{5lc|rUx9#D4-Wt*DDX)Vvg0GW;svqh z24?}Bq`+GuVjVB#DxnA!C(Z*nMM3U;6_z*l@qGl|tiAxije;qv62=eA!Xpsx*%twv zrl8vdW!AA^D*nd}FuVl7or2&eDlF^KLtHL=bpHwf4+^fG6|=d*@wkFHCEXXm84CQ? z3D||+g}5g4L=*tvECpdw6;{=vc0BqkEzJ%DaE=1+HOg$ArXF6!5M>bz;5-HW-z%|p zFV0>=5x&k01>i|RO(swLr#pKi&^$aGzy%7vcM!3U=4S>XVE5}9051x(`R?AVtF7>2 zQf3ti;35SP-G!{}TXQ`8Efz)t@TNc`g`ZJA>;kUyTKU8RxI{rhnV3~h&Bw`_m!YAGL6*a?YD=%XAdvCnJ^+6T9+*p+dzaPI5!k*u4L|?|p4a*9 zHIo!^O546H13(}J9r@V|X*$08C_>jgSpb44Fz?KdlvUFBiomh5YyiO&JozSO&Ix}z z{bA3B8~`B{OqeNPLv)v_p$Ka-p92V`pc&uZ6Lzc@t}n7(`2fNw81!7k&hOuizYqC> z7XZR3_&G zpdibEZ$tGPjlV#F=iUOiPJtj*%!Y@%FF+AmwyyvXNkJvAx7Q7uf`6i;13v(`L4h*A z*vMqga=a{VSNqQZq9|x}Qi-W%J->>Yq;{+lKr{vFC1PeL_E?I*!%o!zVklUr(4Mtw z`NR)_+b?SX#8U8HUBVpN?{A7g?!@l^;wU)CPZGJgv@2fK^P}J=fOrb#4-~SE*BA6c z5&GITDgIv?c9R0-^ZaaV&-vdFSX7xy?cyBuqu3E(YOtyuG2j1?yQ6dzD+yOO(PZ7bbxLE0-00R07#@j z&gX^SO>BZEY(m$s1#pLg$wI#5_L3N>kpq7i@;3f_3NWj;$P zDj@Z4v0_V+`Ov1zU3!+0%*{PZ1dM!vw$s3hc&9*e_Wi-tHAW zXAgjf6kOx0yn5=4$Lsl$$D092qhP)rUpB0>55MF0jxq<3PJz{U5!1}R;*Xx;`m_T8 zGANkOvy9`?uQw3bqGti%5d}iNR=Q@uF#P%NZ)OD`lY*e-0v4q_9S<-DZ#e`Yi-Pvc z#mw{Js}rb6m3wUgJf>iX4ZjcM>SkpG^yBOSWK-az;^2#lK+2B3@rl>`C%eIgcb zfAlWB3g8t5m3(Kc$G|vTm3`-R9l&b}=Dt>D3VP1lQIqNfQ2^dhkg6kKX&J8gz4Tl^ z2EbbiluwD-Udt-{$@(1=2cVpS?mNWneEV?RH5STm0eDBjU|y@!=~lf6J%d&DZ2%P% zl>ZX2?xiI-2S~EL3*bEkqxl`mzx+STP=v>N_W*pLV27TBr8jlzgutz)_W^vQKyi?m zX|Ml?N9aix9s>A8fkq);sDEvv28z&SWCnoG6lCl1-s-jt1Har%0ADCLQzc@vGKUXG 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

cW({i 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 J^)I`)?!Ujr{QLj_ diff --git a/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 b/tensorboard_logs_laplas/sasrec_freezed_beauty_2025-02-16T23:14/events.out.tfevents.1739736855.laplas.341454.0 deleted file mode 100644 index 6fc8b929b8f38f393765add94453ff6a03810840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1291766 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
!@ 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�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 diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:43/events.out.tfevents.1739731427.laplas.311641.0 deleted file mode 100644 index 292395ceeaf47facc735c5546d5bbbb61eb283e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 zcmajjd0bW176))dK<@#Rd7ctD=W-bZLAan{vXvnpg9C^nUg3%;f-*bwGzTEb48s9Y z>}kD_gg|``L28tmQKmu~pat6Cgdz$eiM}K2TCP^w{gco4xAx+5&fa&g8>|MO#~Xup zNH%K!nEUpv=5ZFfbJ7*bsctM=nVKp0jB?{#GL@+rY3Xy)6zPd>8CeS#D$E*{H374a*~azZu2DrPs!HMrln8o$_zPuj>~*n+dU;MBg6RQmwKU7 z)+erZROuUaKKCRGf?8J$XbaAa)6Z61@wFiu{y!Wk)Du)|)wb76 zkQDs-Bc!Z23(oMlwbGRdij)+w#qXo@{IWWWk4aUrCyPu%C0>tyf|xaD$r;g@*yQom zA@YVthNUQ1oZkM@oY>}2{~mweaQ$#6)q10!#H&fxWvX&EoE2yM+vwGvvt_Jzj&$>cnR^o`Oa(?>rO@ft#UW;9Pvq0Tv?R=Tj9w29Pk3KP5c3||CxtM zzCyn7+tJ{4h_?%NXZ1zf;*htS764wCc-a~kHm}Smfu7Ed`AR$ed6_Q%Gj6YRawaInmG-;0r8*y z?8G{IU38GI510Yokoe3(DN87D$VUET;%x9n#OHQM+4;Z{2juORD8U;O|4F=*oypMV zk&j&Jx`0iTpmc*ZJ6$S+A{CORCE8-u1 zBCv>`R^xuA`@IX^ns|>9QdVKsj`x>A>?ZIw#P`GrZ1EQ|e14X$-3H#4_~rTn`>o6W z0_s1qcqe!};){y}Ha$nEL4M1I55T`d{NW=!d%H~wpKrbad%%w%zE>i!I`f6UqWUFc ztH9e6-{&A@1({`MkoTN*0K5b7`q2Wbu|0bN`6jC);2nvNIKi`qS>c|@kFq!ho+n<~ z#;2YeMyNoxcVzCEjJDz~+_6yOBSy{vCKH;{AT-+1YY= zG4jg>HG!8AUtumVmkguP$RBiQ0q;!wuj2c>YN!uBuevPSz`GD1G*n=hXVq>%_3Ju* z2JcF|hL*rSt&vn9|C#*_@NUH4$Q78qaquPN9ir}lcPHLLCa~J`)h5XAwYv}AgZQs@ z^UR_7Fy6nNX}#b_5?_3uXF2*2PN;s`NB!VEiI;8T*}u1b{$J!>qXy><+^@WdH+B-3 z`ga{Skl)Ze6#OXSrQ03ZvYR?N$X`y>1@BF~ZKl9t5_Iu>x<+XL-iP=zBLwC%c-%@< zzuMmn{Al98&=A;`mWUv2Ezc!M{rUnf*L-OeuSe{OQ18@PWkN+{d#eJ+4J) zByQj2UO4c62FhMAwHti6&#%GVc{Unt?J7K;#a=YGUr5i8@0B@Lpxhm8&zI)JF=hXw ztMWGeDXW~+;4?51hue8Q%e`=R|2of9-tZwyM1!q#-Kb~57fAl1I zACh9Ti#(3{`?p@W=B#Qq&+>~fiDTIx$(Ky<4{~?OGxD;wyQre~tG;29(|<-^Hp9pF z4f4-lP@jRa$vgj8_Jvuotk&$Mtt8U zp4D6A2cY^L_osrNK>WJ90^1g|?mF@l`(wdRB;IHS&$1_$h9F<*t^glQyy7I!x_4{g zYfMSVT<{^p-!S8ubjrLPsQySv3iwdsQw;^Sw>IV$^2<*x1|LTJP;Z_ccQ#WXZ+|)) z{OiPjIF)CHK`!`ft2JmD_({Y|-2}EQ`&=EW|76Gt@c$xy`D31WRYq(<{@kal!G{wc zc1*nHIS_&g1s)mj(bMt*aB8+ZlrT0b~4#T~CWkb&WimVUvKb@fDSw;1h|zs3)-2LrsfO{heG7cqQ>#xjai)^sN&4Ly^COpG*9W zr94YFxO5Ep+g)mJ4_uRyh%f2k*>{bTJCIL0uL*u0@jr>*kH2f=m?6J!t2X##;tRdR z@4Lomyx*PA>4Be5{A3-09q~RVL-ohk7=vFxyswXVZ4QY)h5VfJ7T{BePYV#w^ZY{m ze$ME!1;3DZ+mSr;=DfXe{eB1Vsl;b(=2_Io-T3@}&szpQjd&w*KZf@w;rIDrzZ>{P e#IMv8SZ4L|>8PLU7rekPCVp6+cz%`zjr~8l2)f$< diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T21:59/events.out.tfevents.1739732357.laplas.319889.0 deleted file mode 100644 index 8d0e39b0e109d871a7131a4c5f087213b1dae78f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 zcmajjdtA-;9|!Q7l=Cfgzu&07-&3fRE~g7=eUcI-BSO+St4LXe=01{ytxQvs#^$=H zh#qYyW7KT3xeW1Zq?=n*OT@=_wPM+{ydN8>-~A3^Z9`qaR$siNOcNK{0_J33C0&n=a8>;9wbBC$U>CH7@q2R%-Q_sC z{QSLkN`3d3`yY}vhxqtjZOR#QItybG6XY>z3CT%LN%Gh@KR1JFqY<*M_z4ZXGL$-@ zQAM(RZ32YMI1^6y|3kx_4KnP?Wuv>3@1fM%Cv)DCa&b1et)b?v{iD|^LAln^hJ%5U z+Odg{GUrS=z1P-CQN+e1CWQf2JLe8XT#!i;$kv*64)eHs&+Jh6JL zSG;aTJIa-2CcQN$w%O0S+q-UmOoY91J&zaBDiTGOGH1z|a|W-i7n{6LkrET95F0hu z&GNBm3B2N<43=!neI%K?P8qb~EI7k|3W}|+H@oGt!liUKO3JhUEh#oz)9CAa=H$m0 ztdwhphXfc)lD_EaD zHp(^1zF73GB&bT6Fy;)ofxTV#lliuP)A7PuxlZqX?AuY;`(dA(r6@!vMt zv%%U$dB~?Wb%WOBR^oTO47@pUu^^8OQWT1 zVM)C?^1D~}1#d|FvE%maq>1qY-RUxo*xdV!j=WpwPHzqzhLdr5v?i`4G z&qyA;3Gvfp_RK<1Tt(itY6y5!;`e$=*@JYWdgP0z4+n2X{IAyqw&B2GE98$Gx`Q_- zzNb`RPwKJ_k?->J25&*U^I$0pO>o2KU#FuVcuV5DX9%n!XO9i4A7I45TM@rhM_@Iw zvA2;gvj_%nP5kCufwAY>OOU^!G6DP`;w!)5+07j<-a&psNd)-8#6OV;tlyC@s*o>O z842Eo_@}l~HqBoB-EOG#Rp5sZ-y&YmKiu$-M)gyNW`Q3{d_X^eZAuJ?L;k$$ zM)1RkS5p_*%;{!pkyp##1m2POyXgXpT7G;b^22s+0q;b-se{1eUCU-6AGV?pyfg8& zU-7Kx({uRus{8nM@WYAU+{LqIxwk5+uhp~*ybJLTpYzOd;;b&@muxKt?@GLZy}%T0 z4e`i_Z7l;of_Q169m}i=zKs0isYk%O5pR_yu=rE4Cy}rH!-Wu7w}%h z&u!${vgJF@qxwH5{RZBf__Dn`D>U9#i2Os%>)?HeFR|v?Rp+tA$d5XI6TC0+AI=uo z>}OkcAs@Y}1^h_jz3OyT`!#AP8GZR4fQuVQbS+b^f2dR;d2S%-3dYg*o#6UUVD zKO4P<2eewEkvP1d^;PbTv-{ahBd;~ZziXhu_P~MLuYzx$-mlmR-XG68I}Rn+H{SV| zq}c3y=PK_b`wv+SQGr*c*{KkTO7q{zw@mPl)4%j8UOf57p~`4i$xlq8+46VvZ8LoI zQ&n%zAW);T{h7(AHs*FfAw5j%QK&i`!*uKp-&fhe{z}G zXbLP`tzszhs#QJU-zDC1vA{k%(()Yn!>!N32M~X)lV{UB%5eX)tNWz&UdD|0r+GXZ z-}I#hs(&U-0zQ!V><)pA+MbV(iHijTz>gtbKZ75Xt^!;5aRo}@$7DbZ#nYn6Yar| zBYxL=JS&&oxq`fty(9Qg;-!uP8xfy_A4~KCT)>Yfe(7_bgLz z4cjln-@k93H~28(GYfgPCA9q*s;?C@8hkkMKULZ>)j#~Jk;2?f$Cxn2yg`41PNCMUgzyn6ju1 z)!(4M0{jf(Z&ul{mPdZ8k?$X#0e&X&b}j;2R}pm)`OimWgO4U&WjoKtbj$E#Ph`|5 z;Aat^sm8PD3vzu_KljXL@G-=zU$tYldhSP&@B3W=_}Rq&_$$w{6XjCmPmcNmd@S+D zE{fm(=B$s9Kfrc^mlJM#)6MsWIA2p;~@cmm8S`9vd`1P(lJ3U?>j|mq> zeGh&P@ex`A>r@>Viu$Q={Q>-3;yvAY))?A>$G~H@=fEctpX?)^?_W#gs6HEY5&S&j zt%mdL#=4^`kbk=GD)=Pg7ktLEgr@a)f8Fcq!6y^1FW!$jjUjoczH`+r@bigZ*;im? Yv(oY32t^NC!GA#ffJ~kRKD}f5Uo)(`i~s-t diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-16T22:06/events.out.tfevents.1739732803.laplas.322005.0 deleted file mode 100644 index c46326387cf9c89c5384c6c0f27bf43cb323cf4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 zcmajjdtA-;9|!R6I^T-!(p~ENJsqiJwa%$%^hqmpwVF$bj+8E(inNTmq=_w;BBP&S z8y39cDgsj2ab1+McINttqm ztNf*ko0*g%kAuJb8m;bYtE$_4#n?mit=^rVUe=YEa7G-L`LecKN_s|y+4l{G!3$%P zi=9-uwaV*%qI~z3re1ByS#U=4;!~0m;xm)d)7;V$W+eK1n$-+^M;ajV2;o(sjL=(Z zqReggA!Nl3;*9?u8t!hk%&9{9v3AM`l&WoLeM`#2-K?dbmQQ}$<1Yl&T1Rdi2o#MS z&;}`M&XO~EV=aYzMtn+&vc+Gb^Q03MY^7Kg>zQL7EV}3S5Mnl*6=zCg$|h@@T zcTb6?uS69rTfOF~C_7RWwBu|z^M48|TP?7<>HEacUyhPSQU8`yHhbchpWoV;bxwAw zHN!&!EJTV0T~~T9x+!PO>B*IgzPjA9o9*6z9BZFquj0-RcZG@CzWfuo8E3-j|HYM! zc}qW$-Y%A{MBc)>`yaiso%|!qWt+u%-wsyQSO2K3Lo{Jm4|sFVlr!k9|N7#pKS_{I zSfQimpbBIg`MnUm5Y&I|?SCL=#`S+Qplqpg&S2Sd*O+FM(5cnvBcW{S{Jbn5d(-QA zLsV<*|Ihp}qMABY!h$pB2K27+#--e_Z<%jXrS=X-Rb=$g#p6Y_$5fF)+(6C{N0g2E zrQPs#JwDYKW%kzhol&+nexcOw{Fvj<>{aXZUJu)5QSX;AR432)!R$vtIl0+|$WL3- zAG`+fe=I2++cWF2E%Kjrnt<0N{)5ZDfiq8axFc`wI0(EJ@r$lUvKR8i7s$JJ*nrn2 zzTX`;=92Q_Ir8UbYeg@;SxB!0QrkbIFa> zId+PXf0XM1UPQe2ilMB)_s(PFEppxk&k>&(HH=+5k#hw31u?$h^@#sg*?-lZE-CV7 z6aB&K6K@~n##&BPl_FoWA^^Mr@sedO?2CTP9{E_CVDSBk&k`i;>{IoF$b0*Rf*(Nq zQ-2A&A9n3J@5}K?aV%k z%S=UHelP*N3GtZ)Vs=MsW&!fWhm*jY5}*B0%*Iw7OGbYCrZn(o#P5p}GnZ(M$;eOn zBm=xT@m1B%?C!;e9_05|XM-O|y#7If={>NjL*97g$KWl9kBbzuTuo;$qiBJBow3*e*S92Jn`b|JnQmo zS3|xf{1kYB_{)w0+ZyYfg}m0sKYXs33A{7$(k`AwgxP(Lyuq?7 z;3dTG9we~2KiB9Ze?jdg_@Tt#Ro>5+qQmk3f5V}B;9ZCh&=r_^?QgeH{gCoD@WY7L z(h=B?Et=8DH=Jq*?@D}Yw!rM4Mrt5G{L2pTZp2$k1ZH-w>TBf7&v$`$C;sGio-Jhw zmdIPk)ULif{uvG@e*F`kgcH3gjngO2A8rFKrRn<&nobkXK*n23|(|>{~nw z8uHnGdC!TS)ue<#n*yEHT+uYN`b-k10?d!7xx&N(1ℑisAMp#O3+%~{b)O=i ze2sx0NxZC?XZ^gL@%h&HX)yRv#GkI<+1<;z`2BMtEeyOr@ej&*Hqv6F0*%CGxxu%3 z?|*+uA5**WSLM>ol;wNSXsf$E>2mgoN`R5`16*mYuBn( zXe3U*GyYYs&)NNlyn(X0&zAgx2HTB%=&NAg(|ePX;8Q=Y(gr0prD6Y)R5m-u{ish( z?2@fR)!>t7RUabKlf6#9WrBZ}y-ijS86V`Liasf8WTO3lMc+2V$91av43DZijIzN# zub1sJt8Dpn!U~_CkEV`5w`En=MEJ7wr=CkIc-FSndo zqsuh#V~DrS5tu>L#UD`pZ(`)&1Bk!$JI@@B{B{9(`@&@KjQGwXo`ssWR3U#geGd3Q z;#al{OnZ^G8S)X^v%rrf-gGk0GLBcAL%z}ABk)1Q$A8Z=52HF0ur3}?y`*;iZP~t;scy@8{-jm21b#DV7 zMtt68o*l05z{d>km!06liEsSQiFuA{v_tjtQp&(b5T9?vv&6Fa<;dHvuK*uO{4wP= z9sKAd-sZLyeg{5^_+_6fk0o|;e2fpeR1JP2@v&oh=2c!a8ub&ns2=>bv|$XCz*3H*n|FIHYJU8Y!v{ODCp z;3pA(z(Qa#-evgMws6rE@RNz(xPxZ{zS%bo)t_g16Z{n7OJjI8t1)Z`@?7{`@KcGu ze$i1{fR82K$wOep=AJ6ja^u>ThsD4(b4)__wSN+Vh@t)5A zMLtkhAAADwO@;z%FDS(C+l`%u;N`^YWb-UGIcf>2@A}jX{7m9ob9feWL%tCC3Hesw z6NxYB;F-oH&85h1*kliW7V+1V`=jq_6KCYhWIXsJ;tNLbOnfF7|4b_RVJP@y;v@A1 zHtfUilTm%X#vS}@;=R3icA)8s3-Y%2Ji(_BpYAKLOpTSn$Uo`l13r~_yWu?hbof2I z{}!Ja1wM`VtYV&ZKiZD>UtXPoPbc0~`8>Ak7(}3c*wA3`bBJH8EwI%syPA=2whje9 Om-zm9Jac{Tw)Fpl;MukS diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T12:36/events.out.tfevents.1740217007.laplas.2652164.0 deleted file mode 100644 index b2a68b13e87e4037e894bf8d541b26fd055c346d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 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 VOj0@D|9+WD{96S)b5fnH`hSj?wqF1M diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 deleted file mode 100644 index 491325ba4688f634481874617804a01a007a10ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072545 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
&K(^0?Nt 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 z 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 z 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

qTj&5m5wNmGvbyb99QD%Pm}0n)16V+GopJw z9H_B8k6uSq2R9TBjEEerEc(6=qJLf0@7^dJ8F9}@Cc0a$r?v1?Yx$#aVnjWtx6kN5 z{2lr0ZuYv0;shgf%Ot|RpkD?NEj2<=oMeQKqeMg-9hVR>qxcqzQ;awWanGoJJ41=M zz55=D(~Rh81$*eLcfUr&0sANv&WxDR2AZ@V9M>lz(k~vx8AiP83{SWQJ7_M*X;un~ zvy5;zk_bP8T69*C^)pboFrwmwl2EIVCy`m*-;#sEl@a407xZZP7+TAy+ob@-IZo_{ z=Wa?Q%_Q{d_#TBDBfO_b#M7LqG<&4vQG&vq5nYZ-Mf0Y&>E9~-$X65|jF7IAiro4R zvE<4Zp7?>nlM&w<$VB0W#SMtKpjG$Gua6@yM(od$ilxU4rxQ^}sWA#~M*KVv^hJ&D z^N3Iw)e?mdBLqY-IdyX1645cR9g6deIH3r6ft^Y;li;Y{8N~%g9Eg#Mn*&po$QYyN zDx>gagbM6EKjdI!2ocx1_dwyt2nXoO81`~AeV@;^?Tg|fBb=e`bLoB+D>6n?uR$pM z8IjZ&PC`wXKo{PJS<6veV#Kkp5+O77qi;^NVjUC#jL?K=?0tYPZSgfdJ_f~QM&v+# zquI*zzT`S8kLaSf!iW>467j`;5f%B8X(+BTLM2v73|CkXOvY$Gd=830Mhw^{6}2pv zC=$_N{z4Q%j2PJ&&Mq0OLvxIu(w3nJW`rB$d>8G$G@OhPQELr~YmDf57IKVA8z&Lr ze`*to>x^gs8*n7=J2IAt(S3HHxWNeB)=+Q%qz%m;*=6rV5yA-j_wYV%*5^JMnE6P>(OswLlX~bP7ZeeUIMoNXbsQehk>nmM`fYaq^%VUn zs>wa<*J&*OUt@P3j@9-(0KB=Rd7i!ROQS~3UMlL8ispG9d__XhhF-0Qe5x({s!4-?xE0+;GF&_?nH zP>*}|Rl2l?;_PF@&WJtuM+;q^7r9r(b60jS$vupJ@QeLT?jhiciHes=M`Myb(2Dy7 z|1S5Ss+*${(f7Ck(F-2_FB&?ob!4*Y{gxGb$-`%%as)5>F7qfogXtX4ottU0vt1KY z6!#cmmjq>CAyfO3Hm+W`~lj z#ONZiAh`W&GQfAdGl~a{_#`hDJ{;(9iL^2Mh6jo`M$Cj2WKZ*^(0x`ELwry?WW?ys zVjH%v^n^|g z_Yo(fNMeLGyf`nm4v!?)QC^ga;wd9^_sa{PQWo|mBCsYMMKU82;n=RBDZ6R&dw#E3XB26SNNFw-ZW>r^BfZM}t0#&#j0lBw zxMS5jJ|e=nxF3piMy!V7P4fl0*N8|qlAy?7L>k<|kwf>3iBNJJf+CX<){wILARnti z#BJ=yo7||ONf@8vU=-Se&rRz|C~jXY(y63K`MC zNF)q?+nK&aKgeuH@tzSCuu^o=k%M%qKJD&q6dxGz489+Kmsb2udew7{9*QDHJc1I& z>0H@OQ@Sln%utjv;t*^wFrfY+ zy&q;GTNED|F-=ciSp3(iH>6i_PtKtD#0VoxNRhmcqR-W1H%Am@jObP<5i;vbSCBT$ zuDhc6%m`PgzM3*UnWos|FMFc+!U&i~7OW5UX-V3MZRdxgoDo~hCBiew@&qEL)m}sK zl@W$;xLfrXRed6k{1u9#f)VjAAZ?tKLC1*&#*rv08BwPQ0iEaE-J}iA%6llP7@-*~ z7FKt9zn+L)fe%r9V}yT+L{M=KqRacXggik}%?SBQ*x}N&7Yza1n>AYb-55QOAg(u!L~O=ILWd z8&z(_DC!we9|H@}-b|!P$6&=TD2%NCJ1KsrS|oJ08Ss?^rXN!y{BZ6QL?eM|w0?VO z=jP>;NO*a%&7B6=SYR5sYpt}_%DRNeQ+uNRAR$;vFYuMN+mfI{CdHjBq8ntRfvJXg zpY*YK<#G~SW|ZD-pp6HnBi??IR(+4`L#(b&%pWauSuXZ~%9t@0mLxE3wfz_So51wt zs(mVJ+s*eQp=IkGzu?~mrne3~Q8^qkpefNG|0fL{KjW;Z8ozH7&9=>rO2CUYW*()- zQ1w2t#bz3$)HX>*VZsQXuP{K8nR|{r;LVCtQ54N*hug(V{-u`rlCeEcO5#jom7STSNL3SS8dJ4P&q^{eyMLutnQ+MOXNPBUV( zi9~2^yL<>~W4+P{6lWOG0_NMsmW`mlLDMoN6lWRXXCf9lJWZvarO?TfQJiDMKlQM# zZN$I!@3EdgiAVl3pF}y&S~_M);(Ng(I2^M-rjsy%vQNBP=w;!qI1DvP6V5 z*^J^MBSyj+z^Til>8z8Ig$@d5M)bM~#}d6iL7zm=7+n-DjL3(*+4^TW#*$u5QP4x- z%7_hv;8;6fO+zA#!VOWlF(Nw+c0tQYeMN+Jo)HRnMy&4%K}yp5T|}g8Fhg;P5!=VX zA$2F-`4Ca6WQ)Rs5f9-gsslrFf{Ac#aTdj8MtH$2dF(QorbPH`zktG%5z24G!hp?h zBt%5tb3@_9h`-@|wWs|>I=g&F-wTB|BM!mtFGt_~b)K{l>irLjD~yQF6$w-3<<}E2 z$~Fjv45)w{LrK>MSXT+lT zhY|CZiG>TAZRt0vE-e9tKO;85>iNMZQkRon-8hnrB7hMK+e?I%J7ei@(6!A=6oHHw z*A2EZuRKA+8sqEfD6TSMaj1#Q*1&-(W<|Oz4$e*Y-ph$hSmslM!`$pfbuno2FZh2Fs!dWke5{yB{&~ ziHCNK?bqB1~tBMnSbw7UJ#LYMn|F;;1(G@&O6OnvA5 zVt*5u=C3)SViX!_OF~Pv`M==b1*T!LnJTia@1+r)_&;gr_>VH;&t;bM0S{K|ix+*D zd6W#pAn&Uks!krh>h59`_ZYDS=BbQM+dm^>{n)`MVi@rNW;30?%6Su^|7JLfSVk-` zl?X$e2E-82JzNRJeMUILFd^XeXImmFk4!@GfDsk2+{@rVKK+CT_nLwtjuD?BTy~qb zn11^9-kFZ#AtTJ;z;uJS9RZ|QgWJwV5zmM=8WJIW;59l_fBkAciUdZ?gWxyrnEE8r z#$J_WC>}AQWivRjGHPKC5mq->qj=1Sbl7{!INXCS(%iIiBZ@>u+;0mf0+rmRAF|Bx zIw+nnVhMa+uMGL-KzcRgur7)uMkGLnb!WXx2O?IEI)LISBc4N1SGRXn+C+3tKZGKg z5vL(MdopSe9e(O!*v}kzTdDVU6NBBUTQQ z7nU!qXhMWX%QGlmFyhV@*qLSH#hFBu=s2KAWrQ3oLl4a9QA32kjw_0nj2JdcEQFgh zr9&!xBTp2s7*R4Cl0&xBX~sLW$QQ+HMl4w;78D;(qaVvocLPzRF~Sgr>XiYOWMGhkZ zPs$6GdT;4G)rq1^6uFGZ>nIYeZ_c3$b7N-Zqj<}R@<~t-F|3%rcb6r8K#|9YUFmRI z&ms|hcH{4VLXppihf>%~*#FEpa^+g%Dp3?LqE&xLo*u8DVdgfM8Wissu>gYj@}e_z z>FDbErolglZH0`egHuY+>s-+%y^?ckjp98c>|o}%U{%gXB3>%BNAZCX<6eq{MVCzJ z`B(Z0T~QPGvYnm4~0OrIwG1KmP1j(h|#c6x`V>-)kO3j zG!R88BdYGeJkuIyqK4uNBWmpBh1SQ{942Ct&MXw=j3|U; zM6ArEEFyMkX`%Sa2<6^lA$9tEPa<5@7o(_PL=B7?oWHj&BjVkNl_)A1v1zwNXsOY^ z3lUCp*Q2OngdL0kd@`ofLL1|;+9x@Ky5 z(|stuGvcKxT*t(IS4kTqJ@rx4Fro$QH+Hrt<{%NCLyw@SWrWEEv0&LZ^C%H&_f1gL zG2*f-jHx>|qXBkWsyT{!Mg&4gZhI-{3TY$U-4=zB&3|W1bzw~1eMH-G5}1l_tO)=4 zhWjBJ2~6{5RVmM1d0j%n%f~ZUHNeIKQw9A6Qq7RFdx&fqz4{Llf~BSjuF`3inzbY_ z^_sD^K{gtgcABzP+E2gVR1%mr&05z$e-oI(jOj#!`oYAmGu!Y-3te{c-KpZRt9NG- zn95rGVt*5u#ys7kQg;8|F%nwJTKZ~EU`hU{U@f;%s)z*$@uaPq1 z>C3l7{r`jUpE6>TlSayWj1JBsCBbuzwlcZ{Lp1$9K5v~HPE$?kipW@ zYsu3|8S%cvZ4HJgBUU_Gs+|AoRU#<}mjA5NfVeW^nv6qI)lg9!Q6asz|3*Ovhxe$H zs#{JAC1u1%`~0HVGU6ZmZ1jD=x}Bg5o$MN+D){ab;c- z>D42n<0woSp)^NcxM5s9nuy|QmMBgzLZJ(MOGn%er$CvB9U2|!`Z2*U!{VfxspJ4B?(1f#HF#7RGiF#G0+T|^wYABMt~5kC%a zxGwjJ-ocp{?w~lyhykz`{;#lkbd|G7bqtDAj8NYNdk4FXqW`OFW$`HN7;yx?rc=gF zrLpcklOzMKqRQoN zC|nrf4w;=JSLa8Q>sY1P8-*(;+Cg5Rd1W3Er*-8}xG|z_Eo{rx(cm}{6H5l7aA!oG zwpeJ|V}LsmE#4}kxWtGTMIzyxL+ltL;_a1CcrcOr7boTaz#wg*PMoVjz={-*z48 zm9Or66jvCrDh1AG%@3z{u*0CGD0~>P!x;{co9#h!D7_L_q3~ry~$;4@CeY z_8f;*&a1n8C2dU0FhCK=2+MPDKJ zFJI=$kv47>TcHSIL^(wH*6YvHbHevEQxqB)Dy)GMkp_aa_B|o^qx6g>*sSJkw+pk&H-( zeC)Os3+bpYq|HkdcNpWIokj8oYr?NJ(8hBQKMsAGKTmN2v6CMM{n0{~ zMgJU7+4$|t4VrsM{Kftz_fVX7Or>bUbDBN4^eg^d?jdmIOO?e3ecqGY!-yxpG~K9% zj%Rflr+VqtX*wa-%{3e^`Y!V*p&45CTMStLUE4~l{T;zrAl`@d0bmPi$xK` z2z76f;MFyV4%Ibw#G{C1ge8>asdimgOxid-ISIvmMsyB>&HT63(e+0LU!J3Qz=()w z2paXX{7D;T6=^8q7~z)=_5MAcJSHOPNfwHSjF{J2EF^th`jUuYZuuzU8R1|D`+bhR zPN%qMk1s-zzz9t^nYP9*mri%;M}I=`h!HbO;q#jPWDn_8(%T9Yj~OuuR_O1OMn@2F zxwZyHA|q12iUrxGY4o0p6Pv~Td__HBL{J{AgzFkACT+-Q$)HGLL`X|0JbrFVmuHyd zc0loz5mO&Xgr%uQT}d13k9I?m%!t-kVMX`@BRbs~^u9NWXN-{j0)c5stHq>^Avtm= zQW&8*4^rZ<@6riUU5kMzo-?B7WQlN5IgYNRJ}s+=;sql#n~8+{v&xmES97XIqex}M zp5>6*pX5_Y#J1WAC|)w+2t0{Oer`1EFI=vI;uRz8ibcY*u)TDsURJG!;x!|JAk}kp z?nXK^?4LCYMH(Y&VW{5cM!^(v9plz(p?JfH@78ic{--1wnChu4Mv=~lcqsAB8ajc=~dgiYf)q};?4_^F#Oit7$TzgY(|mA2oFuMurwsAKM|KM z=%C1E#7hf_Abs<%w~t@1-6(Px;RHdW+V#$BNgF9a2T|h6a|bp`c)zf za!RM)TFd5kDBdw552{OoXCQM_k_x}jK@bWF1y z5lT@WC_XTvcslI(ZfaF=E3e zk_jvr}bRC*$cGDb8zCNG4iY9AnCo$GTHpBbU=2Gwx3rnyAq4NXJwg%O&tub_(k z3R5EXpUOs2&WKGjB!bgpb!8%^ekwrml@T_Obj;jPSU|+X+eIiU7}3gGEMy0!(UFWo z=g%lA8PN+?Io~YGrQdUxW>qMv7@-S$7s?ho(s%o0gIW~d7|~%fRA22nOBaDg&u{+l z=eVSr5&g9!g4gJiKIF>xJGMdboe>qoL_+;i(<&lX>vup=!-#h|BB8i?x&;x3w{$~M z%LpU*eWd27_aj2DXCD-GjOcP-PH-O6f{w3dCCj0xXGAw+NNg&0px?oq-2+h=+5UG@ zd`Q=yKXlM!Ba(RD@R`CdH zbB<^egO`Et)N!{CxP1GhziC7;yA^9-YnH)~YQEQ%2~(dda+2b`_*o7n3`pIKhYtb2u`n zE>)L^q|)vv%owqxFBCo2KV3zHPIMm>=8TvLpVzv|Ncz93nkPnK!H73a1 z4qFaJVaW*P10vzkfrHnGc(r;23M)n&T?spyWRP6xNJ52VsAg;u&-%<-5;B z6gG@dhb=1AZbvU9ZTQ)!qOfJeh83`zLbvLpM4U`lM{$x7gPu!-X=Xci`kb0T`x7@}}wgu+ZnMi}05B4S*= zF^UU}7y|3iaNrb7UISMC693LbS-0n@yBqCYO7R5zIXu#efB7ND@MBKJHi^7=^ z+k+)SRf#g4rz#nE0fh@AifbT-#(wO-$dcT2u+wB$desK z-*BT9B2ipsM4!>HO{~ldXVRF+!!OM39-}6HkO_ zdm;*NMqDq4w`k4uY$7H8Lt1y$<(LQ&5C6 zq6vhVeIIzuB3CY>GXupfMyNl4Bv*MH-AQWS$Jr=uGh#_J9Q(K;Z7FG^wZVK85sVnM zS0r3GHE1FcXBC&Ah-Acpc(E}4%qu!qtlD-JiaU&m_$(F{_%ES}W{n-|QA9CfPlQ;= Z%Do>*dKI9!6-6{70%IU?lmDsZ{{dG|=cNDu diff --git a/tensorboard_logs_laplas/tiger_2025-02-14T10:28/events.out.tfevents.1739518113.laplas.232484.0 b/tensorboard_logs_laplas/tiger_2025-02-14T10:28/events.out.tfevents.1739518113.laplas.232484.0 deleted file mode 100644 index cfe6502e54dc672a0c547045deb7e43ac267f3b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeZZfPjCKJmzv<`RuB(=k-lTDc+=_#LPTB*Rs^S5-X!1JuaP+)V$*SqNM!9q7=R2 h(%js{qDsB;qRf)iBE3|Qs`#|boYZ)Th??l7F92d{AvXX3 diff --git a/tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518142.laplas.232572.0 b/tensorboard_logs_laplas/tiger_2025-02-14T10:29/events.out.tfevents.1739518142.laplas.232572.0 deleted file mode 100644 index d07c554e655b3b377cf8cce6cebc5dc9983b9c2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 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 diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:38/events.out.tfevents.1739615921.laplas.455204.0 deleted file mode 100644 index 836a4b3566ce34e812b1f6188d74697afffce628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeZZfPjCKJmzxVoRPLh`pr#8Dc+=_#LPTB*Rs^S5-X!1JuaP+)V$*SqNM!9q7=R2 h(%js{qDsB;qRf)iBE3|Qs`#|boYZ)T$gc?#q5)4|AzAdVrHJ6YguYuiIq{19+yr@YF=@EQBrM*}QKepaQD#YMkzOiDReV}zPHH?vB#GbVH2@*}AMpSH diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:42/events.out.tfevents.1739616148.laplas.455908.0 deleted file mode 100644 index c8391e766333d0e22f8f4c436f813ddb4cba98fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmeZZfPjCKJmzvCBY?FmY9>7l30?NpQoRflAP{f zDr&xCs+C>94I?$Eregoc44gNjpqiw)B)NppH5nR+?$uvnwM4%^7)95~Jbb#03`Dyo z9<}Oy(EU*zYS-?E8{Ie`H9>XBa7l3qBiU7ynw*%E19akY?W0!Hyc}+5K(+lZ5cA?Z zISr~!mP?vT1XCN(k?s>dTWxMX{u)J}+8X@&fX)<-x3?CbP~fBqwa@&2JOk$km_9i! z87@&I`;zm^Qi~GPQ-KckT6n`U>_C>E7F6T9-icp1C#;29D9mtj>B501aErI{*Lx diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 b/tensorboard_logs_laplas/tiger_2025-02-15T13:47/events.out.tfevents.1739616467.laplas.456753.0 deleted file mode 100644 index a2d9b56f0c01d2c4938a7f86658f41074f22e473..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 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 L!?zeJZLat~>soxF diff --git a/tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 b/tensorboard_logs_laplas/tiger_2025-02-15T14:00/events.out.tfevents.1739617215.laplas.462145.0 deleted file mode 100644 index 1c79fbc6b4b231f562d078e5a106cae05869c6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191451 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

=D7)Vn@F5$D8K3fAd7XyKHRGa6 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 diff --git a/tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 b/tensorboard_logs_laplas/tiger_simplified_no_residuals_freezed_2025-02-21T17:10/events.out.tfevents.1740147036.laplas.2313784.0 deleted file mode 100644 index 2373fdd2c2263fd739127af7eed55bbc7b3c1160..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1056014 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

HUpVlooI2?{3gHKj1eJX{msXlek!kAlcp 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

ChTP%`w+!YlOf4FPOL5KGsF8 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 W+y*pSrBofWMYjbD)u#f`fJQ zcr!nS7NUlK&7Bz0yyDcE8EB^9baT@N*yv0_ zg-!uaUv%9OwfjX~S2oDTXA1Tx4CVXW`cj8zs~xNUi*n-?=tT2vW7HX%Dd@E8H~qs* z0rv${y!>1Js!+2(V)t+RrvkjeBLZ8u?rsAh znF2OZ&OYl^bw%K0m1kQ3DHMF*_Fs%oSh56xZW@={0Z64Fa}xKiIe2#y0z*IEZ4V%g zf^Xc~(8(Sjnj=uNzM=zwTNLcwBWBYr9`{4w#FmyF0i;tfnY$vn6YGF4Fk-!Xbpnt< zLEGyRc0E4*CaMtqY(i%MnH20ABw-7~+A1QDCNk{;Ad7-d?IrA)XrK`Subi$xu8M7QW4GSJQr~}BRz@wJCLU%FPj4F(~v7#%0I}`}Y#Z1lq8SW4sK0Z>Lk^j#4vaX%N1!2Nz~7=UsLvYJa-Rj(^} z%IAt{pWy(WQ&7UKWNxY}J&r0|%~2Ww-~|PxkwO;J+5k`E#wNU}2QMiYT`6UeLHT%c z?_6xQE>w6$!M^WOw)5tIb7)9+jX#bA@S1{)??p@?S&6ToOZTYi0jQv$c^?sr?brP$ zs!(J#NFTr(3T(KhLA=E7C<1F{%rpS-mVzj5k~M9h%1i{7ZQL*#z&i?N&5$s@j#D`T zkNLaC0H~zE%TCNv((d#@;KHS2h5)K4s97Us{0aJA2n=g>g$Lk01ryJ5yLBQI@YI{Z z`~p6J4-_01xU-zm=Rczgl2a990eqyO{}2(g*w{4-0YTOGaR90*_`tnzY8M>vT92CH zb>jhiqF|(#m^D+nw-#0SXjjYt)KDNADP`I5n#u?~E4VQMz-J1^T@|qMWu^EQ=_vPr zi2%M(;Kp5Uny9zRKg5i9sPvBs0U_~0equCmMvzteFmOJ;6m9n zBLLqi7;GS7hv#_U*P-sj;3)upP@rlgWp^A74o4NoLupn{-K|&T|JFAtJBFts3k1^fA&xPIhrE`CYhC%#B+7c_QC& ziK{g_fS#`}UkS&96Fq=-bGKI<)I91CU?+a80&swW{_UhJaO5QXzDyg}X*B?63Vys3 zF_AhCpS{fAjxYz{Lc#XoBBs^5XdxO>P}4bU034*CWw?yxe^0FF@5El9%dUzOks?iqc=>jAh@(7RB? zoSHwtZAnpujU@m#3JSM~*j=FwzLd;WT(ALvI|cdSVrG!p4i71;Sbrk`0R>H+glxWN z3Z9$jtgXHYfRKVqGo`FWzsh&$&zjZcYdzrhI{))K*_RFzGI_=sd`6KZ9r3G?-YXDLTQrZgG{h~FvP4}FB)dql!g1t6k z_O&n+FP>9r`)~^YIR!>5MeIlORa?<>h&%jwD*z7)Zgt`&N+W&eA&@gi%@%+s1yAn@ zSy|vemOi&G8f^!_i-P2t5@zzb=p?ET=CEix0B;In|C(yJ85W5^r^21~0DLHD!%bVg z?NO|cfE)j)1AwCxEM3CQ5m{O7L7;za)D8f?6r^Pdndh#lDQMWF$w}>13cuQTP^7%)!n30Gy&AXS|s0i&n&a{raiX_5<*z;2^iU#G(IV z{08b`qUi`AfPzuV6884}BivdkE3|e3aGC;x4DJnNZi+$1$2axh3<_Jg~0dugIoZdqhPGIm>nI`4xjn?4LjVFP(A+FyMS=UfA>eJX>o9;I3I;`sSll_4AqafP_B#UL0tF{qiP(ILD-H;( zti9n1AeaLCd@=Lr6@CkWf-S{v04`F%KQCo7RsXRKRVks?9Y6>L*@uP9L~gnlRVX&p z5CRCLz@!zogkVo9?)G>sCWrupQDFUC%9K=|wL}%l&h!%l2&dpWcZ2_Vgd4t9*J^un z34jO+Vz{**G2ObaK^63-ysQV26wEv*WMf;$9z)=a{w*m~h@#;BaPAK1qdPkg$e(gS z1|XV(<8viUF!L3jIjEi|kOPRJ;M#O4^ITRpA5|zGY2^Xn5(T#HMNC?)icd3Ny3X?i zaG8S3+*#v5|4Wlm1%b@K3&0f$W@>V$nVvtq5%8b4&>KK31p!CJjJ3?dXK%6V79Rjt zDNx|PM6O)xQyi*r{(;+30C5z&S|MalPlg5{P&PHh7r-?NBwt0WT;zgR$kgu6I0oQ4 z1qq8K%&hrrJVE*HWyx^>@f2KpCt$q;JI+Ewa@khv2jB(;dYU5E`SBJ%1gdtZodl3T z!Ju<8HtNZ-B-Bq1&ds~{H)y1v%yXK`n{VO1AGL+jmiHT6WBufhTQXk8#~B(3j-6WY zXUKIrRY^%agP;dI)K6|+S=ay@?I&}p3VBryA$L$yC<-oWkd60~iA~4w)1LVpMRcsj z!~de(cvpQA@(ndq#i*a`-|sj5LqF--){o~CIb#=U2?zB5Z5wR~xo_Sr)N0Gu5oIMI z+(q+$z}%=;3Z(qb3rw1!11KUVAq0+xM0x;KaC@!V{Xh<{tr(Xqdn}WApglv1aKKQS+@W#400NE6HpAxWpx8KY} z6+-I{Tmx{2f(1>vPU+Dkyr*ZZmhW`{ITQ$*N?5O%78g;47QxQ(0CFif=^RO3F#b(De07Vq^u$Qm_#*z3k>~w(a7Jvs7oEt4-J-sXNI?H`; zFQx-{NI}1uLN>AIgf3`E)q9dN06d}~`+|g(tIh6-fY<)GOaPB5P~|3j=SC~wFT3fo z$1e*&F$LE1#O$Z31Ya*iy6?FS;0Xnz6vV8{*@r#Qkeq#%X9IXjftIz1xmoUhiNJ_) z{5t@iQQ*=+$o!u!$H&qIogO&=N+`&)5wXXYOL0%^<6T=1N-0p`?oZCSq=08|3X_X- zp+Xr2H_nRKhSM<<(R28wpL7>MIR!j!>TPgVOFYljWZJWP0G?BDd@8r4d1pRelCHC{ zNj`uV6eKhkv$@6TcvklQR*m}rUQ)2-hKOx!KN-(Lohq1I0N@n`>(_}{p?xa;D@|Qt zQ3&8Q1*P2So)>hy2K|+M2JI^XP(eXOu!u>tr|(A~w)fcw0Nzm0iaS+qtZCwmz$xL) zhXCGE(Dsv%1tl!Ow^yuNK79n>9R(+LaqsDSG0#wi)e{wp0aQ{DcTU9on~0Ai&^}%L z34kgJ7Wqk8`la}72zyL(+7@f4_z`}2D6fr5F%BrHzD{5q<`^C^eC?^S74WK)_BzRtn$~1%_wDY=6X|76^Qduq^{n zLqR&X$Eo$HS~CQK_)E$Ge5PO~cg;6N`H&(42a61!1NcHgL7s@MtCHcX8S%yCF93X{ zz&nb&>9FbaTU5bx?T(iKzEQBnNy0?4{a+v;@bP>F;5!8gyQD02@tkS|n)VEP4d4d_ zW}Sqr!l(5q1Qd)jDggYXAe_6J+5X7-8UnimU%mlQOMyK%QLK`7<_ZF}y5HXdsG}fD z&TY%KKa1zCk6U%G1mH-20Wqitx2mE4_Fbr-)Lh=;=ii`_esVnDh&Q>yb}ecP%^j2) zTx0#@wB16U+t_$1f)Bs7{4?Y_9nBFbyntyf6j47psFQL7Y_y-WTbs>e(amE}Qz+Wq zxNNK}+Q!O?{L~~D4V}u)5VBjQP?X@ox(azX@r;{7VzwC?+yf%}! zV@%j^w8`~yaY}>vx1F)7%Yu2W>a@)elBK0Jj=0gaT<!Ygb&3cE)Z`|Be22XY60E z@@GE(8rtG|HsiPY_nonmuITcYj@3GZSXAa888^oGMPd9gnTDItxn%W(m&)+UI?+=@ zMN1L0>0~t(flKR~s{lAaf$B5?YZX{rE@P;j05%D|Jg(jWwqSHA2Bz?A}liioXV6@aHLx5s?z1i*~~ zWh)U=3e32SDl`}N>;k}@g5n!ewxL;V69hU8>aPYsK!M$HDVwlPTOENWg^KC`gcJm= z;=Tv${SQ2~km*-i4@4B?MM&7BQPc3Uup=3XU7>=Qf|z9zrmLqXKtnQIc)A+^2?Z|` z#4Kh?Ha=Phj5^pIfRutBN5rh{yT#e4!q={wdH|47(1z>d$K=|VBT(FSR!;zO3W}bK z*{XJS_!_6;zHTo79u$bp#jI-bR3lWOT46zN0G1FgQuVd{>C^ib1aRLp=EGMZSfTI*N)s?Zt z&Nm$q*uL{Ye*nG|JkS@g5&Nt*An>57Miam>3W7d~*`i(|+|mxat2Pk8aSB!(6|!)z zu^mtaAYKqfM@(9EdVDdF#RTG*IvY}MPP@)GHn1SDOk%bS2a;> ziKjf*R&E*$;1mU|HH6H5oN6knAWwB00>Gbw5k*2~IX*K90o~ejLjeR(pr#~Zw!;K7 z5cp<%QwP9l3gY*1D`?ec#2}zP;MFhyXDFC5hihr8w3{PfrdT%|z*!0mxqErXZ=J^* z%343^tqb5B1;wYh6IoSDe5=}G&G3-`&Qq|ohlI6GT7|#XE8TeVC;)*J)N*^=I?CJN z?(TT4i5`F;3IfVR%(yZT&ylKB+UNtgK*1+v?gM4QrHAORG{wQq06;JWp~FOM*VYs~ zq#=_xjRtU$f;w*@^X)Of1yx9Oo;LG{_hbYf&et;p5K6%(Zu3pP!Gb&l zS|8}l0}w`m%@6Lb?bD1Q2)LSms|Vo}RFCCW#k*O=BV%xXy4L*9DpbaglD+Bh2hSL2pD#_J{~|c1@_#1k5gL7cm-{O zQZ54!LxD9n0h6l#0Dl5~3VtyGz$FTHT;dkEbUfvchEz17ZX$ro6cmmVv9du&@GBiU zKz%ZRD-`6l<1XRe{9|&v^TnY?0AeYSPZx1_B^2?QPye>j6aZH#Sf4Lq3sZMSpyx1s z%*Lqz;wV_ht<;Os(GNvnl%Cr(0M{sJaZ$onMu`#-cxLM}9l&)8_H$P=53V%JK_FKl zcm{xY3d~};tC^*3+aU1b;&o#HHz-Kp&aJKHr>;j}(UOxh0VGhMcvHZX-sGP|GX?!V z#4Y_BG%{0A+@a2}BRvUyb@*6E7a^){6G7rnSy4b>HE8IqnI1@hN{i{ zO$nm==m2t^dUhEc4~g^u^5UlaQYzcym1-VNhn54lNkO2xfW1mzw-;5g%iV4QAc=xb z*M#i!xFh%yCQ$6L0zfha%JW3*d9+q9R6*V~!W2NtzX0yrKnl{&;~wBl>HU=eQYlzC zRLEXRd?HbW&-Ncy0Z60Z&Ik!J&#NgzVE3M8s{!1iKquXu1)uneUxyn{dzb@Ar{H?B zI}@y!gRglk5=XBAkU>FG9|7CgaUcHZRC{b}0U(ot9@n@JHs8Kq(R0{y&2%k*ED9!T z3Yh+*i#rkUoxN=xfZG&o=_X(SYrf+P?%GXm>j7j_a5_uGt_;k;6V$rbZ7l)Zp}_ly zkgccdtFPe~F7UhlMgX}KTs$RarCX@~DpvH4eQ02EMgHA=uL*E_4B3Xco&wg4!kK=4@1 zPN>JLAkb{l+pPeKC^$Ss!a^czyCbl6yOJ${2NVqC_M(58)_XJpXX5+W0eDEk(+5H( z6PM%NTYXN9+793m1uM9nfHOlQ@YLIrX7lXhkPZ67EY=*C@JaacW04Szl`DQWe zTO>|H&ta70$PNHcDCo!CiWog#(F}og$tQOLcuK)kWij(_xAQduhc1Wj0`QE2j6v?~ zny7j%0^-z|-2h4`XvwX_P_W5Zi9q#LuRQ=tDKH(ty>JH>;%gq)Ep~eWlu_V!Ps|q7 zw$VftY%CY-15i%EU=J~~T`t1A=)C<5_5*lM!KUtFHfZTMyw12u?{1C&UQlq1+kEq_ zx0W9oQq{Jv_24B1Hicr=J@k_lf%BIiIzfe36r5Vb?Xs?%g%1s9wQC0eyr$qXw+h%g zG!vhfYHM~9P^4B#CFp?$eEx^64ZBk-ok_y~YX3KCa}+3Ec4c)qc>x2-FHDhkGNtKxmt z-{3t>XYRVW0eDYA;COddXi?>WhV*011$O`+C~)7#oi)1q;^uA2mm2~AA1TmVBVwa% zr{cvSTk8sh0IDgt%s>iplJk$$q>?a91K^BK;lpR7C)-QXJQCzDjXcw07_ zUq*0iV$7c**XcYryu?#5+wO?^$<+Ky4Y1LEa!hn0Z`63jL#Qd#uDIMF8}BE33>wL| z_F6Ci(Oy5V{1@fMtJT?#|1R4&1oe|O|BwEmpKRXEjo1F%z8|P1l+^w%+h|M3tz_<+ z|D88_Ug}MRd({08m>ad%Q%ipH>*MeRcQ=odfp9!H(F3TIyKY(8GX*dC+%H%re8zhiJ|r0h18||h<)w&uX_?^l8vYKeF9JA7 z!R-$MHuY7)QS=->%ytg}aEJoE5^mj0#nz4pER{rs0ys=T-zpL7a%1cy1R{#=hXFW3 zK`wWXHPOj^G6ELa-@*a7QqYFG(-5I@7&pl%hWMDgYS;WA6)C;L6wxR6*`CAP#_>0?{ooyHo1Z1A((n&8`9PprFLv zoz=G6poc*4j*@!dNx`JHB4)QvArFB`QxdO31uqJ^a(8hpMl8kajJ3X;j0fONK|HrG z*|01m998Ht&gBLG9}29v26TK;Ab!UUd2u!Yz)=bcxgMa~vFz!nLf@Z>i2!^lST|C{ zcqTiBA+Xl6@Fsv`6l57m*u8W2uOgt|;bRhj;}m#R3YenF`N0UxscM@7z>fm`TM~Bq zio|@X#(DfIkKL+%->t-J)>_ylpGU01!Yyppl4KmfgpF{Z>7{OaP}T=wd2hhd!9# zV@W)DPZoeP6bP?~*e9#w(P&7ov{u{(aFzmdDR(K^>L2TjmsX9=25^poWm~y#9Z(3m zh$@tLcfAAPJOwKs3E6X#JA4G*HgA>#AdrGAUv5RY`=bd6toM6e4}vH#sTMHHX94&< zZJ?Q%3l%O8h&O{t10 zs!$dBBo9Cc1#`J?_>tc^kI#HrC#&-Tgi@e+Pr!DER{TH})v07Ozy@kYehw`r%) zklw6!daH?w@@OAclfMFCkO>uw)CW zFz~?jVgQ#Y*maWozVFcnxIIjooAU&~WeRq76|o(Q3y+}+TlkSr0bHS=MV>nwV5loc zASY7t3_vUeW+6iMBlRl2)>tRsQv%>B1%0`0Z(Qv^e(d*r@zPQNaTFAA8(nYR)x@(< zbNi1i18|LkfM+5W8hua;J%@R7dX@vYPC@fp32VYH!do)#8-1?_@f1ud6|jy=_I5xO zy7zzi94g$PK*a6VF?#Ve0f82GTf792K!Mk7AzPsGpclG7scEMF{cq4nKk1&C%&e)5UxDE{ZNy8?{Q)aK7=!s&sS!`I?&kfa4*N9zbI( zh3xyJFZe#d!^^vW0=P+m>n>Ne;(tQ1~tGU%_>*eMho?=ED`ch}*`t?bTu3II|ms7d2y>EAzUiz>KIf1?N> zjRNvNR=WKxhQ7c=fRqVc4ALX>Vx09h0qxguq%cXjX!*Zg^hRse2O z(9)ILfi|NJ{v_NQ^{yUdQ((5A`_Z&Pb$I&hsaJ+FRJcQdLu&ymeDV;t>4|qkS_8Xt9 z1)-aSY=>#adjw=hvs3{TP@wnNo!z>(AJ5>}TzuIPKp_RYxS!&EZHr>5 zFe}KN1qyb4M&P{f!L9%vQ!weIfI0dxd;>>)hi^9k#S}#M60@l_M{(EfKhU{5fF~66 z;qKQjc3FJ^4ax4wx*h5?#Dqt_}3%wBt4b|=ipoD@0 z+zhw0U2}X->FV@0y#bU`Akz`D&|&)&PzAS5RrR2Zf)&bucum34^Fr2dWRL`bq;`q}0aQ@n z^h(GwrhCjlVD$ivK>*%Ru-jY0rmeHVdu#TYjnD${mV$-co{kBZ+;9&Ns4z<#z&i@g zg>dV?-!5K&hO~aC>sJ;v!yk$*UONr}P({IEZZnRxL?swi;NS2W3gA5j z!>hTKoLk)t5OArA(gE;+g7{fNW}MR+-&5*Z?L7>@M+%y7-xk$6vUM*{dv z!PU`1*6FMj?k7)0D2)Q}g@QBj0v6PEBR+d?4tZG*zEbe*fq)%VnSBin$w_)k4=Q}4 zAe8&vqUV`PrxEB@`c@yncM4W8A!F-D;x|xEYRl08eo$aAO3YrLj+LPb5%$B!0QgBk zb}KQ{=q22RfX=b$h5%|Q*y1l_x3r#=Be43x8XkZ;3iL+^*zvv<)d?Xi zkn42pU*6+wU7Z_*`pIXOX$`Q^ezM=>0A7!$3Kpm-3@yCXARF%|J1tS_{^r0w2v2?g zyKtkJ8}-|$WBhe>9(~cySj`0ArGFm}WM}NXkQ~Dl%|$QJHdoJ=#~K9P89TqX67S~E zx_O8cwDoI@aN|0Xyp9(Tl$(rp#*UJoXdwTxGxlz)p1kapyE>swuFWT&YB2w{Gq%I& zeZ0{tcYQ+0>!N?-h#Os5a1Vag@Us4BXYA>a-{@a=#{TsxpYZDQ6>V{y7W!NL`_9RK6B5v6ZP9fjq~86#!f)Nc3@MQngV!2sm!~XbRvU1+NBkU+8CC z8;?MOu=OechbZXH=a#ljv%|9;eLfE`18|rEl@1bS-29<3svwRUw;I3^3LbMmz7b{I z`Va!X9~PMdaHZgatC;D#x)vkgk!rsNfExvOB1KGdfKf{X{M$(^0J#4P=*PWqyAI=R zclX5S*8&hwaJ3D$i>~`be9iCZBUlGONWpaOE0*)40*{~}-R~Z_9)O5~ai_WO=C~3s zM8I%k)VU(p*?_&B=dCIC_jcBgV*9;{uA zugLc~4%iGpMuFc{5eqiRoQ^8YjWM(WAg4g(J-3L_FBcDKXmfLG03H-vc_CsU15NSu z!M*K!Z2)*u5cY)II}pBMIT}*mM4v4HyeNp#<9=+w@DRQd)cYB-6@WJdch9*q``~+c z^1}IA#x?*x6l|*yvCGm@H8iBHgR^Y`9HpSEu9z)9VA2zTv6hi`0DLL1;U+I6O8NNy zi&vrNb^ymH$UY@v=}p(+>$LH6?d$;@r{HNJx7NeaXCWHW<9%}-0QgZL4G^>4`e{oL zSZb-W1HcIid_?X{(b)uF*vVSA+X>(#1?JpFrjzNmUr~kF!LRGVDGJ2g8Ux$bkBt#< zOitbf75pi17kdDlrl3DJUASJ?dJ3vg z+_K3&0B0!pu*IF}?K3-!KtHP<`vIJ#fcJviP`0tE2?AT4CO85(N5T7jV%B+wFJ8oW zE_|^Qfb$e==&~zJ1R#b2w@dD9(Dcd!Xh>$h zx5NN0QP5pOz$UI}x&eWoYR@D9E>p0|TfnZw_Q#EXC-omv09Po`edNX_4*t9sRk+%v zlN>-S1tYn==n5U@_d>vFxt<4rs}#g>6JeWEZQKyJd485BfH(>^ci|3iSp>cejS02# z0&tCjSO@NBHP&v9LlyK}x_bk-PC;!)F|#r#U5UU)jWa#~;wiWp=*C7alj7--NaGtv z0oUkKZRRIb~kP-0wdQ11OZ5*VC8ammJle#*Uwumoi6}Lrod;7 zkPYju{Qy;nd+QSnAcca(#zJ;tNH+}xLij6vK5_nn1p5Xk6zCj>wm1v-!1 zS^S}C_|{xUg^!^CZc%WC`}%fUEhRh!9x|d^IDm8t_Q?foQ;H=%W$(^6i~x{9!DvP9 zSJs-%#S^2!Cru*(WKvN4lKakjWu7*A(j~!rqX1-4Fia|7BY!&L3NPNtqXFEeV8C1< zYu|lJE~>En>6I7&*%U0`mLt8Xn_`YY@PMpK0PaxWvB90~ReFc7&|MTlE(6G+VE+>C zR`sXXV^D=-slqD&aw!P3;(o0o-w!VvKGn@87QkH!+^V@B`}Mzp&+%5%=3WJGj{@uY zBIe-f>x_oSS72-1|W z31^Su`;ij@zh?j_rJy(W<4lt87Wi^F`E{o(0A&=MZz5#5^Yb&%bMWb1!KAE z=P>oX_*hyVD98oyih>stxZn7hzYg~?IpYHE0(ecq$0j1SvZ<~e`YW||h`k4(f`Z{A z1?+R2@d*T;McvH<@P>lZ+_GWYxQKTMtmnPT2k@2x8(nv{-||En0u?8|+z0TEf;Vdf zY>|0!X9PY>>`(}xl7d#;?+Mn_WL6>2w)2O2P({I)P$7$W^|CbrOU(0&pu&3!VycAf zz}^e^dTB{w>;nKFD9}g}GTZCnS*U`u(XodBK2qSRFJw)I4#y{fjzN1L0jQ>6p0kKm zpS;%}RTv*__87n?3S?Y+_^x^?KHZy+nNSR%hJuTi#mxEIa{R(wJkk3JfX@_IhfCR@ z3fV?9q%Eh$JO%KDf^7@L?8$t0Zv-@S=RE`Pm4d;mxSw>(XoGL_ehk=L0^l13CyTk& zRn7KwLKQ4$N=gBIr@&)@kR2}m8HT`7@r5z~KPcE~CS->m?T$p?sa|$DfS(lTB?_5K z{%u_Zjut(C4xp9-3vOv&UR4D?mKHBmdI_M8g5Akt7Mc6n1yvXmq4f%YqY}CE95&LO zE%Z#giuy^D^vyMYgGTyES#wRE#ejBhs4WbAYSrKx>nANHoAGu82%Hdj4K{nn``q=&CB}ARUE15^6ZTm0E zjrYduUHq3{W+tM3vQPSN`XBw|lnxQ5s3jbg@!S5XpVU(`=6m@6{D|<-%>My%qwaF+ z5QqU2%Xy2GG01i-azucYutc{Q(P;*1$D*)$z z0o>0SEdSPVG6MZ;>*|3E1ru*_jZX*L+Xxu$9N_fGY)| zT(@U*L>ZsG=IOXK(fVuowi^Z4{Kd@7Xf(b^8hgc00f0LNow$8TmT7N4py%MzI#v;Y zfP#lY0b9H7<0=I5bsskcAf#aNDgjFwJqOPY?{fLt41kD&uiWD5J%#vWLJoYD3Qz}M3fnsB}GL^h~IgxUXOm)b3J;# zf57{7osawDe9m>9^|Wm~e!W?@@$S6Hen{m{OMkZ2(-M;OJGpDK6()Q`DrV`qSD1u%*CTE@fBB41EyL zYr3i(fU6W}^EuW_<1#fd2s_dqz%>e%f0nY#YOQe6&^TPw0e~F^KR?P?eEYq4iYQ>x z&5i)BQ!u)hoV`CVX#r|dNk~K|0QMA!C-94nd>f5Lz}cd-GXMt)hEKC%iw|k%BjEL^ zbyon66r|tdHT2VWa2}JeXh1grP89Uy--p@rSW6UP%!E1J0XS2jK264Co3DID;DF9P z6#y<2{FozS%V&6}BJg7U{vH5aDHvoRW8ZuV_aI;yq}LO`4GP|=$(efl!5Y*56wKl?(XDDO6(MlUAgwn< zaHqhYPs$dITZbpoMwbQm0pLMFbh((V?w^gPeb217>kHsE1&O*cRy(4RI%-mm@I*fV zo)j<@DRU7V#@)U3;q(0gcu~-Op@ePw)B=~@HW>H}0C0zb(L6mom^WZ0YSLim*nt4N zDcIM6PiXqe@o47Kio8Jpd?@J82i(hA4gHQHw3ap*0^lwMY2{Kjal7ad0*+SQhXU}W z;EA1-uP9%E>s;!A;+BE6Z+)N0n`_y&VA{kb?KBfAvd^^-+ZV=`BYAcu0Xox|CVC*x_=?fX0JH0|=tv z@jSi&OeqM@QUtG`F$O>|1sM}8S@`bxdZlH~=9O z=;c{5t1jo8p$H#4$;JbCOo78FIqPu$AJstVIQt0zLMhm|M#`FhGrNHD$xSx;T7QEE z^2vw_`6QD@+x1Xdc=q|)de=}sx%J|wNh_B}79m(IT>odtGac(y+Jd-Ck&941X%o1i z9yXXy-tMR<$RC_B59N~{<2KdHhV#kSt1bz?=1qx0R6~37e^K6E&69nFp|&~+D4&$+ z{HA}%Cr2r@5ZC*}^V^#);4yC%rst zHoOmE^aU!vBV~&|xJ*Z&i{`*N0KzFSIm7=6n)buX#9H@lJ{Ld)1=Ehnm|-L1EhvIf zdfqP(Nx|!N{P^l~UGZwvu({#$AVL%c0t>zgNV)hRiqPm|-h2R0C@6N6uxm0g{_OY- z{J8+YQwsX?vuoy+hWd90Kbf7ycP0UD*LF9r}pL3NUxy%_d+42rPS zdyzJPXB1>5NLcC&Wjr;}?(=pX0I?LT;)%~3vw}(#;mr=YE`T@+=566;M8rhBL!kVw z!x8}T6wKlq%4WJI6(CS|EL0D`a|$9%B~0!bj;HDp?-ecukU+tS;c^zAKj1!!u%L63 z#iGsB0{IsYsiK|ePtkWN_ zgb2wLY;DPl?t`2=Bd}wm!zutTDR`o6$uuIb86vPu!DuyrR}|PRk+2|*_jpKO*L~d@ z04Wp%hVt9f2YV?0R@d*BhftOBc65Ajm&@4@7uJL36(Jb5_79Jk!u(ljmLlMHGw? z^Q{5uW6q%nKSxRT0eDZr$vqO*{;~EY1o){!`vDYFVCE)e%T}i2FVOzlxds3}Q1H!K z#&o}D_@fAqMd}9te59Z!fBEEtHSsf;Y0WwapoD^XyQOSR)uS2|A#(JtLjX!C*k~hT z-_=&nKwyB!#lrwTQLrkKFGm?5+=oC1vF8y0pD8dOEn})~XT~AW!YceIfG-q0S zW*#^_{934b62LbKLbuDpV7oP_3oq|#PUE1xm zX&M4Kvo@RoP)Wf|ekN^`!o~*>n6qHUSpYvMSn`e6SC$s}B5+{CU?Tuk6qv2#rRXC~ zt|KtjSMeNxY6`;JOPS79|5gZ099Q%U)KHMX=O^d;?^=w2xmm0+MEFU8L30_qzoi0? zyOSD2mW6+u9UB9R*RRBGa8`lLPmU1CSa90A zB$Q9;U$wIR8#ItlisyG0oOXGqi_$`eXV&$up?tE(wRwWRwrawH`n$THVwI`fp*4z?(-Y{>(1Ex(oVvXRU6);Ev`TM{#O6KGxqsrb7A!I z)_oBB((jLqw^4O&qsfhn>grI}usCt$9r$I9XxDIo=kc+x2jBwrgJYAt0i2^CPryI- z5`R1up*LF92Y@jJttZRa^vd)@s7cnF>wWVje1_a8t=iP+}rW9x_kh1KW zk|PMrvWfHsU`D}*Z!(tEr?~+F#U(fV0GLxS_l|^>r$xO%V1t7BJpdLIQQ}D7ApLE*%k86hv9wyxfAfaHz3mJ3l;f^N? z_D`;O06}L2CuR*D!LF3j)?* zvx5OxQqY#K+$_-2{)Rx|x^<5LSWzJ6XF@n@|G?kY*PYBl09aGd@06JJ9_)?t7G*o< z#{kY#AT{Hqwnkm>5BI1xG!(!E3XW=7GWYzEUg#NY146<8*ihg%%8FTveB%)~G4@(G zfQuCDTW-lb8c)kArO@u77Y>XD44=)b5r(@#`9put1@E%T&JMlc1zaC@76sOA?r%zGXVA! zIPuPSdtCEL2uuiV8VA6Ef|>6u*cKh9CkSl#su~Z#k%D8rr0lrcqACPNyr1+OfD;9# ze3|4+=W@L4!EgMc1OUzyXszXmj`BZhLX}Fp5&^hSFpDoH9o5F^CTh~T9%e59xKhx% zT*Bsz`q&zQQl*PY0B%s=$=B!>?+eENaVo<-lL6eMU|A5a2|ayjjUwzSdH52*Eeh^l z;A;}yVsPo%yUzL*05=NuJ(aRcRV~a>gr^1jQvkSAkYFWcSIyP&2W8KUWvKu>C=k|) znRIx6+*NA2j!Oe@n}XhLr0kAkApWH@zIRIp;7P&o7g8pCz8X)$roXHC1-vN8v6r$l z{SV+;#0$^d42W=tfV$lLFD%qKp+KKym&Dr zDgG;JQl4r2I{*(UxWeBhVWyP@0t0Vk6#)pMz;UaL?P~VpEdqx2LGJ+sQ=kwgX6ru; z!z=saE?+JN@Q8xD{Qp69`^r5i!ZF7q9{_|&vc3^ZwXefm^lVj3epF3t%nU(3fyyd3FfoKWhmY6Ho059Y`9Xe zEHp>ZzRObN@~MP$@_o+D7P@SJVtu3O;!Jwhbox zd}r)mm4Xu&_3IG+eEWaEyw$purNTiIPwhgl=v;$oKjD1{qc2e9Z86izdKHgA&OrTI z0O1t8;fasZVs$M9))yS80}w&M`yc!$(<+zK2<&@c*=X2bYjh(iNOt3A4DRh|guv{X zw;BV8qTuWYzPiY+F`lY+_!80tz!M5Ag;FN=I?)qFIF^;s6u?sovUx@Oa^WVt`gGJZ zen%Ml`!|0|G2gL zNm5uF052#=>%_0@(Vc`J`n*j>TL4KE^yV|3N(%>_L4Vc@>&n{!NTxtj)spqmYK52F z#s?R*2k?@D=lr3k-j57L5pJ}K=>Xsr1s(Y{DxEP2c zq%1b;1R#}y%+pf#a{lTu2xu5=?F=A|f+PHkS}}0!_a9^oURN2^8T> zRbU?g`4sHUm9d$11-KJX6{q$EP(VR3@A(?{o*_dKI{JL*2cVFG$9(+k`Du(U0!wsi z`vZ7O!SnAj*4ODPo>T4Y-+mx~cNARPX2qsjHpkt4;qq_4KoJF|Eu`#(clb5br0gH5 zgCN3t3hu@5uPDE)27$7iz`+2DDLB$f%Eo`w3__s9?eY)+A1F{+E@D-iPi;itV6S6C z0eqxDr$of;Ylh%$sCM^O4g*j^LB}JOY?SJ^^(aEK@8i?}lu{r+AZ4p^7w$$t<9b(h z0G}xEJ11rr&Ud?mK>41L!vTDzU~_vuFMKGX1cAZFbTt5cp`g)Y3F{I!50?*X+waf> zP)5OVUYkg*`i9qf=(=1U0ic|MO1>hd)2@LywYp#TXe5BI6tv{E>m|4Hexhf%5c6^r zfNvC>ydhA*{}^o^HBsr<4qF* zR8!zTUCd7J`aTl@dyg5D0Mt;hlE2x@pm7DxSo`d5A_P!N zL6502HtyiE1t@~LX6`RgM?o`whsBQ~e>}RcUh#M`L^!KRW}dI8NtwX@UT2g~YMR|z z_%~=EpVS`FRB&UXz7(Z}HY42YT|@b#nxR0jX5q&I1X-cSpCQk55{_OJ_&IzuMEPVK z^Q?yr=9BGj92OjM8F33Gg*m=n^|Il7vg3`Hg4$CFafmi*<^5ljx3{!rnQ&vg_$$gM zHCz9tf5<1-s=XClKeVVPN(nRnpZ!xlInQZ@Fxu+iCxj2S`5m}H%v-%XE?#(`YzTfu zcOQ#c1n+|peSrqq@jC$xHE~z5Am#O90Ou&E>uSZuiJ#&nhA&rq(FR~l!IWSr>-9|N zg#HOcb}e)Pm{1_QEN21kyYY8wd9}(C0Hzdpr|@GCr(VS)!LH2^FrSnyoTWNI8Rmw6gQ@SItIwF1p02>PI880iE`8P6ULU!}GMz-0=iZ~NsoGl3GUFmxi zfExub_@?RhK{`ti*zon|FW^qW7oK%%uByV_eSmuUF^J$nfqI^pwR>cogd+4Se|Q|g zZ3;S#molG=mD>@}Gqybez>|W+TnU?CdKCA3!8cAA0`Q`sji!{%9jkB%MdZor#(cCA@ibRL+0jz~yeSxdT+UoqIO26gV@60$1Ms2X+(apxGh`)R-XJwQLZsuQd75#{_^s1=>&L%xqyT9tnI&m~ILnfP#ZnL6#_4|2g?D3QZPco zhtkr>+bEy(>-*L5Z_q$K8QyK9;H9)hCQ1t%9r#x78pF<67u;;HQkv)jaT`%5$-qk zf55!eAxpi5_9+Uu3KKT1y)(QIVe|!R9wlMVcPry@Ta|5J7XaZD1kSc(Uwj@+K(FYz z!bYwDA}Da-C(LhDAA9MW}I~c^g111sB^&So0$`fe17c z>U#o+qo9|kjOo8Fe1Smeq_bWC;wd=Cr-)9A*5NrN%Qsi<0C-M8Y?_oE7`w(1MK~Ge z;|(Bzf}&zEn?2@P00N7=qkI4)QlQgP#^yQi$G>#^tHQegUQnRNkC)Qx`vA`a3?0+h z4?q$H?V_bDr+CLy)TG#Jz3u@>roft?g&H1{nTJ5`d`*7d09h0a<=c!p4I7Oo4)(Uu4*`%( z!R$Z@TQk53cgFhbjz0$Qh5~sbz7x=B%}LaxV$1WP0CFfeX(wiNYa8MJhtEZ~!vN$` zFv3p8BICc|P9VfLA{;;-1>c1dHf!2WocO%eNs9oGPeC2u?$tqiMJ{@VV^I~6017DZ z^pvtDLhVTibaiR>1VAALchB?Pj6sG65LkR^;8Or^DRAu~VwR8pas5q~VipbH9R*t* zrEIx+EY329ZC?`upojvI8DEF*eH3>BOVtiO1Mr@LrA=h)jp0!>^bC1B=f?slrl1v{ zn)tdmSc1UA58L7Ze4yYHKPV=6<}y4P=(XE89>7NmF5a?Ws$o_gQH0mM?VbZDp}^3` zlFc7zX^g<`ZjTZGlu}@4DPh|sd3bTDNkB#-fKL?6m?UND4imqi2;+UKUI6$^!8ilH z!n|MiWeBut+btQu7Yf$%Qgp~oJ)D5H6sf%gQ1&li2j4HLtZ!r!yck`w@6DadRpWmz2uJx39gI&Mk@@QnidK5|y4TZ8|s162&t08~(5S-{s# z=yVQIJz6W!K|p zy+q)H-;-PbXO+nOsY%Z9Z^1M-CDc+Z_q$KdHDPRfv)K0C6pFUFwv=Z4ds*b zLyZM71r_-ShGy#i8S+fWNEj{HKIyF{$|o0nUQ!Pm%qLR^-V$8x_hB4L3b!?1S}z;U zCtnSW7W9ZSe2%D%%Ci5WyuFX?b_#z+?@UDb} zpG*n5F5Fb67mKjn|AKj|tM!^rHf|x9gLcMded^sv?XP8%`~@OAW53QXo}^s2@dMiC zs?Vp?{}yy-?BXL$1qt8U+aXeD->)IU+vU?~nV{49A-mDe*sE#%>&d_DjD4UnT+nQK z*BrFT)o#VWdh>5PW2?MY2|o9qq>s?h%Yzz5ymf>6DGFDFxVA$(W7}Q%jsA6K>|ej~ zkc#Qu(H7UB|EK@mtF#7=*4L)Es~*1xb8bYvPMHZBdh^yK1!nU`B!EQ!#rWmi9+LH*RxF0Ok}l z_2XMO&7=1rFzbl90sspNocPk`E}BDeVYF+xvmyWy1@rXy0zfyQ@A{Gd&di901^tMM`dj6w;lQ@!kjs!tpG?V7~4k7R({R@fPm$xHf;dNDA1g5 z$fx z*@bXR+$7aaui8TdYYOi14VFs}?ZdBkP%C~S{9j$;c?#AXm9T{=d*-2MSm|~-Vr^Uo#Gwd=%eQt0aFK!;x_=#Y?T6>*Z5Pe&0^kw_ z;jv=&VpCfe6yaUXzODc+Q=k>eH-7I9l_KyyOx_K^6$(n!WNdi9FP{*|xa!m$fGq`E z?(zDfy%Da>4Sye?0^lkI?^^J+a358Mq6mFLGI{{GMuGZWG0V31$GKPQ?-e}(*iq25 zi;UH*nt*2uyUA600k}@VT#=Lw&FN!>nxwdRN^b!66!`K&*afR_oao%p-Pi|!0|j6B zWXIj=rvp%gUk&|B#{B^}Q!sX` zgq^z@ycI?GVY+hw02c~04Ea4p=^J_>aG-F(Kme{3bmzNDSG{v+2k_pPfv2Mq_{Nr6EYKa+XE)<@`}TSd**0N_PIPg5Clv)+NTyVaX^XacxHf%+tV z*pvQl9TdT!ooECAZwgxVk}%sVn&T1h9q%;~fDZ+``IS96*8_JVVEF#|C;)dUXxmuI zw3?;kKkKv>Uq%D)rC|LCF>9%1q<|vSJn1wRfFA{K_R3g~ZgvR>Tuc}<4!}JMA`Xe! z-P8wob=8C(J;np@r{F4#Iv2+=#Rm00^Yu#CZwJ^*?NhKK&4>(9xH+Ue6RZ`;V*o8rQS7EDcJ3QNpQuu49`4&&9(hAQ>9>d=sn@K#sMOP)!+XQn74YM zW0%Q8JJ0`$ULePDB5imd!srWR7A|2It-8)YVBCm3Isn2c@H3UNhsinL5m>i(kuHD; z3U)^E8%Kh>;mHn_9b=XNh@@cf0Y1GL`febKFw#dy4?q+JB`xIqa#L#q1QMbSE(P#} zg6u6)HvH=KCI}=d+AIU`l!Ajy#FQjG@Sk~~4<49+m_@pd6u@=B{3fA%CC*4fH_d!k49e-^dfCLI! zCP~?r$IV6#eMtg`BsRKNy~~759u{lx$FUu^)G<0SLt+QZ#s%FeRkwt0NE7S z@nS~UjeK14d7S%hAAmO$%;cvOrEE|xMiJ^RH8TK^L%}INB02Fr9?u~)c2PS3AeVyN zuVSWiX|M%~&?-smAb>my(u6WLVd8{|2&@bke+WQ61-|P1)UHoG=OPfjv&Ufo1r)UB zySFq?d0Qip?9k{4fIYrk~3Wq=(w)n7kEp-+(Z06kcXdf)~#&zh1uAR!3fiGH`%nbEn9F7WzEKcvE@nyxRHq@(^7w6Y02LIp;OBfy==~b6 zmHxCrU z2%F+(N&r+*AUh#ulZy*+ukmTRniN1a1*#{cY)pSgJp9?TptTG@4F#3_kj8-u<8fY} zs{Qd7_(_43M;OF5bwSV2%p+M25o#&0+Q84FdNw=?ffD^{O8|8gOdH78WHv4eLSSR3 zZq@+KDwCP#9sKmPU2856NBLw|m07NTg9h@+$UJkwy)%9XQ9j9zXw|!h@=5h%xuBRA zClP$@I{VL%XF784biw#u>dGje9Mx%VJ!~+aY}vw9kk_pEFiHvyR?e%J4d;^qzJY>) zLrw=F8e%^GzbJ3-fi3%l@d<4&qkQs;#c%qDe9}#Sr10|Dksc@|oFw{f|CCQ^YTOX| zwCwT?;gtUc^Hw`f?l?JV+$|sU0@)kwy#eoo5q*IYg2k+2=5)M)Mk~|oCV+DkDDe#g zZI%yxha!j$-?#<9n1Z;QVs>VDZ#;y_-yY@$z=VRn&v;kiG+_~nFd;eL9e^nXkKOq$ zy6`AmrJwovhX(*N3S5*WY`OQC1t>yh>n@%E%qh5fL(G)TXX0n*)Mbzt01FDz^Tq7Y zhjpt^gb!ZAI{-u!h}TQl0sA4R5J;b~%o~81g3bK44!2zMLIjM5348!ZC|KyjPrW_R z2Y))Ruj+FbfRut}b$p@CQ~O;g!X1@nz5rwtIG2c7aj}gO0{#I7zkr;AMX55@?p_S8 zP2Bwa)DI$9QZVcRKj%Vy_k9$>G|KZH04oY&_z4a_D-YTrkYIShAAmIl!}*-jhMHtN zZu|1_XaIoo6s!x9FypdZJd_-{#_2wQ3lwY?ikL$4ZMRU9jt&la0KkTVX$vImrp;+Q zLjQa@ClJ6z3byh8hy1RCN1_P!#~TL$xI{q|KW%lN@+q88zFXWQ7{Fx;ZeHc5KtDR^ zi6SKUOnn643I%x~Jg;Btbq|5lHOoT)*ix{41m9~I+f9f-^?>7#0bHfvB)|98KC*Wf z0`?cLg#x%nfyZ!u!$Kz^&RFB#-wy*|M}g=qpKi?BEsvQvl8sr1E)ypsL6R2sqXDjt1aD!56;JqDSKvxNlAH zZ4v{(m4bABfYtO~D%B{0?u56$zzqtz@w>;$&+fuQNd@oBXAt2g1&VxR=r*N0t{iMl ztcwM3i-PWpWo)Zazy7F6pT-P~2jE6Qh>46P4_}E#=pouOo&#{FKw%DFv)=YIE;T4^ z+L-{rg944eX5KC&;nZqeXR|~Aw<&nrRmQa2Xx5--_|eDt1prS9cIiu*bJ~{62&~AD zNCMzRfiGV{dpyK`F9Mx}xybbyeSZzDoO7 zfDZ+>{CBXh`FIuq^~)Nm0Pa%IsY1ef4Z1cRfuYGA(g65UP(8zv*{w{+>7h>cw_m`I zf~?;B`qUXG@GpI!b!Iw5xJSW(RuX3C?iz-gG`2h}1AspTL->7yl2Ob25SU|hD-%Ef z1+o2QY)#s5I|N)iOI`!GPeG`XoLS_AY9R1=vq2Vs2Nd{^ma{aAop_h^=EKXg0R&Re z!uGF?D@(7U2zLzkzX9-&f-W1R?B0g!c%{tP z+M6G&7cpNIHK~a#G!MWd3jF!eBZs`22O+SxU0ObX5DJX>0pZP));l9Gdt+q*fX5Up z^yVjC`PUgBFn3>%w*W#ZxPM&C_I@+HhVn_Ja?h`Sg9h@+$yu8OH>X-&MQLHXmUrr1 zL;2*ew2cYD9dC?$N| z>$m+=J{f;;mvHEX3ttf)(C2@^yw$Eoi9%2P!OG|b8t7;H4c><^`T~{lyXcPeyS@bh z`xz%I0EAPZXTXc@{l@k~pti&M?*JkwXnjh`V(0X!MBvlQ8I=GcDNw!2Z@a5$hr5cs zRl|M&h@wEoi@k#n-_|3wySP?0GSk|+!wK{`y}0W$KQAYf!a zunT}33jF(uS&O4e%Mm!VQMoICTnZG|iCIeWsd)(OQz`!i@+fG##gbL^o!=dSXn6%Dx2->473Bx4fkSppb$R9${m?A^v1tANiyQ zfVUKU<0JGp0j}pz1pV}PJpsIn1jIJxM95k zyr)1}EM|V!QgGiIa%6rV0L2tY`Er!GX4Y3wgvEI~`vUktf$c1Q%IEi(z6fMFoAv|n zk%E%r687>&2(ErKy5QO$KnVreVR9yD)Em$Ege{650HBnDKpjgKvDO&(d{d8n90=eO z1&?p@wI4$rBhWLnJ*zMnz-J0{T;!~5UR5{(iR-`q0$(UF-X>>DC%OhAF!fB@5QtDl z!O6xFR=HFu9)aV0c90N*GG z>nLM8`W@MWA{5&kRtHc)0h=LZhgweEfk4FDmBRsir(pYTUX|Ur>y!_)NOI)V2bIY5df+vSk14gQ_9KELJ^8$cZ>v3O~F#3 zl-*btaT0-BE6iJ)|;IO4DaJG8o*BqdU{FN9{C#F33%lBj{#6iL0z$& zT@i@#Pz0~2*s%cWD0mtoW^-5O;c=^8b>TPwXIqi^$sc^Tf{#(j{+u!EZ_q$K z`E}7D!DOx7o+vHcv}snoYbc*|s5KH)o0bnjFsEGW&yZ(2eOE^bhS`s5gYrqKcuqZR zFrQR)a~6~}-sOOj!njv+>t)0FG?Y+2S@Hkq zAM(jNTFZr_KZoU^l+fnG@34Q$Cp)crBAh&S`$L3>ef%FVZ*`20#^j`Zi9gZK*t7Ds zx_`e9WM^#ii$5kcdzW2_wz;+)*}h)Tow1L$b`z9#Pg;P8&Gilq5#Fx0ceVOq6AG?XN!ZrIm3Yj5LG|Qv0Hzew%#yLzCxm!_eR}J~6#&dA z$TsBLP{krVdtUh6dnEvK3Wo9}RXesQ3`c*~x>@n709a74!BxT(mmUs5z$36|H2@I> z7P)+%p7tx3laqMZAY#HAf@26 zgN&tzl;AN=nRD0m0Qf~b9hKTEDIGenVaHz0-TMw6>^y^i?sem0W}yg~v#NgqIR&R; ztys|RG`t+?iNc!=5W$jy;6lD=OR)&AkP0-5*a*Oif*Y4)Y`^^|Jl4G3)^!sAYYMF9 zO4+CWD){9abl!Y3fb$gSPM5KPz2@#k5AFVZ#})t=D6pI_Wur9?ZABm;ZvIvPHWbX5 zC}wMh{IEh`XX{TtN(#T>_@sCP0_#>ww*$CDf#VU$g>f% z#D|UWLyr!KI|RUqf}Fnm&Z{-bRp_C8ZWSE{;7oy02Yz7oR%;;3fqv_|1vO zRNCPANbU41h5&9+P{#|yGv`Z3p=Zb*=yMW)8wI=GN!h8|_pK0UelxGyo3@25uL#w39g*2z2%+KLg-41x*%7SX!(r{ufQuOFj$0lL8HX{gZLz z^>P&9+?YTk0A3WF7$apxbG>lhl6KkQ9Dq9%_*@b*7j{4oMbIoaF$UmG!8U%W<~%i% zwFq?UyUhfE4+Vj1<;=wXR8Iu5>=u~9Ihu*n`}2EdnsiM*KSKE=Kf z0<(K{F$dsBL5B!AYg^oM2m+fWT`d6Iqu@C|-}~mr)p(u6%r%-K0R9xrAI1h=S(lu~MTq$}S2SGf>HCF1fq`_ zCsDe;>)z&i*>I(x{F%RC^vQfLL`&Ok{V&Sf8?Sgmc;bYxC8`vZw*O84P$}sCs#-91 z)+oFf*{Z{D`=?4lv-x|4w~t=kgenCCI{pusx4Nc0Rd{uFq#AmGPIsK^4DUl2eSw0* z<*ejIG#;$B6%Tg-5KaNBlSqI1n`W4he2}o zvw2u3ir}6%&I>>+1*a!ku#uFbJZ~xE=NX@Rfge@a`JZS_GmZ%#vXzpq zAW+`@UO0dp3gnBW?AAihe>?+=j{uNMfzm@Udv)jFRurMhFrP>Oc@zxUCuS;lua8Aw z)(WdA0QnR&wwJN#C%a}M;Cy=D695GiSo!n&(_94j^$uO7_Y^=O1pz8Dc4@};K`6q{ zOB132yrm$D9~ZHB|2lgFKCbT-1K=G6eYZzzf|za}voKs5!s z`Hp?j-NjQ880GZk4S*U7borS8@1JCKK|nfQDHp&`3Q7VbOsD%R9R%V`2j>B(rJ!A| zC9^+gXoP_I`8oLj>L`$}7qRUvEmt8hsPpau0B2j1DFNjkQdT)}kS)q58wWan{u?xq zPZnGf3l^>pZ*HAwB^wxQS&X&&?5Zrt8#-Ab2bR67Y2|g`owI1b@J0ow_ z!v^!oHj4KIEmRjQMM>eq?r!z6;e7H`LcAb0UegcJ_S4+|i}LoCoZKcXeA}ce$|t}4 zKl+D!a^b0o!qf!{XHiOMIsJFoKjo9rDgnZ0FLKfm?mgpwz`WJDX9rB4__!(VA7gwa zU*LT(qA!rGo`j7tx}u8SxVgu6mjO6O!FIj|t7_Cl{MiXhonH>Xn1aiR5;i`22Og0q zZB+XTz=VQ=?;_^bS$hI%l4bt9Zvadw5c9#R;Zld&2t2#Hr2>E%1tUL+S?eQfA0Z%I zVe%b-IRzIh__m7c^Cu#(+|IEQfCU9(l_V_n_;ftb8>buo1AvHvOuh_e_rxh{P=xj$ z(y9Q6DQNmu%Y%PC*QlvhPXn@N{G4&XtXZ|FyW0#kkHpN2hb3cfH3x8!f{FqOyD`dk9eM^) zYe@?LmneA1k7f$faK!oK_CSM{04`JD#Lo~K?%hLzA}kGDrU2jy1(p0NvFvAV_|v&_ z;sHefwiGDx!Rn*MTDUgRB0;JI;3@@W1No3%@$oj)q?g0Il>uC%z*EZChMEOmLtstp zi&g;aC^+}ff_2@q(gOiEi^A3bu2WDmOwNXQH93O7`%#VB07Yas5#LRGI_wxwM-E*Qd09OjGkLQa;GDGmX%Enr2 zx&XLA!HMsDWcVW!rzLTPQ@aAVNx}Eeyl;IveGzKXJCi=$0NkP=xK_*@)r$5bV0x-) zcK~h_6!qqnvCPs(~U>x8pzT?e-w z0B%$8iSNCQJ+!q9JwxKG*q#79DOkn#Ka4rKRRw{rKpz0!6b#R>U=HVpj6vXt^31*fd?<(w=a3#rtnHG#cg_?9H=E48~eiRt&Q|thXDwrAcrp&>D@!{0fCbDSI384gYX$o32*}5JW)%Ke{iW(`5_{Kg<{oAee##zOJsejT+90BXfsn0C+@! zR7J#`#Z~wVG}b~<6F>+B`*^mu>s-bZ^w3_HN`8UI6y(;5Sl{KoEfCn#r{hS75K2M8 zMG^a!f88GClO`U+X8sKt$R`zgoEJQMxfq|^tJqq--Zhj@nykJmP%K}RgYwDa7Q_Dx zd8RY^b&;T>L6-`YPcHP=sD};alf~-;1gqa|cSlK~I7hQyHk?l`ev~Mf*3)MqqVrpi z{4dJeyTA5~aLt9he3Va4YxA4_A)oZ^H$j+s$$J_~2@C$8{Zl^qYN3~Kd+i4=gio~n z9k@ZvTOC)?W%5z$VR&`E=+V4c@IHjm7icgql)6}b#s%x~x7TX{2&X`(CT8h{J6E7r zbbFUGvjIdUtNg53*FbSE1l~reE(8!wfqkZgC2vT^6Pi^? zV;2F4p`Z^x8`y2^aa?cfUN(0zfM*n(vXrt&i*1#tNp8_wwE@IZP~a$H>4{PC2ux}= zR|h~G1^K7>kbZhaGXxa3sp$fUr=Yc-l&!C+oQps|kJd{7Jg4B*3<*0vYA@b)_pRj9 zFOWdNRK9qqTBYVXioi6I^dLea1?RtrSaRKMJkyXo)Nd((7Zmie<+rSrW#Gj_MOUvZ z1CT_)w_%nnaK$q`ZY%C?xEw$-1qG@6-lFa`cv4oU?&1mnFDaNYTEf%@?Kp=XI`UA^ zN&v4Y7|i$dOq$$hAp$CoQ&s^;p`gf8#xmykjYObqL+NS&sT7EGr2L1w*#-d@VLN>Q zX%t-2j7j^ zaMwe|uCypHM-kNaT5JIDngTn%cDkz7BHRh66+3JMkVS!zU$v+)FRL?(pj~)>6M$?A zOf}?e<8Xt62<%#5w;8}23Jy<|vgsxXc+6vyZ@2|O4h8exi`YK@xgSx4q(&RJ0?4Ic zH$O-$qTM_v1O{r)+6Ewxg4;qdyXb0$3zR)C57-VMpMrc|LvMX&C{C^77Ao!lP(ZJ9_=Ou_9) zG5b9G5Khze3)&n7@P&d2?jm+$*rXY#No`Y_90O2B!J4CTrtq^f{*N;ukr@K0prF?m z35zanhX;vXr}m!&@STFcu6X-6f;~kM3{L2t0#HeT%|$W0rGD=W0^$B+PXqWt!6Lr0 zdD5*lc%kx^M=ECkR8e5UkNW-Ua(Ok1&@^b`Spd}(MDLNZ4&G)Z2(;{{Z3Li(f`JdE zY}V;4TuIYo+s*;_NkJEX37gXQDxUUz9A;$;yxH|IfbA;use+O<5^Hzs#{3?t&()l6U8M|z|rPJT<1KAlndcf^T-obV4 z&^Ff+ORIW8cgF7TpEjxF!w~~S%I;e?M0mTpr;QL~E%%s)cE(Q6Jzr1$WoN9*jv<1L z;`U3>CRZaRn|kwaJ7Yz$27-t^1Dz3?y6$4bh__B5sa6o`IpGc38GB^?Z}hJ_V^7cR zA}rR^(MDTbyKnfd{(Wa`_(&_E?fP$Oh4;g>a{UBj+M ze8#ijBd$WGR$p-eaE^j){7{wJs?=Sm1Ko8d&=r6&1*ZHmN0XQo+~Z#Nh`#~Ago01C zQl?Zl8jr{Y4#hVCm{O3M%MZBpGQ~qjm1IRX0A>`_+?O&P=Gy~3L)x5v?f}dwSm!Ke z`lZVR2m~&k;sL;df|^u9z4rmwP;iysO8eTl{{aLZca=NpFaAiGm6k|!Oai=*C=@Xk)OBIIr;|z(_ffA24F|Q0vjota>)(X zBGk0DgaWuuL759LdFpI@k0QKUKRXP7Jq70v^6_%)Tf7n@^OJfw00#=51n@QMrgKbC zgcTdxM*wi7V8VWWgQfGUAOuD|EB^(YDEP^bW8HMHJ+3-!=-Dm`A~;i^n=WF?5$*7@ zhf5DeJOSWBL63P7c0H^YUP5D+IR7aCR|+z=i`YyHZTx*WCD;-T;06VqTZveNXcf*- z-*z#I0dSLo_d_gLvm2vv!f9=P`5Ay)6j&&V*v(~+6w#lR-SmqE;6}l8nUu9KABv|) zyIUv60dS`v|A&~liUvPG5!9|1#sl!6pk0`RrPS!}KtM9Q?m2+l6j+~?GOG$d9AV71 z4v7FfDHw6Ul2u=7h4Xk_g^FLmi-JD3Vs?MSO)b=Ai^CAD)?dAV>?)kLts;Q zSP}ql3O=QYSl-@(wFuNbb4mu_L%~8FIUB#kGai9bx$#Q?cPZGx4{%#Dv@5QWu3f+V z6#!of+AZX{SLEmuD1v*%oD=|l6gVH`?^2n`4FoPfR8IwPj{?2sGG^PV0t3G@)6)R> zQ{Z!5!k&f9!qe^ff|cn20w~z|f?p$$Gt3t?$=YvU27vn%3=fsCJZn`vk-SL3JQKhJ z3I?s>+kq7e@H4F3c=I)YKnl9?l}TCGR^Wa~xIZonz(WdxOZX8mK{A}jFH7>x1`tHS zJHEFp@Xkv$^w2{LlimObroeHUl&yO!PDa2qzBC8GBMOH0ld|6EzS-ZfMycy>%IC}Fh=5G>rI^JmC2o#+!qg387P3{?u^D|PE( zgO!4I`&|T63=C$WbYFRuUcGF%QqU*MSD={SFbvV@50?HH*vL z(?3)SUKlJ8wh8{AkCOeD|Iapy zvgiq4;C%?AFHrCZ343bwHVlE|wcX1Agj29%j)XZ(8;HMzOFS!ofd~q;`NY}7ync9% z?&3|UbYWeH1Ael^w3(L&NTz@l7bffc}4rw0G#6b%-hx+z$*%F@QW+n=hW7s z2zwLfwE&PpfyG%78`kUvE@q6h(`*SKm4cyfMeMlh;A1F4o9}ZK0HjecBg32>&<-Uom;v=uo?X4n8QmAN3k@1<5RYnpe zAuALiR0s{F2$dvJQbrWX?>twpN5AX29z9?GzhBq6-S_9d&vnkZ&e>%ak3f}!yfuI< z3YJYg%~W<9;H+D{sec;)*%Z_$@_f?mv?Yqrer$4E067!{@fX>?L(TD6U6)-2?Et)_ z;ORFBYo%vrj3SgDYSaP1D+=za@!dciui%LSp>l6U0Iw++ab3pL90%o~2pRTElmO&X z&@xNP?37#JwV^GmcXkBuhJq#CWNi8U5h*CbyM1Rm0m!4E$0;!r^*!Mw)O__kpk~xYi3`NIS_%Rw~YD#D5gNK z8{Z)|q#y1Mhn+ax7r-Y9HrVoI4`;n~Py}H{KtBK_6sYizV&8q&wj(en-K#%<&lD(3 z=BJw(r1&8)Um_X+;0p!o3izrX(}lR}Fi&CkKmer_g!bmg(jD6I1VxArST+bi83jIj z_%0lMJX{fYGi>5u0Ob@E@ohU^uO077&|?0#HpsN_!jDzS|I-?FIH8I2u3=1-E!_ z=F`>q1au8E6lRYB@PmSwmU8xF(YPK67_8M83!s()?_d!-vba(cf#mSR;{g1mVErr+ z>oY|MuZZz0IX50a9R*n%WUR%RuXu!irqZnm08VxwGtaS_5;mltmJ-S*MSC)5{S6w( zCzCI%71#|>eS^}%*vc36uAzJ~wWXt=G<@(h1Q)nw{~7X3XNC3yL5$Z-MU+pL^?X?m z8_XwfhMW_8o)%Vxl0vrVRlRIDpHv^(URb@h2hJxAj9&j2oy1!E_ zgXh7FK0s#&N!hJeTGJ88m3YnuU`|2YW(hO3I){IkOKQ#L060Z~TLdqn_x1mZB1Fk_ z=K`>xK%<0z3HzJkYp^-AbRGap3N-i0nel_d>nMV8o$h=9RuruBlCX33TT&5-Op`4D zU`@fe=6qL{=wiI&cBjABLI5HPCc8=4ojGIim$2{t=tTg;6!>Yt*{39I#1DPE_9yUC3snFz3VH{Km|K>0Bh)0}_`b^k z$SLS(X3a)4$<9Myec%i=05%j%*v`*oIr5K#5EJHYSPtMc1uxsk*q804NhpGOnEna? zwiL+uHZIe;4PA=B^bM<50ysm#!>4>8K>Lsu0=q0HuL594fdgMxImpExufaMzrR!<{ z_7o&em9c5N*EK;A`W*l93ph|P{keoqUt`-3fiu=G)<6VD3YLcQjbh4%;8A+t?U8E% zI8ktzA62fPdZG)8F!R3KIsj)W7{d1uI_7v4=VF?JOxFWAM?nnVnQ>MR8$6-8vc_ct z0A~uCoRu=0jOOX6NlIN}HUe;=pt2|bng=w&J(4S|coP6u3Tm{(Y}TVbIO}%wR#XSz zM!{j;S+(u3X9H@|o?|1o060%Uzgj698X1ZIOP0MBZ3W;?fz2B+Q?yjU@7BI@&20cK zP!P^H5=%VQbtY<3PQ^hD03H-bZNxlz+k{_aGa8@Q1aOgpQQhV2QWI7DUm7$!YC8Z= z3Nrj{*e1nCdr*@)xMgYq@S?!YSi}@xnc!s*L%cJ!0bHWsK3^>IutXpK;?`V=+yUS+ z1?D^XpnKA{&ZtS&O0GKrcvCQ!e}NK(FK~xDWSO}RfGZSKNo<%>vjt~Rgr0A;b^-9A zz-*m_O;mh2|0xN#Zic<4hJa+A`&|)t{xJJQXzCirT$L_CDlk#MP^Z^7= zFw#%Pa#Ee}`jrcIDh2=oDbVJ5{rY! zFTV4bQGUJc=8x-h# zk+P;6N6kTCm&WKL0B%z7dbyYhS~`qCAY}5IqW~f($ncc1!SX9x5J;J1bPPZw1#12> zmacH683Mvr_9g&sQLxL{nt7KVv_K&4X25X(Q4}1~=Q|?SWX(Vzc*H|f0MQia?~t+V zD#cw0Xm}Kz01!jL6JE#N$tUqL0+(7AoCI*20{c5Mc5c!QJe(eN>4zDBSPIhk*tNTk zTn*)uiH#ng{u?xqPacRGE9m`g_#~7T+Ko-CcMau}DJN$MZs@E(k6^zePyP&frt{w3 zU9i@?iyY;X5wTC}VT1YP!5!BGV<*-*pnP)s=x6n^;e4{hF+q?xa{5R_m$*IuFUs5N z|3ozKsULGd%tW%v-I~ zqn}EzjS?I5#Q6ws*~0S>M;{bb?oyC$$Tz!LGRz8riVyP~0NkU%b0e=0+vf5LfhMXu9RVaz zP|G*>=;KlI5`na_r<#rZ85(Oe>UPPaM6ffekSQK^+zLxI3)k)58rwDh2Tx zGB(sK(g;QHET3{7zyk{88N3eTWlNkXl}uUb4&WgLVVC%-FVWT*6yfCNofiN+qTrgH zjCpI9u0UY3t(6CW#}u@9#S2}>yO$$intJRafHVr$@(uoyf9}Lj>yKIuPXJFS_|6X$ zQ8Amf07W?HGRF(RQwlnK7BeTeF}O#fpE2kXfOHD{_y&JfTd!P15ma}yxD4PK1*6^h z)=aT`@m#mcp~7F_IR$MON?FXsVfb4+erc*VM982Z zjaHkS&^5RnIqd`B1qGhQ{G89i7(C?D-7x4XfGi3Uv-oCcb>s0Uz2@u`UjW$@%zq+f z9!H`TQIld5zW4#ip`gNC%p9-pa6{mbL6>U)UQ#gBP0ptD-;I|MFVUPC0N@n`J$a$4 zXPa*l6yeje&4B=3Q!wVJh@~6~#WQc(Q>}vlqaFIl$uvfcF%fJSky^ zpN^h_A{2M9x(T3=f?e08%xOlc83F-!^dbNhQIOrshLsq0v_ruA*78UIA1Ih}Pt3M$ zy1X2LW6Q_h0`QT7O?=Ptl=g3NYSn#J=O_Th6h!c^sA=oLdMHB7$?4GmK2c!CBS>Ft z#UlsPW7T5-lu&S_lJ8(Ky?i2y;JM21Hh|9*^nT1iUi>r!&g$640{B9~f>=5GI&DTB z0;2iX;sBIVa64DTGNxU|>0zU_aq$4kD9Af0XP(QWag%gPU)}*wPQidLPgfW6PDhX8(3P`6Od{KGQwV7Icr)*}FQ6s-RsVdLk8;E}ZG zqe~tGIH^eHC*PivGV}LN9Z)`Lnc(>LZ_q$KdGhvX!7^vTca#=3*><+xHIz@TvzjHi zGc3{@!K}!0e}+8MnK9*}z%l?eWgNI!%7lKjf4Ad{3cLz+gp`5;ku7+x{t^tUBx| z)XLUPLHNx7f_bas$1AFQ+u2@>Dr4Ud6IT8GJdny*|LBkzog3*3QJL#vKb3kxD`N*M z+?z3J%F+Sue%^roin###9OzdbGcyr?QZK(Wo)BYztO)|#v1yJ5%!Zw6Htk(+y7Jl zUK#t>{S`;8+Kkx9*S~}P3*&9n6)CD%*!$sGs!a8v-{8)g(O1JYzD-4Irww1w+e&3c ztM35JDOmKFpLRE)InIoZn0)#LPEjy#vy}B;IsuOccY2>u4G}CTP~&y0C%@iUjGDCV zT|^B4OA7R7^HWo*d~iBAL(TaI04oa8JMjF`?HX=5!W6v!J#C5yX7l021vv|$t;BGbZ5O|{O)(^l{ z3TD>%H|-C=mx3I=dGOfcc)TFCo3Yja0Dcrqc*aYbA0NgqvQ*v00|EF` z@O**|8}rJ=8#QS{*HME2T%+LCJqe5Xz6j^QWfMCM1`t3&&sP$b-c|#D*e^}^{tEFx{ocLQghmQgfMuAwu zHwM|Puo>Mrqvlzo0fbX>FKr{t;t0k=Wh&ROud|dWuGDL`>K>w+j zEmTy)qfQ4GhD-r)n}Vz|IctC21HZ^7syR#r5KDnps+c9N=&XW93Y5%j7ybnBj#+oukV6x8l=sD}-X z6qNpO5NzoD+8Cw#dZv!`vf+_}*OeK9c2jyBKy=|Hr~jh7y&K!_6IMlycR@4HnU{al zKa3RowURkw`^i=)*;lyo+x}^!;IEa;2Yr1s5gz69KVaT!;knK#lQu5HGdvfb-CG3D zLmYj8EN}58B#&Abp=UaDbqX+{>q^$;!LO~wSl%||!xI6q&?eiJ{sTBN}A!k;T9dIsYR-n8N zzyk`-m&(}0<3Z}ENw=#ftOxLrf_Z%FjW?5%rX#RAT5SV>M-&J@i`d*SExeN1cA&;a z0FNn9n8s&#%F^DW2;z&Tn*gLy5HXCO2Qp_UzJ{P|lg$90P*AmpFIQDn#vSf9&Rf+1 zJf&dQ6e*LOE5kF-8EUh(07$1GVT_oa&Q0lwu0hSL&sG4>C@?FR*?S-WKf{Zk50OmbI=5V+>&?=h>%IaaDH%fj=|C#1iTJ-YXW#d z!IEP#*5vUMyb?pzS+pHM76o^BSMu}+uV*Mi{BCb80NE5wU3i+AdQ8KwN}n|`+5mDW zs9DY*jZ5n~pa|O?U+w_#l7gZ96i(IkE|U=WbgXPAfL9b4d-HBsA7>>5(o8$<0`QuG z>3zk_&ZQc+IEDi*5)!Jh593Kpq93 z&&rrAQik&w>loP{0B^HXVC;FMxaso)_|ijf@v8LrwA-5~UB|9R>UN zXy91AN%#j8_RPZoKmi3Iz7p1<>)UrILf^IKh5+7EkR#@cNqeh~MWC)|`#u1L6vTCt zGKX&K1qk$GMd(`8&IrIq3T~gZ zVOA?nND)}qsPq>orr_!T2|GDL^c;b@%4fz9;S&XeA4=JeLDhJT?!CYt2LY5&aAk{( z`6)VEpa@z1{SE{8OuaY}m`BZ+NV(chaNd04gYG5-epW z-2zWNnkOQpfh25vURjItAc61w-!2*{0j;@Is>=liFASsHR{y-=9sk zWZGpELFY~JFHl2)`e8B4-mkbDfu&9$1oagVQrj2Am1ai#O!~jkzk(uXpyc~Gp z=qvA0KKUVagWKPrfqZhu<}re2C7rjRv~YIW#(LLKK6!N93_<^PZ!9s~u=&rBXF9`1 zdkF5WvA}1>zK&L}hYjYFXJ`2d4%r_&g_6Pn?Y7p-hV#h-KcfW>Gb&>c{id_+zbJ3- z2uCfU`n&7fQ9k*7*KhiVd{Vtne_{M>)$=GNyrBEr{wbeKt#lGLohJ6tw5X+w&~;%tH|-o*sVz zz$prh`Fagu<9Ph}&l%Lw1AqkucZSGV{>qiOce{9Y*)L#8!Nb>5mTkE_4>f7Zlk|%a z!HR+mXDNGhc`F_QG_Jeu3Ba0yhrK1tb-e{H#?snz-V1<;f(3jBhepc}??g@7U485l z05Jt(B?+t0yl#$wvb)P=01^t8@QvlVH1GZsfzD?`y#Yum_{eKMcbjcGhd_ow(iH$Q z3Vzzk+2ui9N)Q<4o8bdMPQhzy5nJo7Qi_1xnTo3bY$#}-!H-WhvB!h%M!UND0XR*; z$w^}N%pwVQxLeJe0xf>L$2|1|-%yjbrL4II;0y)Ar&6}mc|7h)b_+EQ0ANQ! z!a_0gYS|bMGB)bu5D37Yg0#6JW-_^S4QkSD?HfS=94Jum;)SmM&2gsGrt)bp07nW= zF6FE3W_%H$2#vazh5&G)V8J*U^B*08=f(DBO&+jzcqf?)*Ap^D0sSy_jy*A97PdqdYRt@;7Y-E zzH3*HR%^!~uqydN1OPV*Ojb%*=$k#M2$=PXhy-w+0=-9Kwo_-^UIff7p56lBPQeZ* zDYH-y>xzJbNoQqZ39-M9mq3`L;gxnC>*FABQy+S@7Lm*Z6p<>|I@04`CmozEVI z_bb9pQhcc&58yHd9~bg>YuO5%yiK3A>J9*J3JMlm^W`WJtz!eH6^5f9% z_X+Vrz~FV)djNbW=+;rf-ixao5LmHzasq&>6l4wKUCHVK3k0;*tV;yoOM&VPDQi|7 zG#mkQ>wQT8{3tNwwKPh_n)p?DSIhoB0DlTD9_CwQy>`Hp;~%<(CIh%e!B>Hd%{I!8 zL`~8%d7J_ufPx|Xbw6jtq;IwoOjEWDFY zgv;rp9{~uaz`{k$SY|U_1mZ$hJ_Zm%!P?vWe4L`F3kZz(uA2tnIt7YT`D&{|P5csQ zc4q$*0HGAbEs(Q>dsEy|gir6)o&pG?pnIm2mCx-Mh`=i8_;di_6s&A7Wta3!LJ)|5 z*y$O78x*t*6tS9&T-n^G;I2b< zW>^M*NDB17h}oX3lZ7ZkL>tFU0JkVu%BQZ64QjFrf&7SrF91YQ;Ka}F%@`Co5`nhU zq*(x>DF~h`Q77VLXS3~fA zo5_EMJkzmxaYeAfp+|Q#KbhKhN{Lz zSm)gDzzt&FYEQqWD#y0h-9!(N>eC*d;dzLo4^Uc}jH&ob@PPH)p4GoVJOz!@By2_O z8T`6?wKDq)M7Tpi)ow8x?b8^~x#v3EECq0vg44e{=Wb}5lbuWYJ?&bm8MhyNTy&2UwEV1axw0#4p%Au1|Wq3i%KzDJ>YC2 zieTTjc{PAk3VgRn+58WlIC<-r(!U140}4hK$XM`#ovtXtkj8U=0C-4&%u~dgT>qJg zz=-FXwE!Mb@Je9ArqBIajY00gp8y_HaBh&4y{Np2M?Y+w<#hnkC@?)PW36J|;%VP! z9-fWH{k87+2?b~PMq;s1@9=-gaJ5-u08c3}>mp}UYqU+#HDnIo-UL881@m|FBat8N z#}D7=S+ko0ct*i-z9GZJ<`;1;W_x0w0)Xcf=&zEn>cvq9$z%Y0(To1_ej!Bus1g zKh_v5XiY0jhO5a9&{s{9ux8Qys=YEqa_U<&|Q6y&N)nV?x; zoZ^nEe%um3HU*me$ddi0OK{(F+`Oi(0pw87e=(m^vP;6<;rlBFwgK>xg7kG#wx@O@ z{!O>Lyr?aJR}?6I7qjYuIW_2_M}F682jDdYN##-&wW|iNvwXJ1ygh(i3S>`2?8*KK z_!k$q*|!6LHx$&#_{2e3u`Ozn>xv{r0C^N#;I-(do}b-cfM)EzgPVMh-;a(V4nmpn!tF<~(UQy{A0_ znX+EW5aB%q;rv;;dC^`KfmMlfy8d^A;91;B zW6Zk)_&~wYgL3xX(Q-bDaO8+v4*(x2DBs5i0u&G6`!I1+cuxSu6pY%}Oji6roA0pM3y)reKe@oE?6sumFKi ziCy{u_(DPF+Y)wg&v86P6dyaZKY&sSJ`~BALF`-{A>MAz003na?B_?1=5^A!gqk#W z*T8`Q$|;za#RrvQ&f?+p9??w(0jQwhQn{E_&9=Zjf#CCRe}S(Q9ErAO$}gVa0m_`q ziGv|RB?SvUO4wSV>?XQ~$&Y-70H~s1&OAArIQ=`$lxB_>4+Zdz0tIb;rg)WT1&UB= zq&p12cM2*jBy6Z&v>pN%Hm@8Gpqhf#yrbJGVH=(Sonv!w1b`X}jQJqz%lET7qX>0j zE+YZ_pujv!%<7J3;15dA?8s37YAM)iC1HxsKj1sPz%_F;fS(kM=_Y0#!j!eBNqxoN z#sH|Jz=m(qSZ=q%6M@A)nvDZ+vLl(FRJ|-?Kc}y-Mfs%hgpRZR1`Xtsy+q>#d4pR? zP+DlVq*J|XD4%TOWFjzl^=LbSJ2X1~8S+fW@yT7mwH|$PP(B%F)TJIam`|>bwh{Ep zbT3Cq;S6i#df9M3`SH7g@Y~u8NrFDyC{vn_IbiJq0 zYyGG1C?y>3`r9^`67rpU7dqGrx2ON?h;aD-f_baIY*0`c6@F_Qs*Ii2Ghyl9&jYE9 zz0~pTjHg>VbVp^by7Ln21+9!7l|NN5);{|cB9CH{8X~-17v`A>W-SiTMwPK`h9}pP zf2oYEwI3qTXs)7yidS5pP{9(MaKT#f;CWGWOlU z-{@Z}WBhkmPnDRJfZS85^`dS@#dAf|NqkBql*&Cez(o3dl^c=K+P zKvlT2X7tstOD17cj~$6Y?-EJE!({->Dd@(x#Bw#+AV=V-s6-9GDGJ8$mCUK{ta1OK zv4`Rc02UO88}TZ-B$Gxcg8Qt=D*;$iAmo*?s+&yuA>i!1b`=0C3g)E9SmpU@e*`)| zKC&8sH3b2NVm40iALWl`q0Vanh$yIf&-WLZU5%%zuNsA~1t6wC-2_(2cwI&-Pmj+02u}Ii=^!1l}OwpFZ6o% z3&<(>z&E*H)h1euB1C#5Zh{Cl6a@3tr_Fplv=PWZ@4p$qX$ro~v0{6M4#pk3=1wwo z0Japg=qP8+pKQTKfbpf2Gz=bbY9cnz_ExLwf`pxwKxKoh)TFg}9;&6ugc-cx=ECV*pnvSi={S_Ij9)-x~SBP6q+_QgG@7FDp^Zd5W%K!}gFv z0Q@NE-}f|Yd)XxxfpV=UhXMFguyh8`vMulXAh4}d=@9_eDERtP%#^;l<9bQIPVJ5X z2%unDCmCBGRDr+Ko~ENs00dHy+g!#54K=}~F=LZf90w3Y!G)y~rs|Nj4_!mPZ0CDUe!9*+APGyf~!Sp%Z2R zLMdp`hS#l*x5ZzewwunG0|=u)!k4Sw4RFPyPET6hJOv<}0%IKsTbcNe&+eQ9nHB(U zP_Rxz%yf^K;Sv2=H_I&n+@wJFpp@NQEO~|QL(Z8_)&L?XFrO@E&+a`ljm+34kaHuJcv#)4pCTKoJU@Eu;XV zDcEqF*WN~FW*`vI`GO2U35M?9DpJ@%#?z-R9U3WQ3_e=CY*UN@S3YJGd7EEzn$q+ot1$nnU^V#*Kdc31>@cT510HZT~bY4~VmV~(jxJyAleq_ASl%9A{(c#L|3jpp>FlB_4 z1$=PFU&6dWRUQBmDCo^gr9!R$u_@uuS8Y52BvPDXki&yH-pt%4$K)!cd$z{`ID5hC_ANfl40 zd|hA?0pJw{h2bJ*uQ8-8iZH6$E)u|N3Z_TO*xdL*GZ9!h!0#4-TndJt6|?iBOc(+| zjfsQ zb-N89p8}bc4ZGA{Ssh)&ZcX!80PiRm;U;C>_x|Icg4;8+;{X&;@UBF}e6)u>MiJD; zFNg>5o`O16z8X6}x;p{~yAQnsppXL1w-UB$cr?xdY$KZ81yDpm_cUv^Y=&MTijcLV z;1~En!5w`GGq$$EN%XC$?GhluM+)Baa|f(qH-ADAJ{=vM2%wmPJ3FK-*Py}=fq@At zk^p?7!03XQSsVYjg20d#2k!$Yq2Pm>lvz%mo`%3?J?CTqpD9>!PR_m;=9D1NTsJfY zz!wVcU6Qjdqr2c&WsgQFsQ^kTNcG^w>#twn@ptp-mjKawKAYyVz!4PzdRd<>w10$&}zNXNS8Cz2z(l*kPhG*1#5T>ba(k=ob4_0DEI}w zQ=regq0b(+!E>qsZ67>?2-OrU{3K`30qiWhsRfxS{=#+P)mVH9~nECs^E(v+&H=U1%RIvG#@Hr5#joM5V(Eja29|% z3d~>f8@D~*1p&`NPT2rXb{f&CwNmTWM*B5&^~dfpIB=lLGrqX`+kg!lP(JB4>|M#< zpn-hSqE1DiIieO<#vT?H)VqfAN#~Uog2`R%PosQt*y{IxhCI^=S56ZQi}PEE^2rRH z!g|P%qtFM3)qN_%F)aJ1N*!xNOMPWRy=% zd;gpMA)j36&`Fq?DC&z+!o2@y|CCP-$*>X5uY0pJ`3`TTsGMz!v^I~+C1 zt|b6x3Z~dd*q+7iU(hu?7F}xvz=Z-=1qmCj_73O7le%ZM2H;9TP?UuA=zan(3)9>8 zy$t|23RdluF&1KqXWo)BI<^CFo&u|$Hmo{x!A5iq+Goms0e1?FPD$9f+!coq=&<`q zdx&s>f)jl8slDr3{9d}86x;!T2L=22UfI&Bg3~C1(FR9F02e9f$A=oinwR5guE^v= zN&q}5*r+3Bm#bUgXUV{BLq`B!6jUzeMWSPNoJCDK)koL~z$FU2_!QBQ*6r{d>(;@2 zIs>>&LEcw>WY3JE#wddO>6u*scvGOn_cn7ol8bY(6Lwpb0bHTrJg>6WOp1GjA}A=D zcLm@>L2uq!U6=G0e}Og?UFinkDg}nG#7u8dKJLo|aKdXVg0bHYCypI)ouAH2Lz~uZ{ zeExiiWq7cc!y|Bz4qRT*yshxzHaR|U z)?nHHfO)IK#?}gVB-DnYCvKFx*DQD*;^+f3l#gH-X}su(z>-u81|Xh-XD{UJ_2w)1 z9lzH`XEuO46bzdrVW-ZuXoDhbU$b-$fV&hF1j*TS_l`jbSSgR43*a6F>gy#;a$x!# z1lo09HV;4o1#Qn-vzL`|ml5zx)}0R^k%Bq=95+kli?#^Vb}?N5Ac=x0{8+ZxF?n|p zFn91=2;e>i2QtKLOU~n22;>*WECP^Bf&VkUM?|AtgAo`j&Rh&2g@VXrzL|mkKTaJi zS1(%vAeDmIJ;cm>kuFY4G_=~O0(d~dZGP;^fI7J!YSNBg^dHov52hp%CDLjQFDo>Nd*V#8{OzX?W7iZGnH9zX^KHi=?(pm7ymXSr+8 zh7ABRDTrtyWyjw4#e+)aee^a0ctJsehJfN0m!1DlAkr>xMwRK%rLWX z-3%a`0?{2Y+wH1})AXd?vFZSFD45h(#!f%2h(-UU@Hf}D0C-73ul6z~pQ-;40hRA| zTLHYHK%F0XnJ;csg@8%jfo%X@Q!t@7ucGVRcp?HBPU|!P}_Y1tGz{y6;zU-0XSLNcIH(C%O zpMoX)7iYWSR2S5w@a2ix0NznBi}#;f_Rda6;OOM{I{*|=u(kzXho8P)9|7xQ9drP^ zr@+0Zm`U^(;EZ)-w=uf_6jHF$L(Ck~n>0ZY4fH-HZm z2p3qfWk#Nl5hx8c(F5?2g8q~F3Yo^1hY%Q9=C}ty@xOqjHtg*HvkwS#?h?Egz$Xg& zzLv4C{fxv2EUrk`2T(#mYXdRMo%h8AfjnWQ0f5gGY^xQsjMEwTKB%O3*azSX1ujMs zHuA_C+~IZ*l>Gvw6zEUqJ5ydx#S_bVJD=@`2xSzc1&G}hPo}MDus8W}S(n90>Z}qOBd{TC4 zgJ6NJScG7D<@Y~Bp6Q%2@)ML9-E%_uq<8C@de~q-srETg5V)dcFO(Ff>i(#g4d;{J z9ux@fl&wugbj1DI|DwFT+k6d$O-gjPpnP&l@^AWweDb1E8)4Co!FN$U`TYOcKjo9# zs?CIt3+u`d)=BvtxIxTYU2XYZIIlb*5>>{2pXulN_wzt1V|Bkho}uBcZjQ=a1$+GK z1+9#=Jk~*=|3dEzBDq=D8X~-1pBAnY_=bhGL6xzZ9Rlmgzf{IvJUB-%Hb1Qv6}euU z6jX2itunSxn1^8Ny3=hCTDdp4VZ>YaqefY{In8e(s*LS!@EiSWW$f8N1)=_lMo&r}(v>fbA4!^R#L-Ygq%1hIkp{>XS6r9Jb6Uw79iqE~}n)BA34XU*uVA@_ouWf#w~ zLtxRSyz>CeDcHw1!f0XK8;{j4@B70Yz$pqG_>Mj^=0@YSaBfYNJpfox5V4Q%)O)8N z9*fZLG5#U|OA5a6{&Msn#k1%dt~FQl1Yku$N^3EDJl>&n-T)*NnDYMep@~&) z2&fyTT>&7aAnlHX`Gf>tLZBezy$=8x1rPawlv)eIrz2qPk$e?^oPs`lubQuHu{r|o zx&FQYY$&+R^T)tq!}$nI2|Dcu;4}peoldi;r$NmTFdebaAAl_ds=V+!V8_k`1T-%! zzXsq81#+>N}4?D44A+Vb?4J4k8fWQaKQSJq48lDT_bQ8L#phyQ1nB zaG+ohKU!|QP~HedFg~sv3=teDxUfvjg7r)a5U32D8UnzHf-aBv;*cuiK?o=*thf%~ zECpM)$=MO-YDWa-+}IKd;2Z^NDPq=SsyiMNa`ibL2Edtu97QQRUpk(l2$O@I!vVNZ z5Or3>wzcRLiGW^NB2-C~WZ|0>F6+ zTJi;eyN^FrK}~w-+2|GkcM5j9OW9AwTyq4*3Hn3n}H(KSV-alT&7?#6SLafQaJ+acl+G|;7vjH zcfPsJigMhAZyKC=7r+$?RLsQ8EHC5-im+d;<{kha3cUOBxx9hJM-h0V*D(>mRSHI) z;l(%h?~D-md81_#0AC7h`M))K0mC1ZD;I~{2jEA+$BFz-cb1Mv5lWv-PX^#mL1vPi ztqgOhMBvGco+$vXQLvtGgrKMCehUHdjqkre00nz1c-O%2YFkO1*0e~P1`q}ZresxvwG)B7Eg}gK6jyz3_SS zM|d9M=mXT8*L*&Bq&gIVQ67R~0Pz&`;X~kwZKmiTuw{6^PXO*v5YLZ{uQ+t58v-UX zXO#fBOF=JwRCy<3=OP4_YH$7w;2s5cy+tf3`^8EG!Y3a50w95cpw2w;=@lqL;Cs1k zDS$)@MlR%&P6MN_ATV@mU>SfU3Xbv-?Hkd}a}k(w?{PVR`xJPzm9Wv9MC%Z+JW^c& zAejR7cOq8R^-%-@vxS{10i;k+&6j#km^CdE0k?qBRRB^c$lAnD2M%gyjX=@;FSfs=-H#$fh75P0X}1S}jHq`l_^U0U(Eh zw|p7Bi9Blx0&iyyX$jyZ1ty`^tbcY-JgBs>8EXaL6$LMN!Gzr*#UUudy9}My0A5p| zGE>6b>dxby;V#k9HUM%d5I*Cl*mqfh=OfRal(hx$hJx{X_(IH$)dr|Z3U%)70OU~+ zIm(*(ei*t8fgkJ4+5>n?LD@|)6VDuuf%zD%4gm5gu>K@rna|(lp$NlQFHi*V?q2|( zz+9v1h36x0=MPZ=P(Z;be{0t2cF_hDA@4}*jsV_M;M&ugMQ%03lTJHVeEbCpDX`)X zU+~$ZPAEcY;-gLwp@;$_p_GaJHsK!nnabeK06tJK-a*Xf>&C012xa4*b^-8_f^m~X zOkrR!o>T3vRjUl3n1b~@QySE>4iCsYTG_uFfKL=8@V-Xfr4qbG_vfjl-2s$Pps-ZN zjI-x|Mc1%bO|J)l&lJ4j+Z4zhLpLE19(%ecfG-qW*Rf&FX+QC!F)uv07l2XRfHvnvqT@?_mW096#2mdV-C zH_jgrm{oLW5P)wK6!A?O(~6Jd--GQL`@sOdQ&6>1!cHg^#GwdxgQA82sHPyph0m!b zJisG3Q@W%N1yDml#3UK(-ESEFC|E?fLz5HHwh3MQb#GlU>NnbLe#m z(@7jOALWz6`^D4$1`Xts{n~63Xxz+hjMBpMi%RNUL;2)eo6~~j=LKI8oapoU&yZ(2 zwRX9JCLPZ&K>1|LgfI25!F;mcK~KR>qwkd{DU=Gz>Se?EWUfy$p{K`8JoDV{eEEM- z-ri0bcEV(N^Tk<0ANnR$Wl2Iy=ea#MaUfO zAOvuVg4=wf{`ZeO@#@phYWr0HSWvL*vn89~E&BwDaPEzGCICwc_VU@oGm>pM#kF1? zFbjYc1=nZE*&4|(ob9dHe~$sMrl1?ol%9k+cR)?DP%4-WKtzGTZeF+%c3}hp9#d-P z01#7PGK`l4FRbi{!0hwg=K+vV(Ar1DbfT+V5g5{c{CogX3f8&vvt^3zdM0LvXs&^5$e@>vYv zGzC+5;l|OJcDSRL=DJb5{ z>%(%LcA^N=5{9k=;6_0p--_nLoET*U?pUa<2XLN(2mG|`cJTwoAz*cL&jtYQ6sYj^ zeDjwz$32oG56)}^aDf7AM@x3@b00kZJb7;5CIB83Om8D$RVzB;F!cgWtq#ug|$*2&6|o*b3kh1>gDF zj|JslY!Nt_a%~%c%M?82JI21f)d)WtI&02o0Pv>ZU|(KvJkS((xX0BV&;)RWf)0Fq z<%-^7U(}@I<2Gyu;6uS#V+k8Lc@xgXT<1^M0&tar+`)XC+@OVRQG~TE`e+02rC_N( z->)#t1`mOLs;K=1{3uw$w^}eAEWr<-`txo(A%Z^z`8{RKFW484`eGO zjm7O@UC=e0(_OF&KmY|J0{KGBu?z5=QfjuYE`UG^Zad4_@Uhz2C_+hx6T1NfQ84(f zguS>i9uK`mH$AThAee%7E%+Y(lRDxrP{7GsdjNz`a3EF8UJs7NV?=`ozT6AoIt4AF zC9HZgb4S-OFu17!fKUp?eU`B0^V{bmV0de=A%HLnTJjUW`{h>SDz^hMPjQ~VYuz}YP zZ+@rhk3h)S@4rAK1^IlR4+mX;+|fOHE6W%n+@ipHtc(@*6>LKhjyH`t2q21r=0kaP zLXiN!m-O{69Rd(dLHctsJ7+a71w{zCVtE)q3XIU5D9jhC%OX<;A3kb2ipKIwYK zR^WKl$sNH?udn|Z@=V8cL$1K`VAoQVPwuG*t%nWflMmLM6{v5U`4Q!l3pRw;%ZBsG zqK?gkV;bk0A)0&O#(z=X-mpuyLZdW67nD!FHTq5ekWXd~Z!gR|WV#5YgjUACZG$Nx zpPxK=!%8@_m$x>;-46Z_n78^sSh>)qM1&vFZi#6&@I1uP2S^qyW{n!ID9DD&l z8U;Q0zPe`96xO2%C+0Wv0Puu@w7dLxgJFhvnb^#o1;4;k3bJ^?@u|>fcz*I;henboTWS(gAjryy#*oP~|jz==Ejo$74b4nn067$l;&Xf5AI5G+V8go#KL9T& z*glwV6w~-6?itp}TV4b3ih|4@yz(ii66Z1AJKz5TuPNBcHxbZZF{&Ij=~-@S07S^8 zU>f5)Y5W)(i@+OsU?6}u6gcIH+06Ur-Xrj?{h1&Dc@#XDEn)5%P7Hw?Gxr4pcuRrN zE-~v_b`Uq|Nz}>^0QnTCcv-XK2f92#5o+#FxDMbQ1xI<$(0HIOPJB)qb_xYhKtW6~ zKfEls+5ts)wP9u$fcF$k?j~akl$3)Jn0QJ(96%ujo43lCaDq8bamO*U8vu$Za9JT? z!&Vi1M-k?QJKqHGfr3h21HCzO???oUGr}SOe57CmAHjKh?s7N+=>bn70TfdZ>?>l^ zMRV})LB8wDEdZY=h;imcAa@%*MiE};c8CU0LV*R}*68ZM2>jOQdTeYAfX@_|x=PvA zmwOMP2!&0S-3IW50`m+JE3+GnXAhrQ>BIskrNB2_!YtQa_d*fg+|!K%P)0#mnS`mg zcfiS8%ZSDC0Lm#C|4_vAv|Hgf-%p1TcK}pS5cyHWY`-pq7HA3#ClzS|vju??quMfS(l1iL+)GJ9Nc2 z?qht*hXCp*=n)`gYCBSUq6iDa`ac42Qkl$8s^(j<=J~t&p?tEhd;eE|g9h@+q=yp( zxp@-|P+A!CVnDrXD4*Qrd`#f9!M!7b&xQ>8Gvt}h^3aEZLX#UJluv4%9b69^%qLGi zk_s-$H(f?ap>FMvdf9M3Y3cD(aI}BIC`47(4Erz2+k11rt+3UO1=CSJIeYDI`iFed zbg{C~d$(3QloA&GKl`VA@~<;Ri@s>ANBG#f-+>#%e`UdZr=|4tHMla?Fe3fK-_HZ7 zjCDG7Z^jpas~#$Ijs5bhUUX^Qsdd{O2Q~MM)z{Y2VLap2HEttld^qGbA`=5L8X~-1 zRU6a=y)9piLY1)wC7Jc)Un*lSskawIbxG-oid_4T$*MR1RvG(HO(ck2tvd-J|9#mF zBi_1L*Dk{52S2t$m9ZK7f1`h`jP;w|Q5f>zeLO00J#pZ-`uED%)rk_J*LJTA#CjP0 zk?}T;eehj)X?q-AuaTOW^bzi?8GSWanaNn}>wN*}UD7Z0eK7!Y3SN8`v!*7eOb}>n z)1(BzDGJmsN!Yz6qw&;SoTu_<02UO;mH4#Q`9Ao|*DGfH7XX$NOdTm^3d^%&P?JvF z-B=31ih|CnVz!Nat3hC){oyhI))cJdHJ{JL2k^|Zd78W&fQSMa|9UG-(8gcBwlL~?pzXFg@@cyxgdF?rGkAQS#Q6&H=1qO3P%tEw%76Q#I8hryG zqu@i4ghiZiy^27@{LEiKPC?#hDeKTS18qU{MZf&NHA`F;0s|LVn z3a*q$m{ZY(R|vc^(EI_wmV&Vr90Z%CAuuP`ycWP23VQN!t-|zH_{OzNclimxjshKC z((F{>T#F*CRk~9Lz@CDy&tzU%;30B0%aZ^64P3l_T|U^IGTGXUo( zNXe5hh5n~-W)yr_r8xj+3Pwar+5SNZ_%|(OeOdr;q2MwvbbY_>I$p(4(4uim0In1m zKjq_EdE=&_YslUBe~jICJl5a)IPmsByR>)F-bvkeIi+Yydv8%v8njCZ_e8_WNQg)p zlqgC>B0__ThO)_4Dg4g+>i5?7dS7q7KmGrFT<6y7e%K3z zML4VB-VT5l1;hGFSihl(+Yqo&3~LYI5(U#r_`CH^<1Yx@O-Swlz?*`Oyw&r4@yJUE zNFNn-1mHu#K@&L>gf+)W!u-YxodH~?Kzv!uCiF-?gCh6@kLd!ymjcs4685<2A8ilL z#`BZ`_)+k>iIioA=;1nVm!`YA0=PnfQn58l-@X}_7Bq*7y8-a0K=-YT4L|)I_iuIh z=-wT`RSLwf#q8tKX}C$Jr`E|H00Jm*aQDA(BpI{MTEqJFGsoa$O~s*A9{@Kg_~9mFdRsLNQH1h| zS-(KwzX5*KLd$Gi!JM-%rY}SYqCjDgExY@*b@rl5@?# z!2m)ixVPS#OQ>t}((0EAQUQOd6oNH1HAK;N;? zh6A`yLHIU)9h!Ooo=Pk2%pC#X0R{cq$k{9H{N5mW$h|+hcQV{$y zbMoJyfl5JEu)3hvsL*>T;rE#Qx!yHYDR^#pLU1HAvlhYDx>Z3}5(ud#l50!#XUpfoRZoRNZ$$qnsziorb{{LTjcG#-Z4&g8V3+AJ~Vpt`NFfYbk zErXJuPJ!p)A$@=nkIUJD>VNFIugVG#0EnbuURP^2CVxC$wViNECIk>g!F&aNLs?cc z+)^bHcufWHhyuY}zU%(Uk+bMa;Pf_P8h~gDviNNsG0S{0xH2eJ13(M~mMQ$c)m0&Q zO?75Q1q1Myg3>c`Hf!=~yfq}Wli~~ju@qFOOPNI*HQX^6ac6)gfF~4m<)zolKM(uj z54~jaOaO5dtp6ZpM;7

n{cSb!P#Hr$8f=uXr}~*o7jj+j&R}z*7p;`PPuImU(yz zQ)eL729Q93w+UZv_o+}o5#k+OW&=p1z+Y3w#xH!|0)hUcZ_EMkjDpjZQZ{wXJ8c9G zEjT?FKoSL4Zp)Z+$TUv`I^Hsw2Oyb(A5*N@o}%4&f?=>>#e4uM6!dy1Vg04UH=+ot zMUxi*cus-JDH)sAZlyZ{E)#p`0C+(`iyAqrQ89agz)ey0FYuBARSh|Nq4f$cr-<15 zg%IHt1rEGTa@NADw^4+i-6C`Wq*722EoH@--|=L1+LY8q0MaNh_2T!k^vlN`G2gT* z76W)q!TdA{bN1h~6b(svZu_MG-cX=mCT5maHf<1?xLj=+fVUKw8}r`KX(Bvt)7iFo zIe>Hug55+cbZ{#EKBT`jSOFk|g7i&dwrr)#Gc=@U%JP)}-cfMPSjLkrSSgu-q2Rs;AzL3vXdOG>CJL}2Ilmumogq`>w4Unk2veT+b)JZCL{ zObQ0<=Y2y4R!y(uhm0fCc6Y8wG$ zQ4n|3n(a?~sf)qUm74%$Q}B~-rFAjAV~4=fo%=Tf$f00RODWUrb-Wq@tu*T`0CFj~ zn#fP>YVrfuOs}uHp$8z30w)CtyZ1t*f+9>XkJ}0$pMnv5(aEUi*E$3)w|cJ+pn!tf zOA^+oY5!sbjvxJQ0HBb9O?CVrgk_o25$G|s<8}Z=6kPqx&sk4AZh^qr&>@BZzEI#Y znip9sCrc2hc5J%?Krsa!&-43nCaQ-c@YTHJ7bu~i4WH7h&TcsX0mZ}@Mi8Ntf)8WF ztah^AG6a-ogzf}TMnS6|{B)d``*AU2d8FGe0Ob@UKC)()2QR}F9O+;yV*nKt4C57k zt1uNA8d9CWU^jqD3fl0Q!2Es@_$4rWiS`}noq}6WBus6jd?y0dTcbpiLz&%Iwsha3V>LxK5J8S@QZ z_XvH4#F!a}0n}2E5hY`)F+cD(&ZFP9BLM0s(Bi#M`;%MXQgrS^(NO>=x{{S=^>GsB z-Yst)$|vUp2_=7n2J*>8bsYt%5nGO;w6II;)Oy!YKKZQw41ub6PHO~XR5bn!d8X5+ zgR|hr{UZ-iJ~=>x)x!q!Nwa2Vf)Tg;nxlNOX3_L|*>FDT|1nNr^J(=IM2q*%_%F)G zTbH*?_`dnIjVPaVH~CHfkWVf+Hd*+&Z9cyC)yMR={Zl^KP3^L<@ZoS{lutVC{~s_P z^}1!B2;K5$svLT1v4MYm`~dwxQrQHm1qsXl7cb3yGU<%1zve8IgxJz zz={GTLpe)xIf~!$=G~i}1|Xu~Gk-sh@jP#hKEwXmJzasb3UC?K^IVZ>wfDHvqCS}26o3utCcyqiH09y(o z9*LO2A;s|sxJxt612|2A(LF2Xde<7~0DBrmI0HCC!9?CiHp$Lc5k)Z7^Kb!hmI6N` zDQh*uaXtdZynP$MISQOjd4;>tu$~CWH*IzUU`K)8BRSh>8~hQ05xE){0N7J-;U~Wx zctXJy1Xk_t;|{=qf{_vY04sk_4+MrhXnYZX*3UKHjia_#*lRg04C{Q0FW#`+i4n$y7N2kjGE>O^=CEtwI_6*Lt zm&aZ41>jD>#zxl6_T*=rG?>nh@&j;@f@b{kjnw2ZwrEIm72jV0;6Z^mKXstL!ud@I z99Q`655SXxpi~jNQPT^jxCY8f0RX%xP>z?e+aEXL7umglF4q8DqQH8Th`mTH!bSI0 z2fqIT-V~fmmoojntMCts_q_D$5W$Cn%eSTMdiYx@`p`YD+`9qbG6jY!_^n#o^Aizx zKGWqU0AC97H_2IkGlMM%6rVX32*8hm_x$AElj~;S(%X#1n}Psbp}-_Y!VbI|f}0dv z{WWd@@TWjhDq%NHf6_ri`n0a^Z2(s(n6gyD{D&UG6YhjZ+Q9$cw`zDmrN_dzn~#Wi#kUF2%(_HL&i!5nBvO8_zfeY0EAL7JVeUkmRgQN5$3g6 z@Cd+N3g)boGQ;aH?;#L=YI`(*dlW1wkg{7Y;dtSs<@XaY0KzEH7%O8hHq0(U5t6#N zJ_Zm@!T7&AndN79ArR30W-NgF6g*olVK#TJ;+5z{ZJs;<@PGnuHGVKi$yfZd>)rNK z9DoQ4RyLQh&W*p=qI`1rj*_&$K?C_@ozhr=c>bm3C@nmkP+IRA$|u)M+#!fC7`+w2 z>to9Q40)#Wb@w&F+b3ZfD4(1#v!Wh0m`~ouw&1hYC+ z*&@1UN7a8(K3>_&ox(PJEe_?AbBun|Kjf2=w!MW_DuGETCCvUm_D}ib@i`7c12fhf zVUwM|12>5IsOL0kHr3DCp#(jmtA@RO4bQ_v`T*7Tk+UxPEzJ<Q&4;KKLxC@io%k3h@T8#4ezQ()*RWp9Ez z7a*`>%;9$cVkpSHC}C!%>FEfl>AJoL@R)*EBPIL@?tjz__bt2s0YEGTdc28C@*!?0 ziZJkH#zz28Ck90itt0qxW!M?n|b3HUWC#*8I%tonF1-_;})o(G!gxk zcE#Ek07#+Wid4oPG;1*ifw~DMg#eyY;5Sdq)(@YJJ2|(#Tv!C)1qI#tow4V;mf~OY z$$Z@nz)K2r`$*Y+TNgPRQcE@EVgRowFsK!?js2uE5Ewq~+b@tx!3%!bZ_E4&Tv_e4 z;#CPmNTc8_Kk;gSy0ImSkoDOThyZ6LD4vHD7 zSym3bcS}#AAuY5YTm>M5f))JNd|JOjxTvK0 zeePEP?N zckgNdA1S!;RnB(JTpfZy)3Ap>0Ax}S)k4NH4*uhwmMiB!{{--ff}MO}S#RMKoC9RW z)zkp^Oo9C|30v?mV;UOLgx#NN0c262Bj8slDLw6jKy+Yy9e`{KT=)%D%5G}=5ZEFQ zXf)xkmh>D7I`IR0a_;!y>PP=q){Oz=Qqag+&Q8v+##u)8v0Y67?3BjSyyoa>M9)G3_t+|H~R56UuDM~=tCdtpwt{dAq7K<_&2Ug%K!u< zZbMrDD57Bc5jpE1F~v30b(7|_1n`A|N+S`Qr!W>*4#ZyTS^+4gU_li>c+_%bJQ~s= zs{^e8lu$5qj)MUo{&(|st7-D`?5kMIQGhaxVk;(|1G!!d8 zRRT~>!GZxYreWoa6CasMRvQ2n6togbnEs3N^U#n!JJz%XP)R|0nwY(mo)aJt7T&f! zfGP^!X~@`#wCSf2SY|q~1Awm-jOMMMqZfMLKw!3fY)1g!C|JzTW_UHr41Yx@yy?;j zz;_DL`K4L%TLCf@VYBG_FHlXvXMRc0hAsJc*;iv|dS{66gMwj(ysz#}-w`OnL)-gZ z0Q{stkDqNe(INa40&|*sDFdka7r@)(!tKj&DSF&IQC9%96x`*fYc6v3ia-(Ge>Us} zppJrXclcEL#xy)5TljEZcK|24k@d+Z&LX~=o??RX$zEgjjQATgkWU`{wpGw|^;Bn+ z7XJ9Ox860BPd@GAEZCB>`#pkfhnoBu@=T}4gD-**vz=2=KDoo#v>rB?Pkwc>6Uc}6 z{ehCgiunEYvf+I4TeoIH9pz8^5WP0+;D1p*-cuRpgw`i>@1lItZ}@NehkVlTK`Y^U zjcI35N;q%CZ`)u>$opLr>~{#CA=i>&?IIjQ#BID)5*qyoXR??V^SeADv#{P+|WJp&i;8+p5vx zdi1Y5WB=-EZdrJ7BiiB`@PE|5?~HxqenQx9YMc&Y(;EK{_AiW&vDv&Y!ejOZYtg%8 z;{f&P@IQN!z8YG&^PWWE@iz#33+y%nfH?)vAMnG2ORE$Rm?`-23!I`ra}vMa!@jB$ z0?V_~H6elp1>FLr?1AGV9z!04W98d{U&b>3cH-Ry~cJ3qVGJo{OA)7@oWw0av4pc>v@T46+xohY#=J=DFCb zmGc2uQ_yz5oOu;r-GCx2>e5jMfDHxCTV+h3tB9Aiyz<8^1Yk=+xu=AA+l|JVk)>>& zE`ZY%On=4anuQg(J>kMcgF6LJw%`3#H@K`+*dTD>{CaV0kEfFtF4I5N&1W@b_y|T zmjiI1VChq9wr&1){69T>9$NvxkpkO6GB#(dUkMtL>}tQ20GucYcNDQF4t^gHD6Ojf z1M-JUj-4IDOlfJ&Md1<@mKVSL&RzTE)D z27oICn-B5}TB9Ox0jA5Qhid`2QLy5vh&lH=I}k-U*gaz%fD06)r%2hiNn`OBXunD2 zdI0VewC=-?i9Xn_8;anb-F72@ixd>_lVplrN8&Ev!^J~40q~&UXoQ&gD1FDz(&{tX zn*n%IkgmqJ$8Yw;TQUyIH*EpnMS%l9`rUre#aZYx3@$vV2jCI~%i4+9*U)Bo{l($? z>8${~Dfpql8!^WY#4DaFNBHRj@S)(|F223z{KjN7q)wM33;BLbt( zoZSY%mx62CrL1?|#lr~5Ume~Kz>fmWi*jbA=4*<;%%N)x0bHSAufBv8WgRI%pzG*q zI{^4optMKA(#vP#YKK63pb>zp6l725cfeh0iysZ0&dqlM2%tdokc9P8cN&R?lw(ow z3tXe%2JdoPbl@zm3B7fCx(gy)r@)uD4I5ULtVR(QMqe@paD##XeqQH|@(;Kmd8vK) zZU8qaFz6^@lbXftKoLfUKHmc%kb+H%dFzJT2TcU-PR-v7Ac%tX=VWaCK$#N;y&9PS zxJ5zlEPm41h8a&0u+$rB3g9*c9xlA<)VaGe0=q|Q?gtP|K_IVS24pwG4`0fP%?AM7 zp+IlgtkS2%(^YAJz9^!W;Zv`mpc(ApoHiST2^bZVM0VqX@gRZyg43 zmx62x7{%S z;S>zyhtTaV7=b@Ssp|gY0Pa(;%R|D{XQ$Mm2&2xgHUsd0g4AL$>)f+#Ap)98Gfn`A zpkNNa!86x8V;rg!6n^Yv`!{HyQlRv7x}g2o_DU$>SDf0V-ZfMyNN#diFyi#RB?z`( zuKZ`nGo57`j|4Mp#`Qs!f@-6#^{~N8fqAoV!Apl>Jy5#e)Vf=}Y`9Xeu5DZ4{vxR# zqT9Z9|1ZkN+b&ZobZd7Y8dVAgeE&`VP$~Fp<=Jw5ST0KT2UY*Jf2tG|1-S_Q4>TEp z@TwpG1LmV{-a}#PHly+QWwdMaxYO`FJfsiM8dWLV?5m}Sp16b!3(f$Dq+lFBUqQcT zIj+hN3fyrPKokWzU&TyyX1N23aA2n79Dqj@+~pm#Z<;-5kAT&St9AgQDe&WS&m)&N zS0S*eIMN@_~*a)_Gq z1bPJ2Iste>!Q5v2fcP$5@ch}rqOUW6I0}r*B<#xUZ@BKCvVNKifOra&=F8Yi&98Wc zC+pZIR{&2bP`8${LgiLCX$Wm|+zmhi1nFJp%vjl=trG`4*H1zu5b^_`fhU9-VOrA6N!Uxo;&6l~#F%av^m#WTZ; zv#$68NTXofFc}*&-x-&DmS|b~0eDS8$vr7sweiAi^r6T0*>wfL8wyPLZ|&CwB~3B7 zrQ;9aEd}O|)-1PO%XtXo8I8IMAe{n@gM4{$bKG$Ry1UE`0FXgJ?m26gJzE>k+m5Z@ za1Fpa3M{%ySftu5+!51g7{8?9uNBYt6r8f;)sHvfd&Zd z9n}0bfX@_I^1Eer&Tfq-dXJ0-1_Q{VVDSYjX1Q|`p0|zfE4%|Bn*v*YtCszxWAD(A zbo(p|0gyw1`70TFcB3zTTJ`p-g#yT>p!Wm5pT5yiJmJoeb-fE9kAmb#Da$Hel!}Jb zqpbQD$fsaLdpTQSGa3J6nchgd2N4P=7|pwY&rVR9jv|Dv4-ErQNI~&8J{>OJgFnOB zF|OeNiYN%-3Fy%u|G1~9X4=vF0KQPrh+nUrJu1@&4e9yS)eis^Q!qlEw++v^Hx+^K z!rc)7N+>AiU2YCXH{x|+MVIpr0hCfOg_o^NjVkbJVT%p1kpRjlSjR8D*uLX4E~h8E z6-NOmry%VMZ^!yJtvUJ(t)?hP1E`?D;Ea@YDCmRVe17An#Q>~k5fh}j3s~RjAtlT*TrG*9I zo$6gf`D9f3G=cND8y^u|p3?cxkY_r1N@oN{&9!hosj8t|4;#!UU)^^QEK^W@hmykC zR$c35!}+9>&pm<6e&0q!<6^q~7yT>$Ez=N6v@0}GKDjRTH~m9C87Ec|+HOAQhEl?9 zPk!4!<&(j+PQous)qf(qG46lBeAFlIw3r$xJBqVC-Ck2N;dwYoAE0r)CjjOYIFFUGl*TtD2zWQz_Zh$`3fk}sDQ#DV;N_KrP3^M)SWuwnBxNm{wF^QK zN=k#W0a#M-{(+Q@Y}ZK@fvdwG=K!#xpqhV?KaWaPM_}4&zgz$!3XJ)whP}HL;H-P% zD|sFOF$EDtyoO#>asoxD4cM6vKth3h2|vVk&;>jVv$?2K06gu z3C*6##PDKUA@(KNZ}X!DgoG0 z5YO+(^i(NTLJ^*vdsGF$o`OPtfyjYqwQK}>MQ45m;6OohUcr&QzqJQ}sXeQ{0dS;1 zyHLWiLPp+4prfpHH2^0HUKWa2h)*t_V6@Zf@dLnl3fA-2%=!D>ang|HHtHt;X9}(@ zw_$xOd~gGxsM)+404@}$Oqa2*CpX~Ee!aH_wE$cxu*{RPyN%D`r!~*PtPX%11tV?c z>{`F?{m@^jQMgm1iGQVs7by6^@9mmd_m3;AmKR1h2H;MCmWPxzpYvUgB76zRX#(IP z1$+3px(^In;Axmr$&aQ0JSa%gm9b-rgM(27ZM%-m0eDjI##YSyj}KplfZK%8EdY2? za7jtRil5uzck9`RSuFuvqTsY1KUdfCRw9ZpLAtsX0B;IH0>vz2T37t=9qKi`H2@z9 zM!%ObyDO<}QG}*XR1^SQrodZE%-YSX8ihbwO)EtJz7!<#?Z5)xmp2gj?wR)s_)#$O zvWV%u--RRm{1B@I5w1|MZ-R`4Sswj~A_Rt9ZUexdf(88UvC+~5yk5UrXxSFPRSH(} z$p`dx&pXG!LczCHgZAnb2Oy3`+Ii-aGQdH z-E!6~G!m!jTAGu)0|=(Ttq+XKKI3Vf0!Y@Mzau1&n|zq2QR5DG$g zM?i-={g$H$W4@j01t63H4<=^$hjMT(Hfqnd-T>}WP|J5Gj2Jf19z{5|aCRR6_b6!N zV#UVXZ+sGgd74A|0tlm^1HW{6<5+WCe-|!Q><1v60wFI1w3=+*9z~d`l>ZCdry#bk zluhs5e>4J5F2?nT2oEUml*^fUg2rY9G+JF503d<_RetAHUmZUqlux#GD4*~*Xds`o z2pB2Ycg=SeN(&{AD(YQB`Q%KKnSv;VaT^evQdaqA$TOXF%t_GY#Mv2WebR5=*Lv7s zJ}F9Z5!}2}s(_Nh=1MYMKa^?y-5-utd|ghNE-Qj|~D&HqjR zkWVVdstI3jJgbjVLZ1b{?Vs|=qi?;1?VeX2Kv+}ff53dy?R>jUZM1(bo=VPq-AN6e zhllh5%IBAx9;h?Hsnyk`Dw6<2QgDq|^xm7PjzN!TM&G9D0HP>RdMab;=2MR#aBf!a zFYt(hEv6!-x>fiQ0cWS!$q*r$f=;}D!^olwei^yi_)h^4L%{@dG5f67AJ^NKeYX(+ zcuYYB?+Tu6Txx=br1Hi@2q2b%5e_2OE_ocTRRtejF%`fQ3N-i{YipzFxYg~X(UfTb z;wbpSm+B04U*M8>2i-Lq0OBbKo5OSBi0k-AVFKU#4d5vSBl#Jes^XM~=tBp@`c4Os zK*7sSd`Pj4wjhxHEMf+LL<%B#(LHM5J^acJ2!E#u;28zG`LD=w!xi|^m^Z0vCV(Ug zO8822m~S8aSJGJALkmDM1(W$M>uo>7jL~OkULn*5kV1jpL@Bd+7{3^SA;VYC2JoDM zmDjD=ly}N~5ism;ItRcD3f}Sgg4>CEo(P1fTFnLUl7f?yt(f4sF3wmt=;+M@@QQ*7 zej@g|?D;Vi;oWGh`2bQW=+AFaF|VuXjX*?u)dc|3D9Gn^&;CN2a0HH2HP->~ngTyZ zDO-9i6;}?rm*)QhZzu>&7PEz0D%+t5UD_usga~gbP%Ra+kVYSp5NPr#Ko>wd1$H@n zC0gt8UIZ5VpI!tYgMtUIq|A7)6#x7;GTO5kz&i?tZIrNRFRcqG!qL-`B>>)25Emh0 zK~_ES+Frc#)ujMFP+-(j#@erm#o6A1XL-v2e57FKekmKaHy$T%Q~S1G0U(nC&kp>; zsicsh=rhdtId~<2PZYHFm#{&b4=5n;N-|>=fX@{4z9wZS_O=W|;Pb`ps{v$DuvbUM zMsDnwi$L_F(`x`^Q{b!3pQY#l9}qab=*n6EITVcKN1zxUw6jD&HY02ufLsdFck^ST z3lDukAXoe4dH{J89N-6!j-92q5`nmqiVXnrDe&hJuB8d|5qNp7(i;P{j{(c$r-O z8bvrA^mrS9G79=W;bq*Kr8Wqx%zL#RKsg19+vTiQZIBuQ^GD_z0;r(in}+ss5Rm2?)$w{cI;h_)5W|#nx=}^{f{N zguc1C3&1xDv=sTxNFTcRBQSD+y)l6A6nvS_FLsFx#4mx<;|}izP)$JzKQgXryFUKL zvFmI10Qf<{YyM~5Ixz^p1eOib*bCq%1t!a^*woaTQTQ_?4BQ8xhJsxF8)q?IGXepd z)*2=NYAHCuJ7k6)Jd1y_UU%7O3ZRaHw)=SRhwh0@D1x`4>3#qwdXV)=OFb#Gj-Ks? z^2xC;%tU{K2J*=>;w=Jq8`~W?EgX8X-Zhj@u44xU{Wo`>jNsy_=6{Af(Ar&h@ z!-$VA(Y%rHnZ?3UXlLva(QovxJ7XiF`U(%X-{g$8xK{ih^)Fjo`Oaq(3tQpR8%cK% zvl9Of_AiW&@vk$qrYqG3qE|!BmA>}yKYNnC8oKeVQuexE9T2!z($oQfIR!nZTeF-+ zx%iiFfc{8F0H-LpVzJteTRp695YehFlagZHYOaP<;Ghavp#s1=j}fQ@XTH z;oQsk)H!DWRumMSm9XlLy>M5{&A=Nj07MjctrRn7y>BV#ue9pZ6ITFY3ewE^sh(ba zP9dNj`N<7{go4y?F}2!kJq_0bHVB z?Hnolsp5@)P->gcybHjag1bs07H?~H7)3bTX23lFJ`}9wuY3KG|G2yNW=-ucaG8RQ z!)@5`;n|KTLfD;;VGzNWg0*KPY{c~&nFzSP4+#h0N5S`*Qr0KJY6k-C-n_mK;0gsV zo5Sl>woaF2p_{Ei>H2&-%aUNuim0T4z(p|6OY ze{rxC0>e*~KL-#_!EQdm5(Rg}6Wvuy+rI>Gp90@qGFBEY#D7-Z8N*%yctC;NK+3xI zxPY4njfS#R01*^~tmggR^W^xBpX@oOKK%_Es1*1PTOfGzA=&+^ZZXF7sdA3>|@FM8oh!AGll*kGmLjF-Q_YkpcCO81XziR)#&Fa zctQEkODz#y=qLFv%ExOHHeVR9{FpYX6db0VDuTDhllh58t5frHoe;5w&6WT7G(j5 zq+r=A30pBy9hY8{r%lWT5Jf@2Oy1yevNQt?X>*(IIRG9}V7ktR>5Y!AL*T_xmJ1-7 zg4kp!du1>Z_aur9*5?6;p`cxXj0OB`hYNDLz9#tq9#hbLrxkl}LC+iwDeIeK0f1Nv zF7p+hkMbn^er)RySP0+=1>>XnI@r2_xIx@soLmGTj)G;n{QA_pmVMBW=JYN70wA7( z?CoOq;au4+1WK2;F9GnBg1t7@Y+7Ek3IxPEMw9|bprEY{zxQ^+a}ffE4Q7-9NTgsp z?__>n)-4!;J4uVm0X(B1_=%J)X`h2D2L(e^DgY!=5Y$=Bt`E+`dHv5>ij@G8DG1My zu+z0fAMgeChzCQ_zu5VSb7?Yame8KcK+Fy)UQGf_J6b%0?X5&_-$PnOM!wN@1Rv1wFZHs>8?ru@+io#l(OTk zhu=k@z3gZk0QnSb?jmQ|{eIwAWlYBnZ2=TeaFu`KD$~5TqX=DB9&87okODz}eqhg= zE4T|dC;4o907Vq6e9U`86;zL)2-T^99RPfxK>fayExPjE4uM?*;yVH;ra<+$oJ~IU zX%+%qBR+KkP(nclKOC@|%c-^qjQCdF89*roZ%6Yp0cLf5g+RyhzRCc~D2VitG1HCx z@C2)C>zQ2vlv7aBTf$r)PQvXci|!b915iOh>nr>+_|6k>iW}SAx;ubM3hY)$n8C(f zOVMXYIOEd;KotdLd@DfcSQY#k{H}QS1n`xDF8yuTv&m!LqX<3MSoH$%je-<={y*J~ zEk?kn(y%vx?-bObpA;NxEoJwz4Ac?0fAQNdP(wj$e$INvsq?s2mtCCEA0pIJ@RlE7^{MAQ z{FBw@ZRh|1brf9U-|51Va9mC|zmPr%I0dL0IFk_@TJP#-7 z1Joi%${x>o^^f(*I?c%d%qiG>oVPxo+kxlL7Yz)i060a#JpT5o_!K-7ea)&j9u)wv zpkP?GgjHSFABjLvyps@sB?Y(m{p|jBNB1MpCn0bu04oYK_|Dk8>sffRnzuZ58UPUm zS;khZlPT+rB50iaqya!oLCJG|Pz@&2DqaLqgBsp12|1V{%SG1 zHE_fk1d;;}&jxUYf+ivnOOM??836~+b#nlmrQm0(gw5>r@)iOwwAfq#=O{?ycL#io zO8$vJpSwo$0N7DbHlCmG^DPZWNKmz#55S%R{ZJ7bv&6y-MevOdTmZm<0_8d}8{#|k zCIUTPywCyQNI~QcD>moon?ndVc$O>#;6#BhKff}lhsIk3I^Af!2*7y?Mm86-)N+dl z2-IyIvKW9f1*^Seth=EFPJGtQn!5ym3kB-8`JtT`+T-3(#qzC70k~4|nMv5dBr|<9 zB!wO3%K*4haB{1NEn5>PMxcYf({cb8C@5$pWl1V4oDpFCj;;XUPQfGIXz{7jVpRmb zxvyRc;35T!`R!&yTXe@OKGzRUUj@K}f`xr8*;`ZTY!pFd@qpC;JSmX*N?3;%%|a3A zy`t$F0A3U*c=AJ57EXGEK)2+~U*Hl2*<1NVUpp`0)e_yikJds2ZwlTPNSL0wJ?@)m zbnEgu06r8fy~p>5EN!X6Pjc{$E>pZiq00JmbPY|>F-<Arvqams0 zMj8OPPC&+jn-omvD{p%Y+Ts_P{CVLo z5J-VarZvmIxx)kv$?Q|g4u}v$L9LmLT{(HYKLVErhZq64MZsKtuI?#=!FWa%JpKGm z0Jkad=pto9CQZO~-!46l?g9`@!MeLLmVCAI7&N3r$Mwbl?og1W!|#h~dk*(ad`!^T z4IqSq6SsL@zrPHBMFrgk>;Vu;LH|g8qWHu|xC{7#dy~BY?o!Z(7nKg~eT1{_Rp!0+ z0k}uOqBt=-+u<}`bQn5R-2^}w1qr-H)W%O0H;BiLons0hoB~;Zh$$DWc!~b3O>6Y` z1GrB?1iugB<*FA;>k)d)ptq1t)Rde=}s8Kz_`P;*$f2EoQDUVnx>)7jTGMo{X<_Zl?% z_3xVXnabA7)_K>%2J^|&LKneM^(N^kDGUknsh17slPy|A3pNzXQxX08`0{^IKHmM# zX2M9{CSOoKSsMGB{vn^#|D-DHShMmSN(m)Te%n9gliGIYgcp}pd_lN--2Z_2s69*+ zr%DT-&qt5w(^b}Dcpe_o2WX^@jE$es8ZV?p_A!(Ih@{|i2MOzOdLDjNEUeO%0*Io( zCy4hbI_cvdws!&JWB?vfkQORto?pFjD?>0-mIH{U;Lb%EYi+o-41H)VtEyihhJvTL zBK9NgATC%}Y*Ds>2#+aP#jp8R@3L{D^-=Zhzf#20$DIkx62jeu#}P4dZ8h8z8G>2z*7p6 z`GE|rC%cS8AT9fY9e@N14zA%HQy!-05J>M;XAdBeg3URWtTuizo{_v0b#(;rjDncU z61HuzBc2Z1jvnCzAc+DeeuJf@sN*Cwq~*Qmp9hdkfmXScC1*Ma5!iirzcYXo3O4xh zhVhlB91&=A?V<~S=M-GpFJr^>=5ImZsOu9~052%$xJ}Luy&1m?f!&M0xB+-c!Kt6T z6?$*e4hXze?C1{Q6$M`|h*+O^=`sX9NQ4&wq*72-D`jcb+weC|NwC@jKpF*MJi^WS z?)bO1)4T(o0A5oN_g&1I^{~S=qM^6#y#TzS;PoRZ>)+EU0DXqGPX3nwyrp0apH)4* z6`6uSmyi%|0O=Ie@Ovq2lsCu`7-;><2S5e|LN$I9Oj$HulpS0hd>Ozy3i<`}yO++M zs74X2?>qPccuzssIw`a1WaNuLbnXE^03Rs06Toj3+O3UeRa-l)z5?JQ1-p1zf6e0H zV<y~1H zUo)=a++QGzf+g2ExLbsWl&-II9U^2?AhwmTV=u>sqan3EFzE(>913EpMeN<));N#R zeX`^xfLsbfuFKf!CV}|R8m_q`5I`OUV-xrdBnJleL_^xIC<+3QPeGgZe0gPLzl#XO zN^aZ&P(VRz-cpm;Mimz*T?RhC4WN*M*?i;o zQTG6pQlN56!p>DK#Xl$$+jb5EP)5P4JyNDsl4ys8}a2;g-06-N5;tPB$ZR}9|=4*3% ze*}Q96sYqq`FA?LIAe92wdo;%ZxjsShs{TwZqgZjh9ff$MgsUwfw8KDHJ{oTHz_Ew zb5Q`QDOkjB|Lb^m@K_XK_4SBH0De&L_?;C?TQF!o0*YDhqXGP+U@AXEpsQmBt~aKd z)Wra(pC%+}=3*;@=$Wc(Kgr3y9d?_x-(Yb z;WK6T<>vxKMmY^?i12Y8y3|!LX7Dq2v@N>Q=b?uqo z>R-0F@_uFy6PfU<>yj|UTAckO<6}H_xLTOEU4q+SLTBk_!~g6_`f6BsQp954Zu^8@ zKF>0b=KwILAn>b{#Td87iGLeE*IWRnC=gonUyXwJA{1e&C@c?v1qBg7Vz#0BATEKw zX#O%EfF%XT_^l~cvJL}Kghrkv1purln3yJE7yZ}cDNAf4#UcPA3XE&ytfGADUKC-P zQU5Oh#1ypQ^Mg@6F5-%|$2E;&01^uRYFBmGy|Xonusv#H2>>YtU-EfNRr{Ym5y*=< zQ3^mtK`JjTlzFSGBJfcxEdwB@z%@n81~strB>-Cr?wk;_xwkiWLg4(NPE`O-Q}BwXgLh4Rh9D4qsPY#$ zLqY6F5z{#vau9*QfLC83!dVIm^Te#Sl}{7`3dzCW0Gy-X>{))bT=^dS@NL&{{0_j5 zg0;M9YenRKT&B9pLaG7SQ;?y@D>mQ8JV!%HWzT;AaG+qmM9SoGtxqB_OtbPQ07nW| zei5CVOgTqtG65hY3>lp;x;e=tKLMxHJXe zMnQD8jD3jG#xH?Zaly?1T%e%W2Qiy9JTwPI=$sYb9Dq9o7tQz~ov}l3F>hCgPb~mk zq@edsF*7@Acn?Leo!qDu01pb3`OS&j=5%<2z@5?nUW1I5`bQ-$24FDes zs`+~4kvT2bB5*y;xGjLo6gWo6SjxVG_(iri;8Z&Rz7)hYm9WrfH!4ts-u`aw0r*j{ zoG&EnRy2=B;G7`11Ar?OSRdnCY1xtc2rN^4))9a|1-2@3wy17zB?31G-|qzADg_UD zk8WYN{u2-gp61mVKmY~$>0)*>_10koCJnag0^k}2kt=zGXz3LMu5H#=25_B%HMjX| zru@Tq1ip*4y8^gDfyHJi&>)Q4P5KO`F5-Ho2Hb;O!*7IR~0NkNqC12*fu5k~qdko$=w=aMY3N$u}+3lIV zarN(v?zVmaLMiyUPRv#nHu`~vl%{IcAHZD-PT%E6kF0B7jDX=A-vI#bQSi`+pE>$? zWM>2vs$vEL2&3Swvy|C>E4_iht~*(S0EANzHbcth-0Go)fYQunDgf?NaE+ftS(xKG z2Z8tL%Blb!P|)ItguSa496`W(YUM8wLBZZ{R&4ny{Qy)cxIVDY1c<;v1C@fSW#a|M zCOXuhgn#^_zV)u5N`afs3W4#FA3YJ&UDf~3kY_rx`b7vlCVPaUN-q!U_Cgy-QQ zeSk{Vi55feUZBUHohw&SN^P(3=7vhJrWlB32t&Wr8AvIavq*Jf`5D zSju`l%)&Fn*&khn0AeY~G?lV8ztAZKSjQ>7Qq00s z74eVr=DxdT1K>vobW-S`pkT6h)An7Xjg0s0>(b>uzkH+Pe7t~pW7v{80A5m{b4kLc zX$oJUA$9#RaV~&Y6dWp%Fln#8c>ZiNW%WD&sT8R3ZjwRS;t?o<>6Jb60i;ndvW<*M z(kcxQIK5N80KjVsWF=yDCOPRD0?Vs|bO5}ez@x8>b*ySO9s&2NmkR;BrQoC@-(~%y z2mbkYJ5s6(Ae{o8eKu^{uw{5X(kQ3JVgMNwJm9mcOHngC(U3-+9=HU+I|?-TrjJ(d zKH|K-bMefj0Nzt@gqIrjo^O|qB8=?2Wf_1E6zB-$Eaqw$p2F-aFkcSfBLxR`N!cX3 z1Gr~>F4J29Ad><^B`elq+hDw$Qk<@}62K=4?yclMC?4S*(PuEcK4cYu&lGGvFJm{G z4StEhk4>#t1IVHvhM&HD=*k^jWL>CT_zPrHFo`$B-U(WdSE*XxPFe#IawyOp$y;uR zq~rFJeyKrg0pwE9X#mfZREqJlGUb)$`{Y02EM=&5ycfnVZ58X!5XRBY;8*a$Z|9U7aIG5eQRO+zg%78dyKBFqAt~O_-wL3F0-1=PQWP12 z7chtAnCSy3rC?UNgatbu#>v~gL0$#`$|!I$6EXL7F(1&7ZYbQ@2B4gRWqdvI!#0Br z2%PkY+YX?Df|4)^OWr9lM_^k;njwHn3f$$q)Uav9A_O+=Zfpdgih>W*MC^|6fIR|> ziu>*a@RfoIpZK+OZyaYM(BD&i7l3aR+;1XbQ}_7yM&QuVHO2tGQ*gR~ADq;)XAJ_U zmLJ#+pqhftc`_C|+*1dE(~BJU0Qfs>?nq*uW-YW8O5e^EZ(+U@$nE{7*-p?q@D+u!sL`DEY#bz$k@!(&iNnEik3pYq8j)BJ=g zFX#L~cz^ouzzt$P>Y|{YQ`;QNZ-<_^c==KbcpgsD2gv(9KVsHTKM(=W8S0h*%qcMC z4Noie*5a~FN7ma4z$prPF0f)LV>jXDmCw#Kzkme==6pI_7T~`H4N2IjhZrJQQjj-R z&gRPO3lLE6IY|P*ih}d}N1>0#U_7N4{nU{H5K&;7$Wz?2I{1scv1GdpfS7^<{0)34 zcApFlsivz$4nRUdO`eo_FYShxCRQi;SObt!5VBju3|jusDW3Kp63GN!7b zG8&SRa;7Z+IR(e>^Df}_4!CLS@r=f209aEn)>z7pK7WoY+=q<%o&{h-!K&8${$aPF z_}ARE-=uQ@Y$+&yVa1}ZO~w;Fu}=p(0H-Oqz)$Yoxw7sy`p`!$zy1PeD5&KruG{!6 zLIgg$y|IS~XDM*!dv8}h&cHuxFBXM3060g%9KM?|?@$%4P2@jta0FmSK?uLzW7`W| zoYyb!JGH|sIqZe za2^x1vWE)*CkixqAK6x)L%1Z~S8up0fb$g0E)%iSD~98pPiA|Tx&d&eU}HMJPPiZw z&w1oOk6r-aLP0(+HP|$>D@PwXDdnO&09Oin3>UG@n&*{+2b0Cx(m@jvUPHZiXe2sP|=3BW}P7VsVW!p3&^ z-P*%soHqau3ewC)%%|$pXcS>u%t9Xko)maU_yT{;GF=2dJ=}U3fENXi`|>PfZn+qN zsll^+0bHV>?vR|>435T=RrhWxegM2F_|6aQOrO^Yx6zN*ZGHuS4+YM_Vm5nRTU^0; zVv+L;T&7?Uzw>IPnc;c#8LBhl{2_ub1 zaRWdA1&rU&R<+Jg1w~MJlywupH41#ki*KnhY~#mri?6NC5LJ?{Vr zqTr1--x_ngq%RthVPI$ofLj#AjFvF(&(Clrt#C_9D1h4(6llqq+L-lt&KKZZa~D7` z1^2u1Lj=@hH_?zj?|pj@z#R&7_ZOgg2&wt0}w(%?{jEE7Sy!xLO6g> z3X&g4S!w@#{Hk101!q& zTYjqJFpHmfqC0Js%0mF*6#R^qvt+5`MD$mh<*676;64S1MOMtT#WdWQyggx96o3a5 zJp05i?^|Vv-x|Y*XgvZDK|%T>E4E8}>UES)Hdow}`Zs7GpKRW|i{MLVqh%;9bl<+W z-Zhj@&gvu(h)2fC5nQ#z@g~~P98V=pwr9Qt@Q8xGS1g(5 zj)|L4gbj+-=>VcB7$uXjB8$au5Li9G(>nk$6nGnnSW=g$UI?gW41W*cF$I1O{8n1G zk9daua>n!z0AeXPoGE9%=Ew1GZOpLM9|1g}AfMl2|8iqn{Hl<@-<}B|j)Eq<*sHz7 zVH^4k7l$tW1R$P*?e-F;9JUCr$Ef?NeFpH90`Ypj4zOv%YZT#5M7Jye2^8e;vup0! zx4{KE=O^EOfkX<7pGjDNnLTcWZrnXR8zMZTpfmpr9ol_XL_?Z%=s^yEBnr0jpUxIN zKjQRoq_0~pfMg1K`N`O2?OWeagne3Oc>q!dJPha&|5UQkfDLCyvY7T`bY?o_8j052&RCl<5TWtZ`Udty~k5r9_|Ja{Q%D{8`9 zp${!um;41lDg~zJ#H`h+L}LUR@60a-kVe6(axoj~Ix++Sk6}$q0lcPQu08K}?ejbs zfx5(jWdPn#V4i2m{4VIFB4AO)$^pEkVA&8Eo44o4V+8!nS5*K=r=Zkb!k)JJj=ym} z9}iao$e4rd3U%__(A1RnyDPbm?bJrlS!l!#RfJ_P|@O3fkZjwO=^#1bo z7x+ZM;UeDO*QN@$)byJ4<_ARhOo1owsJ%WmcRh;mB03I2WdCWY|$xJ;@Y$8)3vrLg8A@dk24bRkQNJXSnnuMZ3G$E-_ibS(i zDpIJVy!$Snn|IxHbANxp_p|n?^PF?m+H3FKWa?k-+{F}hwwJQ1;WM8i(0i+DQve?* zXcxd6k5oV7sfj6P_2dDRP+$=vW)C$w;P-=x=gDRON-4N{Q_9>5QeDxIb_9Dg2T(?V zHt#UMlogeVfa#^E763j{pu`IS!ufl$5Ll<0+Y-Ph3Y^c&*a$7ht_UO)%eMwlPC;N- zF&i~uc|8JlrM(mYe5OEL%==xh9Kjvtwz8UEpn`%0k7R7u_X+s96rPaX1|n2a@bQ!l ziyM6K1sYQG=dp?azEHrv@Y%xx7kq1UJK)t8z*h>!FOsqwAH(rA*qd0l1MrOk?HxRc zw&?Z-4JkBdS9<_e6tu|TxA*LR_!sBoq0<3CH3er~Wb8xU8T=qSd2C!q05uc@Pm!@H znilG4NLnXVIsy1j!LZ|Ec6p0J5dzKQv^xW+rJ#eqj0tnCaJ{j+-ia;%eo!FctsH94 zs;W?g#S6}M1yD!9{YVMZOzl&Fz}~u>-2l{6Fs%t+KdkMFAI3Hb&$|QoNx|krV)odr z80V8MrhM!Hz_c%!pKS3!#I^(|dZK*Nd}hqBzdBKsE4&{sXqGXG6l3U)+A3n@$dVAtc=yKb5;{o&htgf zTu1knHVC>h*7?dSHDSw;P(+#q$r>YkTt;uE37({_-h@`hiZZMl$iJ+NJs6=R$n9Ob z7A7A{%vJ!y7MtX!uUy75$ZSEu5rXiXQS9fc&lTJuV`g#_5VZvx-yoZ&nxUQ zqL(IG;%cY-JJi3gj9nTh6|S4?b_KCMWB$na82ikVQ-4}L1(#lz|1_Ee|5-EoXo%q@ zzwX)tSt??KEVLpKxL^=C1%NpP=lB79hnA=vMc}6T^QizV{smZx zSV0p7T=$=wTcQfUl7c%UCG4e{K>&)NTc#iYU`4_7BT{BK>A({NGG`AH0uWI!%2vwE z4gCudm|(A|4nR!7Cw`ENr9yiP1VUDAmoyyJ9R-SJVipkjGY<{vhuaiQ0QMBTAIsOcS;^rU z9`jDC<^XV@z;=t24e>gOzn7X$r)AapKknAt=Izl_?7VoTFfiM9f>#eqCH1jg0^lMAZFFT!Vd);+y0LEO zuB8B6DcG-W&5jRQe;i$d@?f2104`CW$oFJUINW6u0&7pHEC+Cz0>fqei(G3Zu4@@D zY`+448wFW>SEA_P?8zvCyXDxG0IpDwKEjH13)kI)z?P9qR{?OR;K@!gD~b)qj~PRQ z1FHdeP|%F`KJ78%aQ)CM zJpeuwDC&#ZkSoc?2xz|Du@QhT1!YUbtVZ{x0D;v37MlS0QBc9(4`X%a;31`r-KGz~ zp8`b{uAb^53^Ce7sozhh_r23~Lw*a_KK}dm!O&gka5`pkeZMOml zq`+nxzlQD((-HWfQ2Gnppde?xh}jr+!9~?CSD$Tz2sbJ4ww5vb=mB3*grtLk1^{kR zkTIDbr0$lBA7nih9kv4qq9C1bNO5MB8=g~5mfL3tAee%w3;1$|i$&&WNX74DI{@6K zpgErxPJL~#1OaV(@0|edP;i(Zq;B;kv>budJqf!2givr>L&Qe7j{kwclJa~b0HG9w zo#W-gZ_~aZ&}(wjJpjTe2uYN%#nxjq5O8_kXD@(o3Ih0V`tiY?eGoXDtho=sT?&fg zdAH&6_Nx$B8oFaYfCviO@M(;bn=bc6AikUA0DyZGM4#mIPq&ZZx>lE_J_iBZr(oRz zDbp8Kv_ugO?TI}EAd-Tb0enw68{J+AOxfUb7(f&S@A%g5{f-PxL6w5FxsT2N28~n- zK2+4JoeqpPMG1fQh9?cKu}VRxV{bu_uikwGZx$r{8S+dgA>B@}cA&C6suc9EO>BUT zRtoBp%mu~1!{(xNzfSLIgKWG~AnbKhpdNqR9?|1j&;E<@@kYw)3RRcC`HU(BXR?3O zKU50Rw3US#8`~U2$^PV=-?q_YpH~X*)H?}3B;C7%@Z^OdU`ZIUjj%4Y7!wNtw1wBVd*`(Dc51|N2 zQ{zPd9#G)7oOf<^&fbT>_BYvL01qk1=Q{wJFVn{fXs;hlr2rmLVBJE-K8l+(K@sXy zd&vOAQIJw(#b#P*;}_e@{3+G|9#hcPO2T{xj>eVLnv2V90K`+E$G30)qFE+!_Wd$h0GNGqEfJ6$$@TmxS$MZ`O5R49Y z0FXq1WtD^-TJS-FfL+U^(*T}QVE;zM7TnFo<>O;#ublz#jDk1(+*{SjBK(D3v`2Cl zz;g-|_wbW0I>#!YA*rS8ItL(`f>bLRYqLmxIRbOm>o@{Pq2Sd8zFk6-n$8FuSwG=C zfEN^)sY=+Qvxy}LxY~Dh0+32U+X*t}GP6X4!2aIfet|R!jIK+WlXAyL2v`NZaE1sk zDY*Gk#_}U9@qFahbw6DIyrSSGf7fpJ*>V>}$UHytB7k%XmOT?Qk2N``5!mjs&=tUI z3VQIli>y_qoe*&I-Fpc@1_fz_Vm5Ev5lsZf9KLWFz#9raCGqX0x(4G{%>#6+kux z^`~XbCn_6%!Zh{h=?Nf*0%hJ~(4yH4{IRNaVS*QcTnc9L$9=?1Ajz;lg=**YdQ*5DK2y-OKd&5& zIPZ@@rfT6YP(i_#c_Q|s^Rs_^oRmKfg$R`tXf3j4)Z{lfr!pYk3Jp&=m&U1@Mi60lYzczgBcp1bP^yMF6OxV9#9M1)P~S z2!ZTT_4fc&Q?OW({~k_$EkmHbwr?bW8Va=6irKaLBAo4&d1^!f_)bCDASoMh=dm7& z&`WJsG=N$Py5E)Xie{@;2>4F5i2?9~g0kZ>wr%ETyy(N)*)JAA9R*jOShLy9W9Og< zAD29Q0HB_NO#VXg{H!zr0r|aI4*~q7phK{fb(yG%|4KauS3d$^+KK3qcWd_fGvt}h+gAyK z3$e2dQ9h~pq;CUkG@oqQ;;O*sO7e4*6voZ!-yj>$CvU#X5LB&hz6;Tbw+8$d<>TGr zU?bd8E?t50$!S5q=^ye*=ZJa2Z&PotMJZv<|FeI}CpRAq5mp`=ehuM$!M_7HiutJ3 zMh;f5?wq8E?zl<4?+m z1v0+I?S{^N+@z9_C!Ya8L_y#O5i@SL9Z%JLpFiLY05Ju#mq}T_SSg;%*pxQ&EdU7x zeWqKpK?e6HwBQee#Yqbkx@bVd;>YKrmz*in$c z=eoV7ZHhs_IORz`0DB4^=ZM%^tI>GkAhjUi9RLRktoSF)j<_Q}C_?L=b_D=VQ}Fho zgdII_^#}qHVf)?#I77i9K7n&o#bh!9bqPxf0i314gzu#B<% zxn1=gP=s6Kojw7$NWml@F`iy zs2u`h<8|u+_)%~xmTzJ^QSK)KOM4#p3BaEM@Atf=#^vZU1Pm|R$*KO;jU7P2XI>*Z z-s2?hSvRlpYy#jq1$%Ex*~NkuxVz-#ny97#0x2*sl(0}Ib!{}HbuZq_1GqtfyF|jC z#!kl(#=mIZ9KcNqjI1TB-Hvu4D8d5cVJ!gMqCl~qn63N1EdqfiW;0s?2%_K+KcQ{6 zwk}Ss;$qge0uW3=NU4bB&yvR%ePfYHYXG+?7%k6x((bFbM?>m2@1g>LI~4SD5i|SQ zgKH5u>lf7qKnMlPuJLcarfnV|pl_b72q2V#ZW1Z0?c!&Kz=X7B?Er*Pa6e1LByZI4 z@8Qyan2*>Bl%>o$wD=)COhj|Dt@naynaumWR_vp?q@ehu`!M`Q)B!V}$pum&u`&@ag}vji!Wreo|+( zi_kYJClcWeCBFkViutIU_f$}SEo!~2~VV*m{YF|Ac2B_ zml9^NtVuD7Fm_mf6#$78nC_Oa5fy!|BB1OxeJp?^3LG|ym|U74zBS4+*Ny}5l!E$A z{2w=eKkh+!FEAbt;28yZV=dXkpE|eDkd}uzOaSnlg7;e1%v320KY^#7IWQ4GG6jao z{P%ErCyub$V#Oo?DHPZWcw3CA0=@=S4YkPtUQkd`Dq(gRUy{%@+-tsa>OwFiyL?=V=6>=Nx^e|4AIQUpRZ7a;cp{U0lcDMQ4!xa zQ9~mLfjfzp)BvPYFpIBd?9ufkp5UK3@4f)QYYOg1iCLW81Pc`5Rm&0~fD8&|)Jxf` zx%$%)co8o@4Zs@;D*8!T+XHV+5iraeIUT@T3ZnTICz&XxHW$0J11JZ_Y3Jpxk`~;`A(L0?4Ldcpl#(OV`OTmk#Vzz$LDg3BZx|T5;Kpq7rc`;+(j*7h~LIC@!2_T<>4w^h^P;p2= z;M2}0a{#=f;2qy&WphN^Dg>;LT$>A^fC6p4*-i1wCkGL5?joHB;5`K|`Kr?Rcu#x{ z2-ghzE(Zvq`;y!G0 zTLGYwf$(O&6$N(u(?P6WbO%M~alPsnsHULnBK}obVB8M@Wx1DY zAwmrWop{5GrDu680?oy@*8%uWfu*;Ic_@v*LwerTX+3~i3Nl*Qu%P|B@fVqF<5KWZ}$X4Y1LCa`E6?f$D|p zx+p2Ea5rv{jpvgN5emZ3`zOptbXU(4|3&$D51h9a>V&#?K>6g<-oNP|^2tpt=Li!O z!;hnsaCV>Hw$YT3=aYZUPafRT|24vzeg6l{N8MxcF!ioo&G(~~u_x!JOa8te$jaEF z)J}r_1`3bSGS@Z7UN;E3GIo&Z5W(~t>#rj6qUoE)$X|KxR0F{eUBmNeW$d)!ZyU(J ztc*2uT_>2-c7AiT$hFnN%m(vsD`S6JSqoe}3wI%;vOlYF#7Af3+ftZ6{g6Cb8QbH) zZ}hJ#WBc4(D`YyWta!3PGJ}mJR_~NG0CNgDG?B3FCf{-p zD0--G1HgiUwx31p(`#e=BCGzQX$!!Tf}m&-Td_z3zcnsI54QtgMM3{zGUl(=DHRQA zW@RgT03r%<#)#PROG6GL@V!&TFCeDii>DRavRs7QUFm;Ur;w z`J^)dq!f%*6|)7!-*8*l=#^{E0+3O#WxXXEwEp`NbPdymN6!JUrl75xgv}S#Dk0F@ z+{F=q4Fy5V_`VhocH@ttb|dee2VhGjc1#f&{*eQP}+9{%Ay-CVz1XM4zxD4PN1zq_GJa_wPX&`XZ zr05rLq@e!~JJ!!-SRDduHYT`1g!2^a;QM<=J|2Q6olLF-Tmj%j!9m_~Tjr2~|8d&s zHtqnNDd_Y`#Ac1U(-#fN_45G_04@~hxyo3)o$)dRW~8sW3g7|-&-O`}g5FDf^NmY7 z;0fR&1rg>V)~aVRevpl5&3Vuy5R<#rPB6U}=CifJ+oec&~Jfg8(-rI7KI2 z18|vwn$9Aou-eHTU37d=u@3+@3bqwX*&2x}L!dfG-VeYP3bsy=u$tYYrXg^?TR(pQ z?i9H2o|{$|!cHQv-gH6$01pZ}SV-8b)lqmJtn|J1bpTf>DA~?;uHN??C(Q=aHwOan zq~H#3&->~4kNtM^m5pxz@S-5lh#&9qYAAm4X&<+_3Ba3z5go+roz7Q$w|?8U`xby} z6pW1L5!M#XLw}`~`0Z+p};eU7xNMm@tkUKyk#_i5DEq~ zld>ndhvuUpec$gM10a-wFT4<@p}rZf9Y|G+iUklxLBT;8Q*$_rf1+m1G9Lg4r{F0+ z{Q8mVxM(z_yQy~{0=P?oQ>K_%ER9}|Ksj@L1R#QfOW&+nlQz5VB4CLWC`xI<*5VNN9%;s2bG&34kaH=D*~t z-AB9iL6w4YQ?)Yw28~n-nq19N8?R-E6aKlov>RMwl>(`7lE5Z4VI!&(D26ZmGvt}h zyqK$knll1?#*fvrMGdggO2Mlk!vvL~%d%0rub#iSK{j3~SQQm1Fl*U-1ENQ&bpDI- z@lFrfCln@s?T#u1`>TJ`KU4~m_i70{dyI5K$$rUGrEC_H|=`^_d_(jfmRQcu;D995)nvKwtWjAhJqvNV%}}%X^lXUqHiXESPI&v zNSWY>|2G6|XFtjU@PLBZJb8PyTMfT<0;+Sf0X(Fjj<4uQMb>A3*nC|Es7#NKGx)gW-yt2z(BV+!(qSg{IuwTlRdJ9K*oAf5vI`+RNH z_3+gQyf{Cx0KgLpo}ZJjjn3O1A}~s2;d=lH6!`PL$_4xW@y)YWxV;cSA_Ym7JjMN3 zgg03UsTCCgNTR^OkTV`2gS<1><#OOl9Ut zTx!@eD6s^S5ocp~LKr#iMVSI<5hc%bbpLKhEMHzq;3R)}@GrQ|Y zP9UIKmiiIE3ksIWrJVRyycZ0C+`#OvaxYWv%dEsi*a%N&x8;EZ`kd7q`@& zLPLrR@A3t}YYIYdiP^Jr9dO2~+2ZRjkU>G&LJ9l+?gj3-sr%9C8$@_R!L&erx|zd2 z4vx+}KDi3OTMB;i3CwftM(U$$=&^QrHGoVCEcwg%`4ydB2xKPit^trmfsGyCgll6n zX9TXtp7{=!7cAcFULbX*yR z|I^WK&*dRP5e3aHMC^rJt9TS4LMNyhfMN;?_~&qy)^a}t-d;b`9KZ((w(_$|gU9#F zKwwSZqb&fGP*BY`I9&7dqA3Ei4A-;-P)b2GU&EpCVn{OtR3fIe0#HUlcd>{y>Af4z zJX?FLYYpHd1(O%^-^152?@$C)$D;}WK2e~h!cUk;Y+iss2a9uU0F+a3l3&9GjrTa8 z4Dh+72;egX!cA68f7`6VD1!fqr)>dLP*BLHsynH+>WM&rX;C`>l@yrjO4yi5D!5?3 ze^2uc0KQPLIh${)p?nKBSF7Id*Ac*13QXHuv)J};aG!*n&fHD_zEKcbCuV-a-MC<% z+*H3afGP^~Y$R-R!Up^`W3#}d3xH}06p!=OI>TDx@79@R#$5r_P+-to!p_HC#A*7Q zck8+V_)b9t-)G%-(@y+XDm=-$1E{4ycO&1#xuXxR)wR_g*aN^13Vc`c)Bd)n;`#Z? zQh6l+breK*60@Q6CVoP<#*U=CU!a}>=bvKs@tPNItgtb9&=Vs3q+qI8!c5=i=%NV1 zSl?a%Ob3ve=jOb*I%w9l^(dcA6nl^P8#IznT5O0?GYHF?htk6S)z=zaWBFvJ_9($9 z&mlJv>}~A(XUH?1$m0P5!^rCKXy*Ci8@~qFXg+y)W>102!M;yXQaHcXzd<&hPtFUE z637?(Ne~U|bp5|5AMfL-BH`@*ea54Fvaa)Q`iFe-uQOxw>K*YJKi9hawtvbeU*2^U zrnEY#jPl7TUH=EnN4;I#LA^u#sNv`aY8QTA1?~qkdIOzH6S15#Rwf9<8(kR-;1mT$ zNiz1z`bSp;1{t0j2f&;Hg^yz9V{Nn;f%N$s#{;mSAc!xpd_CmK69oF6oH+r2B?XJi z#mq&o5B}A3DH}2ofE5LstF2fE<35!rf{&=xBmg1`hVzzN)rTkWi!J`rhhIQU!J;S$ z+w?I47fR31OPmZ5Bou7mrC5(WO_R`&`kB9*0zgVZ9{;3o{$v>bl>Ba8Hx+=40)u!F z8*6WXBb;*Vss_NCf-AShtZsK4{%&K|DgppD6l8pmu=+yJ8R#00J=YNeu%%$^2EO~j zM|WJtT-bcKIsiKg*7GwQbX<&ZXU%PxNhZa0FD%7r&zF>!Gk}d2>PuLYXUe=L36%y?}tb6 zXAxMKeQpi_CkkqZTC>1!`@SQfnHMw{fHMWNddk@LzMe%0d^Zc82f&4b&s+FTr6+sf z554O>Ud#t@fr8dN0qrkJ#0Bf`DxVhsxJW_jN(sC9sOLm9BtdBhZ2+zmeBtZEa-|&u z5IBBMWg&n|6pY{#2RGL&!fDCbG_6GdE>o~iB4*N(BgasLv##3~18}1tLs`T=?7HV^#xZn z+sT*x0$2Y9+!8Tqk{5mhnJ;^>3?g_^@QIfXSIz&&3#E^L@NxiN6ch{-F?GZ4bJ0cD z3~^Zjz?*`|Cw$Fk^nsBGT%37wC4g%bELy|2qN&)5Q`{1%&nf^u6#PuLU=I&Z+m0fX zT}WCDz?T9eey~x+7Z*Gez3yeHE&x9YR$r1a3X*q2KaFc=)H^l7xjHY-+=9wRNHUYRrf&X~E7wY#d__aHv z^o2fvAPVO4^l(>&c^v3cofDj6H@LuU>acQ`+ylA4X0f0~n$`0@?6gLeqLlHD9 zrfdfgM!}jPypvgFFHWsGUg%{AAe@3x{(MPuZ`~Xe!6xD7FL0NFlLxGs+u%g}^bVSr zy8|LbP$1!3Gu4Tsm!SwgP2_d~xJQB0B?-INBpz4CZ#?a41mHdet!t!g`uoxN#a?o0 z^lku=6pXthX0Ia6@dW?19F08yq9_EED{d@{+RRP9;2rK3?= zc&FEu2G>|Vc`ST{pz`qDPYCX3?tg|n(`jzwE>PTNXpHhnn;4G<*l0f4RdJT!dvv(~ zC565jR~uyG`Q+TCHw3Lc&i6)imTcCHsb zK`CLIIlt|n^2ymlJ%lYxIus)8_P=00Y7^6T>gT+MxuAR6DobVt_d_(jfiidxO1#sP zbOeU#?m7h^hJr4+{4-3s&;o&qSM$vQ#8Qy4M9QMVI=4k&QZp3`01qh09Vcd|$F9JI z(%8|8mH-}7Fr3d%zIREVf+A?wfBpp?QDDwD$bP@^*aZZFj;C2cgg6RzR>;^qwxkUL z7NMmg0FNmURfzeN>AijkgvPg&0EnmHvL^2ZnsNtc-2;+_NdY{ez};EGru$yqg(AGL zpCtp3K*3(V8_4ywayY`)mD{ZWBvP<-k%Y~(jw(SBN;NEP03=ahzf@+~D0ritEX z2LQl}bI3XZ-Kv-c~5MF=#jvU3FRl7j2^tXS;+`Y{N+9=i8D zfL9a@u$QsvK0fvc>=?P!2|zjpz6MfO{P-BYHJ)yp>#H58#)epeR& z85E@OeJ&0!d$SIKHv7h00Pu!_W5p8oBf|*a-qE7v7XiGbVAORno8b0s6^f9mc)%4v zCIwgDidof%IiUztK0I>?Ko$kFcqiwyr^8Ml;5jw$GJtFfQWN>1^xaau5r|nB=LR5$ zf?2$iGeCC_&N3e56tv%LIT`i23Lu|? z4O1k{?YJ(U%V;7u))T-x3X=J=bj&Ti1zY%E>0MP9{01_Y&-VvVLcxkL5;p6Vy8()@WwzXP0HqZ4 zI4x!epFNn0K$CsF0s)j!u$}i#J3PN3hrpa^Q*HqGNWpqOUq5I4E)4{>$}PPK;1dN? zhf3Mx^__wdusCmY3qUyq%$Yy=CUna{p!|R=2*76wmYfqYLGAI`2&8m%3v?I=Yw!DLy5WF1@N7MYy8QlT)Am1ijXJ_ivUndfim9_vHJAm zjR+_xrQHMYgMt!I36o?i`yrsD^!+}7ItpgZl(N2s)A46$OFgA10QD4HoFZnfjxBI! z^W~AVq5=G*U}Q@v+mhvq-*G<%Y={A1I*`mymUNf03$BClnX!}FuTTCPG?Gs~NZz7$ zq(eMp2jl}sRi_`lvva&Y z(r#T0KuUo}AHEBVYFHKm!9fE)0FY5|`>vGfW%}SLp|uOgmjJM);OrI=yQO8h2Sw1! z>01iGhJs2>5j&%G=qmz2V}JevwiFok;2pGAL_HB`^(wOrBG^$dxKhgYZm{!5KwdrS zBLI5}^ltK9Sf=TFA|TLk`vky&f>xiUEPIAK?lYb>)S?`~X$lf^rA$}O5a*92JM=#T zI75N1sug>|hFYN^ZTK*|0>D`c7V=il_BSVZA#fvdR3(6O6sYrU?$q{8+JwO2f(2gy zI8tzZFF%pWa4lXG7usaYR{-ZJXg`BbhHqT%jv@@de)JmvCkm8XOWD;8O&=hju*kIv zfHMWTOw6K&DHS2`{(?z002d1O@(tXUHd%vz4@cWyt^sg?g4cYRQK+slUK!i1S;%() z7b*D3_r}(HABczasc(8M09Oi<`BP()N*_IR4H>TAegL>c!H$b!_EY)(5CohJy4C}@ zOu>;f3ENTnr3V5E7smbs;6}j-sf49z+zCRU;B*H$!C!5|S154dr`H^8J7FIJnFA_+ z0e1?F2lDNSI~*8=fMLq>CJ@1cf(nTx^HRM16akH`K}`W%rQpFx89SkL5igCIJ^Q>o z08a{HBKc;3+5THmgtaM$ngQ^lU?BZ4~n|C1mHt~iHZ%gJTt%sML4o`QY!$y6zIl?*~&E{++)z{wsva( zeiX10eulE*PW%R%b9Ijb0DlUmr13N0{P%P~LmHxQ-v&Sc1-(5)?3BYpTpkHah)@J@ zoq~PG`A)sFR^V&6e=e;pfItd-{iST+>bf*Eq@mjN?Eu`Mz)4NY)Z6r0k3gNMX9oZ` zDVVA*VX`z2{P}ZZ&xDQuZc&h>Bw=cSslF(}=&xFx00dEBy~LU+*M#>+Kt-n489*=v zy=JZae`Uo0T${UVVc!+N9SSz{7W9}g0as9jTQ}Uh0SKXB zw~Lh7-VMBsfKGaNcL1Rjh-;-RxT6bxKd7zE?g1c-0%pl;)x-D9LlLA&Ka>E3Q(&hm zW%c3FxJG(5c2F+>cPTi)x39l6@k=y{(DU__-T)#f7;48)2cEMVf1Kpr*xCocJqq-` zirAe!gHuq1d3{a$0=Q4X*(247CddQ-`5SfrIQ>gKMl(aINzI!Gv;$3>!zPtyk-1rE(r`P{<83Q1Og3;YAS?lGiacXt@ z_z4vNu@pSzjb~GDT=PK@=H#Cn3*Z3-8ocg*EUQgC0@i`o#{qaqL7SdZ_TKvq{*+v^ z>Ct!qk0>w*m$0ITLj0k3Bc*TxfH(^F@q;VO#%(o4Luw{!G6}$A3c7R>F_#llMk8?S zey_;@;wjLaC}SCu*RMd}+Tm$a06d{!l$VTl3)Q7-4y03=bcx3`F;DDAC0sv1b=-ZS}x7Uw0K@p~? zBnSaKqac%i(pS$;#Q!*VfuA~n=M=PDEn;C;-{Wg&o@qM`Kr#gf`6gWRoh0qikX!|O zrUOW!V97h0%Koy zn+YI|g13Br{@AhpVg#63)i3apf)!U}%xil-PD^fnOV@x1uPDe(=DQ8c4Z}Hr=Djbo z0HjkO?8z7QMU1mRL#oQ?rwQOS1>Mi{y*g|<;{Mi5ZS^?-GANkyUBpWEntVYK(zdLa z3*Zd}T8>g?=Ux$kz}k{M^8mc1KoraOWPa~_69Fr8yZHbzDKO=oYR#vZ<5{Y`b8jvH zkVSzWU%l0LSIdDYf<;o27JzIDcJlr19d6eSKp?TANE<*71<#J~KkFd_T+HZ@D8C3m zE(H%f#LOn@!*dj2+Ueel0pw9&+EvP27xuv)dO4%(e}Q}oCi4?Vn#Ziagd&{D%hiDh z?4J#!WHv?YXWFMVP4WwG_a63hMeu*#1=uh9RIS5-kHz zNI|Hdh)psHX@x-3EjyP3D5Bt~Ha`dYu)!7tX4EcS0ic+Iul)ZoJIi1f0!=PWS_$9- z1^0OcC%Kgs&SUZmbXEZ3 zV7#TQ?KrP#2t40$Z4H2r6kJylu}IluTqqV_c(4}0Ckk4I@%`@ekK!S9yIi&oKsg1W zymQm!dJ3))xfr$H0N^tP6;&cOWy~a;u|DWLSPwu21@i*=ws%Tiz0pPcJ(;r+KqUo( zc{|q9HAT3Kq33A*O#r@7aG&=|zw0uuEsEe1Wugz@D+R0C*|LpE7cV35da2Q70N*G$ z{KkrT7kENPPD&<-*LU-zWf5;DQMQgnrVH@*^eUFcYA375o#%j;vMD7gOnE_&?6{pJAfY) z49&J=`6c?ete7vf?_6seoy33(_vR${|^bh$Y&+3Hl`n|D3DPfoH zzwMv$$qnDlgrAL1#vuIZf5CjzAD5I1YrFN6qFZ!qNu3$o4`%cRisI|Tj(E+(pDih`u${A}|8M*|e0eE1{_0Ok~!KasJ%;oqMjP_TN9B>)QwUM`ogdDGQ!F18`? zm=yp^3OZ}>9ZlAqT8JXF_Hz;eu%h52Pu|XtU8RVC-{3$o01*WT4%o1_bJyT1{jq|F z5&&Wf^vtA8W2f{Mitw?2i4=f@0{cTEHfOQ{PD_T$SIGcKDd<-(Vk!rh;56Mt=an@8 z83jXkTQPq>ud`@K+HXT_09aGdZ!K>@f4gTe0&Rb~*aEPjAd8ko2jDCP z4<1;tDcv{XlFxj@<&FT(QQ*)?#*&W*;`DHd$AR+z94QDKDrU#uZN*d9wOyT^0Gy}b zct;7Faq(yl`YVMv2RQ?9qQI1Q1oUYC@B{**TP3;xaHe1h@3xEGn}f?GXZyXs0KkQU z;sFwN^4q>Z6ya!6Q&#{NC@AEOm_|#lR3p&#NzY3FE>bXZB!A3|J0wFu-F*0E0In1$ z^1Yn)-Z+FC&(c=NxdFID!CAgpR$cfBMKBxJ(;I*n1zY(^ z(?_g=aTRKn@sw)-yeTkp<$cD-{j^Yo`G=PJ0JuiM2S46@>bzPW0lA1>z5skEP?zWH zR!^BvN1&Zp><7S?g0cMQr0}z&@in+Q`uhX$qrkmH%F=3W#-a!_r^g2X@TZ_Z-!{5! zvsj!oMF0G79Y6pDmWxF!$U_&ucCYRF83^Dy1@XuEiLQym-=ZPCll8g@AdrG#+j%e4 z>HgXXTppl#3&0Hu+Np_{UwBj&0=MsO3<7YIf`TL~_H)h={C_a;*9Zo1i-O0zLA**; z5qFmqZW?eKKoAA>wjvhpnREjUsb$+1cK`%akj@*Arq3;KLO^bL@h@^0*cBaQY z{Jr!jJ}Cqu+@YY3R}TE1%^!mzY#(e77zK}mc%Sjt_Z29@8#Sl90KzF?{JhnG2#*#B%E7gx&&FW%0oSH z$>%`plzRXoCp7lpVDjeG)3c!5|l7>rJ^woK| z0W2eQXf%LG3Nq))*lpFtA5jD&H5LOPiUPgUBBtayvkc{vH6fYL{|1fZlLO682Ds8kk2$b@ftup1u0GW23D7%@JEtu_j4Hlo={-c zM#?gpxo<>6+G`x}20#J@`o8@9FdaEH1eygVyakX*!B}2Cn=)<(t{lu5Rh|hTi2|Xv zlqr{*SE2}SY!$NsJf&bTU#z=x;tTv@i|a8a2f#B54t(M}2i%>5AK82M&Cdn!oPx1S z#Ek8mf*Wt1Rc_7$kW9gT1HSiT=i2e;8qBP1^8ut#P+ucqqhAch-)#lPLGJ*(pkOR- z=T7Ubhu^h|{nH8nq*8EZfi<&wTZgNXZKr&B4e&6jVR8WJP+u_&5Es%DN1|8w%VbWo%K<<2fjTrS;{H0Nzrdp2hpW zXRJ3yVB4&aPXID0kn;7CKG)jfyuRqh`EmeR6s+azxYK$|%u$5lQ;&ZJkWE3+LjGJj zABbms`rGSO0LY<0TqpcQP8!GggNRj z*F@JKr`q-_fP4ztwBh@L85C?npx{{9FYu0n)hqbnrpIMR5U5Oe{tY4&Q1IDD#wG{e z!imrQQRP(t-cvA(FQ8CXHNdl0hRxg704Sv3o`#fl>0$1UhO}?V+U5K z`XSJ&`NCQN#S}bP!S}y+uf#=G&5?#b0DPceT@v5GDtr$v6br4*>Hw5bFut9HwK!Ve z1P#d~!?7MfDFu@ciCNkE_IT?0_?MeM0hCejaJ!fdtR0L?KAnf8$qD~zw*E-LOIIt_ ze3&}^elB+{Zvx;G1?$I2S=i|8N$46}?zff)P)Nf|3T8I3<3tQ{+UfzK3#KM}M3 zn~dd9gwK^Pnn8pL3PP0mmT_fY@&DnjPEd0Il@ug>v1Ic+>o1`QnYoTF0DPg~>;?W( zOgFlR!15tSTLSn>fjM7G;1r{fkAQ}kZYu!aDDdXH6cs-ST8}_}t$J$!RTS9q2HAN3 z~T< z5I8(atu26B3P$PheGQ}s@Y7o^XIVP{KPb4!zxn1_S6QP7Uy}~B2T(`BD82@IMf<64 z2*|5k?f{^kg5@cE8}-?1acv^q^PZyaDh1hhrODWBKIhOYs8LAz$lIK54jd{GTDubUOPq z5w1>2^hWulS<-|C*l0fa+Pa%iH%Z?JC53G^O=^&h=aY~74HrHw4Ss@XSlQ(NqI|q7 zWVXVHDDR6XpIr0lH~m9C$CG}+M<=QCC&4c|Gpo{%Gk9lMho-=PhHS5*U>BU8w6b$+uCcYAmjUf2_n(O z?;0a~T-{#m6bwDQc^z6A+gi2XJ%yPeP ziqPN}MU5jqx+}Yy2p1pSHX5yr9hmwX{p-qDyQ-N&UFpivXo+j&|5N|IGFJD-4PmUT zRT^T8(tZc~7skgpc1s_1xzUdXpodRe-zQ_>KWj!G4d>MP`C%n17a^d&pjZXKDGFvS zkgx|iITI0>C2lbefH?&*`c~}AhV>YP-Rm*h|Tre zi$5K2JKaQxkkOW9r*=ryC z`CHL$GXrp%f)6!fmK^WW9!1D|JZA=gGZdup+FbvViE#)V`8s?ifU^{w2$nLX2rE1l zF(X4m1Hd^7_Dz+r;GnHRD8lEcjk5qaQgCiOKP95ox|s-EZGCDsfb$gC3dAh_$Y*s7 zYF#w}I8m^#Lc|7n7&syDLlQLyfHMUuM?~!9z}0wue*fO|xd2=!7{Zga?cc}Y--CZh z%{%}XD5z>7VwK-}rJ*6^9O$(Gz(oq$^CkYeVF4QucsygO764ZY47~X^ci&5K$DqaK z#o7QaQ4qwZgmP6z;pvp3)B6_!xJ*GkpLB9pXpSqG%bx6B1i+1gYt1Cg$7}CgbPb!_ zWQze@p`a~4FKYU^t+*D^{n1q&0PYmD{fw)@Cw540{PgG@R z{!#!}DbRh!+f@Vq@zluf)pR)kPYTRFS}~uA|5$vJIHmgv0A3WlIx1!_+7s}q_2=zN( zZ-NLx6qNI`_|m-$@$X^KmvDUm!4y2(DrJgE>iD@NC(76i;5G%ZK@#Sy+_?|BhRD@* zTL9dlKsQjtS}!?+A2T0bC~X4}LV+)zA{}#LKK^uw6izY#5K2K4zKdg@QWyLsP@lef zJAg0>Lc%QBXBlgbuHlEvK0^TE6m;9dH;WzL8-M<|54YU`;4TIF5mGjDYY=`TkZW2vrJ{2K=Ufs1%G^GD|4i zF(4Er`?vp}{ZpmjtHLeeoO;`<2x|`f9k@}Bu*0}8sV zlQPrmFSXE+#x0RQ1>hkCs>%H2yyqDw%P-DK|wo#l!*sj z!vBZ9p7R|5q*Ac1y_9v5SCpZP{t!IoG=MY;%=zJ_Gfdo`BA{8({tSSZ6nOFo%`eTq zfIutjiDv=4qQJI4UrJkKgD<)&aoITl=@ckuN|}9=A!AX5ts%ya0A5pYcq%^xB`ghB zaGErCKMx>-f^&1FZ1<=%JX=_}C&CH98w%QN<8!J`fp{)YPm<#d;4KBGqeV>d)tc7m z8q)SRzW^YUf_y%a-0kMlE(i=?JK!RKEDDMZ#H`4o*D3_ETvc5GWK&S^*KYKWuHXrq zt7Dg30+2(&_jx?8Z@c&ziqO);_%eW83cj@BNAcFQz-h^rd%A7_@+jC*DPt4GbMQA$ zRVcdxAfJK--XhjQ_fZ5I($t|t-2uF#z}%QWDi2nbBd}Y)wFiI#3W94b*-+&|{B^r- zeBm$fo`OClR_tXv6%`agT^xTEA{0`PZo?n<_uJk>pk{-QCx9Xfdh*pemku7s-_Ici zA};{N6jXGzVGq;vaf6HFS_5wYA1Lq}#CPA`mHdx3$sT6c0F+P=dYSJp5&Vyh^@6;d zeE^hF&{JK;G}j)-AFH-QZ~Fo$qhR9fIluct~NfX@^Rdd>6ttgPz@6!)HY z13(1@{@Nmz-r-^s1dK20-ULudL934Z^XHf%zP%HyEp7q$LP6db8C&2#!x2R=y6zbS z;41~o`GN_JRk?-;tX=dx7{E6Q7Vy>X>n3k9LEw?`x7z@!C|J$cttL*Mvk!so%{ztw zsHQ;8f!E(hpToDeW#;Hm05udSpX5)CNmWKD!ojGyVF12UaF4%s1?9`?5vY*rg#)Oi zz<#Ney=?!z83LN+C+`CIL4mfrm~}m@?Tf&|n9C6W>L^$|P{R6OHp3Mh+sNp90O~35 zJ}YM1Yj*jg2v$v#?gRKqL0poAeLOup7XihS*^vNDhme`)x951haYOtwluwRPT$}he zXe6I}UfyM@2m0YZVI|fhwX#EU;IR$|aq%5g? zJbtmsFD?HCEGTg0^|nsiP1MmfEI->U86sFxV9s-~d(WHTAwB!tI|YCh1q)k=nP%Y0 zSQNpoe8LL=A_`3SikmH#u3`i>pIMX&Kup2d=@Mq3I^zxkF9z*O10bQ`)i*ISs}qew z;MpS4O8`;|-o;7Ti5w-|->Q4&(klQm3S5h1Y^wP_oGC3G8kP>gnu3HqJb9Zt1lQY~ z-=)0@0Gy@ZCjUM3uypE-A}lL9k_+G*1?kNtZ1L@88VGc< zS)B*Kk%A#}__S}{^F0WR_$15+aGru4UqtMIs_P>J#+vti2f&Gfkik|={$4Wf0)D<_ zN&x_83S@ivx>ZGA{9N*CzVtl+7Ya)GRNeN4#<+dk=)%@Q02e5z(w4B@y#~jiYv^5R zQUu^41-9N&)->|~{woEhTq_3PO2OXN)=XwI`WlL`XhqTo0GB8j@>$Hr_)8Wc;3xZ5 z0^l+Q-m|1^=t&p+pVs}_xeS0C1@*jO9i#GmA&M~L?6{8ru24|;RK!LIstzL1x={NQ z0Cx)drbt;;ms(s@vKYU=9DoM}oqNdGM<<()C_>(jWuF0Dr9l6#jEz{eMufn=xzj5E zcv4_JM#{c>nc_!f7`qR@9{2x$;5HdW_9i1_WQ2OZ<7JbqP)1f{lf6e8?^y~Z zSw$)>QYoP{l&vTgMMK&NO_YAG^L+nKKF{y-RO$vVTGcpHS z-5Y{{>PC$k0R9y8vlFvvk(w(JsBoG43&1T3hJNHngb)8-j=Gy@Py!8pFE)OO&}00hQ(?Q9Oa8O-%Fe#gDf>)H}P7zL-b`B{8BwuPW3ecfE60O1sT>mg-& z)`un_uxfl}D@b@i!T5drqOT+@LZEGYS!)0h6j=4*=c4q4KMIwF?)Q4vx%%qKGUYs-pb4|$5WKC`_s@`5I?LKx3xszEwMO-%iicVqthb&t zT{Taj*5TG3R1~HT>t849uP3|iJ}pSxx3dwVS>^-&jq>&$IKNW3bVsewwup#QOdswbt&mxM}l)+Hf)*z$L9y_mPUd#Z}=B_*G!=muKzZbo0Y zA0p`uq-wyor0;nK_mSjOtWg6HMZpOEtLg7>9KUNlOHcFz5KX~pzTdUx*v(5(lN_2k z^#|~ff*wiM>}Qu>cKO76fvc)n z>Hr>5V8_3zP87@^jlht86@vggrXabuoMp8R#UB{o9a{|n@PvXZe0D|aUZ3%L$>1-2 zH2^%N;Haq;oAEK~D{7KSAK_2{&nURpQNniF2H|(@pp@>z06eFle2|z86*%HKibH*B z6yOB~T6{Yly>k;WP#&H+91>nq(1Z_uOvs#uhq)G=i5>wUj)I^~w(P3&u=V% zBnsx;60>rPc6eOO$@$SZ0Lc_6zmv1xdz;~#Z)>Md;{l{lAloWp!yg{O;{Yp@RdfKn zrNE+E#Pr{ddyKAOm&zysfOiyVEtE6icz-;Q_UYF=A%Ij0(v0}IMQO$xQG(+rGhF~_ z6zo_nWAi&i=OFOvjd%ip_Y_QcEMl)Oox=~~IdPs70eqlf*DM*ctTkza5(1vtF#zcl zJR2!yy*J!cMPP8ru1NqgC|KA}%vP$r!8P%)l=+hZWK!^2jh9xB9(F+qlLTX@0LY@? zF+cn|-2H+k0#{deo(kY21;S9C(C`%QUzzGttpM2+T;!eZ+to}zq6Gh~AErUVCkobD zi&$=)=2!%VdqzwLkVC=B)-qP$xCeiRO*x-A13)eX*+MasY?z8mtA@JYX9CEhK=4@1 z?7O7AL``~>-Bk}jJ_QR~$XJC@)Jy~p&tkIy6j0E1tqoIIl8G;R$4+B?0EHB650bF; zUOuN$LW=5vIRJ_%@SZPcc0(ejBd~a~^IQPM6f`iBvK}oy;n%MEpgZ#be5T+$KiH*B z)ze!j!N)IcK7bMmz77+y^`X-K2n@eoy#T-$3Zmm>?BUJ-vxz|M>P`y*e5D{ho}Y~5 zXE_ojTs=^u0N*I6iIK3bVU}44bPr5l1PP@S81~^u$4Fz65r}9OwHQDd1>X!M%%q(( z8-cOKZiWELDVP%|Vrj`u4k4gAO=<+7f`Zg+G25rVbUOm=25egbpppVLft=~j*xe0* zTQ}w}1yDtSGT$t7rtf83T4{9~y$ry23Vs^$Z;eZf@Yl?o{PxQM{Gec=rif{sJvs?B zX`K5=V*o!XxXhOWcQl-jFZz_R!3qG?6sR|suq4a&c$A{;$wMmv)KG9UUd+te4IYk~ zxo?;()AJ8TUA^MPc1vW6djv-jv= z5vnJPYQuN@4eF^Ur^m~@&yZI-<%i4# zQjHI;sGgiZEvgRITTdRpv|Vs>+NRd1C~Uqgx=z+#Pqy54Mo=|-GhP|1bot@G(ZA}+ zKwaU1o^mm&Cj~CQ=^yIJKDN3-v(wuCs3iROKepbIkdIFm2VM|n?cT0}@J-j>!S!O^ z>c4hcO1O3)5v`21%sX`S@B4wQjLl0sqcfxb#0F@Y>y#r$>I7XGdtU6TQ}caE2qNLZ zN9!ZJT^b&p1YfmnKA@GcLq{F2Bmb~6c4|>m!Mt++sc4bwlO^VL=ATx^rtKOk*tEXQ zD}>q{J5fL4tvgYiEYO!!y+bQwGyezGyE697iDgsK64ztLe@Fep64(E~@;Up(x?za5 zG5;guZCq*7PIvhC*(1=SVMFbjWAL9nK_3lvZTMz*t)yEK2<>wGH~*bG6!Hu!CXF-r{d^B+{x}2_vi!wD+&&2N||v$&G0gJVSiBoxe0ld}`r4%g5% zbQo+X1|X$iU1g28;TuF~vN_~x_oUv?V6847${B&=bBPk4UoT(!Mt060+ags-@HJ@e3bbkUAo z^c?^=QqW-??-TmmekcM#qfH$FoTZ@8V?N=jaufdM&s8~g7Jw542|vZ`)1|cyQG(Uz zvrYicQSg)>W7}-QcN+vW#6jl(I8)&I(S~(?Grbi8MHP4_(lB2AdcXY&a1gsP0UjT5Cg7{HVHezWQ{+gZcGx{QcOBCF9kTR8#iFhJrlZ>vH z09>ZvfrXfj30~A4HL0Wcy8^gSu$?c4#0x~T|Qt_W-tH`=xfF8_W3rIQT}(CZR1N&_(hGn$ z1t0jb?A5mB2hc?u&&%@$;6p*54!kd7y%z4`c|D@m2Y@dHGJRg%MI6TSBvhBD`vUNz zU_8J1zFM}ujhYlVC)y9d4GKE*wdjKgbcHBfj&2Y_a0KpV2 z4B#7syw-n$K*r)j!2m)iIK_{OG0il@J(w0Y=RyG7q2R(4Da)Nua1JE|Y!A2tAe4f4 zqh)MD_Gvs+9rqp2u>6+l`15CBVYB-H?o;rs z3!ee-;~;+Wv7ueV0EAJnrtu;Pr-qPW`fakG`pdmf_3w3 z>ty{s1%;~}1*HbJaVJBMbtnIg^7dADHxzc#3_pZ=3cmag{XXNC08-PTjQ7~Mc-%4=W1{SZlSAmb5I#s(|n zkJUAnV_yP@qM+3>30r<6ZvaZDoZc)BKr{uH8cWz@-@OJ1bX=IC01qi}?j~n88;bCE zTh?};cu0t$V9XaWvvIj6KnZVC&0hhCrJx6Y6Hf0s5zl(meq!(%z#|G8T#>TwX=`qw zgu;#*2>>2bkjCrD)+05&5SV|oS^=I=uyq%oEA7#+IRYnFyh?>Ge|0B?Ezu z<9nq5cuB#X0De@A?K#|&S~TaY0>n{}{Kkd}1N!Krgevt1Zy_O`f>gfi^Gv5E4hW>S za(D;e6$Q>lGIleq8UDwqWp79Y@S1`>ITF@R@Lh@$*1r{`0Z5>rhHrq}3DcCZgHb5 z0PiSx{hZ&e`5W+XO3u$D1xTf!LwkO@nUkynHL13r&qqi|qu>-j-osx~iaTUlIWzGJ403Rs` z_#t9BU*F=ds;E%?0sz?*k0Y;N|UP1^7n6^>H$` z;L%Myi(#&*R|O=LQqU;QnibyZ?u!y8&N8nAP)5P^*L)rK{=rTN)P^st0#HstQyUpm z>J~N*0c&&h?*J+&u;v}b8LPVBTO-)5S^+94Ffg=c=5v?gr}ws;*FPYkih?yoGInm& z?8&G}2|KU<1n`}L+x;YLu*utX2$;AYt_JXf0&_PB^EGRa`+d92no|SdCk2{|B%YVmahM8S`0A>kJVX<1TsFghw5 z0oU#48cg_WR(vf51|t4fn)XQ#fzFG}8Uip^CnL`Xn}`_G&s>M<$qD^lwE7#=Q%@GE zJkk02))KFb%`$vh=jy8`E3+zf{O%?jqI&Y^rno;tUg_k{SRz=kRl5nQCx0A?uY>j0 zlV?4Q1@Y=XH==s-wco2cS${qGYm9@yRR66lqA6n&{*ChXCJ#^-4)N7miR#IF#$Z^^lA00Ej6# zKU%`>-}s5&=CgZlR|O!UU^5?Xe7SL38cLY4X;OOtQVP5a_~Wkh6aH8o`?ymF05S@U zcZk@48J^8hLTz}y0>~-w*(PIcZQO9*t$W)2j*wtO!N9q4)_6$YQk0Oh{!}LbwiF}` zma;38?C?MCpnPp-04FKv&-W%++jikAl(5BfTo(X#6pW3Rvh?yzAqX^?tJD>MJq2O> zRN4i5KJ`K%ctW}YoT9+yBtOS3)}k5#PosctkZ_uU{VnLo zxh8nn_fXdty&%Dff=&F$9-ZR%S5U&!ldio1oTK0*-+E)G{m}aeRC({{1HhRA5kJG> zkjc$K2po)=))&Be3aqunEVRMlp$J@z?5qah0tH8;GImg{( z+f@XLRz>uKgi91m<|{JG+sp4FkXLx7KY+^=oZz?jr?6n$N7Q}trU3w4D9DbHv3vKk za4&s@pKu@mR|>Xvk+5FVOp8#HOdG1I1Gqwgqost6nKBbU1oZajD!^3=+Rm4-(<4Ig zIDpluyMrLXje>j*F8KO=LQNX`*mf|0YZQb`fn6Za1D@nX&i4tD4X)+XmCj~})16ZeYWBk-ewN6oh>lD1WD`i#VTH-Fy zkyT#9Ai;}*$-~8L(5F!{)Fh?Aqr(AsQ*d@8FApy@!oN79jrt=1`1}LlqvZc-2%D`%A}YrCQZ9sTX20r*ppXkg89n-$?N^ff&uj{$Itf(JXL%w%2_eoqhd z>YxQ6fP%`|BDPHVSWncX@zVp;MHBkeol?U{l2rFn~nz%Oo0iLGR^tJQc*(fc`a=KAruJt|6zBB2e=2vFTJS_ zfIAfEov~qNjr8$odV|sw1qh|!2k#wk^U`D|YLd=EUjZcCrJz0U0=@9j?;-+DLyrmp z+@rv)uY}DW*s&o3_cqSc1#q8&>#f9$_1-)YfpU`p699x!;J!%AMh-c(AAybTRSFPJ z!Q5RUHhF&*E~1^^J(~y#4=9+$HwJmuwFADFF70+<03s-e9wTQOwYR6CdNMVrSnqF8 zPd#b)`i72m!xrVJEOdJQxz5#BPkJnWt&`zmzaGKRtdc)NUg_Kr2nBnLviwjz`AhF> z9jv#WOeviqSkZGpH7W|jO}^F1`s>Ld8Rmk>qZ98U`t^0`zfs=aHiGuT`Kj&aqk6Ja z;&1wgdb0nfUc#r_=g&kX;hq1nf2t>)ZdwUi@Vqy_gX_h-)r;1r3;UEi;td%* z(jU);`yrCvKqWC^mNDxK?jzandQl%h6a@}nWUS9>O*~!igTbyj0HP`Ie2m=*q@c%7IU8+x053ze*6K13Knw+wS4mj&n}f#1BP@D4yhp zfMZGId`NgiK@wl|;H=TDBLV@V9Tot1OhGaKx~&}lDhz>#!#5fLctU}65T8u9*~kuo z2H&(70(eS+(Lpi$yzM|+1T+gi(Kr0v743<12P;9I1G-8Qqp)!w3xMn(YQC|DdSV^71AEl`5+ zcK;;+;wjKImNV7Gop8mfR#K?|uPD&cl(E=;4cnmv)8kK;Lc(hbCg$3vBvRmYUB(_HJK$HR?_6dK;0*9R+FuHtcr4jfp5Bd$QIV0I3vce&Q=Kt8{T`b$VY* z698!xJQeXJ{^D);)@Z#xQvu#nAPf|1`Slcm%a*cr z0MaSwZz^MIZ?@SWu%XKuQvewhbkGs8*oKYYBT(IL?0Nv16ga&Uu^rPo<0@n4!)6-* zWKp2UPfiRxWBV2*lpae}fR7Xy@F`ZpNiFcC_xwWdjgXK{!4|$ABCt^h-23s>{MaS{ zpD57dTbtSmS3E*ZIud8F89)vN&tpVv)5@VQ5qMV9e+z(I3Kn0KF{`S^_}17vw@Lx> zC?edU;;h2B3g~cTME1XP@`DBOuau+janj z6zuch8?|2_hG)p!7&gTWKoJGreD~pu@Y!2YlkR_LzXL!q1^RpkxK(|fS0nK9e4YY) zrl9jOG1GVYKaZJ1g`qnkp@f2+eB>?j_%VHy&@Dx>3&0l&blTXktE*=_B9NH3Y&U?f z6zuwH%?3Mm*@u9<`LI0zzEMzek?+EhFxMD?#!3zL0w|@RESw()m33Ou*Uvp5O8kmxepS`Dd=b|W4#1sClGMycW6I=3JNSsr0m|6iZ}!;+UOquP)Wf= zeh&1Yc0U{t7__p_K>$@0RP>awsViq}Kw#0ZQU&- zh>V3y$(Vr>(r-H*2Jn-D>3yXv#!(OdABI2Pd;~x>1zx;!PdG>kf47F{PB;pnhJr6s zB<#b`a8=YKd&5r00Q{oh8Q)ynbikvz2$bvRD?lv;E0;)_+X-#_sAPA-jzfa^ATmDb zyGYJbBV?ASp6vLgo9u5;Pd&M>X`)WC#|)&3linePNAYuV?ysbS${p*u(5-nw259aqC4jI z`8UejYt^KO(A{7{6{;uaFZfOWP)|DFpC#09Sr~~*!lM7N^_GNuzU!rP-opGB8>0|D zZ16j{Ud&rP!=b&d_o6q4(8}0qqc0AB-w$ME?9y9yIs;pbj6lm=EsuSz6Le+l9_5=l zXI-W(K;&Z8xB3Wgms_uq0(arF+h}F%`<`WWJGJ{L{+V z?SV4|Z9a5KP)BOxu;yPl}Z}rbB zW9Jom314TF-$pFr&y2UxRkyuvgUc7@qi0EB&I?EQ&z_)3a%+eUUTI0kEQ=noqwluNjQ{o9A`v<_y4^ z0;#E#*{1FLiV~(Y{Hy>X3VL)Fv-I6-^AQ+f5q%yK#1wSmD`UT&_^=#-3&$NV0FY4d zX1Rpv^>wI4VDG057Xe5q80RNtvG+5MA`sM7`w{>d1v_Wju!k;#@rT`kIV~>(kW=s_ zO2S0_Z1F&W@~LzMu%W=Z1>couiU$6mIBpu?0tvPh*zmFKqhn@Uqib*pv2X=&l7eM? z+rzf|18|Rx`y|6F0PHBx^_H@kn`cF!1oJT(R{_{laASaoSt&ik{aW2y|4@Ka6pUyr zVQ;ry!3mOqFWn&FGzBGAV&-_X5KnmO^YY3y0B0y@DCFn39q53E<`(wf=MKPu0<)VE zwzSP`Pjt}+)_NWQ94T;}C1S?PnXeEidE4C+z*!3NGou3Avs64zb}n`JA&B?{d69$M}m zWf#yjSd`uMgM`Zz{9IIvB^yUt`vxe$=M90 zZ!1ufA_GSH1Gqv#QlgAyrx%qVuvWdrEdW<3xMaXrGbYYZL7>mxGzD;@fLY1dVzv|a zFW!mr4}gSg6ny5hPs7Kw#|c8|i9i7E6lAXA>rkd%azjnp|7~Fq01pbzb>It*pT*%v zW$E|9w*h!k@R+Z5Ps^BZg%WbU)F{Ap3e?@i?3zwHJY^vL!^>bu@S?ytOU5?e>g|mZ z5_et=0pLx+RKEMekI5Q#2t41l_YMFb3ZA)3S zyZ5>az>fme&mtB)Zv0pTs+W9KfEyIFdu7AM_!}%lU{#0MdysIGf=4Z+>}J8-^$2`R zIDa32KLtN_NLgq3s3{1{YQ8-Tz%2^OQYEbMq}~G%xUhX%IDh~OrtsVQfMHoI0$Zy) zKL8L&!Q5sNW-N8a{|Ba8pa4M>+?Pt2o#9km1FwD(8UYEnDLBVBq5IkX1RicbvDYpV zKrjXVd3%W1|7wp}= zAe4f^t8AFY-dVUqa^cEM1-MJWZdEz6EWV0?TI}r@NVrFVGGDxY=8lUKYSNIFvRDB3 zDNxlHGv~*h@r19MB`Y2Q2&3TAYTnfrH}oD#2=LQ<3?Q6>dE+E(mciB}1T-Etc>>@8 z1q1jw(68b<97f>%<|GA(puk35!WL=-Y(YH*p_hjxLIMZ%^b`mM-a3)1Tq&Q^CK#z3xY?xX#N@UO6Sb#v4W&aPLEMf!L)rN>tMY-1t~V;1Z8i|;Bx=O zsZn*Z{+@!$kye7wL(bknJq0elqyLTa_MUcYDID82I}G&{c>4XOf9NTAGiR7^N%-X) zRP3AF_-*Sg_IXdi_ngzhBl!a^Bi!%if55!e#$n|`<>+|a<#)VU>o;&eMA93`z3hT~!JTb@Qi|oBW>8bL<<>8NW9qX1Aylgi1>-FliJSOgTR8+&kFE@0#{85v$UBk zLSWvN2kDUTl7az~`8J>fRdAVJ9d;@MKpX|@iX|+>ZE`e9&>glm6F@u#acUwqI7SWs z9?T8KX90Lc!I^n{rFgR+_zV5R=2jm8yrv*`vkiN??+2c=)wuS(0who{{=Jx;TDM3G zT|@ZpTiKA1NWt6zQnvnkbzcPZA6k6^@P-0mX9?4Mw+4eJ28KBRk|=07o1Yo0@5)d@ ziLZJtfMg2X`BcwYEj|xIVEV@@1xTTw!Dbmd;rGE5fleAP^C00Z1@C$PimirdBm!HG zU&#mXj)F#f9@*@pBQ7Iwd&r&w0I3wTX(M5`(%Rs!+W|Xf6#_`3AU{RKoPl48cez!L1j<4a}!V(4eK*9MRa%TUv;3-Ow%!w+7gmem;^4X_8C&y$W5a)RI zGk^>V4#=eJHvGZ8>B{+P0ADEx;T>bbrKb;~YdG(>y#~NH z3ev@VS;;kXT(Rz$HTf5SQVM36h*@fm;ck?0bZy640A&-WbnUsZPD$VB%j3EGsC8;Hv~{g!S}!V8`rB2M&NC;)r|mD zQLt{GnEi4s!7F2rI*n=!;5!BHhl$yn#O`?7Lve#9O#u9$VE8!+JGC#X3^nPb>01T( zNkPP3ISUpy#V^GU@4TBrLNx_PbNJzX9vkuh!MlZdGXOOd#0E-PR4X(5n3-K+&>X-o z3Y7V-Gyw@`PN8ck{W+iofLaO$ui>}GgL!za^aSG{3Sd5%j69EPEn!FQn3th?Qcrhb zdr07*o_f-?=&8<&r6c>Hve10NqB>V!J(*_ORAA*AYJ=dzwTu4@d8Kn;tEs@~EP zy5pwy9ohlzhZFP$YV9gxG44A%A)r0CRsk$1Xm&-$B#qO}5U^_#0Gy_vmd{^mtQXJ& zf!7%=`vEvZfqn}y3pzX_4T1B9X$s&#L3vMpz?9Le#t7{19nc>V94YuVLCP-smEjq* zMq8~1060s*;7-AMfsDB{ZXJs*daZWUC`j<2;JA>lMgO7G4*`{}j-vs1QlRA~WBRpc4m}`rfb%{>|N{DKg zr2sw@EGw0cXaWNJRbxGrXvJ8Fj_kZL$g2f$4VH2J=fswRhyAdtMafdGI%1zOS8tY?}DUhN*&E?xm{ zQLw!^pCPk??Li5`p>9G*2%x}~&ojQ`wbuaww}8F600Jp^#7{c7Xg&$wtzPakCjbbd zV1>Vkz27H2h7v4HdrSmyn}TMJ{NREgZn%G?^kabn1XD1aiCE;BM|d0|(*6zu#iW;Kn~dpx~4d z--GmsbS|nVjU;k|zd=3qWS_XNIwQ_68iUJ1RogmOUp*PAHC(W(dDsI41;bAM8S+ZU z`LS3~F|qAzR8Q{pu&aah){_grtrn!VNz6kqC4*DlnILfL{ZQ{zz=_Ri(G+#QFoQa z0HP^aoy5B0o$ZZ1$an-h%eE(qWTUeykC0D5E5c2ICPVr-*NxRIh63|j>rf= zECuVDpJb-#&juo(rL|-UfJYQuZ7*fn?+tYj$Z#IM6u@H&9`Wbn*&kZCD>hE6(J}x} zD2U@T*9PdEe1a0D=Oin@Qwjq4)SkCLRl6Z@@Qn9zNO(rUl}|EuGG`Tj{fGWKYz*Kz z1>^XkC?moRPM`$;!ucxzyr96XK*S6dKE}f<0mc1R0(eP52)~B4F^%`3gvw^$6(Ej+ z8yPazZjc;z1lW9kvI-L7DR7>~XG}%A{z3^(ch9c|@QQ+Ddwz<_nYZ&1(DdE82Ec0y zZtzXG7Adt{h(PDaDJB3CD9CGI!{%L;2P5$KZs)ZC5-E69AZ3TI9b1gRt;NL(@P>lm zKnWW)_4P~y@&lvRK|&G*Tfg!7Obg@iCw+;;!4yC;1;L-BY_qv0?m3uZy?#A_6bcr3 z$r<}#h<|ZT9ma0}@Roud&-m6%7Y*?6`%tG=8v(qdpcVgKXg;jnICRmq{Ny75sT6F; z=bLsm?1x{@*Vo_P1R#w93tJi6-y`+5f{Jr3?*k}uY4-|~e z6SHXbS1r*sIL#cq6+k)#BM(ZL+F{jD1b%2%D?kPX%iHo2x3zU&1j2^C+y)7m6d3a3 zwVSET$DhNCA79=MAd7;=+xbpQjc?+v1}~?*W&l1?@Rsjnt*=yOf|{hJHe&~XYzn4s z60?GvI_(f>SK4JKfKL=uz2fV`giCM@(6J(40dgqFpD1Iq!}9SA^SKkFc0oce1rM8u z*^1{cLQs=NMmX*UkVnBcH3^%>?w&!QXS1z)0OV89$3(&$L^tqT^g+g?y#NX*5Efgq z>}a_?%&6g-LJM_zuA-$tN|Q-J~$Q81NvW*FaSlZk-vMc95wD5gM@ZzQ%n zXAUk)_LrYI0N^tP{x)*DyrRK0ADGP9JgU}M|8p+#iP4sE5J7j-1zPf@ArLvhMIJvAm|7rlu~e#_kK)# zP=z1HvgVSb0Lm!H)R(e0Q{Uq5!zZ7Nj{zvBK+;IYwtP{?Z=jPF!;b@~px{@nHM?N@ z>lV5O9py&m04gbXTg|s-65qyM(Fp;G3Q$GC>?*l+fne^%Icror12~66SN~ zqA>zt`iCt5{GdR&hL=`%8scBvwnhsq0sN$(Y_yb}nwEs$4^y)HTLGx1psl|(8?7@1 zKkhrJS1Lda1(J?3*7BIvM05?w5l^il;THwN`|uUYde`xwLxICZ5rA3>_7C7+#;>+) zM+wts?hykpA40|_Eq_Ybz)m&ZsGgL6&pq`wsHdKsdZf9a{oIBgs4R>!%dd0w)stt& zPZkVzsdYwhtYyKUA+L1yPewvVI8cuo@~-=y51^xkj!hkEj_oqHu_8e>pNIN<(o`=@$x zS0@*t?C9M)2nYTb%v=3sNfX_nYbwT}m9d2@!!G`PKaiENCiA>?5)#j4qGhhv6T|BS zT^ZYE;8z`U?FpWUnDmUOkMMSFiI^q`oKqTvR>p2V5Lrk5VP))a^@f5`v&J}}MXsAG zqUy{)t&BaVw^fiZ=4m`ay-q)@AN}>ec5ET+9<^B$t&E+1<~RDsm9aan4;OlS4DN=O zxEBA9`sbCg&nwOfW4dlVgqWqn@34Phyp7M)e+rlQjKlLPjWy0+g8%FZ`e?8|C}QfT z2jZ$?_l7N(0a#FA!MiPOFI{Mc9zIG_m0-ppMHnmR* z?$O?zV(bP$LV?3+rnVxsG5nVTT%jO|Pt=5!u|JM;7^u7(0| zqd+aonhlNUjK@?PHraOe7b>yt&xnJ*5lSGea-UHxH!P*1~d(u@Y7J(9Zr~3dr zDA>;D4Ry^o`-Xs_U9JLnQV`f*&eSzK<45JP=OJN`aGin<-6d?d>Hpa*HNK5J9Do-E z5j`bLm-EbNYOIZALibs`$TO$yfB zmoc;2MBJ&W;=AA>0DlUMuJN@rpNGVtgqI#_F#v8+;Oi)5$L1vA7kgk_sR9I0V91Y8 zJvP2l4<$SbdlU-^ffR%vl`#iN|K|u;Kfdq?KoA8DPDz>aHx&T_d&_n_25_5#q74$3 z&|DQy(iyUG`V#=b6m&QsW@l4+enkl_r*(S@AcTT#e4A($|L=I1_t)zZ1-L`OhZhpo zab=k`N-*9P`3w?5DHs{fCl6*-Tth$-?eHAHT?)?K=F5A=>Rv>^d*S*Q0Paz+uMfYy z2Ry+OzN9jpmjLclu>OdM?fRgkh7uZIR*3@;MnN?14PUi-5dOziC1xljc9Mq@-w@8Npfc@h0l^a?-(1tp0RHq7~(E$S(F6PJ?uH>jtlz|zT5 z=iTKLIV$*D<-e_S_4O2#54@~1psSw_g43$s{TcE~r?PcRLB$A9A?hi(uaZ^=>+LBB z=+sp(azUXLD);;Ke_to-?1zv&-( z3ND=+B3%Cdsw*n?hw1#bf9fe{n{F?x7+b54aM*vryw#r#z6e{*jo66pIQ!`VX>dP8 z(i+@pP;M_F)Gg~rRBOSm) z3bq{Q=jkn9yc8w0vi_w2F%(SU8}>xB?iq?eqi%5-kPu73>1!fp@y7ZA0=DT_G66iI zz?v`N+{41~ciXG;d$IsLrr@-hlm$1Qf=4`mhEM+p;0Xn1&i}QPcHlJBq^Uk#vH?7$ zKxeIl=^PV}M&NAsLIrq6!75V;o6@TWKa8|g!#_d7a|*WeK6CwfxACNeb^dla0A5gV z(?-gK2EJ0%B$Gd^uxXKem&kPz$*$=`9-&NI$w^O^y9Q&0VKSppaEYLSJgOF34x7%#|r@@Q1JS+ zoDE}3Pa-hz(t;uYi4;_xlre+%A|C|QI}RuY@P+~j|23g8_DB0d8^Q>{53>^NlD{u_W)3MNhE=i>~Vh#zFvlyemzjeF z^fBnq`fOZiDI~n7U{F^v>*cIjgh1b&vN8Z4DA>f0Pqj>$i6>WA-dJ7^Af18+CQ{a~ z(d3UPVSLK43IG`tR7H!KYUvpKfiWxomjYx`u!$d7oa}OcGD`5ZO00y0EDFA>@?$$k zH$RO)Z*R{k03RuM$Uk8+^lYOM2$diE4j`L?>4W9$)+F2G2&n1I{Q=+;1%4tK+d63~ z{#bqPq4pC%4h4<*ciZjcHv3S*`n(DS$fcl&Z-MgQ-Z@;ygiVaChJ-u{I`a;ht!bO^ z-D*AJLJfd?3J&$OWp=5Z@w}nh#I3&o6j0E7Ha{Qd?qK|}dN_7MEr3D_9Qn~n?>@}H zvq?6nwQa!uS}$2dLFQr^J2fI1kJ^S?e^P*A3jBJAnMq{MG4y9$(I})LBz&fzp_-KC z+!`|+0j25EMgU4Eu;0t~m(bdVi?{i?#*G1dp}>W&e^_o7Xn+zLwjJFBz*h>sgjln6 zYt>~4bl%gfDS&SjENUZWBYO1ziNFincM4ESflY5Y>!J6qKLTC)`8I=uG719u-q_W4 z?;0VnZ0WJ)0Lm#?cAB468eF4^z>DegTL7q_z@e|0IaqC6hd_g*K1u*8DHydx!VU)- z;jhXU=f5dH6$MHiWbE38M}a6IzbLjPBz&iUJ(RLsyY)8^*kO066@VWU933QLW#>=g z&bx;_5sajceuD*J5;id+HJC+L}_*ePSlKb??ax8-O(h-CFVK7jYLJBA~V~O#ws{L>!i~ zO)fw1i%orTU>`^jQ?NzOPxty@I36W*a1-?fAfez+Lm69pc?y2UFSj>V10bcK%WD}E z72a1y37@Ww><2(bfq+*^T|4a?h`>_+#{B`vDR?-C_eust<9^SH8gCWAhJu74Vs^fb z*?N?4>yqC9NU){Af&U+pHVnUsKxO|E0|A_*U{^Q3ZN;jlCJ0=Qs()6 zBz`&DHytzxfIS7>-tk3o7mIPx;NQGP0Zvii;Kb*ViK6l6@O|I-!H{s8g8uC!tf6v2 zB)W#;UG75woT1?C0twqtx(JW$`A$5n0ls6^W@Rz; z0!nagWIqCcGX*Ph`L}1Gl?4JbmaoS152Umar9h!*T!0 zym?6qaFv3h3R|{x!5sW$$O7HRL4q3vt@Wg=;qK>$(KXz)-a8(^H41)m;Cp_-oWZA7d*Q}so@s|@TI_u@40xjq6F7s4@;vbLV_O!(?j^jYT$@n=o$h{>=}R? z6zCt4GO?B_p1(4qkLe@;Hz}}n<;&wAmg1M<>{_kK0Q@Pin<-;GLKkVHCS|^BIt9Qj z3NractH%o}5xB0Jr~m;J1a=lN-Rz1}=R>QqPwq~MD;-^1TzB3`_{r3 z&L3oLM~H-|NjrK>m=54J1^fA0^dmDy;LeP3N0es(2&N!Wmv@&;G4n?Wt=^|8KnMjQ zzF(nkqzuK}q%#5?d(PGaaF+s> zB4(mq2k^`c+qIo%1Gq=Q6IDL%{(5!~l#q~{s{r>Y7@I2Q!z#&mlp^s`kUk`YQ7}kN z%z7Kk@ilZgDxL!%oPuBcOpA?IGH0MBtut6O7r+Aw*6$Frcxi)71bVvmp9dg<0%Mjtc9C~zv&bl`v3sG4(Heg4ctFN9^2@TX)`SZ+E1Q$Qq`Dgf7 zr88rcAhWRLKvYjUX6~wk_12TBI~ob}I~5H;MPcFCJ$17Fdh)>em4fg#c5M;OTeJ7y zC~vR!`nJM*Ub2&@o_u5SoBpAmyq`NkIH&LHSX2@oS^L}msh;dI)>C+U@S)}iE3f+x zn78_`otDZ*o8z$zjfg4B;C_gtH_#5geTe(FK5fw**CwRHasW{j_+ zx&lN~5HU;68np0kiooEI8^)0EkOI#@8A~3cTaCb^u}4<`h@qf}?>jz7@aQ!H`%mky z1Q1KXpq5f*^WZ)1+?rI`a}|I`6vS&wSx}EGOO%jlSD*loDG26AWRKZDc`O1c;dfU< z!V?NsyUJK`)S^iU-2W(E1K=qIVS}aY>BDE?2&n2THUaRAg3)|unXMruxL2}e#elT{ zo>NeHfv>$C()9#NXfmxr0bWpWJzB~h9WujTx2x7XUIz&;DVVM*Vq3L@ctBHqijygT zI10u+;)T!n>G7yZxjq}#1Bj= zYYGnY9p-}<__RR@NdprVAc2B(9SKuDy7>|UGQ(?|AR&>0$VqZG^zQ4C2(&-CYcqg1 z6zE@)uVQ7O73XnoU zt493jQQa|e1ors)Y=eZi6eOLHFyH<9xGQ#Xi=*2CyraOV2mgt>jDCa?CZ3#W1|XG! zaXqE1f%ghL0jlZGt~&svQBdU1k5Wp1fD2G7|3U?LPl3fMz6HvFMzc|qQgZL@goF2Kqdtj z%Oxz=ZGR9-7(e=_0%TF}@TrLT?HMruftin9?1hAn6nHijF+t|pUI>f~yRZ*HHU+}j zQuaWvqZ0z#$8XvX;1dPWMRN9hVJW^_O*6+G0FXmLp`MssUY=Wl5+tLW9|Vv~!L3PB zR&3A(f9QD{CMiH31!KnWZ_l?q@H?*bw#Okz$fw}>MZPuDpjcc)Z&|(jFn|IIy!rW2 zd5>@GL)S1%KIsU6LJBJRZh{>irQ$lK!7SyY0E#GZJ1=AFlJ#p*Ldo4U1t_LqF5mCl zV?s_x1OjjQ9)pC>6dbk`vxaRAZX*!7_t0?wB@~$PRi$xxSGFOrboOj>0ADE3@RyI5L?3MEkx;Mqq63Vg>j{K`~#8KD=f@KLqA9^tr4*DL7qg=o z)3#t>a?%n&83hNQ$XMT5tvYEUUR4^V${!7XjdfR1;KfVa;}%=~Pe*YU-&grB@STDxC0<0U z*o)C$Y3xBhllL$1gM!_BBQe9lCvl(Ys;+$c#b4kj1;S)La57V7g%VC1HI)IVreNnS zIWy`N{}chQ4Q~{nhJsa}M7*P|2EQMUCb-EV;THvt6C}*cxBFL=P-3{p20$$Zm&3&D zQLZ(9w*I^_)fRyHP%=KbSep<2oGYJ)>d74ic20kTdg{q(_lvb%_Kb8wWnoZ_eVwbX zo~-fk)4AE%Gz-D+DyRPpd8Ko1cW=R$RpR-mo{TmJ4ZCQf#{{_Xa9}z_G%t!Ak-fpGXm9}JP>K>{sbX)&WZ;e*QsunK1`uF`nR>nGieXspv=GrK<%yn1W z#dU(NjE&p7MQ6>NkU&Iwk29=~@OC}km93LJWNinuGPY`&Q62e*m9akQ3v`Z8jZ8+1 zT<;!VQfK~YWo!ric7hiMrt=Vba&2k-h_`N5a;V^IN&9fLGWNXtZ}g8VWBb_Z3S&D? zcS1{CH9dZ-e^}!B|IY-DZ8t*~v9Lcg-o`sym2_8U8O%h_5|u-P-QYiaf<77+@Hto? zPqxLgDP*ZX6~KamXSw`*$^GB(S8q#%}WKe>6-nN-xI%?=mc0a#HGGDOY_ z_49@!U@G6@0l=C9FNuV$iF3xi9W5^Dcmfbn5Vy^iooE!&9VHwIYJMGnm;$YM8OvLI zzZ(LbnxrUzgn|PL`L?)oO%@@rWT%H0BuFWEalx8(**fhR0)yA@^#&lLz?UyGdS2cR zS9i{;(|rKQDR{&OVSE25!SgC-HtpaGz=i_#8)7!veSHdQQrg6i3SdjYI=<=F6_;>a z-T9vK_k)C!6s(FAv9HZ8<6imlT=N?M>?lYZBxiF!Wa7SvP&0#@0PHD<;rfGzFK;#msp4yj3W{_Eh*SNH{~mek%#v*Xt_& z0c~$64*=jm!RU`7Hlca%B7E>qCgnxCK6OJgAdKLZcn1K>izEWUKGugm&Z2rNB2 z`#u0y3Zzmovpt=NpBl?%bPWS=g@O}@`L0AOx8i@?UfX;HxJrS*LBd?h8sj0-CAOjA zkl;o^P8k1*W-nJq*C4hRJpgcxf?-Yh)?{6pWg7;06WH`BNi%>{#3z-Y9;4I7yN!Wxinb;0w{26 zCS{R&V>M917a#X$kPt}01HRvV#`D3O5YRQ<{Tx6L1ryvQ?5>NlJp$eDPkRC2HU%B| zW`I#k#xy}dvl7sy9#$CY3Z6jz`CArz$YJ^`C+pY&0}3irElkZ^~B%C>yY z&4{dN2<#7*#sdhYzG z-u4Ot-IU4{;64TFky6&=OA)@8x^|CFfP^p#PVj4Z?X8dJs|2e!CISejAd0W0*`~H{ z6l#*5=ejol9#9~D!#_^ikJm+DY}v>p01*^;7K@nuS^aCMry%vf{*1ptJv{{tYSnZ$ zZVQe^1^+FF19h&xo`Oqe$vVAlx(6dT#q;2wA+K~6>{=jrGg8$9^%PuhbGQ!H+fz^* zzfY&JQmqCm_e=X7sgw2h6!>Q!7Q_plW*{0n_UOM+-rkQZ1_}c*l(wUu0?%>3=^uIu zDi5d$JC6Kv9~Ju(#{af|>M3w(c0p*hZI?5`asLJLR*!1gOm}&&R5f%1tt?rP3HL)J zy@C3!ma_4?v|AzY>}0Pj08td2*!I`nHOp}UnmVII0ir1|3$SEVm-;*;3`VklVsR>J0Lx52;s{!@%U0f?o*tU2F$<7%fclyH2}&>R4d zD6r$(=v!^;h|9y9gMTQ%V+y{%D#ITHL1Pj`8)tm zDOkUa?_KlrJ?=?$blR8?;28ynR*G1a^}dlPLA_vX0f6Te#PTNX?b)U|0+V_*Ed=m_ z0=I8+7MH&r&u>-Uny3ITDfrCC=g%ED*9avXGju6}gg6Q;+VKu*(`VKQ92jI)3?QC@ zBX7lwogIb$tjbq(KLdD0!7r(lb!_ks{~oS2YFPr{H3e&o_|}aUKKQGue{zxnBvA15 zyMz_{4ZV!6VL^)97f48?pm-4fJ;=6U;MZx-R{(D)c-cb2EY=6(Z_i1&Q@#O6qM-43 z8FSCh!>=80Q`J%c$rSv!FJ*lOtKcaEv;DIaAccZE5;6OE%mII3Xe{wBgM_yfBzal0 zJ%vZ{5`Te-WjTO%6#R0RGRqCE@Tjfz>jf16QYm=ejQ<~Ij>I!D)-35$2_TIEZ@zPN zr-J8|=pT1wXNdy5r@$r1hK&nvg)5~qEW8R5K2RWA&5v0L>VwC&mxQ1E4j`R^Zv5E$ z@y;U~cICyydF94q?C@YY$ z{HenZAkbE2TrGec3KHLmna$P|{L1pW(6qs%zecHYDYy{Izn=q@aFdLR6BHnig7bXp z##n3Xm8eM;32qG`A)f-#S}{B9m5;xlo2l+@1fYO|h5S7oX0sM|y(Rgw#sCT_Fgqb* zHmC35r2y*_+BE@CM8VB;F-vIgl8vt6ZFPnM6jQLdmz0?v9f#}sQM+$8g@n%(WIwcK zHZyJ{qlD!VhnoQ?q2LtX49((23hpj3vYyo(z!wTW&6lv1Z}UVbVV+^<7686daNb11 z3LMt{LLk9ATLHdNP{jw5=lbkn2xMplDnUXi1+{#R!IV~!xSpIo=tN5ZWfWv=6|llB4+k!-n|gmY}dUtfC>sGzZbLON2^^BFl|??0F@NXj1jRfP31}m zDD@9(0|`|WeCj7>z*L_n*%jWU4m6vXhmwOUzc1OkWimZ=Xy^7KPgb#EoTQ#J-UW~-(7VT0F@M!-jcFk69?f(rFBxd0IDds&v&ji zonUH*5`Nm~8S+Z!WQC!&(euRBtUFV>B(qrdu`iFYb=DVKGst}`0R1!KF z{kDIqCnc`lI<1-3XM`{8`X4ZF^$F8fxA0x9b`E&}&TW_yVH0T5FlSt4Uvt*qyw1cQnN{Q*cQs9GmxnY#{lMnLDf z>Hq*z3JiDfvZPrVE=wNheG`C;f;DEmJoK1Yff90>#Hm7poPscOKBhF~8?MDVx3O0P zpr9aMg}=@B+GnE#pG~XP0a#J6l`nr(>QshD4+CZn9thwR1#{o=qerXF@pw!^uPOmp zQ*fr8gndh!6o;CW((%zCNU)(`OqhhN3D?6@+ct(e4+daMfkG;0UF$usK?$z*TZRCz zqoDO=DVzRm9R3{Ej}Q$7aGHXWXMD5BdZ+fHgjL4PH2~OC@F+;mY-7KABhY-xTLGM* zpeNr))bFzk{<G8K!%LX4RXT2hqoPvjRtU$ z0_~stgyU=ZGtvLSc5jscE>UpOK+Nps9+-i^ZLOp+kl;eWC*C1rSEPbxGN+z#8VkUc z0v|riwPPOjik3Pe0B#iQES0mo4q+we8q#8wwE?(O zaIj3mzH7C@y@A{8UJBp}1(v%c%(T1vK$PI_cT)!vu2SG>D`#fzqw$>e*QTbr06hK$ zY?LwMG4JtrTcY#a@c^z-;Pgnw6gHi4H?EFv{|NxDQ=n*W$)2{?OF-8!T2>+ePYPOG zlCn`PN+S_?-65Vqf)@pP+oi0nw0toF^Q!D80=PlJ9VNcPqIJI&2#g!ORu6zT1*v?A z|8b=a+YvbNLvs=U9|}y|_y$&DM+pKxIrS$4@TDMWhk{9iJ`O=(foiG%{3x(YFlY6? zbjG(vO8v`IAmJtj@-uvsMu*KKQNr`C`=$c$r$GOllr1r|*@nQK{d&^?1W+&}Si=0z zI^b^HUYlD_2M|bs)@Cs?nwz&2B^11PBY+?ZbUgXu^~Mcw*PHl6pgtr7Q&8Ml&Kj91 zx}$_!9nEI|2%%shKN9&<_`Ea(daR#66F?{hRUUlpZOwZ8f#ue!&ny686clde@3^Mc z_yeoYmm&e&qM(7fCENQ{6(zp>%->@-2S7LluXH7>Y=&Yr z0+vtK&IJ%b!G2A?D9~fp4+Ih-wB`Ybq+s-O8SC?GR38LJl{PQ{5Jf>}ez$t=XfyzU zLF>~65KY0#cTzUMtGyWla+{0uAt8o>LwXYSDE?F@R8PKHR=DDCP)9u(w!N?DfwXc8 zDhmtSeXVtM)sx#yvqV#`@BEJ7nw3R=hP=|*K4O7(>!ePHQ9aprPjM}*vz~0b+f2lQ ztAbHcn4R{mR@Pll_Md!GyWBW^6{2xpO8$%T_Ike_sH5+i)C<*3~d(;DF~{|n}=R%_K%H>zfbHM)U(^W#^-{cwlgK!$v6 zRo38`w+P&A>#zzyECs8~6l}-q)lU$ZF>=#t0C5x?;9COia(#*W+m=d4uK^HGfg11k ze0zKi?v-3~xzSnxcPVJHU&_kOmg8D%xl4us?oq&wNm*h@5w5z^ysxfjB)S;8R~YlP90UFSdIsQ#Sy3K!IT|8JoZO1O7tysMmfYfJ6%Bb(AyZ zx2rtR|6!-v8v#6|U}lb(-7`IbyOYh@+}s2SNfb=xNBE3b*iR27oak|MGk`}FT;h`@ zcKxiz6{~#dj4c3?De#^yW$vq{=b;4W%bm6YNTEQpoq}b`F5u5$vlDp&NToo@R>}q$ z9?eGy1vX*ZAR&!{9zFQHvJJD`5O8a5z8ye11xfx=cBfEUgg}|e!W{q}Q*eh**ZXli z2rtW)AMCpmKn4X(r%G8%FZ0$Y!S3)k0c29Jd9<9lX7|ElO8&VqMv(A?f~lt^Y*XJ- zC6qAC(qig8;@JHFawssGDP~^XpWj5_iet+I0CFh^9Uy0k9vvPb zu=8z>0A5kBei%O}*RW521a1ZUm_Wj73PgLP%;fk~9|Uenj~)c@hJuhVDH}L;p%(&= z`p-H9;4KAXo%!Y--VLG=$bZ%2Fo1UyWbmi=8V!Td2pHHE3gA5jRg?K~kppB+5cr@U zaRd_bC>R$lW7}7LO-10;9;>4OK2UJbMb7-~W`9Q@Fnswj03RvXT2IdA^$nCF;Mz|8 zIDk(S^t>ixTfTQFMWEQ@rvUOPPpooHLjrkUe_om?gbaqQ03rHxY;3D6Dr&KfNGfD`FK5hx% z8wHm`WbA<9&R7J}#?Kc6D50P&@0IP;NUscm$U%K207@y?xSZDj7BS-x*uV9g0Lmz6 zkP$M0zm@g_Nd3JQ+? z5VJ|D+vlSMQQ9~KfFBe@@+aS=3tN^UptD!W3cyba`rVhYS#5%bA`n>fLI9N%Oce2l z!0E@y2+T0@I|T_<6gd8nFr(&^z98`V=n-oGzbF{QC%t#xP>sJ^>vfoA1E89M7vIEe zXTatqDB;q@?zRAGDA;#E%DSCsfN$^e;hzOyszJslXOEMzn!aaJP(5k2e1tP3a8O4* zxw`!nQI6^XykV01{*kq=u6nXw<~z}c#XC=+deW(Q)Sn@*bOviL)sBkVZ-?s1?vgRJ zu+Dn2SL@TFg_@VYqN32vX>6^myPh2CYpOjaum1}~jlIYH7v=4ZOjg(N`IL7X)suQY zzv&<9$=tRhbxu3)R7NG?v;SxRR8MX(aMby=$7Tk?n|yx<*NJ(n|5_QlK1K2kt&APE zzUJ!R_XAlOyE}NK=um?rzG#`NUB~(!e+#-YHe<1!=l6zEsVnRBzHcn!m<6J5LjSW>V;%GXx?yo$SCza4rn05JtQ z!B(uk{%K{@q*bFsZa{*Bg0LaCJboDgc39T8n%D$S5dV zCS?~3zT=^}hVlJ;0mvy>&`QQ~=2YOWg=pns0VpWwW+q`J4Glw3lj=!h{UE`L0oTgwopFz7S z_(KTZ8h@v48`v%sz*!0gjFz#C zf$0UPNplCk6@UW;f&5IsJbOd@QPfT)FbopTQD9%nYv5b!98f}TzS%7RjuZs`HEsB- z4lewsTsF83;5-GLAIh2MFSmOrp~|FxH~=RKOys@hKJ^gv;FQu!ZivUy%lVpPa^I~ zwv05r2jDsd%3ZBk+JLus{X^P5N@k&LmB_)F-o zlqD??zzqtnd5BrB@JG0Fdq%6M2aw=Rfo*pwGrr@EdttwHP$UBIpr^{t`q=)6cqEWg|mvFujm?_ z`mj_0K@>F3vtU}8ALbx%*rZJwfM5z9@tvl!x6WyZz}VKW1rS0(3%;3y%9sxa5lAu! zN{56{3QD#3Aj7U}cuZC5Z}AvF7zN5lW$e)5b-hu-kIID^0B%vxkuS4Sj-J^8fue_M znE-B6(3~F%^vtkk9ReovO9c>4!9KpDOYtgaJR@e}^|&XH5JADZL;M5l{<+2|A;sj( zQvi_^XsSxt%-b^$Ah4}sLl%H23VLeFn7vcU6$D0}82Jo9GzBir)qd=j-G-+orj6e8#Z2n3Vu`R>{?e>Pl56FTv49e*EI-g zU7qu2$SWPo4GXnL4h#E%dJ5L5&8vlV_7sGe9ubvJJ31AW`-hhp)XKVh3dVFc)m~)( z&>7L-9rOQ-^7dx6RMWXsvGXMADY(A#H~m9TLCc1kI*(_6--L?&$wt3zoy9)iV<}e4 zR!7aqVK2f@{};?#UD4^gPLn0`@dvl=(gE+`ez-$#pgb2TOIYQx4c&2{T9gSOmICn> zDa$ikhI@lg{)*3ogg6R%@Ppr?rtQP?`F<8Sd;kznL7#>Exb^p!@CSx{$@-4~?ozP5 z5C8Ub^TnehUz(5j1mGS8D*R^_q3^XCU9|jtlY9UP6y&H%nBDL>?g*S+kR^co6ePCc zXZ&m_?ty??!nMzk@PLAS9r)zAqu~z_$c@}z03eY9t$Jd%q_FY{0x{dC6#{rjLEvL4 zd$VmG?t1MtzRMQ?Nfd0@!6#R5amND%QzzsL;1LB?&7^E`s5k~S>CmT$uaJ;T!3-M( ztAF`Qdj$4pD2f22P|!%nlBxQ&z|Z(ccb60cNTtAuNm%pUZ;erct%dqG0BIB~gaQ>Bywbd-bb$#BN*53g_FFGQZKLq5}r{IzlFd4mnxq|;NW)i9{{o`5E)9?kFRsj zB2XDQ|0jUw6b#`DCPH>z!R29@U$064FDNirz)yY=eU+nx0QOY?FDba`#E%m;xQqM! zZJyn!f`l9jtQ7nMqvnSpO7PIP{RJSGg2mP{)-I`PGXmq5uB!&{ih}h|`HXU@`#A(E zw`tV?cuheh-?a4IoDAGo_g24NJ-xpciN2v=W{iYYJQ_F#CG^~yB7nCPbmo)XBTlTx zzlXr~F7+Yd9R;`exh(3}=f6e?GluMH0N_0Z7Q-x9qv_$f2t@6l&=5c#1rx1gOqQgD zA7oC(%8dYgpkPmxf}K%r&d;F>7PCe*Wco5O&j&O};Sl z8v?!c3I$L|fzKD-&!w(^5`i!B$mWpng@T5IWX!@~lK}$vvrZ`i_)5W*A_+6@_Z3e+ z>3Mcl3jjqFoOmT?sjH9Sd#Otsjg|n4De%!$u+&|RahV=5qgnvpDCk=#Vdi~0;W-A| zi;|Tgp@ae>zR7>jo;vuIRdV@KD*&YwsCp^b#O0d!OJGs<&ej0RC{WnT+1P`L7U<8K z)KFIiKsf~?RisR-rm_VBj_X>r0q~syt1wIUV(T*8$ts)uQUDbcgm+Z1_mv%#P{JN| zvn?e2pkT}jzE^zKDt!cIc0bV$z)uQJwv)4*M&qCkIxj3r4v;z^wGC%y{c7X>T%d4kpMt`ktgm3MbKLP9kKxvS)C+=!OA!~Wn4 zn@#{~C}=O@AG%F#W}}4CO=~&>Fdarlp0lF)MhJ)3pF{OzgWWg!{tfD=Cyx(rAR64v zLIstD_LknYuC98rYrq}Rjn#7%2>OKh{2B5}XP(|9?FZ8x%TPV3@yoXs)>%(ZH8c<% z>lTd<>bc+gX05Edp1fnQOJ`xI19hWGRTFUs3%*uR&~#@5SMpnCFZ|KIcv_2l^o zeI1GGN?TMCP8jgp{;8hKob992uHWLp2tWE?FmH8XU^iW_jh=X}!?7V2{osB$NpB#v z?J_3cRg6a(#v3i_55SCq5quKkvBo8R&@H-qPX7S_%qfUh;j`@qSw$cae!oNj78Gc` zvS52&Ho1$yyzslKkYGuHBumUxm-HQsKxwgq8UQf`7T$6`7tVhb0%Ol@QU@TRVB9!4 zQ`57-AKYy|jvfd=O2H~Vrqn%Y6&?q8W6^vN02u|7+lg6I-xNH%DEoAl0OS<3?l~D|BfCB~jPsHrJ`rQ=> z#68(E3cxuEoEyp53x6H_axUJbJsN-`1+NbA5AG*<_>1JFQj0MF&QoyVIo~%iIVuM= zslkC40&t?>>Q)JB7C!zA0=MS)j)eqg3TE;J$L5A##v>5qdt@Ad3lzBbl(LCi)Au2e zy=aCAz(oogM$1{JxM_nBm}b{a8^9$BWV}*hu@CXwj{~`%1>iz~;;kiXzpn&ewA+>l z9Y}DcAl*m8GP+E{UnEy_Pw4`jg4222jE7*=+AurojFtR3>i0T ztqB0!DX?nGH$qr58h15x_pHwVT%kaGNX8zS&cm;)Cl#pzxJrSKDL;WnKSKjugMDk4 ziICtyf%{KOwq&`X8vnCQf$}fa?@Y+b>~CcWiEvQ9o7fxzNlU8V!@r9jzV!pv+p;z#9~kDmqL zM}a!u0nX8+K7R7;&b_S<2{$Qd$9u;gSxvwnC;C~k836n#aOPbNVVVs89vY5aIuk$u z1;yJXEP(AAhAvv&b?__zffT6oaj}oyUGWFjr|mxk5JW*Hzi9XRi@%@**QoomAt9K8 zk6WdTNq6Eg1bME*8~`B{9DBlhKMc;`{`U#xTjl}?rQj}KOH&v(^(JakR>r7#0KzEH zSZ2vm)UM(2$+2G=8UVOOLD@|?Gk<>r-`)lKnF6>?L6?3qc6*;|DQZ%5iN}0M2&bS` zCtk5mn|%j??}Y~p0Yp&HWwwO*cT zYqpLRbr-d}kIF*7)y-;MUG=2m;|9@~=Lbv?92ndD&yZI-_2au}cP%V-LG|Q^r%JW3 z&U*5%m9YgL2|lPO)cn?>R@Pll7O%f2iqP6nhG_g6<^Q6*y#|V6?W!iC`lz1#y7o8y zLp^!Vdy3BHjBW9#Bs{(DxBXK+dGz^JorkMOKSQ|x`u_p*R%Z=trMu~8%}#U!Wi`wd zF8B_;fr46DGQ0b;@l2i3=e*Xz4HQd3@9lj5cTdeil%QgMXgz>93RY;y*su+joe`+t zXXXX~@f5VZEoNHoItvi^Xx(EYfV&hNH0P(;xCF03VDgqi0o)$!1BYrIy(WRP+;{!%rx#RuS5wO#u)w}Bm`2KhyfHVsFACWPyPVor{ct5zl3lh>Pn8V*97Vk!#K;Yw;qq_k- zrl5i!gg0FpJ^+EGlV%$O$e`d09}Kiljq*WYoM(?c05U1C<_EjP4i7ttK%+4Q0(e4! z(>4os(6g;N0!?2z*YjA^OLv{Q#a( zP|2r$cIbT)uY6iHbl3p^*%bWX>-4gnP1d7?)LGR6cuqlJG4E6w|FRJR4Rw=DAmIfC z2S3S}rs15C2n_h(bP&Kx3dFqUV9BnrP6%k(Z#e`YhXPZ+#NWf^W*h>aI*dIGAeRDT zzPk5r1Kl75=G{>`0^k(|lX>4nqX*C25jeCwTL7;q$mB;_EjjmkD+04F-Z%;gZzwpd zs$eyT#^Qm4iD`$A0eDM+ly7~#KHdg@x7{q#KMvp>1$m|xd{NwdobY8yw-W%~Q*h_2 zHEXzgd>?cTHgEFf$o;>8|K!0S(N+U*%OK$!1vhyAd)d$RJrQuTmdOE>P%u}EpO=$mau9(XF3S`EN+}q{r$Xn= zYStQo)8hwQ0Vty&U60R_SDS*%!v@EG3ZR^VJ&*Yp*}+8ot#Rl=(kV#zPC@Dt37fId z3%{pbsxMjtsG#5_?@sTS7KnRgk2vhM0q}!@Wy>V&#{9@CbkPH=C)fh`Nx>Cc1zVAk zfJ>_zcCGCIR8nwlii}w)>i0qk?*nrMP({IPzDZ-R$P^s}`Um=+hJ;@f6saiKDWB}= z2<(qKY7d~Af|*D8WJ1UMX9!$>IsFWP8VZ{7B^sOb#^B!Z?6sZG0x;DiC(ey)=XHiiYczH{$th=84l3<~|Tw{VCqUFI`|BLeW zT1mR;EPKA`IjSd9Lw?gg)RQL{E!Rm54ybhhL*W@^Pg8M=*rmUdd{M=>*7KY`EYiA zU4*yG{6Ht|HrJOwKr3VSs4u7`|FSYxe}b2&*S%~rw8(YWhlRD~-&V$UaT%rkJ?LR? zge*-L*Nu4VjFx=UPTewf4q6#odh$2=*Ojr2W*X@f#rlV$C9XHjeye|98N04&f==5U z=i!LWHUA^yZM?8{xbBecCHQHTeNycP{AW+nM?=hAKA*4u8Qg7|wzFISW)yU=;`<(1 zbi*$)Gev?oB$!jsgTIUqx;0pc9&b0gIr;#wpdh9*pPBPO75CuP%iin@z>*ly_8998M9{@20SNQ&Xhn5e)!&xCIIJ6l_kCvd0dFV-Xnh%<(pWGZcJYBxB3<@6JF# zqhfnFfU^`_7$;*5kE!AALa${y5da)07}1Rv{uK$%D4|Q|){y|tQILIB!tUft%n`8O zl_LO03ZnbT*$8oYeFVO5^^1ap^A!9_7PBszqLv6;)jSprz=;A=37__`Z&@q?uXPM! z060@{t5V7;E6YO=sMn&;9RL?7kkm-o=av&q5g5_CL;x2lnAV1GZqq75jzDJXyRndP zi2`p;3pTTG)dK|NcOBvYxKL0sSi#I~yJ;d2F>`Y~09Ojk_`U{X-vsVPV1UoKy8tdz z(1JgVgOs1*p=$T2X7>QNQ4s1cX4iY&!{7YTNlyjfPQmsz{Li}H&KEUl?E=pPNVr0Q z-Y32!Lq1Fyfr`zC?gO|=K`TBOey0B{F#-qX&wK#DgMux+6wJt{3BH$njJhTQxJJR% zNtR5SQT~q=nK_>XaGe5mzQa{t+X|e}<7L=GNbvj@@JPb0?`wqTdYD{PBmwZEVCEbd zYajGxJ-Xk8{wwCOfY~m^eDrW3U18|c9^ZF7t zWW2c5f8=84`1*EKnMla?o!r1 zxA`Y@4R_C}J_Qg;!NbuCw#@r=B?6)wsqA2JqwPNReZ*ND};Ns%(5)z^*Fy#{N|NK@ZRPIkYpIR&H?kR}q zenh)ttF!Tlj`vRcFUs3HA@rN}9`zS0sHZ^3=QsUBPr+Yj{OrHg^&%?vKmR}br=Eh4 zYDXQP@1qP6w($KOTqowOe!rrz?x?~>@6a6=JofS@xF7D&8>oiwL2JLFDX#Y1Z|=zl z5KF-<{{8&!L4VvU|Db?<1`tPq`XN3uXT;Les7Z6Cwk`k=Pr=Y7a^_^x1^);R40<7e zyA-@CSFlg>Jzt=N2RpqBA>kecmm16XqPVOS1Ol2K{Q@9?f>!(G?8c|}%@Al|KIbcd z`xGQ*$=DpF(4z?K+0nfSzyk^{)swOt`wuG+IC7v+0EraD@)=SMs=IVSVC$f`Vn}#M zfnJa$Tf2Ct5(1+Zoc;zNi2{{53ie%`nT^0&>vbgn9#N2%B4w&gN}nTORWrO4Kr#h` z&MTOgTGNLJWNm6t1|Wrk?qz(Fm8YZe9E0|2GX#)I!Ge1-_ES3S14@wFUN47)Gz!%A zO4yPZ!z&0(i8=HgKsp7@`Mu=7uow?^l)coi0PvWCZd>_E@j)gBP(t|Y&OZQTP_Su~ z6}!2~Q4N8Nqn`zkNr7>dnC*R#gFBTfPK5u2geMf-=CgoTp9sJmG7~Bll>nYnP|;n+ z9`v}}05z%k-IY}UvM4yq_hcUXxbiUq=LTy20`QE2Xg-N?$+4Xo2rP835kNKt$M__7 z$Gz?FN0O^wS~Vm*r(kkx1$(z-kQ+*P@9$Cr-~|OufASrZJF4T~bm-9C^(OtbNc1HI z$3OE0WxAd4T9Qhr{Pa=AVNZzEf@2T(@A zfNZ{isO@JwkR16qM*!s%sD(?}r#JpKC?S4=cLzxLPJ#PK2`ftdju%0BXB_Vcpn?L2 zu@dI`YQuY!kkWp3CjdVvh-e^ZQ9rB1>VzS ztnsC8(-2s;XjpduH55GMFU6Jb``tw#Dz!!crdnj=`NUNzTdVIJj_S#PfwR;gfrC2g zNtZ)!L|@x3>4wU}YBsyp)m2X()2R_{z3*8M!C8yu{2B5}$7A;}?OhMuD^We!>(1O- zSZ6&c-rhnxHhD(_R1_|HGOt$FT~C%fj?$hr<#01ZV;j%^FUs31b&b%@nbvqEswclT z`Az?$o;2Dx&KQ-1woQNAI!i*n(~{5l%qWOjC}GD!ui~%Und*@PA;Fx257YV98*h#B(LKG% z*me*A3knK7rR>K%2Rz}aN5R^`04yok%eMr&?BQ;P5>#Jk4gnyh;CM$V8&`Q6ce=Ol zQg0{#2?gW$ddV~T5xDT_yFEz&QVO~U@^dJTFH1#Dx_jGM0}^Buxb^0zrsU_wAkZRq z$1nhL3M!t8nM$UH2Lc|3<23;&C>W3}VTmlq7J+tal(hg@QPAiCpVT|R3I89iy5tJr z6a`WIz=Wtd)wrW{lB3^nNU)|rj}JFi$3)klCZ#SsJOY3X1v#o#EHi!B4FoKn%@_&5 zmVzI{rL5hq)$I_-dfjCd06Pk*Ur3oap`Q@~g(p7>;4}q#d?Vg2PDk)BZlGS+Xh^W9 zz?Sa|cJ!snHI&eFj(iM&GZb|4hztZ2JgwCstbO1O}aE5Q=a-xABu9RjzoS+N9nSyfu-L}KP4EGUDw`nsTzy%71 z@G4_ye%DykB$ev70=P(lR*0A>nYGVFAZT*f1W33I`y2atY?%V!Dg{Sg ziP^M~3(ujyQp8D}sQ^4Eh}7fnxG|HrA>ekW)ieOtD7dpj%yN4h<4;K?@mm30rywLp z%Dk_fxr7ontA$L51WyW@@xj1~9d;`aaILV^2jE4)g5`V~#2^vwn;7tQ@eBYrC>Se~ zvmMMImsaPJ5X;6uUNUJ^F*a0&i??sD|uEJ*OBAU#pR zj+ktGgc7y|Uz`oVj{-kkeuS0#EL{Xz#v9E6aFc@R4K10TfM5#J`Nm0|^ZOh}37>Z?HUtntL6C-ob$gnJzcnHrsx1HzO2KYE3wZP- zi|Hug%jus22%{i>*MaYqLBAViXS-Lc%QyHg}S+)1P;4M_}KgON#*9reLlwKX#}l zt1SY#uEvW2gj2BRpp4Db7!i%YWHx>YfCvh*d&-%`=t;PTKeS_;r2rx+cz%^{4%n_W z9!(#%?X3W!D7f6ng2`8Bbwf=`z3;ya5~3*>bXv@Y)_-*o0ZnVu*4 zO@;PozcbrVJ=uBIZ~BLN@~@qi?#6vsj!MD?vwzz^)ss;R{d5|7`M4td;eWxr)yLZQ z)U~@i3-@5GEpy)l_ro1}1Fcq;GSi%kndpuiduZ2Y0I?Jdo+@V-k37f2jj7Xhwg8Bu z;Io5_y>ghh7$sa7+iWX&Yd{_U;0ZM1eN1 z>nlf%$6bK-Ehp{<@Q8wkethn<#<%^bN$;<>G6s-L!S@0&JNEvC0Rr;N&jgS{!MIjZ zW|n`mI|9lfZhIghl>&d>QL3z55{!V+vt4@uq*1WTk{?*yx*xv1)sK$f2Oyn-Is5>H zjzt4DpoAe!TI>h#n1Vhn`G`+)b^`?Vw#^hk1_g_{@&V2DYWQxwzT@%%NXVq1jabgQ zWNdIj38N}^m;iV}L8l>nE|6%UBLc?bLaVX(s3)jPtkWE1>?=CUiWZWKsuS1NE0C-M87~iuzEkJD- z0(zIn9tH4%g1vmbq{d9&Km^hUHaG_0B?TsYuk66^f-eX}MkWd%hl2i^Vz#xCQ@-kjpcYrmMW8-ZJ&hnNC*O+nv|G8X@72Od4# zu&Y7@$BZ^j;w z1NcJ0`AojC-mDe4255F>yaK>i3O2Xod-!i!iNBvG6f0Q)D54-HR?O}$>vsz^DXJzz z0L2vSpD$(0Y)Wy@LF&@Wry$`Q1*dNF;l^ghqfkP>|MV0w|+kup6J{)27%Sf&8^k1yD}Gm<9Yj-L(vlA()l9+d;y2 z3SxPO%>0Oy;V9v?{qEBMDkzxB4>#TPvcojN!^oq~L`cKkZEAtpx%XAG@A~genSbvMpJEHMK+p8qVM80N@t| z##baPy7>m&skE-ot|c zNGY)9`&z`rKEWWTQN3UQG75V7@Wm%DhU4KB(XRvn$SJU`uV6!OfAU35VvWv(K!SpT zHxJ}2ZPXb2MSj+JO(*~>3PzukGEd#*xhUc5i$P%kPEl}9RnGdDjPOHXWl5<3tSMM+ z&F6a;_QBr=^)jPxL4pkh?Une6?=EfRD8X=?>^1;f3SRx-=SAIqWr#p}h+#MYI|}x{ zma%zOD&YvoD|Np z-98c}EZFc~0FD$$qxb|DkM>g$(3JY$frRrEc<|$H9?yAKjX**3qp<*-C^-L^_X(}L z#SpN)JUtG8GXHp9+2m zEc)er7ZNT}&?JISdx$dnfSS}a+2kGo7Ygdnm$BZ}wzm=3Y%nPSfGY*byiZ7@SWcwT-43D+q|+-SjEF54_cV1C2x$pAblxNR?G!$&v8CGDh| z5h(z?C{X2<(Jzgjc$jz9lo|otpg_{bicR$PnSh$)y*@D&61*uWpJm7Cp1U~A>s zGypynxJO&EcY71IATYP}nsflZ6r}U{-f}aQ00j1I9{3o59|hig3!oisYVe=#*I;OZ%1VT$$mTf_0?-7H85 zp&+BVjGaE-1}DhV5(s)@jK2qe|ZjoND3aD;3s`Ni^dC%y}PL80*InO-)p=(j%yUv#rEk*^>jhJy9{uXOhG+-|6+pkjSR{@{_FquJztZ$a zt*fi2AoJH#k#E;vM+DuRfBqTrO6TSN?%Kw?pQodq0)vpsT3BaKL8ADaDE8fmPpI7A zlU`LT>+UJo@nDzs?UOEIM9U1S|BLeW=9WLzHtDKWgL(?|4S&-=^b|~ZVW1PmhD}Aq ze!T_1ZJotFpUIrtHb^J6%{Y9@T8YC?R5|eGz~J3a;?|s1D34 zRYKst*V0!XC5gpb;`?s^Nq zoF{n4lt98m3RYa;8#0t-&O_I*Bur5XAc=z2cPv@cyVLO}eY)C`G60V#@a69*i`Dxv zP}El~2arrb^HeGSmDqGZO?nhpB!CnOx*JH?`mV>1BXG_0)^|uqr68rPoNbz(h`)KR zj<&1-kVZkkV>v6`z8a6eys?}213)?jj{NN2JB4!m1L}XS+fM+GDHtT>E5*ZG;9hyH zU-<&apg@z)^7?2#6TdpM>xEWALM8j*SL)_#Q3c=$1B#*E8j313l+)euf zY9Jw-f+{UJ^Vjv!L>kJg*~*DT=Y6nxB;u}_8v@wA7$sOj|qyr95j5?=$Iva}IO zSh})H0{|~6cyva}V)Zgi5s3E66F?3HdX+ME@ypZs2=orU*$@(PDR2=f*f~)O?%eYm zaHJ7{R}@UNl(L;IVh*5$mrm0f19(kAhP9kYhpoiDfqq5pn*ex2L0$siGsSQp9*=x} z@3jElQV^17!S)-t;r^9|%(p2dyrW<#uQC*hscX?S$cqj)1Mr@LlHGEa_4WXYS)}s}>Da zS^+4aAiues=`Nn+hMF|}+)DuzQn1@h%yuryk|HqWj%RB~_(H+b5&Rggu{tjh7(U)a z1;AGd3QkCwZf;a20xL&NY6GB%0`2o+=Kj2C5(0sqZQ24Trl3`O1-pFyl?MVx4!sn> zHwvowo&Z-b+UX;(BGIEAB$QC_V4sA&KexIW0s$I(+XE=2Kz$VNKJ32nFale;vJL>s zD0n|b&ZgeCZ;rrQ1Er1t$|+b`AZ3lsTHtQ0XX%*&_)bBaz6z%H&Tkn?SX$`X2@)zO zkc7%u|H^3GlUB8QM`r*(D0pCj=eTQ^AfMM2jjISbw`#~&w+j~R6bP)&i! zFg{8#Wat{yq@Z}+9sp`6$WNEEp=*2K@7CKT&3ghc9Wkh#QX3_ueS6k!H5#^K*WSGy zdLI_E8|l4Hp?Wg^!YuW_K^^sE;ex)R^*@`8L1kg{AG2#+UG-$_pvKxa%{!DJ=&C&T z&yZI-gVrwA-aF845vnKEde5tcb=H$tO=O}g>QCFCqVUB?gIZa4J-I;Pr(Nb~eILn2y`McEJc= z|6ed~^`4HsbnESYjlXV>b?ZA2?uV1~1`_cV>m5&>!b3!6%L@cxM#00ma%R2V1CRJP zJ`5WK3FZ{&o|Ur2iJgz2A3@PN%fSFFD2QAxVG(97as({3k^;v~d|kha)*=K{ zcXuBOKukgGco~ba+~$ISf9re!NGKSXEM<4E9K#)S?sJ1QAVEq&Grj@r$ch@=!+m-D z$zcFw6twIrWyj}Uz@K6Df6dVZAgADGdl^d&n2g_3=MQw%0-&IvQ&T=Pv1-jBbkUB5 zc>=Ja;5}d7^5MNjAp-4>2MmXVQxw>F^8*vq?v6&_nDqDv0M-=5^69FRM#bO(&Gi!f zkpOHcNNOQt?cR5?MhQc_I*$TiOF@;7n2oM@)f$1!TOR~qN5S}wV%E+usu%&saY3UY z;WPzi{J8aQ3w7~V)w&aWVclPKj6DU8d}Zv+l*uDd!Urw=u>j6ckP#zh2aLg3)% zcH;n?rJxmGtUIMwPCf$Wr8xp{pdjy~ge~4G$Dd&ugS|zNaE^l3pJgm`zNrIBXdkp+ z8-ODPr8DKMjmiRi^I7(rqyykQ1y7DC*p4Z~d!vMsO)Yc*I8opuma&@_YB>lDPsel}A8t`wYJCt;2YoEjoJ9 z^HV9)_%hEGC3OFgA%LqC7#@(Yz@80p56+b8%Tpo2gMxkhkl8?`P`uO9t5bWX0k}p% zd8&jxxoJ|4niTV0XF7oE6x`-xN?AR3??<4?v*!8$JSni_dvG?;xQ_cwU9_GHz>9+A zd|8R|p>8)&!uzXNXF$RY3R*f#*y}#`(hz76yLTo4ZwjvSJ+=C&*2h}{+0UFX3xE#= z$@S!HU-J!>DB;P?ma_r)Qea^!WdWY^a2M$6gU{&Hpr98&(KR#Gb`@%p_5DT$00JpE z>1@gLJM6<3?H`{efFKGs)|0Xe54)d13C+x$=R-m;1xMENtbnlv}&rvM@;u$RkONcY|N$@e}sVJRd;QLwd%ge4^I5u=14E&F8vqA5t?+eL(@ zwZffBQ@*WR4j_htYyB1MmHpZRR8MYEjo$b-sH2`VS=mdF0)v9++yda~2R{h~`3>(4?(p>0}Rt*pDA zJU>CMU9|A1GNPS6#{U=P?X5{I*A7?up@izms{cp-P)}YtIZvnl&9LsMBs~4;ckG|) z$$-9LIt@Km&q26<{{Mh^s}rTFx^E;m4A31nc9H!ixF7D&8>m^7f-M+YP=G*u_}a|? zVksCigFhde=;PT&`y@lQ0EnaD6yIHP@I|wZC}H8f?*fRYK&7)4yWY(O|MKT`xw{n- z?oyzaB4&^8MyjKPUF&SO0k}uOt{Dn8DnSKzlv3E zJ_WZz`MHKakA)(ze^|Ky9#D|-LCh}ZZ^9p|+6!ZMLP8=1G4uKCyPmU`qlD^TwnhLR zQebQ&W{Wo-wnL!h?iITLBvJ5aJf9HQGi@vaMNL$919(KiN+~~})#f>V?PNbL6F@Qr z&-`V~?R%;jO6dA7&KMF>DA;4oAE>Iv_z9fkW4i}HDh0!hrEK!pGF6mt-D|~O0BIET z;?wn<=SGVVh}$q^AAocUdPZ5Y*okf1A~0!kg#aE?pu?w>c=_D$Mqq_b{C-Htpumfd zfZkO4g@4l-H>?i;$fTh8Kshtc>W({=`nFwa0^kV+)5;{Q_rni(wvqMIeg^?Or6Bs6 zgl+WM&;nhq(eMa>=M?O=^uRl1=(q<%JS9*jOD0kV}D@m7E3qtij^|`))5g0pJw{pZiGJ zn5AcZkV3(tW$^7H-lytY$W#$0hQ{Z%&Zwp#V6($o4&Vy~pLox~i+KG#2*@w4PyqN!fexSW(z1;*e#}g} zKhO$55d{T&X2#LZ#~4b`99=GeVhX14n%Kp;Q7i&QmUm7;!Z!-C`M&F!d2{eZdrh>p z22eslkK6njp8v!n(Sv@iv;j~`!K?GU|NZ%7J=CO)l7Y4W$|y+gs9?%hjPZXuyKjX6 z$|=~lPt43&w+<-bk|N#?624QgS|VYCL!I%r#woqCrvX$@&?Q;MjyBqogc82xtg;92 zgMx5=mV$oQEx6i?Z#DP~fS(kk@s6=W`P;joge&JN1W-xAOC1G!Q)%viz_E96XCa}A zf?Jw$HaxBqe(m;fv~~dSi-NdP344{+0ryP|4_bB(Ks5z_EnXkBP8I)I6Pv0z0;r*& z72ho?cCKm;x`s2^r2;S=NyaCif0DECW3InYJ*jeZtUDxdP)9x4TH9;flbwB@qq1;V z*|=I)S3Oyi{!lch{YJbpwpyb7XUHoZEBPSpuZL(0n+g9#d3*cEx6w&WwY5U^;)+g<0)d4wjnZ&)|tt=qRYPJ3!&Cm*yjc1VZc=wDaH zF4(kMXPupk1zO^o{QuOyEOF)YnJ3PO)tT$lR~fO@9e;=Y3*&8s(}1TAFG7!os!gfF zg`K32hV&bjtl8_lY6Ql%boPTkxfunCy1Z^#cD^10YbI{K3Ba6!?3;4dW7|U9joEkz zAOHykIfM9~o2{nKLJ2F?)&&8OQlQsG#`-Snfyd_`PaF~qKt@4AC9mU+6FgBuqs!j~ zAg7>gH$R-oRy+!Uxw&y6kf5MoPoS9fl9(AGU>9{N6o3^43l>S4P1pr31lr$P9tPkP z1wnjhF6GRX`3QJQ)ouZ>rr;t!ogiD&LWaPR`K1D|p2eKA1>YvajA=)TGjF%Oe1sreJ!Gn7NcKwMC%kH`Pc0_7nst z^SvGqA9hCI>a$V-oT0$LLdp!*&c)^6nm%z+kZ_iQH-%Crc{m>br@J0F9Sy*Ng6c>K zYtp#@|CN%4uZ#h3j)KI_Qa0nPCZ4ZiK5)Pt0FD$CY`0{Fdwmw7ixydY6To>2>@;O; zo$A711Xg=R#6p4-1>t-qv-ov3{&dv8CXNH(OhN7zzQW?27T0f!c6NMStGE=GwL2BxKJ>nvxJFP zMNC1Ue?xf!09Oh|u9mSaZAQf*(9(JFeE^p!xLPb@`GUvdQZ3N=27N-KZK|#yQQr5H8F?$4l z`1Vf&;7!4n_WZQJQxjDX$XHe^03Ql2?z3e5F8^bK%RGmebV%@}V7ofsWN6;&(J0|+ zs{AnkKMGnT@qG=FBBBszzhy}VfSVMY^RQ$WF6d++a9VpnCIEj5OkYV^l<$X62$-dP z5kLS1Iea(zeTP->;NS9*;ZGnT@L#|QF^k_l?HfvXv|j!cKoA9Io|&^3_5%|U=&rOZ z3qUXhdtQp!*kIlF2*iFF@C-l*1q;JvY?y-K&!1mPxMw`_4ph}h@_x~KgfnT6m3V~Ya_c{08td^ zG?Oxw2=!D1dbeEq3P3ak?>9);*D2xnt8(jt0j~kXP>{V*!Y1Eo9fx`f`UkH5{5Pnh zr(o*Z8{=PVHJYwXRZ4)c{h#+N1?M6|ka-M>-Z-n*6^_0?u4yh1$%9g2R_KlBtd={Hk+UE26_XppF?-t7Kvs)+z$`v4P?+&$_#sMd5yp& zmwE*NA}Ls&CTF5P(u)W*cYZ2>hZKZNlChdXcTWVQ_gxDi;SmMnXDe97TwPNHKDXTb z6+jdPnfw|aE%}9eQZ2^n6ak2);0}MFj@aeY5hV<4*Ps|c3^ zh@+sxBMDpl>FXv0T)U{01Bjcz%O~WD1h!$=UF`+1aQ`;{&#T2k?S| z_Pk{sNFjLA!$zCSs#-cgfcGW9m)#Yl8S| z3KDrQlw3Ou7d~@0s?-ONPJthv+ID?Y93Gk*k(Mlg3<_ojNSUiq%1(3*Q9IlkK*Ade zj*V8ZW6^8JAaHlYmWBY{QlQDl!8$1};!!HKW;%@kyrW?Eb~(HJ{0x4Dxt7{M3BY>_ zBHR_s(DSMkHK|HHNdTD?#5A*E^-jty5t#eYtuZ8IQBd7i&KfKX3rAo`{#IoG*%aKl zV$DpueaGYTO-uEf0LY=>0iQA;eyzY4y?$>K6#yS7Sn4BTlF5nqHEhCxWC7$-pwU{v zzOU9>j;`T=+NGwDkVipLwUj;V;q?@O$g5_}0DPpNhR;{&ILbQ_fgiiaHV5#Df?Jjn zwsF!gJWry_n`SKle5PR2d^tPOEpIML*c9+e0ADDWVklwtwR(sV_@%hm5)$$$5d9Rh zdN&`2B49AdtQCL)3Qio8v4{@=xaZ)&7K7FR3MrV+CmLnn=!Z+I$%#$d0QgFQ?7NiZ zopr-MyQlBI5I_+H8=K2mz2=c^&^5T8_f&<1VhRRbm9T;}c3KE%rtDAyP(nfd-Tdq^ zhY42@=(f?YEr3!AN?qkFJ=71sFEtNo-3~w*1xf>~SxX0xz9=E)_Im-8Q=o3c=RRd< z;##b;t6zIasGwl}TQR#+;jjuN1bFZ30HBhB%05!|+1m}j!dd8#?+BoZf}$cBE8X>A zDN1OfXweBkH3f}&O4x=*&!!+?&?ZFy-zca*Q^rCwF3mvTlg(-EQ)Ir9(XN zD8-iNrdd78~uWDhP_2geO zncJQ3U5$#uhvjLtvhI3vU;XWR^+q%pi|FSK>HkJ~dv~pSsyBPzr3I*-{J8Nq{X;$Z zO}s(>QHR5GQAsG@^xM{167qU-wQ`JpH_eX*2&-@Y516;Qys4IfwqsNLeB8d!djQ-I zN9hgpZHf&mdDZ#>x~GG#SPTSki~d>NOF680=n8xBBDLH)%NHa4~eo}}{DAyWVf z3PP94SpDD{{E{@K$#qRgu%RG*B0szLLIQs0`80FC764lc68Xj$y-zmyp8=e16SV=@ zQPA{Tw`pp5rF4|gj_Lm;kItI+^X zQINt%aqrJ?!W}XeUg-jGq~OU`G5g+W623K-9J;Ct38yItZ6aZ_KNaC>uiS5^2*4Q% z+Ba0NKJ!{+qH8EDnxF^3i2|P`a<*gU+@lEOooS~J;4B5N`43xVi^KI1*gPs*0L~Od z@p%&!N=~~GsC@5d014+Pu=J3y8xzjrnatIF4~zkDo`Mg&551nR;dhiUKr((T02c~Q z@ZOK~dV9_yu-2e81K>)5K7TX(?pcZd({X##1#p3a(h}ZBq<8QKN-%EdZ3qc&6kNV8 zXHCX5!|!e8Klc~`aHn9jo1ASuQ-$}KvvD^X2f%}Z<9yn%(TqL#AJ;QWbv%HJ6rAGq z=iBWNh%(I)fENXwlWf=# z{ZZ-&Ec|$53M5>kU}Fc~F{WR141pNSgHr)`Q!sw8g4w@YgdYM5yJ^z^_)wrcgKy6& zyEqdim^!sL2H;D<><|eXdcM(S1YFvE5WsZ`R_@{_x-M$a7J+(3x28kF4GPx0;WL$- z2H_{)0nMW`0QgZbX&avru&^1vHEwJ+o(bS41tkVj_WbkU1E@(u_jH^Ez@LJBysKe< zh&q0CNbQy-fB*_Mui~RtP2b_0ueGk92_ytkkey-8mhOIof7tz39heQ^76oniu8wyu zi_6e840|(m4uBvEGWZdP2H(S?5m?uu?OXuC6!`IPTycRZ{>QDKmo0$X6cn1snE$2N z#wa23;LUlE5JEu@Cw^MP2u)oC3iltF58w_3ZK4%y-;1Y)2vmekTmT@H0(-s;^}(8D zgAh>u(sm($yA({Cu3#Os&YVYJ!Ok}VxJN-MKh4QYQ{@f%Uav8yKmH1 zBVeO^Xfc5M6rALH{dF6(4*z87?Vq{?KsW{QPbF+gOoMkQVfMf-O94bs@UBYC)W<1D zp?Y$1`KtAQgF5QThb_u~i(Be}=r$F}+t` zuk2OMN>op-8@{d<)>%*fb!Ke0M9(j%C=5QozE;*Va2Dl#{&>KjLA4Izs0S0x32r0(eNl zoI`xn>XRXUpk7^hX%i$oqF^^40d?EGUIQfzw%WcKKokYx`}qiH)g0VG*Lv94EdZh^ zSi#4X0+SPQX{8j`Vk>|c3T*ktqq};SGR%hV@NM@>>*)qWp1$u3w^1LP5#?{Q%M^(4Hb^OAA&$M4(sMzR;AL;V zUb1ilepzigN5dMx2MUyq@$I`W*-KEu@->A5$fdw=hM3K+TCg91iRwXONXVlgxRHcK z6qi3nU}0NJ34o6jw7$u^4=-16gnSB28pv7fq<;7dBprQ30ib|_r5j~TjkVl| z5}vm;wgFH`LGW-HTfY27JOcX{ceVxam4d^smKP2KbBz&jfa5E`;a$y1Pkcr!8a|S>S1z~&n-j}jFcwqTnqxnt% zeo!#szJg7-xk?#bgU`yIX94`AU?ty>V)1QN++n|cTaf^MQ81Oy4Xn&bC`Ac*U++0X zg5@YOKH0@o%&d%i&qeiQMT75`{swi_lV9tt5{4|=Cck@;V4|@9_FmLtDF9Qq;-;dToD`OW_hu--6g2~F*JW)%LuH7wdw9NJBzqbN?4Y;*)1dtb&F=P~Zp2$RW8P`Kg2zs0(aP9K z-G8HhTp4@j{YL#?Lzdr0OI)-5pZbR-uKd#*oAFHl?D}k9#LP5)hy4TNZCreFxPkhY zKqd5O7q%;~ll zfw8gi!H}S!;75=Rb7_-+XEM*e zh_rXR3kfGFkZzK(w?_UW5OC8ny9dCYg0D3aw(HQ?t_b8bVPOCqC>YH9B78)B41!XaO`yBJnVgwfKx*P)u zZWKJ`Prl-v<8fD8{HdL>0Ng1E;AfgBXRU0G629~q_ZWZ&1?{fzeeq(B;mT-=QR^oF zE>hsXNy3h1FAYTrMr|?#aEXFj`f_&qNDUs=x?t%Y2ML!cuoNqp&$vYmP{QqYd*cCk zQm~y5U@kw|4bMI;Z)lhR;0gsB?(xHD{9AWM3Da)0dje9<2YeG?(!8U;hMBrLq>HttVZ|9D>#0B;I@ZIQBS>%;ig*tB%=GXOpm zEa9gJ-JjM4e@ZELJ3a^COTn&439EQxg~#&z`g|0?bqX5q<7+;zrQ&yu$aO))omfkSh=&7{A{3Et*fi2Kw*$5vhTcUDS}^2cm5gj zN@ve*9lejHKfa=#f@&Z0T3BaKL1B!wXh+5C!KmD~4&PNP>nQhmRrdCQST8u;1|E`pLzwW9?hKuS z@V)6=>m92!J)bQeD>_s_~-xLT<@=t@Q8x;Q~B~1trnM2!mO`*ivUDX@S?<;pC6V! z3xT3dM#TW4DVTXu#tI(Y!;ibb9jYY&Vkj6rPr@f+Zp7uGdewUY#8S}rl7zjCt!jvx zG{eoW6cQd&;LH0t52j7PO`4Q-pbWqh3KV=iGJWw#JOR*s5bt0VGgRpAQst96bY%sn&GytAvE76ewFO*w`s=@Gx)U zyZu!F5-C{xgU>$IF6xgy*269ns{tfY(EXv5T^l?<4}qM5Hs1g|qhR+k3H!Y5RVe~H zyxt4oIRzhs_+CyWO~xV+pyc-*5|Sy{;H_X@8ixiT&_2YX2EYpn+&{|LkIbI|~^;$I70(l6f%PTMpG@R5Q-KH+PeX|`A>jK) z(HcMj1>WvrHlSxeT&DN(UeE?WAq89Qq)dOu?0zU=O+|lI0ADGv?j>V`!nWa8`gpra z0TfY?8p5}|TeiLxN|>1ztp*9j6zox!v1#3|;rFEvLmk@!D50QVl$0GE+kZbwX!d8=m>iU`#g6asAZ+rcVeJ8wQDDJeu#5`lPDBY?$JYp;oC4EjHY`Rv6mN!h-aM)U zBverF^MH)4StqhV3H_!zbOcaI!4|%opxdg6n-GZgSlJ0c6$R7zVl=m?{RJ64@Qs2XzB-|4=ai-h#HmDdfrRfA*eNMksdmi=1hfr~s{^Q^ zAk%$6wOv3c)q0De+XULa=2pVV88K-A-60sNvM zAXduaZBDo&V7of3J0w`@kdfzMNBN|+ZWonMJz0Ie!N9*k9rfh=C)ag5dGsknW#Ngw zjcQ$8_2kc^WxA(r9YYb6PgMFdSc$Hz<6AuQ;EyfH1U`@eWQ@+und9yJn zVO~=6p#a1b1oAU}-Y;!~r?!0r(hUg^Lcb=58R}f&AUbeaG>DvHaXK%n~VEBZ{!>40ysrM9G@onW8E(N-qvYE z8xa6U3XJ(SU#+AQs?jw>Pkt|e(-Z`>mNC726Fm6wt&^V~B%GljC{o6pld5o8vex#1 zJ^&{QZaCVo-Zxe7epD>l*Z{y;3e?~5Z4fio97osi;6vvz0Gui4J%)ED-)-Io0W*hB z0ysxO$SVn3aWx6o0Kd#a#zMk*3c4lAneoeVJQ#SyUCIEsP@vD>(Bss{KSWL1dvd-Z z09OhQyYo(^51a8j&z*@qjR0JrAd=7hP#ZG|KQ*Fsiv{3D!56-6^^I2IaMYw0FYb04`IYswHCwbW^XRCRu7kPJ#qa3MOUqrL@(`_&;qXIzAb| z6$%z_wPDj|pTl2K`)(_y0JuuQku+;|*R;JEYSQ$ep;G~P{R8-G_G!UPJnS3T?wbIv zQP3e>%2aed;a;e(o1>>ef;R=0UVIs9_z5S}q{rJ&8w2p6z+kwHRW)fj6#>J!Yo`P7 zrC@q}DN7sK)B*u*Tdf%Yu2V23)tZe<>8FCg^_+S$0o5E4QuXg5T`UMb>QBe2|K=OO@iDLC+k zzg5;Gy+mNT-`K?f?oqH#Dr3qKSMj20tMe_F00^TXE?LfAZTW%+PV)8A1#q7NGrqLE zX^aK_LCH3{wiFV=DHze4?^ifeB@bQ0o3?wG0f?ZW37^Ck(0hjz)suTNgEssP>Zm8z zeT&moSARYfm4%l#-L7?Y)swG%x``Z;&PWkVtPJ@xcG3TvhI3vd^dMdwab&Hhz=cd@82kI@3gPQddo_;TtVZLEyw<* zf2b!@rVr5{(>G!?DhYl6pZ!xk8DDWm|7!OQUl7)3zk}<1r99d!fk*bPZ=N7@Glzr$EtE%CxrzTtr}A zcE_Cn5-7M~BV}dhUGdVvO=dX)cuGMLKlx&r?tMH6CD95rhlE55_GfqNn01qDI;V{QCvDSm}99(`mVfD{TIHQuwn3Qm5IF%7%&N(5TGX}2FhDg`F|)~M+;BmjZrh<5^bMZrm4?HL#r;BTCphwlMM zNTZ-EflpGX*@~YUpHeLj0(eb9&Mqml3~v4iHEH>U35NirQ;=39W@CoWKZ!u}`nHDw zWKa-uPQv13pEMCjZ<;B9Hxx)?W$a_wKHN9)%h&q|B)p{{k#7s?sCys38CGrDV+r6L z1^4)4h86elKuz*&Wq1_8dkQSg2lFS z_N`_sp7efM)=UB*mx35wDf^VM0hd2_aG60__=)||~^DBIygh2KJJvo5S6dd3amB(z;c!R*jlEw-EUnsa)ZNoY& zdiw=|smqcDkWazemU5Q+t?gG+St zRrgU>BRc?JDY!LG${xpj!SB!7`fA4k6j5No*QL049mfBMGeK_zP)tFib#gZ8{)`pq z8itPYIspkK6f_vj*Ky|_#J@m=$9J6sP)b2hzQydll0mpLWB3w7djMq=DDzDO`mY>a z4>hUL`j!p=$|-Q;HE|kKYJ)&$<2M4RpdjRlg8eF!;4#+79zLfap^}33=lF7;ar<%M zv+~ehM*vk6oI1;U$F&OaL%?F##M1z(DVVM)W4nv{8=-6XJhj~!0N*IM6)$5JnSPcC zROe?4;5!9Ae1=RyWd{iYCq4X~AfbkWDQ6_CZSNHPT)Jj>;4FY26nIRLv6TZV@qlKj z(IjU8KPmXc?Zm7w%<3n4s?>HFDhur=cB*xC)su79zZE5Zit|8l;L^^2hP={Az0yXn zZ>Re|P(3L#?@|lvtS5sl4~VSJ1Ybr);re&#wX*JdviXZ+dT*+SS|RFI*7e^gZ|_5s z$9kQ7Cg-AhQe6I<{-K^U4>H%ke=@=mm4v-2e%m@rLOw^=xYc9*=vMa!BOLr+FmLsX z_9G3VT*n+lD`W5Zzx4b2ejqDjo4oEU${#j03oUbPl9pO4=*rlFR2xxq)%p7nc{Vq# zF2dUtcP~OzROUJet&BC1zpf?!url^gxm;uuc`6evauqess5SqzGWO%s9(vbPmTW@k z>A^R3Bi_0a2dUntFCEXJm9ff)f1`g~8Jlo=i++Mi)-bfh)%*Xce^}zm|G$G~KhmF^ znqq~R{*m8d|G;<~@6Q`%5If@RWAtdq9De;K{AZ8SM}wGe^QNrdC=CI_ZTtKI9HXE< z-}?N_*ibyuwkY2y0Du(*4|!Fgd%zf%gDqP$4+LOM!M!puo8EI#1ZvXMg)aplrXanQ zj5W&GAVuI>clTS6AfaF@AHYm0N;XG8*KunQ04W7de1YYXTdU3^(8z66FaQ|^i};ZY zpLN#Ycbw{;%C`Z?DVW_-%FKN84x@yfZC?mLLBYfUVs^S=7Ji!@rF}UB5^N~Ar6Xej z2kwtW3HPhE-vMAtLBvHFYoaRZia@7hqEG;K6x8rur)_V>mLM=CMCmSo;}o>!yWAS; zJUEJgiE4rXPEb(#QpUP_dhJBONW3B7QxtSLCuXPSzIcs*no(>xBsfxVDpkfp2KeC- zo^m6H2mq%kFtoN|tDMuOp@jHe%N_tYLqT>1?{&HwG!KDWUj{@1aH1f^Rl%e^m*Ve3 z#raABoTcE|Bsnu1BU+CVz9~gMgal^__Ge4j1KW0c5xAvw{1Je26pWuOW^thn@SMcW z^A<({I8T9>x|F>)cE881%Mv~E`0m?7Eb4kQIjIpj(Q2; zCI#8oq)el8d?N(z_E1U%;7`HAhI}o0mxD_Xxb2)QfB*`t_R5&om+|=NeZ9#26(j^w z@HRrmjBRv+Q9|qf+tL8sqF}y(6>HJQY9In5TkE|B5JZ8+M{A}n*1-e%UWb*_0R&U< zSR!W+$DPCdybApn0=P|q(r6oY?Q;WM_@B|aoB;_T6xeQ&GaJjuMd%uuMsIrq;0^^B zw(u4E>Jhl};+L<%TL7UHI7Eus!ZVZFqlEFxo4o^Ymx80IVs;|>S2hBnEnW)X9tA6Q z^JUrb=aUgI8gb=4B!p2A!@ofH4&^LFV1?VxOaS*OaGfP(iPvU@B5+z^m<1r5g0Ttw z70&qdT?EFQZ=DSwf`Xy_6fO8AFpc|;6szxE)4-e=KRL1ww?LPXp zIs&Q3z6c$NR_C|$ ztpE^5LG!6{cJa_5dvwu0g{1X9^F4>F63JR1N$FAc=w z@Qi|oabou7-Goah;qboj?~w4Ef>Cl_mgF8cLtsdfO$~r#3Oat0FlUv>4G4^!wdeE-&f&*Qp`*Osq`wxrzM`OySjG;%81VolXe^yuA3z!f9o9%#lS8@q&CqF7 zuLb~KQ}CKEid)e5S~N=NF#d}G(ka-=kH>50WEh9Q$NC`+At8eTU2DE5t~9y^flet$ z8v%Gj!QsVXw)x6qe*}sOrzrt=OF>MIgy~&*h5PDSZ|l$)z&i@sua+?VP5$`3?eXX= z0lcSRiLsnLZK}KgHEF~MKV?YBq+m*S1#7(cq6mS+tNWV($fDrW6$Nw5cEyE{`{+q3 z0J13<87E<*8oS_6sZ2$+DS#Xbc4dm$wksDVqb5m`-U{FY1s$`ctRVLz?%Z3^-Mbki zo%x_zJ;H7WgwVG95sDJbCMU{)SC(h=}G+oC0a zPZW&q!UvLbPmM?5q*%hID2Bz&RZ${iVdUuGYLz?%D;TLZ|a zU?HCsZ<5ez1_Bx5Mz#S^KtT{6n$sBZ_!a^d2K7||6jHFZ89(=S`gYu;DoKI>zEY4A zA!e$cTDX5@{E)M1kWfT{i7OvS{w(!EO&Z^GU0VRf6nKo1u*XSJst8p7(rgEygn~Rh zIrFP;f{VA5=|2QeN`cWVKDm0F?NyYJvo@wZB$QF`I-egv=w>zvfgx6o9RQS5@La=& zy)&x7H{UeZ6&(RoP*B#0?_8~8^A07f)E?XkKqUnRe9&R%HkWS*yq;esfGP^=wU@DP z<{d{NF!)eJXGo}~U<%)pdEK2FeFWS?OVR66THFrRlcoQU{-K^c zI)91&%ykuuQAv2S>UZp)>dAnfA^P_$s}%^3ul^61x4Pl(9tJT+{qYdddC`(Va6cTS zH;|d0H4Axaf`1g6zUe<0z%dG3dq~-Q^T_w;7TwgSTmV)Sc=Gvt8_Z%85E$weJ_Hi1 zDcCNOF!goeX$T}1D~19PQ?Q&*u0Hufe>4JX4CfC6AfdqLsDur18i;>(99()22Oy;& zjlZn+@OK-D5=vGU2tY=GKA#~KJ5d9_KMzO_)r15&1#xN$=Gr<1f2{pfgh)x5WH?!QgNQ1XAx!*8y;nf@4ki zRL_PzEf9DxtkUpFG#Rquv(;V$WKP0pLu*b6$0~KN2__ zfl-|%j0JFxf?geEtm}}@IN|k+mJGmo3f`fzLu2OS*RR5CU3;?h_#4A_dp;6-?LnAnq8u*<;H@ z0GBA}dqBb_i$a&6gxKIwlK@<%;ME*C`#iAo4Fm$T>Q4sXNr5^4SnK(VG7-2nE=~Yf zC~&fuuv_-QcAJ44Bm6Db5fN21( zQDDy3KlHDe*#sq2iAx0FO+gAz2t0i93Ia>Ig&9MF4+TqaikZ%%Ex4{fAeT-D;7h^8 z8X5Bme>eywoT!>J1Hg3(Ecv9J;b*q{A+WDQx0wKLP~fA&hq=zjl_KEqI8Ok66f9^h zVOtL7ND#>G9yALQZc?ym0N-gTXL3ITN>3g!0pL%;S0fu%ZR)!RfeC6;X9EbJz}A>g z+KEi@M4*|h?HmAs6zt-AIgPj!Q;xt=lPm$;qTsNTlsVMgos2+36Ysf@5JbUizHsIH zET1z7bnCfq9)Ms9ECraEF5Tjd}N>MpttLN?Q0VgoIEEK75t4H0Mok5f~q3z6iiw3T9m4hxaY) z8IM56&SMt?xJSX$f@3V6AM%4h@bP9#0EAJH%V)iv+wwo%>508x3E(~j_xN+^`*wHS zskHl&`%*{vpI~owsaR1|Wh0A14_*dS>iqR8Jm`@!Ie=sH2{Ib8w)@ z#HV~5Dhm~FuGPA_>dE6N=_1AGA-M=T9P;@y{Hs2T)7D%5ZEp)yPiENr*1|gL$>ILy zqRTlSTcDy)eEE89QMK8XOex_wm?D@1rB_FvV)$5xZkr^`0lL$qA6I#=K^h7-wpR9Wpy?(1rS5Q zYQC}DDYu>`=u>*VzSTAWu@rpLkg%2NBHZ<~q-%x%9#b%=yOcGXdprpxeE9CU9TJ{U z;L2ZN`rDb|-&&{n<~snyQIHxeVaL6*kE4WjJ&eo%#8WUZ-G)8w_GT*r4Q4dk2_S)j zay|$p84}qNfud6>0(eTnC<{3oG}WURfl^fub4W;}U~LNt+f!Jij6f^pExQ0DQ6S?Z z(E|ow!jo1uoYmV6;28z#{P2PCQ-*Fs370&S_5gTJf#!IA&S&LBJU6b%{O1Blrl7)9 z$_})5D?$lH+86dh!i#?Zb$=C<~DY)8GY5H6MuPCrw%tvvj6tqE2(yBgx020zDXs}tv zy4a~NL?CSFhJyfJQ{ZVOWzoeQ@N?<@{NaZHq*Jhds+j3{ZMcjQDxGTtkU@dTG&yth znu`}>rM8Va3<+;2*w{?QMqav#Z;d{~?2iC=OTnO2z9KWocP(mC$03U?0lcGN+y=g0 zvi&RkzOZ6j&!Yg|Q_zJ!TidrW$1i%pnk53rq` zl|LJxYfvecS^>zW;4EKp(IMVuE&>kX1=av^C}&PZVtD8-%NxKE>lP`E%OK0eq&wqpOT{x@v?wS!0~v3*ZX{7kIz#^Hxuq zqb5~)-cUe7J_T)iDp=F#uK4{qWBz^{00k5{&XuuVcM|rYgdqbb+5#w~Alh2WG+%Wx zM!iBJAGvvu8C*b zrU;;%f=Nfj?1JPVzUcWo-5nsIf`Y0%DO-Bx^i|ZPSwFX)0#Hf8vt<5kb$p1w(>E^a zIs&MoU_>k4vwUL2MwGC0S)bXat&}f5Fz9{?0qb*i=KxrW$oS;vmtq$9BQP7)lXg?H zF8>Ycs3-4rY9vZLna~=Qg+13~*Sfmu$@%3`qT#p1c&DZAPjmhZd8IRda4S8Z%7F%` zp1e9ew-(k}Pfna;A}ZRq<_oGPH?7U9m37yXycE^DpqqdC*xCm)m-T}35f$Nj(UpX$lK#wXp+T zooeOc_xJrkR>p38-9of#RLg9%%ys7{*IGeW#tzsa7Udk3-a^ExgA%LlF3H_KXc4=r)M{PMT@hb69jWo+`hd-~O5mj6ObH}#K_19bcn%^(0$3S8F8*#!3l{D_{h@0S2%6lhFSFn_K1zUUejnLY`I1UUtv zni96TD8e0q3*u9^0VpVN{Vr#_Iz`?_U`?B)ApmSBICV+NGAxX74ID6iz#Ra#6xi{~ zXw|*r4^YC+mn8zQqabXLoZT|b!f%2<`ri+QgyR%k;&aw#YqiIn7cs_)y8up5aO@c0 ze`?7Sya;Hx!Ge1LPEz1_gKuMG+7XYA#0K^V17J@<(0v&z`qZ&Iy67JJO9bFR!5w}y z#^~vZ&k-?09o-WmA>k|qGrscO zKf1)>s$yU6xrYFpDVTFt%ACK|!*%?n<{KXYI7h)VzDw8oTL$>%TdS!R1>igd-V+tf zZ^1NYbPc`xe-nTU1^xN<#P{qI+ai!u_AnX}Tq!VC$XLCRbMUDDQ z5$LzfG7*3m1=a)kZ(J_JbJqLGjgtUequ|zU3HzWoxhYD>+tBeD0B;J;Hj=WNUe?PI zQ2Ll703Ql2+bP(){ifOo)Ej&KIVAW};JH@D)u zp&iD*0C0nX@Ny~3FD;miK+`qNQvmo;;K)Y{o$fTl^X_-GeJOyO6fAU+vz^E8TcL!& z)$T7L!JmRX{4sNI%x3(b?sH^IDu4hAB;gWv-QO8^=3VKb{R%)J1(T+-reNepF3fO{197fIRB2r2$fZ(ZN( zJ%BI@y0748Sk!krkFG&2vp@j%DRAy!&8F;;;Ag9i-tA0C2&Z7|8b1EC%o@+c7`WqD z7Jvu}#{IHphr@?VM?D1|J;L+<26gllELHK>T`x6HLp=r2$0BN7T|EUmS~!c+8@9cN z;4Y^Je}=r$`Eb3zUgZm&QK+Y2`;W+4SZ7Z`Se~-z*qkgw)KhSC)uUQjcTd5HBeV7L z7NxvGG-r3zzfs;^Wj8f_=W$NBryy+4Z~BLxf+qcD>dR&?$7jaQ-}~GCsi$Cv*A4v> zZCwmdPeI;)!MxRuP1OxzW~!&6TXgq+hXS}C9?%=eXET4sX9t@iU|O-X5I`gaL&N3F zaC9i{l}~Qj=PQ7R6y$5mnbLSKcXtgeVHyZs$8` z#QNiUGHZo(F@R_a?j97gvbi!mrD}!Fj1mAb6hxGWS!D9~#pqKSmfE=#Kr96dRiv!` z!VkDCN%Y7Oz+(z#uTikKMW%Q-MC|`zJv2)~1lrY&KLjX@HXc*5=RB74p zFaqway{jN0k%EPV5~g%!=2irx`^>8WBvDY>Ldx#-Iw(V+b@rHV0G?5>lpoF%IN>oK zrP>nJ>^p$x6u72H+1ZPas!)QGcd7uADG25((4-$@&mhotg+~n}yr5uXvJJDaE9`^7 z0#DN)08%KJw~-I?R^G@*V4S+nPXI3|ILAv|HtmWo0=u;v{sNFnfw$6M<6sTK5O7_d zD1cWKxbq|ayfcl>5U@3It~VLZjHN(>Pi-3*G!EBdb`RIq2k@GLJRb?mJbo8{;~uMO zHUN-LfgL|B`+3*XKB!6d6TS-|gMz9s{z@Nm6VCuxRvFb065dd7>JdMO!e$VD4U4Qg z-3Y*23W6Go+4cNGb5N6*-5MnT?xofdX$noO1c&X`Jv)TqS_qe*o2DHZWsnL)4^=1H+p^ zLLLRN>v=zyrpX5c=1sJ14&WmN7JTp1ep*LyKiA#P3t9m9M8U)tQWoU*Xd+4|^zYdc zz-J2V&E+gCEfzoSwObSl;0px-4b~7>r?A@08marvx5pYINS{1OU}Vb0;r(C z&qBfmCT&(iO|sbM-VqWiDQLM>$}UeCI~IY>k=r`~sG{I~4+-lxxkEVu$6k%;44|5V z627TR`5%?UY)CIt|e*g;peNY}V0)Zg2BmsPe?wd?n!`?lTo%cU6ak8VUmW ztoU6U7rsRa%9-oC0{B6JMK3vjhYR6F6VyCq}_p2;kpqg3na zswaoNJt4C0ad0}SC%bQI{Ab83oyy2gdO7bp^+xq%gCokdu+Dn2n^%2NpEP4LR1`X% zZc;1jt|z;Ajnn&Tu{RLW%U&w~MtOTbsVeFJ(%K?IGno%w`%V8)Pug@@t*?H6r#~tQ zdwT!2f2t=9r$*`rM193L^1oo->W-uO86=jD$HQF1o~H>He3afm3Vs0J&FZf`&^MH`(WA=;&;6OpJC-2O-@;^uXDfKtf1#pUj8+;dv+%?v?+H?BcLIl8( zf~}!^)M|aVJ*Y{hPf`VNngYLc8M9d|!9CoKvM=dD!Wjx&izLi1qzV4V`F7r}55S3n ztjSW=#`_)qt^ImO*8sp-3KW5S5s+DSD7uD3U!^esoGG|!Xv_8;?2n6vp}Ud&s~G?n3Z(r1u*7&ie!JbSHqa1&D+ND{ z_{lHQ3oa-jpnHh`E>JMkS;}l)tow$*wgvZ$Ai<4-#=LLh_H3O72pnCm7ze6iWG{N7vv1@ux0C16lTkZG;C6gU}QIm>Rei6VW3ev+B ztoy@Oc(Mqq3YZ89mnj%9jIZ8O`1i+I5jn#5?bMJ}q2s90zG#S7Z3R;E8 zSfp}^D*{gAT2BFRl>)8)3fA$O9{x}JSELHSivoYX+I>u~S-9G}e&EtnNVrBpWnaEm zwo7MRrfaU-J`I331ta(|D<4y)mZED2$~G_t;6uTVcnRxdm$d?cw!@oF2jEMAQ3D&+ zBYX2&1TLt(6u@-~IvnBqOfz-^frl^MXF$RY3WmAZu=>BI)gWLoV&hBzeiS_EBV`R1 zwf>2~5WQiu0NkX&#ZAoGZSIF3WV^f9GXdaFK^*U!SRC*S5AdHo_EZ1?6sU=$Y~79+ zT&54J=RO+}0x9UmcU#>*wkv*+JsG}j4uD$}tdCPLy-iE zBnVVDX*~}>Fa_6-OPE&PY9USM|>=xc&;^E+_v3=B=K6Qq{n}UK{+=8F6RW zMz|jy&>LtX|6yC_vH`z)ex6xx6M#qxDw8CvAi6p3=XtOvUH}g%5FfT?ukY{9MfY^h z3#ZMH@Q8vdeB-1^zk-G$@U_RfEdZh@*laFl2Dg^JM?lSU_*MYX6qrAkvM99_+_RcB zzeWHt6fEbx^j9)cbx?v?t2k3gh^64-2)?fWcvJk6H16y9Z2%rqF!-dD%~hM^fD)Gc z*t8wM6AB9Wo1t9~^M?pLn?Gs?fH(?*q!PAdK&&?c6Eqr{0f?u-S6RVY`5wT(B1I<> z1&~0&Tz=GI>cAHNfJ+r)ntSoP+Zo zNJyr@q*TK0R{LZlaJ*pMUH~sBxXQQ59Xf1p83GkkhV288LcyR5)@<*C@-7JEM1K>& zOA3rvO4ygK`nZ?Av1_yiB&1Rx=c{`sJYm03LL0Y}`vJV7Ku6AxTNgjJL!cyV`2hfF z6j)D^u~u1@QUr3;2OR|Pnu1AuPul2FQ}J@IC7r4TkWPX6EWYN`Bo#lG3XC5ff`kkT z91rpuAbesnYLf4L`@;awIho{xM=WnwCP(XpgklPkZTU8k zrQ3}VFzmYR1b`9>9!llRyl)tObtv-_odi%y!KY#=`_?vS6G~9bQLzV5M!^C8pWf!H z>4m_&m}CKzQ!w{6NChgXIXMEzmg&;0Fac(Q+2EHW)w1 zoToH#2Jn*tZ{8K%;Aj3>l%UloRRF&zFy`a+UCxY7MZn4X;yFmL)FdEPc?&u$>N;rV9`RCukbzms~eD_0hY%=fshLn~vQ*80_we^?o-Uo=Bh=Bcnli(Ice+^jYKv@-V4_8O6&U7xWC zJ-Y8-H{z{Rj||n*=->V^S{dsb{u}+{%Gkd~p%3@FFbFMioe=R`{qxG$zjo5n9A=-5 z*z-R#-o^^Ufd-qZ_NJppgQxb9oA94KN*@iY7xSJ1|3dtJu+)9JKY(KtJb5f<@xQY0 zJI?5V9RdJYQBdz3-&Ca!Geb>UcrIH2))d$VTCpiJ$Kk$+@hbj-kRYZ&J(73%jc$>G z5?<#YxCKB$L1=R+J2Ku3UjzGK90Wj0fi~X_C$>xz&yZUDu~RSr83jW-@!57S)$jmj z+^t*z$SF9__ZTc_&};*`hAt(+w;@46f#fNlCRs226$15iBq0E7{*STyj_bL5{{U`} z5*4zucS2T^BeM5S_TDRz+5D`wqM}I2Dv?Nu7E;=2krqV}(Lh%H&V9WfcYfD>-MPR1 ze?DI4^XcvVIoFvKXzt;+4t9+1i9pc2MRx(%QPATD|GD3@7$+z;?H2~Xo`PL@{6<$3 z*)No!v8+-64iuy~^CPiT0`v9CM7|dr2{gtNS z@#ej1E5ZSspy2UtDH|D>dK@)rwc@Y{0L~O>@eiG~M?V1p*Kt1t;6lOh@%&zvoCA0+ z&!u;KBqW@qU}-pC6@P28HcA-g?ivN)6a_!LB<#57V%!5!Ij}w&fGY)oBgAa;tJ^nF z!j#P;9sqEoV2(3iy3x1}7o3ru8$Sf#PQjA3)+}o0?SJ&s=A{YXGzCAOShKHH-Or#V zHLX1V2om@$Xzk^cSdE*cv^7Nl=O|E!kg(Mq3+AGP zX5T#HAi;}*0=@^jXm6E20!~Uho&Y#cLBwSnrn|y>KLYPuwBiAHQ_wM9$|_@X?jWGC zs8s?09}40##7wEbrzQe-rau$F1q$vYOPSf3NjeDl`(8+d1YZi$PVw71y0+CoAacOo zBmfsF(9Yn?fI@fUlJ;X;mJHw$1#)|(Y`~C;4k%&NdW94KmnpcMB4G)qXL%sdqGN#o zu22wDCS##aExI6392bxZ30EmlTq|QG`;_pH;_})u2JxGkdzfaJ5qu`;i$I)2%w;rFUQ*OY1ecFw!XTP0SVVB z7|~e5ekr>yLZEDgWhQ_d6s&m27aAq+9EO0?k@;Bw0x9TODrG}+t?|@cxPR|#05>U^ zIn;*5HNS&()Z5h%H7TiW^fO4fML~+Ul)XIpeLMon_ne*sxJ^Mx zn3%n|9i)grX~K#e0KpW@U%)4OW}4x#IT=%b0pJb=kC*U6oQECxff9ZW`XPW23anx! z%yq?lc?9&_pX5S9Ca5FJQ38}X?J_Hr~QF6G4`v{E`G}ji@!v;qR952k$-fm##gUbEhbH(+t;gN!CF9++4ANQsQqNg`V{)_VV zX4rkx$x^6FLL&v%8-LS3j1)ARxl7kp_dA|E?z8E)ZLrwqXDrpOjnh^AJS7#46x{e< zFmLtbk3;nK<<#ME&R4mM%Hes4rVr3Pe(YghY!_AZ#4Xz2?<0T*6!hfB6K}5a8H2#$ znhF6tq+l)YaIbY-iEDuQFQPv|!XpaG$8xauBJQ`{FLkN_5JSOXKQY^Jq$~cPuj{kE z62M~$CaFr;3!B!T(PvOeQN}|n0ymJ90h*bHf(6hl~xESJI7Q* z!V?ON_#J4uO;Umoh>Laj3?QC@sQxn6PH(6W0-ddwe*us{L1GUXyVB-t6#^qI`hNwG zNP$bOnA!IHh9{lwO|K9@5(U|Y{Ai}@dyb)mQ)41(AR(CoJHE@hY3FhH*WAn3?i+v< z3dSt4VM%dqR8WF$&sE<6q*9<#AYmFI=MN+B{{4_20MaNJ$S_B)4@89)Q5NV5eUIGAOusPs)N0j={AUQ(a#RAd`Z) zxl(rU#v@ylpw@d-9e^wfiukX2yw=zl1lsg#+-Uk=`&P3lDB!CYKJK1_YXH}#NdkCA z!Lo2Et5{cq|8V}pJQ_p7a|*g=+p%YjJ36B#sby_$0w9NiZTxhc5}V%b5a<#;swsdM z6wK3?viL=jmk^LFsuMsi1*77{EZwEwSOhLCNNNTNc@&KAX3IujQ#*-3(bdz<0pwG# zkT0HVxqQHM1cu(-(gHvM1=6h&X8x|@R0Qm-$Fu}cNI@Xq4jlY(#83oO{hPG{@REY# zd<&mP&RH-CjiwH+%%A~O-BurDw z8m}|9`VrU#624L}exx1C-ag|C`j)&bj&uc3L&3qm5;l6_>}UkmR8Hvz;2Q-K_$JX4 zBZlG6;A_ynJAm&LsDBVK-GM{!Du%S`LIM1sK(B>_O%xr*ulpa91A0KhPYS;Gl(9WM zOK_7iy$`Db_(eg|E(vSpae6=c(Ei@jdIG4W;3V%EJFk9(J6QWVb?614j)EnI64qz* z5(SiCr1eq&=6YmQR)sGq8+6=KAJvoZ)y5Bn1P&UgCtoz~sI6mfKL(YB36mz&yN2q? zc#reipZmtoM6i`1`!nQ~j)SC~&S=#`9Z)^FXy?Rw*kC>RtZJ%ujkFoACymYZ>t)0B zdCLBKDrfYWmgeCa`Ja@gP6BEbVqBwV*^&;Va(l+l+@sPu%Hjn&7m^(DWknTdg3;j z*GPiEg_-#RkWer#Ov|rB$yuosfV%yOG zY$@pQOU8;rSK_zVH-~%y*ijJ9=k|Qt7voXM)=AgKK!QC5t=+}ULpKM1OPzFK zKr>Rr@1Uz-m5bO;6cF)eo|?d8cm!~G}db(BzRI#@lwoc3yn^qCb<@G*9UNxf(N~& zY}J=K{P4ZKH);}qa}=0Gi&TC&d??83C}l^t-dvA>ThfrJ04`9_$e343 z&DL~AU_tvY0`R5aK0hEl=|c~^(BgKp$Z3#pkpi7g{P)4q;1UJBZEcu! zv^Cxu6D_}Z27t>H__r0amiP6aqt9?*cCVQLu29gEuQ|9}{%HjQ8;aix;3@@v1~N9G zM?X9eka7F&EJ*O9AXH1nEc^D>L<}928;2H%l)ot0- zEK6Lmx)=4C3m|}kgw1^H+DEF6nq)GiTmaW87;<0CCf>V%{{t0`4W9=IHz=6wB4g>x z2dbfjpmw(N0R&PocAqtCq`nLPPIu2-x&XjU3YxgtFrSN|cxhAm(LoCV1W};4gfHKo zbRGo?v&gAr43Lu1n;01gbciBxd1cr|JD1cB3s;WdRyxPheT-}DdlyqJ&`yr!63%fP%w(ui=xf`|(8D zxX~Le0TfcOv=<*k*RKmh35HijSOIuRK{a3dF|hrETL|(7>vM^ zia2XXD55}V6knNfJTeD?Vl7t@fMN=I8H?G?H{U7|(5zS|2Jo7K$rHqEM%+|9fuor{ zOakBy1ES0f-&r0M`!jRVLwgAc~$Uh}!-)qJmLEy)$9|Cw! z!IBJqJnIPYc?4vKAK5{|2MTs0ADC5^X2E?uTCsLpJ8P8J0~IGD+N#arCH)rNc>)^N_`;!^YLVU(j(fM*=pRnf$B+ng|3$%frAF> z$ph`|w8phuvI>=jr+Rm*cMa8(Gu;|%tFCf&LU7*b?tg~7(n)-KO?&L!W@)INT(`1E zJ#4U^)Vdw5m0t3f=PO%0E#_sHptg{;8fU*&45_;5X_Z!oL3t=B+MJ9<8U_;?gLzGj_}3 z)WE-=2eLCZaH@w^f}`sTw9R#tRa(8EJ7d3=$!R~z_I`?paqZKF2yfR9k&m`~!ck4M zGj_<%jC%4fJ7e3Lf75E4So<1na-Cd|S#SPrXY3|DFYWL}>(vk%bT_+U#9Q|^TB75w ztFDT6#@gNcjsA6K>|cN7aU+zzp)Iby_kXK@-x>S(T8yr^hfzPoo`nCA@ixx6JyNf2 zwtEzMz1cLrbQAuv7WCE7Nyg8Fn6`dA0^^$)2LZ68KvhS=e)>f;N8ses3AX@PQLw>7 z#60zrB?ttzY;zlcH3jngeo4I?hmHvB+MOu?5e3EkGnigh#8vjN-oC+*Af_N9Qo@GZ ze)SF|C@Su{13*H-iC_uqa>Bz8fxBgzApoQlxbe$3=1yN9i9qGFrlA026nL~3G3T0@ z6Aq(za32{L1qml9sHl{(x92l)-4c>~G8(`s3KsAs=o7nV;B{od z16Di$;7Wmgjfj1CX6BEY{8g(KDz!?g{YHe6_wt5HxYfl(G2H-)#BYx;sL?edRdaT(y zI2M2>1y^##?DFaeJg1rw^;H08DM)QCX2a~3^hQnEQWYHs3FjzCek@{(7G3LvfJwIV z698Tm9ODbbuR6+bf4L}jO+0|}6g1}NyzJV1>mR=ly+qig8 zX9BoFf%z={pHpoCL}zG;wfl>)nTG0O=Rbw^-9mjh1$_)!qWSN0bh#N#H}4w;n> zz@LIwe3|48)ob%nLhh(e833+PaO;zdnT@E#ugZP7uLKZ4fzx8XPGV(B1WH))DKHZf zu2ax@nS@=-y@_7}DyE0B0NkM9Ua*XfTA|q=C8Ug)nhhY3f>~7(CRcM1kJucyQ+@{E zCIu05Y}w&aZ@#01#iL#bAc%s|g(B8HJ*pc5&lmYWhlE=c#J%9}*4ks02x#v;k^|s2 z1-0w=VcMH6;Gu=ZlG!f+1XEzmXC*qzm*QnWYYjT(0=Pqg`fI+G_V_P6>ePE)kpMy{ z__k5Z;;uf%zd+jzZ{s>=51$OCov^#8?umiz?iY9-C zywYj+da%y$Y5Bv^NWt;IA{ZnsyJeLdCw3-*5Y;k%DFVQMwyO%N;_v z`hUT^)kY>;4uYb(nYMWgArbGTbDGb8bIv7fHDb7Hu`5B)2&(naTMs=O4RMPPwz1+nV+vPyu2p@(RlDw;Wn8u@F#$@e*tM?)+ub}RFv>3zeWI0 zDVQ*V?JT+6knN#k0IngYn7pe$a*dIzVPB9QoVNizU1 zD45h)TnZ}rhO*$VXNDu7=2yA+X@P>jj{PK;Lqss8m+i2~^Z2^=}@Pwb# z+yDM?E7YVT8xsXkN`cl@8@9`3GG3%(lH%SD65dj9-d)1B&G+ky5{{i;uL$5B1u`Wm zGw}0#jevf?aY_KnDDWLGWwoMCDhLGX$teSPPeEl8-_!K@8~(#Z9LW{H2MT6x=Z7?g z&%|#Hf6r^}A)%at%po=`^YVS%n=z?7(gDCn3YPKfpPFP%ABaA~?uBzZ0{BG1Cw|C( z_tLR=G3jpBQw2Z;1@Ak_m}s~P9{0@^mk6Mef-Tm3C3C$8)b}8Mj%spZWjQbDJU+nVRK#5aFx-yW6!PtzEH5zQp(Ck zwZD%NcCY;)fUgvs;@9=$#Ykr%u<`S~Zjewz!KGGGR@kpU-iP8GZr>fiHws3%@(KO0 zBMB(s%$}7!0DPyQBOf`iUD0nh0_8R%RRR2Ddfl==c^#)K!fyD<2>vpXW zcYhu>oz(|``2;fa948jBKs7~%>dAzTXVm@%4b+pX4V|={60$C#vapSsN4;yPo@|#q zNc&UjqB98In&A0o$Sa)=2hM5d&UHSG>dB5~XX{~u_2k0JLakrEP1>QNuxBf;df9M2 zsb2I{yZg8;iino3JpW&mw|87;bDb?ZCv#Cf`FhoF`iFY5P16y&Ar{L$QAsFT{oDSj zo}7BpMOQ<4=3RuluK6D@Z?(z2mU^cC?f&tqSh;5yJP#K10V?J_^pi^Fap(~}t2jv= zfF%X}8r!hVhCz6N$MDXbh6Avoprao@JoW5p+#@mn@LmAc6pVD>r|JEixDGW*V`tb1 zNDxu*!iZlY=$4BoaAI~zMgkC1u%eBWx%Uji1?al(i!=a8C>ZfW!W?t+iKt{o#SA5Cs(dbl^&?6^$G$hziFmjNHjl1fF`wPFkY{vlL zI|lxFwCQQSNTrp(C;mI!N;4V@z>We-evE$i*B$YXbJ?mD)$X4#z80^meJ*bROMTFy>y1ai-B z*9LHcg1&qnz_NM~{!1rU>*@e-roi|WKk!o5AQUAOsmSXBaG_w_Wie~I{RZw1FB*|2 zfRhyT+ik-OA36MAlwI=IgM?EQOe(i#;)S+Gs7ae7rsDy)Qs8SNW9RP%#30~(b@~JV zZWNpd5wTyly|*AReQ9R~z?}j$e;Mo4f4Ct6KI7jC;4}r(_~vzO#lhndXnZSlA|#xl z;HQa{t(&|P&st?i+3ExEpkS%Blx|WwWiqC@ZptDA);o-x4B#vU zYKr{56moAe0=Z2Z8vr;*K{4O>Z6Lml=Q8$srV7A|f<#j(J1}t#9$zU+@tgt)=P9`8 z&5zTO+-;AVf+UKt1YAaG#(=xG3aDCo#9%H1>J`)33^MmL=f-~t85 zXULd=)=vD^C^JtHfG-6zUhq3jKCQqV?x9D|%z%W86!^cFvCMNK{BC{mXyZ%(mnay; z2V@Geg3h4N&~3`-SpY6m&^%VeMy}itjKFo@MzaB2pi5b$OiivZlDK-XK$*v=`95U}dfd@+C^3Kp616O?sN zyCEPum@0r<6nx;DrY$ZOEkPjXf#(uPxJ`kYk(iY;RbvFENwzNq5KKYn34Wkk)ffEm z-L)FG48R=> z#ZLj;r=X3Qm>IuYho`Q0`Nyw>gm4O8-R1A4*{S$j+R*ycDgY4_ygedg&FYTf5u7F~ zHmwE_Nx}9B{O{m+2X8C!89!nTfG7&2wfx9sPrE*-o-`W1ciZ2ffqL@8t8lGLx%=%< zS@>-7zIxYCJy}*fTU+N%Hoh}d8s_P3mET^`ynv?%FNp zv~)v7;Y!;B^|Il5GH1{??FaS|Hi(9YAN()M+k3C%iq6hf>3C=Cp2*+y5A|eFA5C5R zYgg+~Nq9KwxBXK++11xg*X#ZOQ-pU#{|}hA`g;#~y%43v)6jo{Id>;*hvy-hK0xJT z_@VcErs1UwCm$&80PuiSfCY{QR1NnzZ|%(jEY@6wIyQ z_k0#t;=*UY|4RYHQE;KBjD?rF1)_wnqHB90;RyxHLao`0pm;nQmUPi{AAooYthb8T zj>VTpqJ)IPNyY#YDDdHjb`BQTNfGGh)@DC|L<+X{;y09y9fLl9Fv?#|hF7(fOEZPv?J*pf>p5jfyD{s@3f3NG>)(EQVvaiw&(tkqEfSrqh&=RjfV z3zQH(K0^T66nMPmU3x90#R!~9_c{g%&nVbvDPkAX_b6ddy6rfC=M?O?A!fl#pEgBc zxx+X!067%&Yb9c~S<|i}AZ^*i9KZ_-RPIUGOmW0P1fp$H1dvNXnYD}^`nabr0<(I0 zT0lY`1>srNOl58B69`=Wy44auJ_TPk$(X6P!w3YXmyfmrP(Z=+ZoJy_Q^4EfcZb&s zppb$KxA;83sg8*#VW;?sH6*;Gz%H4eWL;6Q6M?2qE+PQ0C|DLRW9?UaZbP6dag7*2 z5e1(YN!f!9ZVm_}ei$kNP)tF(6ThusT(}s4nl;q|cuhgfP+q*X-icpiKAI6yNO(hm z3*Wr%pm8D>CG^-}BLh%EfeAnAS1WsOa|G_BFR%enNg2e2)=KBiNq@undc92j;!7?ogONxxgJpuc5=Jo*IQ!u3; zzkm3QYY9qlQJU)j-~$C)^!Oboj^*bNIAzhz5kNTwVf=*skE$boB5>}`8v%Tz;8%z> z+Zs~*5& zHT*5r?3bPb@Pz_Vs+egmHo?C@i>@zl1@M&usjY;45x>9#W7jA5a05_7LCy*(dv>io zel!y6$^`I@0^^oamTC9||BqYV@~%51e5XLhYq1y4y7ot3>lr7>X#hVc$mX4sUJJ+G zLST{mqB8(~QjlP4%UYVw!tbTdr+Rq+_(j1yWf9XJbwVE{_=c4Wpq7G5$M^>Pw{7q$ zpBAelJt3ivf~8Tm?7h)_ys=9q+4d{|b4Df|Hr*1la07QeR8NXFrC$CUG*D00zWt_U zFfU9S)sv_1rq#QK>Pb6G7j5gv`!xu@?2!Iv$Sa-eOCD=qcX7-|_2doDjC$B$J$cDs zi1xVV7t~QvXz)3+UN&4$7OfnhbN9hAWke6P%Kk6P+nc#mth4%o{%$lsxwQ3f`iFY* z;E6@LBQK5KhDyT9|7ZVHPfiLA()}{wi3Y-!a=(Kc#JtsI21E7Q7LGcIcE&E8e<|qi z=Yi~u?I_nud%kP`8EBj9+>@8<1>G4N-e{AyVVFY*BBp9r8zQ`2)<1o;10RL8Mmu9y z8v50ff7u!P*PXG7MHL;;CfB)2*Xqr`?Tme=^If}Dr4znr*7r<6!-%(T*^iYvQt3P z$lP-eQNprCF9cvs!9fQJd$YT|9RkibF5iI!5e1p{Vm5Tw1w4G5uyTJ005Js*UHD21OR*i+DMkA(S8KQ$F4wA0BJfCB}0_{mC1OWxzYrpdVr5s=_W zfhxbScxwOF0VpA^W_u(6CklSP;%5x%=HgkZCWhmp0Gy!U6F-n-%<#o{W}#1M<7fcR z6zFZ>tFc9`gHV$mdL;8UkULs;U`yI#gFYi}xcnIJW z1)4`hY`@C$Xw;;Vr6V2zaHXJx?=_sZLA?(Gk6-;1fExu!5tyIn_!z)x3S0+C*&CmscusX)#EMt|XDEtsKOhmnc?vWO`K!`@EFS0GrBEpVZwh?I zh}oi(m5_~AI;Fn)J^gTKkeTF=Fn`8hNDClrN%zWCMyn?`x^-EI#_);+Y zkS#l3vQz14dc;bZhEe-xC_&aIGz}6iQ{dQ3 z%)DDQ$K~MIYoezBu23-hqL@v!Q9h3ne77!42XK{wG6gA9ke>BN;GtU23;=!&-P`-n?JcNDBd1M!0pJz|X(}?d zty2mvnkO9VmJv&*t|J2uAv0wghBxXQ_xi`W6{qy;OaVkva9e8464bv9 zMhSCeUauh`ih^@|OsMd_{YErW(7SE^$G<@XBLxA5EwuZoIm|%?|LT4P^{%0jg5Z-0 z+E*U5Q9^L4X5pV9uXJ?$YXr!Q%@o)Nvk%HGh40XS2YFeXW zKmY&P28(@uCUb}7k9DJ7PHu+qvHib;8^pZT&YnZ{Ug{QRpa*F5grHCGJVet6D2A`5 zuxuHQ7uwV`K3W0b0R@NT`IQVc18`X~qhN9+fQJ?WO6c!s@(n;D1rPb+xh{r5cwX43K>s^{BnonR@{^X1 zIQB&eNBS%L0FX?9F+coiqWmNe1m1Pa5kLwBdqgr8svC@7sC&*|{0RxE6o|7VOnIwS zHUjiNp2?EHcpg7r@g+0}|kDAm`|8y%zD4^iHg@jc^YsVvS zvFnD`017GCI-YL_jy{85mF_J@$^m#uLBHN&*28%PE~29)zXb4#g2LlA?2uvm<)}#+ z#_{ryP((p~cM;P!$`d0HIK{OMfMN>9@S;Jqug(I2s+_e70A5pI$cNtMB!0(z&!!WH zwgvEp0;M2++*;t#u_z&Dd6fW4D6noOWt{??Zz2%A|6w~wD5c=oH7oY2&bAbRwJV$y z0lcLk^{bS<9_rQ$fzqTEN&wzbVCp7jO$O$qAkfNeurh!$3gY>0#`nur@FeWHDK!Fk zPr>TdBDVdYnI}r0Bz&Ntucd@<@o$HprKL5t9RQS5pgGBg#m&3&1|_VyvbZCF zj}&y8C}XehJPbpiaAR*30G}vODY0f6@;X=L{N;q^nyb~l; zQqWvv!&YmQBqPu~!Lc)dDhh5KkTSbv2k}5alPN2@0H~&5;(LBS&PkUwD50J5psoNu zQ}BA9n5AtsoPt2glS%=6p+Je>|DZIfEB+6ZIx(snBz&bH&PU32TE-7W3F))!x&x@8 zp!W+28+E!1ep(BZ40{0hMu9coDyC>|frqUYjq9fh;5!8~zw(nQGwm;0n}1( zae$b)oj#;XSmq&APp&?tHVhIt zXrP{a8t_`%!cb8Gm4%6Z!|Gi_^`zd+7CQI$%+Ww_aHRU5A+K~o8ky;2`?Z*X>PbQ1XjsK#&y@qVKuFSAqKU7av zD*UE@s3&XJPScg8EHFnUVO87Tw!xB+*OPP0uIide(<~8|SNtC^Z}su%Dtc+9PWI>l za@yNO9i9gZ`T!Zd7O|w@>3GTQk@yq=SW>X$o0uJ1TZ88^O!j*YhXgAMd|a&A_t=$L zs7cqZZXW@_nu2oyB382b0)Ax=PSG9-Kt#cN{UhDu2M8 z)vQrt#{jUQU?$%+)LJyM14?*wrpZ_UwiIl&m#}^lC+i@P>6a=1I|@$m!|_J+ormAR zQ!72kL4rL6)_iU+)^rsf2$(!`izWaE3i9|lqWdpz&qPfs)EcD)z>$J8KPBv`r7kW& z?Ig7VaH61!dLQ&YjinDdu59S`6X1+6WunP%P;E0plC zG+6+y6cn72GNX^PapAKw`}71zaHF7%A548M_8*Jq?&)r10Ng2f%zvkD*-Lw(CdE%0 zF%iIN3gr2jgZce&H+tmnr!AT+E!h`r?=ISpTlG z0bHSA-dr0tpg2PjHECh^8v$IUAeOK4aeBUL7y`#iZ_a@PKMKb1oi4i{&s&Os@nnm+ z0Q@O%ydh%S+^*xk=i2M@<^i}yf%ZKcW@fF1f2X_pb(;?$fP(au)~wy$EvxNWxDQLtueH?mG(*l7#ZnGBw zxJkj9iG1JcZ8Hf1UXN530|=tv%ti^@`E3jSOCOGXDS%rPyyAyHt?wv@UzL5wUS9$U zw<);1n=g>sVl)^v$)m`0DS%)Ky!T1j(me&%2uxfyWf_1w6gcopm$&sij5kco$?RYV zAcTU4wNhrfau@!|^3g32Kqv)n{4j@?t}F0sMjGqC91`wQ@Rgqym3iY3ei=7nrbYn5 zC|KCbnjLzy9sjU*NibLe;2s6GAH-~KziaquJ&@jhC4l=B^qVVV&4-)d`N=NUN?#{y09iXl)(&5|Z8oYWE7l#ahYi+~K`LFeH}sRQKt}z%r)swlye$zkHlNL*ibcatcyopLevHEZOr+Tu=Gg`NO(fbmF zRfqo%n78_`mCQH3WaB{<7t=Z0;dzLr572)8)44GF5}qx2x3&8Y01qf=)t}$!8lYN? zp6QidZw2s>f>3^e^{25*aDvsRpq-HLhyuky5@sTOumL6X8f3W(Knw-dQ^l-E&j~MO zkowQw4d5{a-6(!Z-IfHVsF%;U?56LVA$$Tlq% zz*7p=xJsGyz(0;Ei+dP+2olmM2;}!melJ^&$8J{*wmb|VgM!UZC2a5f0Q_j|Y(Mu1 zfJ_QB82>+g)*Y`o_~_a7D1a;q_VFbIAsy!9?r`(##RABtU=*JsI&(dAHu{$4z70GE z3C}1vx7?Nm$0(0SV1DJX;{cvhkWJ=m)9*IA&-K-zG61!jK>v}u<+_pO91&4 ze4Qp`Uk$~d5LoXz!wNtF1=dkgHnt)bKi=u5x>y4!q(DDG#2P8>{DuEMWE5t-ckUsDOh|>%vPGV#eL5u#vcUmhJpkq8+Nz%?nNk}=0LCv5=tnT#Oq0^ zV@)gqi66x_07@ws$``z}@t1Q%U_;shTL5n<=xl1uf=b5W$&WRW-R%IpqacRwcGr7! zaw%w;6J=X0G}xs+f2gN|1@onK>CBgQ;_h50&h<~l4dX!zgrhS zJ?0AFD+L|+%$w-$=^ZFR#crA#fEo%ab!~Yy z0De*MK2pZ=t40q%P1>iX=n0^fg1fV9*p{rlxN|Ztr9c366zF%6F-MQ=u_$4ucEDLk zFxMyZlXiTIzgzBhd=t#ovXaYxg9hr!ekLuo?;G#1MP;F9qqp_0p?b1vt%-JX`4`a$ z`gVBtXUHp^xVjSU;#-$Dp?XqpeOWzhu%5iqex~-7a}V+HyKSGnua^zilbK6f=nM;d zj+e^TEGz#n%G=wv^=+M56&qDiJvm_cZ~BLN($`|1Zu=Q03{goK|Nrct>dC+6C)F!Y zEI@dr(eK~}F>ke3i*9;vT77AZcE*k>IUDr%^FVgSCiaupR=l`)BiiPAyscNgpgUvN z2I*?gsu*=H zR`a_VuSGfIuT?xVDh3kVDezB{v8ULye*gj9u3=9g;VcDb z_z^&zzbE5us6Gd*;{lwbVAx?1o6=)$2uhefX?_9#FADm&^X-q%y5j}0i!D_X0i35` zWlO$ZCHO%KO8D+qDgbW^F7VA*N=rM$AaJs8a1tc=Q1JGagbi~Iz(qp)6&A?=E>K|e zfImypQak|DMtfEY0AC8;m`PZNk|_L_?wHm!6~ILb?snlfP0P<6hd#rH79|3>M1jAi zgl#+&J`;haV{fHF!et6#`I*e0V>jcexh^?oPXSz^;5fh7$obAOJQkr=JUbo0RSJ53 z6SHWa=mgXx&3WB30Qgam+TVs<8qf-FjS1}gP5}NCxbrE}Z{@%Cp@b=>!I_Y7je^5X z`B|4%HDw6Yd6{Pc2%unczLae@ytEpD1lJka0IpN;EW(D3bCat@V9TaX&j8$@UQ4@iYZC?r?n1Y`NCG4T5 z`dkE3>H_j0;SL3xmP*)34RHkm@mmh(0|=quYYAT~J-&J%0^_Qt761sPVATzNuVY?| z?FcwNZC?oBE(MW%=a)~ZYa{|8?Fs}CMuD{nAG}yJ`Zxl~X8tcB;T{D^{Ox_CX{a^= zceWmU1>imf>nDm>my34zTT&l3sR%$g1zs{4Tdm#y7)oe7Sh*NL1O z*PR}75MR?1TJhU9SnTta%$c(Tbi1gjHbo-^;g$ab=B*yFv4>v3nPK=>q?c;UCwLyB z=>s&VxtPUlRl~m`K8;-}06d_eK+%>tPnX9%L*K*eDgivC!2Pj^%^md=*8tfXBdP#A zqM&i4h+Q6DcoqF8&|UIP05KH!^KBJ_&fDRwgS`SDS3|;M3Suj)Slxo7X((arXP3_a zVkzh~na_CUi}3sL!;bY|0K`$ScM9)6H~odnbfb5}z5;kcL7< z$oeT}R@KoR5zt!U`U^lB1(_ORmOrFf76N9y*3<%cN`c`r5u5d+LJk4B^F!(Yq*Jh| zshEB2uoZVOBqd)3kU_ydz8TBofa6k>(5q8Sqgk*smVz={DO>5RgcrnKJA9%sfGi5S zdh!KNyHls51k;37O#oz5F!U(DFkxJ8{F;ey7}^xTGYTB|ttquvm*BrcRMb}iJg4A6 zI8RtuF&H%|_{!sEkdQ;ceZF4B&b~Ju2vCf3ZVuoD1^K)A*IJN|D5gL*N6H3 zH%0vB%Q7=;3*Zd}^Z9^`^J^`<_jbAOfOY^%C@7sIW=BhtU!o?>+x1xhr4+=5^W8cV z%<)gwSdS=0NO(&@D4#=08u*VI;FXPy5`cFUjOP1R<+r{~L`~XKxL6rL83lp%Hq7^P zfBX`7`mT3-0PiX29L&F^Pp^Yf!ol(70{B3|v^X24_Fmr!fhmo{IzU1>1<2|xt}etfM*ncNBy z0vlPW04gbnmx-C&)p_`3Jf-RF&X7<=!C$L@x9|P(5GCw*e5?zAY6_wcNti=xAA1D! zZ_MZl;4=l%0sMTnEuYm8c&)6`4Zs%)@_I?x8ZGfQ1fEZQDS)pO*v#e^8x6jcfq?Rx zfbNh`L%|(BX*tbBloy0}b>SJqR@4mnVRq6m-}pVv`?~zeiyF%genW;THvyhRIk)&4!)`1cmME z4WO2Stk--Ax{t)0BFmNvvfE@)Efl@Xq^$zZa z%^z`N937%?kT&%cYBl>SIp55P$Z4yN+;t&8;Wkk5;*a^nG$ zgk=f9l>*;LDf5+kgTJNe3w$R)f*S?bx5`)_dAUmT8M2z}WB}YL*v$v5OM6A&4#x4Z zVl!_Nfwf4|SjY38Ga=y;1!emD&e)*Yawy^L;H|R&T&AFo*Y(ObdzvB8VaBN0 z0IpDQ{^;-%$6qZTZj@KpR`{HAdrF<{7#e4`F-)=o_c%3MF4J6 zkZdevOV(cNgc4+O{T2fVqM(!yvi5l04i8(I`Bn(v76qw`Y?#rZn(HW`F8TfvNVrXb zS#JreRJ*$j0i`YCr2v8{I5mc!^;f(CcTQBw<}CwohXV6>DZBn&cM3|lJ*2xKfDj4{ z7E9P}w^q*)(AF;zKqv)1S0rq-LpS^@>SA+iIV9YrU{0u*O|jbAA0@m~JZ1zSjDo<8 zQfAy&)c^srCbL%nxJN;?lZ3T6^%!rOUN@)nN&xpM=pHI%8?*c3QK-E8uLTfJLG^Yi zGwHHx1!~fbh@e%F5J5q^=^{2p_8#|)TkJ4j4Iq+&q8u69*J4K`N;uqi)*1j&6!`Pe zk3*v86Hz_c?6cptzd-}_q(a?p?X9PqMxnBBMyqS}uAzGJqf)WR*CgZ4=rTQ26guSHsFw}blgYBJI#D-UnId|kGVs4B zZ?D&j*1C2p9}PzJfiQH_2e@BDBWu}t{gzv^?$*< z)pKr-)H{5y1D<)Cd-d3McpjqZ19ZofU!`>-2LDbe^qaW@zyk_)H5RdU-K&SAM>Onp zhn)Z(Qjj5$vH9(~J0LLjYq0nc>+kLU^t(}b^dT0|4x}ayLtc;QYbK- z$)~O>dh|tK>yc;12LYr~@NpKuRCAD73t0Mh>jX!57Ebw?Kjnk>0^7!ool7-B7ABeyTcJ(5Pxb{+wcNkQ-u zzK`3uxC|vU>!WiNKo$kfJM;UM2Hcv1K$2baV*s)#_~ONHvr&4rAAt*{=>m90LD4T6 zn>3(cC<0qGy^ce|a|*mx*sw_(%(fy>etWwafE)^jwdXU@2cj1tAW_ma2k?S|JA5tB z&j<}%fUeox#sWYt1;%`Gym#?q{23mp<_I8<0{O!>tVN_$9yO_%*=0*e$frQB8}ANV zk2#Nk+Z$sm00k68@WZvEN6a0BK=SKJ)&L4A5N{E)4L+~&V21NSMG=6P6l~^0;wKjy z>!5^iQU3oib|3y+_3t0RqrFrr6)m*)9!B1kHrhi=+IvWQ$oMQWB8p0j3Po8VqbP(@ zk`+Q$sU%Wp{NDF<9=Cqi_qui8f57wcdLN(ToO8XW017B5<$IesO*)r845lXOGJVgqih=PQcQnt%qrvm~V_bA8!6jSi& zIG^g4o$Q9d%Jr`VP(ndUY$n)mfSj0Lm#?#mkZi z<4-dXP}tbw6o5|@)U@YE$K>S~AYd`_g#aojc=1Zi%)}Av5jgh2-4PN#Qy?88Wmf}@ zwGeo6ak~?MN(z=4NSH=eX*dG;ZzrAxP({I9Gco(owh4X+IE|Kf2JnS~xN8!&-m>p5 zlweo(TmaP+)L6>c=d_Af2%KH$?g9y4DVQ9`XQRr-;a_^_w=HJ?e52r=rGzc-a|idC zHr+SzEPxscfL~cmdvF>>jjcdn z?c}p=kno*?AH8I3Pey;-oxW_n@i_oLDCm$SVHO_uFnHO0@Oc0~Dd@zHQkqi0PNF6a z-1b!fzbH`6m$IqV&GFsZ$2;Z%B%IJC*Z&3$)RQl!$4vaV z*HjCYh0%@VZv5>UswYo*2Wp&q(|HGix*g^J40)xqYuE=3ZFM;lR8NNYYg`W-tS7gg zo}|&aV1*7U3b(m6sh17clR@3KX?{!zS%zq=U(^n^8D@J^bhr< z(+hR2g`MO=P)RuH&TsptdU9c$wbm2Gyq5^4{1?nyUC^sWE9*mU9a&zfC=+aZz=?J|aFp!x|#IUCM=5H6kNrT4-f#(x~uy z@((LxPjt1{IHzPZ0xfb?H;kw^|FkkTLbt1Ca?+5!2sJa0Y#8y@^_{R@v;58C<7j1U z$^S$DxH5KPLFpPo_L)`ASbeC z1OQtKn!J;+6|-jfA<*OVdjZ%{aQLE>^|)Y;`-I#)Ln0x;o`TmsWz6_t74BNFes2{8 zz=4AJY(B-XUp4-U+Gn)jK7dmcoZwTR6VwB6H@@a^)dv6^DKN|9n>}sOn1C+2oB9U< zI8pHYtBCDwpXH7K+Yk~B38yLOIaS13tqb~r!07kpF#wz?=usu%*4HvtT0J5aCHO@d!~-}-LC+MvQ*VCa5)AJ2d<@_`1=jcY z63)HGc&>-rk}?5Ypg^~RPo6XWh9@z)sD&gzf;$CKbHr?KSJ6Gxq@G@ui2yEA&}f;M zDc`KPj=&W8c}V~+Q4qa@Z;N|90e_sHIid0dz-0<-2lDCLc_#Z%Lj1B40bHSA^)~+b zJHjduf&B&kPa)wd1r+;ai!G_G*TJjl2Fc0G<>m$@Ag% z-PgV$p!BTka{$*Uc(XvnTpkSRi-5_fVgX#IAeGOE30xG?1cAB6fhmx1gMvkqq)f3O z4R;K`-*(~!051wgSn%D_dW7QtxP)1AQUQ2Vpunq&UE3yMuw;9emjHYys2w3@&89WI zgRWtCMWFz0QXt1)yGq_3%MsZ5);|prZc)&`&XOtoI@%I}2NRE{1MsCli*LanDxHc4 zVKcVR$pGL-!C##hl9AIDP=fvKZkYgXQ=l_O%=|}<(?B3Nvq%7UC@AE&_Y*J4HUv)W z@y~(;e+t45^BpWEcsD}eq4d}*009()81t^S0dsJZ9=w~A4Iq$$kv$~L-RZp|N|-jW za}IzY3Z~EDTQRl1d-A^rXYB&6?@jVd=UaI^>5`u!d(i+#`Cr42W{mMxP18F zYXBh>wB|dB*!>*siGYXFlso{T6r8LSvzdEl;%~m&``Y9K2%})~OuiXlzmT>lLEj}^ z0QV>`KPqCke>N{bpoQj@0!Rp_K%Osmn>_CFUIfC2?|uUyf`T6^5|**(!UhCdW=$vr z5J`anKW=_*Zx1}d#i+D#5r8NP_z}?TL9zsYRVtJ{7r=cA42JXdK%F=Ep`HR2-S(d# zfrAEm3X}#JX`c2wxds*d`wTnOyM}rSV#n{$yn1-+X$0r(Q2aCGmCo)kAI-4d_u8SJ z0=*L*>tTaE1wn;pHRW%tPeJ8=sZ*zV*>F$6mZ83yyQh^UAUg9}=YONTy`#HM(Tb2( zs-vC))$70MA9@P@n#uh7s9P#3_QU?4{Zmgt^(LJ4{?Np8>>B;6GKu zRC2{p-iEb)x503K7Y##_WT zbPB?wRQqRj{01O_0<$Y(*4ix>55nGY$Q3{$1(kgKMJLR?8ePMHWbYbCNTMK#PqeAL zwYwC7fZqFS0X(6=BUa2F8#v?Pl-$`hP8SO{HKM|CD^5*Zd#?Z#w1);3Wk=bw&K# zTe;H+9O`{b4ieHRIQNZD^=w_;4}tGF2jl^yQ!u3kpRdw*RuuxX%BD01kU@bLFH3qP zR^!jGK!^5C0Ay0|%0SAD7ahWbe`9uJ3m}UEM+GVKsvLp;McqujnnJ=W3cTectY_TB zP3Rh=vHO|<$fls*cnOmWbHL?cNcXAD0pw6{P|li{hw0N$!an2nEdb{jvBOq~{&<;Qe1zGx5Y~`&KJpDvZ zMZP_NQVL4$Nm+&brS2%Oq4O3BdhR(EWk|C13(Q0d0Jw&-KAVsUE=@t1MCR=s-xsG~sfu#|1L$+JNTGY@?bz;_C!n#kCRlkv_7c(x1a4GBLe zI3&*pk}cok316d9#i{^)Qjoh@#zwSo*G37oesk3T{GyQ_v6ewQ@xDWWd`ML;nU1)RQfYuV~!gQ|5=t!l^%2*1Lx4$z4?;8eOKW!6VPw z?N|R9@=C{MZGX+hYfGAtnA02RSf&-rJZge_Vb&Jc3BZDasEs1l zT)!PI-f}+14Tl6v3fy&MEVx-5eosBubsho0ih`fK@M&^v`YUt|i;Rs&0uWJfAwhCniBub-f6h~E7{04@~xpOLcARYmyL*yI|n0|{p+xHg9`S^F@g1SOQ; zk}&{hDagJlWu>kjxHIEhw=7AptaEXE%4L;13!FHmAkZ&O~ zAmK6vJNQw&W_7n4BM|elF0sB4uNWqww5N)5d!G0B%sQ(3vk1oxJ@uYEtExt_A?SDA1ZGWuo-AxXL(ju1Emh z6wDKgnQll1evnNV7cdtRd?+aVDQ2!6SOscQu>0|O0B%w+a;}6)7S(tlpg4Hed;qs7 zP`Yl-<^^;eh=BQm&I@;+IZl^Kl%UPa@#|sofF)0Ti@+ zAY#uSCX^#kk@89affV%MXZ$!ezk3ydI=LH5At8u@#VbTC!Q}l|1RjhrT?QbSf~*;Q z3&p10uOQH)^&~?8cPX&9lCb`2DYghSH*d8ZKnMjrhe=ppo2&SHDN*!N0HG9|i{$6n znOjXl2}4g`S^)`R6wEtn&2rUy;eKC}+-)lX+@qj~cOSZZFz`nSsa?jd0uWBY(a|E- ztLy>pK0I8}cr}0s3V1&>D_mT(79|XJelCDW3RW%R>#}Yf#68PHSGXBLLKFqnYxwRD zZff}EyB4@{4S@R;?B-KBT6`b<4%L%6S{_^f1`X7cI}7Y5jvV>K4b_v*3q0#xL-pkI zEnyQ6bSip}V4scG{tS7glX7E@#srh6Ur;@H@bL9|*kC=GQ5iQ;^nRlfDhd_sZq&<$ z>&f)K{WU68L`M--y6p9Dl($!sqM}(+8u%L3lkfi@{X;$JlDAo_$=x?%R1#WW`5pVG zdNRBuQtM*=_9X}_U;Pi5xB8|2Q0>hYKDp=?E&jT18{7{M=neEOSj-~6&B5j2;geIg z1Bj+zYGV;=pO|BT5)#xDb^wT>pz6Jd+1j@4gg~18D*-&DK;M`@P)k?f*Z=mB*LFg} zBMK~dm-zJq$8guvWSzac0K`&|6)$5&PuJqtj(UyuZUAuqqX_*2@qTtYQD;6?yHZG!%E4J7N;0XnhA`xp-_67HQj;nnsfTt9+ z>Mmnq)pGp9d8>KshlFGbp6(Dc{pRiQ_w)K0+YbPEMu8~Mn#CSBh(Q;<*LLDT0M9A# z;%nS~Hi^e$tbSGUhXABdpuzV-4KlLDb9Q}3KNG+U3JUq^t&huQ#iAxHzHsg^B&1TH zJi?mgzns?$fw;VlM*zH}z$Dm;g+_I3fq-Sp(MJKKQE+~(goSIU;2+Lxr~EMh=@fM5 zYuvtid*dktlbxOlAcF#HM=2ZrFz5qn(uJ1ik3&Kx1yh-fl`QHMiNN64O=bYHD7e7~ z1KWkQ!q26c$D>aGctyb{LkW|fYJ$wMTnOYRh5c~CUsXefJ`zDf0R>_HA{K3;_i`aa}R;dVVPO`TKP)dO#-|U7xcykYdC*qYh0Nzp%?Z?k)*>eup z01L$fP6BvGfp04bb51wJJvgfaz6hXc5AfbYS;f7YMcfgYO2=vmFIs*7iLCFR_E7;cqKW0Wu zUFZa$l7g&o5!*3af~P_B|Jn02fGP?k_r>h)?Pe;dNx#mO3E&F_k$i84WXG@g>D}5t z)EN@0DJbEaKMmWJfp5NZhpb!xe5GK%5kJf?dx0`)Qr(J0X8?Soz_8L{q$X~P0?7vb-vv9Ba< z0KQYO;UHgp;4=_UgRmGp{~UlH6f{+ovhm&8;5oasW-8|a{G>pY|8NOwy=3Sb+8rqp zz%L4R>G4mvR?oL1ux*&%1xPqCos3T&RFSe9g>QXPJ-OcZ!}Y&G1NCIYk+6x2*E@_v zW#QoHkM*vhdb08It{SPUyAMDx<7N4uA+K~?GhH>ll<6%)_2kNTpXy9F$0rwWs{A*~+k0xy4$Y*><%+1D+_L#M{X;#OAnm7B z^VuX4m4wZ={I-9pC!~mw7yk9;pH{|BaB$E_8yI>6p(GaAFygIq`Z_~X(o4@Dt&A<3{2Tq_ z%Ge`2#%e7dH@`Pp;%YPHxBBOmvB5vjYUy>Zv_q`t)IT!b#;s8;v~@nGj5cr(_8(OV1t6v1?Nt#gtH>OV{z^Ljr2>#qU^kTy{;eB~tGg}T?uJ2v zH3dZ%`6&^f=XF2{>-UQ90kEM!c>%A1n;pbOLNoPw;Q&rjFlCFBO`D*41|`hht{MTr zmV$t1Qr6{y|7HZbCw>xu9R)9oC2ahl&A9vcTl>gJNU*2iiI#*}XW z2*17clpcE{u(5GiG$fp+;B}ddHG6f#5`mIfs~7;z6nx{m+&bJ+!h?UJs|y|iaG^jg zSjx`nwv9#!^SktZ1mFw>W2Q*i^m}ne2qYc-D1fsR?8z6iLHl<8MBvP$@K{K2rC@2H zlr3;G#s5HOI@`tpaHAk`tR;KadIs)KagwZz2XKx83114ZL(4o3HL3LFz{dd2Q{dn4 zB-3@f{SJY;Dc=NefdbnXR&4Vy6dQOIhcX2;d?GYIDV` z^NvJQ)TEX1Mo9oJQP7dEvNmt?*#Lp$Aw!=4xJ-fTMLuunq(LVHjBIKIaD{>uZ6xfD zbO2ueAl>lrDI{E_z3g)FB}9Sn&*iCk0}Ds#cat zXaoX&dV`(=xJE%;u8e(q^FLL^UhP@|T&Ljl0X{UBbq@c>ZSDFn1rlyhupn5(g2VM% zqb8M_+P?tcML~CYehA7a{Wt`QOjo7?@TMS^&k&n)d!RD{Q{N4E3BZQ}qs~$`xK9@D zw$*?5MF2M`V1c~1BmE36{F|+Qm<9>AC|EX0#9}X{WTGYwzhIXRz?Xut{Li{%*@IUI zI4)b60l<%fSwn5uyew5i1kR-O&jfIrf(U*(u+G4cN(6G_z6jtB1)T?p*{9K=xM*Hb z6_W)C{uC@)!8gc1shfckN^R|50SKVrn5h+OVd|8Cz>k5;vjGHBFu+a3Y&Is~g0o!Q zF9$#n1x0+Wbb@J$4N91EtWp5M6db-QX6u@^#($-{4NW96HM2cm?YZ~Eo~2&3RqjfCxMJ*gW4SEQ8! zxJQBg3M*#Q%}pJFe%TKSAR(NB94TK~o^N{)fp3@W-T;W8ppPPdPfN{l_jxm`<%Iwu zDVWUr+owk#9*PnU5AIV0Ac}$l{&7<9VTT<8mHjFNaG!zzen^&9?(GQFQ;_#*;U`Go zpn;x(MdMaZta#K>6BYb+V;9%EhI$Hgjk;+R=w_NBnC`sf&yZI-j-9S(=sngjLp=rC zDwo#7273yW_NGp>P3jhkdJ3jBH>{Tp_Y`z)^H8I)df6F7A9Y*)ZM3wn{!RbTQ?NZrU#p^vW?NM3PgMDB|I}0P*O{^5AEzBbIR3w2-fH(`HSIOW43y9f z)NOsg3b-F0&>P5*kG~AFZRCZ(cdaS`L{qR+gD<Q!pyqnx!vnhI_Ov zo-X(XAc2BT{HU1cUH<2&m{SXT)c{DO;QIy{Gic#F5nc4ys8RtWQLr?VZ%{ISxB>#E zAA@Qk;RyvR{H)l;fMdD{>v00cbj zy8Hm}jDp(9Queuf>o*9*EH4(oa|-Sbv0`H)ZgfPTV|c(%NJydJDqoRVt!0#oz^1!a zzW}_TAk0g~v1Mrf9+5A5)A+#w56TZF| zKpF)%5@dWIq=mSHTJj-O9um?i7{qtjFV40zL)UPsg|sn%3<_@cm9nnwSKwPiKYn2o z0GSkY`X*+fE=BmcG&itUQvg{Mtm0=leC|}3h?;c3=A8guQ6T?P%%qhtJ|1iG!PCEB*3!sn!_e?P>_~v*TUBjS+F9Il{ zKo-W&PunTN-=0#RXaz_prr?va4LecdHV-9q2)AnopoD_R(Nd-~`^t0#40D#Y2T)3Z z<9vR5$NgxDz|HbL9RR$g;5y%~Ta;B)fPl`83IV*MAbx_BS*aP~e^H|?k&2K|MuF#f z8M8j@g$FR%i<2Dzyr)2NL&gq!_MVBF)w9Q$F5}M9%=>njFf}+<} zEc}Mjd<2Sjt?vrpGX-)Bt@)Ya1px@;h(~t=P)Wg1ev;@gHH*~<807sDKotd{NxTNQ z_<1h^qMT%9Nccj5t+tqXANIyQns)Oqr~s&@VD@w|dwMKaiV~)o@8}NTD+OD_tXY%n z!T6#FS7`MB@Qs3{-)&gmYy0-01Q)47PXIL(r1OE~X%(H;Bd}^&rT}UwXeAOemREBM zffs9idO<=R1u>(=Y+F@u7X;>~nDhqloq~P5N$y{_DMe7aC)3C_X{ZW^eVMA+L1S9M{sc zE?Xpr>Pg$nU+ZCm^<+eeM8hLJSrZk7k&SEWWyAHP$cNkK}D zh<$ld{0o87OJha?u%ck{bSXzH07Mk5`N`)be%yZ%fdlGE0uWQsov$jj z(O8Z9s-}H)9SsQ*3fkrMnk+;6lNcrTksHK#aeiQ{v1SfHVI9!bEKO&1tw6^Ej_R8NgWzH2Cf~3AXLl zpdW6HX}2i=Tq(F?CSp02`|$0Z*uPi+ZWLU)%C}}(@@6GU=$8{P6%x)-u)2qcIjt<} zguw8|7P~NFU1#EQ9_L3ou!Zv zNWlbEF|%6j?T5f6WwT`ff+%>vyFgd3jKNh#OLIL#0KpVQ=~%I`_8m=7!mQA4%K_Y_ zKpZAz^XsOBArN6)B7hJIGPGo@TkH5;2;5W-S^){66dXvgVpk@w#I@M${#Gjigi+wz zN5ppLmKl}0k}uO$Py`&yU{5af#bbZR|5#AAZegAyWTGo@AJ{4?MDGbP|%OB zPS~VeG#4cpJ4F~lLL>$HhEkS4V9GZH3d(HO0EnVsTN^RUi<^u;u$me!F$Qp-g1cSB zY)0F&4^cg-{^P>7zd-}_r0d3x8gj`$rlGRXe&5A<*HAtA$;47)*P-$f1S3N({TcE~ z=lJ7v4L8-hD^NWdYILO@Hds#%d$T~pYo^UlR1_A)U#*u7*ONXSTWYH7WaFVtrCg7H zqrAO;?H8<=X=Q}QC!4?{eSjP_2m7Si&|EDBg_yUpZ7bs zLCjmNb+(gs?$*5z(H%Ey*RJhwKRlo}kkwn>v$}s4o(r@&Wzr4+(G=|F`?sLuk&3u?YB{zrG6+9#K&Cp6~EeeiL_} z$@(4K4Iq|+9(-s*aww-5C1fq0z6U@Y1s=T0$lV=|zes-ibTR=DPr=do5_bM}Ax`kR zQ6PZF6x>m@VJ|ye9E_TzwAz0!BqUIL&<17`EsTfaerkNZP8V8qBi zhXJHekWwLG7i<)lAaJgGg#cbq5WHW;+ULbzL?FgD@(3iPQgDKIm*mDq2O*FUVtW+8 zOA7XuiP-CQhWH_%EWhj+fHVsFf92nvePZx9K)hq$;{ehrI36xz+2?Afq9)C1ULk-C z3M3_BCbqG|z^r$K86;#SYdY}4QhY~E*WG4V*QLyegKhkQ>Xk2BKc3o@^;1va~ z27C{po&R&_a$Vm(767s-NEcbLz{!L0X!?Fpr2uj$FyXg`*B3oibPc1IJg|g>Tncp6 z#mu1S*h~Z-%WSOxyr$sUelh!4{B$V-vocqR0OV1SU0(z+lZ_F@Ssu?(*ZH zJZHAtjKB})ZvrTwz@V2E6Hi!-@1-q{aS}*)L&0rzE2cQ#6xYO)jyp;L6jCtXM$CK~ zEl5F43V6L*2B3(7CxLwL_?=JhB9LV_*cw1F1^4)*9p`)Bd=M~R`$YgH6x_@ZF-6l_ zGXyk^9@s!aDFwCOQf7WU!wZ312kcJ*cuT>UzWk{nGFgs5dD9iP0NzoMy-do~ls9fd zpv#wjb^yvK$l#l-9J%fvkATsHDgnHw;DVwxt4i<)MIg8PLwiX0KtbwF5%b=aZjV6l zPbUWeA1Scf$!8EAyn!Fa3cHL>0Vt=SE=|e~UYd6RCEOo2#1X(J3f3JK@ves9_+h*y zxK;oa6s+K7x{*`eY?NRZ^T-JjK2s1r(TbgoQu>0xm2OU_0aQ}(si`$vzx4_Jk2`zG z*cm_-1grZC?r7u(d7Tg~Pxm zSpZ)t*sdjIK8=rFKnX*iUpNa1-zZS#hoZE6H5&iNwd%gz6+jIIJ9kLf&A=UaP_}IM zL^lAn6sYl@pkVcL3H#pY%5#*EJ806!^+y@Q0UYk6P>swcPj%=Y>lG*D04jjq-(jsLJ2m4(%LbLw3~^<<-n_L^nQ zcXURu)pxx=Ltg1Pm5VedKkwBH)sw+W2KBJPda`4>qNe+RE=8!Gj2Jn$UN&4$jxk%H zxpZ@Ldqk7<=KUMx?PbqKXifIqHvrX>Vfw%6AL_}eA)~Y$WbIT@Nw~z|w{5T_LPoM?`JAHpk=NT3Yydl zx-vE`+(*OqY{)r8N)9$_i12n@GVZFGWz{$at&EMl(!8Gh!^+quS+_OvS(GAL3K5hy4TNZS0q>puHittT%cze2IT0T$nk1G>kqaW;@H> zl@Qpc;2i|Ff&~Q|PV-NAojGd}aQVI`7=R@O%NI+T!l@2;SS$Mhy9>aI0=1D+_98aq z6H1un&^iQwh=TcF_~`k`{p}IxT$v^SF$L{Y#LV|;pAQJEal0A{2@(qO_)#&h($?d` zKk@SJFaS~t+P#sogkL=`p@d1(wC(|rQE*|5gq4=0=paztvspL*YYNo)!EX~!nq(u8 zq?jQ98w#W*e0I@GpA`rk{(Ln85>8Se*5^C>Uupgs0X5aVkpOHd@M$S#sug?jXP529 zNl^goDDdaUtgJ{%(?tnxR;}*?u&1E;aZ9G}rSF7*%q~j+4isGCXK5UE+_(#YMV_7y zAmJ1R>#s}LFWEKx!}+u{i3Z?E!Q&?)7S=2A8cIlXoE!tdiGsKS8IvEm8-Hu|j8J$8 z;4}q^1!9)=!x#?~nD2Nc0A~u^Pf6LcvCB`QCe=>7^#~GNDA;*f#8!S#NJZdb*1=c+ zXDGP7Lc$8258}#b<~!Xu0B0$9yjaH1qT4?XC7f8&J|2K81rOhg+1yj!_+E1Ok}Uu? z3U2XbsOga#98kj0^*0_v!Z`|NU$bIQOFrR_uyk|N1OVqL_+lVto~By9D4}w`P9lH{ z6wKxiGL>yV_aKn=taTCqcM7)i{k@yGu2e?AZ*-0TE>e);EMk)n>ETDEOQz2gNVr77 zrA2(x+HIz>D8Xd){-*#gQ!v}YlD+nAm5)H>yD7;4u23-gqm*f<#o``Jg`XXt0k}%R zLJ6M`+qfF{6a-u63BZGb5RsHw@7j=rnk3iH?>QuRQqVz7%sebd;IX`Aj)zkKT%%ww z|0|h=9mZX4-KWfa0pL0XE%?0qIR8}-P?M}g9Z~_@py1$B3463_^)!^n!Nbsg$q%|L2jO~6MHEH#ggJ}SKC}?w8%(hCJ;#u*Z_s&QMaFYV# zL3}wwWFmgHu3p$V1Hdf`qWN6ux{{7~)HX-`jR1Tpc-%_Lj$I6zi>_f;v~MOP_)(Dh zQNj$HJ&HkK{^_Gx0B%#D$Y1QECR=t#pe$zAD*$&W7}P_`dY5iWMBvuTuGs+mDKK`D zvLS7k;+wCdOQ8S)DEOej4~%eKH3cP@$OYs;LLdc4&Bd(i%mMunu$*=z7eEjN@9jnG zK=Xnb2rSi{`5Hhl1x~!@OyTAXBLo7bb;$#8mxAw?rEK)!bo@UZv!ze~Ar$2EQ-qGR z$f`yOTlE9-At984#V`2BiNpV#d3ETRSpk4B3QqIW&8BV49*7batLeP~aF2p6qh##Z zy(_N~c(6yg5I{Hu3;0D($Qv{q0l9m{0*Ig>;Jy{po2YOTfy;A(iXb79g2{X{K;JCg zX9&z1YFP{*iUR2%K9BBlp#lOg)aI1{xKBZny%n3*B{UlK6l|S-s^V|ZKu^K?S?L;= zEaoYog1=~mW4&vrr{H^3D^1I`d2bN>;pX&b$SWNUQ(Mhkvwa^?Pr-3D=X%&+Pr(u! z1^6czj1cKx=0>M6Kz)>~_4XVb0-%kTaVn73Nlql@-zm1z746JD|DGu#gk z=neGvAU}mOFm?dC;}-WHRS6)Pg7bVr?117!y%12_`AYyX6kICf57hnZdm!M_>uD7v zJfz@uOTI(w?IHItD0Te;;1LC_U98#uWy|oiu<>b|ssY4OFv?HFPH$4jrPcN2qrU=( zqriaA(S5o1p$=+NW{&(f0Pz%LR!P}P%hc%zl+->Iz+(#bt>Einbo81c;Mo3r4J0H` zV0TQ)_EvnwljnYUY^ep1NI?^22|E#&>4p+K7mTk1kVHYxWj5^Ttc^<$m@v5UcK}Z) z=)-3*jIe!xU;kNAPX+Llf?K-QY~#751t?)q$+;hpkW7I(pKUk3rbTlE3M89<0(eHj z4Zd@AS%}FS1Xgtz_Y1&t3YHEOvj^kL5)jzr*{IRnzt*j$P*7MVVF@=oj6t9*El~h3 zC}_f0C`X6(#r@5lo}H6}gj5Qq)JoYX|MMOwq1U^O@&H~^u>6jcEuEf@%XEuZV;ciV zqu_&&gl!dF?}-uy&ya5dAf1BGe92nBDDx}?@^qdEAcF#B{&H?S;7(Treyu#$6cREi z__RgDLY}T`iNL15o0|d1qF@T&_vJ;!k>dyqDID7zz$*$mxy#s8i#d2mNay7*0c2C~ ztCyGs>dIxJ1lzC4Eg&I>f_OehckGm8Qv|v%JKGXKE(MuJr^U8(`kJx0Iw;~ zUd!i6bZb$L!1uc0tpVgw@QqI~ymn~>E=xK;{~>^U3SRRrpRlcRhf#v};>T?up@4!C zzCyWt)0h?r$W3)=3*Zd}w&VG+_s6sF99_}-H3|RJAiu*_R7@>pqPStd=2#2W|zHCLcg((+e1PL1)E>-5grTep9lmWbm;(~l!7k9 z#Y{bP7#>4f-Eo~FfVUJlCG(@iF7L&QZ?tv|?+D->1$X(lu!?O?A!?Fd|3;kvlujiB>-p@{vfOLuP(r)=8iT3g8n3w!EHnu3mzN+ndNI3!s96NqG_$ zJ>(^RWyN%G?FI>-DaZ}tUo-DoRHAF>_j;o;fJzE7`967`6SZ(ne5KDw6#!KfjMKAb zGm1;_@M6lsS^<2aAk|jF7OBOKO)b(~ZIe5WAgg@n0@TH;P6*IXkt06!?OFcPx` z1&X+X@@Kz6>HvOHFpR%}zNc)!{l4Re{t&<~3f|g@*fmKgt|y-+$M=DR6SK(3^A1ZZ zHhY8$p2@uEaO>fJg9hr!*5Sz-n_I55KxN^8+imJyL-l0skT#mPrg=#a%#3OKXUHp^ zJ=aB=j|Y2>LG|Rke1&@0U_B|i^ixA;l;9(rrG>yv>&2z`#by_ z*g#Yo8uFAPoHzoDa_yF4&yjKp}i@g06Mycrs~9XYUbk16fe8au@Hr)m?ZVC8RIk zKN5f?1w*^Z*tqPV#t5WsnlcK26$Ls?ZP+(o_6~tF4ho|Ih$zT)lQ7GV%J@wf{VP)d zVhRFvW$c6TPCQv?vAow9NRUtvw_C?jz|#B4-l9qzDJ-ql(YfIS6` z6U6L%t4+ozq1&%40XR@_+FHWS?F!IDVDy=5T99yxf(?9J%q-KQj)Dn^5_V-` zU)fUtD`SUD-{R*|ajNG`NVr77yKN%&w&Qap)TFHWrn3NCrl55MUvQl6 zAA&%WnUiJ%xI)4HDlyAe48fy^!=AL71K=tJK73h8YRmh$CoQ2vx&S;V7*b-zikl4U zjG8oH*Ht}8@TB1V2od|ReG{H?d$V?zK7eZ!nDPz6Q_lpcXOw?f z;fFwP)8=yl+@PRbPsASj?{`5UUhTO6yeN1h$KOD*U_417D$9KyBzRNM(p$uq2CT<5 zz~iag=L7Jep!^8`E4jZZLrv=5Mq>ehn-t{nzfu#uTU!yRc-nFyfLj#EzZEmZRk3*F z?RfW>0`R3^72mewdFwldD52TdYl|SkkAg655xZSog+G5RC+%Gf;5G%Vmh%-yF?#>g zr0B^@0NkPA0)Ia=^{mDPXw7Pcr2zaXD7YYF>X-EAp=-!Fnk9e$3c8NAW|oR8<|8oF z==w592&BNyM8eLp{muxm^`?dZf+$#$C}lMfhPX4Mx7Xz50D>uS<0GI46^`6O38gLy zD*)W3VB+6X{61y}io6t(>q;6Vqa@GJpD zQ1F#+lj~3;=ZdZ&+Sg+ZBt%jWG@Ex@879>su;J!zV*pVU>@4SBGrH#Z>HWoc(pmub zDbSf>cxkpoP&v@z z&yZI-s%gzMJ?D*RkLt<8Gpy=igZ1S3DJwNPkL#?1ib92bqI%hIJ?WTnOfz@?mIH`Z z#EAcm^7fuHy{9SZ8?KA$Nx4VA=^yIJk(yhz(vsA-p_1_G|FeIpC&zY4)H-m=F9YE* zvA=^G#JtsphbCxew@XY%cbwz8`8(i#ctCHU;KnkxDt{U7SuK6nV<&)U3heoDkwryj zxa-O5L5TojDDd9JH(B}oc?W7zRpp&sknoU#E88ttqEU-j1VrY?b^~}s!B}50yWlH_ zzddhQ&fWtcmID1zQkJ#M9(QBvnsqh-5J$n8*HWfx^#y+pZ@gO|fOraq?36J38@lS~ z8bX8p_d>#B3VP;=Sk}zlR}o0Rf6Np>0tKDUiZ#?edI%Zp~*--$g6ddDI(jO_#9f6vZ zHh1F;FTIKsp7sSt4e%Z}%|-BDeUP zK|%%v?{!41r_Ng3nXx3q>;!;J3gTDszT2N6yHUbDley*qvM9(flCn0(24^BLLbrzn zfL9baxbSyv*gH7{eD}N+KsE)PqeN_8jXUmte%vU`5)yJKc-cbCwx`wN+1VGeWL5xj zDahhGGxnKbi6>f|JFr9q;57w(ocJWJt=E##HRzn|D+Z89K{UU;uWT8JM-Mwr`yzmR z3X=GPjPFe>LJ5WbF%n29pkPaeCEFboh_4}0$x#a64FxQW?@~0Y77qrd*R7TTD5Rj- zYY}@OyXc0Rl(=cAHGm=t4t0?+rHM^&E%xU6Hvtq=aCANIkU3B~1SO17eq;j)B@}F2 zCuY%Mi~Awa`Ik5mg1N5zTy$l#3X~w4^-chvC|EQ` z%zoXs%S9mUVxSWwR8Zg(D`l%TKE+d;dc~NZ2Jo4J6&FNof6HzeDB;|yxy}G8DahbU z1Ger^^g*C~zpgF-swha}6J9J!C*l`Mr#^WC_(H*`4L0n4#}BwXv~P3s3?x)jki$2n z+t@?{7obn$_MHXrm4XG{d^xaZpSS25yq`>Q1@Mi6Cs!qGT&uHr2$*bb=LVpL0yAF; zi(j`E55HIJ%oac`1*zwytS3Lv0421}@Hz(xbrcxxk}!AoUiccur|dls;5!9_Hc42Q zE_=SA1m_r?3jlsl5XXDcR%*)Q$s!8nE!+Y8q+sK0DSMps3%}#~%u5r%FAAQFqVqGCpZ@hMx!VBhw7klTRKs_5K?)P)~N))k!0I)L4I17M3eDuXhdA zlOEsGG*mx4azU`>Op8B5Ug>O^+f?(wZIuzIo>YrzSq~emCqSDspr%Q{a)IQ+k0-s%MoirPiX-AkngAS+|1ZEdUJ+$q%% zEpvVA9$hc!%2<^_)*1>4{huN-@?lIvgtu!|tD74AI@T1Sm9a@;lf&o}iaE_nhurl;0E(c9w2HXW;Nx>ps(st=5kG}-J=v4~9 zih@g@cn@CZH2hwAe>Nfn5=0an*m;thA{`#t7H12{!NjhvJ@$1Tl433Hk&#{h7o;O%28re(LQ7=gO2r2=rGAnb~i zjqG(2m*ve9{U1WYX$sQ!N?5ZM^OmE8X(8s1060@{&`QFl7Qa?TV1=uGEC3e@W{>2b zEawZ?B2Z{Mf@HJS1x5d0e^1ALA1YWe<{{+BA3Z5_KyQOJ< zNJQXn%G9R-E>X~-wKco>F#0kA{ie5125^~zreFE$-fmGn5vXXCEr2T&G#V&l>$W@h zLBRi+&ofB4N`cW_K4UN@7Z03us66r_f zBA`~J^a8*&3X)R!vXZKlrw9a&DiXkT3YG@S*o@3kc;3*#je)6HSK+1+aABi6`OZJrt;0^`tT&1jqTG~OBkQ^VB z4GI1fC?1!x6NaDg5J2Ih6FC3^C`d5nJ!gw&e?SQxY7BA#1X5sDCt+#Nj^O%ncaX|! z06`Qy=`3O9!wT?44+t$5KrjVw_@gqQU|pXA{=y73w9-v9`s;7NPFB;!;U+=H3t^jZM- zD0mblVT)h7EkYN)#@MS662d9iv|h$GRIa#-fMv?QA^;H-)UM)(vscg92-H(> zAhTyZY_O-`uRWQg#;(mm<^HMnz3OGdJq3gEPH4uSn^21AnMSJrMtOUO9*x$#KG5zf z>M1xV_nZEqr@%FQmR7r=%N$U#-%kFw{ZmgtymGMCLtd-_>)$nD{3M3=qXs!VMHnK|X)nx$BhT*{7w4PgMbkpGDhNp+BrL_s89K+~ghL^4V+ zlDK>a@Pq<)z6QGV!}M+l9C*Ir2Y{y(n12zmCilDI@-SlisGk6mDY)N4#E!o6!E38T zJAVk^83pcqk3nbg9SpjkO!@^0&nd`p;)l{JrN*Ian3R2{(L7igOToKUA{M{w=}83Q zg4fCcctOFCIx$O`zd8Yd{zcw*Ek1l~vf6u?UgJot%JH`dK8N1*5P z#Kw@2MnUa%OQsWBJrRK=uU(n|NT;Bnz>+O&Rg51qZEZF*1&~3(w&~Vv%#}Pm3pi=o z=w<*iDe#`pH{sg3dpK&+jPPFq$fDpXAN*U}vj~@muRbL;hlE!Y=<}_vqjhgiLkanF zTw4Ihrl9bmgt?w^!sTJ}f^{tcqj}p9Q364vK9rc7=pb6liYaBhSm<`=KV4JlNa~ zKm`S{*?d)LOlv%=XU6RD$^br7;L?=$)eSY8g%Y~DH&FplNrCzZJ~JsarVN3N3z7v; zML~03ys0}Z!uQgftrxmO!WRmD@patRCQ104@93MYJpfcwU@4Wb#*x!;r&3PA_?`g1 zQXmepV!PFR&ZBGScCT?S0N*HRcfyJ_>hwPwQNJ@y5kL(Ev))VC@I9XoqlBwV-Frhq zEd^P=G8T4kI)0&SU$<2iKph2Dd^eP5#j`z8LY&VyH2~i!7#YpC`8skLcloHjkXHxr zg94)~GG=r+`36c@teq%;pA_uuZ^c|CX}A|^M44+JNccs;wlZF^1|L#F2?sWA>I~IV1g1ig~`y8C1jhfV=s{J?sQVL$GN!hv% zrudOwi3^y69Cvy@ZhYB%`9q! zzn|y7m^l%^NeUwPr{o&1HF##u*%rzg0Bk8(#20Q%_%T`!{gv*sHv+JuAcTKl?Drld zMZjfxWW1PFuG@;&R?Sc@5r7i~E=Q=cJyjG8p6?Zc^%;7Y;VD1L@=nn^nZ6h1rY0&t_C`(6>d_0Fd&02WQ0=P&)YrcD0^pc^+5a`jycou+56r>*!Gq2EgpAfKbIczq7 z%M?82Yus*`*1SOA+tfM%T%kaoFOR>OD#PE;I^pqiAmJ(nF>-vB^}H(FOP`_Yq6ff( zf?>QzbL;avcokhs>y7#VJSiBXA!9yGy1Afhc)50@0f1{1baoN3vDX*jS&v&hLfI)Jm5MYpHC0Avp^QXBzxREe-<|JuUvl66e?DICPd?|I&vkv?qj3!a za{@Ll0&tB2hcYYHtI=fKn;2O%&Je(L3Z6{m%NcI;#gFvso;5WBaD#&9XGBc!?14QR zQp)ut8MsNo(<&ib;d?I>fxf-YEQW+z6sRTelcrl0G)2JW>DDCxf+*1Bd(s-I2u~tV zZKS>wz-)&2z(!P zW;rC>p~JDf-z&oY`dcKCIn_mnK6KH3fk}`N=Kee!9Aj3ZCkGe5JAB{evGYq+{b~ap454! zx9xAxKs~AMm^#U~{PI0i7OEG|t#=L8llM#_1gCSaWg*zKcHW;MuXL6eRSVuKh2S%O z;@a!i!v^cg&90LL3%Y0HgJ1IpEU1?a*OMP=4yZ4!oHhs5lgVlZ|3>+E6IJf0hova@ zLiOaCNx$eH>Pg`k4UKo!-zrf_s3-Vk|5Q)9q@C3$({0}Z;rIUq^HHy~ZLe7~?-8!W znvEa09qxyR^agshRK)CehTu+;*0@hH5J`bLpMBS|W|soGr*F*;+W`qt6uf-N7tmB* z>Vtq6LSzNkguyZ_Q%03J~gCXuk7x^V&o^0Wr*2Jn~yHNJ&l&qo3H zJwQj>FES8A!3F*ZqpLJN4kh@vkKO|bPbfIZ7wbNs5} z(Sj6K?*kA=f%t=neOpkDpBLsNtL_I7Pr<@eF*|v827b*o@m94ABv5egm5_NbP5k`) zOg`oSBs`^{<3avXwzPL1`YSd1?s^bFA_e!N`AevX_V`Wo(kAN;0Z5|2i2s_un3V2= z62exFJPaV2f=m3UjFah)auEn+buy4bLBL`WTg=wsSJ&@eCmexhIO!#6f^$QceqJ-fNYR3SiQ?T`wgo$1K@C2w? zuFZ}E$e>_KrjXfe`p0QDidpG0kV(OMdkG8gaROgM+4a+AkdQ^eB3>z7Rp=;>u0iSR zHgf>k6nOG&Tt0RS8H#}Y7=ZMU;w;5h}G_VyPSRK(UTLxZHkZU7ky(d+vp@azv7bKAI znu0b`zQydUf1J`>oV8a9pn!tP_58^&vOFCnoHW$72JnW0$0vo%rO)RF2=q*7X9M6Z z1^&l{?6Jus7X;Q!dLaYvDA3KeWK~)PO%PBvx@rpvg%m{J6|#MALh*~VyfMe@02ER1 zn(rahXU>G?D51sK+4ca6DR^RO%~m(^#7~B5cAXsnlu&TzxRj}+^jM4%#My6Upp=3= zB_bwS-DL^_uELv+kno;@o_8cHajD`y1bVl%a02jwf^fc(*o-Lyej>0(cdj#lj}%z( zb=-3o`QWl-#g-l}0Lmz^w-mGMeg&OSLgL0^87QZ~ur1$LcjbF;1m1nW>k0{zr>KnD5`(|JTQ)Uv1Mr1{R@;P3x8v2dC?RQFzmovIQqY|5 zl|5Xpa|i+<*5xu#LBZtyVz#f~K7Mrg^7ig2NccuU5?}eUe?+raC}B+}i93Kw3Xbxh ztntZ*QxP~cd$9+A?-Y0sT2AIPCHg619cQ6kGEn5q3v-e?Pb9I(~w{`hrFMBHdx43 zhPhUvda~cO+RJ}~2I|SUBzeJ#b^5bVS=ciAXT58vo_w-AUeJGZq$h$Kvg-Z}|EhFs znyVL$8SIYUPddGC6!7;*8>}Zs-Pj{I+hWCgR1_*TlB<^u*OPzkv{bUlWC)@aN=^Qa z^6}1*M5sH~xOGSMWKPFl^bhr9)7jfKx~$mYfJ(ysoqpLr)sxRBq-priKe8HO`Og0V z^HFzlnyk66@%#^HW$fry4{!hdS0*cCC5L+nCid%Xf|j`|T1D0ix-wRGt-WBcO5`X+ z7C(+^i12Y0nuQ4}wf0NV%2>(VNA=`4D`PA5yae|j=0u}Kt_wpR*PGw1jGgE`RK0k` za07&-T2C5Ad~_Q}3Dp-`ce;;O#^z4_g?_s-_OJitkC9F{(Gpiz?O*CQOI-QN*mLH| z8vYInvk_C9_D9CY7*n9BsXZw5GWxdKJ^W-a{Lh-xuLjFlA=}o{pd|u}m#hr|U_rsy z0!!W)ttmvn@bI`h04ynR;+@oKTLbaq@5pVZT4g0P40f;HsKSs!=TUO+tgw1;ep#UTlG~zGx zmvwu!6@kg!TRs3FrC=6sTUMTrK8S!z>ns_troeTwn1$R^#xrxKnD~W3f(-?AX%cqI zR{I`GSU+M%H~?D;Qa!DhmZ8o#1iZJZM*y&+K!3cH)%xf)LO@Ta#X|u06o|fv*>_*J zXaxMzGGxGkg6Siq?4!HsJOqrNor#15M+!dk6=*|3j;=yLyK-j~04EAOGOSriZ61Ej zJLZyBGyrD`YT8O!mZCoH&9&Xr?hybN3RbE~S;oG*_?_ybN6%%zm4Yx`DSNe2ONg$a zYHYw`NH{@(*#f>1b>4GV1irW(i~-lI2|Zv!}8l4LJ8L< zTEqkJq~M#Gn2igZrj0=R$9f3>yeKd=^|rzzOU_ciFOeJlngj32Tj z8Gs)J&bx$6Y0f76YObaHkQ4xCC>Yd6%ywwB!MAs6kMA;YmV)N|KpmTiac9twf{dS} zLc%!;;<82TR*#bP2prQsnFioI1zXi5%;Eln;Rrkp-1H2<1quW+_+}1uA-Il@>!Ohk zz@LI$uDotpkb!$bDXJ|q09>S?hA$xUpVh$x4Qcwg=Q41K0$VvT8{+lM6am9q{+W<) znF5cOQnp^j5Z|q%p6$;95I{jpnS`Bun)eVT><~=P1`tSr@i{3gbt-v-fTeSX8~|4+ z&iTm?xJJR_Dt^FJ@m>6_q3Llv7r=E2 z=H!W(l|h$9D4}!S+&lm`D6l&vVW0N2#vjqWC4KS%+@v5*%bHDFl#H(-yy%k*+@fF` zKf~fiw=uXqvN|X71tbJf(4nh{-3%UKjILp*p36%Bw<%CJJCtUjqKrjWB zjYRD7*fpvMY}+#KHGmKb{P|Ha-YP1%0kcfENdbU66nw1|F_YelaY<{{C0z#YQgBkv znhD-D`+yFys=7l4BD+6H^99&_;r^OlLnR*sE*NPw^oPt7s zz9&GdE>qEv9JU-U1`t6(e||WV-v0AjQK#ULSK^nyK?9wF@?k9mOIpW=;DY}~QoU=a zQ*cW@Mo^TddL6+_kCOikd8M<}y_x!+C2L!wPQkpalzP};r=VX46Tyi&Gu=?Rf2cII zUN+n*n4q^ueP~jTTtwGQe)eyak9V_cn7X}Bya;s)9#8p2|IjJWzB5KcLC3)l75nSi zFZ-uX!AAX48mmS(4Mw=~zhFMCmfenMJJRh0Yp>Ko^KSh!cgFS6kiFyB0tK1+8_gSifcYxKbJ!zx^kGrxdu3l(1p`2KZhwu3>cm z5-C{IlfR`pxMeT;D@`$K*GT`bWvEFM813fgt!}iwgMinVS2B=HLGU&HWO!pBekC*~ z{6=F)NTHzJZ6QvV4yN_g1r zWOD$S6kLzAV)u`i;E896+8gBoWKm#t!-}=Zo`pXTg+0|;0LZ2wgr6-l^Wl8_9?Wc- zVoLxy6x8(-F_+!jhoNgwD$SLF=M-G$hhKNQx-3mZH1#e7+Y}QU8ew0+r>fRc_3kr;`h}h3JhnJ#+Q3r}; z;3WkMviZ#Zq+|G{)6k~DZ6M(l1$SQXZPS(ivG(?otE4S}*Ayfb3fY_)EAeMKYwgl@ z017B5-Dkxv%WcA+xUktn+5>n)!P?IJ<=^S7N$8^WmsZHYTMB}ASh3m_e#Ho67d+|! z3GXP7-yvdwZJXfl)_~n7lmHY`5Unp^gZtX&qJ&SX8#@9hq9AjmkdWi^0-a_ ziYXXY$EN}5O!YwtBeI)x22eu5s4O9C-7Q)ffut>IGEhoEOg^L+ZsR({?(GWT0|n{vLdFK|!ry#$<};K5e5Bx7FDtgA%o~66Ie2yM2B3_B zR+$pEtj&n-=o&^pDUyM53Kp74m>{wfemDtGxZfQTK2e}1ux4i(&B7CnR1zgU0DPuk zNE0!uHGYCy(IwGKdjj}EL609&Hq=;Hgs#D}!|+}JzEZHTCvP8akIhD)*_|30sGy*o zpM<%+*2QnnTenH<4GG^U@Jr_hLEer&ff9~(_38tlk^=3oRxG}5-W&wBec9R<6HVf+h3#l8jYjaI0a%|o)0|3-gFrUxtzw)gqoydgRUXxPgdKhGQUs zg9hr!^`ANjZm!fEg37{D2cvq|P(A77V=H)TpjM8c*@eY_hP=`VeHAKrQFQPYswZvk zEvbhM){}L~`vqUjMK@4UxbErFdf9M2x!k^&`V7&_5r|%Sx$NI4AMYqrGxc3>ave}T zY4++D{X;$ZcDYdFOmGVWR1$W3{mcHTo;;)UQo}LEt{K7s{{{0=^L>If&oA)mjc%ZI zhQr6g{a{XSpwaw^WZ{c%76>GSRm*?{1%7}KrUAf~g29#iDSQt&C9PZ0N)-bbKy&*2P!69p}oh#1?pzB2+d-+hw-X9}XK_}S*;{;`d|t7ohh zB)CwJ$*YWqBW7!$gs+p_rvh-LAitNCE&u3z6oKF+>$L%#pdcYz%=+eCUWtI}?upX? zxKS{GAN1v0eqb#EDGOUn2XK;tqXl9%@cCU$1mas}$iOKI7Cq!|(_KpN_fp2^b2A{p zoq{WV{4wn0KMn=*ve=^oz=MK*{E#d?MW;M8q&}y#bOCr$aDksOue>Y}*OQiR?Pdb- zqF^e2?Ykv#;%Ss{aZA1ocvCR1k2ODF>KMNHOov~c1qnVB1jXAhB@N+Vl%PJ@bT$BA z3YLu(v3B||{1E6DFn11s(-hQQvtkumn^qxEHl&*#06z+v@?-Be8HVE*%cG-9W#9}2 zRaLwjxNA}vN-)t2o(lRo>X?sQqT5Wr;$O8C3Iuoo%s5$O76_#yxS6ujf@ z66Z;y@i*V+cRyqxkb*_yc{4+lIRhmO91?E`30Ej6yewgJPfW$XqEGI-8v(dVL8F@z zX8F?|cW`c;-?SLOH3|y(BYk!E8KG!MJ-Uxy0^m9Yi}*KRV-GJp+iC!lTMFO?1uM#V z@0wNMW_MU#q72-mV3DhoDcm>4t!N(=pJkA6ivrgPQucD~7yP{B^=R9206`Sw9=2jZ z*Efzt7p>SweFcEq6pSA&W{R_owu&B406 zod+SXEU2|Hfcq2-FA}r%9k=0DLwUC>83?7omT$-TX~*>zD8aD9#kG*|fP%mf347A~ zt_cDsTkkUg5JrJYoRHngP{z|B3VZ9U0}xJus)B@R_Zo(O*grUSUJoFGf}A2DvphW7 z4Aqlu@2}qZH)x=qG%6^WlrVVOAygKwOj=X#8mcG5x7-nINuM_m!Cr5T{|tGh)2`sP zU{YjH3sg^L&o-%t4c3!yq9+In<{NZFMd9An>*{60^`urWV|BGtjWZBU+`InYC?D?* zV{i2>!cKLlo;|fmWH>_PltNO(#?FMECh{Hq_W(2%tJJ&yoLq+pwem_6&WzZ(MG4y`u@kVHXV z3~!&!TZLa7%odM63Lu$+ttuk+_G%k^FNIW9%RmYR>#p(7!z~YdYi#p~KL!b@6!=e) zvPP>5@sG3nclYA}(kPhHO3Kn^eVmOh+ULkdGXT#h*!s|l-PoFDj)2QjHFE&z6s(&d zWS^?X;a2Qt|0WgyGAIa-<&R+j^Sx0*rL+8&}LP8b=-hAm` z$--gyA*tGMhZTTq3Ortk+1ERJW}<{fPql;qawurgTFTrqQ*jTyer+C;Qn0cuRpDe+>I9_=JCf4q1PZfp-+dEtjx?=e6V9?+>dj8 z@N3_-?Oh!K6j5Nurx8C~bnPO#hUYG;oB$M4P?IQOoi)=BBe0?6C}#jA6u2Akht-VM zcxLmFl{GR@O2M8J{C8ThJ${@1?pdr0B)q5K#t}jm-2B3_BiW7W0ovTIoS9EN+!bt$-6eRLBpJziC z;vYrZfJ_n?Sy22gcK}}~Xv{xAX)8k? zql-S&d#VS3uN0K<8Rn%^0@@?ca#34P02LIt^b@k7y~dA1VAZsI8TdxQLcaF)K)b{) z2$bjsctJuX1*Q2yeh}UO{Jr#2>xegi?-WFfrEGVB&JvVhdvdl9fFBfm+bd*GjY_*B z@FJj#FMuivw(*YUSx1nimyorZ)O3Q{LXScjGO@$ZB3 zeRDqmwG^nelQLKTAzN`m?z}Sqeo}CbZx=D4XMa3rw|J(?SpanuSX~#hd}-rqln_4d zlMI;6CGRJP^J(>8^9(gmJ=y90xT}!BK?C*V!fzb~kKEcXL}g)*)baJMp?Y%u$P|IS z?s|6wr*4|~XZTlrwnX87ST;A>iiP@>{GCC=R@XO2QxiWB*i7UJr`V z&}wC1hp@E&uiyqTA2pw8t0^viW`kD7mZjC*`TKq#D`RgRpCC9`Xi$chxt`nD`0n3= zu8fuM=_XK%8}=NL8?Bl&MEJNCRn`d9OH1<5%2@NjruF1ED`Wd+ofiz>tL}gnxf-W7 zt2e(}85?tDkouunw<-{t{k?g^h>y;{{{!^_%qvLx~!yV_gRzW>EDj>^F>$(Q$;jX6X8jLFlWYZeFJB!p!Mc!-{;~WKXQc zze_J|&fkOoSPKf?l=EpYrslYm(wegOJ^)J!R`G;)*AL_0)_YYmLIGG&Fn*?pZM~!E zg04Z&yz>J9LJG!Zh*;W!lr;#H3@?-c5e1K52w8x$7M`SHI`eKAB#0?cy&+^aEO@l2!I0xQ*T-`hxsPBCuFp@&0_$L6u4T7SmEYr_<#Dv z#5@^rqCj+5!gMvebV5TK7!nu*3C?I1Y;-?cJmvPhyHf&yQxxRfwqeCB{cta0R-o}y0PYkd$MGur?J#{bq;{qw z69IToAXS#I!vXv7Unzd%PZ{u}V8{wF>pDJuI7+aa9G?UUUKAMLld_2&pI=8{mbG^> z0B;IP`CMuJ0V~fV(EP`?6aYRH#MkkO`tb_5J>ocLN-6+f3aX}w*;WO8{1SHN;y!0hbcXOM7)f;M~xz))*fT%o4)6{iC@ zOTpLAe23V0cieg|S6Q9`;2Z^0y6|h*Y$iZMI_Ee%6To>2JUk_=*t6RJ1fo-FW#9q@ zDn?>9$Zqco1YDY@WW=$#VFx!O@RyqQjoA# z%<9C(2N8(Y56XjtD-`Iyn~Znf^%zZcvaihA+T3Qo=1B`Sh??kZ_ZNg?t0I zZ*pUCU+Y_Ym)8JpQQ)j1WSV+kw9$|jN!Ats2%;eJyO0_5jKv?(y=%t40dSjwe15k3 zM$f!Jl#uJy=q-R?3ik4~1JiB<;{WMAv(sfDgo4^mB4(Ku8iEpnhMj*033n)XcaE=6 ze$u-G0)o4H3IW`upgTWM$Ghh1Ed&+}m{J7b9t9h33Yn|DhZzFO(>oLcxKDxCFfr@( zaAG3_9#y}Vflvyvboe_o3quhC8J${{?yZLnb_)Jl z8GAJB^FvhbuUWpYUN+n*m{L4Sy`ana!-$62?*BK+$NMZSME$jK#&Ogs_-OZw{-INF zz-ggIBeSeWsMxo)|79C2_W2%5ou342B$c#RLAZy*f53dyw`2Nfc2Bi5MK{p8o3p;d z{qT_9KsUOI*v@9n1|hI?SdSk7A}RQq%sbkf$|?{DT3RXtQ50-<;Kxh%yM%uf-VeE7 z1qsm-3Z$vW;I(+yc15YS$@4(MneG!8{$fv5}enLVl1&{frwO?6gM>M20O}*;? z#8II3TEZsH8;m;#Ek|r`wBWB*rSTNx=t$Ux_`1C)Vbr}TjR7Q3urO21M%cRcL_l<) zog9Ft6pVbzk58R<>n8%&y1bBqL<({bh*&rIPk9KGy|~f@5|Su5>MUjPM=n(&z@m;d z1&~aETc(Jm^t+CG<~oUUn*m6nV85o6i5rVgqJ%_?Ud;idQqbnHkoD|RYlT4C*K!$1 zqrm@+gv~dt#y|hF=S0av!ZQkX-jJ{?%enY*c+>&s768&INPEl|0j<4kgogBSfk{gM z85E3~AY#_Ty5XMr#MPq|0Ay0IhCdF+3Vz}@3v&wP6ai#W@Tfw1_by zQm|dgnn@oRPDh}fN2j&`@+jz+!_Q#~j2eu<1BXHx$fv+Sj~^GQKkzaFCYwUqLBb0P z&hnkdW{vS&ia>sxxIKWE6j<=N9`3yz@O!W&VM{syctyeBQa-iqT^jywt+_Bv3BYR# zBrzhE=&>Dl(ln>m%0K}H8R24PcWya;hcxndaz{vbL%}k>8;JVlJV$iV{iFOk0eDM6 z%4)tsdFYu81ZGM0bq4T`f-)7p7w}hg{0nqo=Zr1@3MsJQZ=Ua*ScQKdEcSQl3ZRIB z2mE}Tx?CYHKv`v>3=~ta`kaLATa#RXuEF{;^#@@bm(LMxDm`S?Lwf-DK!IU2pXxa|=@Lpf{G>((K2mUp zFE;qu`X8%GrH7yPgoH8*f_O*M#w`lB8n!<4?ggNn0-s_lcDrN(zJ`OrJ9`88M1lNZ ze*VMC!zt(*PPNnS1K=|S%HzbWwfm=e2z=YU0tRI}1_P*}K>n^3Ykbk_D*~_kP8kBAmVzZi zgsgw_I^0w`l+=1CfS(lH>n7m`avsHh)=hi!WT1|M4;v(`@~{K`GTt;ea2O<*%_DD~ zb0_k{781Ssp?dP2e&Y#$g9hr!RS{bR>alfUs4OggE?4gwswZEZ`yv<<6@(85>R;aE z&yZI-!d^YqYgjjJR8Ov5(X1XeSWoWz=_SahGZ3SqaNG6f^|Il5vi~%5^&po{A&7R$ zmH#)&$D45fiTe3ZyBDH*GAHjB{X;#ecXX0QKh>g_s3dIn;+OqXJ=rACU1QmiJ_8Z% z{_;OyK5E@~Ma`l6lX1)AX7_B_1)I|wNZv`vVysuHp%1~hyO$=y4P-$<-;UNSTggBJ z0Sm{&Y5*)L$m82lwm-1?8Un^0btVC@qM&QOl$oqD?SsH!`z`_iLJE$~l`zFi9fl#W zKCwgwL=+6ov0_c8W;8`0cUp)#B#0?EFVBC?9o_NE55*{{1^@{Kb;Cr=sqY;8?0Mkl z5={V73KIE5%t2a(U(k>$^oLIdU`@gLl@i9vZY3Zv_T5hzu%RF~PQu2#srE(Slqh8i zB-m20hxZImFSKC@*hijb0PHCE#+Oy}YIzp_$7N^i(E?yk!4GXQySny$E0l0pJasAn z2MQdYS+aG~k$6b^!#ipNaHPO1LCh8m_qu@+E<3-I0VfJtXj?ItoKYVT$iEys4HBFw z5c89DKaTvg1%b@T!s!59D9|Y3n@XHDi$=gzZs807t`wy58MGhGd~wUi`e}b104FFA z^X0&ES~=o+GW6Xy8E~Uu6+b9fC-+(pG$cE%SY1dsNkJ>VS4Xp^ad_gHf5yp~08UY` zf*(k^YVadGtKp(}{VV|P6kOlKk98iu*$EA4tK!7j06ZvY^ql_^mTBrCFfg)hXH7XsCm7xf^)n}SuF`P;+S&hHVJbnMVv06r9W z@{j1@M&nx}Fttu+9spkoJoxMPP`wU#3PI%%<@o?kQ{bu~X3?{M^g;>xbBblakAfF- zBSeNDYW}W! z=Oo;ln764)25wLg!mq(hl#0Lkf^8F4Lc&c79%maPMDkAgaVKB-rI)p7)y4pChX;64TNdJ=ZYq9xv|EVEG{_v$Ax{L-pj3W+(Rk4H~E?@3!A92xqrqQ9XIk#I4>nR8NLBs}{_f zyzmZ!eGi`eGvt*{`TYLsBbA4gp?WgQ;Z!|ru%7IA{+1x(Sk5t26proYQ7;>=C(m4x zs%KBWa~9FmX`cT^`FLM^%T&K{Nqsn~CljXsqJO9-TMU|~(Yd0~1C@l^X8f{$swZEW zozqyX^u8U!jdlJ5=A+hM(oIvpbzNt4#}&TWx)1J$hx7(=zHG%t1up7@KtvPG{Qx2< z2-W2a%FajaM8N25y8{5CD7ZAimNoe_z8L~7++NB+GzAxJL~NMW0X(m4cFMJbkno6t zD!y5yMOF}Q_Lgdz9Rl!}f-o=sx!fznKhCS0FFXt&h63AU5gV*GHxpgM!?ONI06h5( zIK{UGUDg@@?4(3}m4R3aIs^;Zko+Q<0(>fJ6%B zno3xkvP;WQ!fM+b8AzgFWCpKTuhfMj@MG6Cb4W<0AbP!s-My-STMb{nnpyxzp&)jX zH4_R}%|!`Up3JudkV=7crIE$7eYch1@ZTU%-HWN?%-tYbrAu`pkN9=*Raiy_n*-1S+#eN&sY0FxXYXzS~OiWV%*yjimsxDJXK{hoXq(Tu?$#K#C0HP%x0c7jyc$ z7kAR~2K!k3;6FcEYnC2t)*Z|0-z{G+#WLh-AuZS`pY1snEqacA#Pja1P zkL$^lr5)@5ijeE_}M4oKa#LN@!|1 z*B!tI3aW33So=oj@#o=lYHtq!A1SD5Ct;7mTH~8fF6)a7luYx$G49I04|STs4Q&S zs&~C>sGjWkBSFxyZ&6DGuk`KnXUHp^3iT%HFIw*yh3d&g6Z_V~2J1!8{ zqVUKZm3rB5J$e1j5p~Tp_qmAfUfu8CC?9X|&AaM@XLap}>d8fGe$hYFlT&i_HHPzN zcT^JA{g3@qJ-PJyb&VOSB}))KY5Xg=LCi<3ysfw9nJyYT(aP8m_YPry-w$ME>~4d} zf`ifPL(wu*Xkvumk-_IOv@%xurE@*`&C1w2 zBd!R_rmKuYi(Hkvb*(qQTN%6T)e!Y;&ARyrE!0wO81d2h-8!Ofoa8kKt&E*G^%wf> z%Gj+5dKx>AEXhJkT+{wX{bq?PpU*5e`I1I^y&dZjGuHkU_8a#9|Fb98e8Df0Hx4eB zU6?ujYIwot^R3fV#^s<|kH~Pi6)Y&Y%a2*vv92p_?hfqh5&^)Hf}&RZxXArK@$*6A z!Zi;8SW&Qiv%E~z|w=C?sf5a83O0dHHrctq9DBs??RqcaYbNz zWQq)kDG0kKW@B&J;|7eX-nnQVQF%K8RoXd^7}OyY<R!vnURL0|hJP`4*au?|Y(z7O(rq z18}5Z+Zr)5(Al^cfko2qGT=l(|0g0A(O%C3f$qzmCP0ES1>b6U^J3pWUI`WI`aA{T zLP3NApDTT6ATG;2BX=bNaHU|-Ix%xNrfG_X^d)_25`YsFoO0wPZE^s9f%)mOQZfKH z3Rdu)Nhdc`IfWATekqiJlN5aQ5V1Wu8d?ZU2)msE38yH?Tqa@0`77|BwZK4<3c#I$ zt-Hmn|EidyC?Q*Flm@_qg33Y7Lp+0+LE@Iu$R4;wN8_)@Tv ziP=bX!{=y7=HiK208UddkgwCbcHj`6ax3v@kqy9)f^QjO7Op47@8{3m%9MdK6gV1) z*stvbLPPCp1csH&%>{6tf?1>a z4zcGZ;=6TQLEk(87bw`+Tgs;F*KLauemH!V0e=c6g^Aegg-*E$bT4_B4+$43n9pZ! ziqhM+Mk9yvDCo>*^$3FwenY_X(fXGFE>qxhmLCC|tc^c$k~R}x0SKVrW(5Bt zYpyU5B}7UTUIPfE;3A(<{-tuL0Rk7*b7bHO1*0DD`f=Z+y9lJ}`4>RK)!zV#n05GZ zWDWuu&knu;aE$`KWgeU5-fj{Cz241w3*b5hE{gnZ;llg)Ngyyn`5k~86y&}XG4oV4 z{Quy3zDNdcQn2k1pRU@`tr86>FYQhtB;2CFXq1$F8@0I~0(L#cMF4^*IK^j_7bQ=y zMd04B<;4JQQ}EhH%0{|;#y^UedyXst5KKW+PdopjZVJ@aF>EhzG7CkI2nIyceJ0B7A($dyPpeWhm6M%3E);sbQ%B`w?AW&Mq;4^>-3SRR=$P112SE5eA z(&xT4e}e`(1rZGw`h_?H1P>{k`7`8|&Y7}wLFX^+ zT~ViCaqqMB@QJw0@8qjLZ3=yUb5;ZDKW8>7{~scssLsK)g3|3>+EtJb@!_dETw z0(A=7&G<$C&?)HrWP-+w-l_7a*bn?4+hDQJD@otxo*F}6AIw5{lFqN-2Jv4t?_NdC z;5}RQ&<)i4#DQA4A0E;h=oSAEEKq8NTYh1yb$#$jzb8PhYW54;0XnFd^Wbz-sAXf;U}|78HlA| z^h`0ce5-`JkWQl?HHCyY3R?3;aq3%a9-twecRbY$Ks*JPiunfd2YvB>ob>C)<^U2X zn8{x{rM(<*0ww51Op*uil!7rUrL1l21UzH#Tu+4-01_#P?#DMXSRaC4{(Y&-mVqP+ zE_dNa{LNaHfrg}|9ncaIk|{_TE@thH`N$)n?s-T7KnevD&86(z50!NYBqhyM1dvLB zwW5^0YZFk5K+ye8tpKD^aCDZGMZ0Xk&kJ#yZ)M;a1p{ovY>(XWrYIrZ{dQ|eNTxTE~&r2PF=2z;45s2zYT3PQR{ znW0Vqe*ZF2w?YQ8DX^a@Wn(-C;PNodJgPk;O zu5lOflVQ!6HA(<-Dd>N~l4TXY{elv%M2_tUAdiANULN*7xJrnCV`!sJ0P-owy)0(B zSNh=((6#VH8F)bfx{P7g@ET`8pP)vbpOCd|tOlpG?*r8j!AfbeUO}Ro=7%ev& zfvL&IdIKn>z+REhlkn+?i-y7d7xn@0o`RsSd~b#?FL4*DpJuE>3VC{aq(k3K|CZgN(BX9`wt60#8&%s--p-ExWp0eqoAajrEB>D1pC z0l~Cf8Td-U`+-unr0p0f0!uDk8UzUy6fBn$u?I`menMd8YSY00zENOp$bW%`Y&wX* zq0V!L0H~zkK5v0)y_<=PX!FKBhXVLcfzf6mTVIs=4khHoevpA56tq7jVUa0eczUAA z&+uW8P({IZek6s-1`%$(EgJ7U96&V%iG9T^(#BE^4e7w$wWZAii2-X^(;GEhf>Tb`JyD7M;)u3@Ty z*C4hB#>S}%XGvt+yTeZA;bLS0CsGi)K{IMQ3SWnI{&=<5?IN%~G3KN=@*UN_MNu7IZ z)U%GB5hALy@zcLiKHkdp8R}8)tmG!8Q0U-q& z`KnUar`tXwP_6lR3M7aq7{s>(dVSX*838427Y0B~!RZzfc4XkFas=j2TCW8_LP5b# zzSGjFqbm_8Hl8pQfRuv6Vlf-DwP+#&S96+b1F)t*hd)0Xc6Ggvz|7}aGGIf&Sq%xR zU3L*yO4EWbO@jnm3i=0HG9BaPIN_x6q3HnZDDcn}GM_Cjc<#?p_n9*Q*i$fvpAykW z<52~=hB0%MbpSX}P+TKq;$x#9B5>KiPzD?+=*$zM)1Nj$!0h>bT}W`EpoNu)jV?VG zjzHg7;YH<|^&g@VWuJ_TLR0JmZXYY&asZ~ zp|IUI88|_~AR`fbRdf`Wht&lS=RkrR1%GWt;}flqTd_|C&Uye&QZTBwkZl;-b}|~0 zyz|Pr08UZR{|VoNb6@x{1pI!Cng_t0f^`G8iTrMvUUBiXldlvxkrr?OLh<)%-$G3OT zHf;j{J`}9zWXX0a8spN+Zfg650DLKU{#nQzXRO6#x^QfP44kGwm+zImy-o}N$ECjr zS_BDx6a=X8MbjJ98=;FfQL``vaE1bfyCP<&tGyJ1SbZY^XDO(3lduZDOEdzl_YPPL z;2Z^!gZL!(dp<=7>^@R11LrB|vzhNs|K%U6=+?VMEP;dz6r4)uYoJZkaFyX~YPS@C zKLyo%v-v|7Q49^q-)r?U02e8^&3E~fn;LWxff(hH%K==X;FZ6G4bnM@Z@wkvwK8y- zg4r#sS^vu`H=qQ4)#MeB5J17BViD`>zN-@g>ks*?1Q19;D>(^EYBX{;0)8EKuL5v| z0*kFew%AtN4uQH7wi>`y3chLxS&%{j{$6UY*M1FvYZTb?GfnhAM&X~VJB4{NaGe6r z5HZ`g`WEgStk{0T7!qz!(3bDQF?@bLez&(s)nYAxo4)~k3Fq>;F8H02YS4TW0JkWJ zDV4Bj=h67Q)Ooh#S^k>!Y@<|46Q_!Dp>byPSZ7T$}9E(^F3BeR> znJ;2KlRG*i5ZK0k1Aq_;8u7+hRgz^Q0{Mw6Hv+gr!Bsv(W{8|}76O6CRW|{+OM%jP zzA4?o>7@vG@2Hi5dlV$`IceAXzuJgEzi08AA>lp+^E-&x70KEW2=oc@-2xz#f;ars zMF(g3eF!LD-M$sT0}8wqh0JY81#UIuwb9%LAdG?|(IU3~ryA~=rcP_U9Y8n*IoGUN zuJ0*armq~3B?A!@lragLsw8@b>dE}@;fElBg9hqJovn_O_63Z;kIF(n?Gg2^p?XrX zI(bsv7L~>bYK4ycGvt*{t2RRgL9<^*pnCGD!RUI}U_CkN#+ON3y6?sZzfRpWrd~E& zPi{3{C9vsI8ine~#-?Ncjq>s8_Wdkqa^u7*R8JQF5B)PboL+D;CL?xl~(OEilUpS5M;A8&*^HI+Y8m*Z!DrX$Jr#C0c9fteiA-#b%U6-<9=f#c)bW})_ zfk+Da^No04j$NRPK=zn3M<5}Jg8lq3bkAln4-l{w?=uAuO~EZ|F;g4w0B%i2c) zJfh%nK0n>7U>$ybF1_0E7=XtVwB(ybzS!~67A3^YE|P&53Oe$$W(3c>;grIRb2Q4KOAKN zAfAHC!$NjqK?;7P&sUVQ1du?%7&qQ($nENjuHnYQG#PkG!B}TrL>C$2_F3>mUn@vR zq(F(EqVhRlE}kKxwsofvKoSKyIU?5OfF+*UY-2T51R$9LuhSy-Wp&whbPfJS9mN1r zD5&xlve*F^@K0y|T?I0bN`Zjy5us715rh(!jSZ4OLK+1l`6AK$1(U}ku*<_-3g8(9 z$$atp)w<8B2+RnbZw(-wg7dtN(TIC85&@>s#|A(K1%3}ito+DF{3zLMe7Ou{QZPPC z%tk8=#_uPKy~AxGA&UYHew5O_cB_Y=A$^$SXa^vhf(>E({HP~O)*$d+#n>J|4h1g! z=+S+7wzzY!cH~G00MCB|_>u9i@;IeyW6m;kN zOrOwj#2xNiVoxUk`4l|l{|{Q5COtw4Zeg380lc7KT)B{`#dOB+x-+k-xd3=cfm<}+ ze@A~Mu9P0BDY^o9MZt|_QZ_>EnH(BY7o#j0cuhe#pX94%9XAz$rvd&aAfbQ)6FwEX z@N^x%3bp!B*g5d8~tZKwcZ2Faa1BDb!uH*Z;9+;1(P41f#><$S<6bwBmWiRX2_C-UQzenf+pqK(BTM6?` zH}8)?>*__G07@u$!%ug5+1_V30zNGUdI2b}dey6tr^{vL40Hl~BU%&rSRQe4?P6P{bM^`l5h<#*b$*@R@=DcYcQQuAmSE zLS6jMK*ARaE)5m4l9_e5gCmXFeHOr13hFjXnYZewwJ4#jF*^sKf&y!PCY(zCd;BF( zRnqo6fNvBekFa85dm;V+nI`7RKqUpSi4wMXkS_k&&2+qe0TRAbpv)KRs$O-gwE*-F9Lt7rjy@|N_W3B)&TR`4V_In~>OPZgGK=q`(=dqB#K?C*VK9A{w!MCR} zR2If6n$^38>dE+uIKf!a8Af&+if|#{68ZJb@xA({x03r%rca*SMp#ppj zU*|P>0zgcGJYV?~>Bm==Hj@2oeB}MNmWOYo$$*4{gEOqz5kK`31U9xj9}5Xm3R?1G z?)`cT@T-VbU-!iUu%;kQPRyk4!*Bzp_0XB|0Bk7O-`J8pSfSYz4Qb+N6f7*Z zU@au(P6#N)mdbz~1rhwXo9@jl1|jf6bpI(N*i+!_Wx+(7kKyLU#J0AH030aj*`9Z_ ze?DD>66UKcPXgdbK_)-bq{`9sEdoPhhbIGYqQFkmip33AG(%wh=2{tWreIGX-?@75 zs4oa~DoaX%1Q!Z+@b$wlk1xlKu%YQ*sQ_Fl&=@adNzPACqlCsAwxll;}d#F`9fRhwlooUUSSFXYRMYYq}GH{B55DyVsv}@`K zlrVGJ#SBPr{|(@a6W0dY;O<}H;Qg5ZJSg~CC1%Ziu1-M-SH9240^mtO8Q)U&jM@Vc z0)>-0W&`k|UoK>JF94jQ;Ob~Awrx?HaFp;# zannlx=PA$);%nTFJjEYTapt5~04`9lfiE`L_GsNElyJgJ{xtx93VQQB7N>QYUyVRj zT80c!yw$W#9@0@!ch?(b4g^)#i}> zun-ciQV?Cl*V1VB+>M5GuaQd;fNK=|SS)1CCv?F>n%va57{GN3-tgt|xvA;65f*rK zObLJ+6m;ui%d(O?pg>CE+q2rLUp{t5|U6f|9H&H5BRnuI`WU%v_f;S_8+WyNkL1moL#qTAkY z03s+D$>)1d(XTT>odS1_s74F_T1Ch~1D%4?5Bdp0otAY&1;3I(biHe+Q&7AzTQDK* z;^<^7BPp;NH);s}kF!xtH&V!z~n?4LRXf1U9& z{L=yn!lpjIf*Ztq)IB=1(A+BCh96d2j`wX0_rpVa1I;$!yRtNM{E2SS6Zdz>0f?j^ zV+uc?UG*;h*=eyuqX~d03Y2(LQUB)xTr>>6+omaiXbQUXoiti4{D?pKo6o+LfkzZv z*ORiUnEU{L3hj zf@bsik~N70cR$Y7HERtZiGtUBve4$QpZ1}Iw{5ayAejPBdoi2uAl`sLr(PG@Ktc)y zlVU}zUGP6PR@_{>zb$}N3a%LmnRB;*BPij(Yu$DL(kN&<{rRl;-HWc`Hw!N|1b2Xh3<{dI;%g1tiC>_Eh%+`y05T~k zH;}N@3O5S`nm%9B5kM9NE%!>8?z=WZ1O|T_(g{E|1vY2+{MNCZULug-S0MvA6jZ44 zmQVATtq8c~Mt6pU=M)rOl(5*7iMZvXbi=s|fLsb<_(xQ*)o&h3SnasBD}X!-3_OJF z=zcf+@^8+;vC07QDR@vJVjE8%!e0VC_B84S-~|Pp;)G0NU5_4UNG9SG8F)!S#ZECZ zzjpK<0-v^=?hXmBDCkiuW-Goe!tXA+i+1(^@R|YvUq$z2`?qT-Vf0ANo&X9cU}_RJ z`$K3V0t5H9>jmHq1?qgR$3PpGWCR9x%$I?;6g-dQt3>97;l@~g$>rXV@Q#8iemd~L z^f3IIckZ}jeE<|v5Xukwnl4%zhK6*o$E>~piYSo#YQ;R>4aM(NC;aTH0-%_J%?o&0 zV$!V=C3KT7l7SKm-t#?Zi;s`SKUwcq-|hzqr4(%4&i4@N-UW9*c8(GC2k@SPg|B%5 z8c>Oclwh=E0Dun^%xNoPV;)!I|LKKGh71JokpiW!5;iJd2j5F?`c=z783jY;2-&;9 zM{4M=H0eUzAV?^upn~5^#>H;9nUSUBJs7|z3UbONY+c(7T*q9@-!cTiXA0)6wPgzi zOwvL_dZDU06u=h>ZkqDboHjV(pIs$a`C$OQQgEA}G_54s{v9P)jY^k+3JM;d5V7RV z&G781kzLOXhlFnwoVzAuEyo1nUm%;RJ*ogIDJXXlvg>zr@F%XMmG%e#-zm5fBWBHn z3a!vJ*wl0!3E&3>`V%Bf@7h`1U$IkrEdx~)EG)5R8Gfzrq6DoEH%381H3b*+#mwWp zUNHhC!Iq-|)KK8v$(prXxNi*tqhj>O0H~#4$UQ4&zteXJ0y+VG#{&3CL5!z_-Maqm zIRe9?KFUBH1qO|UEV#EO1~V-mjDrL-gP}?a?G+UE?q2hMjNOM{kNf)va3eEhMP_D_ zEu%iIx6JGr*|PWELiL#q6e@|9_MnmoNu^{Yl~kG%(IkqDe(!UA9w*=Hcb%N`2Rt9I z_g(krzVGWjH}4p+ZRg&-%4hjT)Jr_?u0r+XaOKtpe}e|<$y-ah3#2ZB$EYl960BJ7 z8mcE%@*fE@4D-tn3`%M9XUHp^z*ntxZh0j2LiOa+4ejb-gY{(pj_U+<%f2X}qHwdl zQoU@rp1kC@P3K$5tWZP^z1sg9ZUmrNd_x7PJ#D!SuBa|`7cY))^W%4B}T-`b(; z5SS(kXK({qP*Cwj#O~At;J1j{SlI*smJ~z|=QDHE;(DQkseP9k0uWNLm+$@9zWPHB z0=k|jdPkWi3Yz{de*%rHm5 z{{6+t0HhQI?iR73CfRs;Ud_U-Qvk>)&{2`F%G1#{D4}Gc-c$fq6lhN4yBf9+#qZjm zeL778U`;`cOw2r&G{OJ4;f6(WU_(KZVm_7;SAx4Sdv%O7f&^O%3B1UE>PgYPZCX$77F$L|M^fO%^G_*2lTOw7`{<>BX2q4Pjf009&f`|YatX|F;#*C;K()0bHekeG{?M zHV^R3etpjo8vtCRK(9GJ?XRh1HEPo6`#fVJM-iMTQ(iP|&Va#L~sK_{pcG?X?XOZc;FSpI-AY zYo^5zx9iWe0#r3Zi?+*d9GqD+Jy+D(?hvn}P=~Etzo} z%Vh`@78l9E9SVL-7cp!9^FtB%+~wvjNVrSEudbFXE^x*`1WqZ5cLRu`U^qX_(z&kr z3

681DgakAfI=K29uj#=p4i^8R}PL{s3tL&7dtwH2UxQZw|d+25dndb03Cpunw3 z#b;C&8pNNgcMa8(n|@XbqJvw0NAN?&`9DKm>C96euG4hglBuYkjID5}hYi+~8C3}a zhr1cQP*He?In~RC>&e{HQ+3LAE&7h=j@uXhjq>*Hc1+S)IX2=bswXw>{-%GZC!e0* zs#}p{a}kw<^P_&-21`O-PySl-P&e5y@H4`T@BIhNTm7*6IK7ffIryI5ux0CUxF7D* z8|XWqc+=_TXS{#qo0)lp9By~!A-t;Yp3x}{3Gxlk|PIk z6x3Gm0UUJ;E%dAD`#R7Z5*|>nXSm4`!98;kQ|+}BKkj-YkC6g+N_EgclS%=_6t9D>U&!rkLsGrvao>uy(PO zeee~=p(cs;&p89&B?S_GfWn84>3HIeXV3n205T|e&*xYCMf^l*kjiX7xo&~+l8f_s1Y zCe$Pa!4*eH$fsc2H%n%J-RB4beU}|@0#HD~JHFYCkwJf4mK6jE?uvV=waG-!rEjzggwyrG~?51vqS=`jMb=iwJ2p@@QRyew%Owk8IF zsH2uH0Nzq?RFiKyB(k53fcMS?mjJw@;L#H)YyG1U?we5ZRJ{zKn1V&weE*%kKTe~B znDu3H@SXzGTuU~pe>wg?^d5c36%syBpvO-`J$>{#E}|b@wsr$hLV+h==$g z@`Qv63YIPsvvXR8hf%`#4wtV0sH9-geLm+v?=Wsp>2EsR8e5>CSfmsdf+;yopz=ie5PRQ9uXTBI~c!q?fm?F zA>j)Jw){w|UR?uJ&^5Rw9rOcGO~IbNeEy2^bzI_ZHJaiNpoRjo=R!6%WX(L3u;pZ@ z003Vp(B!Am-Wr)a3V{Ig*K+WUf~mYrcV9Z|AOc4QhXg`GEd`Zlge+vsE<*$?Q!Ii2 ze5W9vpL8&7#1lMQ@2$q`+z#e?Qc<*^HWGp@&_%E7WyAI4ugx2DhL81*N7U_p;lEMd-szF9I(lkX zbWuI|IOaF~Lp|B1=}28e-R!xjB-|SN+y1GZOuv0eH>0!g7Q%J^1@l(NjB2m9{z^;+ zS{a)=D>(k|`+=;CRlLwm(BkCQVzkV4$G)reg0766rg~iPjSZiLh^F(kh6r!h@}91O z#Q`gapp~%~qeJS+Kdg*ho_1Pb;M)2VTI4!?S6IFIr1>FwYux~1ZaNY9an*LJ&QVO(YOIZ0WGk4UaH(G6z z0LUni@-fvr#p?L&?b#$-4y-8Hzf#KPD)hOA5T~IWn~E)@1TUEk7qvzU`xT!axq(c+$0YH_euRz0Gy)0hR>T(%gSzyfKt;MIXF$h zI|aUD@*5u;1QwSjrb5CQ3T}mpnRVqx{Eu7O+$9Zw9R*F>3jaEU9`_VXkZpefz@7q| znvdx>F{nrI)JkjOt!URY{*GGv7#!Z`AY!jC|JQ~0nhB)W;;rV82?fZ&QmaU zmKB@0SnCA>sg1odAi;rxx>UZ6k@dK52s{oskO{z%f@Uv7Y{KLOT!uv7otOo{iGqWH zLiWDd3tX&qP*Hvb-~t8vhR9gr%)qUvNe^BW$$>KkA(j$0IA$B375}CxG#e5wQqX%O z-y2)$(ngfveb^!gfC~kWcwfY$);_qnG!jPM;i51PR_0{4f(U<=B1rA&?Y%>@5Hv3MRFcvaM4B zD^Qc%@@KsR;7h^Y05NOcW$RT0#?`781Ms7u@`adn-hC4PA1b?+%Yi=yC0DH20!?H5 zV%O|-|2-rGP|)SOgmp;RT!fmG<8A)|Kp+M0Jo&k|Vb_`?@Kt?734kC9dhv-yD~7FV zgFvgsf>Hp%6tv_UOFjuZh9|8lW;HJZaFv4XwIZfDvtkiS5RA`|gKHFA;~TRps{A^E zz}f=ua!3fF;6W=H`(pmKHv;2d@2>z5O2N>9LiTx<$rJ>tHchJp5JtiBG%@R0o3;yq zJIdWZ0=Q0r%^bcdqtDw$2=pFaAqU|UmsBvfM(XL_@v=r1UgoG*8sRfK?>iW@Pb$3ZUhP^ zAN&g7E(Pv<7(;cwofiVb-cR}lAc}&FVSEDQQxX1@?sQnW7Qj6UtVT=Ng4?yZDBM79B(5;6J_7p^08VM$vc;G#m*D<|%*>F$6YP(%J zcYXIoqMm}T3-teu^7f895u(%iocURZ)`1opt`CR$UzJR zRTcbUwCy$i40Ff}Z2<|f6r79`vZ~W&Yf+OjltnE8#8I$|?@ZdOXRn0_=*BK=1>gY% z#k}jat*;9nibx0?)EYoM1w~D)nE0+SekrKV{3-_t6u2Fbu)_{dUGx=|06d}KypEXdxql)7f!jH`a`2Rb$#40Aly$T5<4z?ls68YkQP5_- z6|1xPj30Ni>&!a`?jjfLj;!i^zQ`VIR)$7 zq^#EFBK|Toy<05@DHKRuct=2~-g=a<%0Ip{B&1TXd$x#$j#`CFs~<|AZq9W@*Kod~nF@fH6pZ2% zVzruli9%rT$aFc#prAZf!tD3W8je6loOd@!$fRIih>WfL<&cDchSH(#0J11}6~`~S zCEyLKNEjM2@6m6=m{X3g1TK&_M+=2Tpn&0zLSF-3Wf$s*w{f? zw^70|tsA`{A(w)3DPL@$@&eDca~mV+4Iqz#3j@ULrNje2mm)qcQU#DtL3xUhNwd4* zGJWXQL45!eP*8bP!j7ky4n)^5!=pwHUQ;khYRxQO-DL~e(1mFV&?%hRfO`_Qtl(4$LzB+&s3dWX*`Gf3%5(1B`6bAz+rNBl>$~Jr)i~CnD zS7yjT83lWag{;8G@c>FV?(e4o3FQ_Id$p~)T9oF z2aEzxO~L2q{B*Mg7yS_!clfg$)KFlrD`cg{8n{WHPsNRfgs&7Vye(pT-nz_02}ygM zGy#00AdMHGr)tj)MPRM4@m==IK z3QoC;S&LIfIH9Z09Blw67m<d6kr3IxM5v^pT@8SV6E$Sa-FaUFDA)Ap`F^<g#n_BPdepcDCKeH5xE2l)J^f2b#mzMJSC?A5&m zDhcQL{i<^;r2;zKbX@S=$@*C z-EQ8p7=ge7y~zM9C=h${oqMx2#v;(_W4kE;EGc+qE@6!$HNPV;SK*Z$2q{S9yB}2j zTrvQG9t-`aLV}0_?W;mIP9q0*J-rJ#HVuH7f>M6QeDv(0xce;on2`|x2?ZlFrL4K` zTwT=7j`gpAg0#2WbP3??F=5##Z?e0*%K+&VU3f3MP)^yB}28 zeMaEcbLmU~))W{m6SL~EkMXzXmzBn|0N7CA*Hpro#Z!C@?^OrQ24G8p*9S`$FnLEF zYLdm~8aX&cLAjb0d)svD0|aJ%kDmhxrzud1;`>~bTz`*1ZpGQT0M1a5Z!YGWa7Bzj zV1dnsc>wGvP~&I(R6e|V1A#RoM$HFcPr-XW2P@!{i8}&1;wB3KoTXq}dnvn;JOP(h zp`zzZr*v)tN>0|i~e{e6@^i~coP!Q9Re{j!o!aWE2 zT_Tr2f-?ol-qx)34ZEhONvDQMOaNS@K*EP60$h*a{*~@)mn;R~LV@ibDLdRY5r0)F zJWyW-;1UIA`N~+kSoPzmNn3TQ<=`>}Qxo`d;JnqiNxAJGEQbVF3VxOenPcR3F-jQo z%y9((HwyOfKWp3<3I3{DG=2R_0PYlQ@shBh?{Dv*1gEZoRRBCFDB*)pIj6ScBD$Nl z;%We%6f_OyGnpHWz?ITqqgQfpg@PJ>%!*U(Ok*`4lCjh?yG5c*F%Co1!kYb?CMEjAWFDker5xJ018?klCWt;`|-2Ypk&oX z0D%-t_vg#9?`GiAO4DNWCICSc1oAaadzP=l!@iT86*dD1rr5L@e9)>rVuH6d&z@gh&c*#q-5C{*oRDd^2|53*a^d zJ@_QHGPB^92pDK@*$3bb1+jbr*tH99@kqR zS}J1qyX)ZJLuc)5Ik-oG&2GL6N4x&`TVwCypo5SQO@Y!9e&To0$j_*r^sM@B{x@i# zo-7M?(mtjzMH7{U>rH>wyN2pXql)H&!=i;V5S(!6*PkJ;bXE@7DcG#L=n<+XpV`#a z!v^cgy5wr@VXe9;qM~rBYa@%lud(5JGHSMyAlNL&9Z~hL#{WindnSMOwqCH}gt zZIULx;QRCj>UC7gj*X8WfPOV2k9k_cA2)`Av~&^s(c@qf1R{GK5CVv$V6#BNid666 zZ=QqOricKg|{Z(E32r+{@=5Qx(FEC-J%=)*T!v^-&gmjlN)i?@b^ClshRld=VDoE1uV z`NYWvz*7o-s)|_H*L52Z@Y=cF7C;gOJ>E#!g$+IXA@F61)+qqbD0q2R$UYr$!e6(| zlbfFgkW9fAzIy9pY*8zeaJ+e%96YCB=1mE^-rn&Y0=M3HoPmTC3YPMLv>^v1_yZ%o z^KLr;sT7#?maw!a1-yXfM3#X)fHVs3@kK!9zw(!%CKYySa~8l03hwX&DP3oOo`ry` zQm!1NQ($vh!rDA^!>^qIIRWP&;UxvVgQe`_=IwY+*2&Fg=K*9;;J~-OUOxTVYSg5v zE3+H`WKu99k8h__+a5p2b`0w62q24sReXl|=#$g%%@=;8L=Ik25aGa&yz~pvK~3sb zcFPG8vMCT&N!XoZIrw`aFUR@EXXpupQk$ZWe0%|Qw0+FrT@ z;57xEItbaF3&)!y(DePr%K!=~IFc)4KB^~h;j>|uz!kt73MQYFv0GiI;6Ll#du`nS z6jAW5KVO_!)A%%M()7nUa`2Xd<9vU%)Y%vDt#NvIpgSbIqag0Pj2%l*-;WX&R2=sJ zP)xzHAtI)1vCjp8zBzL|0lcRmj8Ay!aQW^?1n#%*dj-G;3Wj7#Sm!QZ4kK_Sy;2TJ zC}4d1?w|t(_^+hj07X-bAI9e#;vITNcc!W zufI+$H@x~9fqVTf`vdqyLERWBTh;#L7X&PxZw~-aMZrqG^2K_~iYf%2&6yAg;4=jq zw~JWmx{G-J_s5v_K>)r`FyuPlGR`Ur|5^8qFOY+33RceN`x?l+C8$ZITdxH}LJb9{ z`ifcRzOz0E#2&J^3g9aRUW+B{^|YIv5jgpE&NTqvC`d|?Fl(1vT@i5K&@%);Ed|HF zi&%}Nk0AoDGRx%PI|YyUnvRD>H3|rvQn(!o2|p-!&DRgRtE&IMKWmLF48Ttc21zCC zNboJ()o^FqlIs9|Q84{1uj}_d#NXbBved!>)KQ>tQNk9!bexB-;lriRa&Xd^j8C>K zm9T+Z_f?{LGIOp$G$e4)Ks~uwIbXZ!*VtvKEL@ks>Rm(iWLu3yL1p!ife2GEY z{x{0o+kcXWj`+xBOH@w|@%&ByP)}O-FxAa`b;}c#gz^7l8!QR=_~hZbI9=nJ#zPS{ zx$-->LCjmtXWHs%yII!HnPWo*gjcJ<^RR>oFoI12og zvk#(0u3v1G>dil`j4k=7rW4$1{e6TshqiAR@z%|B-K6t#^M*3CGImDTZ}g8VW5Y+7 z=?2XYT8@^ue)u2t&nsge=)cg-3921~*rDsc!~TKsHjbM;QE!98bT#y7n9{gFeqrYH z(O_s|!TN=F!X<69F~LvZRvHK-aK&aPu?())Xl6F{JJ{T81Iu*d$F3Y$#CU+fN?9p)wJH1MY4wAiE&nLMDM4m(m#etjh09>Fzwbqgy zu$x?gz{lkA`2d_LC`gyE?aR|~DU}u2ssO-63cm6aj+-0~>WLEa-(<>x3k431#q3a~ zn35*0KOD7nI>byTw-xA zY^K@DQUHDw_?#9om9?38LhR^i!^!~oQ;;!4%zQttJ%ySyQsJi@1W=HxC}YD5kKkM5 z+w&*okPt|L3Ey}(K5=ynN@%a{QUM@{f)!h>Sf|(D@HKqwxwR5NFa`Jb@{^EmWipho z#!lxWfU6YDXf0!%gFEa)K)h7x6M$% zlkU|3!YK&xk+DMekhuuFm{}$VHz@egP0WIH^>M#eyVyH5kPtz^kYl_Cp5!4w39_Gwe+asUz)z!} za&Vi1LtCY+y4OtH)uv?qf-VPz+DPVR>|0!rSof1lO`o> z{s|z8g8VWObMMgkJOT-`1it{>qu^9yYj$eDcl>*}5u{iLAew@Xd`em8O9pzVryxh+ zKr3Td8QWk_!P1_=+7C4Mv_%E~v6BbuT|+$u>aBig+b`O>3qe=MLw|<6(h2XOBbdD4 zdll*_7!`Q99yZuhP-Op7dt{ro=TW&IcK=AdY`CZ3)2NMt;`5JJB6>Id=)Y0kUXgaW zAnkZ@57blO{PH*bLr+1+(nY$To@(_##r~L#-?qVGpV#4ET8HX7WdAycaQc72ywwFK z2k5PxJoquX169xY|Vv=*&JU`3BXiU49Li0C9@n=%^VH{t6>HF6M3 zLBEY6Hf8sYttestyN7KcA&!E_!>!n$n!;=Zrk!$W3*Z3-@80s^l(tjxRL|$%x3&Wi zPl5C)|Ae_Sb2UmR4%SuzkU)XfK_Ro6`)f1;{ii6l2k`J8fRiN?9@5^7fS@Qt4iYIa zwU9DT+e;l0m^?n910+16pwS2ZbsOZ0M@M?59P0?+F$IG!S+ciX20cd!CKG3O0`P=_ zC*!4jnbD_G1Uh!?)fvE33cm8QN{eEr>md+-uUrn2C`jOkrmYLg!=1ZxETfen;TZ*H z<7F(av*QGmur$!73xH$_`V6pQk1B>5Az)#)x+{R^6!e=aVM815Jc_`9W5ZMcq)?#i zBW1ctN^NTtAupS5&$%s4!7)*>XS8ziJrV4yE#nd#%7p@f;!E_Da+f`TM| z)Z!qkZTJ^g-E?OU0O=G&zmhPUty8j4g6b86o&a7_z)Gd8zoX&+1U%I`^a7AULDXN} z_{-F9A#le1wH#zp@QN>*u5785iNLcNA-y3Xivo4NQrxH4wf6{oxFl2s@QMOMCS{Ht zM&r+6L%juk0Ay2;QOpnDh_QHu5{}PS>kA-q{#ia} z{b3NkHBR5Cl!I~#hOe?@O|^`)QG(*B_z{p$LBZi}QnoVw6s|Hdwm6OiP)UJ@Bj49R zGARTlWH#G43cyDS#vPHd0lLoW2#hEkHyXev3d#raErA*@>x00xX00>7Yd3#5z6zWWFu`?Uhldu1W{-K^UH(sXub9Qx0R1!*Ue#ic)o)nF~ zqwDpfYaPO!Z2tr1t!}!%uU>qs@j`S1c|Qs_g8RXo-arYBh0J6B!ixyBYi~InfCU8~ zXY!&!*fkG7M2b07xh}nIdMoi{s}ZV7tb7Apj`_gEK^| z`i9091dP=x76Fh^u;`wYZL7Hb6oHC}z!yym z#Q5ghzwq{I0H-N1?rt>!_RSB zWfg$HE)%nL0PHDfW+GyZY&=#W5HNqo1^{O%Sjo53`JoW4j6eqk{fz+5Q4n=n%ElON zzl(r|tZEa0^AvP#C1G23{nS7pKs#d#00#RatXSmq&iIR@ zQJ?dB0bKkC@IuT+oa|$X5*DP5H~_$ff@!_2*rePX++89VseTB+B?>b6#-s1Mox`1b z3hA|SaG8SneBJ7=-Y!>AlfqtR9EAi|3aqACu);R?8zV5VmF95(ZWO%d!;P_RK13qm zAC-LqfI9_}7czFL`_tVB9N3d(4#0zgIfZ<*Wcur91ipP+Z3)1WfV?OnghNH0YykLDpqVXZ-pyKHM?hcyjU4z<&{#>tw!81gJ(>yH#it;_ zpMr1aq%7OW&JZOCnkb(E5J183PGV*%?TX*idt3wU00dHSO(@Zy{98EWSNT&2L!gDtA@dyNyQETu2FEq zj!)`!-ENASbaJ1s!7|@CBQR`r3ugeK6jaO+vH4xh(h!*5KJFrbFbXbI z@FCOM2bu^JFR8c$;5r2hc?YG=ixB*+;o@Q83Lu<Z7kP=fpHz3u>RP%t1) z!ZJtu;J&(;xqCeTL{KoOiIkn6mSu|)G_TLP0^lYENBAtC?Tc&h)TY~(rd|MUQP3@1 z!uBfeU4atLc3R{OAd-R--kI^Z^*8)}(DC>80dSiFg>_=KXxw=G%1X7#^#yQ;0&5o$ zJG7(~?r&^)rjmvl_ZB_d)gK!d^Z%{{{`zlRwu?()pxTgvTdU$N1K}hU&@E z(Dgb`ozg|9p6q1g_h-l}9r4Q;odM!gmry;~eU*PbY_Oi}m9tN0*pwM(P*J#KUqHQV zxSl+$8Km?0=X-lZZ@mfpH_F?at#nwo(0%mGg=KpX`c&U|+M2KR0V1jyb;0eC<` zGC#;7w)OZP2!xhfMFWVZpmV$xTO5473j*o$j@}25K*5auR&3$iQ&tEhG`|wx!-QbQ>A0hDQ+1`f$o>I`2Z{?_`or1^3rexVA0!X4@1wSOn zao&t9lyLmS#zz32Q84|pgdMx$SB^lKtHEOc$rKE<=KEK+m?%Y{>nxWi0G?Bz_))}; z?AFAel3`_cp8`msAgev^YFNK41|@tO>yrc^l>++-Ql^=39>3VMqb!~QNTWdIyo62n zvo=5p20OPU19(9}2>(cm_8tEKfwwJIJqM6Zfr#%yQQdJf9tY^XXJiV1mlQlX&1Vp< zxHAwXgl}1%3Lt|5uck8gJ?Ja`&?`tYO9PNefx=5Z-1y>_21>}Ro%I4h76oRHrA(w? zgbUCIZJpBryrQ5x9~{4Du^vx=`g+g%C4g)S5;s~gzg<(lq9#>$F3A9pLqS)ugazm| z!(9yr-=${)$fclH7(ZshaF!2Buo|lV3P2tOal8-RZ@D7w!MU);G#fxZ1%vsr?30Bj z@KfW2u3Zj*0t!4oNtu275%^Pb_~w*c0IwQ@Zl0|m()`N`|fQ}LHTqnw-X0hCa1cfN?Z9LxWIeMByS9{`k6aDI!72`@C? zi<s)@V}C3tM;uB zIIeG24xo~PjOJpN=hkB|0@X5`3IHD|xRWYk%hgBEM_|?39hCq+QD8nx#zd_$aMf)y zH25QcDhiAegv?LxbQMa7)i(bG;4=j)_|(tlpLZWZK=sJJDga+7h}V#^A$3Z)lXdVK z!_NS!DahutQ6IjD#E;6hW4eCWqly$V&dKdvg`=lQLeo;`fL&o0QJjBBq1!HP| z0;r=Pb~*n~&mJ}rCHSbQ*8w=Wgp5y?^7ZtNXAjk(dU8q6>{g5an(xX%1NG!Qt+s;U z9V>dFvhefdoO;(#J(;xriC|iE>J0=RIOYBs@=B+;bD3aI`i?WGp4=FeR}UMkCzC1< z3oh>-Z~zsBPh;}yWyAHP|FmN|soR>4Kr}kN;NK{3ukokLI{TMTnSkm^&zHaHAL_~2 zfi{Xka6 zuI)5L;8HSU23qENw9Kzw(3P<#dsqw9j|h+gM_h6rz0d7ZDoD#WP@t&Ht?J+Pkq z!^+sc8D4_?gSSO!k!xt@;Ck~dz+m>D`VT~ z{YL+|GPW{$wQfdS-8Hnt)%SnYKP++O^O@rVALtGl?fwz5G5Wv5{(1^S`Tx zpNE1%3uXAvn$t(ak5N))*}CHw^eoBPGQSG|3kohNNZ0|B3IPH})_uAHu%tlKPr@c> z-1kSI&9n+R5K?eMN6IeWaK$SOM9c1}K!S*Z=Sd>g^S+)wN{Hxqx*Gs71&c*|cU8w! zR|Ll1S=JqZgaR-AjnicEe%zDVUU6g(08$FVpYa;FS9@Iee;V4PCjc1*U#o=dme}qa zYSOTKDRN*%L3)-IJK5(~83O&Ux%PqtYYM6q`OKW^uDJHHyS=4102>OPnTuG{^4<9D zy=QNqBD$+M_Z`guyt6c~3Fv$lrixGcBUAFU3+i2@rdFL4m1E!kT|*F&BZ3-^Y#u;7P$rJ_vi{>vnuEB_=c-4d4m|pJRnAe9iIoDB)n6 zbUE;%pnrmt-P-6`ia>#`wQ&fPx-fDZ*%jU>$OV0&C7bYE{c z7Jx4WW>18yd(yyWs7Z#cJB|b3N5R5*d^2ssL%2w2H>yAm{3)1sM97NXo8W6mzI1Io zBm_`UW+h_n=cnSqzjlfzwEzTCFo@4FXwq2?KbK1N=V}88qTqdF5&L#*DDI0;cU2Vt z2&O>E*^&+GZ)%PHN`l%-Ik-xJRUZF1`QqONfx<^oI*@RUg4@}Au5;L5_SAf$W312$WxQV~}uzf~qF`Yo<%vkqDRt?wtT2f&$4j zF`L?WHSX=$=QYs~z)cF;@~KSLJ7!)+2`%R;V%^qV!FTH}!52BWN5Ne_lX+%GwPC19L$n@DgM?@bx_uQh zgI#5AsHY&ew*7*?K?6Mn3MuonhmPK*fC~QmD?8S^hI$Hm#Jg%AI3J2Ccc? zIwg}@3zjXm*o%4!W}oj|4;$<$Sn(xTd+CylXjJZB30AI`4fhm8g{upilq-BhG(54( zzfs=aXv;*wuMhr>P*1_RN5APGdJ6tJ|{_2xpjfnq3lrNM7ehyM8KHCe%W z5r9|K3>RX?EHj_Xrqlg zmI6qm;Agaiok-n+r?%ZH(_04M5e23({LlyIc^^@e^gNZ819(iq_Vp6BEpUJ>0)2<& z%fS;0Bwr=$gSDtN0vRv;S3ts33YIn!G20>6aaY3w3$v8~k|?lWA!RepUF?JsE=Xss z0`QE2_V@Y7LW~+-A2xPD@6`a3DM;bFdJ4J~)}e$CT|UUca|+hSN||`+I9&wpYTsT1 z2`Ln;YcFF~;(NGg=-^>%3Luq&sAgjJsPA+9-Ijl7*;)W;6o~nu%hR@L+(1oo$r`#2 zzzYg0`6ep|UK`;No@<%k@Pyrci-^@lyI!c)Af+>l7jqqQZ^}U?>hvB&bqt- zKn4W~5=%C6WKt3WA#b*C1dvIAXOWaCKJ3^Of!n`yHUY?@VA~Hq)$@R&HUf^S?KT5= zML|iPnAt78HwuA!;kj~V(1n~$f2N1QwtWb`DqaX5lt+%0?4JH zod1AsJf1%uf%B)0w*knbpj)DZ-M@JQcfDPBGH5%1d$RW%vW*^@` zR|_^ZswJM_qBAmdFC-LG&}^QV&3V}i4`6oCv)BjVJq3|!{D9W>+h?ODy{lTVAHW9+ zw(S%#oA+_Jh@Mfdb^t&L1^4*k8`}Z7yHJ8M`zi;e6lf(1S&YmHzp}ChKRgHtWfV+U z$rp(_9Kl}#j=fzD0VtGF}Rtje*{1!1#vM# z_Bcx!|EEW-Q#uOZBL${c__5B)|L-SS5uYOmpD1|0%8GeMA3uYxVVq&WF-WMQ;FOYt zIZu&YKp;o$h#7#-6!hl@M<3=D90HA0W*!Idg@Tkb5_V9Mauk7w`rS_esHUKpuYcII zuHOy>dfQgYK@9~K>QeT$#AGf4d7WZTLc&)H&hf=)aZ!Enw}$ET)8+uaQLu4=nA!Je ziiZTA4O(LXpq7GAKBX+lIrkW9lFOr^mH@s}u#z7JAMmmge=i-oQY!~PC}=)W#!5_$ zCZmK$*As=1@RI_@|8f3q5Af)DBdrS}0KX_WEVX1kclTY164bNSiviS8V8{Q{R`ciF zMBs{srUbxA6EgCA%uK{g+;{vy_2iZkbGyGm1NEf-^9zE*H>NB>^<+q$MZIgNp1irS zold8+)7KFE)mivw$Sa+TkEZHq4h=Fy^<;v=>hJ^+Emt;LrCoS~o>KVT|X*%jYQ#@Vx60oYNX=xWV6 zxsEu95;9Kqb^~Bf!8t7{vzcj&i?{KOKFGmY3d*mGSwY+lp#{nW=s9yo#NP$Ifek5|z z9{kkkU{@mtP80}+Suy|VL$0DG^^cABf`khcn6{O$@iEnS0B8I@2X6q*6r`7n*}=j= zswkn;#0@?GE>fV)yY*#1U*qqE9|tsj0k}}`P9|dFFb77v`Sn(+y zk4d=xLJlrdF!ux>#qD=m5nV&Z5f6VzaHU}5U?DsGuEizRuE zpwlG;fDZ-bON4Cfs2+H5{6fFCa^OqB`Y}Rgs1mP%F1pA(Boq?-C@|#Hf&%xg>wrMd zY|AhJ{uJyr7qj?#raciDaAV$e009&n7%FBp!&>6c;o#4`!T|(Qkj@`uS-TG6xgS?v zmB~R61?n~;rZuIY1T|@z^v(@P2&Ujb2mT=Q%C&A!P&C((_aNaG z1u4}MR&jfKcLXdG4@3iqq~LHg-=8h>0j}#?3^%+F;5G%DPFpeM8@_n5$j;fFVgTHs zAcpT?QQ2v`KWftWvOGDsOTozQGM1j|gu#lSkXT5FqTtpN2|GS{Ukj9Aal$+fzK zeU`B|tNp_en4vlE0f1-<#(m?b%#}+IqIxoF=A~zUg9hqJ$-y={lSMi|QCa8_bh+L& zR8RIW9H+AK)OF`{>yc>WvZ?HyS-N>|)7uoBgiPECK)Kh%@)fs=KO$7*#z_2h7c z-}X=S5Q zO@0m_hJx1oxR3F&bTLp8taoX67X+5a8@~XMK*8K6duV$mLy6HqFEEjN0>C&Sn63 zOhGW;^uG4o|C&F zxF=)NRo3J0Hsd(2d`NgfL3u|Z%QvXQH(ywrJp};LDd?ypVfT_p8KWlIoicn4;3Wn6 z{Ajt5{TuP!YTCAQA%F}D6!=ece|9Te?Nuk`%Rwduula1FTkoFWMWXw*guQ`;EDG*i z5V5%e1I zOOd`kzG(e`r=^hahJwREeAG&DLtm6oy49(r)A<%U1o=*TuC>UfXW(yLB2cV0-dvr<_fKm#E8;aSf z)PZNaV;2QG^xQ9Eh06l^pz{Ai+e;tk>i= zM__}MZxcwUqhMvJn5Df_Yl1+dnFpEzIJuOJPnPqJfXC-&Wukhr-O~KFe}e|<$*lgC z+KrT+c0y(0nezqpuAzEzubZ7fz01iG1UL67{4?a0PQeo&K|yb`U#On!JO52RY_Oh8 zs{E$it?jPvs3^P|R#Yz=t|v8B40Wzn9e<2yljOJmMtOU;CGOPOc7NP0R8N-v5B)vOEj3|5(j4{|w-m9f({`>6bV zKaiEN(?+e+-h7~BC|c&a`;>3JpetkDeZ~uJ6!zJSi0^g3h6r!hRVx!g=STCD(8^fn zEdP4)Pb*`U^R(w{#4kXLTz@nQtT+F(GWPPBYQel$k zj9oGKH~Pnwv48a%Y#F|^1TAq@(fF{HvG`#mdhSqK)}G~^l$(dDG0nOVW$)xH$vdo zOOp`*Tqv;Q%NY!NSU*G{?5V~`0GB9e%vaIPDy_m@JoAs%$^oCg^Z!pxxyN^5X*r~c z1xi@HC1DgKxKhyX3ZMGib>vwDvX(iF2H-|PqK=5A->bWXfdAetngHA>NY)jzjw{wY zM_@pAtuX*RDDcq|vZza!ZXu99ywz9$o)oyum#~#i11BM%^!}wBT%kZT*otjCUu}*+ znJ)#dPtER_)(z2XJQynpZ6Mpo6|!Ckl;^25Py(GNVGi=i10Jl z0T4hz9N&0X`m+a~2Gnx)TwMTx6nG34v%y}I@UzuxgsL8ZAPQC=maqp*8NVNf_Wmdb z!4w>y%Qw@0Z-oDGo1fm-hlHyXoLVhr-5h4)PNZSArwssHqu?r^bF=$rbKIZuuGbm{ zAcTTNQG6*t*NDOB&+0dO*aQHf6cqCnnX=O#!2k37r9RLDUT1!MT=d3ca29l~$s z?hMNNH_F@Fb#Iui_1b$qQBQ$!@NfEuo`Ngpb9GDqkFopkr}};W0A49l8rpjgqn%R6 z=x*<+p}iFiiK0@(nS_!`LsYU$B1t8bP@)J$sgM!T5)u9G?{yv@eXsA8KEFTU`FP!j z_j#ZDx@YvUVl+}v@n80DBL!zQB6V~3E%QTI68t;3LHwUq{~D&Z#mprUJwW@0Utb2# zLkxX@;>=|%vZKL#1e{V28Ul!=Ao!;PJ2q72hd|EMxyu3Er=W$iJ?ksJa2|odOS-QB z@PGoVBpGX7VSqPogbyf{gE$Iy=8Kt$;c63<@a5gjm5}g|f|%C)2$Unsv=K0>7Onyi zPr;MsQl>rnF$E8mq)f5>g8K-(XmflWfFuf>_>r>9qg)pw(9FtcJ%A?^ zT)!`2JrYY@5xDqZ^acRQ6h!dTh6l8-I)y;X>Sh}Oq)?#A$0mkebp46ImviZI@RWis zSHx_P%V*p}FAVY71PRY5IL@z6^?n@K9wi)GX1*CfDh1KyLgsU*oe+WVWs{5mq)~9d zQO5eHZ5f5Y_#vuW06eFlr-_6a;^8S~%qDp@b(r`kMmCp8w3LX5a+#%e%7eFBeBSNHX*%YZgO2}I^)e=Av1snLi=synz z8zNvjy}cEHVhToD*)zAfYWQWWwKiW4K2UI-@4Yp%e}{i|t?R<}K|%=yzI@4Tl=rhW zs7W4cB>MrBQgG&(h=lBkbRS#?4BCu7Ea1atcQD8kr!um|_il<2JCZ0G1;4=mB#r#|_)q-f0 zaDU)t8vtJ@Xu+o!4{mjzfq+uVSX%&JDR??g!uDJV#lJwUA1E9K@QniP4Pw@z#v2d$ zqJyf zK1*$L;vdjJJ^8t&zaVY7#0Hgxp}ke>T|@O`bDJbVTa%)V2=-gl?(dLSIyViJbxP(w zt3dVS^r-gru)%t=aGjOFTh_(^6@@pRcc_;Q*OQ|0J9WP2jnYJPcTvZGqrAN?x_5Mn zhAdXY^G>Mh;+=yiLg zjC<%70q^A>_%MBdo=T)Fd$Ptr^oSlXym=BHAUg{7JmJ?xK8?rA!j{JgPXVx}AcAkk z3Y@wC|Lny4T;vWwNWrL&Qg-S2n#-t3qet{V4M0RexAP*lbfi@U0-I)4%7K`IQB5T5 zhx$l7anNgY+!;uaP%xa&_*nX#UxpI2UER(CkW$c>ceqb{n~a7|2(u^}8?? z&mKCBv-JjWoC4+~Vx2#hW}(jz>OcQ705=N0KIVIR^uORgYyOy?J^)To;CY3wKFv(V zg-_huQaLzDK{I}EQd4WM(Wpt~j<dqnG)uuaODvKkGi|~0dS|_d61Z8zIuY! z!hNz{;}7681wMSLE`Lhno+x2=cg+9*XDCqEFJ-nTmGKCUjY6dyoTcEW2A_}l{OL7H zcsn*e5E9N&kekZ)8pcZSce?TZGeH16DA=RRCuKVhbU_ITsm50ToTuP>O9{JSnmrYP z1IB`@06ZyJzmK1l9kyPEz=8wH!2rA{Fh3?_t}$)*A~3C2mK24>c5> zzkCf6E>d8wBw{)_M{v)uY|x$%0GBApIV5GVA2pOwlSbT{dL4i_1@p@6*fi~RBN5Pw zQ4IxfnS%YbVy04S6pTQkd#)V#P++o8$d230!gc*3QD_(>_);L`n?4fyzsN@kU7Lt+ z0Pv$=_aqUk(3*hagU5Fu zA%p_`t74X(5IPM3^}y420bHk`dZ2_Y7I@$i_od>NC;*`pxbSTyEe+mCQNm)2arXd( zQ7~z%jO|XA&P1Sdno=}?8x%ZsdNnEwOE=A|cMa8(VJ+VY&Z&rgA((V%*54to zbmo>Q>h$%^?2771yCHMxVT1K#FTcZrwcm~1QBf#6KDS;rTu)Yx6zZtIYP$x}&C&Dz zjq>)6wF%Mb)h@CnswbDk{HA}YCrk5fbh}4~RHBlwS?q7yU`fd9$-_&tb@x|$Hb&Uv z|ATp}oug;zJ@}Y(8$CdECHme@yJfz^RFFzaD!$S)J&o5PS5KqCw#{6ien^xx#2)Op(B_t$JkUE|JilkZMwQ-q~ zPG$i}q`*ZeVhfco_@IPu7mTt2Jfgt7iyd1Xv`Yhl__w280eDQoy#ygU*P^fy0vlg6 zdJQ0nf?>Q%Z(%FNKMG?jQsv+Y1wtEs=zUcl9tbdY^2&jPWD1Uk%GmYHA?r|+)CzXJ z0gyt$-~bT|9v=1t0gVLq7Qj;qcJb2>9{0^1j(}`e>vsU2QSgS}!dVc%1(#M8$Ft-h zm4bs|yrbtAj0Xbxs|MvlLK+3e?ot-uVr_<+G$`CU55RK@Dm^94b9@*4XZ0LCJ0Czg z1=~71u)yOdaS#3U&F=33WKdw3FJslieeq9cR_jtZ$fUq?FrWO0j!8wIp;NoN1(5K9 z0;lOB)sIZreNY)5$k?v0AA|mG0U?AKn?}d z93(7M=_;NrnUlM{6u=t_Qur3mc^a+oOW>@w-bVm$DTv^+R@)|8TcZy>$-GS&fOi!1 zzA9w#*N?wPVEND-Imo48`5+0KGx3WO0#`bRltV%u1@U~}>Xl}rd=Y3KXY&a_J_RRE ziCK!D`Y!~!e4PIoz0?*K|DIB6$lvSMvKHgRoqg&dSpV18Q4=GCgpH3f^{HzUX(u$r7>i|?x(58!oWnMPK#anV@?_U7EQ?Q>`8H-$J z8`#C-fL*}y zY;Vn6wmt|^MSsb^QQqDOH^1miF?Q*O>d9CCMgLMy4j(p9S6!NT0F{J$0)EH-t)4tF z(M{Lj#qd`MHxB%NVBYGN>lF1ihu1YlJ7X{3n%3i==Yi~ubzi3?&`mQ-Lfc$hznxw$ z=+4-do=$?2M(^h#(o=C}Lxi{M{fMUmrObur(9YN`LuS>JKkSTM>MRnR7+iT6ZF2Rw zIlJEcX=ki$mo_>t)TMq1O>H~3VZ>W!F~C7*TjwzbXlJaE>TmSNow4b2hw7flE|Q`x zt_tmbt3U6I)meW|H=x*SH)1FL&UhQk`>N>uC~b`wZB23S(-Z!)hv}=~y^n+iPaR~0 z-d5k9m&<`21q0(nOu6h{F#_2S?)8EMdkWeqi35_z03iioYh-Ml{{&M6 z7WP`v2Y`rzIMHFYzC{HF3p@t*1t6v%(1*`>4t4B{5}ux{kOK(?7te`V?a+V^2o##! z?*|D|3YI(;v5kc#+6eS7JlY?Ci~^f0LYCqD1lNyQgVqiJ;6QC&e0AOJ@wxIV&>g^bI@ldy$msdC^%!KHWhOgn!0UG$-klzR?_ z1ZN8R*V;2#6T3bLjBmeP4S)*;O~2c-jm<3ZWXIR`dg=glX$rTk=ng`P*dA~19G!65+L z{s8!DY@J$7JU{R7VBt^zCn)fq!^h00HphLOA+LK618|ap2Y2}eQ+ zLqWj|DO)qW9qy<7nxr)fz*!0!8_QVon?`tUduv{k(E!d-5dKNRy3g}$gqn2pK(ZWo zP|)g%9V=-(Vm1Qar@gcw;XDOnf+XxfRA31L{`bws0Pv*Xg)(14vwNNh0mYUR#scu7 zpm&j&T?=WXjKHqYHrfC#P*6Ni%A{Swa7i0Byg&{vQjlINV)pFjP?XT-?TvAeaEXG8 z`4ToM!4i*=+Ev<*2jESC0)I537Ny`nYgw~J0sxmO$gYvFiwUxms7W&tNhP@rKg zVwz*};}KXnx?B!?Dd@`&t?l=^_y7W({bF<>!Ho#Z#h;<*=7ounaFv3$iG00E=u7+yG}+p85`bU|RP^|%&s!Sd z;llEh6D9+=MuCPAzb$)8uhr-?bZgXV3V;v_ChLlr`U#&Q2o#NbBL~+hPdw{2%|u1DrG?@3h`9+ai6)<0ohD1mVC{6AWOzW3*XMqn++h6f=ze$i7w4k$D@SyG2Q0?xJ`lBLc&b)uFXV1 z!L?Kl?ojZZzbdVU?e|7N_$zWQB;2JSo-f}n)KnHDFwImt4?q+Js{F=pU;A5lN-XKi z^7#PnQJ|N_x5jMo!@bH~vc3xdL{sqks*H71-Dr$P3Pw%bu;L%kz(~RM+d{#6E%7o` z@ZVXovEDT_QV{neR3OOhg3r)0GTHQZ$SWO7%|gMu*EZ^Cq#*6k=6cxRNWp*Z_<6G~ zBO8_bl0c(++3-lg>WX1H`nw)IN3^zj%fC_HUYB$So$|^(xoD(7^XG5+myv>YrAu_H z%bfz0l8XFM_cqIShO=!4(?OXl8+H~ZdbJxfmcJlS3|-B3i^+c zGPexnLkP?4Or&=0t6Vgk%aD2S{0~{Uh;zdZ(3(5r7m5KJs6YA-Mydql74vRa*c&rQkfjDXxcs zXgdNi4~B0A@Qi|!-h4-<@7Musu`AwjAz; z|8bTT9wq>uQ;^=%o=w)gjQ?@P?RRYhkWN9O1s?)`z9<_tDaKKEJAe!dUTX5AXqFto zZ;dGzRdxW#q(E{~%=#E7Z$k-(va;pi1qIDV2-&nwPPoq_P`SDj5?)dex?I8xRvbTz z5`MPbX9^&Tf)0GepyScWxPvjb^Xy#!vMD&*M#PFw`qrR?mWf@=0KB50n&0O1Va(9? z2xzVQAP280nD(3xDk(k2g-`VR+q)qlhk~dCzIULdivvnnb?%5cfHxHMIWA#7Csz0) z@O<@33jl8^XlKIbBl~yKLSR#c<{kj=D6sg+x2&n!1|m><`KKJ@QgBQ~#7?f*?t#Fn z6OZ>oLLLRr`OA2*1d2>|SOIuX!JM@ccD$c@Is&d| zboK!#pkTx(346J(Fc*Qwqm=doD5Rigt%O<1wKQvPgiYRC|g)iOMSA}0>cM^RL zKteGEC;3t){{_u6P{R0Rb87$}C}{db$X?GJSBSu^DH9F?DER~6NB5~dJ7I`G)i%{b z07@w+;dd?Ntqa4`yoX-Cm4lBIyyi=8gLIC+Knbf8gKQw7jDiq83iZOKXfOh1#)oVH zlv7Y#D`dvHxlssYKbw6Rz$XfhUX-u}C-)3MpkqaMI{=?4aEcN!g)Rna2)v$OA_re6 zXe<`9X@c;l2#neqVGjvkDTwA<#T1uE;Gf-Y{bfP`-zbnVDLdF>fD%eDja()IP(eYl zv4{=sV2%H*+f_Bh0KQYOZa=?XdvNA_l+e$jN)9S17{c#=n3+2RKdm?WJ(NH~6$LT; z_`$;DYx_`w-=^bI06!=w;7vNBJ-0mqPuHxM0jQ?HM@hn7OPZcsHv+*3^{EI37F_u|`zS@BdeX4wYCUYQ zp5(_R32gS3>_J80nKswzWyAHPiJQJowT4v-L!u`Y-yI zdQx-I6kYeau-2#~JT~BWY=b2sU&-7=-(PoGY1<13_a6BFz`WH0jRAV@mKShmb!?LD zX?PwE(+6mNotQPRYc4@gTw1SLX8_nya8g;sepGI9M<8x`*RufZDKPycWt9h);$L$s zk779xQed=`-#B7aiu=!-lEcqIf{21ee7Z62YG>T%>EtK%03fEoxVeahZW)RP83&Xa zo(CYI;PXfk(|EX}3Hs3e=MM4&Af+HFN6Pwle1@wGX?}$q$S4T7EMYNkrzE0;r7H1W zkl;W;|2Q!-9TAUL7kyaoegS|Z1rzySX+woZ0pJI4)8sPhX56vmAwHtQ?S0Nkd5zp1P_#Eb$BTUE)5K1ctE!IdG$3oSTph(a0-7V0ZR)e@Hk%!PzZRc3k`Q5(L(7whI7o zl7fYGe3NKt8UDvLzqBL}z$pq+EyOHd_1OQ6LOtyl1i+nw4Bn)-8J`-VCY^EkA_u1_ zXcr@5eSb8?AA0hgm@ANQhJs!E`{2{R?mkMm|M}Qe0B0%4)8kh%ShzGrAoTXCU;yVR z2)QF=3b7Wx2n;J3ehq*J1-^6nCee-tEfLtse#yak3YNE(u*M(T#x5He|CKel(6>(h37`k%Gh_ zyi!^hWq=a;_Gxwlz$FUq=1bX>0jGu|aNFs*9C%YuQ^7YIj2vl)K>jk{a7egJ!CVh} z7H7H^j|OV!o8JWBLqU%gLZ&e=aw0^mo%v?_aM z5LAVW=(s*_<-nhUws-j+=zCMrP{JJWhv=9f9&2XKReplExhK2!}i$*k3?2LQq;m?IIhxRqTjQ9@fS%{TxzDX?xQW1c-e z;%VQ6hgEVAK|$lyyc>FVUOSZF=pXkG5^hmo)>Fh%=GxpwV5G(IcmR{g@j?q5Ev-ZVcPRMkCuAL-Jn4!OX54J_2*6zm+~-SJae(R` z1e)tTlY=MvhJ7LaKU`{l;V~rKqhKgMbFsL<0smR&7;H-d5KTeeGa*g#Lx$5U4K3#uBV1axId|_cmW`mf-EDxSYq&uEhs@eLgOWX`xFE= zabQi;`}aj)@{lSyctAnYI6l*$zULtVb(yhQkPt^fma2^9#r-;fKy9-V*#I6=aOahb zr8>um5SX5}^%a143LK5ZEdR()PXs!vjD8Iufr9z`>QU2eg}5v+ZQmpZKq3V#UW%Ek zL6HthxW7F`4jxg^iC-qoRmls4x10G?6s(MrUwPkOQpfttSh?*XJzpxso$uFdFM zfxzU;EeimoQ4nn;Vqwci&PCvXTb3L=ry$`NUlCB3JR5l01R#TgpNH&OdV~w^89tdYy%<0y1wtnYD+>s_g_<1;`gnSBAHjDXT^K%$VkUjSL z2H-sfD>eB`VD6@S2y_nFSplGcf-6V(2K=ls`3Qs^*Z&Tnkb)Uc`L^tN75HWR?6^uL zfFcSy4&uieJ-&JZCD?a+BL~G4IPWe0jOTT(0q~K6?7jRfR0G{$1XeW5mxD42 zO!<-gW^W$8L*P@)^`DSXPJxAul$CdBxe0-Y7B;m2K2cz$%CC-@9F3ba*lJ!KfX@_6 zR*1E`>&*>>KW5jMp`K1Z?_Hv#aSf)*W}SkS1ico?^^Uw;Jv zl@xR}lQ32L8@N|F#p{b4R8g>+Pb?2@(hd($nzoN_3JE_b*xFvi%Bu#(p%2|X*`*nP zY6@=f1><)+CE=&_YpXSi0BR^Oj}^1M{hIlpgz1(;l>q#tz-FnKt?4on_caP1SIa>y z1=?r$de>Se?APeT%Slw

lIX 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

I- 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 Date: Sat, 1 Mar 2025 12:17:42 +0300 Subject: [PATCH 127/175] ruff format --- modeling/callbacks/__init__.py | 8 +- modeling/callbacks/base.py | 293 ++++---- modeling/dataloader/base.py | 24 +- modeling/dataloader/batch_processors.py | 34 +- modeling/dataset/base.py | 656 ++++++++++-------- .../dataset/negative_samplers/__init__.py | 6 +- modeling/dataset/negative_samplers/base.py | 12 +- modeling/dataset/negative_samplers/popular.py | 28 +- modeling/dataset/negative_samplers/random.py | 14 +- modeling/dataset/samplers/__init__.py | 29 +- modeling/dataset/samplers/base.py | 24 +- modeling/dataset/samplers/cl4srec.py | 110 +-- modeling/dataset/samplers/duorec.py | 44 +- modeling/dataset/samplers/identity.py | 19 +- .../dataset/samplers/last_item_prediction.py | 38 +- .../samplers/masked_item_prediction.py | 59 +- modeling/dataset/samplers/mclsr.py | 45 +- .../dataset/samplers/next_item_prediction.py | 69 +- modeling/dataset/samplers/pop.py | 52 +- modeling/dataset/samplers/s3rec.py | 92 +-- modeling/infer.py | 69 +- modeling/loss/base.py | 405 ++++++----- modeling/metric/base.py | 65 +- modeling/models/__init__.py | 8 +- modeling/models/base.py | 117 ++-- modeling/models/bert4rec.py | 94 +-- modeling/models/bert4rec_cls.py | 91 ++- modeling/models/cl4srec.py | 127 ++-- modeling/models/duorec.py | 123 ++-- modeling/models/graph_seq_rec.py | 225 +++--- modeling/models/gru4rec.py | 172 ++--- modeling/models/gtorec.py | 475 ++++++++----- modeling/models/lightgcn.py | 129 ++-- modeling/models/mclsr.py | 274 ++++---- modeling/models/mrgsrec.py | 115 +-- modeling/models/ngcf.py | 133 ++-- modeling/models/pop.py | 36 +- modeling/models/pure_mf.py | 107 +-- modeling/models/pure_svd.py | 6 +- modeling/models/random.py | 29 +- modeling/models/rqvae.py | 81 ++- modeling/models/s3rec.py | 214 +++--- modeling/models/sasrec.py | 187 ++--- modeling/models/sasrec_ce.py | 85 +-- modeling/models/sasrec_freezed.py | 3 +- modeling/models/sasrec_semantic.py | 8 +- modeling/models/tiger.py | 18 +- modeling/optimizer/base.py | 41 +- modeling/pretrain.py | 65 +- modeling/rqvae_utils/__init__.py | 4 +- modeling/rqvae_utils/collision_solver.py | 156 +++-- modeling/rqvae_utils/rqvae_data.py | 13 +- modeling/rqvae_utils/rqvae_test.py | 25 +- modeling/rqvae_utils/simplified_tree.py | 70 +- modeling/rqvae_utils/tree.py | 191 +++-- modeling/rqvae_utils/tree_comparing.py | 18 +- modeling/rqvae_utils/trie.py | 1 + modeling/train.py | 106 +-- modeling/train_multiple.py | 103 +-- modeling/utils/__init__.py | 93 +-- modeling/utils/grid_search.py | 25 +- modeling/utils/registry.py | 31 +- modeling/utils/tensorboards/__init__.py | 2 +- .../utils/tensorboards/tensorboard_writers.py | 11 +- 64 files changed, 3309 insertions(+), 2698 deletions(-) diff --git a/modeling/callbacks/__init__.py b/modeling/callbacks/__init__.py index a23d5ba3..81d5054e 100644 --- a/modeling/callbacks/__init__.py +++ b/modeling/callbacks/__init__.py @@ -1 +1,7 @@ -from .base import BaseCallback, CompositeCallback, EvalCallback, InferenceCallback, ValidationCallback +from .base import ( + BaseCallback, + CompositeCallback, + EvalCallback, + InferenceCallback, + ValidationCallback, +) diff --git a/modeling/callbacks/base.py b/modeling/callbacks/base.py index 1ae26267..900b492e 100644 --- a/modeling/callbacks/base.py +++ b/modeling/callbacks/base.py @@ -1,25 +1,19 @@ -from metric import BaseMetric, StatefullMetric - -import utils -from utils import MetaParent, create_logger +import os +from pathlib import Path import numpy as np -import os import torch -from pathlib import Path + +import utils +from metric import BaseMetric, StatefullMetric +from utils import MetaParent, create_logger logger = create_logger(name=__name__) class BaseCallback(metaclass=MetaParent): - def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer + self, model, train_dataloader, validation_dataloader, eval_dataloader, optimizer ): self._model = model self._train_dataloader = train_dataloader @@ -31,25 +25,20 @@ def __call__(self, inputs, step_num): raise NotImplementedError -class MetricCallback(BaseCallback, config_name='metric'): - +class MetricCallback(BaseCallback, config_name="metric"): def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - metrics, - loss_prefix + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + metrics, + loss_prefix, ): super().__init__( - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer + model, train_dataloader, validation_dataloader, eval_dataloader, optimizer ) self._on_step = on_step self._loss_prefix = loss_prefix @@ -58,113 +47,103 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], - on_step=config['on_step'], - metrics=config.get('metrics', None), - loss_prefix=config['loss_prefix'] + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], + on_step=config["on_step"], + metrics=config.get("metrics", None), + loss_prefix=config["loss_prefix"], ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: for metric_name, metric_function in self._metrics.items(): metric_value = metric_function( - ground_truth=inputs[self._model.schema['ground_truth_prefix']], - predictions=inputs[self._model.schema['predictions_prefix']] + ground_truth=inputs[self._model.schema["ground_truth_prefix"]], + predictions=inputs[self._model.schema["predictions_prefix"]], ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - 'train/{}'.format(metric_name), - metric_value, - step_num + "train/{}".format(metric_name), metric_value, step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - 'train/{}'.format(self._loss_prefix), + "train/{}".format(self._loss_prefix), inputs[self._loss_prefix], - step_num + step_num, ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() -class CheckpointCallback(BaseCallback, config_name='checkpoint'): - +class CheckpointCallback(BaseCallback, config_name="checkpoint"): def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - save_path, - model_name + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + save_path, + model_name, ): super().__init__( - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer + model, train_dataloader, validation_dataloader, eval_dataloader, optimizer ) self._on_step = on_step self._save_path = Path(os.path.join(save_path, model_name)) if self._save_path.exists(): - logger.warning('Checkpoint path `{}` is already exists!'.format(self._save_path)) + logger.warning( + "Checkpoint path `{}` is already exists!".format(self._save_path) + ) else: self._save_path.mkdir(parents=True, exist_ok=True) @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], - on_step=config['on_step'], - save_path=config['save_path'], - model_name=config['model_name'] + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], + on_step=config["on_step"], + save_path=config["save_path"], + model_name=config["model_name"], ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: - logger.debug('Saving model state on step {}...'.format(step_num)) + logger.debug("Saving model state on step {}...".format(step_num)) torch.save( { - 'step_num': step_num, - 'model_state_dict': self._model.state_dict(), - 'optimizer_state_dict': self._optimizer.state_dict(), + "step_num": step_num, + "model_state_dict": self._model.state_dict(), + "optimizer_state_dict": self._optimizer.state_dict(), }, - os.path.join(self._save_path, 'checkpoint_{}.pth'.format(step_num)) + os.path.join(self._save_path, "checkpoint_{}.pth".format(step_num)), ) - logger.debug('Saving done!') + logger.debug("Saving done!") class InferenceCallback(BaseCallback): - def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - pred_prefix, - labels_prefix, - metrics=None, - loss_prefix=None, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + pred_prefix, + labels_prefix, + metrics=None, + loss_prefix=None, ): super().__init__( - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer + model, train_dataloader, validation_dataloader, eval_dataloader, optimizer ) self._on_step = on_step self._metrics = metrics if metrics is not None else {} @@ -176,24 +155,24 @@ def __init__( def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config['metrics'].items() + for metric_name, metric_cfg in config["metrics"].items() } return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], - on_step=config['on_step'], + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], + on_step=config["on_step"], metrics=metrics, - pred_prefix=config['pred_prefix'], - labels_prefix=config['labels_prefix'] + pred_prefix=config["pred_prefix"], + labels_prefix=config["labels_prefix"], ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: # TODO Add time monitoring - logger.debug(f'Running {self._get_name()} on step {step_num}...') + logger.debug(f"Running {self._get_name()} on step {step_num}...") running_params = {} for metric_name, metric_function in self._metrics.items(): running_params[metric_name] = [] @@ -212,30 +191,34 @@ def __call__(self, inputs, step_num): batch[key] = values.cpu() for metric_name, metric_function in self._metrics.items(): - running_params[metric_name].extend(metric_function( - inputs=batch, - pred_prefix=self._pred_prefix, - labels_prefix=self._labels_prefix, - )) + running_params[metric_name].extend( + metric_function( + inputs=batch, + pred_prefix=self._pred_prefix, + labels_prefix=self._labels_prefix, + ) + ) if self._loss_prefix is not None: - running_params[self._loss_prefix] += batch[self._loss_prefix].item() - + running_params[self._loss_prefix] += batch[ + self._loss_prefix + ].item() + for metric_name, metric_function in self._metrics.items(): if isinstance(metric_function, StatefullMetric): - running_params[metric_name] = metric_function.reduce(running_params[metric_name]) + running_params[metric_name] = metric_function.reduce( + running_params[metric_name] + ) for label, value in running_params.items(): - inputs[f'{self._get_name()}/{label}'] = np.mean(value) + inputs[f"{self._get_name()}/{label}"] = np.mean(value) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - f'{self._get_name()}/{label}', - np.mean(value), - step_num + f"{self._get_name()}/{label}", np.mean(value), step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() - logger.debug(f'Running {self._get_name()} on step {step_num} is done!') - + logger.debug(f"Running {self._get_name()} on step {step_num} is done!") + def _get_name(self): return self.config_name @@ -243,87 +226,81 @@ def _get_dataloader(self): raise NotImplementedError -class ValidationCallback(InferenceCallback, config_name='validation'): - +class ValidationCallback(InferenceCallback, config_name="validation"): @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config['metrics'].items() + for metric_name, metric_cfg in config["metrics"].items() } return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], - on_step=config['on_step'], + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], + on_step=config["on_step"], metrics=metrics, - pred_prefix=config['pred_prefix'], - labels_prefix=config['labels_prefix'] + pred_prefix=config["pred_prefix"], + labels_prefix=config["labels_prefix"], ) def _get_dataloader(self): return self._validation_dataloader -class EvalCallback(InferenceCallback, config_name='eval'): - +class EvalCallback(InferenceCallback, config_name="eval"): @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config['metrics'].items() + for metric_name, metric_cfg in config["metrics"].items() } return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], - on_step=config['on_step'], + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], + on_step=config["on_step"], metrics=metrics, - pred_prefix=config['pred_prefix'], - labels_prefix=config['labels_prefix'] + pred_prefix=config["pred_prefix"], + labels_prefix=config["labels_prefix"], ) def _get_dataloader(self): return self._eval_dataloader -class CompositeCallback(BaseCallback, config_name='composite'): +class CompositeCallback(BaseCallback, config_name="composite"): def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - callbacks + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + callbacks, ): super().__init__( - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer + model, train_dataloader, validation_dataloader, eval_dataloader, optimizer ) self._callbacks = callbacks @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs['model'], - train_dataloader=kwargs['train_dataloader'], - validation_dataloader=kwargs['validation_dataloader'], - eval_dataloader=kwargs['eval_dataloader'], - optimizer=kwargs['optimizer'], + model=kwargs["model"], + train_dataloader=kwargs["train_dataloader"], + validation_dataloader=kwargs["validation_dataloader"], + eval_dataloader=kwargs["eval_dataloader"], + optimizer=kwargs["optimizer"], callbacks=[ BaseCallback.create_from_config(cfg, **kwargs) - for cfg in config['callbacks'] - ] + for cfg in config["callbacks"] + ], ) def __call__(self, inputs, step_num): diff --git a/modeling/dataloader/base.py b/modeling/dataloader/base.py index 2e23876d..71e7f6e7 100644 --- a/modeling/dataloader/base.py +++ b/modeling/dataloader/base.py @@ -1,12 +1,13 @@ import copy - -from utils import MetaParent -from .batch_processors import BaseBatchProcessor - import logging + import numpy as np from torch.utils.data import DataLoader, random_split +from utils import MetaParent + +from .batch_processors import BaseBatchProcessor + logger = logging.getLogger(__name__) @@ -14,8 +15,7 @@ class BaseDataloader(metaclass=MetaParent): pass -class TorchDataloader(BaseDataloader, config_name='torch'): - +class TorchDataloader(BaseDataloader, config_name="torch"): def __init__(self, dataloader): self._dataloader = dataloader @@ -29,7 +29,13 @@ def __len__(self): def create_from_config(cls, config, **kwargs): create_config = copy.deepcopy(config) batch_processor = BaseBatchProcessor.create_from_config( - create_config.pop('batch_processor') if 'batch_processor' in create_config else {'type': 'identity'} + create_config.pop("batch_processor") + if "batch_processor" in create_config + else {"type": "identity"} + ) + create_config.pop("type") # For passing as **config in torch DataLoader + return cls( + dataloader=DataLoader( + kwargs["dataset"], collate_fn=batch_processor, **create_config + ) ) - create_config.pop('type') # For passing as **config in torch DataLoader - return cls(dataloader=DataLoader(kwargs['dataset'], collate_fn=batch_processor, **create_config)) diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 9991a073..bd45c86c 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,43 +1,43 @@ import torch + from utils import MetaParent class BaseBatchProcessor(metaclass=MetaParent): - def __call__(self, batch): raise NotImplementedError -class IdentityBatchProcessor(BaseBatchProcessor, config_name='identity'): - +class IdentityBatchProcessor(BaseBatchProcessor, config_name="identity"): def __call__(self, batch): return torch.tensor(batch) - -class EmbedBatchProcessor(BaseBatchProcessor, config_name='embed'): + +class EmbedBatchProcessor(BaseBatchProcessor, config_name="embed"): def __call__(self, batch): - ids = torch.tensor([entry['item.id'] for entry in batch]) - embeds = torch.stack([entry['item.embed'] for entry in batch]) - - return {'ids': ids, 'embeddings': embeds} + ids = torch.tensor([entry["item.id"] for entry in batch]) + embeds = torch.stack([entry["item.embed"] for entry in batch]) + return {"ids": ids, "embeddings": embeds} -class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): +class BasicBatchProcessor(BaseBatchProcessor, config_name="basic"): def __call__(self, batch): processed_batch = {} for key in batch[0].keys(): - if key.endswith('.ids'): - prefix = key.split('.')[0] - assert '{}.length'.format(prefix) in batch[0] + if key.endswith(".ids"): + prefix = key.split(".")[0] + assert "{}.length".format(prefix) in batch[0] - processed_batch[f'{prefix}.ids'] = [] - processed_batch[f'{prefix}.length'] = [] + processed_batch[f"{prefix}.ids"] = [] + processed_batch[f"{prefix}.length"] = [] for sample in batch: - processed_batch[f'{prefix}.ids'].extend(sample[f'{prefix}.ids']) - processed_batch[f'{prefix}.length'].append(sample[f'{prefix}.length']) + processed_batch[f"{prefix}.ids"].extend(sample[f"{prefix}.ids"]) + processed_batch[f"{prefix}.length"].append( + sample[f"{prefix}.length"] + ) for part, values in processed_batch.items(): processed_batch[part] = torch.tensor(values, dtype=torch.long) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 38a704c1..4e0aea5b 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -1,40 +1,35 @@ -from collections import defaultdict import json - -from tqdm import tqdm - -from dataset.samplers import TrainSampler, EvalSampler - -from utils import MetaParent, DEVICE - +import logging +import os import pickle -import torch +from collections import defaultdict + import numpy as np import scipy.sparse as sp +import torch from scipy.sparse import csr_matrix +from tqdm import tqdm -import os -import logging +from dataset.samplers import EvalSampler, TrainSampler +from utils import DEVICE, MetaParent logger = logging.getLogger(__name__) class BaseDataset(metaclass=MetaParent): - def get_samplers(self): raise NotImplementedError -class SequenceDataset(BaseDataset, config_name='sequence'): - +class SequenceDataset(BaseDataset, config_name="sequence"): def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -45,61 +40,74 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='train', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="train", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='valid', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="valid", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='test', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="test", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info('Train dataset size: {}'.format(len(train_dataset))) - logger.info('Test dataset size: {}'.format(len(test_dataset))) - logger.info('Max user id: {}'.format(max_user_id)) - logger.info('Max item id: {}'.format(max_item_id)) - logger.info('Max sequence length: {}'.format(max_seq_len)) + logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Test dataset size: {}".format(len(test_dataset))) + logger.info("Max user id: {}".format(max_user_id)) + logger.info("Max item id: {}".format(max_item_id)) + logger.info("Max sequence length: {}".format(max_seq_len)) - train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample + train_interactions = sum( + list(map(lambda x: len(x), train_dataset)) + ) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info('{} dataset sparsity: {}'.format( - config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id - )) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info( + "{} dataset sparsity: {}".format( + config["name"], + (train_interactions + valid_interactions + test_interactions) + / max_user_id + / max_item_id, + ) + ) train_sampler = TrainSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) validation_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) test_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) return cls( @@ -108,45 +116,72 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len + max_sequence_length=max_seq_len, ) @classmethod - def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): + def _create_dataset( + cls, dir_path, part, max_sequence_length=None, use_cached=False + ): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): - logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') + if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): + logger.info( + f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" + ) - with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) + with open( + os.path.join(dir_path, "{}.pkl".format(part)), "rb" + ) as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( + dataset_file + ) else: - logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') - logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') + logger.info( + "Cache is forecefully ignored." + if not use_cached + else "No cached dataset has been found." + ) + logger.info( + f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." + ) - dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) - with open(dataset_path, 'r') as f: + dataset_path = os.path.join(dir_path, "{}.txt".format(part)) + with open(dataset_path, "r") as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info + ( + user_sequences, + item_sequences, + max_user_id, + max_item_id, + max_sequence_len, + ) = sequence_info dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): - dataset.append({ - 'user.ids': [user_id], 'user.length': 1, - 'item.ids': item_ids, 'item.length': len(item_ids) - }) + dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids, + "item.length": len(item_ids), + } + ) - logger.info('{} dataset size: {}'.format(part, len(dataset))) - logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) + logger.info("{} dataset size: {}".format(part, len(dataset))) + logger.info( + "{} dataset max sequence length: {}".format(part, max_sequence_len) + ) - with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: + with open( + os.path.join(dir_path, "{}.pkl".format(part)), "wb" + ) as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), - dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len @@ -161,7 +196,7 @@ def _create_sequences(data, max_sample_len): max_sequence_length = 0 for sample in data: - sample = sample.strip('\n').split(' ') + sample = sample.strip("\n").split(" ") item_ids = [int(item_id) for item_id in sample[1:]][-max_sample_len:] user_id = int(sample[0]) @@ -172,7 +207,13 @@ def _create_sequences(data, max_sample_len): user_sequences.append(user_id) item_sequences.append(item_ids) - return user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_length + return ( + user_sequences, + item_sequences, + max_user_id, + max_item_id, + max_sequence_length, + ) def get_samplers(self): return self._train_sampler, self._validation_sampler, self._test_sampler @@ -192,70 +233,83 @@ def max_sequence_length(self): @property def meta(self): return { - 'num_users': self.num_users, - 'num_items': self.num_items, - 'max_sequence_length': self.max_sequence_length + "num_users": self.num_users, + "num_items": self.num_items, + "max_sequence_length": self.max_sequence_length, } - - -class SequenceFullDataset(SequenceDataset, config_name='sequence_full'): + + +class SequenceFullDataset(SequenceDataset, config_name="sequence_full"): @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='train', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="train", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='valid', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="valid", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( - dir_path=data_dir_path, - part='test', - max_sequence_length=config['max_sequence_length'], - use_cached=config.get('use_cached', False) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( + cls._create_dataset( + dir_path=data_dir_path, + part="test", + max_sequence_length=config["max_sequence_length"], + use_cached=config.get("use_cached", False), + ) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info('Train dataset size: {}'.format(len(train_dataset))) - logger.info('Test dataset size: {}'.format(len(test_dataset))) - logger.info('Max user id: {}'.format(max_user_id)) - logger.info('Max item id: {}'.format(max_item_id)) - logger.info('Max sequence length: {}'.format(max_seq_len)) + logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Test dataset size: {}".format(len(test_dataset))) + logger.info("Max user id: {}".format(max_user_id)) + logger.info("Max item id: {}".format(max_item_id)) + logger.info("Max sequence length: {}".format(max_seq_len)) - train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample + train_interactions = sum( + list(map(lambda x: len(x), train_dataset)) + ) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info('{} dataset sparsity: {}'.format( - config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id - )) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info( + "{} dataset sparsity: {}".format( + config["name"], + (train_interactions + valid_interactions + test_interactions) + / max_user_id + / max_item_id, + ) + ) train_sampler = TrainSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) validation_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) test_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) return cls( @@ -264,68 +318,95 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len + max_sequence_length=max_seq_len, ) - + @classmethod def flatten_item_sequence(cls, item_ids): - min_history_length = 3 # TODOPK make this configurable + min_history_length = 3 # TODOPK make this configurable histories = [] - for i in range(min_history_length-1, len(item_ids)): - histories.append(item_ids[:i+1]) + for i in range(min_history_length - 1, len(item_ids)): + histories.append(item_ids[: i + 1]) return histories - + @classmethod - def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): + def _create_dataset( + cls, dir_path, part, max_sequence_length=None, use_cached=False + ): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): - logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') + if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): + logger.info( + f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" + ) - with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) + with open( + os.path.join(dir_path, "{}.pkl".format(part)), "rb" + ) as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( + dataset_file + ) else: - logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') - logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') + logger.info( + "Cache is forecefully ignored." + if not use_cached + else "No cached dataset has been found." + ) + logger.info( + f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." + ) - dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) - with open(dataset_path, 'r') as f: + dataset_path = os.path.join(dir_path, "{}.txt".format(part)) + with open(dataset_path, "r") as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info + ( + user_sequences, + item_sequences, + max_user_id, + max_item_id, + max_sequence_len, + ) = sequence_info dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): flattened_item_ids = cls.flatten_item_sequence(item_ids) for seq in flattened_item_ids: - dataset.append({ - 'user.ids': [user_id], 'user.length': 1, - 'item.ids': seq, 'item.length': len(seq) - }) - - logger.info('{} dataset size: {}'.format(part, len(dataset))) - logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) + dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": seq, + "item.length": len(seq), + } + ) + + logger.info("{} dataset size: {}".format(part, len(dataset))) + logger.info( + "{} dataset max sequence length: {}".format(part, max_sequence_len) + ) - with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: + with open( + os.path.join(dir_path, "{}.pkl".format(part)), "wb" + ) as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), - dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len -class GraphDataset(BaseDataset, config_name='graph'): +class GraphDataset(BaseDataset, config_name="graph"): def __init__( - self, - dataset, - graph_dir_path, - use_train_data_only=True, - use_user_graph=False, - use_item_graph=False + self, + dataset, + graph_dir_path, + use_train_data_only=True, + use_user_graph=False, + use_item_graph=False, ): self._dataset = dataset self._graph_dir_path = graph_dir_path @@ -338,15 +419,19 @@ def __init__( train_sampler, validation_sampler, test_sampler = dataset.get_samplers() - train_interactions, train_user_interactions, train_item_interactions = [], [], [] + train_interactions, train_user_interactions, train_item_interactions = ( + [], + [], + [], + ) train_user_2_items = defaultdict(set) train_item_2_users = defaultdict(set) visited_user_item_pairs = set() for sample in train_sampler.dataset: - user_id = sample['user.ids'][0] - item_ids = sample['item.ids'] + user_id = sample["user.ids"][0] + item_ids = sample["item.ids"] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -362,8 +447,8 @@ def __init__( # TODO create separated function if not self._use_train_data_only: for sample in validation_sampler.dataset: - user_id = sample['user.ids'][0] - item_ids = sample['item.ids'] + user_id = sample["user.ids"][0] + item_ids = sample["item.ids"] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -377,8 +462,8 @@ def __init__( visited_user_item_pairs.add((user_id, item_id)) for sample in test_sampler.dataset: - user_id = sample['user.ids'][0] - item_ids = sample['item.ids'] + user_id = sample["user.ids"][0] + item_ids = sample["item.ids"] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -395,27 +480,32 @@ def __init__( self._train_user_interactions = np.array(train_user_interactions) self._train_item_interactions = np.array(train_item_interactions) - path_to_graph = os.path.join(graph_dir_path, 'general_graph.npz') + path_to_graph = os.path.join(graph_dir_path, "general_graph.npz") if os.path.exists(path_to_graph): self._graph = sp.load_npz(path_to_graph) else: # place ones only when co-occurrence happens user2item_connections = csr_matrix( - (np.ones(len(train_user_interactions)), (train_user_interactions, train_item_interactions)), - shape=(self._num_users + 2, self._num_items + 2) + ( + np.ones(len(train_user_interactions)), + (train_user_interactions, train_item_interactions), + ), + shape=(self._num_users + 2, self._num_items + 2), ) # (num_users + 2, num_items + 2), bipartite graph self._graph = self.get_sparse_graph_layer( user2item_connections, self._num_users + 2, self._num_items + 2, - biparite=True + biparite=True, ) sp.save_npz(path_to_graph, self._graph) - self._graph = self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) + self._graph = ( + self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) + ) if self._use_user_graph: - path_to_user_graph = os.path.join(graph_dir_path, 'user_graph.npz') + path_to_user_graph = os.path.join(graph_dir_path, "user_graph.npz") if os.path.exists(path_to_user_graph): self._user_graph = sp.load_npz(path_to_user_graph) else: @@ -424,13 +514,18 @@ def __init__( visited_user_item_pairs = set() visited_user_user_pairs = set() - for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): + for user_id, item_id in tqdm( + zip(self._train_user_interactions, self._train_item_interactions) + ): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_user_id in train_item_2_users[item_id]: - if (user_id, connected_user_id) in visited_user_user_pairs or user_id == connected_user_id: + if ( + user_id, + connected_user_id, + ) in visited_user_user_pairs or user_id == connected_user_id: continue # add (user, user) to graph connections pair only once visited_user_user_pairs.add((user_id, connected_user_id)) @@ -440,24 +535,30 @@ def __init__( # (user, user) graph user2user_connections = csr_matrix( ( - np.ones(len(user2user_interactions_fst)), (user2user_interactions_fst, user2user_interactions_snd)), - shape=(self._num_users + 2, self._num_users + 2) + np.ones(len(user2user_interactions_fst)), + (user2user_interactions_fst, user2user_interactions_snd), + ), + shape=(self._num_users + 2, self._num_users + 2), ) self._user_graph = self.get_sparse_graph_layer( user2user_connections, self._num_users + 2, self._num_users + 2, - biparite=False + biparite=False, ) sp.save_npz(path_to_user_graph, self._user_graph) - self._user_graph = self._convert_sp_mat_to_sp_tensor(self._user_graph).coalesce().to(DEVICE) + self._user_graph = ( + self._convert_sp_mat_to_sp_tensor(self._user_graph) + .coalesce() + .to(DEVICE) + ) else: self._user_graph = None if self._use_item_graph: - path_to_item_graph = os.path.join(graph_dir_path, 'item_graph.npz') + path_to_item_graph = os.path.join(graph_dir_path, "item_graph.npz") if os.path.exists(path_to_item_graph): self._item_graph = sp.load_npz(path_to_item_graph) else: @@ -466,13 +567,18 @@ def __init__( visited_user_item_pairs = set() visited_item_item_pairs = set() - for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): + for user_id, item_id in tqdm( + zip(self._train_user_interactions, self._train_item_interactions) + ): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_item_id in train_user_2_items[user_id]: - if (item_id, connected_item_id) in visited_item_item_pairs or item_id == connected_item_id: + if ( + item_id, + connected_item_id, + ) in visited_item_item_pairs or item_id == connected_item_id: continue # add (item, item) to graph connections pair only once visited_item_item_pairs.add((item_id, connected_item_id)) @@ -482,39 +588,42 @@ def __init__( # (item, item) graph item2item_connections = csr_matrix( ( - np.ones(len(item2item_interactions_fst)), (item2item_interactions_fst, item2item_interactions_snd)), - shape=(self._num_items + 2, self._num_items + 2) + np.ones(len(item2item_interactions_fst)), + (item2item_interactions_fst, item2item_interactions_snd), + ), + shape=(self._num_items + 2, self._num_items + 2), ) self._item_graph = self.get_sparse_graph_layer( item2item_connections, self._num_items + 2, self._num_items + 2, - biparite=False + biparite=False, ) sp.save_npz(path_to_item_graph, self._item_graph) - self._item_graph = self._convert_sp_mat_to_sp_tensor(self._item_graph).coalesce().to(DEVICE) + self._item_graph = ( + self._convert_sp_mat_to_sp_tensor(self._item_graph) + .coalesce() + .to(DEVICE) + ) else: self._item_graph = None @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config['dataset']) + dataset = BaseDataset.create_from_config(config["dataset"]) return cls( dataset=dataset, - graph_dir_path=config['graph_dir_path'], - use_user_graph=config.get('use_user_graph', False), - use_item_graph=config.get('use_item_graph', False) + graph_dir_path=config["graph_dir_path"], + use_user_graph=config.get("use_user_graph", False), + use_item_graph=config.get("use_item_graph", False), ) @staticmethod def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): mat_dim_size = fst_dim + snd_dim if biparite else fst_dim - adj_mat = sp.dok_matrix( - (mat_dim_size, mat_dim_size), - dtype=np.float32 - ) + adj_mat = sp.dok_matrix((mat_dim_size, mat_dim_size), dtype=np.float32) adj_mat = adj_mat.tolil() R = sparse_matrix.tolil() # list of lists (fst_dim, snd_dim) @@ -532,11 +641,11 @@ def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): rowsum = np.array(adj_mat.sum(1)) d_inv = np.power(rowsum, -1).flatten() - d_inv[np.isinf(d_inv)] = 0. + d_inv[np.isinf(d_inv)] = 0.0 d_mat_inv = sp.diags(d_inv) d_inv = np.power(edges_degree, -0.5).flatten() # D^(-0.5) - d_inv[np.isinf(d_inv)] = 0. # fix NaNs in case if row with zero connections + d_inv[np.isinf(d_inv)] = 0.0 # fix NaNs in case if row with zero connections d_mat = sp.diags(d_inv) # make it square matrix # D^(-0.5) @ A @ D^(-0.5) @@ -567,16 +676,15 @@ def get_samplers(self): @property def meta(self): meta = { - 'user_graph': self._user_graph, - 'item_graph': self._item_graph, - 'graph': self._graph, - **self._dataset.meta + "user_graph": self._user_graph, + "item_graph": self._item_graph, + "graph": self._graph, + **self._dataset.meta, } return meta -class DuorecDataset(BaseDataset, config_name='duorec'): - +class DuorecDataset(BaseDataset, config_name="duorec"): def __init__(self, dataset): self._dataset = dataset self._num_users = dataset.num_users @@ -586,7 +694,7 @@ def __init__(self, dataset): target_2_sequences = defaultdict(list) for sample in train_sampler.dataset: - item_ids = sample['item.ids'] + item_ids = sample["item.ids"] target_item = item_ids[-1] semantic_similar_item_ids = item_ids[:-1] @@ -597,7 +705,7 @@ def __init__(self, dataset): @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config['dataset']) + dataset = BaseDataset.create_from_config(config["dataset"]) return cls(dataset) @property @@ -616,16 +724,15 @@ def meta(self): return self._dataset.meta -class ScientificDataset(BaseDataset, config_name='scientific'): - +class ScientificDataset(BaseDataset, config_name="scientific"): def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -636,17 +743,17 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - max_sequence_length = config['max_sequence_length'] + data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + max_sequence_length = config["max_sequence_length"] max_user_id, max_item_id = 0, 0 train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, '{}.txt'.format('all_data')) - with open(dataset_path, 'r') as f: + dataset_path = os.path.join(data_dir_path, "{}.txt".format("all_data")) + with open(dataset_path, "r") as f: data = f.readlines() for sample in data: - sample = sample.strip('\n').split(' ') + sample = sample.strip("\n").split(" ") user_id = int(sample[0]) item_ids = [int(item_id) for item_id in sample[1:]] @@ -655,54 +762,69 @@ def create_from_config(cls, config, **kwargs): assert len(item_ids) >= 5 - train_dataset.append({ - 'user.ids': [user_id], - 'user.length': 1, - 'item.ids': item_ids[:-2][-max_sequence_length:], - 'item.length': len(item_ids[:-2][-max_sequence_length:]) - }) - assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) - validation_dataset.append({ - 'user.ids': [user_id], - 'user.length': 1, - 'item.ids': item_ids[:-1][-max_sequence_length:], - 'item.length': len(item_ids[:-1][-max_sequence_length:]) - }) - assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) - test_dataset.append({ - 'user.ids': [user_id], - 'user.length': 1, - 'item.ids': item_ids[-max_sequence_length:], - 'item.length': len(item_ids[-max_sequence_length:]) - }) - assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) - - logger.info('Train dataset size: {}'.format(len(train_dataset))) - logger.info('Test dataset size: {}'.format(len(test_dataset))) - logger.info('Max user id: {}'.format(max_user_id)) - logger.info('Max item id: {}'.format(max_item_id)) - logger.info('Max sequence length: {}'.format(max_sequence_length)) - logger.info('{} dataset sparsity: {}'.format( - config['name'], (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id - )) + train_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids[:-2][-max_sequence_length:], + "item.length": len(item_ids[:-2][-max_sequence_length:]), + } + ) + assert len(item_ids[:-2][-max_sequence_length:]) == len( + set(item_ids[:-2][-max_sequence_length:]) + ) + validation_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids[:-1][-max_sequence_length:], + "item.length": len(item_ids[:-1][-max_sequence_length:]), + } + ) + assert len(item_ids[:-1][-max_sequence_length:]) == len( + set(item_ids[:-1][-max_sequence_length:]) + ) + test_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids[-max_sequence_length:], + "item.length": len(item_ids[-max_sequence_length:]), + } + ) + assert len(item_ids[-max_sequence_length:]) == len( + set(item_ids[-max_sequence_length:]) + ) + + logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Test dataset size: {}".format(len(test_dataset))) + logger.info("Max user id: {}".format(max_user_id)) + logger.info("Max item id: {}".format(max_item_id)) + logger.info("Max sequence length: {}".format(max_sequence_length)) + logger.info( + "{} dataset sparsity: {}".format( + config["name"], + (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id, + ) + ) train_sampler = TrainSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) validation_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) test_sampler = EvalSampler.create_from_config( - config['samplers'], + config["samplers"], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id + num_items=max_item_id, ) return cls( @@ -711,7 +833,7 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_sequence_length + max_sequence_length=max_sequence_length, ) def get_samplers(self): @@ -732,21 +854,14 @@ def max_sequence_length(self): @property def meta(self): return { - 'num_users': self.num_users, - 'num_items': self.num_items, - 'max_sequence_length': self.max_sequence_length + "num_users": self.num_users, + "num_items": self.num_items, + "max_sequence_length": self.max_sequence_length, } -class RqVaeDataset(BaseDataset, config_name='rqvae'): - - def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_items - ): +class RqVaeDataset(BaseDataset, config_name="rqvae"): + def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): self._train_sampler = train_sampler self._validation_sampler = validation_sampler self._test_sampler = test_sampler @@ -754,39 +869,33 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, '{}.pt'.format('data_full')) + dataset_path = os.path.join(data_dir_path, "{}.pt".format("data_full")) df = torch.load(dataset_path, weights_only=False) for idx, sample in df.iterrows(): - train_dataset.append({ - 'item.id': idx, - 'item.embed': sample["embeddings"] - }) - - logger.info('Train dataset size: {}'.format(len(train_dataset))) - logger.info('Test dataset size: {}'.format(len(test_dataset))) + train_dataset.append({"item.id": idx, "item.embed": sample["embeddings"]}) + + logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Test dataset size: {}".format(len(test_dataset))) train_sampler = TrainSampler.create_from_config( - config['samplers'], - dataset=train_dataset + config["samplers"], dataset=train_dataset ) validation_sampler = EvalSampler.create_from_config( - config['samplers'], - dataset=validation_dataset + config["samplers"], dataset=validation_dataset ) test_sampler = EvalSampler.create_from_config( - config['samplers'], - dataset=test_dataset + config["samplers"], dataset=test_dataset ) return cls( train_sampler=train_sampler, validation_sampler=validation_sampler, test_sampler=test_sampler, - num_items=len(df) + num_items=len(df), ) def get_samplers(self): @@ -802,7 +911,4 @@ def max_sequence_length(self): @property def meta(self): - return { - 'num_items': self.num_items, - 'train_sampler': self._train_sampler - } + return {"num_items": self.num_items, "train_sampler": self._train_sampler} diff --git a/modeling/dataset/negative_samplers/__init__.py b/modeling/dataset/negative_samplers/__init__.py index 498de21f..6cac99af 100644 --- a/modeling/dataset/negative_samplers/__init__.py +++ b/modeling/dataset/negative_samplers/__init__.py @@ -2,8 +2,4 @@ from .popular import PopularNegativeSampler from .random import RandomNegativeSampler -__all__ = [ - 'BaseNegativeSampler', - 'PopularNegativeSampler', - 'RandomNegativeSampler' -] +__all__ = ["BaseNegativeSampler", "PopularNegativeSampler", "RandomNegativeSampler"] diff --git a/modeling/dataset/negative_samplers/base.py b/modeling/dataset/negative_samplers/base.py index 5483bd29..ebaef60c 100644 --- a/modeling/dataset/negative_samplers/base.py +++ b/modeling/dataset/negative_samplers/base.py @@ -4,21 +4,15 @@ class BaseNegativeSampler(metaclass=MetaParent): - - def __init__( - self, - dataset, - num_users, - num_items - ): + def __init__(self, dataset, num_users, num_items): self._dataset = dataset self._num_users = num_users self._num_items = num_items self._seen_items = defaultdict(set) for sample in self._dataset: - user_id = sample['user.ids'][0] - items = list(sample['item.ids']) + user_id = sample["user.ids"][0] + items = list(sample["item.ids"]) self._seen_items[user_id].update(items) def generate_negative_samples(self, sample, num_negatives): diff --git a/modeling/dataset/negative_samplers/popular.py b/modeling/dataset/negative_samplers/popular.py index 68476651..6e478e0c 100644 --- a/modeling/dataset/negative_samplers/popular.py +++ b/modeling/dataset/negative_samplers/popular.py @@ -1,44 +1,34 @@ -from dataset.negative_samplers.base import BaseNegativeSampler - from collections import Counter +from dataset.negative_samplers.base import BaseNegativeSampler -class PopularNegativeSampler(BaseNegativeSampler, config_name='popular'): - def __init__( - self, - dataset, - num_users, - num_items - ): - super().__init__( - dataset=dataset, - num_users=num_users, - num_items=num_items - ) +class PopularNegativeSampler(BaseNegativeSampler, config_name="popular"): + def __init__(self, dataset, num_users, num_items): + super().__init__(dataset=dataset, num_users=num_users, num_items=num_items) self._popular_items = self._items_by_popularity() @classmethod def create_from_config(cls, _, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def _items_by_popularity(self): popularity = Counter() for sample in self._dataset: - for item_id in sample['item.ids']: + for item_id in sample["item.ids"]: popularity[item_id] += 1 popular_items = sorted(popularity, key=popularity.get, reverse=True) return popular_items def generate_negative_samples(self, sample, num_negatives): - user_id = sample['user.ids'][0] + user_id = sample["user.ids"][0] popularity_idx = 0 negatives = [] while len(negatives) < num_negatives: diff --git a/modeling/dataset/negative_samplers/random.py b/modeling/dataset/negative_samplers/random.py index b83042b0..b4f44f8c 100644 --- a/modeling/dataset/negative_samplers/random.py +++ b/modeling/dataset/negative_samplers/random.py @@ -1,24 +1,22 @@ from collections import defaultdict +import numpy as np from tqdm import tqdm from dataset.negative_samplers.base import BaseNegativeSampler -import numpy as np - - -class RandomNegativeSampler(BaseNegativeSampler, config_name='random'): +class RandomNegativeSampler(BaseNegativeSampler, config_name="random"): @classmethod def create_from_config(cls, _, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def generate_negative_samples(self, sample, num_negatives): - user_id = sample['user.ids'][0] + user_id = sample["user.ids"][0] all_items = list(range(1, self._num_items + 1)) np.random.shuffle(all_items) diff --git a/modeling/dataset/samplers/__init__.py b/modeling/dataset/samplers/__init__.py index 6ed31eed..40ffd454 100644 --- a/modeling/dataset/samplers/__init__.py +++ b/modeling/dataset/samplers/__init__.py @@ -1,10 +1,19 @@ -from .base import TrainSampler, EvalSampler -from .cl4srec import Cl4SRecTrainSampler, Cl4SRecEvalSampler -from .duorec import DuorecTrainSampler, DuoRecEvalSampler -from .next_item_prediction import NextItemPredictionTrainSampler, NextItemPredictionEvalSampler -from .last_item_prediction import LastItemPredictionTrainSampler, LastItemPredictionEvalSampler -from .masked_item_prediction import MaskedItemPredictionTrainSampler, MaskedItemPredictionEvalSampler -from .mclsr import MCLSRTrainSampler, MCLSRPredictionEvalSampler -from .pop import PopTrainSampler, PopEvalSampler -from .s3rec import S3RecPretrainTrainSampler, S3RecPretrainEvalSampler -from .identity import IdentityTrainSampler, IdentityEvalSampler +from .base import EvalSampler, TrainSampler +from .cl4srec import Cl4SRecEvalSampler, Cl4SRecTrainSampler +from .duorec import DuoRecEvalSampler, DuorecTrainSampler +from .identity import IdentityEvalSampler, IdentityTrainSampler +from .last_item_prediction import ( + LastItemPredictionEvalSampler, + LastItemPredictionTrainSampler, +) +from .masked_item_prediction import ( + MaskedItemPredictionEvalSampler, + MaskedItemPredictionTrainSampler, +) +from .mclsr import MCLSRPredictionEvalSampler, MCLSRTrainSampler +from .next_item_prediction import ( + NextItemPredictionEvalSampler, + NextItemPredictionTrainSampler, +) +from .pop import PopEvalSampler, PopTrainSampler +from .s3rec import S3RecPretrainEvalSampler, S3RecPretrainTrainSampler diff --git a/modeling/dataset/samplers/base.py b/modeling/dataset/samplers/base.py index 2dbfa705..723abb0a 100644 --- a/modeling/dataset/samplers/base.py +++ b/modeling/dataset/samplers/base.py @@ -1,10 +1,9 @@ -from utils import MetaParent - import copy +from utils import MetaParent -class TrainSampler(metaclass=MetaParent): +class TrainSampler(metaclass=MetaParent): def __init__(self): self._dataset = None @@ -20,7 +19,6 @@ def __getitem__(self, index): class EvalSampler(metaclass=MetaParent): - def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -37,16 +35,14 @@ def __len__(self): def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'][:-1] - next_item = sample['item.ids'][-1] + item_sequence = sample["item.ids"][:-1] + next_item = sample["item.ids"][-1] return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'labels.ids': [next_item], - 'labels.length': 1 + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [next_item], + "labels.length": 1, } diff --git a/modeling/dataset/samplers/cl4srec.py b/modeling/dataset/samplers/cl4srec.py index 8aba1de1..6fbcd143 100644 --- a/modeling/dataset/samplers/cl4srec.py +++ b/modeling/dataset/samplers/cl4srec.py @@ -1,20 +1,19 @@ -import numpy as np - -from dataset.samplers.base import TrainSampler, EvalSampler - import copy +import numpy as np + +from dataset.samplers.base import EvalSampler, TrainSampler -class Cl4SRecTrainSampler(TrainSampler, config_name='cl4srec'): +class Cl4SRecTrainSampler(TrainSampler, config_name="cl4srec"): def __init__( - self, - dataset, - num_users, - num_items, - item_crop_portion, - item_mask_portion, - item_reorder_portion + self, + dataset, + num_users, + num_items, + item_crop_portion, + item_mask_portion, + item_reorder_portion, ): super().__init__() self._dataset = dataset @@ -28,19 +27,23 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - item_crop_portion=config['item_crop_portion'], - item_mask_portion=config['item_mask_portion'], - item_reorder_portion=config['item_reorder_portion'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + item_crop_portion=config["item_crop_portion"], + item_mask_portion=config["item_mask_portion"], + item_reorder_portion=config["item_reorder_portion"], ) def _apply_crop_augmentation(self, item_sequence): num_elements_to_crop = max(1, int(self._item_crop_portion * len(item_sequence))) - crop_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_crop + 1) + crop_start_index = np.random.randint( + low=0, high=len(item_sequence) - num_elements_to_crop + 1 + ) assert 0 <= crop_start_index <= len(item_sequence) - num_elements_to_crop - item_sequence = item_sequence[crop_start_index: crop_start_index + num_elements_to_crop] + item_sequence = item_sequence[ + crop_start_index : crop_start_index + num_elements_to_crop + ] return item_sequence def _apply_mask_augmentation(self, item_sequence): @@ -65,22 +68,28 @@ def _apply_mask_augmentation(self, item_sequence): def _apply_reorder_augmentation(self, item_sequence): num_elements_to_reorder = int(self._item_reorder_portion * len(item_sequence)) - reorder_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_reorder + 1) + reorder_start_index = np.random.randint( + low=0, high=len(item_sequence) - num_elements_to_reorder + 1 + ) assert 0 <= reorder_start_index <= len(item_sequence) - num_elements_to_reorder - reordered_subsequence = item_sequence[reorder_start_index: reorder_start_index + num_elements_to_reorder] + reordered_subsequence = item_sequence[ + reorder_start_index : reorder_start_index + num_elements_to_reorder + ] np.random.shuffle(reordered_subsequence) # This works in-place - item_sequence = item_sequence[:reorder_start_index] \ - + reordered_subsequence \ - + item_sequence[reorder_start_index + num_elements_to_reorder:] + item_sequence = ( + item_sequence[:reorder_start_index] + + reordered_subsequence + + item_sequence[reorder_start_index + num_elements_to_reorder :] + ) return item_sequence def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'][:-1] - next_item = sample['item.ids'][-1] + item_sequence = sample["item.ids"][:-1] + next_item = sample["item.ids"][-1] - sample_items = set(sample['item.ids']) + sample_items = set(sample["item.ids"]) negative = np.random.randint(low=1, high=self._num_items + 1) while negative in sample_items: negative = np.random.randint(low=1, high=self._num_items + 1) @@ -88,7 +97,7 @@ def __getitem__(self, index): augmentation_list = [ self._apply_crop_augmentation, self._apply_mask_augmentation, - self._apply_reorder_augmentation + self._apply_reorder_augmentation, ] fst_augmentation = np.random.choice(augmentation_list) @@ -98,35 +107,28 @@ def __getitem__(self, index): snd_augmented_sequence = snd_augmentation(item_sequence) return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'fst_augmented_item.ids': fst_augmented_sequence, - 'fst_augmented_item.length': len(fst_augmented_sequence), - - 'snd_augmented_item.ids': snd_augmented_sequence, - 'snd_augmented_item.length': len(snd_augmented_sequence), - - 'labels.ids': [next_item], - 'labels.length': 1, - - 'positive.ids': [next_item], - 'positive.length': 1, - - 'negative.ids': [negative], - 'negative.length': 1 + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "fst_augmented_item.ids": fst_augmented_sequence, + "fst_augmented_item.length": len(fst_augmented_sequence), + "snd_augmented_item.ids": snd_augmented_sequence, + "snd_augmented_item.length": len(snd_augmented_sequence), + "labels.ids": [next_item], + "labels.length": 1, + "positive.ids": [next_item], + "positive.length": 1, + "negative.ids": [negative], + "negative.length": 1, } -class Cl4SRecEvalSampler(EvalSampler, config_name='cl4srec'): - +class Cl4SRecEvalSampler(EvalSampler, config_name="cl4srec"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/dataset/samplers/duorec.py b/modeling/dataset/samplers/duorec.py index a3067fdd..f45ae100 100644 --- a/modeling/dataset/samplers/duorec.py +++ b/modeling/dataset/samplers/duorec.py @@ -1,12 +1,10 @@ -import random - -from dataset.samplers.base import TrainSampler, EvalSampler - import copy +import random +from dataset.samplers.base import EvalSampler, TrainSampler -class DuorecTrainSampler(TrainSampler, config_name='duorec'): +class DuorecTrainSampler(TrainSampler, config_name="duorec"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -16,15 +14,15 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'] + item_sequence = sample["item.ids"] target_item = item_sequence[-1] item_sequence = item_sequence[:-1] @@ -33,26 +31,22 @@ def __getitem__(self, index): semantic_similar_sequence = random.choice(self._target_2_sequences[target_item]) return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'labels.ids': [target_item], - 'labels.length': 1, - - 'semantic_similar_item.ids': semantic_similar_sequence, - 'semantic_similar_item.length': len(semantic_similar_sequence) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [target_item], + "labels.length": 1, + "semantic_similar_item.ids": semantic_similar_sequence, + "semantic_similar_item.length": len(semantic_similar_sequence), } -class DuoRecEvalSampler(EvalSampler, config_name='duorec'): - +class DuoRecEvalSampler(EvalSampler, config_name="duorec"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/dataset/samplers/identity.py b/modeling/dataset/samplers/identity.py index ffe01e23..4b34b03e 100644 --- a/modeling/dataset/samplers/identity.py +++ b/modeling/dataset/samplers/identity.py @@ -1,35 +1,30 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy +from dataset.samplers.base import EvalSampler, TrainSampler -class IdentityTrainSampler(TrainSampler, config_name='identity'): +class IdentityTrainSampler(TrainSampler, config_name="identity"): def __init__(self, dataset): super().__init__() self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls( - dataset=kwargs['dataset'] - ) + return cls(dataset=kwargs["dataset"]) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) return sample -class IdentityEvalSampler(EvalSampler, config_name='identity'): +class IdentityEvalSampler(EvalSampler, config_name="identity"): def __init__(self, dataset): self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls( - dataset=kwargs['dataset'] - ) - + return cls(dataset=kwargs["dataset"]) + def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - return sample \ No newline at end of file + return sample diff --git a/modeling/dataset/samplers/last_item_prediction.py b/modeling/dataset/samplers/last_item_prediction.py index c0a93212..22eeed51 100644 --- a/modeling/dataset/samplers/last_item_prediction.py +++ b/modeling/dataset/samplers/last_item_prediction.py @@ -1,10 +1,9 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy +from dataset.samplers.base import EvalSampler, TrainSampler -class LastItemPredictionTrainSampler(TrainSampler, config_name='last_item_prediction'): +class LastItemPredictionTrainSampler(TrainSampler, config_name="last_item_prediction"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -14,35 +13,32 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'][:-1] - last_item = sample['item.ids'][-1] + item_sequence = sample["item.ids"][:-1] + last_item = sample["item.ids"][-1] return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'labels.ids': [last_item], - 'labels.length': 1, + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [last_item], + "labels.length": 1, } -class LastItemPredictionEvalSampler(EvalSampler, config_name='last_item_prediction'): - +class LastItemPredictionEvalSampler(EvalSampler, config_name="last_item_prediction"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/dataset/samplers/masked_item_prediction.py b/modeling/dataset/samplers/masked_item_prediction.py index 0100f731..2243e7ca 100644 --- a/modeling/dataset/samplers/masked_item_prediction.py +++ b/modeling/dataset/samplers/masked_item_prediction.py @@ -1,11 +1,13 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy + import numpy as np +from dataset.samplers.base import EvalSampler, TrainSampler -class MaskedItemPredictionTrainSampler(TrainSampler, config_name='masked_item_prediction'): +class MaskedItemPredictionTrainSampler( + TrainSampler, config_name="masked_item_prediction" +): def __init__(self, dataset, num_users, num_items, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -17,16 +19,16 @@ def __init__(self, dataset, num_users, num_items, mask_prob=0.0): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - mask_prob=config.get('mask_prob', 0.0) + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + mask_prob=config.get("mask_prob", 0.0), ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'] + item_sequence = sample["item.ids"] masked_sequence = [] labels = [] @@ -54,19 +56,18 @@ def __getitem__(self, index): labels[-1] = item_sequence[-1] return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': masked_sequence, - 'item.length': len(masked_sequence), - - 'labels.ids': labels, - 'labels.length': len(labels) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": masked_sequence, + "item.length": len(masked_sequence), + "labels.ids": labels, + "labels.length": len(labels), } -class MaskedItemPredictionEvalSampler(EvalSampler, config_name='masked_item_prediction'): - +class MaskedItemPredictionEvalSampler( + EvalSampler, config_name="masked_item_prediction" +): def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) self._mask_item_idx = self._num_items + 1 @@ -74,24 +75,22 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'] + item_sequence = sample["item.ids"] labels = [item_sequence[-1]] sequence = item_sequence[:-1] + [self._mask_item_idx] return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': sequence, - 'item.length': len(sequence), - - 'labels.ids': labels, - 'labels.length': len(labels) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": sequence, + "item.length": len(sequence), + "labels.ids": labels, + "labels.length": len(labels), } diff --git a/modeling/dataset/samplers/mclsr.py b/modeling/dataset/samplers/mclsr.py index 2da0986c..e3610547 100644 --- a/modeling/dataset/samplers/mclsr.py +++ b/modeling/dataset/samplers/mclsr.py @@ -1,10 +1,9 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy +from dataset.samplers.base import EvalSampler, TrainSampler -class MCLSRTrainSampler(TrainSampler, config_name='mclsr'): +class MCLSRTrainSampler(TrainSampler, config_name="mclsr"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -14,39 +13,35 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'][:-1] - next_item = sample['item.ids'][-1] - next_item_sequence = sample['item.ids'][1:] + item_sequence = sample["item.ids"][:-1] + next_item = sample["item.ids"][-1] + next_item_sequence = sample["item.ids"][1:] return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'positive.ids': next_item_sequence, - 'positive.length': len(next_item_sequence), - - 'labels.ids': [next_item], - 'labels.length': 1 + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "positive.ids": next_item_sequence, + "positive.length": len(next_item_sequence), + "labels.ids": [next_item], + "labels.length": 1, } -class MCLSRPredictionEvalSampler(EvalSampler, config_name='mclsr'): - +class MCLSRPredictionEvalSampler(EvalSampler, config_name="mclsr"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/dataset/samplers/next_item_prediction.py b/modeling/dataset/samplers/next_item_prediction.py index c141b065..cf9321ad 100644 --- a/modeling/dataset/samplers/next_item_prediction.py +++ b/modeling/dataset/samplers/next_item_prediction.py @@ -1,12 +1,13 @@ -from dataset.samplers.base import TrainSampler, EvalSampler -from dataset.negative_samplers.base import BaseNegativeSampler - import copy +from dataset.negative_samplers.base import BaseNegativeSampler +from dataset.samplers.base import EvalSampler, TrainSampler -class NextItemPredictionTrainSampler(TrainSampler, config_name='next_item_prediction'): - def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives=0): +class NextItemPredictionTrainSampler(TrainSampler, config_name="next_item_prediction"): + def __init__( + self, dataset, num_users, num_items, negative_sampler, num_negatives=0 + ): super().__init__() self._dataset = dataset self._num_users = num_users @@ -16,32 +17,32 @@ def __init__(self, dataset, num_users, num_items, negative_sampler, num_negative @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) + negative_sampler = BaseNegativeSampler.create_from_config( + {"type": config["negative_sampler_type"]}, **kwargs + ) return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], negative_sampler=negative_sampler, - num_negatives=config.get('num_negatives_train', 0) + num_negatives=config.get("num_negatives_train", 0), ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'][:-1] - next_item_sequence = sample['item.ids'][1:] + item_sequence = sample["item.ids"][:-1] + next_item_sequence = sample["item.ids"][1:] if self._num_negatives == 0: return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'positive.ids': next_item_sequence, - 'positive.length': len(next_item_sequence) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "positive.ids": next_item_sequence, + "positive.length": len(next_item_sequence), } else: negative_sequence = self._negative_sampler.generate_negative_samples( @@ -49,26 +50,22 @@ def __getitem__(self, index): ) return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': item_sequence, - 'item.length': len(item_sequence), - - 'positive.ids': next_item_sequence, - 'positive.length': len(next_item_sequence), - - 'negative.ids': negative_sequence, - 'negative.length': len(negative_sequence) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "positive.ids": next_item_sequence, + "positive.length": len(next_item_sequence), + "negative.ids": negative_sequence, + "negative.length": len(negative_sequence), } -class NextItemPredictionEvalSampler(EvalSampler, config_name='next_item_prediction'): - +class NextItemPredictionEvalSampler(EvalSampler, config_name="next_item_prediction"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/dataset/samplers/pop.py b/modeling/dataset/samplers/pop.py index afd8b208..1d3ace34 100644 --- a/modeling/dataset/samplers/pop.py +++ b/modeling/dataset/samplers/pop.py @@ -1,15 +1,12 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy - from collections import Counter +from dataset.samplers.base import EvalSampler, TrainSampler CANDIDATE_COUNTS = None -class PopTrainSampler(TrainSampler, config_name='pop'): - +class PopTrainSampler(TrainSampler, config_name="pop"): def __init__(self, dataset, num_items): super().__init__() @@ -19,49 +16,48 @@ def __init__(self, dataset, num_items): item_2_count = Counter() for sample in dataset: - items = sample['item.ids'] + items = sample["item.ids"] for item in items: item_2_count[item] += 1 - CANDIDATE_COUNTS = [0] + [ - self._item_2_count[item_id] for item_id in range(1, self._num_items + 1) - ] + [0] # Mask + items + padding - + CANDIDATE_COUNTS = ( + [0] + + [ + self._item_2_count[item_id] + for item_id in range(1, self._num_items + 1) + ] + + [0] + ) # Mask + items + padding + @classmethod def create_from_config(cls, config, **kwargs): - return cls( - dataset=kwargs['dataset'], - num_items=kwargs['num_items'] - ) - + return cls(dataset=kwargs["dataset"], num_items=kwargs["num_items"]) -class PopEvalSampler(EvalSampler, config_name='pop'): +class PopEvalSampler(EvalSampler, config_name="pop"): def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - labels = [sample['item.ids'][-1]] + labels = [sample["item.ids"][-1]] global CANDIDATE_COUNTS assert CANDIDATE_COUNTS is not None return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'labels.ids': labels, - 'labels.length': len(labels), - - 'candidates_counts.ids': CANDIDATE_COUNTS, - 'candidates_counts.length': len(CANDIDATE_COUNTS) + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "labels.ids": labels, + "labels.length": len(labels), + "candidates_counts.ids": CANDIDATE_COUNTS, + "candidates_counts.length": len(CANDIDATE_COUNTS), } diff --git a/modeling/dataset/samplers/s3rec.py b/modeling/dataset/samplers/s3rec.py index d1b424cf..73bf9ff4 100644 --- a/modeling/dataset/samplers/s3rec.py +++ b/modeling/dataset/samplers/s3rec.py @@ -1,12 +1,12 @@ -from dataset.samplers.base import TrainSampler, EvalSampler -from dataset.negative_samplers.base import BaseNegativeSampler - import copy + import numpy as np +from dataset.negative_samplers.base import BaseNegativeSampler +from dataset.samplers.base import EvalSampler, TrainSampler -class S3RecPretrainTrainSampler(TrainSampler, config_name='s3rec_pretrain'): +class S3RecPretrainTrainSampler(TrainSampler, config_name="s3rec_pretrain"): def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -18,27 +18,29 @@ def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0. self._long_sequence = [] for sample in self._dataset: - self._long_sequence.extend(copy.deepcopy(sample['item.ids'])) + self._long_sequence.extend(copy.deepcopy(sample["item.ids"])) @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) + negative_sampler = BaseNegativeSampler.create_from_config( + {"type": config["negative_sampler_type"]}, **kwargs + ) return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], negative_sampler=negative_sampler, - mask_prob=config.get('mask_prob', 0.0) + mask_prob=config.get("mask_prob", 0.0), ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample['item.ids'] + item_sequence = sample["item.ids"] if len(item_sequence) < 3: - assert False, 'Something strange is happening' + assert False, "Something strange is happening" # Masked Item Prediction masked_sequence = [] @@ -63,48 +65,56 @@ def __getitem__(self, index): # Mask last item masked_sequence[-1] = self._mask_item_idx positive_sequence[-1] = item_sequence[-1] - negative_sequence[-1] = self._negative_sampler.generate_negative_samples(sample, 1)[0] - assert len(positive_sequence) == len(negative_sequence) == len(masked_sequence) == len(item_sequence) + negative_sequence[-1] = self._negative_sampler.generate_negative_samples( + sample, 1 + )[0] + assert ( + len(positive_sequence) + == len(negative_sequence) + == len(masked_sequence) + == len(item_sequence) + ) # Segment Prediction sample_length = np.random.randint(1, (len(item_sequence) + 1) // 2) start_id = np.random.randint(0, len(item_sequence) - sample_length) - negative_start_id = np.random.randint(0, len(self._long_sequence) - sample_length) - masked_segment_sequence = item_sequence[:start_id] + [self._mask_item_idx] * sample_length + item_sequence[start_id + sample_length:] - positive_segment = item_sequence[start_id: start_id + sample_length] - negative_segment = self._long_sequence[negative_start_id:negative_start_id + sample_length] + negative_start_id = np.random.randint( + 0, len(self._long_sequence) - sample_length + ) + masked_segment_sequence = ( + item_sequence[:start_id] + + [self._mask_item_idx] * sample_length + + item_sequence[start_id + sample_length :] + ) + positive_segment = item_sequence[start_id : start_id + sample_length] + negative_segment = self._long_sequence[ + negative_start_id : negative_start_id + sample_length + ] assert len(positive_segment) == len(negative_segment) == sample_length return { - 'user.ids': sample['user.ids'], - 'user.length': sample['user.length'], - - 'item.ids': masked_sequence, - 'item.length': len(masked_sequence), - - 'positive.ids': item_sequence, - 'positive.length': len(item_sequence), - - 'negative.ids': negative_sequence, - 'negative.length': len(negative_sequence), - + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": masked_sequence, + "item.length": len(masked_sequence), + "positive.ids": item_sequence, + "positive.length": len(item_sequence), + "negative.ids": negative_sequence, + "negative.length": len(negative_sequence), "item_segment.ids": masked_segment_sequence, "item_segment.length": len(masked_segment_sequence), - - 'positive_segment.ids': positive_segment, - 'positive_segment.length': len(positive_segment), - - 'negative_segment.ids': negative_segment, - 'negative_segment.length': len(negative_segment) + "positive_segment.ids": positive_segment, + "positive_segment.length": len(positive_segment), + "negative_segment.ids": negative_segment, + "negative_segment.length": len(negative_segment), } -class S3RecPretrainEvalSampler(EvalSampler, config_name='s3rec_pretrain'): - +class S3RecPretrainEvalSampler(EvalSampler, config_name="s3rec_pretrain"): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs['dataset'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'] + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], ) diff --git a/modeling/infer.py b/modeling/infer.py index c3abe16c..5bd4664e 100644 --- a/modeling/infer.py +++ b/modeling/infer.py @@ -1,15 +1,14 @@ -from utils import parse_args, create_logger, fix_random_seed, DEVICE - -from dataset import BaseDataset -from dataloader import BaseDataloader -from models import BaseModel, TorchModel -from metric import BaseMetric, StatefullMetric - +import datetime import json + import numpy as np import torch -import datetime +from dataloader import BaseDataloader +from dataset import BaseDataset +from metric import BaseMetric, StatefullMetric +from models import BaseModel, TorchModel +from utils import DEVICE, create_logger, fix_random_seed, parse_args logger = create_logger(name=__name__) seed_val = 42 @@ -25,7 +24,6 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): with torch.no_grad(): for idx, batch in enumerate(dataloader): - for key, value in batch.items(): batch[key] = value.to(DEVICE) batch[pred_prefix] = model(batch) @@ -34,57 +32,62 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): batch[key] = values.cpu() for metric_name, metric_function in metrics.items(): - running_metrics[metric_name].extend(metric_function( - inputs=batch, - pred_prefix=pred_prefix, - labels_prefix=labels_prefix, - )) - + running_metrics[metric_name].extend( + metric_function( + inputs=batch, + pred_prefix=pred_prefix, + labels_prefix=labels_prefix, + ) + ) + for metric_name, metric_function in metrics.items(): if isinstance(metric_function, StatefullMetric): - running_metrics[metric_name] = metric_function.reduce(running_metrics[metric_name]) + running_metrics[metric_name] = metric_function.reduce( + running_metrics[metric_name] + ) - logger.debug('Inference procedure has been finished!') - logger.debug('Metrics are the following:') + logger.debug("Inference procedure has been finished!") + logger.debug("Metrics are the following:") for metric_name, metric_value in running_metrics.items(): - logger.info('{}: {}'.format(metric_name, np.mean(metric_value))) + logger.info("{}: {}".format(metric_name, np.mean(metric_value))) def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug('Inference config: \n{}'.format(json.dumps(config, indent=2))) + logger.debug("Inference config: \n{}".format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config['dataset']) + dataset = BaseDataset.create_from_config(config["dataset"]) _, _, eval_dataset = dataset.get_samplers() eval_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], - dataset=eval_dataset + config["dataloader"]["validation"], dataset=eval_dataset ) - model = BaseModel.create_from_config(config['model'], **dataset.meta) + model = BaseModel.create_from_config(config["model"], **dataset.meta) if isinstance(model, TorchModel): model = model.to(DEVICE) - checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) + checkpoint_path = "../checkpoints/{}_final_state.pth".format( + config["experiment_name"] + ) model.load_state_dict(torch.load(checkpoint_path)) metrics = { - metric_name: BaseMetric.create_from_config(metric_cfg , **dataset.meta) - for metric_name, metric_cfg in config['metrics'].items() + metric_name: BaseMetric.create_from_config(metric_cfg, **dataset.meta) + for metric_name, metric_cfg in config["metrics"].items() } _ = inference( - dataloader=eval_dataloader, - model=model, - metrics=metrics, - pred_prefix=config['pred_prefix'], - labels_prefix=config['label_prefix'] + dataloader=eval_dataloader, + model=model, + metrics=metrics, + pred_prefix=config["pred_prefix"], + labels_prefix=config["label_prefix"], ) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 7827a7f7..d39fff6b 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -1,11 +1,11 @@ import copy -from utils import MetaParent, get_activation_function, maybe_to_list, DEVICE - import torch import torch.nn as nn import torch.nn.functional as F +from utils import DEVICE, MetaParent, get_activation_function, maybe_to_list + class BaseLoss(metaclass=MetaParent): pass @@ -15,14 +15,12 @@ class TorchLoss(BaseLoss, nn.Module): pass -class IdentityLoss(BaseLoss, config_name='identity'): - +class IdentityLoss(BaseLoss, config_name="identity"): def __call__(self, inputs): return inputs -class CompositeLoss(TorchLoss, config_name='composite'): - +class CompositeLoss(TorchLoss, config_name="composite"): def __init__(self, losses, weights=None, output_prefix=None): super().__init__() self._losses = losses @@ -34,14 +32,16 @@ def create_from_config(cls, config, **kwargs): losses = [] weights = [] - for loss_cfg in copy.deepcopy(config)['losses']: - weight = loss_cfg.pop('weight') if 'weight' in loss_cfg else 1.0 + for loss_cfg in copy.deepcopy(config)["losses"]: + weight = loss_cfg.pop("weight") if "weight" in loss_cfg else 1.0 loss_function = BaseLoss.create_from_config(loss_cfg) weights.append(weight) losses.append(loss_function) - return cls(losses=losses, weights=weights, output_prefix=config.get('output_prefix')) + return cls( + losses=losses, weights=weights, output_prefix=config.get("output_prefix") + ) def forward(self, inputs): total_loss = 0.0 @@ -53,7 +53,8 @@ def forward(self, inputs): return total_loss -class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): + +class SampleLogSoftmaxLoss(TorchLoss, config_name="sample_logsoftmax"): def __init__(self, predictions_prefix, labels): super().__init__() self._predictions_prefix = predictions_prefix @@ -62,37 +63,38 @@ def __init__(self, predictions_prefix, labels): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get('predictions_prefix'), - labels=config.get('labels') + predictions_prefix=config.get("predictions_prefix"), + labels=config.get("labels"), ) def forward(self, inputs): # use log soft max logits = inputs[self._predictions_prefix] candidates = inputs[self._labels] - + assert len(logits.shape) in [2, 3] - + batch_size = logits.shape[0] seq_len = logits.shape[1] - + if len(logits.shape) == 3: loss = -torch.gather( - torch.log_softmax(logits, dim=-1).reshape(batch_size * seq_len, logits.shape[-1]), - dim=-1, - index=candidates.reshape(batch_size * seq_len, 1) + torch.log_softmax(logits, dim=-1).reshape( + batch_size * seq_len, logits.shape[-1] + ), + dim=-1, + index=candidates.reshape(batch_size * seq_len, 1), ).mean() else: loss = -torch.gather( torch.log_softmax(logits, dim=-1), - dim=-1, - index=candidates.reshape(batch_size, 1) + dim=-1, + index=candidates.reshape(batch_size, 1), ).mean() - - return loss + return loss -class BatchLogSoftmaxLoss(TorchLoss, config_name='batch_logsoftmax'): +class BatchLogSoftmaxLoss(TorchLoss, config_name="batch_logsoftmax"): def __init__(self, predictions_prefix, candidates_prefix): super().__init__() self._predictions_prefix = predictions_prefix @@ -101,8 +103,8 @@ def __init__(self, predictions_prefix, candidates_prefix): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get('predictions_prefix'), - candidates_prefix=config.get('candidates_prefix') + predictions_prefix=config.get("predictions_prefix"), + candidates_prefix=config.get("candidates_prefix"), ) def forward(self, inputs): # use log soft max @@ -121,8 +123,7 @@ def forward(self, inputs): # use log soft max return loss -class CrossEntropyLoss(TorchLoss, config_name='ce'): - +class CrossEntropyLoss(TorchLoss, config_name="ce"): def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): super().__init__() self._pred_prefix = predictions_prefix @@ -133,7 +134,7 @@ def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): def forward(self, inputs): all_logits = inputs[self._pred_prefix] # (all_items, num_classes) - all_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_items) + all_labels = inputs["{}.ids".format(self._labels_prefix)] # (all_items) assert all_logits.shape[0] == all_labels.shape[0] loss = self._loss(all_logits, all_labels) # (1) @@ -141,55 +142,48 @@ def forward(self, inputs): inputs[self._output_prefix] = loss.cpu().item() return loss - -class RqVaeLoss(TorchLoss, config_name='rqvae_loss'): + +class RqVaeLoss(TorchLoss, config_name="rqvae_loss"): def __init__(self, beta, output_prefix=None): super().__init__() self.beta = beta self._output_prefix = output_prefix - + self._loss = nn.MSELoss() - + @classmethod def create_from_config(cls, config, **kwargs): # 0.25 is default Beta in paper return cls( - beta = config.get('beta', 0.25), - output_prefix = config['output_prefix'], + beta=config.get("beta", 0.25), + output_prefix=config["output_prefix"], ) - + def forward(self, inputs): embeddings = inputs["embeddings"] embeddings_restored = inputs["embeddings_restored"] remainders = inputs["remainders"] codebooks_vectors = inputs["codebooks_vectors"] - + rqvae_loss = 0 - + for remainder, codebook_vectors in zip(remainders, codebooks_vectors): - rqvae_loss += self.beta * self._loss( - remainder, codebook_vectors.detach() - ) + rqvae_loss += self.beta * self._loss(remainder, codebook_vectors.detach()) rqvae_loss += self._loss(codebook_vectors, remainder.detach()) - + recon_loss = self._loss(embeddings_restored, embeddings) loss = (recon_loss + rqvae_loss).mean(dim=0) - + if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() - - return loss + return loss -class BinaryCrossEntropyLoss(TorchLoss, config_name='bce'): +class BinaryCrossEntropyLoss(TorchLoss, config_name="bce"): def __init__( - self, - predictions_prefix, - labels_prefix, - with_logits=True, - output_prefix=None + self, predictions_prefix, labels_prefix, with_logits=True, output_prefix=None ): super().__init__() self._pred_prefix = predictions_prefix @@ -213,14 +207,8 @@ def forward(self, inputs): return loss -class BPRLoss(TorchLoss, config_name='bpr'): - - def __init__( - self, - positive_prefix, - negative_prefix, - output_prefix=None - ): +class BPRLoss(TorchLoss, config_name="bpr"): + def __init__(self, positive_prefix, negative_prefix, output_prefix=None): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -237,8 +225,7 @@ def forward(self, inputs): return loss -class RegularizationLoss(TorchLoss, config_name='regularization'): - +class RegularizationLoss(TorchLoss, config_name="regularization"): def __init__(self, prefix, output_prefix=None): super().__init__() self._prefix = maybe_to_list(prefix) @@ -247,7 +234,7 @@ def __init__(self, prefix, output_prefix=None): def forward(self, inputs): loss = 0.0 for prefix in self._prefix: - loss += (1/2) * inputs[prefix].pow(2).mean() + loss += (1 / 2) * inputs[prefix].pow(2).mean() if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() @@ -255,22 +242,23 @@ def forward(self, inputs): return loss -class FpsLoss(TorchLoss, config_name='fps'): - +class FpsLoss(TorchLoss, config_name="fps"): def __init__( - self, - fst_embeddings_prefix, - snd_embeddings_prefix, - tau=1.0, - normalize_embeddings=False, - use_mean=True, - output_prefix=None + self, + fst_embeddings_prefix, + snd_embeddings_prefix, + tau=1.0, + normalize_embeddings=False, + use_mean=True, + output_prefix=None, ): super().__init__() self._fst_embeddings_prefix = fst_embeddings_prefix self._snd_embeddings_prefix = snd_embeddings_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss(reduction='mean' if use_mean else 'sum') + self._loss_function = nn.CrossEntropyLoss( + reduction="mean" if use_mean else "sum" + ) self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix @@ -280,34 +268,49 @@ def forward(self, inputs): batch_size = fst_embeddings.shape[0] - combined_embeddings = torch.cat((fst_embeddings, snd_embeddings), dim=0) # (2 * x, embedding_dim) + combined_embeddings = torch.cat( + (fst_embeddings, snd_embeddings), dim=0 + ) # (2 * x, embedding_dim) if self._normalize_embeddings: combined_embeddings = torch.nn.functional.normalize( combined_embeddings, p=2, dim=-1, eps=1e-6 ) # (2 * x, embedding_dim) - similarity_scores = torch.mm( - combined_embeddings, - combined_embeddings.T - ) / self._tau # (2 * x, 2 * x) + similarity_scores = ( + torch.mm(combined_embeddings, combined_embeddings.T) / self._tau + ) # (2 * x, 2 * x) positive_samples = torch.cat( - (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), - dim=0 + ( + torch.diag(similarity_scores, batch_size), + torch.diag(similarity_scores, -batch_size), + ), + dim=0, ).reshape(2 * batch_size, 1) # (2 * x, 1) - assert torch.allclose(torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)) + assert torch.allclose( + torch.diag(similarity_scores, batch_size), + torch.diag(similarity_scores, -batch_size), + ) - mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) + mask = torch.ones( + 2 * batch_size, 2 * batch_size, dtype=torch.bool + ) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape( + 2 * batch_size, -1 + ) # (2 * x, 2 * x - 2) - labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) - logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) + labels = ( + torch.zeros(2 * batch_size).to(positive_samples.device).long() + ) # (2 * x) + logits = torch.cat( + (positive_samples, negative_samples), dim=1 + ) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) @@ -317,14 +320,8 @@ def forward(self, inputs): return loss -class SASRecLoss(TorchLoss, config_name='sasrec'): - - def __init__( - self, - positive_prefix, - negative_prefix, - output_prefix=None - ): +class SASRecLoss(TorchLoss, config_name="sasrec"): + def __init__(self, positive_prefix, negative_prefix, output_prefix=None): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -334,27 +331,40 @@ def forward(self, inputs): positive_scores = inputs[self._positive_prefix] # (x, embedding_dim) negative_scores = inputs[self._negative_prefix] # (x, embedding_dim) sample_ids = inputs["sample_ids"] - + num_items = negative_scores.shape[1] - 2 - - possible_indices = torch.arange(1, num_items + 1, device=negative_scores.device) # 1, 2, ... num_items - mask = torch.ones_like(possible_indices, dtype=torch.bool) # True, True, ... True - mask[sample_ids - 1] = False # True, False, ... False, True, ... True - valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids - - rand_idx = torch.randint(0, len(valid_indices), size=(negative_scores.shape[0], 1), device=negative_scores.device) + + possible_indices = torch.arange( + 1, num_items + 1, device=negative_scores.device + ) # 1, 2, ... num_items + mask = torch.ones_like( + possible_indices, dtype=torch.bool + ) # True, True, ... True + mask[sample_ids - 1] = False # True, False, ... False, True, ... True + valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids + + rand_idx = torch.randint( + 0, + len(valid_indices), + size=(negative_scores.shape[0], 1), + device=negative_scores.device, + ) index = valid_indices[rand_idx] - + negative_scores = torch.gather( input=negative_scores, dim=1, index=index, ) - + assert positive_scores.shape[0] == negative_scores.shape[0] - positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum(dim=-1) # (x) - negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores) + 1e-9).sum(dim=-1) # (x), added 1e-9 for Tiger baseline + positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum( + dim=-1 + ) # (x) + negative_loss = torch.log( + 1.0 - nn.functional.sigmoid(negative_scores) + 1e-9 + ).sum(dim=-1) # (x), added 1e-9 for Tiger baseline loss = positive_loss + negative_loss # (x) loss = -loss.sum() # (1) @@ -364,14 +374,9 @@ def forward(self, inputs): return loss -class SamplesSoftmaxLoss(TorchLoss, config_name='sampled_softmax'): - +class SamplesSoftmaxLoss(TorchLoss, config_name="sampled_softmax"): def __init__( - self, - queries_prefix, - positive_prefix, - negative_prefix, - output_prefix=None + self, queries_prefix, positive_prefix, negative_prefix, output_prefix=None ): super().__init__() self._queries_prefix = queries_prefix @@ -381,32 +386,34 @@ def __init__( def forward(self, inputs): queries_embeddings = inputs[self._queries_prefix] # (batch_size, embedding_dim) - positive_embeddings = inputs[self._positive_prefix] # (batch_size, embedding_dim) - negative_embeddings = inputs[self._negative_prefix] # (num_negatives, embedding_dim) or (batch_size, num_negatives, embedding_dim) + positive_embeddings = inputs[ + self._positive_prefix + ] # (batch_size, embedding_dim) + negative_embeddings = inputs[ + self._negative_prefix + ] # (num_negatives, embedding_dim) or (batch_size, num_negatives, embedding_dim) # b -- batch_size, d -- embedding_dim positive_scores = torch.einsum( - 'bd,bd->b', - queries_embeddings, - positive_embeddings + "bd,bd->b", queries_embeddings, positive_embeddings ).unsqueeze(-1) # (batch_size, 1) if negative_embeddings.dim() == 2: # (num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - 'bd,nd->bn', - queries_embeddings, - negative_embeddings + "bd,nd->bn", queries_embeddings, negative_embeddings ) # (batch_size, num_negatives) else: - assert negative_embeddings.dim() == 3 # (batch_size, num_negatives, embedding_dim) + assert ( + negative_embeddings.dim() == 3 + ) # (batch_size, num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - 'bd,bnd->bn', - queries_embeddings, - negative_embeddings + "bd,bnd->bn", queries_embeddings, negative_embeddings ) # (batch_size, num_negatives) - all_scores = torch.cat([positive_scores, negative_scores], dim=1) # (batch_size, 1 + num_negatives) + all_scores = torch.cat( + [positive_scores, negative_scores], dim=1 + ) # (batch_size, 1 + num_negatives) logits = torch.log_softmax(all_scores, dim=1) # (batch_size, 1 + num_negatives) loss = (-logits)[:, 0] # (batch_size) @@ -418,14 +425,13 @@ def forward(self, inputs): return loss -class S3RecPretrainLoss(TorchLoss, config_name='s3rec_pretrain'): - +class S3RecPretrainLoss(TorchLoss, config_name="s3rec_pretrain"): def __init__( - self, - positive_prefix, - negative_prefix, - representation_prefix, - output_prefix=None + self, + positive_prefix, + negative_prefix, + representation_prefix, + output_prefix=None, ): super().__init__() self._positive_prefix = positive_prefix @@ -438,36 +444,39 @@ def forward(self, inputs): positive_embeddings = inputs[self._positive_prefix] # (x, embedding_dim) negative_embeddings = inputs[self._negative_prefix] # (x, embedding_dim) current_embeddings = inputs[self._representation_prefix] # (x, embedding_dim) - assert positive_embeddings.shape[0] == negative_embeddings.shape[0] == current_embeddings.shape[0] + assert ( + positive_embeddings.shape[0] + == negative_embeddings.shape[0] + == current_embeddings.shape[0] + ) positive_scores = torch.einsum( - 'bd,bd->b', - positive_embeddings, - current_embeddings + "bd,bd->b", positive_embeddings, current_embeddings ) # (x) negative_scores = torch.einsum( - 'bd,bd->b', - negative_embeddings, - current_embeddings + "bd,bd->b", negative_embeddings, current_embeddings ) # (x) - distance = torch.sigmoid(positive_scores) - torch.sigmoid(negative_scores) # (x) - loss = torch.sum(self._criterion(distance, torch.ones_like(distance, dtype=torch.float32))) # (1) + distance = torch.sigmoid(positive_scores) - torch.sigmoid( + negative_scores + ) # (x) + loss = torch.sum( + self._criterion(distance, torch.ones_like(distance, dtype=torch.float32)) + ) # (1) if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() return loss -class Cl4sRecLoss(TorchLoss, config_name='cl4srec'): - +class Cl4sRecLoss(TorchLoss, config_name="cl4srec"): def __init__( - self, - current_representation, - all_items_representation, - tau=1.0, - output_prefix=None + self, + current_representation, + all_items_representation, + tau=1.0, + output_prefix=None, ): super().__init__() self._current_representation = current_representation @@ -477,7 +486,9 @@ def __init__( self._output_prefix = output_prefix def forward(self, inputs): - current_representation = inputs[self._current_representation] # (batch_size, embedding_dim) + current_representation = inputs[ + self._current_representation + ] # (batch_size, embedding_dim) all_items_representation = inputs[ self._all_items_representation ] # (batch_size, num_negatives + 1, embedding_dim) @@ -485,9 +496,7 @@ def forward(self, inputs): batch_size = current_representation.shape[0] logits = torch.einsum( - 'bnd,bd->bn', - all_items_representation, - current_representation + "bnd,bd->bn", all_items_representation, current_representation ) # (batch_size, num_negatives + 1) labels = logits.new_zeros(batch_size) # (batch_size) @@ -499,16 +508,15 @@ def forward(self, inputs): return loss -class DuorecSSLLoss(TorchLoss, config_name='duorec_ssl'): - +class DuorecSSLLoss(TorchLoss, config_name="duorec_ssl"): def __init__( - self, - original_embedding_prefix, - dropout_embedding_prefix, - similar_embedding_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None + self, + original_embedding_prefix, + dropout_embedding_prefix, + similar_embedding_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None, ): super().__init__() self._original_embedding_prefix = original_embedding_prefix @@ -517,14 +525,13 @@ def __init__( self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss(reduction='mean') + self._loss_function = nn.CrossEntropyLoss(reduction="mean") def _compute_partial_loss(self, fst_embeddings, snd_embeddings): batch_size = fst_embeddings.shape[0] combined_embeddings = torch.cat( - (fst_embeddings, snd_embeddings), - dim=0 + (fst_embeddings, snd_embeddings), dim=0 ) # (2 * x, embedding_dim) if self._normalize_embeddings: @@ -532,59 +539,76 @@ def _compute_partial_loss(self, fst_embeddings, snd_embeddings): combined_embeddings, p=2, dim=-1, eps=1e-6 ) - similarity_scores = torch.mm( - combined_embeddings, - combined_embeddings.T - ) / self._tau # (2 * x, 2 * x) + similarity_scores = ( + torch.mm(combined_embeddings, combined_embeddings.T) / self._tau + ) # (2 * x, 2 * x) positive_samples = torch.cat( - (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), - dim=0 + ( + torch.diag(similarity_scores, batch_size), + torch.diag(similarity_scores, -batch_size), + ), + dim=0, ).reshape(2 * batch_size, 1) # (2 * x, 1) # TODO optimize - mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) + mask = torch.ones( + 2 * batch_size, 2 * batch_size, dtype=torch.bool + ) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape( + 2 * batch_size, -1 + ) # (2 * x, 2 * x - 2) - labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) - logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) + labels = ( + torch.zeros(2 * batch_size).to(positive_samples.device).long() + ) # (2 * x) + logits = torch.cat( + (positive_samples, negative_samples), dim=1 + ) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) return loss def forward(self, inputs): - original_embeddings = inputs[self._original_embedding_prefix] # (x, embedding_dim) - dropout_embeddings = inputs[self._dropout_embedding_prefix] # (x, embedding_dim) - similar_embeddings = inputs[self._similar_embedding_prefix] # (x, embedding_dim) - - dropout_loss = self._compute_partial_loss(original_embeddings, dropout_embeddings) + original_embeddings = inputs[ + self._original_embedding_prefix + ] # (x, embedding_dim) + dropout_embeddings = inputs[ + self._dropout_embedding_prefix + ] # (x, embedding_dim) + similar_embeddings = inputs[ + self._similar_embedding_prefix + ] # (x, embedding_dim) + + dropout_loss = self._compute_partial_loss( + original_embeddings, dropout_embeddings + ) ssl_loss = self._compute_partial_loss(original_embeddings, similar_embeddings) loss = dropout_loss + ssl_loss if self._output_prefix is not None: - inputs[f'{self._output_prefix}_dropout'] = dropout_loss.cpu().item() - inputs[f'{self._output_prefix}_ssl'] = ssl_loss.cpu().item() + inputs[f"{self._output_prefix}_dropout"] = dropout_loss.cpu().item() + inputs[f"{self._output_prefix}_ssl"] = ssl_loss.cpu().item() inputs[self._output_prefix] = loss.cpu().item() return loss -class MCLSRLoss(TorchLoss, config_name='mclsr'): - +class MCLSRLoss(TorchLoss, config_name="mclsr"): def __init__( - self, - all_scores_prefix, - mask_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None + self, + all_scores_prefix, + mask_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None, ): super().__init__() self._all_scores_prefix = all_scores_prefix @@ -594,7 +618,9 @@ def __init__( self._tau = tau def forward(self, inputs): - all_scores = inputs[self._all_scores_prefix] # (batch_size, batch_size, seq_len) + all_scores = inputs[ + self._all_scores_prefix + ] # (batch_size, batch_size, seq_len) mask = inputs[self._mask_prefix] # (batch_size) batch_size = mask.shape[0] @@ -604,8 +630,7 @@ def forward(self, inputs): positive_scores = all_scores[positive_mask] # (batch_size, seq_len) negative_scores = torch.reshape( - all_scores[~positive_mask], - shape=(batch_size, batch_size - 1, seq_len) + all_scores[~positive_mask], shape=(batch_size, batch_size - 1, seq_len) ) # (batch_size, batch_size - 1, seq_len) assert torch.allclose(all_scores[0, 1], negative_scores[0, 0]) assert torch.allclose(all_scores[-1, -2], negative_scores[-1, -1]) diff --git a/modeling/metric/base.py b/modeling/metric/base.py index 677f9086..e22c1d20 100644 --- a/modeling/metric/base.py +++ b/modeling/metric/base.py @@ -1,19 +1,18 @@ -from utils import MetaParent - import torch +from utils import MetaParent + class BaseMetric(metaclass=MetaParent): pass class StatefullMetric(BaseMetric): - def reduce(self): raise NotImplementedError -class StaticMetric(BaseMetric, config_name='dummy'): +class StaticMetric(BaseMetric, config_name="dummy"): def __init__(self, name, value): self._name = name self._value = value @@ -24,17 +23,15 @@ def __call__(self, inputs): return inputs -class CompositeMetric(BaseMetric, config_name='composite'): - +class CompositeMetric(BaseMetric, config_name="composite"): def __init__(self, metrics): self._metrics = metrics @classmethod def create_from_config(cls, config): - return cls(metrics=[ - BaseMetric.create_from_config(cfg) - for cfg in config['metrics'] - ]) + return cls( + metrics=[BaseMetric.create_from_config(cfg) for cfg in config["metrics"]] + ) def __call__(self, inputs): for metric in self._metrics: @@ -42,57 +39,63 @@ def __call__(self, inputs): return inputs -class NDCGMetric(BaseMetric, config_name='ndcg'): - +class NDCGMetric(BaseMetric, config_name="ndcg"): def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) - labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][ + :, : self._k + ].float() # (batch_size, top_k_indices) + labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) - discount_factor = 1 / torch.log2(torch.arange(1, self._k + 1, 1).float() + 1.).to(hits.device) # (k) - dcg = torch.einsum('bk,k->b', hits, discount_factor) # (batch_size) + hits = torch.eq( + predictions, labels[..., None] + ).float() # (batch_size, top_k_indices) + discount_factor = 1 / torch.log2( + torch.arange(1, self._k + 1, 1).float() + 1.0 + ).to(hits.device) # (k) + dcg = torch.einsum("bk,k->b", hits, discount_factor) # (batch_size) return dcg.cpu().tolist() -class RecallMetric(BaseMetric, config_name='recall'): - +class RecallMetric(BaseMetric, config_name="recall"): def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) - labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][ + :, : self._k + ].float() # (batch_size, top_k_indices) + labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) + hits = torch.eq( + predictions, labels[..., None] + ).float() # (batch_size, top_k_indices) recall = hits.sum(dim=-1) # (batch_size) return recall.cpu().tolist() -class CoverageMetric(StatefullMetric, config_name='coverage'): - +class CoverageMetric(StatefullMetric, config_name="coverage"): def __init__(self, k, num_items): self._k = k self._num_items = num_items - + @classmethod def create_from_config(cls, config, **kwargs): - return cls( - k=config['k'], - num_items=kwargs['num_items'] - ) + return cls(k=config["k"], num_items=kwargs["num_items"]) def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) + predictions = inputs[pred_prefix][ + :, : self._k + ].float() # (batch_size, top_k_indices) return predictions.view(-1).long().cpu().detach().tolist() # (batch_size * k) - + def reduce(self, values): return len(set(values)) / self._num_items diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index e03dc42d..8f8e2039 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -12,10 +12,10 @@ from .pop import PopModel from .pure_mf import PureMF from .random import RandomModel -from .sasrec import SasRecModel, SasRecInBatchModel +from .rqvae import RqVaeModel +from .s3rec import S3RecModel +from .sasrec import SasRecInBatchModel, SasRecModel +from .sasrec_ce import SasRecCeModel from .sasrec_freezed import SasRecFreezedModel from .sasrec_semantic import SasRecSemanticModel -from .sasrec_ce import SasRecCeModel -from .s3rec import S3RecModel -from .rqvae import RqVaeModel from .tiger import TigerModel diff --git a/modeling/models/base.py b/modeling/models/base.py index b3abef1e..b4dd440a 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -1,5 +1,6 @@ import torch import torch.nn as nn + from utils import DEVICE, MetaParent, create_masked_tensor, get_activation_function @@ -8,39 +9,42 @@ class BaseModel(metaclass=MetaParent): class TorchModel(nn.Module, BaseModel): - @torch.no_grad() def _init_weights(self, initializer_range): for key, value in self.named_parameters(): - if 'weight' in key: - if 'norm' in key: + if "weight" in key: + if "norm" in key: nn.init.ones_(value.data) else: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range + b=2 * initializer_range, ) - elif 'bias' in key: + elif "bias" in key: nn.init.zeros_(value.data) - elif 'codebook' in key: + elif "codebook" in key: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range + b=2 * initializer_range, ) else: - raise ValueError(f'Unknown transformer weight: {key}') + raise ValueError(f"Unknown transformer weight: {key}") @staticmethod def _get_last_embedding(embeddings, mask): lengths = torch.sum(mask, dim=-1) # (batch_size) - lengths = (lengths - 1) # (batch_size) + lengths = lengths - 1 # (batch_size) last_masks = mask.gather(dim=1, index=lengths[:, None]) # (batch_size, 1) - lengths = torch.tile(lengths[:, None, None], (1, 1, embeddings.shape[-1])) # (batch_size, 1, emb_dim) - last_embeddings = embeddings.gather(dim=1, index=lengths) # (batch_size, 1, emb_dim) + lengths = torch.tile( + lengths[:, None, None], (1, 1, embeddings.shape[-1]) + ) # (batch_size, 1, emb_dim) + last_embeddings = embeddings.gather( + dim=1, index=lengths + ) # (batch_size, 1, emb_dim) last_embeddings = last_embeddings[last_masks] # (batch_size, emb_dim) if not torch.allclose(embeddings[mask][-1], last_embeddings[-1]): print(embeddings) @@ -52,19 +56,18 @@ def _get_last_embedding(embeddings, mask): class SequentialTorchModel(TorchModel): - def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5, - is_causal=True + self, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, + is_causal=True, ): super().__init__() self._is_causal = is_causal @@ -74,11 +77,12 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim + embedding_dim=embedding_dim, ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim + num_embeddings=max_sequence_length + + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim, ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -91,21 +95,22 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True + batch_first=True, ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - + def get_item_embeddings(self, events): return self._item_embeddings(events) def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): - embeddings = self.get_item_embeddings(events) # (all_batch_events, embedding_dim) - + embeddings = self.get_item_embeddings( + events + ) # (all_batch_events, embedding_dim) + assert embeddings.shape[0] == sum(lengths) embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=lengths + data=embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] @@ -114,7 +119,9 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): position_embeddings = self._encoder_pos_embeddings(lengths, mask) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + embeddings = ( + embeddings + position_embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -125,19 +132,21 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): cls_token_tensor = self._cls_token.unsqueeze(0).unsqueeze(0) cls_token_expanded = torch.tile(cls_token_tensor, (batch_size, 1, 1)) embeddings = torch.cat((cls_token_expanded, embeddings), dim=1) - mask = torch.cat((torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), dim=1) + mask = torch.cat( + (torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), + dim=1, + ) if self._is_causal: - causal_mask = torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) # (seq_len, seq_len) + causal_mask = ( + torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) + ) # (seq_len, seq_len) embeddings = self._encoder( - src=embeddings, - mask=~causal_mask, - src_key_padding_mask=~mask + src=embeddings, mask=~causal_mask, src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, - src_key_padding_mask=~mask + src=embeddings, src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) return embeddings, mask @@ -146,16 +155,19 @@ def _encoder_pos_embeddings(self, lengths, mask): batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths + data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) return position_embeddings @@ -165,17 +177,18 @@ def _add_cls_token(items, lengths, cls_token_id=0): batch_size = lengths.shape[0] num_new_items = num_items + batch_size - new_items = torch.ones( - num_new_items, - dtype=items.dtype, - device=items.device - ) * cls_token_id # (num_new_items) + new_items = ( + torch.ones(num_new_items, dtype=items.dtype, device=items.device) + * cls_token_id + ) # (num_new_items) old_items_mask = torch.zeros_like(new_items).bool() # (num_new_items) old_items_mask = ~old_items_mask.scatter( src=torch.ones_like(lengths).bool(), dim=0, - index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum(dim=0)[:-1] + index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum( + dim=0 + )[:-1], ) # (num_new_items) new_items[old_items_mask] = items new_length = lengths + 1 diff --git a/modeling/models/bert4rec.py b/modeling/models/bert4rec.py index 40f1d331..69794fb6 100644 --- a/modeling/models/bert4rec.py +++ b/modeling/models/bert4rec.py @@ -1,25 +1,24 @@ -from models.base import SequentialTorchModel - import torch import torch.nn as nn +from models.base import SequentialTorchModel -class Bert4RecModel(SequentialTorchModel, config_name='bert4rec'): +class Bert4RecModel(SequentialTorchModel, config_name="bert4rec"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='gelu', - layer_norm_eps=1e-5, - initializer_range=0.02 + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="gelu", + layer_norm_eps=1e-5, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -31,70 +30,77 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False + is_causal=False, ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, - out_features=embedding_dim + in_features=embedding_dim, out_features=embedding_dim ) - self._bias = nn.Parameter( - data=torch.zeros(num_items + 2), - requires_grad=True - ) + self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - labels_prefix=config['labels_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + labels_prefix=config["labels_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection( + embeddings + ) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu( + embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - 'bsd,nd->bsn', embeddings, self._item_embeddings.weight + "bsd,nd->bsn", embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) if self.training: # training mode - all_sample_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_batch_events) + all_sample_labels = inputs[ + "{}.ids".format(self._labels_prefix) + ] # (all_batch_events) embeddings = embeddings[mask] # (all_batch_events, num_items) labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) needed_logits = embeddings[labels_mask] # (non_zero_events, num_items) needed_labels = all_sample_labels[labels_mask] # (non_zero_events) - return {'logits': needed_logits, 'labels.ids': needed_labels} + return {"logits": needed_logits, "labels.ids": needed_labels} else: # eval mode - candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) + candidate_scores = self._get_last_embedding( + embeddings, mask + ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/bert4rec_cls.py b/modeling/models/bert4rec_cls.py index d6e59b0a..c0bbc61a 100644 --- a/modeling/models/bert4rec_cls.py +++ b/modeling/models/bert4rec_cls.py @@ -1,25 +1,24 @@ -from models.base import SequentialTorchModel - import torch import torch.nn as nn +from models.base import SequentialTorchModel -class Bert4RecModelCLS(SequentialTorchModel, config_name='bert4rec_cls'): +class Bert4RecModelCLS(SequentialTorchModel, config_name="bert4rec_cls"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='gelu', - layer_norm_eps=1e-5, - initializer_range=0.02 + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="gelu", + layer_norm_eps=1e-5, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -31,20 +30,16 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False + is_causal=False, ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, - out_features=embedding_dim + in_features=embedding_dim, out_features=embedding_dim ) - self._bias = nn.Parameter( - data=torch.zeros(num_items + 2), - requires_grad=True - ) + self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) self._init_weights(initializer_range) @@ -53,48 +48,50 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - labels_prefix=config['labels_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + labels_prefix=config["labels_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, - lengths=all_sample_lengths, - add_cls_token=True + events=all_sample_events, lengths=all_sample_lengths, add_cls_token=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection( + embeddings + ) # (batch_size, seq_len, embedding_dim) predictions = embeddings[:, 0, :] # (batch_size, embedding_dim) if self.training: # training mode candidates = self._item_embeddings( - inputs['{}.ids'.format(self._labels_prefix)]) # (batch_size, embedding_dim) + inputs["{}.ids".format(self._labels_prefix)] + ) # (batch_size, embedding_dim) - return {'predictions': predictions, 'candidates': candidates} + return {"predictions": predictions, "candidates": candidates} else: # eval mode candidate_scores = torch.einsum( - 'bd,nd->bn', - predictions, - self._item_embeddings.weight + "bd,nd->bn", predictions, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/cl4srec.py b/modeling/models/cl4srec.py index 945c2a92..e1bf7152 100644 --- a/modeling/models/cl4srec.py +++ b/modeling/models/cl4srec.py @@ -1,28 +1,27 @@ -from models.base import SequentialTorchModel - import torch +from models.base import SequentialTorchModel -class Cl4SRecModel(SequentialTorchModel, config_name='cl4srec'): +class Cl4SRecModel(SequentialTorchModel, config_name="cl4srec"): def __init__( - self, - sequence_prefix, - fst_augmented_sequence_prefix, - snd_augmented_sequence_prefix, - positive_prefix, - negative_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5, - initializer_range=0.02 + self, + sequence_prefix, + fst_augmented_sequence_prefix, + snd_augmented_sequence_prefix, + positive_prefix, + negative_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -34,7 +33,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._fst_augmented_sequence_prefix = fst_augmented_sequence_prefix @@ -47,51 +46,56 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - fst_augmented_sequence_prefix=config['fst_augmented_sequence_prefix'], - snd_augmented_sequence_prefix=config['snd_augmented_sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - labels_prefix=config['labels_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - num_layers=config['num_layers'], - num_heads=config['num_heads'], - embedding_dim=config['embedding_dim'], - dim_feedforward=config['dim_feedforward'], - dropout=config['dropout'], - activation=config['activation'], - layer_norm_eps=config['layer_norm_eps'], - initializer_range=config['initializer_range'] + sequence_prefix=config["sequence_prefix"], + fst_augmented_sequence_prefix=config["fst_augmented_sequence_prefix"], + snd_augmented_sequence_prefix=config["snd_augmented_sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + labels_prefix=config["labels_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + num_layers=config["num_layers"], + num_heads=config["num_heads"], + embedding_dim=config["embedding_dim"], + dim_feedforward=config["dim_feedforward"], + dropout=config["dropout"], + activation=config["activation"], + layer_norm_eps=config["layer_norm_eps"], + initializer_range=config["initializer_range"], ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items) # TODO remove this check - labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) + labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), - self._item_embeddings.weight[labels] + self._item_embeddings(labels), self._item_embeddings.weight[labels] ) all_fst_aug_sample_events = inputs[ - '{}.ids'.format(self._fst_augmented_sequence_prefix) + "{}.ids".format(self._fst_augmented_sequence_prefix) ] # (all_batch_events) - all_fst_aug_sample_lengths = inputs['{}.length'.format(self._fst_augmented_sequence_prefix)] # (batch_size) + all_fst_aug_sample_lengths = inputs[ + "{}.length".format(self._fst_augmented_sequence_prefix) + ] # (batch_size) fst_aug_embeddings, fst_aug_mask = self._apply_sequential_encoder( all_fst_aug_sample_events, all_fst_aug_sample_lengths ) # (batch_size, fst_aug_seq_len, embedding_dim), (batch_size, fst_aug_seq_len) @@ -100,9 +104,11 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) all_snd_aug_sample_events = inputs[ - '{}.ids'.format(self._snd_augmented_sequence_prefix) + "{}.ids".format(self._snd_augmented_sequence_prefix) ] # (all_batch_events) - all_snd_aug_sample_lengths = inputs['{}.length'.format(self._snd_augmented_sequence_prefix)] # (batch_size) + all_snd_aug_sample_lengths = inputs[ + "{}.length".format(self._snd_augmented_sequence_prefix) + ] # (batch_size) snd_aug_embeddings, snd_aug_mask = self._apply_sequential_encoder( all_snd_aug_sample_events, all_snd_aug_sample_lengths ) # (batch_size, snd_aug_seq_len, embedding_dim), (batch_size, snd_aug_seq_len) @@ -111,24 +117,23 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) return { - 'logits': items_logits, - 'sequence_representation': last_embeddings, - 'fst_aug_sequence_representation': last_fst_aug_embeddings, - 'snd_aug_sequence_representation': last_snd_aug_embeddings + "logits": items_logits, + "sequence_representation": last_embeddings, + "fst_aug_sequence_representation": last_fst_aug_embeddings, + "snd_aug_sequence_representation": last_snd_aug_embeddings, } else: # eval mode - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - candidate_embeddings + "bd,nd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/duorec.py b/modeling/models/duorec.py index 380a6675..68f9df33 100644 --- a/modeling/models/duorec.py +++ b/modeling/models/duorec.py @@ -1,29 +1,27 @@ -from models.base import SequentialTorchModel - import torch import torch.nn as nn +from models.base import SequentialTorchModel from utils import create_masked_tensor -class DuoRecModel(SequentialTorchModel, config_name='duorec'): - +class DuoRecModel(SequentialTorchModel, config_name="duorec"): def __init__( - self, - sequence_prefix, - augmented_sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5, - initializer_range=0.02, - is_causal=True + self, + sequence_prefix, + augmented_sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, + initializer_range=0.02, + is_causal=True, ): super().__init__( num_items=num_items, @@ -35,7 +33,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_causal + is_causal=is_causal, ) self._sequence_prefix = sequence_prefix self._augmented_sequence_prefix = augmented_sequence_prefix @@ -49,19 +47,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - augmented_sequence_prefix=config['augmented_sequence_prefix'], - labels_prefix=config['labels_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - num_layers=config['num_layers'], - num_heads=config['num_heads'], - embedding_dim=config['embedding_dim'], - dim_feedforward=config['dim_feedforward'], - dropout=config['dropout'], - activation=config['activation'], - layer_norm_eps=config['layer_norm_eps'], - initializer_range=config['initializer_range'] + sequence_prefix=config["sequence_prefix"], + augmented_sequence_prefix=config["augmented_sequence_prefix"], + labels_prefix=config["labels_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + num_layers=config["num_layers"], + num_heads=config["num_heads"], + embedding_dim=config["embedding_dim"], + dim_feedforward=config["dim_feedforward"], + dropout=config["dropout"], + activation=config["activation"], + layer_norm_eps=config["layer_norm_eps"], + initializer_range=config["initializer_range"], ) # TODO taken from duorec github @@ -77,47 +75,53 @@ def _init_weights(self, module): module.bias.data.zero_() def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items) training_output = { - 'logits': items_logits, - 'sequence_representation': last_embeddings + "logits": items_logits, + "sequence_representation": last_embeddings, } # TODO remove this check - labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) + labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), - self._item_embeddings.weight[labels] + self._item_embeddings(labels), self._item_embeddings.weight[labels] ) # Unsupervised Augmentation embeddings_, mask_ = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings_ = self._get_last_embedding(embeddings_, mask_) # (batch_size, embedding_dim) - training_output['similar_sequence_representation'] = last_embeddings_ - assert not torch.allclose(last_embeddings, last_embeddings_), \ - 'Embedding must be different because of dropout' + last_embeddings_ = self._get_last_embedding( + embeddings_, mask_ + ) # (batch_size, embedding_dim) + training_output["similar_sequence_representation"] = last_embeddings_ + assert not torch.allclose(last_embeddings, last_embeddings_), ( + "Embedding must be different because of dropout" + ) # Semantic Similarity all_sample_augmented_events = inputs[ - '{}.ids'.format(self._augmented_sequence_prefix) + "{}.ids".format(self._augmented_sequence_prefix) ] # (all_batch_events) all_sample_augmented_lengths = inputs[ - '{}.length'.format(self._augmented_sequence_prefix) + "{}.length".format(self._augmented_sequence_prefix) ] # (batch_size) augmented_embeddings, augmented_mask = self._apply_sequential_encoder( @@ -126,22 +130,23 @@ def forward(self, inputs): last_augmented_embeddings = self._get_last_embedding( augmented_embeddings, augmented_mask ) # (batch_size, embedding_dim) - training_output['augmented_sequence_representation'] = last_augmented_embeddings + training_output["augmented_sequence_representation"] = ( + last_augmented_embeddings + ) return training_output else: # eval mode - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - candidate_embeddings + "bd,nd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices \ No newline at end of file + return indices diff --git a/modeling/models/graph_seq_rec.py b/modeling/models/graph_seq_rec.py index b227f184..caa7e2e0 100644 --- a/modeling/models/graph_seq_rec.py +++ b/modeling/models/graph_seq_rec.py @@ -1,35 +1,33 @@ -from models.base import SequentialTorchModel - -from utils import create_masked_tensor, DEVICE - import torch import torch.nn as nn +from models.base import SequentialTorchModel +from utils import DEVICE, create_masked_tensor -class GraphSeqRecModel(SequentialTorchModel, config_name='graph_seq_rec'): +class GraphSeqRecModel(SequentialTorchModel, config_name="graph_seq_rec"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - common_graph, - user_graph, - item_graph, - num_hops, - graph_dropout, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - use_ce=False, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + common_graph, + user_graph, + item_graph, + num_hops, + graph_dropout, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + use_ce=False, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -41,7 +39,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -57,38 +55,34 @@ def __init__( self._graph_dropout = graph_dropout self._output_projection = nn.Linear( - in_features=embedding_dim, - out_features=embedding_dim + in_features=embedding_dim, out_features=embedding_dim ) - self._bias = nn.Parameter( - data=torch.zeros(num_items + 2), - requires_grad=True - ) + self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - candidate_prefix=config['candidate_prefix'], - common_graph=kwargs['graph'], - user_graph=kwargs['user_graph'], - item_graph=kwargs['item_graph'], - num_hops=config['num_hops'], - graph_dropout=config['graph_dropout'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - use_ce=config.get('use_ce', False), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + candidate_prefix=config["candidate_prefix"], + common_graph=kwargs["graph"], + user_graph=kwargs["user_graph"], + item_graph=kwargs["item_graph"], + num_hops=config["num_hops"], + graph_dropout=config["graph_dropout"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + use_ce=config.get("use_ce", False), + initializer_range=config.get("initializer_range", 0.02), ) def _apply_graph_encoder(self, embeddings, graph): @@ -110,38 +104,45 @@ def _apply_graph_encoder(self, embeddings, graph): return embeddings def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + lengths = inputs["{}.length".format(self._sequence_prefix)] # (batch_size) common_graph_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, - graph=self._item_graph + embeddings=self._item_embeddings.weight, graph=self._item_graph ) # (num_items + 2, embedding_dim) - embeddings = common_graph_embeddings[all_sample_events] # (all_batch_events, embedding_dim) + embeddings = common_graph_embeddings[ + all_sample_events + ] # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=lengths + data=embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths + data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + embeddings = ( + embeddings + position_embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -149,35 +150,52 @@ def forward(self, inputs): embeddings[~mask] = 0 if self._is_causal: - causal_mask = torch.tril(torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1])).bool().to(DEVICE) # (seq_len, seq_len) + causal_mask = ( + torch.tril( + torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1]) + ) + .bool() + .to(DEVICE) + ) # (seq_len, seq_len) embeddings = self._encoder( src=embeddings, mask=~causal_mask, ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, - src_key_padding_mask=~mask + src=embeddings, src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) if self._use_ce: - embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection( + embeddings + ) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu( + embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - 'bsd,nd->bsn', embeddings, self._item_embeddings.weight + "bsd,nd->bsn", embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) else: - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) if self.training: # training mode if self._use_ce: - return {'logits': embeddings[mask]} + return {"logits": embeddings[mask]} else: - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) - - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + all_negative_sample_events = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) + + all_sample_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -186,21 +204,27 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - 'current_embeddings': all_sample_embeddings, - 'positive_embeddings': all_positive_sample_embeddings, - 'negative_embeddings': all_negative_sample_embeddings + "current_embeddings": all_sample_embeddings, + "positive_embeddings": all_positive_sample_embeddings, + "negative_embeddings": all_negative_sample_embeddings, } else: # eval mode if self._use_ce: - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) - - if '{}.ids'.format(self._candidate_prefix) in inputs: - candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) - candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, num_items) + + if "{}.ids".format(self._candidate_prefix) in inputs: + candidate_events = inputs[ + "{}.ids".format(self._candidate_prefix) + ] # (all_batch_candidates) + candidate_lengths = inputs[ + "{}.length".format(self._candidate_prefix) + ] # (batch_size) candidate_ids = torch.reshape( candidate_events, - (candidate_lengths.shape[0], candidate_lengths[0]) + (candidate_lengths.shape[0], candidate_lengths[0]), ) # (batch_size, num_candidates) candidate_scores = last_embeddings.gather( dim=1, index=candidate_ids @@ -208,34 +232,35 @@ def forward(self, inputs): else: candidate_scores = last_embeddings # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf else: - if '{}.ids'.format(self._candidate_prefix) in inputs: - candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) - candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + if "{}.ids".format(self._candidate_prefix) in inputs: + candidate_events = inputs[ + "{}.ids".format(self._candidate_prefix) + ] # (all_batch_candidates) + candidate_lengths = inputs[ + "{}.length".format(self._candidate_prefix) + ] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, - lengths=candidate_lengths + data=candidate_embeddings, lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - 'bd,bnd->bn', - last_embeddings, - candidate_embeddings + "bd,bnd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - candidate_embeddings + "bd,nd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf return candidate_scores diff --git a/modeling/models/gru4rec.py b/modeling/models/gru4rec.py index 927445ac..474743df 100644 --- a/modeling/models/gru4rec.py +++ b/modeling/models/gru4rec.py @@ -1,22 +1,20 @@ -from models.base import TorchModel - -from utils import create_masked_tensor, get_activation_function - import torch from torch import nn +from models.base import TorchModel +from utils import create_masked_tensor, get_activation_function -class GRUModel(TorchModel): +class GRUModel(TorchModel): def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5 + self, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, ): super().__init__() self._num_items = num_items @@ -25,11 +23,12 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim + embedding_dim=embedding_dim, ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim + num_embeddings=max_sequence_length + + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim, ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -41,7 +40,7 @@ def __init__( num_layers=num_layers, batch_first=True, dropout=dropout, - bidirectional=False + bidirectional=False, ) self._hidden_to_output_projection = nn.Linear(embedding_dim, num_items) @@ -51,27 +50,31 @@ def _apply_sequential_encoder(self, events, lengths): embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=lengths + data=embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=lengths + data=position_embeddings, lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + embeddings = ( + embeddings + position_embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -82,14 +85,16 @@ def _apply_sequential_encoder(self, events, lengths): input=embeddings, lengths=lengths.cpu(), batch_first=True, - enforce_sorted=False + enforce_sorted=False, ) hidden = torch.zeros( - self._num_layers, batch_size, self._embedding_dim, + self._num_layers, + batch_size, + self._embedding_dim, dtype=embeddings.dtype, device=embeddings.device, - requires_grad=True + requires_grad=True, ) # (num_layers, batch_size, embedding_dim) out, hidden = self._encoder(packed_embeddings, hidden) embeddings, embedding_lengths = torch.nn.utils.rnn.pad_packed_sequence( @@ -102,21 +107,20 @@ def _apply_sequential_encoder(self, events, lengths): return embeddings, mask -class GRU4RecModel(GRUModel, config_name='gru4rec'): - +class GRU4RecModel(GRUModel, config_name="gru4rec"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + negative_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -125,7 +129,7 @@ def __init__( num_layers=num_layers, dropout=dropout, activation=activation, - layer_norm_eps=layer_norm_eps + layer_norm_eps=layer_norm_eps, ) self._sequence_prefix = sequence_prefix @@ -136,35 +140,42 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_layers=config['num_layers'], - dropout=config.get('dropout', 0.0), - activation=config.get('activation', 'tanh'), - layer_norm_eps=config.get('layer_norm_eps', 1e-5), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_layers=config["num_layers"], + dropout=config.get("dropout", 0.0), + activation=config.get("activation", "tanh"), + layer_norm_eps=config.get("layer_norm_eps", 1e-5), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, - lengths=all_sample_lengths + events=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) if self.training: # training mode - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + all_sample_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) sample_end_idx = torch.cumsum(all_sample_lengths, dim=0) # (batch_size) sample_begin_idx = sample_end_idx - all_sample_lengths # (batch_size) @@ -173,44 +184,47 @@ def forward(self, inputs): sample_begin_idx = sample_begin_idx[:, None] # (batch_size, 1) negative_indices = torch.tile( - torch.arange(start=0, end=all_positive_sample_events.shape[0], device=all_sample_lengths.device).long()[None], - dims=[all_sample_lengths.shape[0], 1] + torch.arange( + start=0, + end=all_positive_sample_events.shape[0], + device=all_sample_lengths.device, + ).long()[None], + dims=[all_sample_lengths.shape[0], 1], ) # (batch_size, all_batch_events) - negative_mask = (negative_indices >= sample_begin_idx) & (negative_indices < sample_end_idx) + negative_mask = (negative_indices >= sample_begin_idx) & ( + negative_indices < sample_end_idx + ) negative_mask = torch.repeat_interleave( negative_mask, all_sample_lengths, dim=0 ) negative_scores = torch.einsum( - 'ad,bd->ab', + "ad,bd->ab", all_sample_embeddings, - self._item_embeddings(all_sample_events) + self._item_embeddings(all_sample_events), ) # (all_batch_events, all_batch_events) - + positive_scores = torch.einsum( - 'ad,ad->a', - all_sample_embeddings, - all_positive_sample_embeddings + "ad,ad->a", all_sample_embeddings, all_positive_sample_embeddings ) # (all_batch_events) return { - 'positive_scores': positive_scores[..., None], - 'negative_scores': negative_scores, + "positive_scores": positive_scores[..., None], + "negative_scores": negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/gtorec.py b/modeling/models/gtorec.py index dc29435f..d30e4616 100644 --- a/modeling/models/gtorec.py +++ b/modeling/models/gtorec.py @@ -1,40 +1,39 @@ -from models.base import SequentialTorchModel, TorchModel - -from utils import create_masked_tensor, get_activation_function - import torch import torch.nn as nn import torch.nn.functional as F +from models.base import SequentialTorchModel, TorchModel +from utils import create_masked_tensor, get_activation_function + -class GTOModel(SequentialTorchModel, config_name='gtorec'): +class GTOModel(SequentialTorchModel, config_name="gtorec"): def __init__( - self, - # sequential params - sequence_prefix, # =item_prefix - positive_prefix, - negative_prefix, - candidate_prefix, - source_domain, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - # graph params - user_prefix, - graph, - graph_embedding_dim, - graph_num_layers, - # params with default values - dropout=0.0, - graph_dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02, - norm_first=True + self, + # sequential params + sequence_prefix, # =item_prefix + positive_prefix, + negative_prefix, + candidate_prefix, + source_domain, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + # graph params + user_prefix, + graph, + graph_embedding_dim, + graph_num_layers, + # params with default values + dropout=0.0, + graph_dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, + norm_first=True, ): super().__init__( num_items=num_items, @@ -46,9 +45,9 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) - # sequential part + # sequential part self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -56,13 +55,9 @@ def __init__( self._source_domain = source_domain self._output_projection = nn.Linear( - in_features=embedding_dim, - out_features=embedding_dim - ) - self._bias = nn.Parameter( - data=torch.zeros(num_items + 2), - requires_grad=True + in_features=embedding_dim, out_features=embedding_dim ) + self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) # graph part self._user_prefix = user_prefix @@ -73,15 +68,13 @@ def __init__( self._graph_dropout = graph_dropout self._graph_user_embeddings = nn.Embedding( - num_embeddings=num_users + 2, - embedding_dim=self._graph_embedding_dim + num_embeddings=num_users + 2, embedding_dim=self._graph_embedding_dim ) self._graph_item_embeddings = nn.Embedding( - num_embeddings=num_items + 2, - embedding_dim=self._graph_embedding_dim + num_embeddings=num_items + 2, embedding_dim=self._graph_embedding_dim ) - # cross_attention part + # cross_attention part self._mha = nn.MultiheadAttention( embed_dim=embedding_dim, num_heads=num_heads, @@ -107,36 +100,39 @@ def __init__( in_features=2 * embedding_dim, out_features=embedding_dim, ) - + self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( # sequential part - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - candidate_prefix=config['candidate_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02), - norm_first=config.get('norm_first', True), + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + candidate_prefix=config["candidate_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + norm_first=config.get("norm_first", True), # graph part - user_prefix=config['user_prefix'], - num_users=kwargs['num_users'], + user_prefix=config["user_prefix"], + num_users=kwargs["num_users"], graph_embedding_dim=config["graph_embedding_dim"], graph_num_layers=config["graph_num_layers"], - graph_dropout=config.get("graph_dropout", 0.0) + graph_dropout=config.get("graph_dropout", 0.0), ) - + def _apply_graph_encoder(self): - ego_embeddings = torch.cat((self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), dim=0) + ego_embeddings = torch.cat( + (self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), + dim=0, + ) all_embeddings = [ego_embeddings] if self._graph_dropout > 0: # drop some edges @@ -167,8 +163,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs['{}.ids'.format(prefix)] # (batch_size) - lengths = inputs['{}.length'.format(prefix)] # (batch_size) + ids = inputs["{}.ids".format(prefix)] # (batch_size) + lengths = inputs["{}.length".format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (batch_size, emb_dim) ego_embeddings = ego_embeddings(ids) # (batch_size, emb_dim) @@ -179,13 +175,15 @@ def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings assert torch.all(mask == ego_mask) return padded_embeddings, padded_ego_embeddings, mask - + def _ca_block(self, q, k, v, attn_mask=None, key_padding_mask=None): x = self._mha( - q, k, v, + q, + k, + v, attn_mask=attn_mask, key_padding_mask=key_padding_mask, - need_weights=False + need_weights=False, )[0] # (batch_size, seq_len, embedding_dim) return self.dropout1(x) # (batch_size, seq_len, embedding_dim) @@ -195,11 +193,19 @@ def _ff_block(self, x): def forward(self, inputs): # target domain item sequence - all_sample_events_target = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths_target = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events_target = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths_target = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) # source domain item sequence - all_sample_events_source = inputs['{}.{}.ids'.format(self._sequence_prefix, self._source_domain)] # (all_batch_events) - all_sample_lengths_source = inputs['{}.{}.length'.format(self._sequence_prefix, self._source_domain)] # (batch_size) + all_sample_events_source = inputs[ + "{}.{}.ids".format(self._sequence_prefix, self._source_domain) + ] # (all_batch_events) + all_sample_lengths_source = inputs[ + "{}.{}.length".format(self._sequence_prefix, self._source_domain) + ] # (batch_size) # sequential model encoder and target domain items embeddings from sequential model seq_embeddings_target, seq_mask_target = self._apply_sequential_encoder( @@ -207,81 +213,137 @@ def forward(self, inputs): ) # (batch_size, target_seq_len, embedding_dim), (batch_size, target_seq_len) # target domain items encoder for graph model - all_final_user_embeddings_target, all_final_item_embeddings_target = \ - self._apply_graph_encoder(all_sample_events_target, all_sample_lengths_target) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings_target, all_final_item_embeddings_target = ( + self._apply_graph_encoder( + all_sample_events_target, all_sample_lengths_target + ) + ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) # source domain items encoder for graph model - all_final_user_embeddings_source, all_final_item_embeddings_source = \ - self._apply_graph_encoder(all_sample_events_source, all_sample_lengths_source) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - + all_final_user_embeddings_source, all_final_item_embeddings_source = ( + self._apply_graph_encoder( + all_sample_events_source, all_sample_lengths_source + ) + ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + # target domain items embeddings from graph model - graph_embeddings_target, graph_item_ego_embeddings_target, graph_item_mask_target = self._get_graph_embeddings( - inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_target + ( + graph_embeddings_target, + graph_item_ego_embeddings_target, + graph_item_mask_target, + ) = self._get_graph_embeddings( + inputs, + self._sequence_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_target, ) - graph_item_embeddings_target = graph_embeddings_target[graph_item_mask_target] # (batch_size, target_seq_len, embedding_dim) + graph_item_embeddings_target = graph_embeddings_target[ + graph_item_mask_target + ] # (batch_size, target_seq_len, embedding_dim) # source domain items embeddings from graph model - graph_embeddings_source, graph_item_ego_embeddings_source, graph_item_mask_source = self._get_graph_embeddings( - inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_source + ( + graph_embeddings_source, + graph_item_ego_embeddings_source, + graph_item_mask_source, + ) = self._get_graph_embeddings( + inputs, + self._sequence_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_source, ) - graph_item_embeddings_source = graph_embeddings_source[graph_item_mask_source] # (batch_size, source_seq_len, embedding_dim) - + graph_item_embeddings_source = graph_embeddings_source[ + graph_item_mask_source + ] # (batch_size, source_seq_len, embedding_dim) + # embeddings + graph_embeddings_target -> cross-attention # query = embeddings # keys = graph_embeddings_target # values = graph_embeddings_target - if self.norm_first: - graph_embeddings_target = graph_embeddings_target + self.norm1(self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target - )) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = graph_embeddings_target + self.norm2(self._ff_block(graph_embeddings_target)) + if self.norm_first: + graph_embeddings_target = graph_embeddings_target + self.norm1( + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target, + ) + ) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = graph_embeddings_target + self.norm2( + self._ff_block(graph_embeddings_target) + ) else: - graph_embeddings_target = self.norm1(graph_embeddings_target + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target - )) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = self.norm2(graph_embeddings_target + self._ff_block(graph_embeddings_target)) + graph_embeddings_target = self.norm1( + graph_embeddings_target + + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target, + ) + ) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = self.norm2( + graph_embeddings_target + self._ff_block(graph_embeddings_target) + ) # target-target cross-attention result - mha_embeddings_target = torch.cat([seq_embeddings_target, graph_embeddings_target], dim=-1) - mha_embeddings_target = self._mha_output_projection(mha_embeddings_target) # (batch_size, target_seq_len, embedding_dim) + mha_embeddings_target = torch.cat( + [seq_embeddings_target, graph_embeddings_target], dim=-1 + ) + mha_embeddings_target = self._mha_output_projection( + mha_embeddings_target + ) # (batch_size, target_seq_len, embedding_dim) # embeddings + graph_embeddings_source -> cross-attention # query = embeddings # keys = graph_embeddings_source # values = graph_embeddings_source - if self.norm_first: - graph_embeddings_source = graph_embeddings_source + self.norm1(self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source - )) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = graph_embeddings_source + self.norm2(self._ff_block(graph_embeddings_source)) + if self.norm_first: + graph_embeddings_source = graph_embeddings_source + self.norm1( + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source, + ) + ) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = graph_embeddings_source + self.norm2( + self._ff_block(graph_embeddings_source) + ) else: - graph_embeddings_source = self.norm1(graph_embeddings_source + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source - )) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = self.norm2(graph_embeddings_source + self._ff_block(graph_embeddings_source)) + graph_embeddings_source = self.norm1( + graph_embeddings_source + + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source, + ) + ) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = self.norm2( + graph_embeddings_source + self._ff_block(graph_embeddings_source) + ) # source-target cross-attention result - mha_embeddings_source = torch.cat([seq_embeddings_target, graph_embeddings_source], dim=-1) - mha_embeddings_source = self._mha_output_projection(mha_embeddings_source) # (batch_size, seq_len, embedding_dim) + mha_embeddings_source = torch.cat( + [seq_embeddings_target, graph_embeddings_source], dim=-1 + ) + mha_embeddings_source = self._mha_output_projection( + mha_embeddings_source + ) # (batch_size, seq_len, embedding_dim) if self.training: # training mode # sequential part - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) - - all_sample_embeddings = seq_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + all_negative_sample_events = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) + + all_sample_embeddings = seq_embeddings_target[ + seq_mask_target + ] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -290,96 +352,150 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) # graph part, target domain item embeddings - graph_positive_embeddings_target, _, graph_positive_mask_target = self._get_graph_embeddings( - inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_target + graph_positive_embeddings_target, _, graph_positive_mask_target = ( + self._get_graph_embeddings( + inputs, + self._positive_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_target, + ) ) - graph_negative_embeddings_target, _, graph_negative_mask_target = self._get_graph_embeddings( - inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_target + graph_negative_embeddings_target, _, graph_negative_mask_target = ( + self._get_graph_embeddings( + inputs, + self._negative_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_target, + ) ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_target = torch.einsum( - 'bd,bsd->bs', graph_item_embeddings_target, graph_positive_embeddings_target + "bd,bsd->bs", + graph_item_embeddings_target, + graph_positive_embeddings_target, ) # (batch_size, target_seq_len) graph_negative_scores_target = torch.einsum( - 'bd,bsd->bs', graph_item_embeddings_target, graph_negative_embeddings_target + "bd,bsd->bs", + graph_item_embeddings_target, + graph_negative_embeddings_target, ) # (batch_size, target_seq_len) - graph_positive_scores_target = graph_positive_scores_target[graph_positive_mask_target] # (all_batch_events) - graph_negative_scores_target = graph_negative_scores_target[graph_negative_mask_target] # (all_batch_events) + graph_positive_scores_target = graph_positive_scores_target[ + graph_positive_mask_target + ] # (all_batch_events) + graph_negative_scores_target = graph_negative_scores_target[ + graph_negative_mask_target + ] # (all_batch_events) # graph part, source domain item embeddings - graph_positive_embeddings_source, _, graph_positive_mask_source = self._get_graph_embeddings( - inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_source + graph_positive_embeddings_source, _, graph_positive_mask_source = ( + self._get_graph_embeddings( + inputs, + self._positive_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_source, + ) ) - graph_negative_embeddings_source, _, graph_negative_mask_source = self._get_graph_embeddings( - inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_source + graph_negative_embeddings_source, _, graph_negative_mask_source = ( + self._get_graph_embeddings( + inputs, + self._negative_prefix, + self._graph_item_embeddings, + all_final_item_embeddings_source, + ) ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_source = torch.einsum( - 'bd,bsd->bs', graph_item_embeddings_source, graph_positive_embeddings_source + "bd,bsd->bs", + graph_item_embeddings_source, + graph_positive_embeddings_source, ) # (batch_size, source_seq_len) graph_negative_scores_source = torch.einsum( - 'bd,bsd->bs', graph_item_embeddings_source, graph_negative_embeddings_source + "bd,bsd->bs", + graph_item_embeddings_source, + graph_negative_embeddings_source, ) # (batch_size, source_seq_len) - graph_positive_scores_source = graph_positive_scores_source[graph_positive_mask_source] # (all_batch_events) - graph_negative_scores_source = graph_negative_scores_source[graph_negative_mask_source] # (all_batch_events) + graph_positive_scores_source = graph_positive_scores_source[ + graph_positive_mask_source + ] # (all_batch_events) + graph_negative_scores_source = graph_negative_scores_source[ + graph_negative_mask_source + ] # (all_batch_events) # mha part - mha_all_sample_embeddings_target = mha_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) - mha_all_sample_embeddings_source = mha_embeddings_source[seq_mask_target] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_target = mha_embeddings_target[ + seq_mask_target + ] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_source = mha_embeddings_source[ + seq_mask_target + ] # (all_batch_events, embedding_dim) return { # sequential part # target domain item embeddings - 'current_embeddings': all_sample_embeddings, - 'positive_embeddings': all_positive_sample_embeddings, - 'negative_embeddings': all_negative_sample_embeddings, - + "current_embeddings": all_sample_embeddings, + "positive_embeddings": all_positive_sample_embeddings, + "negative_embeddings": all_negative_sample_embeddings, # graph part # target domain item embeddings - 'graph_positive_embeddings_target': graph_positive_embeddings_target[graph_positive_mask_target], - 'graph_negative_embeddings_target': graph_negative_embeddings_target[graph_negative_mask_target], - 'graph_positive_scores_target': graph_positive_scores_target, - 'graph_negative_scores_target': graph_negative_scores_target, - 'graph_item_embeddings_target': graph_item_embeddings_target, + "graph_positive_embeddings_target": graph_positive_embeddings_target[ + graph_positive_mask_target + ], + "graph_negative_embeddings_target": graph_negative_embeddings_target[ + graph_negative_mask_target + ], + "graph_positive_scores_target": graph_positive_scores_target, + "graph_negative_scores_target": graph_negative_scores_target, + "graph_item_embeddings_target": graph_item_embeddings_target, # source domain item embeddings - 'graph_positive_embeddings_source': graph_positive_embeddings_source[graph_positive_mask_source], - 'graph_negative_embeddings_source': graph_negative_embeddings_source[graph_negative_mask_source], - 'graph_positive_scores_source': graph_positive_scores_source, - 'graph_negative_scores_source': graph_negative_scores_source, - 'graph_item_embeddings_source': graph_item_embeddings_source, - + "graph_positive_embeddings_source": graph_positive_embeddings_source[ + graph_positive_mask_source + ], + "graph_negative_embeddings_source": graph_negative_embeddings_source[ + graph_negative_mask_source + ], + "graph_positive_scores_source": graph_positive_scores_source, + "graph_negative_scores_source": graph_negative_scores_source, + "graph_item_embeddings_source": graph_item_embeddings_source, # mha part # target domain item embeddings - 'mha_embeddings_target': mha_all_sample_embeddings_target, - 'mha_positive_embeddings_target': all_positive_sample_embeddings, - 'mha_negative_embeddings_target': all_negative_sample_embeddings, + "mha_embeddings_target": mha_all_sample_embeddings_target, + "mha_positive_embeddings_target": all_positive_sample_embeddings, + "mha_negative_embeddings_target": all_negative_sample_embeddings, # source domain item embeddings - 'mha_embeddings_source': mha_all_sample_embeddings_source, - 'mha_positive_embeddings_source': all_positive_sample_embeddings, - 'mha_negative_embeddings_source': all_negative_sample_embeddings + "mha_embeddings_source": mha_all_sample_embeddings_source, + "mha_positive_embeddings_source": all_positive_sample_embeddings, + "mha_negative_embeddings_source": all_negative_sample_embeddings, } else: # eval mode - seq_last_embeddings_target = self._get_last_embedding(seq_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) - mha_last_embeddings_target = self._get_last_embedding(mha_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) - mha_last_embeddings_source = self._get_last_embedding(mha_embeddings_source, seq_mask_target) # (batch_size, embedding_dim) + seq_last_embeddings_target = self._get_last_embedding( + seq_embeddings_target, seq_mask_target + ) # (batch_size, embedding_dim) + mha_last_embeddings_target = self._get_last_embedding( + mha_embeddings_target, seq_mask_target + ) # (batch_size, embedding_dim) + mha_last_embeddings_source = self._get_last_embedding( + mha_embeddings_source, seq_mask_target + ) # (batch_size, embedding_dim) aggregated_last_embeddings = torch.maximum( - seq_last_embeddings_target, - torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source) + seq_last_embeddings_target, + torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source), ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - aggregated_last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", aggregated_last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf - if '{}.ids'.format(self._candidate_prefix) in inputs: - candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) - candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + if "{}.ids".format(self._candidate_prefix) in inputs: + candidate_events = inputs[ + "{}.ids".format(self._candidate_prefix) + ] # (all_batch_candidates) + candidate_lengths = inputs[ + "{}.length".format(self._candidate_prefix) + ] # (batch_size) batch_size = candidate_lengths.shape[0] num_candidates = candidate_lengths[0] @@ -387,12 +503,11 @@ def forward(self, inputs): candidate_scores = torch.gather( input=candidate_scores, dim=1, - index=torch.reshape(candidate_events, [batch_size, num_candidates]) + index=torch.reshape(candidate_events, [batch_size, num_candidates]), ) # (batch_size, num_candidates) _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20), (batch_size, 20) return indices diff --git a/modeling/models/lightgcn.py b/modeling/models/lightgcn.py index 79e5f788..19d79b80 100644 --- a/modeling/models/lightgcn.py +++ b/modeling/models/lightgcn.py @@ -1,25 +1,23 @@ -from models.base import TorchModel - -from utils import create_masked_tensor, DEVICE - import torch import torch.nn as nn import torch.nn.functional as F +from models.base import TorchModel +from utils import DEVICE, create_masked_tensor -class LightGCNModel(TorchModel, config_name='light_gcn'): +class LightGCNModel(TorchModel, config_name="light_gcn"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02 + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02, ): super().__init__() self._user_prefix = user_prefix @@ -32,13 +30,11 @@ def __init__( self._dropout_rate = dropout self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -46,19 +42,21 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config['user_prefix'], - positive_prefix=config['positive_prefix'], - graph=kwargs['graph'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - embedding_dim=config['embedding_dim'], - num_layers=config['num_layers'], - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + user_prefix=config["user_prefix"], + positive_prefix=config["positive_prefix"], + graph=kwargs["graph"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + embedding_dim=config["embedding_dim"], + num_layers=config["num_layers"], + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def _apply_graph_encoder(self): - ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) + ego_embeddings = torch.cat( + (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 + ) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -89,8 +87,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) - lengths = inputs['{}.length'.format(prefix)] # (batch_size) + ids = inputs["{}.ids".format(prefix)] # (all_batch_events) + lengths = inputs["{}.length".format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -108,8 +106,9 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = \ - self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = ( + self._apply_graph_encoder() + ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings @@ -117,63 +116,69 @@ def forward(self, inputs): user_embeddings = user_embeddings[user_mask] # (batch_size, embedding_dim) if self.training: # training mode - positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) + positive_item_ids = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + positive_item_lengths = inputs[ + "{}.length".format(self._positive_prefix) + ] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = torch.arange( - end=max_sequence_length, - device=DEVICE - )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) - - positive_user_ids = torch.arange( - batch_size, - device=DEVICE - )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) + mask = ( + torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( + [batch_size, 1] + ) + < positive_item_lengths[:, None] + ) # (batch_size, max_seq_len) + + positive_user_ids = ( + torch.arange(batch_size, device=DEVICE)[None] + .tile([max_sequence_length, 1]) + .T + ) # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[ + positive_user_ids + ] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - 'ad,nd->an', - user_embeddings, - all_final_item_embeddings + "ad,nd->an", user_embeddings, all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) + negative_mask = torch.zeros( + self._num_items + 2, dtype=torch.bool, device=DEVICE + ) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, - dim=1, - index=positive_item_ids[..., None] + input=all_scores, dim=1, index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float() + src=torch.ones_like(positive_item_ids[..., None]).float(), ) # (all_batch_items, num_items + 2) return { - 'positive_scores': positive_scores, - 'negative_scores': all_scores, - 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) + "positive_scores": positive_scores, + "negative_scores": all_scores, + "item_embeddings": torch.cat( + (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 + ), } else: # eval mode candidate_scores = torch.einsum( - 'bd,nd->bn', - user_embeddings, - all_final_item_embeddings + "bd,nd->bn", user_embeddings, all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/mclsr.py b/modeling/models/mclsr.py index 8f78cda4..c7fefd3c 100644 --- a/modeling/models/mclsr.py +++ b/modeling/models/mclsr.py @@ -1,32 +1,30 @@ -from models.base import TorchModel - import torch import torch.nn as nn +from models.base import TorchModel from utils import create_masked_tensor -class MCLSRModel(TorchModel, config_name='mclsr'): - +class MCLSRModel(TorchModel, config_name="mclsr"): def __init__( - self, - sequence_prefix, - user_prefix, - labels_prefix, - candidate_prefix, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_graph_layers, - common_graph, - user_graph, - item_graph, - dropout=0.0, - layer_norm_eps=1e-5, - graph_dropout=0.0, - alpha=0.5, - initializer_range=0.02 + self, + sequence_prefix, + user_prefix, + labels_prefix, + candidate_prefix, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_graph_layers, + common_graph, + user_graph, + item_graph, + dropout=0.0, + layer_norm_eps=1e-5, + graph_dropout=0.0, + alpha=0.5, + initializer_range=0.02, ): super().__init__() self._sequence_prefix = sequence_prefix @@ -50,16 +48,17 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim + embedding_dim=embedding_dim, ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim + num_embeddings=max_sequence_length + + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim, ) self._user_embeddings = nn.Embedding( num_embeddings=num_users + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim + embedding_dim=embedding_dim, ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -67,39 +66,43 @@ def __init__( # Current interest learning self._current_interest_learning_encoder = nn.Sequential( - nn.Linear(in_features=embedding_dim, out_features=4 * embedding_dim, bias=False), + nn.Linear( + in_features=embedding_dim, out_features=4 * embedding_dim, bias=False + ), nn.Tanh(), - nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False) + nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False), ) # General interest learning self._general_interest_learning_encoder = nn.Sequential( - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=False), - nn.Tanh() + nn.Linear( + in_features=embedding_dim, out_features=embedding_dim, bias=False + ), + nn.Tanh(), ) # Cross-view contrastive learning self._sequential_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), ) self._graph_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), ) self._user_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), ) self._item_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), ) self._init_weights(initializer_range) @@ -107,22 +110,22 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - user_prefix=config['user_prefix'], - labels_prefix=config['labels_prefix'], - candidate_prefix=config['candidate_prefix'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_graph_layers=config['num_graph_layers'], - common_graph=kwargs['graph'], - user_graph=kwargs['user_graph'], - item_graph=kwargs['item_graph'], - dropout=config.get('dropout', 0.0), - layer_norm_eps=config.get('layer_norm_eps', 1e-5), - graph_dropout=config.get('graph_dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + user_prefix=config["user_prefix"], + labels_prefix=config["labels_prefix"], + candidate_prefix=config["candidate_prefix"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_graph_layers=config["num_graph_layers"], + common_graph=kwargs["graph"], + user_graph=kwargs["user_graph"], + item_graph=kwargs["item_graph"], + dropout=config.get("dropout", 0.0), + layer_norm_eps=config.get("layer_norm_eps", 1e-5), + graph_dropout=config.get("graph_dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def _apply_graph_encoder(self, embeddings, graph, use_mean=False): @@ -149,14 +152,19 @@ def _apply_graph_encoder(self, embeddings, graph, use_mean=False): return all_embeddings[-1] def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) - user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) - - embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) + user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) + + embeddings = self._item_embeddings( + all_sample_events + ) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=all_sample_lengths + data=embeddings, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) batch_size = mask.shape[0] @@ -164,88 +172,108 @@ def forward(self, inputs): # Current interest learning # 1) get embeddings with positions - positions = torch.arange( - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) + positions_mask = ( + positions < all_sample_lengths[:, None] + ) # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=all_sample_lengths + data=position_embeddings, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - positioned_embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._layernorm(positioned_embeddings) # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._dropout(positioned_embeddings) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = ( + embeddings + position_embeddings + ) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._layernorm( + positioned_embeddings + ) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._dropout( + positioned_embeddings + ) # (batch_size, seq_len, embedding_dim) positioned_embeddings[~mask] = 0 sequential_attention_matrix = self._current_interest_learning_encoder( positioned_embeddings ).squeeze() # (batch_size, seq_len) sequential_attention_matrix[~mask] = -torch.inf - sequential_attention_matrix = torch.softmax(sequential_attention_matrix, dim=1) # (batch_size, seq_len) + sequential_attention_matrix = torch.softmax( + sequential_attention_matrix, dim=1 + ) # (batch_size, seq_len) sequential_representation = torch.einsum( - 'bs,bsd->bd', sequential_attention_matrix, embeddings + "bs,bsd->bd", sequential_attention_matrix, embeddings ) # (batch_size, embedding_dim) if self.training: # training mode # General interest learning all_embeddings = torch.cat( - [self._user_embeddings.weight, self._item_embeddings.weight], - dim=0 + [self._user_embeddings.weight, self._item_embeddings.weight], dim=0 ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_embeddings = self._apply_graph_encoder( - embeddings=all_embeddings, - graph=self._graph + embeddings=all_embeddings, graph=self._graph ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_user_embeddings, common_graph_item_embeddings = torch.split( - common_graph_embeddings, - [self._num_users + 2, self._num_items + 2] + common_graph_embeddings, [self._num_users + 2, self._num_items + 2] ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - common_graph_user_embeddings = common_graph_user_embeddings[user_ids] # (batch_size, embedding_dim) - common_graph_item_embeddings = common_graph_item_embeddings[all_sample_events] # (all_batch_events, embedding_dim) + common_graph_user_embeddings = common_graph_user_embeddings[ + user_ids + ] # (batch_size, embedding_dim) + common_graph_item_embeddings = common_graph_item_embeddings[ + all_sample_events + ] # (all_batch_events, embedding_dim) common_graph_item_embeddings, _ = create_masked_tensor( - data=common_graph_item_embeddings, - lengths=all_sample_lengths + data=common_graph_item_embeddings, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) graph_attention_matrix = torch.einsum( - 'bd,bsd->bs', + "bd,bsd->bs", self._general_interest_learning_encoder(common_graph_user_embeddings), - common_graph_item_embeddings + common_graph_item_embeddings, ) # (batch_size, seq_len) graph_attention_matrix[~mask] = -torch.inf - graph_attention_matrix = torch.softmax(graph_attention_matrix, dim=1) # (batch_size, seq_len) + graph_attention_matrix = torch.softmax( + graph_attention_matrix, dim=1 + ) # (batch_size, seq_len) graph_representation = torch.einsum( - 'bs,bsd->bd', graph_attention_matrix, common_graph_item_embeddings + "bs,bsd->bd", graph_attention_matrix, common_graph_item_embeddings ) # (batch_size, embedding_dim) # Get final representation - combined_representation = \ - self._alpha * sequential_representation + \ - (1 - self._alpha) * graph_representation # (batch_size, embedding_dim) + combined_representation = ( + self._alpha * sequential_representation + + (1 - self._alpha) * graph_representation + ) # (batch_size, embedding_dim) - labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) - labels_embeddings = self._item_embeddings(labels) # (batch_size, embedding_dim) + labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) + labels_embeddings = self._item_embeddings( + labels + ) # (batch_size, embedding_dim) # Cross-view contrastive learning sequential_representation = self._sequential_projector( - sequential_representation) # (batch_size, embedding_dim) - graph_representation = self._graph_projector(graph_representation) # (batch_size, embedding_dim) + sequential_representation + ) # (batch_size, embedding_dim) + graph_representation = self._graph_projector( + graph_representation + ) # (batch_size, embedding_dim) # Feature-level Contrastive Learning user_graph_user_embeddings = self._apply_graph_encoder( - embeddings=self._user_embeddings.weight, - graph=self._user_graph + embeddings=self._user_embeddings.weight, graph=self._user_graph ) # (num_users + 2, embedding_dim) user_graph_user_embeddings = torch.gather( user_graph_user_embeddings, dim=0, - index=user_ids[..., None].tile(1, self._embedding_dim) + index=user_ids[..., None].tile(1, self._embedding_dim), ) # (batch_size, embedding_dim) user_graph_user_embeddings = self._user_projection( @@ -256,13 +284,12 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) item_graph_item_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, - graph=self._item_graph + embeddings=self._item_embeddings.weight, graph=self._item_graph ) # (num_items + 2, embedding_dim) item_graph_item_embeddings = torch.gather( item_graph_item_embeddings, dim=0, - index=all_sample_events[..., None].tile(1, self._embedding_dim) + index=all_sample_events[..., None].tile(1, self._embedding_dim), ) # (all_sample_events, embedding_dim) item_graph_item_embeddings = self._item_projection( @@ -274,51 +301,50 @@ def forward(self, inputs): return { # Downstream task - 'combined_representation': combined_representation, - 'label_representation': labels_embeddings, - + "combined_representation": combined_representation, + "label_representation": labels_embeddings, # Interest-level Contrastive Learning - 'sequential_representation': sequential_representation, - 'graph_representation': graph_representation, - + "sequential_representation": sequential_representation, + "graph_representation": graph_representation, # Feature-level Contrastive Learning (users) - 'user_graph_user_embeddings': user_graph_user_embeddings, - 'common_graph_user_embeddings': common_graph_user_embeddings, - + "user_graph_user_embeddings": user_graph_user_embeddings, + "common_graph_user_embeddings": common_graph_user_embeddings, # Feature-level Contrastive Learning (items) - 'item_graph_item_embeddings': item_graph_item_embeddings, - 'common_graph_item_embeddings': common_graph_item_embeddings + "item_graph_item_embeddings": item_graph_item_embeddings, + "common_graph_item_embeddings": common_graph_item_embeddings, } else: # eval mode - if '{}.ids'.format(self._candidate_prefix) in inputs: - candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) - candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) - - candidate_embeddings = self._item_embeddings(candidate_events) # (all_batch_candidates, embedding_dim) + if "{}.ids".format(self._candidate_prefix) in inputs: + candidate_events = inputs[ + "{}.ids".format(self._candidate_prefix) + ] # (all_batch_candidates) + candidate_lengths = inputs[ + "{}.length".format(self._candidate_prefix) + ] # (batch_size) + + candidate_embeddings = self._item_embeddings( + candidate_events + ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, - lengths=candidate_lengths + data=candidate_embeddings, lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - 'bd,bnd->bn', - sequential_representation, - candidate_embeddings + "bd,bnd->bn", sequential_representation, candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - sequential_representation, - candidate_embeddings + "bd,nd->bn", sequential_representation, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf values, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 100), (batch_size, 100) return indices diff --git a/modeling/models/mrgsrec.py b/modeling/models/mrgsrec.py index 488c580a..f53861a0 100644 --- a/modeling/models/mrgsrec.py +++ b/modeling/models/mrgsrec.py @@ -1,32 +1,29 @@ +import torch +import torch.nn as nn from torch.nn import MultiheadAttention from models.base import TorchModel - from utils import create_masked_tensor, get_activation_function -import torch -import torch.nn as nn - - -class MRGSRecModel(TorchModel, config_name='mrgsrec'): +class MRGSRecModel(TorchModel, config_name="mrgsrec"): def __init__( - self, - sequence_prefix, - user_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + user_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__() self._sequence_prefix = sequence_prefix @@ -40,11 +37,12 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim + embedding_dim=embedding_dim, ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim + num_embeddings=max_sequence_length + + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim, ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -57,60 +55,69 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True + batch_first=True, ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - candidate_prefix=config['candidate_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + candidate_prefix=config["candidate_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) - embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) + embeddings = self._item_embeddings( + all_sample_events + ) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, - lengths=all_sample_lengths + data=embeddings, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = torch.arange( - start=seq_len - 1, end=-1, step=-1, device=mask.device - )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) - positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) + positions = ( + torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] + .tile([batch_size, 1]) + .long() + ) # (batch_size, seq_len) + positions_mask = ( + positions < all_sample_lengths[:, None] + ) # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings( + positions + ) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, - lengths=all_sample_lengths + data=position_embeddings, lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + embeddings = ( + embeddings + position_embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) embeddings[~mask] = 0 - - - diff --git a/modeling/models/ngcf.py b/modeling/models/ngcf.py index 2fcc9081..8df917eb 100644 --- a/modeling/models/ngcf.py +++ b/modeling/models/ngcf.py @@ -1,25 +1,23 @@ -from models.base import TorchModel - -from utils import create_masked_tensor, DEVICE - import torch import torch.nn as nn import torch.nn.functional as F +from models.base import TorchModel +from utils import DEVICE, create_masked_tensor -class NgcfModel(TorchModel, config_name='ngcf'): +class NgcfModel(TorchModel, config_name="ngcf"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02 + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02, ): super().__init__() self._user_prefix = user_prefix @@ -40,13 +38,11 @@ def __init__( self.Bi_Linear_list.append(nn.Linear(embedding_dim, embedding_dim)) self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -54,20 +50,20 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config['user_prefix'], - positive_prefix=config['positive_prefix'], - graph=kwargs['graph'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - embedding_dim=config['embedding_dim'], - num_layers=config['num_layers'], - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + user_prefix=config["user_prefix"], + positive_prefix=config["positive_prefix"], + graph=kwargs["graph"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + embedding_dim=config["embedding_dim"], + num_layers=config["num_layers"], + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) - lengths = inputs['{}.length'.format(prefix)] # (batch_size) + ids = inputs["{}.ids".format(prefix)] # (all_batch_events) + lengths = inputs["{}.length".format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -85,7 +81,9 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def _apply_graph_encoder(self): - ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) + ego_embeddings = torch.cat( + (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 + ) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -122,73 +120,82 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = \ - self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = ( + self._apply_graph_encoder() + ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings ) - user_embeddings = user_embeddings[user_mask] # (all_batch_events, embedding_dim) + user_embeddings = user_embeddings[ + user_mask + ] # (all_batch_events, embedding_dim) if self.training: # training mode - positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) + positive_item_ids = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + positive_item_lengths = inputs[ + "{}.length".format(self._positive_prefix) + ] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = torch.arange( - end=max_sequence_length, - device=DEVICE - )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) - - positive_user_ids = torch.arange( - batch_size, - device=DEVICE - )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) + mask = ( + torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( + [batch_size, 1] + ) + < positive_item_lengths[:, None] + ) # (batch_size, max_seq_len) + + positive_user_ids = ( + torch.arange(batch_size, device=DEVICE)[None] + .tile([max_sequence_length, 1]) + .T + ) # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[ + positive_user_ids + ] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - 'ad,nd->an', - user_embeddings, - all_final_item_embeddings + "ad,nd->an", user_embeddings, all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) + negative_mask = torch.zeros( + self._num_items + 2, dtype=torch.bool, device=DEVICE + ) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, - dim=1, - index=positive_item_ids[..., None] + input=all_scores, dim=1, index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float() + src=torch.ones_like(positive_item_ids[..., None]).float(), ) # (all_batch_items, num_items + 2) return { - 'positive_scores': positive_scores, - 'negative_scores': all_scores, - 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) + "positive_scores": positive_scores, + "negative_scores": all_scores, + "item_embeddings": torch.cat( + (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 + ), } else: # eval mode # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - user_embeddings, - all_final_item_embeddings + "bd,nd->bn", user_embeddings, all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pop.py b/modeling/models/pop.py index bb0b6774..ddf26881 100644 --- a/modeling/models/pop.py +++ b/modeling/models/pop.py @@ -1,16 +1,10 @@ -from models.base import BaseModel - import torch +from models.base import BaseModel -class PopModel(BaseModel, config_name='pop'): - def __init__( - self, - label_prefix, - counts_prefix, - num_items - ): +class PopModel(BaseModel, config_name="pop"): + def __init__(self, label_prefix, counts_prefix, num_items): self._label_prefix = label_prefix self._counts_prefix = counts_prefix self._num_items = num_items @@ -18,26 +12,30 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - label_prefix=config['label_prefix'], - counts_prefix=config['counts_prefix'], - num_items=kwargs['num_items'] + label_prefix=config["label_prefix"], + counts_prefix=config["counts_prefix"], + num_items=kwargs["num_items"], ) def __call__(self, inputs): - candidate_counts = inputs['{}.ids'.format(self._counts_prefix)] # (all_batch_candidates) - candidate_counts_lengths = inputs['{}.length'.format(self._counts_prefix)] # (batch_size) + candidate_counts = inputs[ + "{}.ids".format(self._counts_prefix) + ] # (all_batch_candidates) + candidate_counts_lengths = inputs[ + "{}.length".format(self._counts_prefix) + ] # (batch_size) batch_size = candidate_counts_lengths.shape[0] candidate_scores = torch.reshape( - candidate_counts, - shape=(batch_size, self._num_items + 2) + candidate_counts, shape=(batch_size, self._num_items + 2) ).float() # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things + candidate_scores[ + :, self._num_items + 1 : + ] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_mf.py b/modeling/models/pure_mf.py index 6cbe8dc5..dc0b691c 100644 --- a/modeling/models/pure_mf.py +++ b/modeling/models/pure_mf.py @@ -1,22 +1,20 @@ -from models.base import TorchModel - import torch import torch.nn as nn +from models.base import TorchModel from utils import create_masked_tensor -class PureMF(TorchModel, config_name='pure_mf'): - +class PureMF(TorchModel, config_name="pure_mf"): def __init__( - self, - user_prefix, - positive_prefix, - negative_prefix, - num_users, - num_items, - embedding_dim, - initializer_range + self, + user_prefix, + positive_prefix, + negative_prefix, + num_users, + num_items, + embedding_dim, + initializer_range, ): super().__init__() @@ -29,13 +27,11 @@ def __init__( self._embedding_dim = embedding_dim self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, - embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -43,54 +39,73 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config['user_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - num_users=kwargs['num_users'], - num_items=kwargs['num_items'], - embedding_dim=config['embedding_dim'], - initializer_range=config.get('initializer_range', 0.02) + user_prefix=config["user_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + embedding_dim=config["embedding_dim"], + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) + user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) user_embeddings = self._user_embeddings(user_ids) # (batch_size, embedding_dim) if self.training: # training mode - all_positive = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - all_positive_embeddings = self._item_embeddings(all_positive) # (all_batch_events, embedding_dim) - positive_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) - - all_negative = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) - all_negative_embeddings = self._item_embeddings(all_negative) # (all_batch_events, embedding_dim) - negative_lengths = inputs['{}.length'.format(self._negative_prefix)] # (batch_size) - - positive_embeddings, positive_mask = create_masked_tensor(all_positive_embeddings, positive_lengths) - negative_embeddings, negative_mask = create_masked_tensor(all_negative_embeddings, negative_lengths) - - positive_scores = torch.einsum('bd,bsd->bs', user_embeddings, positive_embeddings) # (batch_size, seq_len) - negative_scores = torch.einsum('bd,bsd->bs', user_embeddings, negative_embeddings) # (batch_size, seq_len) + all_positive = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + all_positive_embeddings = self._item_embeddings( + all_positive + ) # (all_batch_events, embedding_dim) + positive_lengths = inputs[ + "{}.length".format(self._positive_prefix) + ] # (batch_size) + + all_negative = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) + all_negative_embeddings = self._item_embeddings( + all_negative + ) # (all_batch_events, embedding_dim) + negative_lengths = inputs[ + "{}.length".format(self._negative_prefix) + ] # (batch_size) + + positive_embeddings, positive_mask = create_masked_tensor( + all_positive_embeddings, positive_lengths + ) + negative_embeddings, negative_mask = create_masked_tensor( + all_negative_embeddings, negative_lengths + ) + + positive_scores = torch.einsum( + "bd,bsd->bs", user_embeddings, positive_embeddings + ) # (batch_size, seq_len) + negative_scores = torch.einsum( + "bd,bsd->bs", user_embeddings, negative_embeddings + ) # (batch_size, seq_len) positive_scores = positive_scores[positive_mask] # (all_batch_events) negative_scores = negative_scores[negative_mask] # (all_batch_events) return { - 'positive_scores': positive_scores, - 'negative_scores': negative_scores + "positive_scores": positive_scores, + "negative_scores": negative_scores, } else: - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - user_embeddings, - candidate_embeddings + "bd,nd->bn", user_embeddings, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_svd.py b/modeling/models/pure_svd.py index f705543b..fcb55a49 100644 --- a/modeling/models/pure_svd.py +++ b/modeling/models/pure_svd.py @@ -1,16 +1,14 @@ from models.base import BaseModel -class SVDModel(BaseModel, config_name='pure_svd'): - +class SVDModel(BaseModel, config_name="pure_svd"): def __init__(self, rank): super().__init__() self._rank = rank - self._method = 'PureSVD' + self._method = "PureSVD" self._factors = {} @property def rank(self): return self._rank - diff --git a/modeling/models/random.py b/modeling/models/random.py index d5fae7c5..cfa8d5fa 100644 --- a/modeling/models/random.py +++ b/modeling/models/random.py @@ -1,36 +1,31 @@ -from models.base import BaseModel - import torch +from models.base import BaseModel -class RandomModel(BaseModel, config_name='random'): - def __init__( - self, - label_prefix, - num_items - ): +class RandomModel(BaseModel, config_name="random"): + def __init__(self, label_prefix, num_items): self._label_prefix = label_prefix self._num_items = num_items @classmethod def create_from_config(cls, config, **kwargs): - return cls( - label_prefix=config['label_prefix'], - num_items=kwargs['num_items'] - ) + return cls(label_prefix=config["label_prefix"], num_items=kwargs["num_items"]) def __call__(self, inputs): - labels_lengths = inputs['{}.length'.format(self._label_prefix)] # (batch_size) + labels_lengths = inputs["{}.length".format(self._label_prefix)] # (batch_size) batch_size = labels_lengths.shape[0] - candidate_scores = torch.rand(batch_size, self._num_items + 1) # (batch_size, num_items) + candidate_scores = torch.rand( + batch_size, self._num_items + 1 + ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things + candidate_scores[ + :, self._num_items + 1 : + ] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 7e150421..d7d1606e 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,22 +1,23 @@ import functools -from utils import DEVICE -from models.base import TorchModel -import torch import faiss +import torch -class RqVaeModel(TorchModel, config_name='rqvae'): +from models.base import TorchModel +from utils import DEVICE + +class RqVaeModel(TorchModel, config_name="rqvae"): def __init__( - self, - train_sampler, - input_dim: int, - hidden_dim: int, - n_iter: int, - codebook_sizes: list[int], - should_init_codebooks, - should_reinit_unused_clusters, - initializer_range + self, + train_sampler, + input_dim: int, + hidden_dim: int, + n_iter: int, + codebook_sizes: list[int], + should_init_codebooks, + should_reinit_unused_clusters, + initializer_range, ): super().__init__() @@ -34,35 +35,39 @@ def __init__( # Default initialization of codebook self.codebooks = torch.nn.ParameterList() - + self.codebook_sizes = codebook_sizes - + for codebook_size in codebook_sizes: cb = torch.FloatTensor(codebook_size, hidden_dim) self.codebooks.append(cb) - + self._init_weights(initializer_range) - + if self.should_init_codebooks: if train_sampler is None: raise AttributeError("Train sampler is None") - - embeddings = torch.stack([entry['item.embed'] for entry in train_sampler._dataset]) + + embeddings = torch.stack( + [entry["item.embed"] for entry in train_sampler._dataset] + ) self.init_codebooks(embeddings) - print('Codebooks initialized with Faiss Kmeans') + print("Codebooks initialized with Faiss Kmeans") self.should_init_codebooks = False @classmethod def create_from_config(cls, config, **kwargs): return cls( - train_sampler=kwargs.get('train_sampler'), - input_dim=config['embedding_dim'], - hidden_dim=config['hidden_dim'], - n_iter=config['n_iter'], - codebook_sizes=config['codebook_sizes'], - should_init_codebooks=config.get('should_init_codebooks', False), - should_reinit_unused_clusters=config.get('should_reinit_unused_clusters', False), - initializer_range=config.get('initializer_range', 0.02) + train_sampler=kwargs.get("train_sampler"), + input_dim=config["embedding_dim"], + hidden_dim=config["hidden_dim"], + n_iter=config["n_iter"], + codebook_sizes=config["codebook_sizes"], + should_init_codebooks=config.get("should_init_codebooks", False), + should_reinit_unused_clusters=config.get( + "should_reinit_unused_clusters", False + ), + initializer_range=config.get("initializer_range", 0.02), ) def make_encoding_tower(self, d1: int, d2: int): @@ -102,21 +107,21 @@ def reinit_unused_clusters(remainder, codebook, codebook_indices): is_used[unique_indices] = True rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) codebook[~is_used] = remainder[rand_input] - + def train_pass(self, embeddings): latent_vector = self.encoder(embeddings) latent_restored = 0 - + num_unique_clusters = [] remainder = latent_vector - + remainders = [] codebooks_vectors = [] - + for codebook in self.codebooks: remainders.append(remainder) - + codebook_indices = self.get_codebook_indices(remainder, codebook) codebook_vectors = codebook[codebook_indices] @@ -124,7 +129,7 @@ def train_pass(self, embeddings): self.reinit_unused_clusters(remainder, codebook, codebook_indices) num_unique_clusters.append(codebook_indices.unique().shape[0]) - + codebooks_vectors.append(codebook_vectors) latent_restored = latent_restored + codebook_vectors @@ -138,9 +143,9 @@ def train_pass(self, embeddings): "embeddings": embeddings, "embeddings_restored": embeddings_restored, "remainders": remainders, - "codebooks_vectors": codebooks_vectors + "codebooks_vectors": codebooks_vectors, } - + def eval_pass(self, embeddings): ind_lists = [] remainder = self.encoder(embeddings) @@ -153,12 +158,12 @@ def eval_pass(self, embeddings): def forward(self, inputs): embeddings = inputs["embeddings"] - + if self.training: # training mode return self.train_pass(embeddings) else: # eval mode return self.eval_pass(embeddings) - + @functools.cache def get_single_embedding(self, codebook_idx: int, codebook_id: int): return self.codebooks[codebook_idx][codebook_id] diff --git a/modeling/models/s3rec.py b/modeling/models/s3rec.py index e1fcffb4..f9f361d4 100644 --- a/modeling/models/s3rec.py +++ b/modeling/models/s3rec.py @@ -1,33 +1,31 @@ -from models.base import SequentialTorchModel - import torch import torch.nn as nn +from models.base import SequentialTorchModel from utils import create_masked_tensor -class S3RecModel(SequentialTorchModel, config_name='s3rec'): - +class S3RecModel(SequentialTorchModel, config_name="s3rec"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - sequence_segment_prefix, - positive_segment_prefix, - negative_segment_prefix, - candidate_prefix, - num_items, - max_sequence_length, - is_training, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-5, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + negative_prefix, + sequence_segment_prefix, + positive_segment_prefix, + negative_segment_prefix, + candidate_prefix, + num_items, + max_sequence_length, + is_training, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-5, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -39,7 +37,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_training + is_causal=is_training, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -61,50 +59,60 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - sequence_segment_prefix=config['sequence_segment_prefix'], - positive_segment_prefix=config['positive_segment_prefix'], - negative_segment_prefix=config['negative_segment_prefix'], - candidate_prefix=config['candidate_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - is_training=config['is_training'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + sequence_segment_prefix=config["sequence_segment_prefix"], + positive_segment_prefix=config["positive_segment_prefix"], + negative_segment_prefix=config["negative_segment_prefix"], + candidate_prefix=config["candidate_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + is_training=config["is_training"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def masked_item_prediction(self, sequence_embeddings, sequence_mask, target_item): all_items = sequence_embeddings[sequence_mask] # (all_batch_items, emb_dim) - score = torch.einsum( - 'ad,ad->a', all_items, target_item - ) # (all_batch_items) + score = torch.einsum("ad,ad->a", all_items, target_item) # (all_batch_items) return torch.sigmoid(score) # (all_batch_items) def segment_prediction(self, context, segment): - score = torch.einsum('bd,bd->b', self.sp_norm(context), segment) # (batch_size) + score = torch.einsum("bd,bd->b", self.sp_norm(context), segment) # (batch_size) return torch.sigmoid(score) # (batch_size) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) if self._is_training: if self.training: # training mode - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) - all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) - - all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + all_negative_sample_events = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) + + all_sample_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -113,53 +121,68 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - 'current_embeddings': all_sample_embeddings, - 'positive_embeddings': all_positive_sample_embeddings, - 'negative_embeddings': all_negative_sample_embeddings + "current_embeddings": all_sample_embeddings, + "positive_embeddings": all_positive_sample_embeddings, + "negative_embeddings": all_negative_sample_embeddings, } else: # eval mode - if '{}.ids'.format(self._candidate_prefix) in inputs: - candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) - candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + if "{}.ids".format(self._candidate_prefix) in inputs: + candidate_events = inputs[ + "{}.ids".format(self._candidate_prefix) + ] # (all_batch_candidates) + candidate_lengths = inputs[ + "{}.length".format(self._candidate_prefix) + ] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, - lengths=candidate_lengths + data=candidate_embeddings, lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - 'bd,bnd->bn', - last_embeddings, - candidate_embeddings + "bd,bnd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) + candidate_embeddings = ( + self._item_embeddings.weight + ) # (num_items, embedding_dim) candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - candidate_embeddings + "bd,nd->bn", last_embeddings, candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf return candidate_scores else: # Masked Item Prediction - mip_mask = (all_sample_events == self._mask_item_idx).bool() # (all_batch_events) + mip_mask = ( + all_sample_events == self._mask_item_idx + ).bool() # (all_batch_events) embeddings = embeddings[mask][mip_mask] # (all_batch_events, embedding_dim) - positive_item_events = inputs['{}.ids'.format(self._positive_prefix)][mip_mask] # (all_batch_events) - negative_item_events = inputs['{}.ids'.format(self._negative_prefix)][mip_mask] # (all_batch_events) - - positive_item_embeddings = self._item_embeddings(positive_item_events) # (all_batch_events, embedding_dim) - negative_item_embeddings = self._item_embeddings(negative_item_events) # (all_batch_events, embedding_dim) + positive_item_events = inputs["{}.ids".format(self._positive_prefix)][ + mip_mask + ] # (all_batch_events) + negative_item_events = inputs["{}.ids".format(self._negative_prefix)][ + mip_mask + ] # (all_batch_events) + + positive_item_embeddings = self._item_embeddings( + positive_item_events + ) # (all_batch_events, embedding_dim) + negative_item_embeddings = self._item_embeddings( + negative_item_events + ) # (all_batch_events, embedding_dim) # Sequence Prediction - all_segment_events = inputs['{}.ids'.format(self._sequence_segment_prefix)] # (all_batch_events) - all_segment_lengths = inputs['{}.length'.format(self._sequence_segment_prefix)] # (batch_size) + all_segment_events = inputs[ + "{}.ids".format(self._sequence_segment_prefix) + ] # (all_batch_events) + all_segment_lengths = inputs[ + "{}.length".format(self._sequence_segment_prefix) + ] # (batch_size) segment_embeddings, segment_mask = self._apply_sequential_encoder( all_segment_events, all_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) @@ -167,30 +190,41 @@ def forward(self, inputs): segment_embeddings, segment_mask ) # (batch_size, embedding_dim) - positive_segment_events = inputs['{}.ids'.format(self._positive_segment_prefix)] # (all_batch_events) - positive_segment_lengths = inputs['{}.length'.format(self._positive_segment_prefix)] # (batch_size) - positive_segment_embeddings, positive_segment_mask = self._apply_sequential_encoder( - positive_segment_events, positive_segment_lengths + positive_segment_events = inputs[ + "{}.ids".format(self._positive_segment_prefix) + ] # (all_batch_events) + positive_segment_lengths = inputs[ + "{}.length".format(self._positive_segment_prefix) + ] # (batch_size) + positive_segment_embeddings, positive_segment_mask = ( + self._apply_sequential_encoder( + positive_segment_events, positive_segment_lengths + ) ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_positive_segment_embeddings = self._get_last_embedding( positive_segment_embeddings, positive_segment_mask ) # (batch_size, embedding_dim) - negative_segment_events = inputs['{}.ids'.format(self._negative_segment_prefix)] # (all_batch_events) - negative_segment_lengths = inputs['{}.length'.format(self._negative_segment_prefix)] # (batch_size) - negative_segment_embeddings, negative_segment_mask = self._apply_sequential_encoder( - negative_segment_events, negative_segment_lengths + negative_segment_events = inputs[ + "{}.ids".format(self._negative_segment_prefix) + ] # (all_batch_events) + negative_segment_lengths = inputs[ + "{}.length".format(self._negative_segment_prefix) + ] # (batch_size) + negative_segment_embeddings, negative_segment_mask = ( + self._apply_sequential_encoder( + negative_segment_events, negative_segment_lengths + ) ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_negative_segment_embeddings = self._get_last_embedding( negative_segment_embeddings, negative_segment_mask ) # (batch_size, embedding_dim) return { - 'positive_representation': positive_item_embeddings, - 'negative_representation': negative_item_embeddings, - 'current_representation': embeddings, - - 'positive_segment_representation': last_positive_segment_embeddings, - 'negative_segment_representation': last_negative_segment_embeddings, - 'current_segment_representation': last_segment_embeddings + "positive_representation": positive_item_embeddings, + "negative_representation": negative_item_embeddings, + "current_representation": embeddings, + "positive_segment_representation": last_positive_segment_embeddings, + "negative_segment_representation": last_negative_segment_embeddings, + "current_segment_representation": last_segment_embeddings, } diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 4bf6dac3..b1d7044f 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -1,25 +1,24 @@ -from models import SequentialTorchModel -from utils import create_masked_tensor - import torch +from models import SequentialTorchModel +from utils import create_masked_tensor -class SasRecModel(SequentialTorchModel, config_name='sasrec'): +class SasRecModel(SequentialTorchModel, config_name="sasrec"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -31,7 +30,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -41,34 +40,42 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) if self.training: # training mode - all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_positive_sample_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) last_embeddings = self._get_last_embedding( embeddings, mask ) # (batch_size, embedding_dim) - all_embeddings = self._item_embeddings.weight # (num_items + 2, embedding_dim) + all_embeddings = ( + self._item_embeddings.weight + ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim all_scores = torch.einsum( @@ -76,65 +83,60 @@ def forward(self, inputs): ) # (batch_size, num_items + 2) positive_scores = torch.gather( - input=all_scores, - dim=1, - index=all_positive_sample_events[..., None] + input=all_scores, dim=1, index=all_positive_sample_events[..., None] ) # (batch_size, 1) sample_ids, _ = create_masked_tensor( - data=all_sample_events, - lengths=all_sample_lengths + data=all_sample_events, lengths=all_sample_lengths ) # (batch_size, seq_len) negative_scores = torch.scatter( input=all_scores, dim=1, index=sample_ids, - src=torch.ones_like(sample_ids) * (-torch.inf) + src=torch.ones_like(sample_ids) * (-torch.inf), ) # (batch_size, num_items + 2) negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx + negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx return { - 'positive_scores': positive_scores, - 'negative_scores': negative_scores, + "positive_scores": positive_scores, + "negative_scores": negative_scores, "sample_ids": sample_ids, } else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf # Padding id - candidate_scores[:, self._num_items + 1:] = -torch.inf # Mask id + candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices -class SasRecInBatchModel(SasRecModel, config_name='sasrec_in_batch'): - +class SasRecInBatchModel(SasRecModel, config_name="sasrec_in_batch"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( sequence_prefix=sequence_prefix, @@ -148,27 +150,31 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - initializer_range=initializer_range + initializer_range=initializer_range, ) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths @@ -176,10 +182,14 @@ def forward(self, inputs): if self.training: # training mode # queries - in_batch_queries_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + in_batch_queries_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) # positives - in_batch_positive_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + in_batch_positive_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) in_batch_positive_embeddings = self._item_embeddings( in_batch_positive_events ) # (all_batch_events, embedding_dim) @@ -194,25 +204,24 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) return { - 'query_embeddings': in_batch_queries_embeddings, - 'positive_embeddings': in_batch_positive_embeddings, - 'negative_embeddings': in_batch_negative_embeddings + "query_embeddings": in_batch_queries_embeddings, + "positive_embeddings": in_batch_positive_embeddings, + "negative_embeddings": in_batch_negative_embeddings, } else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices \ No newline at end of file + return indices diff --git a/modeling/models/sasrec_ce.py b/modeling/models/sasrec_ce.py index a0316853..d9eb882b 100644 --- a/modeling/models/sasrec_ce.py +++ b/modeling/models/sasrec_ce.py @@ -1,25 +1,24 @@ -from models.base import SequentialTorchModel - import torch import torch.nn as nn +from models.base import SequentialTorchModel -class SasRecCeModel(SequentialTorchModel, config_name='sasrec_ce'): +class SasRecCeModel(SequentialTorchModel, config_name="sasrec_ce"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -31,14 +30,13 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, - out_features=embedding_dim + in_features=embedding_dim, out_features=embedding_dim ) self._init_weights(initializer_range) @@ -46,42 +44,51 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection( + embeddings + ) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu( + embeddings + ) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - 'bsd,nd->bsn', embeddings, self._item_embeddings.weight + "bsd,nd->bsn", embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items + 2) if self.training: # training mode - return {'logits': embeddings[mask]} + return {"logits": embeddings[mask]} else: # eval mode - candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items + 2) + candidate_scores = self._get_last_embedding( + embeddings, mask + ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index dcaea8ff..9f3b5b9e 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -1,6 +1,7 @@ import torch -from models.tiger import TigerModel + from models import SequentialTorchModel +from models.tiger import TigerModel from utils import DEVICE, create_masked_tensor diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index e347018b..68af3035 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -1,8 +1,10 @@ import torch -from .tiger import TigerModel +from torch import nn + from models import SequentialTorchModel from utils import DEVICE, create_masked_tensor -from torch import nn + +from .tiger import TigerModel class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): @@ -140,7 +142,7 @@ def forward(self, inputs): src=torch.ones_like(sample_ids) * (-torch.inf), ) # (all_batch_events, num_items + 2) negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx + negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx return { "positive_scores": positive_scores, diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 1035f009..f62203cf 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,9 +1,10 @@ import json import torch +from torch import nn + from models.base import SequentialTorchModel from rqvae_utils import CollisionSolver, SimplifiedTree -from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function from .rqvae import RqVaeModel @@ -81,7 +82,7 @@ def __init__( a=-2 * initializer_range, b=2 * initializer_range, ), - requires_grad=True, # TODOPK added for bos + requires_grad=True, # TODOPK added for bos ) self._codebook_embeddings = nn.Embedding( @@ -92,13 +93,14 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=False # TODOPK compare with unfrozen codebooks + requires_grad=False, # TODOPK compare with unfrozen codebooks ) item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) self._item_id_to_semantic_embedding = nn.Parameter( - self._item_id_to_semantic_embedding, requires_grad=False # TODOPK compare with unfrozen codebooks + self._item_id_to_semantic_embedding, + requires_grad=False, # TODOPK compare with unfrozen codebooks ) self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) @@ -329,13 +331,17 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): ) assert last_position_embedding.shape == tgt_embeddings[:, -1, :].shape - assert tgt_embeddings.shape == torch.Size([batch_size, step + 1, embedding_dim]) + assert tgt_embeddings.shape == torch.Size( + [batch_size, step + 1, embedding_dim] + ) curr_step_embeddings = tgt_embeddings.clone() curr_step_embeddings[:, -1, :] = ( tgt_embeddings[:, -1, :] + last_position_embedding ) - assert torch.allclose(tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :]) + assert torch.allclose( + tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :] + ) tgt_embeddings = curr_step_embeddings # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings[:, -1, :]) diff --git a/modeling/optimizer/base.py b/modeling/optimizer/base.py index 86c63537..0e85cab8 100644 --- a/modeling/optimizer/base.py +++ b/modeling/optimizer/base.py @@ -1,17 +1,18 @@ import copy import torch + from utils import MetaParent OPTIMIZERS = { - 'sgd': torch.optim.SGD, - 'adam': torch.optim.Adam, - 'adamw': torch.optim.AdamW + "sgd": torch.optim.SGD, + "adam": torch.optim.Adam, + "adamw": torch.optim.AdamW, } SCHEDULERS = { - 'step': torch.optim.lr_scheduler.StepLR, - 'cyclic': torch.optim.lr_scheduler.CyclicLR + "step": torch.optim.lr_scheduler.StepLR, + "cyclic": torch.optim.lr_scheduler.CyclicLR, } @@ -19,7 +20,7 @@ class BaseOptimizer(metaclass=MetaParent): pass -class BasicOptimizer(BaseOptimizer, config_name='basic'): +class BasicOptimizer(BaseOptimizer, config_name="basic"): def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): self._model = model self._optimizer = optimizer @@ -28,26 +29,24 @@ def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): @classmethod def create_from_config(cls, config, **kwargs): - optimizer_cfg = copy.deepcopy(config['optimizer']) - optimizer = OPTIMIZERS[optimizer_cfg.pop('type')]( - kwargs['model'].parameters(), - **optimizer_cfg + optimizer_cfg = copy.deepcopy(config["optimizer"]) + optimizer = OPTIMIZERS[optimizer_cfg.pop("type")]( + kwargs["model"].parameters(), **optimizer_cfg ) - if 'scheduler' in config: - scheduler_cfg = copy.deepcopy(config['scheduler']) - scheduler = SCHEDULERS[scheduler_cfg.pop('type')]( - optimizer, - **scheduler_cfg + if "scheduler" in config: + scheduler_cfg = copy.deepcopy(config["scheduler"]) + scheduler = SCHEDULERS[scheduler_cfg.pop("type")]( + optimizer, **scheduler_cfg ) else: scheduler = None return cls( - model=kwargs['model'], + model=kwargs["model"], optimizer=optimizer, scheduler=scheduler, - clip_grad_threshold=config.get('clip_grad_threshold', None) + clip_grad_threshold=config.get("clip_grad_threshold", None), ) def step(self, loss): @@ -55,14 +54,16 @@ def step(self, loss): loss.backward() if self._clip_grad_threshold is not None: - torch.nn.utils.clip_grad_norm_(self._model.parameters(), self._clip_grad_threshold) + torch.nn.utils.clip_grad_norm_( + self._model.parameters(), self._clip_grad_threshold + ) self._optimizer.step() if self._scheduler is not None: self._scheduler.step() def state_dict(self): - state_dict = {'optimizer': self._optimizer.state_dict()} + state_dict = {"optimizer": self._optimizer.state_dict()} if self._scheduler is not None: - state_dict.update({'scheduler': self._scheduler.state_dict()}) + state_dict.update({"scheduler": self._scheduler.state_dict()}) return state_dict diff --git a/modeling/pretrain.py b/modeling/pretrain.py index 4597e3e8..4221e62c 100644 --- a/modeling/pretrain.py +++ b/modeling/pretrain.py @@ -1,16 +1,16 @@ -import utils -from utils import parse_args, create_logger, fix_random_seed, DEVICE +import copy +import json -from dataset import BaseDataset +import torch + +import utils +from callbacks import BaseCallback from dataloader import BaseDataloader +from dataset import BaseDataset +from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer -from loss import BaseLoss -from callbacks import BaseCallback - -import copy -import json -import torch +from utils import DEVICE, create_logger, fix_random_seed, parse_args logger = create_logger(name=__name__) seed_val = 42 @@ -20,10 +20,10 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): step_num = 0 best_checkpoint = None - logger.debug('Start pretraining...') + logger.debug("Start pretraining...") for epoch in range(epoch_cnt): - logger.debug(f'Start epoch {epoch}') + logger.debug(f"Start epoch {epoch}") for step, batch in enumerate(dataloader): model.train() @@ -39,7 +39,7 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): best_checkpoint = copy.deepcopy(model.state_dict()) - logger.debug('Pretraining procedure has been finished!') + logger.debug("Pretraining procedure has been finished!") return best_checkpoint @@ -47,41 +47,38 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ - utils.tensorboards.TensorboardWriter(config['experiment_name']) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( + config["experiment_name"] + ) - logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) + logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config['dataset']) + dataset = BaseDataset.create_from_config(config["dataset"]) train_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config['dataloader']['train'], - dataset=train_sampler, - **dataset.meta + config["dataloader"]["train"], dataset=train_sampler, **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], - dataset=test_sampler, - **dataset.meta + config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta ) - model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) + model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) - loss_function = BaseLoss.create_from_config(config['loss']) + loss_function = BaseLoss.create_from_config(config["loss"]) - optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) + optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) callback = BaseCallback.create_from_config( - config['callback'], + config["callback"], model=model, dataloader=validation_dataloader, - optimizer=optimizer + optimizer=optimizer, ) - logger.debug('Everything is ready for pretraining process!') + logger.debug("Everything is ready for pretraining process!") # Pretrain process pretrain( @@ -90,14 +87,16 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config['pretrain_epochs_num'] + epoch_cnt=config["pretrain_epochs_num"], ) - logger.debug('Saving model...') - checkpoint_path = '../checkpoints/pretrain_{}_final_state.pth'.format(config['experiment_name']) + logger.debug("Saving model...") + checkpoint_path = "../checkpoints/pretrain_{}_final_state.pth".format( + config["experiment_name"] + ) torch.save(model.state_dict(), checkpoint_path) - logger.debug('Saved model as {}'.format(checkpoint_path)) + logger.debug("Saved model as {}".format(checkpoint_path)) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index 2722515a..33c649b9 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,4 +1,4 @@ from .collision_solver import CollisionSolver -from .trie import Trie +from .simplified_tree import SimplifiedTree from .tree import Tree -from .simplified_tree import SimplifiedTree \ No newline at end of file +from .trie import Trie diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index f673c6dd..426cf1bf 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -6,32 +6,45 @@ class CollisionSolver: - def __init__(self, - emb_dim: int, - sem_id_len: int, - codebook_size: int, - device: torch.device=DEVICE): + def __init__( + self, + emb_dim: int, + sem_id_len: int, + codebook_size: int, + device: torch.device = DEVICE, + ): """ :param emb_dim: Длина остатка :param codebook_size: Количество элементов в одном кодбуке :param sem_id_len: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) # тензор группирирующий остатки по semantic_id + self._sem_ids_sparse_tensor: torch.Tensor = torch.empty( + (0, 0) + ) # тензор группирирующий остатки по semantic_id self.item_ids_sparse_tensor: torch.Tensor = torch.empty( - (0, 0)) # тензор группирирующий реальные айди айтемов по semantic_id - self.counts_dict: dict[int, int] = defaultdict(int) # тензор храняющий количество коллизий по semantic_id + (0, 0) + ) # тензор группирирующий реальные айди айтемов по semantic_id + self.counts_dict: dict[int, int] = defaultdict( + int + ) # тензор храняющий количество коллизий по semantic_id self.emb_dim: int = emb_dim # длина остатка self.sem_id_len: int = sem_id_len # длина semantic_id self.codebook_size: int = codebook_size # количество элементов в одном кодбуке self.device: torch.device = device # девайс - self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len)], - dtype=torch.long, - device=self.device) # ключ для сопоставления числа каждому semantic_id - - def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, - residuals: torch.Tensor) -> None: + self.key: torch.Tensor = torch.tensor( + [self.codebook_size**i for i in range(self.sem_id_len)], + dtype=torch.long, + device=self.device, + ) # ключ для сопоставления числа каждому semantic_id + + def create_query_candidates_dict( + self, + item_ids: torch.Tensor, + semantic_ids: torch.Tensor, + residuals: torch.Tensor, + ) -> None: """ Создает разреженный тензор, который содержит сгруппированные по semantic id элементы @@ -52,35 +65,53 @@ def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: tor semantic_ids = semantic_ids.to(self.device) unique_id = (semantic_ids * self.key).sum(dim=1) # хэши - unique_ids, inverse_indices, counts = torch.unique(unique_id, return_inverse=True, return_counts=True) - sorted_indices = torch.argsort(inverse_indices) # сортированные индексы чтобы совпадающие хэши шли подряд + unique_ids, inverse_indices, counts = torch.unique( + unique_id, return_inverse=True, return_counts=True + ) + sorted_indices = torch.argsort( + inverse_indices + ) # сортированные индексы чтобы совпадающие хэши шли подряд row_indices = inverse_indices[sorted_indices] # отсортированные хэши offsets = torch.cumsum(counts, dim=0) - counts - col_indices = torch.arange(semantic_ids_count, device=self.device) - offsets[ - row_indices] # индексы от 0 до k внутри каждого набора из совпадающих хэшей - - indices = torch.stack([ - unique_ids[row_indices], - col_indices - ], - dim=0) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша - - max_residuals_count = int(counts.max().item()) # максимальное количество коллизий для одного sem_id - max_sid = int(self.codebook_size ** self.sem_id_len) # максимальный хэш sem_id который может быть - - self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], - size=(max_sid, max_residuals_count, self.emb_dim), - device=self.device) # (max_sid, max_residuals_count, emb_dim) - - self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) # sid -> collision count - - self.item_ids_sparse_tensor = torch.sparse_coo_tensor(indices, item_ids[sorted_indices], - size=(max_sid, max_residuals_count), device=self.device, - dtype=torch.int32) # (max_sid, max_residuals_count) - - def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: + col_indices = ( + torch.arange(semantic_ids_count, device=self.device) - offsets[row_indices] + ) # индексы от 0 до k внутри каждого набора из совпадающих хэшей + + indices = torch.stack( + [unique_ids[row_indices], col_indices], dim=0 + ) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша + + max_residuals_count = int( + counts.max().item() + ) # максимальное количество коллизий для одного sem_id + max_sid = int( + self.codebook_size**self.sem_id_len + ) # максимальный хэш sem_id который может быть + + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor( + indices, + residuals[sorted_indices], + size=(max_sid, max_residuals_count, self.emb_dim), + device=self.device, + ) # (max_sid, max_residuals_count, emb_dim) + + self.counts_dict = defaultdict( + int, zip(unique_ids.tolist(), counts.tolist()) + ) # sid -> collision count + + self.item_ids_sparse_tensor = torch.sparse_coo_tensor( + indices, + item_ids[sorted_indices], + size=(max_sid, max_residuals_count), + device=self.device, + dtype=torch.int32, + ) # (max_sid, max_residuals_count) + + def get_residuals_by_semantic_id_batch( + self, semantic_ids: torch.Tensor + ) -> tuple[torch.Tensor, torch.Tensor]: """ :param semantic_ids батч из semantic ids (batch_size, sem_id_len) @@ -93,13 +124,21 @@ def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tupl semantic_ids = semantic_ids.to(self.device) unique_ids = (semantic_ids * self.key).sum(dim=1) - candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) - counts = torch.tensor([self.counts_dict[key.item()] for key in unique_ids], device=self.device) - mask = torch.arange(candidates.shape[1], device=self.device).expand(len(unique_ids), -1) < counts.view(-1, 1) + candidates = torch.stack( + [self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids] + ) + counts = torch.tensor( + [self.counts_dict[key.item()] for key in unique_ids], device=self.device + ) + mask = torch.arange(candidates.shape[1], device=self.device).expand( + len(unique_ids), -1 + ) < counts.view(-1, 1) return candidates, mask - def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: + def get_pred_scores( + self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor + ) -> dict[str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param pred_residuals: [batch_size, emb_dim] предсказанные остатки @@ -120,19 +159,26 @@ def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tens candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) - pred_scores = torch.einsum('njk,nk->nj', candidates, pred_residuals).masked_fill(~mask, -torch.inf) + pred_scores = torch.einsum( + "njk,nk->nj", candidates, pred_residuals + ).masked_fill(~mask, -torch.inf) pred_indices = torch.argmax(pred_scores, dim=1) pred_item_ids = torch.stack( - [self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) + [ + self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] + for i in range(semantic_ids.shape[0]) + ] + ) return { "pred_scores_mask": mask, "pred_scores": pred_scores, - "pred_item_ids": pred_item_ids + "pred_item_ids": pred_item_ids, } - def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[ - str, torch.Tensor]: + def get_true_dedup_tokens( + self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor + ) -> dict[str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param true_residuals: [batch_size, emb_dim] реальные остатки @@ -154,11 +200,11 @@ def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torc assert matches.any(dim=1).all(), "Не у всех батчей есть совпадение" - return { - "true_dedup_tokens": true_dedup_tokens - } + return {"true_dedup_tokens": true_dedup_tokens} - def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: + def get_item_ids_batch( + self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor + ) -> torch.Tensor: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токенов решающего коллизии) :param dedup_tokens: [batch_size] токены решающие коллизии @@ -174,6 +220,10 @@ def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Ten unique_ids = (semantic_ids * self.key).sum(dim=1) item_ids = torch.stack( - [self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) + [ + self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] + for i in range(semantic_ids.shape[0]) + ] + ) return item_ids diff --git a/modeling/rqvae_utils/rqvae_data.py b/modeling/rqvae_utils/rqvae_data.py index 47692cae..5ffec08e 100644 --- a/modeling/rqvae_utils/rqvae_data.py +++ b/modeling/rqvae_utils/rqvae_data.py @@ -1,11 +1,11 @@ -import pandas as pd -import json import gzip -from transformers import AutoTokenizer, AutoModelForSeq2SeqLM -import torch +import json import random +import pandas as pd +import torch from tqdm import tqdm +from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tqdm.pandas() @@ -76,7 +76,7 @@ def get_data(cached=True): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: df = torch.load("../data/Beauty/data_full.pt", weights_only=False) - + return df @@ -91,6 +91,3 @@ def search_similar_items(items_with_tuples, clust2search, max_cnt=5): if cnt >= max_cnt: return similars return similars - - - diff --git a/modeling/rqvae_utils/rqvae_test.py b/modeling/rqvae_utils/rqvae_test.py index 611e7739..03f8e3e8 100644 --- a/modeling/rqvae_utils/rqvae_test.py +++ b/modeling/rqvae_utils/rqvae_test.py @@ -6,6 +6,7 @@ from models import RqVaeModel from utils import DEVICE + def test(a, b): cos_sim = torch.nn.functional.cosine_similarity(a, b, dim=0) norm_a = torch.norm(a, p=2) @@ -13,6 +14,7 @@ def test(a, b): l2_dist = torch.norm(a - b, p=2) / (norm_a + norm_b + 1e-8) return cos_sim, l2_dist + if __name__ == "__main__": config = json.load(open("../configs/train/tiger_train_config.json")) config = config["model"] @@ -24,14 +26,16 @@ def test(a, b): ) df = torch.load(config["embs_extractor_path"], weights_only=False) embeddings_array = np.stack(df["embeddings"].values) - tensor_embeddings = torch.tensor(embeddings_array, dtype=torch.float32, device=DEVICE) - inputs = {'embeddings': tensor_embeddings} + tensor_embeddings = torch.tensor( + embeddings_array, dtype=torch.float32, device=DEVICE + ) + inputs = {"embeddings": tensor_embeddings} rqvae_model.eval() sem_ids, residuals = rqvae_model.forward(inputs) scores = residuals.detach() print(torch.norm(residuals, p=2, dim=1).median()) - for (i, codebook) in enumerate(rqvae_model.codebooks): + for i, codebook in enumerate(rqvae_model.codebooks): scores += codebook[sem_ids[:, i]].detach() decoder_output = rqvae_model.decoder(scores.detach()).detach() @@ -41,11 +45,14 @@ def test(a, b): print("косинусное расстояние", cos_sim) print("евклидово расстояние", l2_dist) - cos_sim = torch.nn.functional.cosine_similarity(tensor_embeddings, decoder_output, dim=1) + cos_sim = torch.nn.functional.cosine_similarity( + tensor_embeddings, decoder_output, dim=1 + ) print("косинусное расстояние", cos_sim.mean(), cos_sim.min(), cos_sim.max()) - norm_a = torch.norm(tensor_embeddings, p=2, dim = 1) - norm_b = torch.norm(decoder_output, p=2, dim = 1) - l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim = 1) / (norm_a + norm_b + 1e-8) - print("евклидово расстояние",l2_dist.median(), l2_dist.min(), l2_dist.max()) - + norm_a = torch.norm(tensor_embeddings, p=2, dim=1) + norm_b = torch.norm(decoder_output, p=2, dim=1) + l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim=1) / ( + norm_a + norm_b + 1e-8 + ) + print("евклидово расстояние", l2_dist.median(), l2_dist.min(), l2_dist.max()) diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 5a09dcb4..120f9a80 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -10,14 +10,21 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) + self.embedding_table: torch.Tensor = ( + embedding_table # (semantic_id_len, codebook_size, emb_dim) + ) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, - sum_with_residuals: bool = True) -> None: + def build_tree_structure( + self, + semantic_ids: torch.Tensor, + residuals: torch.Tensor, + item_ids: torch.Tensor, + sum_with_residuals: bool = True, + ) -> None: """ :param sum_with_residuals: флаг, отвечающий за то учитывать ли остатки при выборе кандидатов :param semantic_ids: (sem_ids_count, sem_id_len) @@ -30,9 +37,11 @@ def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tens assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) - residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, - device=self.device, - dtype=torch.float) + residuals = ( + residuals.to(self.device).float() + if sum_with_residuals + else torch.zeros_like(residuals, device=self.device, dtype=torch.float) + ) self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals self.item_ids = item_ids @@ -44,14 +53,17 @@ def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: assert sem_ids.shape[1] == self.sem_id_len sem_ids = sem_ids.to(self.device) - expanded_emb_table = (self.embedding_table.unsqueeze(0) - .expand(sem_ids.shape[0], -1, -1, -1)) # (count, sem_id_len, codebook_size, emb_dim) + expanded_emb_table = self.embedding_table.unsqueeze(0).expand( + sem_ids.shape[0], -1, -1, -1 + ) # (count, sem_id_len, codebook_size, emb_dim) - index = (sem_ids.unsqueeze(-1) - .expand(-1, -1, self.emb_dim) - .unsqueeze(2)) # (count, sem_id_len, 1, emb_dim) + index = ( + sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) + ) # (count, sem_id_len, 1, emb_dim) - return torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) # (count, emb_dim) + return ( + torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) + ) # (count, emb_dim) def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Tensor: """ @@ -63,14 +75,21 @@ def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Ten assert 0 < items_to_query <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - request_embeddings = self.calculate_full(request_sem_ids) # (batch_size, emb_dim) + request_embeddings = self.calculate_full( + request_sem_ids + ) # (batch_size, emb_dim) - request_embeddings = (request_embeddings.unsqueeze(1) - .expand(-1, self.sem_ids_count, -1)) # (batch_size, sem_ids_count, emb_dim) + request_embeddings = request_embeddings.unsqueeze(1).expand( + -1, self.sem_ids_count, -1 + ) # (batch_size, sem_ids_count, emb_dim) - diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) + diff_norm = torch.norm( + self.full_embeddings - request_embeddings, p=2, dim=2 + ) # (batch_size, sem_ids_count) - indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :items_to_query] # (batch_size, k) + indices = torch.argsort(diff_norm, descending=False, dim=1)[ + :, :items_to_query + ] # (batch_size, k) return self.item_ids[indices] def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: @@ -84,18 +103,21 @@ def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: assert 0 < k <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - index = (request_sem_ids.unsqueeze(-1) - .expand(-1, -1, self.emb_dim) - .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) + index = ( + request_sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) + ) # (batch_size, sem_id_len, 1, emb_dim) request_embeddings = torch.gather( - input=self.embedding_table.unsqueeze(0).expand(request_sem_ids.shape[0], -1, -1, -1), + input=self.embedding_table.unsqueeze(0).expand( + request_sem_ids.shape[0], -1, -1, -1 + ), dim=2, - index=index + index=index, ).sum(1) # (batch_size, emb_dim) - diff_norm = torch.cdist(self.full_embeddings, request_embeddings.unsqueeze(1), p=2).squeeze( - 1) # (batch_size, sem_ids_count) + diff_norm = torch.cdist( + self.full_embeddings, request_embeddings.unsqueeze(1), p=2 + ).squeeze(1) # (batch_size, sem_ids_count) _, indices = torch.topk(diff_norm, k=k, dim=1, largest=False) # (batch_size, k) return self.item_ids[indices.squeeze(-1)] diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index b09cd049..336f6dbe 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -11,7 +11,9 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) + self.embedding_table: torch.Tensor = ( + embedding_table # (semantic_id_len, codebook_size, emb_dim) + ) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.key: torch.Tensor = torch.empty((0, 0)) self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) @@ -20,7 +22,12 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor): + def build_tree_structure( + self, + semantic_ids: torch.Tensor, + residuals: torch.Tensor, + item_ids: torch.Tensor, + ): """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) @@ -34,22 +41,41 @@ def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tens assert item_ids.shape == (self.sem_ids_count,) self.item_ids = item_ids - self.key = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len - 1, -1, -1)], - dtype=torch.long, device=self.device) + self.key = torch.tensor( + [self.codebook_size**i for i in range(self.sem_id_len - 1, -1, -1)], + dtype=torch.long, + device=self.device, + ) self.sids = self.get_sids(semantic_ids.float()) # (sem_id_len, ) self.sem_ids_embs = self.calculate_full(semantic_ids, residuals) - result = torch.full(size=[self.codebook_size ** self.sem_id_len], fill_value=0, dtype=torch.int64, - device=self.device) + result = torch.full( + size=[self.codebook_size**self.sem_id_len], + fill_value=0, + dtype=torch.int64, + device=self.device, + ) temp_unique_id = self.sids * self.codebook_size - temp_sem_ids = torch.concat([semantic_ids, torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1)], - dim=-1) + temp_sem_ids = torch.concat( + [ + semantic_ids, + torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1), + ], + dim=-1, + ) for i in range(0, self.sem_id_len + 1): - temp_unique_id = temp_unique_id - (self.codebook_size ** i) * temp_sem_ids[:, self.sem_id_len - i] - temp_unique_ids, temp_inverse_indices = torch.unique(temp_unique_id, return_inverse=True) + temp_unique_id = ( + temp_unique_id + - (self.codebook_size**i) * temp_sem_ids[:, self.sem_id_len - i] + ) + temp_unique_ids, temp_inverse_indices = torch.unique( + temp_unique_id, return_inverse=True + ) temp_counts = torch.bincount(temp_inverse_indices) - truncated_ids = torch.floor_divide(input=temp_unique_id, other=(self.codebook_size ** (i + 1))).long() + truncated_ids = torch.floor_divide( + input=temp_unique_id, other=(self.codebook_size ** (i + 1)) + ).long() result[truncated_ids] = temp_counts[temp_inverse_indices] self.A = result @@ -64,13 +90,21 @@ def get_counts(self, sem_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor] offsets = torch.arange(self.sem_id_len + 1, device=self.device) i = torch.arange(self.sem_id_len, device=self.device) - mask_sem = (i < (self.sem_id_len - offsets.unsqueeze(1))).long() # (sem_id_len + 1, sem_id_len) + mask_sem = ( + i < (self.sem_id_len - offsets.unsqueeze(1)) + ).long() # (sem_id_len + 1, sem_id_len) divs = torch.pow(self.codebook_size, offsets) # (sem_id_len + 1,) - C = (sem_ids.unsqueeze(1) * mask_sem.unsqueeze(0) * self.key.unsqueeze(0).unsqueeze(1)).sum(dim=-1) + C = ( + sem_ids.unsqueeze(1) + * mask_sem.unsqueeze(0) + * self.key.unsqueeze(0).unsqueeze(1) + ).sum(dim=-1) B = C // divs.unsqueeze(0) - return C, self.A[B] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) + return C, self.A[ + B + ] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: """ @@ -78,9 +112,11 @@ def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: :return: хэши sem_ids (sem_id_count,) """ assert sem_ids.shape[1] == self.sem_id_len - return torch.einsum('nc,c->n', sem_ids, self.key.float()) # (sem_ids_count,) + return torch.einsum("nc,c->n", sem_ids, self.key.float()) # (sem_ids_count,) - def calc_ol(self, batch_ids: torch.Tensor, k: int) -> tuple[torch.Tensor, torch.Tensor]: + def calc_ol( + self, batch_ids: torch.Tensor, k: int + ) -> tuple[torch.Tensor, torch.Tensor]: """ :param batch_ids: (batch_size, sem_id_len) :param k: int @@ -94,7 +130,8 @@ def calc_ol(self, batch_ids: torch.Tensor, k: int) -> tuple[torch.Tensor, torch. gather_ol = torch.gather(c, dim=1, index=ol.unsqueeze(1)).squeeze() # (bs,) mask_ol = (gather_ol.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1)) + self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1) + ) return ol, mask_ol # (bs,) (bs, sem_ids_count) def calc_il(self, batch_ids, k): @@ -108,19 +145,27 @@ def calc_il(self, batch_ids, k): batch_dim = batch_ids.shape[0] c, a = self.get_counts(batch_ids) - extended_c = torch.concat([torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], dim=1) + extended_c = torch.concat( + [torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], + dim=1, + ) il = torch.argmax((a > k).long(), dim=-1) - 1 # (bs,) - gather_il = torch.gather(extended_c, dim=1, index=(il + 1).unsqueeze(1)).squeeze() # (bs,) + gather_il = torch.gather( + extended_c, dim=1, index=(il + 1).unsqueeze(1) + ).squeeze() # (bs,) mask_il = (gather_il.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1)) + self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1) + ) return il, mask_il # (bs,) (bs, sem_ids_count) def get_repeated_sids(self, k: int) -> torch.Tensor: return self.sids.repeat(k, 1) # (k, sem_ids_count) - def get_request_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: + def get_request_embeddings( + self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor + ) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) @@ -129,11 +174,16 @@ def get_request_embeddings(self, decomposed_embeddings: torch.Tensor, levels: to assert decomposed_embeddings.shape[1:] == (self.sem_id_len + 1, self.emb_dim) assert levels.shape == (decomposed_embeddings.shape[0],) - mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange(self.sem_id_len + 2, 0, -1, - device=self.device).unsqueeze(1) - return torch.sum(decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1) # (bs, emb_dim) + mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange( + self.sem_id_len + 2, 0, -1, device=self.device + ).unsqueeze(1) + return torch.sum( + decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1 + ) # (bs, emb_dim) - def calculate_full(self, sem_ids: torch.Tensor, residuals: torch.Tensor) -> torch.Tensor: + def calculate_full( + self, sem_ids: torch.Tensor, residuals: torch.Tensor + ) -> torch.Tensor: """ :param sem_ids: sem_ids (count, sem_id_len) :param residuals: остатки для каждого sem_id (count, emb_dim) @@ -145,31 +195,56 @@ def calculate_full(self, sem_ids: torch.Tensor, residuals: torch.Tensor) -> torc count = residuals.shape[0] index = sem_ids.view(count, -1, 1, 1).expand(-1, -1, -1, self.emb_dim) - embs = torch.gather(input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), dim=2, - index=index) # expand бесплатный по памяти - decomposed_embs = torch.concat([embs.squeeze(2), residuals.unsqueeze(1)], dim=1) # (sem_ids_count, emb_dim) - - assert decomposed_embs.shape == (sem_ids.shape[0], self.sem_id_len + 1, self.emb_dim) + embs = torch.gather( + input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), + dim=2, + index=index, + ) # expand бесплатный по памяти + decomposed_embs = torch.concat( + [embs.squeeze(2), residuals.unsqueeze(1)], dim=1 + ) # (sem_ids_count, emb_dim) + + assert decomposed_embs.shape == ( + sem_ids.shape[0], + self.sem_id_len + 1, + self.emb_dim, + ) return decomposed_embs - def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: + def calculate_level_embeddings( + self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor + ) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) :return: эмбеддинги для всех sem_ids для нужных глубин (batch_size, sem_ids_count, emb_dim) """ - assert decomposed_embeddings.shape == (self.sem_ids_count, self.sem_id_len + 1, self.emb_dim) - - mask = (torch.arange(1, self.sem_id_len + 2, device=self.device) >= - torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1)).float() + assert decomposed_embeddings.shape == ( + self.sem_ids_count, + self.sem_id_len + 1, + self.emb_dim, + ) + + mask = ( + torch.arange(1, self.sem_id_len + 2, device=self.device) + >= torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1) + ).float() sids_mask = mask[levels + 1].unsqueeze(-1) # (batch_size, sem_id_len + 1, 1) - return torch.einsum('nld,bld->bnd', decomposed_embeddings, sids_mask) # (batch_size, sem_ids_count, emb_dim) + return torch.einsum( + "nld,bld->bnd", decomposed_embeddings, sids_mask + ) # (batch_size, sem_ids_count, emb_dim) def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: - return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) - - def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, - items_to_query: int) -> torch.Tensor: + return torch.where( + mask, result, torch.tensor(float("-inf"), device=self.device) + ) + + def query( + self, + request_sem_ids: torch.Tensor, + request_residuals: torch.Tensor, + items_to_query: int, + ) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) @@ -197,13 +272,31 @@ def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, ol_request_embeddings = self.get_request_embeddings(request_embs, ol) il_request_embeddings = self.get_request_embeddings(request_embs, il) - ol_scores = torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() - - il_scores = torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() - - ids = np.lexsort(keys=(-torch.cat([il_scores, ol_scores], dim=1), - ~torch.cat([torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1), - ~torch.cat([il_mask, ol_mask], dim=1))) - - ids = (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :items_to_query] # (batch_size, k) + ol_scores = ( + torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)) + .squeeze(-1) + .detach() + .cpu() + ) + + il_scores = ( + torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)) + .squeeze(-1) + .detach() + .cpu() + ) + + ids = np.lexsort( + keys=( + -torch.cat([il_scores, ol_scores], dim=1), + ~torch.cat( + [torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1 + ), + ~torch.cat([il_mask, ol_mask], dim=1), + ) + ) + + ids = (ids % self.sem_ids_count)[:, : self.sem_ids_count][ + :, :items_to_query + ] # (batch_size, k) return self.item_ids[ids] diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index 3f1d3f38..f73db7c6 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -6,20 +6,20 @@ import torch from models.rqvae import RqVaeModel -from rqvae_utils import Trie, SimplifiedTree, Tree +from rqvae_utils import SimplifiedTree, Tree, Trie from utils import DEVICE def memory_stats(k): process = psutil.Process(os.getpid()) - memory_usage = process.memory_info().rss / 1024 ** 2 + memory_usage = process.memory_info().rss / 1024**2 print(f"{k}. Использование памяти: {memory_usage:.2f} MB") def calc_sid(sid, codebook_size): res = sid[-1] for i in range(1, sid.shape[0]): - res += sid[-i - 1] * (codebook_size ** i) + res += sid[-i - 1] * (codebook_size**i) return res @@ -41,9 +41,7 @@ def stats(query_sem_id, codebook_size, sids, item_ids): ) rqvae_model.eval() - emb_table = torch.stack( - [cb for cb in rqvae_model.codebooks] - ).to(DEVICE) + emb_table = torch.stack([cb for cb in rqvae_model.codebooks]).to(DEVICE) trie = Trie(rqvae_model) tree = Tree(rqvae_model, DEVICE) @@ -73,14 +71,18 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_wr.build_tree_structure(semantic_ids, residuals, item_ids, False) - print(f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms") + print( + f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms" + ) full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) print(torch.all((full_embeddings == simplified_tree.full_embeddings) == True)) items_to_query = 20 batch_size = 256 - q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE) + q_semantic_ids = torch.randint( + 0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE + ) q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) total_time = 0 diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index b7971e86..4a4ca5b7 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -2,6 +2,7 @@ import time import torch + from models.rqvae import RqVaeModel from utils import DEVICE diff --git a/modeling/train.py b/modeling/train.py index d865620d..4919be6f 100644 --- a/modeling/train.py +++ b/modeling/train.py @@ -1,23 +1,32 @@ -import utils -from utils import parse_args, create_logger, DEVICE, fix_random_seed +import copy +import json +import os +import torch + +import utils from callbacks import BaseCallback -from dataset import BaseDataset from dataloader import BaseDataloader +from dataset import BaseDataset from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer - -import copy -import json -import os -import torch +from utils import DEVICE, create_logger, fix_random_seed, parse_args logger = create_logger(name=__name__) seed_val = 42 -def train(dataloader, model, optimizer, loss_function, callback, epoch_cnt=None, step_cnt=None, best_metric=None): +def train( + dataloader, + model, + optimizer, + loss_function, + callback, + epoch_cnt=None, + step_cnt=None, + best_metric=None, +): step_num = 0 epoch_num = 0 current_metric = 0 @@ -27,14 +36,20 @@ def train(dataloader, model, optimizer, loss_function, callback, epoch_cnt=None, best_epoch = 0 best_checkpoint = None - logger.debug('Start training...') + logger.debug("Start training...") - while (epoch_cnt is None or epoch_num < epoch_cnt) and (step_cnt is None or step_num < step_cnt): + while (epoch_cnt is None or epoch_num < epoch_cnt) and ( + step_cnt is None or step_num < step_cnt + ): if best_epoch + epochs_threshold < epoch_num: - logger.debug('There is no progress during {} epochs. Finish training'.format(epochs_threshold)) + logger.debug( + "There is no progress during {} epochs. Finish training".format( + epochs_threshold + ) + ) break - logger.debug(f'Start epoch {epoch_num}') + logger.debug(f"Start epoch {epoch_num}") for step, batch in enumerate(dataloader): batch_ = copy.deepcopy(batch) @@ -54,14 +69,18 @@ def train(dataloader, model, optimizer, loss_function, callback, epoch_cnt=None, # Take the last model best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num - elif best_checkpoint is None or best_metric in batch_ and current_metric <= batch_[best_metric]: + elif ( + best_checkpoint is None + or best_metric in batch_ + and current_metric <= batch_[best_metric] + ): # If it is the first checkpoint, or it is the best checkpoint current_metric = batch_[best_metric] best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num epoch_num += 1 - logger.debug('Training procedure has been finished!') + logger.debug("Training procedure has been finished!") return best_checkpoint @@ -69,59 +88,54 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ - utils.tensorboards.TensorboardWriter(config['experiment_name']) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( + config["experiment_name"] + ) - logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) - logger.debug('Current DEVICE: {}'.format(DEVICE)) + logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) + logger.debug("Current DEVICE: {}".format(DEVICE)) - dataset = BaseDataset.create_from_config(config['dataset']) + dataset = BaseDataset.create_from_config(config["dataset"]) train_sampler, validation_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config['dataloader']['train'], - dataset=train_sampler, - **dataset.meta + config["dataloader"]["train"], dataset=train_sampler, **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], - dataset=validation_sampler, - **dataset.meta + config["dataloader"]["validation"], dataset=validation_sampler, **dataset.meta ) eval_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], - dataset=test_sampler, - **dataset.meta + config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta ) - model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) - if 'checkpoint' in config: - checkpoint_path = os.path.join('../checkpoints', f'{config["checkpoint"]}.pth') - logger.debug('Loading checkpoint from {}'.format(checkpoint_path)) + model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) + if "checkpoint" in config: + checkpoint_path = os.path.join("../checkpoints", f"{config['checkpoint']}.pth") + logger.debug("Loading checkpoint from {}".format(checkpoint_path)) checkpoint = torch.load(checkpoint_path) print(checkpoint.keys()) model.load_state_dict(checkpoint) - loss_function = BaseLoss.create_from_config(config['loss']) + loss_function = BaseLoss.create_from_config(config["loss"]) - optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) + optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) callback = BaseCallback.create_from_config( - config['callback'], + config["callback"], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta + **dataset.meta, ) # TODO add verbose option for all callbacks, multiple optimizer options (???) # TODO create pre/post callbacks - logger.debug('Everything is ready for training process!') + logger.debug("Everything is ready for training process!") # Train process _ = train( @@ -130,16 +144,18 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get('train_epochs_num'), - step_cnt=config.get('train_steps_num'), - best_metric=config.get('best_metric') + epoch_cnt=config.get("train_epochs_num"), + step_cnt=config.get("train_steps_num"), + best_metric=config.get("best_metric"), ) - logger.debug('Saving model...') - checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) + logger.debug("Saving model...") + checkpoint_path = "../checkpoints/{}_final_state.pth".format( + config["experiment_name"] + ) torch.save(model.state_dict(), checkpoint_path) - logger.debug('Saved model as {}'.format(checkpoint_path)) + logger.debug("Saved model as {}".format(checkpoint_path)) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/modeling/train_multiple.py b/modeling/train_multiple.py index c42f77a6..8c118584 100644 --- a/modeling/train_multiple.py +++ b/modeling/train_multiple.py @@ -1,20 +1,26 @@ import itertools import json import random + import torch import utils -from utils import parse_args, create_logger, DEVICE, Params, dict_to_str, fix_random_seed - -from train import train -from infer import inference - from callbacks import BaseCallback, EvalCallback, ValidationCallback -from dataset import BaseDataset from dataloader import BaseDataloader +from dataset import BaseDataset +from infer import inference from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer +from train import train +from utils import ( + DEVICE, + Params, + create_logger, + dict_to_str, + fix_random_seed, + parse_args, +) logger = create_logger(name=__name__) seed_val = 42 @@ -24,24 +30,23 @@ def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) + logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) - dataset_params = Params(config['dataset'], config['dataset_params']) - model_params = Params(config['model'], config['model_params']) - loss_function_params = Params(config['loss'], config['loss_params']) - optimizer_params = Params(config['optimizer'], config['optimizer_params']) + dataset_params = Params(config["dataset"], config["dataset_params"]) + model_params = Params(config["model"], config["model_params"]) + loss_function_params = Params(config["loss"], config["loss_params"]) + optimizer_params = Params(config["optimizer"], config["optimizer_params"]) - logger.debug('Everything is ready for training process!') + logger.debug("Everything is ready for training process!") - start_from = config.get('start_from', 0) - num = config.get('num_exps', None) + start_from = config.get("start_from", 0) + num = config.get("num_exps", None) - list_of_params = list(itertools.product( - dataset_params, - model_params, - loss_function_params, - optimizer_params - )) + list_of_params = list( + itertools.product( + dataset_params, model_params, loss_function_params, optimizer_params + ) + ) if num is None: num = len(list_of_params) @@ -50,59 +55,61 @@ def main(): cnt = 0 - for dataset_param, model_param, loss_param, optimizer_param in list_of_params[start_from:num]: + for dataset_param, model_param, loss_param, optimizer_param in list_of_params[ + start_from:num + ]: cnt += 1 if cnt < start_from: continue - model_name = '_'.join([ - config['experiment_name'], - dict_to_str(dataset_param, config['dataset_params']), - dict_to_str(model_param, config['model_params']), - dict_to_str(loss_param, config['loss_params']), - dict_to_str(optimizer_param, config['optimizer_params']) - ]) + model_name = "_".join( + [ + config["experiment_name"], + dict_to_str(dataset_param, config["dataset_params"]), + dict_to_str(model_param, config["model_params"]), + dict_to_str(loss_param, config["loss_params"]), + dict_to_str(optimizer_param, config["optimizer_params"]), + ] + ) - logger.debug('Starting {}'.format(model_name)) + logger.debug("Starting {}".format(model_name)) dataset = BaseDataset.create_from_config(dataset_param) train_sampler, validation_sampler, eval_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config['dataloader']['train'], - dataset=train_sampler, - **dataset.meta + config["dataloader"]["train"], dataset=train_sampler, **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], + config["dataloader"]["validation"], dataset=validation_sampler, - **dataset.meta + **dataset.meta, ) eval_dataloader = BaseDataloader.create_from_config( - config['dataloader']['validation'], - dataset=eval_sampler, - **dataset.meta + config["dataloader"]["validation"], dataset=eval_sampler, **dataset.meta ) if utils.tensorboards.GLOBAL_TENSORBOARD_WRITER is not None: utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.close() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter(model_name, use_time=False) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = ( + utils.tensorboards.TensorboardWriter(model_name, use_time=False) + ) model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) loss_function = BaseLoss.create_from_config(loss_param) optimizer = BaseOptimizer.create_from_config(optimizer_param, model=model) callback = BaseCallback.create_from_config( - config['callback'], + config["callback"], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta + **dataset.meta, ) best_model_checkpoint = train( @@ -111,11 +118,13 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get('train_epochs_num'), - best_metric=config.get('best_metric') + epoch_cnt=config.get("train_epochs_num"), + best_metric=config.get("best_metric"), ) - eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) + eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to( + DEVICE + ) eval_model.load_state_dict(best_model_checkpoint) for cl in callback._callbacks: @@ -136,11 +145,11 @@ def main(): inference(eval_dataloader, eval_model, metrics, pred_prefix, labels_prefix) - logger.debug('Saving best model checkpoint...') - checkpoint_path = '../checkpoints/{}_final_state.pth'.format(model_name) + logger.debug("Saving best model checkpoint...") + checkpoint_path = "../checkpoints/{}_final_state.pth".format(model_name) torch.save(best_model_checkpoint, checkpoint_path) - logger.debug('Saved model as {}'.format(checkpoint_path)) + logger.debug("Saved model as {}".format(checkpoint_path)) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 8b96ac52..1d62369e 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -1,39 +1,37 @@ -from utils.registry import MetaParent -from utils.grid_search import Params -import utils.tensorboards - +import argparse import json -import random import logging -import argparse -import numpy as np +import random +import numpy as np import torch +import utils.tensorboards +from utils.grid_search import Params +from utils.registry import MetaParent + if torch.cuda.is_available(): - DEVICE = torch.device('cuda:0') -# elif torch.backends.mps.is_available(): -# DEVICE = torch.device("mps:0") + DEVICE = torch.device("cuda") else: - DEVICE = torch.device('cpu') + DEVICE = torch.device("cpu") def parse_args(): parser = argparse.ArgumentParser() - parser.add_argument('--params', required=True) + parser.add_argument("--params", required=True) args = parser.parse_args() with open(args.params) as f: params = json.load(f) - + return params def create_logger( - name, - level=logging.DEBUG, - format='[%(asctime)s] [%(levelname)s]: %(message)s', - datefmt='%Y-%m-%d %H:%M:%S' + name, + level=logging.DEBUG, + format="[%(asctime)s] [%(levelname)s]: %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", ): logging.basicConfig(level=level, format=format, datefmt=datefmt) logger = logging.getLogger(name) @@ -54,26 +52,31 @@ def maybe_to_list(values): def get_activation_function(name, **kwargs): - if name == 'relu': + if name == "relu": return torch.nn.ReLU() - elif name == 'gelu': + elif name == "gelu": return torch.nn.GELU() - elif name == 'elu': - return torch.nn.ELU(alpha=float(kwargs.get('alpha', 1.0))) - elif name == 'leaky': - return torch.nn.LeakyReLU(negative_slope=float(kwargs.get('negative_slope', 1e-2))) - elif name == 'sigmoid': + elif name == "elu": + return torch.nn.ELU(alpha=float(kwargs.get("alpha", 1.0))) + elif name == "leaky": + return torch.nn.LeakyReLU( + negative_slope=float(kwargs.get("negative_slope", 1e-2)) + ) + elif name == "sigmoid": return torch.nn.Sigmoid() - elif name == 'tanh': + elif name == "tanh": return torch.nn.Tanh() - elif name == 'softmax': + elif name == "softmax": return torch.nn.Softmax() - elif name == 'softplus': - return torch.nn.Softplus(beta=int(kwargs.get('beta', 1.0)), threshold=int(kwargs.get('threshold', 20))) - elif name == 'softmax_logit': + elif name == "softplus": + return torch.nn.Softplus( + beta=int(kwargs.get("beta", 1.0)), + threshold=int(kwargs.get("threshold", 20)), + ) + elif name == "softmax_logit": return torch.nn.LogSoftmax() else: - raise ValueError('Unknown activation function name `{}`'.format(name)) + raise ValueError("Unknown activation function name `{}`".format(name)) def dict_to_str(x, params): @@ -82,19 +85,21 @@ def dict_to_str(x, params): if k in params: if isinstance(v, dict): # part = '_'.join([f'{k}-{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) - part = '_'.join([f'{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) + part = "_".join( + [f"{sub_part}" for sub_part in dict_to_str(v, params[k]).split("_")] + ) elif isinstance(v, tuple) or isinstance(v, list): sub_strings = [] for i, sub_value in enumerate(v): - sub_strings.append(f'({i})_{dict_to_str(v[i], params[k][i])}') - part = f'({"_".join(sub_strings)})' + sub_strings.append(f"({i})_{dict_to_str(v[i], params[k][i])}") + part = f"({'_'.join(sub_strings)})" else: # part = f'{k}-{v}' - part = f'{v}' + part = f"{v}" parts.append(part) else: continue - return '_'.join(parts).replace('.', '-') + return "_".join(parts).replace(".", "-") def create_masked_tensor(data, lengths): @@ -103,20 +108,22 @@ def create_masked_tensor(data, lengths): if len(data.shape) == 1: # only indices padded_tensor = torch.zeros( - batch_size, max_sequence_length, - dtype=data.dtype, device=DEVICE + batch_size, max_sequence_length, dtype=data.dtype, device=DEVICE ) # (batch_size, max_seq_len) else: assert len(data.shape) == 2 # embeddings padded_tensor = torch.zeros( - batch_size, max_sequence_length, data.shape[-1], - dtype=data.dtype, device=DEVICE + batch_size, + max_sequence_length, + data.shape[-1], + dtype=data.dtype, + device=DEVICE, ) # (batch_size, max_seq_len, emb_dim) - mask = torch.arange( - end=max_sequence_length, - device=DEVICE - )[None].tile([batch_size, 1]) < lengths[:, None] # (batch_size, max_seq_len) + mask = ( + torch.arange(end=max_sequence_length, device=DEVICE)[None].tile([batch_size, 1]) + < lengths[:, None] + ) # (batch_size, max_seq_len) padded_tensor[mask] = data diff --git a/modeling/utils/grid_search.py b/modeling/utils/grid_search.py index 268d9458..d7330421 100644 --- a/modeling/utils/grid_search.py +++ b/modeling/utils/grid_search.py @@ -3,7 +3,6 @@ class Params: - def __init__(self, config, params): self._initial_config = copy.deepcopy(config) self._initial_params = copy.deepcopy(params) @@ -12,7 +11,9 @@ def __iter__(self): keys = [] values = [] - all_keys = set(self._initial_config.keys()).union(set(self._initial_params.keys())) + all_keys = set(self._initial_config.keys()).union( + set(self._initial_params.keys()) + ) for field_name in all_keys: keys.append(field_name) @@ -21,18 +22,28 @@ def __iter__(self): params_fields_value = self._initial_params.get(field_name) if initial_field_value: - if params_fields_value is None: # We don't want to iterate through this field + if ( + params_fields_value is None + ): # We don't want to iterate through this field values.append([initial_field_value]) - elif isinstance(initial_field_value, list) and isinstance(initial_field_value, list): + elif isinstance(initial_field_value, list) and isinstance( + initial_field_value, list + ): assert len(initial_field_value) == len(params_fields_value) list_values = [] for i in range(len(initial_field_value)): - field_variations = list(Params(initial_field_value[i], params_fields_value[i])) + field_variations = list( + Params(initial_field_value[i], params_fields_value[i]) + ) list_values.append(field_variations) list_values = [p for p in product(*list_values)] values.append(list_values) - elif isinstance(initial_field_value, dict): # It is composite param, need to go inside - field_variations = list(Params(initial_field_value, params_fields_value)) + elif isinstance( + initial_field_value, dict + ): # It is composite param, need to go inside + field_variations = list( + Params(initial_field_value, params_fields_value) + ) values.append(field_variations) else: # Simple param, can take as it is values.append([initial_field_value] + params_fields_value) diff --git a/modeling/utils/registry.py b/modeling/utils/registry.py index c2225480..3942269b 100644 --- a/modeling/utils/registry.py +++ b/modeling/utils/registry.py @@ -2,7 +2,6 @@ class MetaParent(type): - def __init__(cls, name, base, params, **kwargs): super().__init__(name, base, params) is_base_class = cls.mro()[1] is object @@ -12,10 +11,10 @@ def __init__(cls, name, base, params, **kwargs): base_class_found = False for key in cls.mro(): if isinstance(key, MetaParent) and key.mro()[1] is object: - assert base_class_found is False, 'multiple base classes(bug)' + assert base_class_found is False, "multiple base classes(bug)" base_class = key base_class_found = True - assert base_class_found is True, f'no base class for {name}' + assert base_class_found is True, f"no base class for {name}" if is_base_class: cls._subclasses = {} @@ -25,7 +24,9 @@ def __init_subclass__(scls, config_name=None): super().__init_subclass__() if config_name is not None: if config_name in base_class._subclasses: - raise ValueError("Class with name `{}` is already registered".format(config_name)) + raise ValueError( + "Class with name `{}` is already registered".format(config_name) + ) scls.config_name = config_name base_class._subclasses[config_name] = scls @@ -33,15 +34,19 @@ def __init_subclass__(scls, config_name=None): @classmethod def parent_create_from_config(cls, config, **kwargs): - if 'type' in config: - return cls._subclasses[config['type']].create_from_config(config, **kwargs) + if "type" in config: + return cls._subclasses[config["type"]].create_from_config( + config, **kwargs + ) else: - raise ValueError('There is no `type` provided for the `{}` class'.format(name)) + raise ValueError( + "There is no `type` provided for the `{}` class".format(name) + ) # Take kwargs for the last initialized baseclass init_kwargs = {} for bcls in cls.mro()[:-1]: # Look into all base classes except object - if '__init__' not in bcls.__dict__: + if "__init__" not in bcls.__dict__: continue init_kwargs = inspect.signature(bcls.__init__).parameters break @@ -50,14 +55,16 @@ def parent_create_from_config(cls, config, **kwargs): def child_create_from_config(cls, config, **kwargs): kwargs = {} for key, argspec in init_kwargs.items(): - if key == 'self': + if key == "self": continue value = config.get(key, argspec.default) if value is inspect.Parameter.empty: - msg = 'There is no value for `{}.__init__` required field `{}` in config `{}`' + msg = "There is no value for `{}.__init__` required field `{}` in config `{}`" raise ValueError(msg.format(cls, key, config)) kwargs[key] = value return cls(**kwargs) - if 'create_from_config' not in cls.__dict__: - cls.create_from_config = parent_create_from_config if is_base_class else child_create_from_config + if "create_from_config" not in cls.__dict__: + cls.create_from_config = ( + parent_create_from_config if is_base_class else child_create_from_config + ) diff --git a/modeling/utils/tensorboards/__init__.py b/modeling/utils/tensorboards/__init__.py index 6c470341..a2f8f279 100644 --- a/modeling/utils/tensorboards/__init__.py +++ b/modeling/utils/tensorboards/__init__.py @@ -1 +1 @@ -from .tensorboard_writers import TensorboardWriter, GLOBAL_TENSORBOARD_WRITER, LOGS_DIR +from .tensorboard_writers import GLOBAL_TENSORBOARD_WRITER, LOGS_DIR, TensorboardWriter diff --git a/modeling/utils/tensorboards/tensorboard_writers.py b/modeling/utils/tensorboards/tensorboard_writers.py index 770fae63..e788a6f8 100644 --- a/modeling/utils/tensorboards/tensorboard_writers.py +++ b/modeling/utils/tensorboards/tensorboard_writers.py @@ -1,19 +1,21 @@ +import datetime import os import time -import datetime from torch.utils.tensorboard import SummaryWriter -LOGS_DIR = '../tensorboard_logs' +LOGS_DIR = "../tensorboard_logs" GLOBAL_TENSORBOARD_WRITER = None class TensorboardWriter(SummaryWriter): - def __init__(self, experiment_name, use_time=True): self._experiment_name = experiment_name super().__init__( - log_dir=os.path.join(LOGS_DIR, f'{experiment_name}_{datetime.datetime.now().strftime("%Y-%m-%dT%H:%M" if use_time else "")}') + log_dir=os.path.join( + LOGS_DIR, + f"{experiment_name}_{datetime.datetime.now().strftime('%Y-%m-%dT%H:%M' if use_time else '')}", + ) ) def add_scalar(self, *args, **kwargs): @@ -21,7 +23,6 @@ def add_scalar(self, *args, **kwargs): class TensorboardTimer: - def __init__(self, scope): super().__init__(LOGS_DIR) self._scope = scope From e96ee1f53e8c4a100db2d9334556de02f3fa7653 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 12:36:59 +0300 Subject: [PATCH 128/175] refactor sasrec semantic --- modeling/models/sasrec_semantic.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 68af3035..1976b5bf 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -1,7 +1,6 @@ import torch -from torch import nn - from models import SequentialTorchModel +from torch import nn from utils import DEVICE, create_masked_tensor from .tiger import TigerModel @@ -43,9 +42,6 @@ def __init__( self._codebook_sizes = rqvae_model.codebook_sizes - self._item_id_to_semantic_id = item_id_to_semantic_id - self._item_id_to_residual = item_id_to_residual - self._codebook_embeddings = nn.Embedding( num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual @@ -55,21 +51,19 @@ def __init__( self._codebook_item_embeddings_stacked = torch.stack( [codebook for codebook in rqvae_model.codebooks] ) - self._codebook_item_embeddings_stacked.requires_grad = ( - False # TODOPK maybe unfreeeze later - ) - - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) + self._codebook_item_embeddings_stacked = nn.Parameter( + self._codebook_item_embeddings_stacked, requires_grad=True + ) # TODOPK fix to use single rqvae codebook pointer self._item_id_to_semantic_embedding, self._item_id_to_full_embedding = ( - self.get_init_item_embeddings(item_ids) + self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual) ) self._item_id_to_semantic_embedding = nn.Parameter( - self._item_id_to_semantic_embedding, requires_grad=False + self._item_id_to_semantic_embedding, requires_grad=True ) self._item_id_to_full_embedding = nn.Parameter( - self._item_id_to_full_embedding, requires_grad=False + self._item_id_to_full_embedding, requires_grad=True ) @classmethod @@ -170,9 +164,11 @@ def get_item_embeddings(self, events): ] # len(events), len(self._codebook_sizes) + 1, embedding_dim return embs.reshape(-1, self._embedding_dim) - def get_init_item_embeddings(self, events): + def get_init_item_embeddings(self, item_id_to_semantic_id, item_id_to_residual): + events = torch.arange(1, len(item_id_to_semantic_id) + 1) + # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[ + semantic_ids = item_id_to_semantic_id[ events - 1 ] # len(events), len(codebook_sizes) @@ -190,7 +186,7 @@ def get_init_item_embeddings(self, events): ) # len(events), len(codebook_sizes), embedding_dim # get residuals - residual = self._item_id_to_residual[events - 1] + residual = item_id_to_residual[events - 1] # text_embeddings = self._item_id_to_text_embedding[events - 1] # residual = text_embeddings - semantic_embeddings.sum(dim=1) residual = residual.unsqueeze(1) From aa01179d9c9cb6dc8b2f4313947292ffbad61a2e Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 18:07:59 +0300 Subject: [PATCH 129/175] unify semantic sasrec --- .../train/sasrec_semantic_train_config.json | 2 +- modeling/models/sasrec_semantic.py | 46 ++++++------------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 1cdf6762..ffe4fb8c 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty", + "experiment_name": "sasrec_semantic_beauty_learnable", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 1976b5bf..cd8028c2 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -48,22 +48,15 @@ def __init__( self._init_weights(initializer_range) - self._codebook_item_embeddings_stacked = torch.stack( - [codebook for codebook in rqvae_model.codebooks] - ) self._codebook_item_embeddings_stacked = nn.Parameter( - self._codebook_item_embeddings_stacked, requires_grad=True - ) # TODOPK fix to use single rqvae codebook pointer - - self._item_id_to_semantic_embedding, self._item_id_to_full_embedding = ( - self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual) - ) + torch.stack([codebook for codebook in rqvae_model.codebooks]), + requires_grad=True, + ) # TODOPK fix to use single rqvae codebook pointer + # (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) self._item_id_to_semantic_embedding = nn.Parameter( - self._item_id_to_semantic_embedding, requires_grad=True - ) - self._item_id_to_full_embedding = nn.Parameter( - self._item_id_to_full_embedding, requires_grad=True + self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), + requires_grad=True, ) @classmethod @@ -110,7 +103,7 @@ def forward(self, inputs): all_embeddings = torch.cat( [ torch.zeros(1, self._embedding_dim, device=DEVICE), - self._item_id_to_full_embedding, + self._item_id_to_semantic_embedding.sum(dim=1), torch.zeros(1, self._embedding_dim, device=DEVICE), ], dim=0, @@ -149,14 +142,16 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_id_to_full_embedding + "bd,nd->bn", + last_embeddings, + self._item_id_to_semantic_embedding.sum(dim=1), ) # (batch_size, num_items) _, indices = torch.topk( candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + 1 + return indices + 1 # tensors are 0 indexed def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ @@ -165,15 +160,8 @@ def get_item_embeddings(self, events): return embs.reshape(-1, self._embedding_dim) def get_init_item_embeddings(self, item_id_to_semantic_id, item_id_to_residual): - events = torch.arange(1, len(item_id_to_semantic_id) + 1) - - # convert to semantic ids - semantic_ids = item_id_to_semantic_id[ - events - 1 - ] # len(events), len(codebook_sizes) - result = [] - for semantic_id in semantic_ids: + for semantic_id in item_id_to_semantic_id: item_repr = [] for codebook_idx, codebook_id in enumerate(semantic_id): item_repr.append( @@ -185,20 +173,14 @@ def get_init_item_embeddings(self, item_id_to_semantic_id, item_id_to_residual): result ) # len(events), len(codebook_sizes), embedding_dim - # get residuals - residual = item_id_to_residual[events - 1] - # text_embeddings = self._item_id_to_text_embedding[events - 1] - # residual = text_embeddings - semantic_embeddings.sum(dim=1) - residual = residual.unsqueeze(1) + residual = item_id_to_residual.unsqueeze(1) # get true item embeddings item_embeddings = torch.cat( [semantic_embeddings, residual], dim=1 ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - full_embeddings = item_embeddings.sum(dim=1) - - return item_embeddings, full_embeddings + return item_embeddings def _encoder_pos_embeddings(self, lengths, mask): def position_lambda(x): From 930e2af127ae8a5e9aa46a7998812c67cd6ac597 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 18:35:47 +0300 Subject: [PATCH 130/175] fixes for fast exps --- configs/train/sasrec_semantic_train_config.json | 4 ++-- configs/train/sasrec_train_config.json | 4 ++-- modeling/models/sasrec_semantic.py | 3 +-- modeling/models/tiger.py | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index ffe4fb8c..c0f4ed29 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -80,7 +80,7 @@ }, { "type": "validation", - "on_step": 64, + "on_step": 4096, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -124,7 +124,7 @@ }, { "type": "eval", - "on_step": 256, + "on_step": 8192, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_train_config.json index 8c64df89..b0c617c4 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_train_config.json @@ -77,7 +77,7 @@ }, { "type": "validation", - "on_step": 64, + "on_step": 4096, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -121,7 +121,7 @@ }, { "type": "eval", - "on_step": 256, + "on_step": 8192, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index cd8028c2..eca8b977 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -51,8 +51,7 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), requires_grad=True, - ) # TODOPK fix to use single rqvae codebook pointer - # (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) + ) # (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) self._item_id_to_semantic_embedding = nn.Parameter( self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index f62203cf..3ca8d30e 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -113,7 +113,7 @@ def __init__( ) @classmethod - def init_rqvae(cls, config) -> RqVaeModel: + def init_rqvae(cls, config): rqvae_config = json.load(open(config["rqvae_train_config_path"])) rqvae_config["model"]["should_init_codebooks"] = False From 181817bd8b7759fa9f549a190a1079b4e690e665 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 19:12:42 +0300 Subject: [PATCH 131/175] refactor tiger init_embeddings --- modeling/models/tiger.py | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 3ca8d30e..0eaadc25 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -70,9 +70,6 @@ def __init__( self._solver: CollisionSolver = solver - self._item_id_to_semantic_id = item_id_to_semantic_id - self._item_id_to_residual = item_id_to_residual - self._codebook_sizes = rqvae_model.codebook_sizes self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( @@ -93,14 +90,12 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=False, # TODOPK compare with unfrozen codebooks + requires_grad=True, ) - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) - self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) self._item_id_to_semantic_embedding = nn.Parameter( - self._item_id_to_semantic_embedding, - requires_grad=False, # TODOPK compare with unfrozen codebooks + self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), + requires_grad=True, ) self._trie = SimplifiedTree(self._codebook_item_embeddings_stacked) @@ -108,7 +103,7 @@ def __init__( self._trie.build_tree_structure( item_id_to_semantic_id.to(DEVICE), item_id_to_residual.to(DEVICE), - item_ids.to(DEVICE), + torch.arange(1, len(item_id_to_semantic_id) + 1).to(DEVICE), sum_with_residuals=False, ) @@ -380,23 +375,16 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): ) return semantic_ids, tgt_embeddings - + def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.view( - len(events) * (len(self._codebook_sizes) + 1), self._embedding_dim - ) - - def get_init_item_embeddings(self, events): - # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[ - events - 1 - ] # len(events), len(codebook_sizes) + return embs.reshape(-1, self._embedding_dim) + def get_init_item_embeddings(self, item_id_to_semantic_id, item_id_to_residual): result = [] - for semantic_id in semantic_ids: + for semantic_id in item_id_to_semantic_id: item_repr = [] for codebook_idx, codebook_id in enumerate(semantic_id): item_repr.append( @@ -404,11 +392,11 @@ def get_init_item_embeddings(self, events): ) result.append(torch.stack(item_repr)) - semantic_embeddings = torch.stack(result) + semantic_embeddings = torch.stack( + result + ) # len(events), len(codebook_sizes), embedding_dim - # get residuals - residual = self._item_id_to_residual[events - 1] - residual = residual.unsqueeze(1) + residual = item_id_to_residual.unsqueeze(1) # get true item embeddings item_embeddings = torch.cat( From 083176cb006269364388a17c852c5f2d178623b7 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 19:14:11 +0300 Subject: [PATCH 132/175] move decoder pos embs --- modeling/models/tiger.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 0eaadc25..75dad31a 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -305,6 +305,18 @@ def _apply_decoder( ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs + + def _decoder_pos_embeddings(self, lengths, mask): + def codebook_lambda(x): + non_bos = x < len(self._codebook_sizes) + x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] + return x # 3, 0, 1, 2, 3, 0, 1, 2 ... len(self._codebook_sizes) = 3 for bos + + codebook_embeddings = self._get_position_embeddings( + lengths, mask, codebook_lambda, self._codebook_embeddings + ) + + return codebook_embeddings def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): batch_size = encoder_embeddings.shape[0] @@ -427,18 +439,6 @@ def codebook_lambda(x): return position_embeddings + codebook_embeddings - def _decoder_pos_embeddings(self, lengths, mask): - def codebook_lambda(x): - non_bos = x < len(self._codebook_sizes) - x[non_bos] = (len(self._codebook_sizes) - 1) - x[non_bos] - return x # 3, 0, 1, 2, 3, 0, 1, 2 ... len(self._codebook_sizes) = 3 for bos - - codebook_embeddings = self._get_position_embeddings( - lengths, mask, codebook_lambda, self._codebook_embeddings - ) - - return codebook_embeddings - def _get_position_embeddings(self, lengths, mask, position_lambda, embedding_layer): batch_size = mask.shape[0] seq_len = mask.shape[1] From 0e878ee5bf726f1ef3a5ed280584b64ba88200fe Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 19:17:05 +0300 Subject: [PATCH 133/175] small refactors --- modeling/models/sasrec_semantic.py | 2 +- modeling/models/tiger.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index eca8b977..399554f1 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -51,7 +51,7 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), requires_grad=True, - ) # (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) + ) # TODOPK (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) self._item_id_to_semantic_embedding = nn.Parameter( self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 75dad31a..03bdb2e1 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -71,7 +71,6 @@ def __init__( self._solver: CollisionSolver = solver self._codebook_sizes = rqvae_model.codebook_sizes - self._bos_token_id = self._codebook_sizes[0] self._bos_weight = nn.Parameter( torch.nn.init.trunc_normal_( torch.zeros(embedding_dim), @@ -91,7 +90,7 @@ def __init__( self._codebook_item_embeddings_stacked = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), requires_grad=True, - ) + ) # TODOPK (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) self._item_id_to_semantic_embedding = nn.Parameter( self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), From af08f7d94a8b1e40dfcce7cfb5231de9f399233a Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sat, 1 Mar 2025 23:08:41 +0300 Subject: [PATCH 134/175] test sasrec-like eval in tiger --- configs/train/tiger_train_config.json | 4 +- modeling/models/tiger.py | 75 ++++++++++++++++----------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/configs/train/tiger_train_config.json b/configs/train/tiger_train_config.json index 119337d1..4b14df40 100644 --- a/configs/train/tiger_train_config.json +++ b/configs/train/tiger_train_config.json @@ -89,7 +89,7 @@ }, { "type": "validation", - "on_step": 64, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -133,7 +133,7 @@ }, { "type": "eval", - "on_step": 256, + "on_step": 2048, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 03bdb2e1..ccf26af8 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -92,6 +92,9 @@ def __init__( requires_grad=True, ) # TODOPK (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) + self._item_id_to_semantic_id = item_id_to_semantic_id + self._item_id_to_residual = item_id_to_residual + self._item_id_to_semantic_embedding = nn.Parameter( self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), requires_grad=True, @@ -177,9 +180,8 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) - all_sample_lengths = all_sample_lengths * (len(self._codebook_sizes) + 1) encoder_embeddings, encoder_mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths + all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) ) # (batch_size, enc_seq_len, embedding_dim), (batch_size, enc_seq_len) if self.training: @@ -223,39 +225,50 @@ def forward(self, inputs): "dedup.logits": pred_info["pred_scores"], "dedup.labels.ids": true_info["true_dedup_tokens"], } - else: - semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( - encoder_embeddings, encoder_mask - ) # (batch_size, len(self._codebook_sizes) (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + # else: + # semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( + # encoder_embeddings, encoder_mask + # ) # (batch_size, len(self._codebook_sizes) (bos, residual)), (batch_size, len(self._codebook_sizes) + 2 (bos, residual), embedding_dim) + # TODOPK + # # 1 4 6 -> lookup -> sum = emb (last embedding) # bs, embedding_dim + # # take all embedings (from stacked) # all_items, embedding_dim + # # take from sasrec eval (indices + 1) + # # guarantee that all items are in correct order - # 1 4 6 -> lookup -> sum = emb (last embedding) # bs, embedding_dim - # take all embedings (from stacked) # all_items, embedding_dim - # take from sasrec eval (indices + 1) - # guarantee that all items are in correct order + # residuals = tgt_embeddings[:, -1, :] + # semantic_ids = semantic_ids.to(torch.int64) - residuals = tgt_embeddings[:, -1, :] - semantic_ids = semantic_ids.to(torch.int64) + # item_ids = self._trie.query(semantic_ids, items_to_query=20) - item_ids = self._trie.query(semantic_ids, items_to_query=20) + # return item_ids - return item_ids + else: # eval mode + semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( + encoder_embeddings, encoder_mask + ) # (batch_size, len(self._codebook_sizes)), (batch_size, len(self._codebook_sizes) + 2, embedding_dim) - # TODOPK (decompose tree) - # else: # eval mode - # last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) - # # b - batch_size, n - num_candidates, d - embedding_dim - # candidate_scores = torch.einsum( - # 'bd,nd->bn', - # last_embeddings, - # self._item_embeddings.weight - # ) # (batch_size, num_items + 2) + embs = [] + for semantic_id in semantic_ids: + cur_emb = [] + for idx, codebook_id in enumerate(semantic_id): + cur_emb.append( + self._codebook_item_embeddings_stacked[idx][codebook_id.item()] + ) + embs.append(torch.stack(cur_emb)) - # _, indices = torch.topk( - # candidate_scores, - # k=20, dim=-1, largest=True - # ) # (batch_size, 20) + last_embeddings = torch.stack(embs).sum(dim=1) # batch_size, embedding_dim - # return indices + 1 + candidate_scores = torch.einsum( + "bd,nd->bn", + last_embeddings, + self._item_id_to_semantic_embedding.sum(dim=1), + ) # (batch_size, num_items) + + _, indices = torch.topk( + candidate_scores, k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices + 1 # tensors are 0 indexed def _apply_decoder( self, tgt_embeddings, label_lengths, encoder_embeddings, encoder_mask @@ -304,7 +317,7 @@ def _apply_decoder( ) # (batch_size, dec_seq_len, embedding_dim) return decoder_outputs - + def _decoder_pos_embeddings(self, lengths, mask): def codebook_lambda(x): non_bos = x < len(self._codebook_sizes) @@ -327,7 +340,7 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): .expand(batch_size, 1, embedding_dim) ) - semantic_ids = torch.tensor([], device=DEVICE) + semantic_ids = torch.tensor([], device=DEVICE, dtype=torch.int64) for step in range(len(self._codebook_sizes) + 1): # semantic_id_seq + residual index = len(self._codebook_sizes) if step == 0 else step - 1 @@ -386,7 +399,7 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): ) return semantic_ids, tgt_embeddings - + def get_item_embeddings(self, events): embs = self._item_id_to_semantic_embedding[ events - 1 From 870f3b4fdc4aa87ba34d76940e8b531d18c16006 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 2 Mar 2025 20:59:40 +0300 Subject: [PATCH 135/175] remove unneeded codebook in semantic --- modeling/models/sasrec_semantic.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 399554f1..6e0448e7 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -48,13 +48,8 @@ def __init__( self._init_weights(initializer_range) - self._codebook_item_embeddings_stacked = nn.Parameter( - torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=True, - ) # TODOPK (ask is it ok to have separate codebooks and _item_id_to_semantic_embedding) - self._item_id_to_semantic_embedding = nn.Parameter( - self.get_init_item_embeddings(item_id_to_semantic_id, item_id_to_residual), + self.get_init_item_embeddings(rqvae_model, item_id_to_semantic_id, item_id_to_residual), requires_grad=True, ) @@ -158,13 +153,15 @@ def get_item_embeddings(self, events): ] # len(events), len(self._codebook_sizes) + 1, embedding_dim return embs.reshape(-1, self._embedding_dim) - def get_init_item_embeddings(self, item_id_to_semantic_id, item_id_to_residual): + def get_init_item_embeddings(self, rqvae_model, item_id_to_semantic_id, item_id_to_residual): + codebooks = torch.stack([codebook for codebook in rqvae_model.codebooks]) + result = [] for semantic_id in item_id_to_semantic_id: item_repr = [] for codebook_idx, codebook_id in enumerate(semantic_id): item_repr.append( - self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] + codebooks[codebook_idx][codebook_id] ) result.append(torch.stack(item_repr)) From 532dde024dbfb25492c3465a27a18e8daf637b65 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 2 Mar 2025 22:01:03 +0300 Subject: [PATCH 136/175] add causal mask --- modeling/models/tiger.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index ccf26af8..49015e2f 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -241,6 +241,9 @@ def forward(self, inputs): # item_ids = self._trie.query(semantic_ids, items_to_query=20) # return item_ids + # TODOPK + # uid -> hash (murmurhash32) -> modulo (2000) -> get_embedding -> prepend + # first iteration -> for each user get embedding else: # eval mode semantic_ids, tgt_embeddings = self._apply_decoder_autoregressive( @@ -366,9 +369,14 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings[:, -1, :]) # curr_embeddings[:, -1, :] = self._decoder_dropout(curr_embeddings[:, -1, :]) + causal_mask = ( + torch.tril(torch.ones(step + 1, step + 1)).bool().to(DEVICE) + ) # (dec_seq_len, dec_seq_len) + decoder_output = self._decoder( tgt=tgt_embeddings, memory=encoder_embeddings, + tgt_mask=~causal_mask, memory_key_padding_mask=~encoder_mask, ) From cf6bdbe4b0be4c8da00db532f1fd7aeb8a4e7015 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 5 Mar 2025 17:10:59 +0300 Subject: [PATCH 137/175] sasrec real draft --- .../samplers/last_item_prediction_neg.py | 54 +++++++++ modeling/loss/base.py | 28 +++++ modeling/models/sasrec_real.py | 104 ++++++++++++++++++ modeling/models/tiger.py | 4 +- 4 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 modeling/dataset/samplers/last_item_prediction_neg.py create mode 100644 modeling/models/sasrec_real.py diff --git a/modeling/dataset/samplers/last_item_prediction_neg.py b/modeling/dataset/samplers/last_item_prediction_neg.py new file mode 100644 index 00000000..91444fa7 --- /dev/null +++ b/modeling/dataset/samplers/last_item_prediction_neg.py @@ -0,0 +1,54 @@ +import copy + +from dataset.samplers.base import EvalSampler, TrainSampler + + +class LastItemPredictionTrainSampler( + TrainSampler, config_name="last_item_prediction_neg" +): + def __init__(self, dataset, num_users, num_items): + super().__init__() + self._dataset = dataset + self._num_users = num_users + self._num_items = num_items + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + ) + + def __getitem__(self, index): + sample = copy.deepcopy(self._dataset[index]) + + item_sequence = sample["item.ids"][:-1] + last_item = sample["item.ids"][-1] + + negative_sequence = self._negative_sampler.generate_negative_samples( + sample, num_negatives + ) + + return { + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [last_item], + "labels.length": 1, + "negative.ids": negative_sequence, + "negative.length": len(negative_sequence), + } + + +class LastItemPredictionEvalSampler( + EvalSampler, config_name="last_item_prediction_neg" +): + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + dataset=kwargs["dataset"], + num_users=kwargs["num_users"], + num_items=kwargs["num_items"], + ) diff --git a/modeling/loss/base.py b/modeling/loss/base.py index d39fff6b..a0f9b180 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -320,6 +320,34 @@ def forward(self, inputs): return loss +class SASRecRealLoss(TorchLoss, config_name='sasrec_real'): + + def __init__( + self, + positive_prefix, + negative_prefix, + output_prefix=None + ): + super().__init__() + self._positive_prefix = positive_prefix + self._negative_prefix = negative_prefix + self._output_prefix = output_prefix + + def forward(self, inputs): + positive_scores = inputs[self._positive_prefix] # (x) + negative_scores = inputs[self._negative_prefix] # (x) + assert positive_scores.shape[0] == negative_scores.shape[0] + + positive_loss = torch.log(nn.functional.sigmoid(positive_scores)) # (x) + negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores)) # (x) + loss = positive_loss + negative_loss # (x) + loss = -loss.mean() # (1) + + if self._output_prefix is not None: + inputs[self._output_prefix] = loss.cpu().item() + + return loss + class SASRecLoss(TorchLoss, config_name="sasrec"): def __init__(self, positive_prefix, negative_prefix, output_prefix=None): super().__init__() diff --git a/modeling/models/sasrec_real.py b/modeling/models/sasrec_real.py new file mode 100644 index 00000000..5aca2457 --- /dev/null +++ b/modeling/models/sasrec_real.py @@ -0,0 +1,104 @@ +class SasRecRealModel(SequentialTorchModel, config_name='sasrec_real'): + + def __init__( + self, + sequence_prefix, + positive_prefix, + negative_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True + ) + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + self._negative_prefix = negative_prefix + + self._init_weights(initializer_range) + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) + ) + + def forward(self, inputs): + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + # queries + in_batch_queries_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + + # positives + in_batch_positive_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + in_batch_positive_embeddings = self._item_embeddings( + in_batch_positive_events + ) # (all_batch_events, embedding_dim) + positive_scores = torch.einsum( + 'bd,bd->b', in_batch_queries_embeddings, in_batch_positive_embeddings + ) # (all_batch_events) + + # negatives + in_batch_negative_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + in_batch_negative_embeddings = self._item_embeddings( + in_batch_negative_events + ) # (all_batch_events, embedding_dim) + negative_scores = torch.einsum( + 'bd,bd->b', in_batch_queries_embeddings, in_batch_negative_embeddings + ) # (all_batch_events) + + return { + 'positive_scores': positive_scores, + 'negative_scores': negative_scores + } + else: # eval mode + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf + + _, indices = torch.topk( + candidate_scores, + k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices \ No newline at end of file diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index 49015e2f..c44c13f3 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -78,7 +78,7 @@ def __init__( a=-2 * initializer_range, b=2 * initializer_range, ), - requires_grad=True, # TODOPK added for bos + requires_grad=True, ) self._codebook_embeddings = nn.Embedding( @@ -380,6 +380,8 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): memory_key_padding_mask=~encoder_mask, ) + # TODOPK add assert for all except last layer (check if only last layer changes) + # TODOPK check decoder output for several outputs # TODOPK ASK it is not true? # assert that prelast items don't change # assert decoder changes only last index in dim = 1 From 91e49ff2a6cf8e0c267a239f9f73474cbcf4ed5c Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 5 Mar 2025 20:47:42 +0300 Subject: [PATCH 138/175] add sasrec real / semantic --- .gitignore | 2 +- configs/train/sasrec_real_train_config.json | 169 ++++++++++++++++++ .../train/sasrec_semantic_train_config.json | 3 +- .../dataset/samplers/last_item_prediction.py | 43 ++++- .../samplers/last_item_prediction_neg.py | 54 ------ modeling/models/__init__.py | 1 + modeling/models/sasrec_real.py | 106 ++++++----- modeling/models/sasrec_semantic.py | 82 ++++----- 8 files changed, 302 insertions(+), 158 deletions(-) create mode 100644 configs/train/sasrec_real_train_config.json delete mode 100644 modeling/dataset/samplers/last_item_prediction_neg.py diff --git a/.gitignore b/.gitignore index 51358cc9..8e376638 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .idea __pycache__ data/* -tensorboard_logs/* +*tensorboard_logs*/* saved_logs/* .venv papers diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json new file mode 100644 index 00000000..4301c2b3 --- /dev/null +++ b/configs/train/sasrec_real_train_config.json @@ -0,0 +1,169 @@ +{ + "experiment_name": "sasrec_real_beauty", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, + "dataset": { + "type": "sequence_full", + "path_to_data_dir": "../data", + "name": "Beauty", + "max_sequence_length": 50, + "samplers": { + "type": "last_item_prediction", + "num_negatives_train": 1, + "negative_sampler_type": "random" + } + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "sasrec_real", + "sequence_prefix": "item", + "positive_prefix": "labels", + "negative_prefix": "negative", + "candidate_prefix": "candidates", + "embedding_dim": 64, + "num_heads": 2, + "num_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "sasrec_real", + "positive_prefix": "positive_scores", + "negative_prefix": "negative_scores", + "output_prefix": "downstream_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 4096, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 8192, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } +} \ No newline at end of file diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index c0f4ed29..64485feb 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -9,6 +9,7 @@ "max_sequence_length": 50, "samplers": { "type": "last_item_prediction", + "num_negatives_train": 1, "negative_sampler_type": "random" } }, @@ -62,7 +63,7 @@ "type": "composite", "losses": [ { - "type": "sasrec", + "type": "sasrec_real", "positive_prefix": "positive_scores", "negative_prefix": "negative_scores", "output_prefix": "downstream_loss" diff --git a/modeling/dataset/samplers/last_item_prediction.py b/modeling/dataset/samplers/last_item_prediction.py index 22eeed51..c9da6570 100644 --- a/modeling/dataset/samplers/last_item_prediction.py +++ b/modeling/dataset/samplers/last_item_prediction.py @@ -1,21 +1,30 @@ import copy from dataset.samplers.base import EvalSampler, TrainSampler +from dataset.negative_samplers.base import BaseNegativeSampler class LastItemPredictionTrainSampler(TrainSampler, config_name="last_item_prediction"): - def __init__(self, dataset, num_users, num_items): + def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives): super().__init__() self._dataset = dataset self._num_users = num_users self._num_items = num_items + self._negative_sampler = negative_sampler + self._num_negatives = num_negatives @classmethod def create_from_config(cls, config, **kwargs): + negative_sampler = BaseNegativeSampler.create_from_config( + {"type": config["negative_sampler_type"]}, **kwargs + ) + return cls( dataset=kwargs["dataset"], num_users=kwargs["num_users"], num_items=kwargs["num_items"], + negative_sampler=negative_sampler, + num_negatives=config.get("num_negatives_train", 0), ) def __getitem__(self, index): @@ -24,14 +33,30 @@ def __getitem__(self, index): item_sequence = sample["item.ids"][:-1] last_item = sample["item.ids"][-1] - return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [last_item], - "labels.length": 1, - } + if self._num_negatives == 0: + return { + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [last_item], + "labels.length": 1, + } + else: + negative_sequence = self._negative_sampler.generate_negative_samples( + sample, self._num_negatives + ) + + return { + "user.ids": sample["user.ids"], + "user.length": sample["user.length"], + "item.ids": item_sequence, + "item.length": len(item_sequence), + "labels.ids": [last_item], + "labels.length": 1, + "negative.ids": negative_sequence, + "negative.length": len(negative_sequence), + } class LastItemPredictionEvalSampler(EvalSampler, config_name="last_item_prediction"): diff --git a/modeling/dataset/samplers/last_item_prediction_neg.py b/modeling/dataset/samplers/last_item_prediction_neg.py deleted file mode 100644 index 91444fa7..00000000 --- a/modeling/dataset/samplers/last_item_prediction_neg.py +++ /dev/null @@ -1,54 +0,0 @@ -import copy - -from dataset.samplers.base import EvalSampler, TrainSampler - - -class LastItemPredictionTrainSampler( - TrainSampler, config_name="last_item_prediction_neg" -): - def __init__(self, dataset, num_users, num_items): - super().__init__() - self._dataset = dataset - self._num_users = num_users - self._num_items = num_items - - @classmethod - def create_from_config(cls, config, **kwargs): - return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - ) - - def __getitem__(self, index): - sample = copy.deepcopy(self._dataset[index]) - - item_sequence = sample["item.ids"][:-1] - last_item = sample["item.ids"][-1] - - negative_sequence = self._negative_sampler.generate_negative_samples( - sample, num_negatives - ) - - return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [last_item], - "labels.length": 1, - "negative.ids": negative_sequence, - "negative.length": len(negative_sequence), - } - - -class LastItemPredictionEvalSampler( - EvalSampler, config_name="last_item_prediction_neg" -): - @classmethod - def create_from_config(cls, config, **kwargs): - return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - ) diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 8f8e2039..92df1c34 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -17,5 +17,6 @@ from .sasrec import SasRecInBatchModel, SasRecModel from .sasrec_ce import SasRecCeModel from .sasrec_freezed import SasRecFreezedModel +from .sasrec_real import SasRecRealModel from .sasrec_semantic import SasRecSemanticModel from .tiger import TigerModel diff --git a/modeling/models/sasrec_real.py b/modeling/models/sasrec_real.py index 5aca2457..3776806c 100644 --- a/modeling/models/sasrec_real.py +++ b/modeling/models/sasrec_real.py @@ -1,20 +1,24 @@ -class SasRecRealModel(SequentialTorchModel, config_name='sasrec_real'): +import torch +from models.base import SequentialTorchModel + + +class SasRecRealModel(SequentialTorchModel, config_name="sasrec_real"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation='relu', - layer_norm_eps=1e-9, - initializer_range=0.02 + self, + sequence_prefix, + positive_prefix, + negative_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, ): super().__init__( num_items=num_items, @@ -26,7 +30,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True + is_causal=True, ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -37,68 +41,76 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config['sequence_prefix'], - positive_prefix=config['positive_prefix'], - negative_prefix=config['negative_prefix'], - num_items=kwargs['num_items'], - max_sequence_length=kwargs['max_sequence_length'], - embedding_dim=config['embedding_dim'], - num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), - num_layers=config['num_layers'], - dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), - dropout=config.get('dropout', 0.0), - initializer_range=config.get('initializer_range', 0.02) + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), ) def forward(self, inputs): - all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) - all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) if self.training: # training mode - # queries - in_batch_queries_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) # positives - in_batch_positive_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + in_batch_positive_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) in_batch_positive_embeddings = self._item_embeddings( in_batch_positive_events ) # (all_batch_events, embedding_dim) positive_scores = torch.einsum( - 'bd,bd->b', in_batch_queries_embeddings, in_batch_positive_embeddings - ) # (all_batch_events) + "bd,bd->b", last_embeddings, in_batch_positive_embeddings + ) # (all_batch_events) # negatives - in_batch_negative_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + in_batch_negative_events = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) in_batch_negative_embeddings = self._item_embeddings( in_batch_negative_events - ) # (all_batch_events, embedding_dim) + ) # (all_batch_events, embedding_dim) negative_scores = torch.einsum( - 'bd,bd->b', in_batch_queries_embeddings, in_batch_negative_embeddings + "bd,bd->b", last_embeddings, in_batch_negative_embeddings ) # (all_batch_events) return { - 'positive_scores': positive_scores, - 'negative_scores': negative_scores + "positive_scores": positive_scores, + "negative_scores": negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - 'bd,nd->bn', - last_embeddings, - self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1:] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf _, indices = torch.topk( - candidate_scores, - k=20, dim=-1, largest=True + candidate_scores, k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices \ No newline at end of file + return indices diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 6e0448e7..7ba174ac 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -14,6 +14,7 @@ def __init__( item_id_to_residual, sequence_prefix, positive_prefix, + negative_prefix, num_items, max_sequence_length, embedding_dim, @@ -39,6 +40,7 @@ def __init__( ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix + self._negative_prefix = negative_prefix self._codebook_sizes = rqvae_model.codebook_sizes @@ -49,7 +51,9 @@ def __init__( self._init_weights(initializer_range) self._item_id_to_semantic_embedding = nn.Parameter( - self.get_init_item_embeddings(rqvae_model, item_id_to_semantic_id, item_id_to_residual), + self.get_init_item_embeddings( + rqvae_model, item_id_to_semantic_id, item_id_to_residual + ), requires_grad=True, ) @@ -63,6 +67,7 @@ def create_from_config(cls, config, **kwargs): item_id_to_residual=residuals, sequence_prefix=config["sequence_prefix"], positive_prefix=config["positive_prefix"], + negative_prefix=config["negative_prefix"], num_items=kwargs["num_items"], max_sequence_length=kwargs["max_sequence_length"], embedding_dim=config["embedding_dim"], @@ -85,60 +90,45 @@ def forward(self, inputs): all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + + item_embeddings = self._item_id_to_semantic_embedding.sum(dim=1) + if self.training: # training mode - all_positive_sample_events = inputs[ + # positives + in_batch_positive_events = inputs[ "{}.ids".format(self._positive_prefix) ] # (all_batch_events) - - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - - all_embeddings = torch.cat( - [ - torch.zeros(1, self._embedding_dim, device=DEVICE), - self._item_id_to_semantic_embedding.sum(dim=1), - torch.zeros(1, self._embedding_dim, device=DEVICE), - ], - dim=0, - ) # (num_items + 2, embedding_dim) - - # a -- all_batch_events, n -- num_items, d -- embedding_dim - all_scores = torch.einsum( - "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items + 2) - - positive_scores = torch.gather( - input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (batch_size, 1) - - sample_ids, _ = create_masked_tensor( - data=all_sample_events, lengths=all_sample_lengths - ) # (batch_size, seq_len) - - negative_scores = torch.scatter( - input=all_scores, - dim=1, - index=sample_ids, - src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (all_batch_events, num_items + 2) - negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx + in_batch_positive_embeddings = item_embeddings[ + in_batch_positive_events - 1 + ] # (all_batch_events, embedding_dim) + positive_scores = torch.einsum( + "bd,bd->b", last_embeddings, in_batch_positive_embeddings + ) # (all_batch_events) + + # negatives + in_batch_negative_events = inputs[ + "{}.ids".format(self._negative_prefix) + ] # (all_batch_events) + in_batch_negative_embeddings = item_embeddings[ + in_batch_negative_events - 1 + ] # (all_batch_events, embedding_dim) + negative_scores = torch.einsum( + "bd,bd->b", last_embeddings, in_batch_negative_embeddings + ) # (all_batch_events) return { "positive_scores": positive_scores, "negative_scores": negative_scores, - "sample_ids": sample_ids, } else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( "bd,nd->bn", last_embeddings, - self._item_id_to_semantic_embedding.sum(dim=1), + item_embeddings, ) # (batch_size, num_items) _, indices = torch.topk( @@ -153,16 +143,16 @@ def get_item_embeddings(self, events): ] # len(events), len(self._codebook_sizes) + 1, embedding_dim return embs.reshape(-1, self._embedding_dim) - def get_init_item_embeddings(self, rqvae_model, item_id_to_semantic_id, item_id_to_residual): + def get_init_item_embeddings( + self, rqvae_model, item_id_to_semantic_id, item_id_to_residual + ): codebooks = torch.stack([codebook for codebook in rqvae_model.codebooks]) result = [] for semantic_id in item_id_to_semantic_id: item_repr = [] for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append( - codebooks[codebook_idx][codebook_id] - ) + item_repr.append(codebooks[codebook_idx][codebook_id]) result.append(torch.stack(item_repr)) semantic_embeddings = torch.stack( From b0b893cceacc3f8f7ff677c956c697a5a0efa9d6 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Wed, 5 Mar 2025 21:56:09 +0300 Subject: [PATCH 139/175] add uid embeds --- configs/train/sasrec_semantic_train_config.json | 2 +- modeling/models/base.py | 12 +++++++++++- modeling/models/sasrec_semantic.py | 14 +++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 64485feb..95371221 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable", + "experiment_name": "sasrec_semantic_beauty_learnable_uid", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/base.py b/modeling/models/base.py index b4dd440a..786ef12c 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -102,7 +102,9 @@ def __init__( def get_item_embeddings(self, events): return self._item_embeddings(events) - def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): + def _apply_sequential_encoder( + self, events, lengths, add_cls_token=False, user_embeddings=None + ): embeddings = self.get_item_embeddings( events ) # (all_batch_events, embedding_dim) @@ -137,6 +139,14 @@ def _apply_sequential_encoder(self, events, lengths, add_cls_token=False): dim=1, ) + if user_embeddings is not None: + embeddings = torch.cat((user_embeddings.unsqueeze(1), embeddings), dim=1) + mask = torch.cat( + (torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), + dim=1, + ) + seq_len += 1 # TODOPK ask if this is correct + if self._is_causal: causal_mask = ( torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 7ba174ac..b8c778a2 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -16,6 +16,7 @@ def __init__( positive_prefix, negative_prefix, num_items, + num_users, max_sequence_length, embedding_dim, num_heads, @@ -42,12 +43,18 @@ def __init__( self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix + self._num_users = num_users + self._codebook_sizes = rqvae_model.codebook_sizes self._codebook_embeddings = nn.Embedding( num_embeddings=len(self._codebook_sizes) + 2, embedding_dim=embedding_dim ) # + 2 for bos token & residual + self._user_embeddings = nn.Embedding( + num_embeddings=self._num_users + 1, embedding_dim=embedding_dim + ) + self._init_weights(initializer_range) self._item_id_to_semantic_embedding = nn.Parameter( @@ -69,6 +76,7 @@ def create_from_config(cls, config, **kwargs): positive_prefix=config["positive_prefix"], negative_prefix=config["negative_prefix"], num_items=kwargs["num_items"], + num_users=kwargs["num_users"], max_sequence_length=kwargs["max_sequence_length"], embedding_dim=config["embedding_dim"], num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), @@ -86,8 +94,12 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) + user_embeddings = self._user_embeddings(inputs["user.ids"]) + embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1) + all_sample_events, + all_sample_lengths * (len(self._codebook_sizes) + 1), + user_embeddings=user_embeddings, ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_embeddings = self._get_last_embedding( From b25b001d0dc02dbea3ea62c6ebdecb6df5faf8e2 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 5 Mar 2025 23:26:36 +0300 Subject: [PATCH 140/175] fix random sampler --- modeling/dataset/negative_samplers/random.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/modeling/dataset/negative_samplers/random.py b/modeling/dataset/negative_samplers/random.py index b4f44f8c..24055217 100644 --- a/modeling/dataset/negative_samplers/random.py +++ b/modeling/dataset/negative_samplers/random.py @@ -17,15 +17,11 @@ def create_from_config(cls, _, **kwargs): def generate_negative_samples(self, sample, num_negatives): user_id = sample["user.ids"][0] - all_items = list(range(1, self._num_items + 1)) - np.random.shuffle(all_items) + negatives = set() - negatives = [] - running_idx = 0 - while len(negatives) < num_negatives and running_idx < len(all_items): - negative_idx = all_items[running_idx] - if negative_idx not in self._seen_items[user_id]: - negatives.append(negative_idx) - running_idx += 1 + while len(negatives) < num_negatives: + candidate = np.random.randint(1, self._num_items + 1) + if candidate not in self._seen_items[user_id]: + negatives.add(candidate) - return negatives + return list(negatives) From 7b6b3d0648c628aeec43d64378f1860bcdb69bf0 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 14:03:02 +0300 Subject: [PATCH 141/175] scientific full --- configs/train/sasrec_real_train_config.json | 4 +- modeling/dataset/base.py | 116 ++++++++++++++++++++ 2 files changed, 118 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json index 4301c2b3..6c53dcc4 100644 --- a/configs/train/sasrec_real_train_config.json +++ b/configs/train/sasrec_real_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_real_beauty", + "experiment_name": "sasrec_real_beauty_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 4e0aea5b..9997bc44 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -860,6 +860,122 @@ def meta(self): } +class ScientificFullDataset(ScientificDataset, config_name="scientific_full"): + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, + ): + self._train_sampler = train_sampler + self._validation_sampler = validation_sampler + self._test_sampler = test_sampler + self._num_users = num_users + self._num_items = num_items + self._max_sequence_length = max_sequence_length + + @classmethod + def create_from_config(cls, config, **kwargs): + data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + max_sequence_length = config["max_sequence_length"] + max_user_id, max_item_id = 0, 0 + train_dataset, validation_dataset, test_dataset = [], [], [] + + dataset_path = os.path.join(data_dir_path, "{}.txt".format("all_data")) + with open(dataset_path, "r") as f: + data = f.readlines() + + for sample in data: + sample = sample.strip("\n").split(" ") + user_id = int(sample[0]) + item_ids = [int(item_id) for item_id in sample[1:]] + + max_user_id = max(max_user_id, user_id) + max_item_id = max(max_item_id, max(item_ids)) + + assert len(item_ids) >= 5 + + for prefix_length in range(5, len(item_ids) + 1): + prefix = item_ids[:prefix_length] + + train_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": prefix[:-2][-max_sequence_length:], + "item.length": len(prefix[:-2][-max_sequence_length:]), + } + ) + assert len(prefix[:-2][-max_sequence_length:]) == len( + set(prefix[:-2][-max_sequence_length:]) + ) + validation_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": prefix[:-1][-max_sequence_length:], + "item.length": len(prefix[:-1][-max_sequence_length:]), + } + ) + assert len(prefix[:-1][-max_sequence_length:]) == len( + set(prefix[:-1][-max_sequence_length:]) + ) + test_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": prefix[-max_sequence_length:], + "item.length": len(prefix[-max_sequence_length:]), + } + ) + assert len(prefix[-max_sequence_length:]) == len( + set(prefix[-max_sequence_length:]) + ) + + logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Test dataset size: {}".format(len(test_dataset))) + logger.info("Max user id: {}".format(max_user_id)) + logger.info("Max item id: {}".format(max_item_id)) + logger.info("Max sequence length: {}".format(max_sequence_length)) + logger.info( + "{} dataset sparsity: {}".format( + config["name"], + (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id, + ) + ) + + train_sampler = TrainSampler.create_from_config( + config["samplers"], + dataset=train_dataset, + num_users=max_user_id, + num_items=max_item_id, + ) + validation_sampler = EvalSampler.create_from_config( + config["samplers"], + dataset=validation_dataset, + num_users=max_user_id, + num_items=max_item_id, + ) + test_sampler = EvalSampler.create_from_config( + config["samplers"], + dataset=test_dataset, + num_users=max_user_id, + num_items=max_item_id, + ) + + return cls( + train_sampler=train_sampler, + validation_sampler=validation_sampler, + test_sampler=test_sampler, + num_users=max_user_id, + num_items=max_item_id, + max_sequence_length=max_sequence_length, + ) + + class RqVaeDataset(BaseDataset, config_name="rqvae"): def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): self._train_sampler = train_sampler From 2f58166c1a1834550988112f055dc0a066d6b777 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 14:06:46 +0300 Subject: [PATCH 142/175] semantic learnable uid loo --- configs/train/sasrec_semantic_train_config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 95371221..e1debce6 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable_uid", + "experiment_name": "sasrec_semantic_beauty_learnable_uid_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, From 49dcb9624ccd22a47c3dadd2feac97e1a8991187 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 14:11:25 +0300 Subject: [PATCH 143/175] freezed sasrec semantic --- configs/train/sasrec_semantic_train_config.json | 2 +- modeling/models/sasrec_semantic.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index e1debce6..0f1f465d 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable_uid_loo", + "experiment_name": "sasrec_semantic_beauty_freezed_uid_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index b8c778a2..e6b43e85 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -61,7 +61,7 @@ def __init__( self.get_init_item_embeddings( rqvae_model, item_id_to_semantic_id, item_id_to_residual ), - requires_grad=True, + requires_grad=False, ) @classmethod From 48530024017e525dd5fc5802a8069559c65b1789 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 14:13:36 +0300 Subject: [PATCH 144/175] freezed loo --- configs/train/sasrec_semantic_train_config.json | 2 +- modeling/models/sasrec_semantic.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 0f1f465d..c3bb906f 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_freezed_uid_loo", + "experiment_name": "sasrec_semantic_beauty_freezed_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index e6b43e85..1fdd62b4 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -94,12 +94,9 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) - user_embeddings = self._user_embeddings(inputs["user.ids"]) - embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1), - user_embeddings=user_embeddings, ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_embeddings = self._get_last_embedding( From f3c3c485ffefa788618087046a46af453f8822f0 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 14:15:01 +0300 Subject: [PATCH 145/175] learnable loo --- configs/train/sasrec_semantic_train_config.json | 2 +- modeling/models/sasrec_semantic.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index c3bb906f..2adff8dd 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_freezed_loo", + "experiment_name": "sasrec_semantic_beauty_learnable_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 1fdd62b4..8c759abb 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -61,7 +61,7 @@ def __init__( self.get_init_item_embeddings( rqvae_model, item_id_to_semantic_id, item_id_to_residual ), - requires_grad=False, + requires_grad=True, ) @classmethod From 785b1e3b53b06feefb7a36e428c337c1e78fa60c Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 21:00:41 +0300 Subject: [PATCH 146/175] loo & sequence dataset fixes --- modeling/dataset/base.py | 65 +++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 9997bc44..3ab6b9d9 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -323,7 +323,7 @@ def create_from_config(cls, config, **kwargs): @classmethod def flatten_item_sequence(cls, item_ids): - min_history_length = 3 # TODOPK make this configurable + min_history_length = 3 histories = [] for i in range(min_history_length - 1, len(item_ids)): histories.append(item_ids[: i + 1]) @@ -373,14 +373,24 @@ def _create_dataset( dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): - flattened_item_ids = cls.flatten_item_sequence(item_ids) - for seq in flattened_item_ids: + if part == "train": + flattened_item_ids = cls.flatten_item_sequence(item_ids) + for seq in flattened_item_ids: + dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": seq, + "item.length": len(seq), + } + ) + else: dataset.append( { "user.ids": [user_id], "user.length": 1, - "item.ids": seq, - "item.length": len(seq), + "item.ids": item_ids, + "item.length": len(item_ids), } ) @@ -912,28 +922,29 @@ def create_from_config(cls, config, **kwargs): assert len(prefix[:-2][-max_sequence_length:]) == len( set(prefix[:-2][-max_sequence_length:]) ) - validation_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": prefix[:-1][-max_sequence_length:], - "item.length": len(prefix[:-1][-max_sequence_length:]), - } - ) - assert len(prefix[:-1][-max_sequence_length:]) == len( - set(prefix[:-1][-max_sequence_length:]) - ) - test_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": prefix[-max_sequence_length:], - "item.length": len(prefix[-max_sequence_length:]), - } - ) - assert len(prefix[-max_sequence_length:]) == len( - set(prefix[-max_sequence_length:]) - ) + + validation_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids[:-1][-max_sequence_length:], + "item.length": len(item_ids[:-1][-max_sequence_length:]), + } + ) + assert len(item_ids[:-1][-max_sequence_length:]) == len( + set(item_ids[:-1][-max_sequence_length:]) + ) + test_dataset.append( + { + "user.ids": [user_id], + "user.length": 1, + "item.ids": item_ids[-max_sequence_length:], + "item.length": len(item_ids[-max_sequence_length:]), + } + ) + assert len(item_ids[-max_sequence_length:]) == len( + set(item_ids[-max_sequence_length:]) + ) logger.info("Train dataset size: {}".format(len(train_dataset))) logger.info("Test dataset size: {}".format(len(test_dataset))) From 5fc4317e607389b2ec617f48f1a9407e00657b88 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 21:07:10 +0300 Subject: [PATCH 147/175] add validation size logging --- configs/train/sasrec_real_train_config.json | 4 ++-- configs/train/sasrec_semantic_train_config.json | 4 ++-- modeling/dataset/base.py | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json index 6c53dcc4..ae3118ca 100644 --- a/configs/train/sasrec_real_train_config.json +++ b/configs/train/sasrec_real_train_config.json @@ -78,7 +78,7 @@ }, { "type": "validation", - "on_step": 4096, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -122,7 +122,7 @@ }, { "type": "eval", - "on_step": 8192, + "on_step": 2048, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 2adff8dd..822a7f08 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -81,7 +81,7 @@ }, { "type": "validation", - "on_step": 4096, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -125,7 +125,7 @@ }, { "type": "eval", - "on_step": 8192, + "on_step": 2048, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 3ab6b9d9..b2e53b3e 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -274,6 +274,7 @@ def create_from_config(cls, config, **kwargs): max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Validation dataset size: {}".format(len(validation_dataset))) logger.info("Test dataset size: {}".format(len(test_dataset))) logger.info("Max user id: {}".format(max_user_id)) logger.info("Max item id: {}".format(max_item_id)) @@ -909,7 +910,9 @@ def create_from_config(cls, config, **kwargs): assert len(item_ids) >= 5 for prefix_length in range(5, len(item_ids) + 1): - prefix = item_ids[:prefix_length] + prefix = item_ids[ + :prefix_length + ] # TODOPK no sliding window, only incrmenting sequence from last 50 items train_dataset.append( { @@ -947,6 +950,7 @@ def create_from_config(cls, config, **kwargs): ) logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info("Validation dataset size: {}".format(len(validation_dataset))) logger.info("Test dataset size: {}".format(len(test_dataset))) logger.info("Max user id: {}".format(max_user_id)) logger.info("Max item id: {}".format(max_item_id)) From 2f484cbb33ebf80ccab4a10c6c82ebee02b2dcc3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 21:12:45 +0300 Subject: [PATCH 148/175] uid --- configs/train/sasrec_semantic_train_config.json | 2 +- modeling/models/sasrec_semantic.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 822a7f08..87b12bec 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable_loo", + "experiment_name": "sasrec_semantic_beauty_learnable_uid_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 8c759abb..b8c778a2 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -94,9 +94,12 @@ def forward(self, inputs): "{}.length".format(self._sequence_prefix) ] # (batch_size) + user_embeddings = self._user_embeddings(inputs["user.ids"]) + embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths * (len(self._codebook_sizes) + 1), + user_embeddings=user_embeddings, ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_embeddings = self._get_last_embedding( From d3d05d6cead26ffb5fa458778eb5bafbeaa6b668 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 21:27:42 +0300 Subject: [PATCH 149/175] sequence dfs --- configs/train/sasrec_real_train_config.json | 4 ++-- configs/train/sasrec_semantic_train_config.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json index ae3118ca..c43c3d42 100644 --- a/configs/train/sasrec_real_train_config.json +++ b/configs/train/sasrec_real_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_real_beauty_loo", + "experiment_name": "sasrec_real_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 87b12bec..5c3630ee 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable_uid_loo", + "experiment_name": "sasrec_semantic_beauty_learnable_uid", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, From 83f07a676e83f5607e4acd7fd400b81d8779eb51 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 21:28:02 +0300 Subject: [PATCH 150/175] use second cuda --- modeling/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 1d62369e..81fae0e4 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -11,7 +11,7 @@ from utils.registry import MetaParent if torch.cuda.is_available(): - DEVICE = torch.device("cuda") + DEVICE = torch.device("cuda:1") else: DEVICE = torch.device("cpu") From 521fe868cd5e77625a352c9680d9fd05b4233601 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 8 Mar 2025 22:19:01 +0300 Subject: [PATCH 151/175] revert cuda & remove freezed --- .../train/sasrec_freezed_train_config.json | 171 ------------------ modeling/utils/__init__.py | 2 +- 2 files changed, 1 insertion(+), 172 deletions(-) delete mode 100644 configs/train/sasrec_freezed_train_config.json diff --git a/configs/train/sasrec_freezed_train_config.json b/configs/train/sasrec_freezed_train_config.json deleted file mode 100644 index 209a5671..00000000 --- a/configs/train/sasrec_freezed_train_config.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "experiment_name": "sasrec_freezed_beauty", - "best_metric": "validation/ndcg@20", - "train_epochs_num": 100, - "dataset": { - "type": "sequence_full", - "path_to_data_dir": "../data", - "name": "Beauty", - "max_sequence_length": 50, - "samplers": { - "type": "last_item_prediction", - "negative_sampler_type": "random" - } - }, - "dataloader": { - "train": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": true, - "shuffle": true - }, - "validation": { - "type": "torch", - "batch_size": 256, - "batch_processor": { - "type": "basic" - }, - "drop_last": false, - "shuffle": false - } - }, - "model": { - "type": "sasrec_freezed", - "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", - "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", - "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", - "sequence_prefix": "item", - "positive_prefix": "labels", - "negative_prefix": "negative", - "candidate_prefix": "candidates", - "embedding_dim": 64, - "num_heads": 2, - "num_layers": 2, - "dim_feedforward": 256, - "dropout": 0.3, - "activation": "gelu", - "layer_norm_eps": 1e-9, - "initializer_range": 0.02 - }, - "optimizer": { - "type": "basic", - "optimizer": { - "type": "adam", - "lr": 0.001 - }, - "clip_grad_threshold": 5.0 - }, - "loss": { - "type": "composite", - "losses": [ - { - "type": "sasrec", - "positive_prefix": "positive_scores", - "negative_prefix": "negative_scores", - "output_prefix": "downstream_loss" - } - ], - "output_prefix": "loss" - }, - "callback": { - "type": "composite", - "callbacks": [ - { - "type": "metric", - "on_step": 1, - "loss_prefix": "loss" - }, - { - "type": "validation", - "on_step": 64, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - }, - { - "type": "eval", - "on_step": 256, - "pred_prefix": "logits", - "labels_prefix": "labels", - "metrics": { - "ndcg@5": { - "type": "ndcg", - "k": 5 - }, - "ndcg@10": { - "type": "ndcg", - "k": 10 - }, - "ndcg@20": { - "type": "ndcg", - "k": 20 - }, - "recall@5": { - "type": "recall", - "k": 5 - }, - "recall@10": { - "type": "recall", - "k": 10 - }, - "recall@20": { - "type": "recall", - "k": 20 - }, - "coverage@5": { - "type": "coverage", - "k": 5 - }, - "coverage@10": { - "type": "coverage", - "k": 10 - }, - "coverage@20": { - "type": "coverage", - "k": 20 - } - } - } - ] - } -} \ No newline at end of file diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 81fae0e4..1d62369e 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -11,7 +11,7 @@ from utils.registry import MetaParent if torch.cuda.is_available(): - DEVICE = torch.device("cuda:1") + DEVICE = torch.device("cuda") else: DEVICE = torch.device("cpu") From 3c8a9999e8a258418acabf58c0e994ff05af5967 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 12 Mar 2025 20:03:43 +0300 Subject: [PATCH 152/175] update all sasrec model (last item left TODO) --- modeling/loss/base.py | 31 ++-- modeling/models/__init__.py | 4 +- modeling/models/sasrec.py | 227 ----------------------------- modeling/models/sasrec_freezed.py | 183 ----------------------- modeling/models/sasrec_full.py | 97 ++++++++++++ modeling/models/sasrec_in_batch.py | 122 ++++++++++++++++ modeling/models/sasrec_real.py | 13 +- 7 files changed, 240 insertions(+), 437 deletions(-) delete mode 100644 modeling/models/sasrec.py delete mode 100644 modeling/models/sasrec_freezed.py create mode 100644 modeling/models/sasrec_full.py create mode 100644 modeling/models/sasrec_in_batch.py diff --git a/modeling/loss/base.py b/modeling/loss/base.py index a0f9b180..930d0eac 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -320,14 +320,8 @@ def forward(self, inputs): return loss -class SASRecRealLoss(TorchLoss, config_name='sasrec_real'): - - def __init__( - self, - positive_prefix, - negative_prefix, - output_prefix=None - ): +class SASRecRealLoss(TorchLoss, config_name="sasrec_real"): + def __init__(self, positive_prefix, negative_prefix, output_prefix=None): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -348,6 +342,7 @@ def forward(self, inputs): return loss + class SASRecLoss(TorchLoss, config_name="sasrec"): def __init__(self, positive_prefix, negative_prefix, output_prefix=None): super().__init__() @@ -414,10 +409,10 @@ def __init__( def forward(self, inputs): queries_embeddings = inputs[self._queries_prefix] # (batch_size, embedding_dim) - positive_embeddings = inputs[ + positive_ids, positive_embeddings = inputs[ self._positive_prefix ] # (batch_size, embedding_dim) - negative_embeddings = inputs[ + negative_ids, negative_embeddings = inputs[ self._negative_prefix ] # (num_negatives, embedding_dim) or (batch_size, num_negatives, embedding_dim) @@ -431,6 +426,15 @@ def forward(self, inputs): negative_scores = torch.einsum( "bd,nd->bn", queries_embeddings, negative_embeddings ) # (batch_size, num_negatives) + + all_scores = torch.cat( + [positive_scores, negative_scores], dim=1 + ) # (batch_size, 1 + num_negatives) + logits = torch.log_softmax( + all_scores, dim=1 + ) # (batch_size, 1 + num_negatives) + loss = (-logits)[:, 0] # (batch_size) + loss = loss.mean() # (1) else: assert ( negative_embeddings.dim() == 3 @@ -439,13 +443,8 @@ def forward(self, inputs): negative_scores = torch.einsum( "bd,bnd->bn", queries_embeddings, negative_embeddings ) # (batch_size, num_negatives) - all_scores = torch.cat( - [positive_scores, negative_scores], dim=1 - ) # (batch_size, 1 + num_negatives) - logits = torch.log_softmax(all_scores, dim=1) # (batch_size, 1 + num_negatives) - loss = (-logits)[:, 0] # (batch_size) - loss = loss.mean() # (1) + assert False, "ask Vladimir wtf is it " if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 92df1c34..377a703d 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -14,9 +14,9 @@ from .random import RandomModel from .rqvae import RqVaeModel from .s3rec import S3RecModel -from .sasrec import SasRecInBatchModel, SasRecModel +from .sasrec_in_batch import SasRecInBatchModel from .sasrec_ce import SasRecCeModel -from .sasrec_freezed import SasRecFreezedModel +from .sasrec_full import SasRecFullModel from .sasrec_real import SasRecRealModel from .sasrec_semantic import SasRecSemanticModel from .tiger import TigerModel diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py deleted file mode 100644 index b1d7044f..00000000 --- a/modeling/models/sasrec.py +++ /dev/null @@ -1,227 +0,0 @@ -import torch - -from models import SequentialTorchModel -from utils import create_masked_tensor - - -class SasRecModel(SequentialTorchModel, config_name="sasrec"): - def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - ): - super().__init__( - num_items=num_items, - max_sequence_length=max_sequence_length, - embedding_dim=embedding_dim, - num_heads=num_heads, - num_layers=num_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=activation, - layer_norm_eps=layer_norm_eps, - is_causal=True, - ) - self._sequence_prefix = sequence_prefix - self._positive_prefix = positive_prefix - - self._init_weights(initializer_range) - - @classmethod - def create_from_config(cls, config, **kwargs): - return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - ) - - def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - - embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - - if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - - all_embeddings = ( - self._item_embeddings.weight - ) # (num_items + 2, embedding_dim) - - # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim - all_scores = torch.einsum( - "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items + 2) - - positive_scores = torch.gather( - input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (batch_size, 1) - - sample_ids, _ = create_masked_tensor( - data=all_sample_events, lengths=all_sample_lengths - ) # (batch_size, seq_len) - - negative_scores = torch.scatter( - input=all_scores, - dim=1, - index=sample_ids, - src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (batch_size, num_items + 2) - negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx - - return { - "positive_scores": positive_scores, - "negative_scores": negative_scores, - "sample_ids": sample_ids, - } - else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - # b - batch_size, n - num_candidates, d - embedding_dim - candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight - ) # (batch_size, num_items + 2) - candidate_scores[:, 0] = -torch.inf # Padding id - candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id - - _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True - ) # (batch_size, 20) - - return indices - - -class SasRecInBatchModel(SasRecModel, config_name="sasrec_in_batch"): - def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - ): - super().__init__( - sequence_prefix=sequence_prefix, - positive_prefix=positive_prefix, - num_items=num_items, - max_sequence_length=max_sequence_length, - embedding_dim=embedding_dim, - num_heads=num_heads, - num_layers=num_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=activation, - layer_norm_eps=layer_norm_eps, - initializer_range=initializer_range, - ) - - @classmethod - def create_from_config(cls, config, **kwargs): - return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - ) - - def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - - embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - - if self.training: # training mode - # queries - in_batch_queries_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) - - # positives - in_batch_positive_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - in_batch_positive_embeddings = self._item_embeddings( - in_batch_positive_events - ) # (all_batch_events, embedding_dim) - - # negatives - batch_size = all_sample_lengths.shape[0] - random_ids = torch.randperm(in_batch_positive_events.shape[0]) - in_batch_negative_ids = in_batch_positive_events[random_ids][:batch_size] - - in_batch_negative_embeddings = self._item_embeddings( - in_batch_negative_ids - ) # (batch_size, embedding_dim) - - return { - "query_embeddings": in_batch_queries_embeddings, - "positive_embeddings": in_batch_positive_embeddings, - "negative_embeddings": in_batch_negative_embeddings, - } - else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - - # b - batch_size, n - num_candidates, d - embedding_dim - candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight - ) # (batch_size, num_items + 2) - candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf - - _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True - ) # (batch_size, 20) - - return indices diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py deleted file mode 100644 index 9f3b5b9e..00000000 --- a/modeling/models/sasrec_freezed.py +++ /dev/null @@ -1,183 +0,0 @@ -import torch - -from models import SequentialTorchModel -from models.tiger import TigerModel -from utils import DEVICE, create_masked_tensor - - -class SasRecFreezedModel(SequentialTorchModel, config_name="sasrec_freezed"): - def __init__( - self, - rqvae_model, - item_id_to_semantic_id, - item_id_to_residual, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - ): - super().__init__( - num_items=num_items, - max_sequence_length=max_sequence_length, - embedding_dim=embedding_dim, - num_heads=num_heads, - num_layers=num_layers, - dim_feedforward=dim_feedforward, - dropout=dropout, - activation=activation, - layer_norm_eps=layer_norm_eps, - is_causal=True, - ) - self._sequence_prefix = sequence_prefix - self._positive_prefix = positive_prefix - - self._init_weights(initializer_range) - - self._codebook_item_embeddings_stacked = torch.nn.Parameter( - torch.stack([codebook for codebook in rqvae_model.codebooks]), - requires_grad=False, # TODOPK compare with unfrozen codebooks - ) - self._item_id_to_semantic_id = item_id_to_semantic_id - self._item_id_to_residual = item_id_to_residual - - item_ids = torch.arange(1, len(item_id_to_semantic_id) + 1) - self._item_id_to_semantic_embedding = self.get_init_item_embeddings(item_ids) - self._item_id_to_semantic_embedding = torch.nn.Parameter( - self._item_id_to_semantic_embedding.sum(dim=1), requires_grad=False - ) # len(events), embedding_dim - - def get_init_item_embeddings(self, events): - # convert to semantic ids - semantic_ids = self._item_id_to_semantic_id[ - events - 1 - ] # len(events), len(codebook_sizes) - - result = [] - for semantic_id in semantic_ids: - item_repr = [] - for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append( - self._codebook_item_embeddings_stacked[codebook_idx][codebook_id] - ) - result.append(torch.stack(item_repr)) - - semantic_embeddings = torch.stack(result) - - # get residuals - residual = self._item_id_to_residual[events - 1] - residual = residual.unsqueeze(1) - - # get true item embeddings - item_embeddings = torch.cat( - [semantic_embeddings, residual], dim=1 - ) # len(events), len(self._codebook_sizes) + 1, embedding_dim - - return item_embeddings - - @classmethod - def create_from_config(cls, config, **kwargs): - rqvae_model, semantic_ids, residuals, item_ids = TigerModel.init_rqvae(config) - - return cls( - rqvae_model=rqvae_model, - item_id_to_semantic_id=semantic_ids, - item_id_to_residual=residuals, - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - ) - - def get_item_embeddings(self, events=None): - if events is None: - return self._item_id_to_semantic_embedding - else: - return self._item_id_to_semantic_embedding[events - 1] - - def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - - embeddings, mask = self._apply_sequential_encoder( - all_sample_events, all_sample_lengths - ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - - if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - - all_embeddings = torch.cat( - [ - torch.zeros(1, self._embedding_dim, device=DEVICE), - self._item_id_to_semantic_embedding, - torch.zeros(1, self._embedding_dim, device=DEVICE), - ], - dim=0, - ) # (num_items + 2, embedding_dim) - - # a -- all_batch_events, n -- num_items + 2, d -- embedding_dim - all_scores = torch.einsum( - "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items + 2) - - positive_scores = torch.gather( - input=all_scores, dim=1, index=all_positive_sample_events[..., None] - ) # (batch_size, 1) - - sample_ids, _ = create_masked_tensor( - data=all_sample_events, lengths=all_sample_lengths - ) # (batch_size, seq_len) - - negative_scores = torch.scatter( - input=all_scores, - dim=1, - index=sample_ids, - src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (all_batch_events, num_items + 2) - negative_scores[:, 0] = -torch.inf # Padding idx - negative_scores[:, self._num_items + 1 :] = -torch.inf # Mask idx - - return { - "positive_scores": positive_scores, - "negative_scores": negative_scores, - "sample_ids": sample_ids, - } - else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - # b - batch_size, n - num_candidates, d - embedding_dim - candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self.get_item_embeddings() - ) # (batch_size, num_items + 2) - candidate_scores[:, 0] = -torch.inf # Padding id - candidate_scores[:, self._num_items + 1 :] = -torch.inf # Mask id - - _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True - ) # (batch_size, 20) - - return indices diff --git a/modeling/models/sasrec_full.py b/modeling/models/sasrec_full.py new file mode 100644 index 00000000..4f725e8f --- /dev/null +++ b/modeling/models/sasrec_full.py @@ -0,0 +1,97 @@ +import torch +from models.base import SequentialTorchModel + + +class SasRecFullModel(SequentialTorchModel, config_name="sasrec_full"): + def __init__( + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True, + ) + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + + self._init_weights(initializer_range) + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + ) + + def forward(self, inputs): + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + # queries + in_batch_queries_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) + + all_scores = torch.einsum( + "bd,nd->bn", in_batch_queries_embeddings, self._item_embeddings.weight + ) # (all_batch_events, num_items + 2) + + # positives + in_batch_positive_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + + return {"labels.ids": in_batch_positive_events, "logits": all_scores} + else: # eval mode + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + "bd,nd->bn", last_embeddings, self._item_embeddings.weight + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf + + _, indices = torch.topk( + candidate_scores, k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices diff --git a/modeling/models/sasrec_in_batch.py b/modeling/models/sasrec_in_batch.py new file mode 100644 index 00000000..a8a40e1e --- /dev/null +++ b/modeling/models/sasrec_in_batch.py @@ -0,0 +1,122 @@ +import torch +from models.base import SequentialTorchModel + + +class SasRecInBatchModel(SequentialTorchModel, config_name="sasrec_in_batch"): + def __init__( + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + num_in_batch_negatives=-1, + dropout=0.0, + activation="relu", + layer_norm_eps=1e-9, + initializer_range=0.02, + ): + super().__init__( + num_items=num_items, + max_sequence_length=max_sequence_length, + embedding_dim=embedding_dim, + num_heads=num_heads, + num_layers=num_layers, + dim_feedforward=dim_feedforward, + dropout=dropout, + activation=activation, + layer_norm_eps=layer_norm_eps, + is_causal=True, + ) + self._sequence_prefix = sequence_prefix + self._positive_prefix = positive_prefix + self._num_in_batch_negatives = num_in_batch_negatives + self._init_weights(initializer_range) + + @classmethod + def create_from_config(cls, config, **kwargs): + return cls( + sequence_prefix=config["sequence_prefix"], + positive_prefix=config["positive_prefix"], + num_items=kwargs["num_items"], + max_sequence_length=kwargs["max_sequence_length"], + embedding_dim=config["embedding_dim"], + num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), + num_layers=config["num_layers"], + num_in_batch_negatives=config.get("num_in_batch_negatives", -1), + dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), + dropout=config.get("dropout", 0.0), + initializer_range=config.get("initializer_range", 0.02), + ) + + def forward(self, inputs): + all_sample_events = inputs[ + "{}.ids".format(self._sequence_prefix) + ] # (all_batch_events) + all_sample_lengths = inputs[ + "{}.length".format(self._sequence_prefix) + ] # (batch_size) + + embeddings, mask = self._apply_sequential_encoder( + all_sample_events, all_sample_lengths + ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) + + if self.training: # training mode + # queries + in_batch_queries_embeddings = embeddings[ + mask + ] # (all_batch_events, embedding_dim) + + # positives + in_batch_positive_events = inputs[ + "{}.ids".format(self._positive_prefix) + ] # (all_batch_events) + in_batch_positive_embeddings = self._item_embeddings( + in_batch_positive_events + ) # (all_batch_events, embedding_dim) + + # negatives + num_in_batch_negatives = self._num_in_batch_negatives + batch_size = all_sample_lengths.shape[0] + random_ids = torch.randperm(in_batch_positive_events.shape[0]) + if num_in_batch_negatives == -1: + num_in_batch_negatives = batch_size + in_batch_negative_ids = in_batch_positive_events[random_ids][ + :num_in_batch_negatives + ] + + in_batch_negative_embeddings = self._item_embeddings( + in_batch_negative_ids + ) # (num_in_batch_negatives, embedding_dim) + + return { + "query_embeddings": in_batch_queries_embeddings, + "positive_embeddings": ( + in_batch_positive_events, + in_batch_positive_embeddings, + ), + "negative_embeddings": ( + in_batch_negative_ids, + in_batch_negative_embeddings, + ), + } + else: # eval mode + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + + # b - batch_size, n - num_candidates, d - embedding_dim + candidate_scores = torch.einsum( + "bd,nd->bn", last_embeddings, self._item_embeddings.weight + ) # (batch_size, num_items + 2) + candidate_scores[:, 0] = -torch.inf + candidate_scores[:, self._num_items + 1 :] = -torch.inf + + _, indices = torch.topk( + candidate_scores, k=20, dim=-1, largest=True + ) # (batch_size, 20) + + return indices diff --git a/modeling/models/sasrec_real.py b/modeling/models/sasrec_real.py index 3776806c..d87743f4 100644 --- a/modeling/models/sasrec_real.py +++ b/modeling/models/sasrec_real.py @@ -3,7 +3,6 @@ class SasRecRealModel(SequentialTorchModel, config_name="sasrec_real"): - def __init__( self, sequence_prefix, @@ -66,11 +65,11 @@ def forward(self, inputs): all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - if self.training: # training mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + if self.training: # training mode # positives in_batch_positive_events = inputs[ "{}.ids".format(self._positive_prefix) @@ -98,10 +97,6 @@ def forward(self, inputs): "negative_scores": negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( "bd,nd->bn", last_embeddings, self._item_embeddings.weight From d0216763cfedcdec42037e6e99cf503e66442027 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 12 Mar 2025 20:08:24 +0300 Subject: [PATCH 153/175] adapt full & in batch to last item --- modeling/models/sasrec_full.py | 15 +++++---------- modeling/models/sasrec_in_batch.py | 15 +++++---------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/modeling/models/sasrec_full.py b/modeling/models/sasrec_full.py index 4f725e8f..5d484319 100644 --- a/modeling/models/sasrec_full.py +++ b/modeling/models/sasrec_full.py @@ -62,14 +62,13 @@ def forward(self, inputs): all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - if self.training: # training mode - # queries - in_batch_queries_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + if self.training: # training mode all_scores = torch.einsum( - "bd,nd->bn", in_batch_queries_embeddings, self._item_embeddings.weight + "bd,nd->bn", last_embeddings, self._item_embeddings.weight ) # (all_batch_events, num_items + 2) # positives @@ -79,10 +78,6 @@ def forward(self, inputs): return {"labels.ids": in_batch_positive_events, "logits": all_scores} else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( "bd,nd->bn", last_embeddings, self._item_embeddings.weight diff --git a/modeling/models/sasrec_in_batch.py b/modeling/models/sasrec_in_batch.py index a8a40e1e..2d566fee 100644 --- a/modeling/models/sasrec_in_batch.py +++ b/modeling/models/sasrec_in_batch.py @@ -64,12 +64,11 @@ def forward(self, inputs): all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - if self.training: # training mode - # queries - in_batch_queries_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + last_embeddings = self._get_last_embedding( + embeddings, mask + ) # (batch_size, embedding_dim) + if self.training: # training mode # positives in_batch_positive_events = inputs[ "{}.ids".format(self._positive_prefix) @@ -93,7 +92,7 @@ def forward(self, inputs): ) # (num_in_batch_negatives, embedding_dim) return { - "query_embeddings": in_batch_queries_embeddings, + "query_embeddings": last_embeddings, "positive_embeddings": ( in_batch_positive_events, in_batch_positive_embeddings, @@ -104,10 +103,6 @@ def forward(self, inputs): ), } else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) - # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( "bd,nd->bn", last_embeddings, self._item_embeddings.weight From 9182a554c68e70cf49a9c5b4f740d7b98a7aa74e Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 12 Mar 2025 20:44:01 +0300 Subject: [PATCH 154/175] fix configs for sasrec's last item --- ...fig.json => sasrec_full_train_config.json} | 14 +++--- .../train/sasrec_in_batch_train_config.json | 43 ++++++++++++++----- modeling/models/sasrec_in_batch.py | 4 +- 3 files changed, 43 insertions(+), 18 deletions(-) rename configs/train/{sasrec_train_config.json => sasrec_full_train_config.json} (93%) diff --git a/configs/train/sasrec_train_config.json b/configs/train/sasrec_full_train_config.json similarity index 93% rename from configs/train/sasrec_train_config.json rename to configs/train/sasrec_full_train_config.json index b0c617c4..bbff4ee5 100644 --- a/configs/train/sasrec_train_config.json +++ b/configs/train/sasrec_full_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_beauty", + "experiment_name": "sasrec_full_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { @@ -33,7 +33,7 @@ } }, "model": { - "type": "sasrec", + "type": "sasrec_full", "sequence_prefix": "item", "positive_prefix": "labels", "negative_prefix": "negative", @@ -59,9 +59,9 @@ "type": "composite", "losses": [ { - "type": "sasrec", - "positive_prefix": "positive_scores", - "negative_prefix": "negative_scores", + "type": "ce", + "predictions_prefix": "logits", + "labels_prefix": "labels", "output_prefix": "downstream_loss" } ], @@ -77,7 +77,7 @@ }, { "type": "validation", - "on_step": 4096, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -121,7 +121,7 @@ }, { "type": "eval", - "on_step": 8192, + "on_step": 2048, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { diff --git a/configs/train/sasrec_in_batch_train_config.json b/configs/train/sasrec_in_batch_train_config.json index 8bde73f7..090a64d9 100644 --- a/configs/train/sasrec_in_batch_train_config.json +++ b/configs/train/sasrec_in_batch_train_config.json @@ -1,14 +1,14 @@ { - "experiment_name": "sasrec_in_batch_test", - "best_metric": "eval/ndcg@20", + "experiment_name": "sasrec_in_batch_beauty", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, "dataset": { - "type": "sequence", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, "samplers": { - "num_negatives_val": 100, - "type": "next_item_prediction", + "type": "last_item_prediction", "negative_sampler_type": "random" } }, @@ -35,7 +35,7 @@ "model": { "type": "sasrec_in_batch", "sequence_prefix": "item", - "positive_prefix": "positive", + "positive_prefix": "labels", "negative_prefix": "negative", "candidate_prefix": "candidates", "embedding_dim": 64, @@ -44,7 +44,6 @@ "dim_feedforward": 256, "dropout": 0.3, "activation": "gelu", - "use_ce": true, "layer_norm_eps": 1e-9, "initializer_range": 0.02 }, @@ -79,7 +78,7 @@ }, { "type": "validation", - "on_step": 64, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -106,12 +105,24 @@ "recall@20": { "type": "recall", "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 } } }, { "type": "eval", - "on_step": 256, + "on_step": 2048, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -138,9 +149,21 @@ "recall@20": { "type": "recall", "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 } } } ] } -} +} \ No newline at end of file diff --git a/modeling/models/sasrec_in_batch.py b/modeling/models/sasrec_in_batch.py index 2d566fee..b755d4e2 100644 --- a/modeling/models/sasrec_in_batch.py +++ b/modeling/models/sasrec_in_batch.py @@ -83,7 +83,9 @@ def forward(self, inputs): random_ids = torch.randperm(in_batch_positive_events.shape[0]) if num_in_batch_negatives == -1: num_in_batch_negatives = batch_size - in_batch_negative_ids = in_batch_positive_events[random_ids][ + in_batch_negative_ids = in_batch_positive_events[ + random_ids + ][ # TODOPK as khow many negatives here (currently whole batch) :num_in_batch_negatives ] From 98b45d5cc2b4b9b574e0223532fbf8a9108673e9 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 12 Mar 2025 20:47:13 +0300 Subject: [PATCH 155/175] rename sasrec semantic config --- configs/train/sasrec_semantic_train_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 5c3630ee..33586d92 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,5 +1,5 @@ { - "experiment_name": "sasrec_semantic_beauty_learnable_uid", + "experiment_name": "sasrec_semantic_learnable_uid_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { From 63f20ea255c3205c840a7936727476bd9149a998 Mon Sep 17 00:00:00 2001 From: peterochek Date: Wed, 12 Mar 2025 21:37:56 +0300 Subject: [PATCH 156/175] loo configs --- configs/train/sasrec_full_train_config.json | 4 ++-- configs/train/sasrec_in_batch_train_config.json | 4 ++-- configs/train/sasrec_real_train_config.json | 4 ++-- configs/train/sasrec_semantic_train_config.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/train/sasrec_full_train_config.json b/configs/train/sasrec_full_train_config.json index bbff4ee5..d870e9c7 100644 --- a/configs/train/sasrec_full_train_config.json +++ b/configs/train/sasrec_full_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_full_beauty", + "experiment_name": "sasrec_full_beauty_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_in_batch_train_config.json b/configs/train/sasrec_in_batch_train_config.json index 090a64d9..bd985991 100644 --- a/configs/train/sasrec_in_batch_train_config.json +++ b/configs/train/sasrec_in_batch_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_in_batch_beauty", + "experiment_name": "sasrec_in_batch_beauty_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json index c43c3d42..ae3118ca 100644 --- a/configs/train/sasrec_real_train_config.json +++ b/configs/train/sasrec_real_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_real_beauty", + "experiment_name": "sasrec_real_beauty_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 33586d92..5a7d97e7 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_semantic_learnable_uid_beauty", + "experiment_name": "sasrec_semantic_learnable_uid_beauty_loo", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "sequence_full", + "type": "scientific_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, From 37a8dbca75ca9bc2ffa1db17d120d1742bfe084c Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Mar 2025 13:09:06 +0300 Subject: [PATCH 157/175] add loss fix (1e-9) --- modeling/loss/base.py | 4 ++-- modeling/models/sasrec_in_batch.py | 2 +- modeling/models/sasrec_semantic.py | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 930d0eac..e5a6ce5c 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -332,8 +332,8 @@ def forward(self, inputs): negative_scores = inputs[self._negative_prefix] # (x) assert positive_scores.shape[0] == negative_scores.shape[0] - positive_loss = torch.log(nn.functional.sigmoid(positive_scores)) # (x) - negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores)) # (x) + positive_loss = torch.log(nn.functional.sigmoid(positive_scores) + 1e-9) # (x) + negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores) + 1e-9) # (x) loss = positive_loss + negative_loss # (x) loss = -loss.mean() # (1) diff --git a/modeling/models/sasrec_in_batch.py b/modeling/models/sasrec_in_batch.py index b755d4e2..e9cfb930 100644 --- a/modeling/models/sasrec_in_batch.py +++ b/modeling/models/sasrec_in_batch.py @@ -85,7 +85,7 @@ def forward(self, inputs): num_in_batch_negatives = batch_size in_batch_negative_ids = in_batch_positive_events[ random_ids - ][ # TODOPK as khow many negatives here (currently whole batch) + ][ :num_in_batch_negatives ] diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index b8c778a2..3632b2b8 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -120,6 +120,8 @@ def forward(self, inputs): "bd,bd->b", last_embeddings, in_batch_positive_embeddings ) # (all_batch_events) + # TODOPK normalize in all models embeddings for stability + # negatives in_batch_negative_events = inputs[ "{}.ids".format(self._negative_prefix) From ecb2113af838517f6d0879581d7da54143d2ec33 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sat, 15 Mar 2025 14:19:27 +0300 Subject: [PATCH 158/175] sequence on fixed sasrec real --- configs/train/sasrec_full_train_config.json | 4 ++-- configs/train/sasrec_in_batch_train_config.json | 4 ++-- configs/train/sasrec_real_train_config.json | 4 ++-- configs/train/sasrec_semantic_train_config.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/configs/train/sasrec_full_train_config.json b/configs/train/sasrec_full_train_config.json index d870e9c7..bbff4ee5 100644 --- a/configs/train/sasrec_full_train_config.json +++ b/configs/train/sasrec_full_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_full_beauty_loo", + "experiment_name": "sasrec_full_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_in_batch_train_config.json b/configs/train/sasrec_in_batch_train_config.json index bd985991..090a64d9 100644 --- a/configs/train/sasrec_in_batch_train_config.json +++ b/configs/train/sasrec_in_batch_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_in_batch_beauty_loo", + "experiment_name": "sasrec_in_batch_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_real_train_config.json b/configs/train/sasrec_real_train_config.json index ae3118ca..c43c3d42 100644 --- a/configs/train/sasrec_real_train_config.json +++ b/configs/train/sasrec_real_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_real_beauty_loo", + "experiment_name": "sasrec_real_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 5a7d97e7..33586d92 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -1,9 +1,9 @@ { - "experiment_name": "sasrec_semantic_learnable_uid_beauty_loo", + "experiment_name": "sasrec_semantic_learnable_uid_beauty", "best_metric": "validation/ndcg@20", "train_epochs_num": 100, "dataset": { - "type": "scientific_full", + "type": "sequence_full", "path_to_data_dir": "../data", "name": "Beauty", "max_sequence_length": 50, From c429951c0406af83e18cc0d82f07a16135676da1 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Mar 2025 17:51:17 +0300 Subject: [PATCH 159/175] correct sasrec (use codebook only) --- modeling/models/sasrec_semantic.py | 60 +++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 3632b2b8..74654eea 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -57,12 +57,13 @@ def __init__( self._init_weights(initializer_range) - self._item_id_to_semantic_embedding = nn.Parameter( - self.get_init_item_embeddings( - rqvae_model, item_id_to_semantic_id, item_id_to_residual - ), + self._item_id_to_semantic_id = item_id_to_semantic_id # len(num_items), len(self._codebook_sizes) + self._item_id_to_residual = item_id_to_residual # len(num_items), embedding_dim + + self._codebooks = nn.Parameter( + torch.stack([codebook for codebook in rqvae_model.codebooks]), requires_grad=True, - ) + ) # len(self._codebook_sizes), codebook_size, embedding_dim @classmethod def create_from_config(cls, config, **kwargs): @@ -106,16 +107,14 @@ def forward(self, inputs): embeddings, mask ) # (batch_size, embedding_dim) - item_embeddings = self._item_id_to_semantic_embedding.sum(dim=1) - if self.training: # training mode # positives in_batch_positive_events = inputs[ "{}.ids".format(self._positive_prefix) ] # (all_batch_events) - in_batch_positive_embeddings = item_embeddings[ + in_batch_positive_embeddings = self.get_embeddings( in_batch_positive_events - 1 - ] # (all_batch_events, embedding_dim) + ).sum(dim=1) # (all_batch_events, embedding_dim) positive_scores = torch.einsum( "bd,bd->b", last_embeddings, in_batch_positive_embeddings ) # (all_batch_events) @@ -126,9 +125,9 @@ def forward(self, inputs): in_batch_negative_events = inputs[ "{}.ids".format(self._negative_prefix) ] # (all_batch_events) - in_batch_negative_embeddings = item_embeddings[ + in_batch_negative_embeddings = self.get_embeddings( in_batch_negative_events - 1 - ] # (all_batch_events, embedding_dim) + ).sum(dim=1) # (all_batch_events, embedding_dim) negative_scores = torch.einsum( "bd,bd->b", last_embeddings, in_batch_negative_embeddings ) # (all_batch_events) @@ -138,6 +137,9 @@ def forward(self, inputs): "negative_scores": negative_scores, } else: # eval mode + item_embeddings = self.get_embeddings(torch.arange(self._num_items)).sum( + dim=1 + ) # num_items, embedding_dim # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( "bd,nd->bn", @@ -152,28 +154,26 @@ def forward(self, inputs): return indices + 1 # tensors are 0 indexed def get_item_embeddings(self, events): - embs = self._item_id_to_semantic_embedding[ - events - 1 - ] # len(events), len(self._codebook_sizes) + 1, embedding_dim - return embs.reshape(-1, self._embedding_dim) - - def get_init_item_embeddings( - self, rqvae_model, item_id_to_semantic_id, item_id_to_residual - ): - codebooks = torch.stack([codebook for codebook in rqvae_model.codebooks]) + item_embeddings = self.get_embeddings( + events + ) # len(events), len(self._codebook_sizes) + 1, embedding_dim + return item_embeddings.reshape(-1, self._embedding_dim) - result = [] - for semantic_id in item_id_to_semantic_id: - item_repr = [] - for codebook_idx, codebook_id in enumerate(semantic_id): - item_repr.append(codebooks[codebook_idx][codebook_id]) - result.append(torch.stack(item_repr)) + def get_embeddings(self, events): + semantic_ids = self._item_id_to_semantic_id[ + events - 1 + ] # len(events), len(self._codebook_sizes) + residuals = self._item_id_to_residual[events - 1] # len(events), embedding_dim semantic_embeddings = torch.stack( - result - ) # len(events), len(codebook_sizes), embedding_dim - - residual = item_id_to_residual.unsqueeze(1) + [ + codebook[semantic_ids[:, i]] + for i, codebook in enumerate(self._codebooks) + ], + dim=1, + ) # len(events), len(self._codebook_sizes), embedding_dim + + residual = residuals.unsqueeze(1) # get true item embeddings item_embeddings = torch.cat( From 0eb0b13709d35a38d78c9626d232dfda32b58fd0 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Mar 2025 17:51:42 +0300 Subject: [PATCH 160/175] more frequent checks --- configs/train/sasrec_semantic_train_config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 33586d92..735cd9ac 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -81,7 +81,7 @@ }, { "type": "validation", - "on_step": 1024, + "on_step": 128, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -125,7 +125,7 @@ }, { "type": "eval", - "on_step": 2048, + "on_step": 512, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { From 1ebb5b9c4804e42745059ef562d010326f06a326 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Mar 2025 18:17:34 +0300 Subject: [PATCH 161/175] fix event id indexing --- modeling/models/sasrec_semantic.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 74654eea..c1089e23 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -57,8 +57,10 @@ def __init__( self._init_weights(initializer_range) - self._item_id_to_semantic_id = item_id_to_semantic_id # len(num_items), len(self._codebook_sizes) - self._item_id_to_residual = item_id_to_residual # len(num_items), embedding_dim + self._item_id_to_semantic_id = ( + item_id_to_semantic_id # len(num_items), len(self._codebook_sizes) + ) + self._item_id_to_residual = item_id_to_residual # len(num_items), embedding_dim self._codebooks = nn.Parameter( torch.stack([codebook for codebook in rqvae_model.codebooks]), @@ -155,15 +157,15 @@ def forward(self, inputs): def get_item_embeddings(self, events): item_embeddings = self.get_embeddings( - events + events - 1 ) # len(events), len(self._codebook_sizes) + 1, embedding_dim return item_embeddings.reshape(-1, self._embedding_dim) - def get_embeddings(self, events): + def get_embeddings(self, events): # events = 0 ... num_items - 1 semantic_ids = self._item_id_to_semantic_id[ - events - 1 + events ] # len(events), len(self._codebook_sizes) - residuals = self._item_id_to_residual[events - 1] # len(events), embedding_dim + residuals = self._item_id_to_residual[events] # len(events), embedding_dim semantic_embeddings = torch.stack( [ From 162745b61e0f11de9327efbbd47cd81201c007b7 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 23 Mar 2025 18:18:00 +0300 Subject: [PATCH 162/175] faster semantic train --- configs/train/sasrec_semantic_train_config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/train/sasrec_semantic_train_config.json b/configs/train/sasrec_semantic_train_config.json index 735cd9ac..f37c6fc5 100644 --- a/configs/train/sasrec_semantic_train_config.json +++ b/configs/train/sasrec_semantic_train_config.json @@ -81,7 +81,7 @@ }, { "type": "validation", - "on_step": 128, + "on_step": 512, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { @@ -125,7 +125,7 @@ }, { "type": "eval", - "on_step": 512, + "on_step": 1024, "pred_prefix": "logits", "labels_prefix": "labels", "metrics": { From 38c6fd394bb17d219477feb8dd82e9d76dee54a6 Mon Sep 17 00:00:00 2001 From: Peter Korolev Date: Sun, 6 Apr 2025 18:46:06 +0300 Subject: [PATCH 163/175] add uv deps --- .python-version | 1 + pyproject.toml | 30 ++ uv.lock | 952 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 983 insertions(+) create mode 100644 .python-version create mode 100644 pyproject.toml create mode 100644 uv.lock diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..24ee5b1b --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..77289265 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[project] +name = "irec" +version = "0.1.0" +description = "IRec framework" +readme = "README.md" +requires-python = ">=3.13" +dependencies = [ + "faiss-cpu>=1.10.0", + "pandas>=2.2.3", + "scipy>=1.15.2", + "seaborn>=0.13.2", + "tensorboard>=2.19.0", + "torch>=2.6.0", + "transformers>=4.51.0", +] + +[tool.uv.sources] +torch = [ + { index = "pytorch-cu124" }, +] + +[[tool.uv.index]] +name = "pytorch-cu124" +url = "https://download.pytorch.org/whl/cu124" +explicit = true + +[dependency-groups] +dev = [ + "ruff>=0.11.4", +] diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..24c7adf0 --- /dev/null +++ b/uv.lock @@ -0,0 +1,952 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "absl-py" +version = "2.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f0/e6342091061ed3a46aadc116b13edd7bb5249c3ab1b3ef07f24b0c248fc3/absl_py-2.2.2.tar.gz", hash = "sha256:bf25b2c2eed013ca456918c453d687eab4e8309fba81ee2f4c1a6aa2494175eb", size = 119982 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl", hash = "sha256:e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092", size = 135565 }, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "contourpy" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "faiss-cpu" +version = "1.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/1b/6fe5dbe5be0240cfd82b52bd7c186655c578d935c0ce2e713c100e6f8cce/faiss_cpu-1.10.0.tar.gz", hash = "sha256:5bdca555f24bc036f4d67f8a5a4d6cc91b8d2126d4e78de496ca23ccd46e479d", size = 69159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/25/23239a83142faa319c4f8c025e25fec6cccc7418995eba3515218a57a45b/faiss_cpu-1.10.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:cb8473d69c3964c1bf3f8eb3e04287bb3275f536e6d9635ef32242b5f506b45d", size = 7720240 }, + { url = "https://files.pythonhosted.org/packages/18/f1/0e979277831af337739dbacf386d8a359a05eef9642df23d36e6c7d1b1a9/faiss_cpu-1.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82ca5098de694e7b8495c1a8770e2c08df6e834922546dad0ae1284ff519ced6", size = 3239224 }, + { url = "https://files.pythonhosted.org/packages/bd/fa/c2ad85b017a5754f6cdb09c179f8c4f4198d2a264046a8daa7a4d080521f/faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:035e4d797e2db7fc0d0c90531d4a655d089ad5d1382b7a49358c1f2307b3a309", size = 3671236 }, + { url = "https://files.pythonhosted.org/packages/4f/9b/759962f2c34800058f6a76457df3b0ab93b24f383650ea1ef0231acd322c/faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e02af3696a6b9e1f9072e502f48095a305de2163c42ceb1f6f6b1db9e7ffe574", size = 30663948 }, + { url = "https://files.pythonhosted.org/packages/2c/9a/6c496e0189897761978653177386452d62f4060579413d109bff05f458f2/faiss_cpu-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac", size = 13687212 }, +] + +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, +] + +[[package]] +name = "fonttools" +version = "4.57.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 }, + { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 }, + { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 }, + { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 }, + { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 }, + { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 }, + { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 }, + { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 }, + { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 }, +] + +[[package]] +name = "fsspec" +version = "2025.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/d8/8425e6ba5fcec61a1d16e41b1b71d2bf9344f1fe48012c2b48b9620feae5/fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6", size = 299281 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435 }, +] + +[[package]] +name = "grpcio" +version = "1.71.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/95/aa11fc09a85d91fbc7dd405dcb2a1e0256989d67bf89fa65ae24b3ba105a/grpcio-1.71.0.tar.gz", hash = "sha256:2b85f7820475ad3edec209d3d89a7909ada16caab05d3f2e08a7e8ae3200a55c", size = 12549828 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/dd/b00cbb45400d06b26126dcfdbdb34bb6c4f28c3ebbd7aea8228679103ef6/grpcio-1.71.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:cebc1b34ba40a312ab480ccdb396ff3c529377a2fce72c45a741f7215bfe8379", size = 5184138 }, + { url = "https://files.pythonhosted.org/packages/ed/0a/4651215983d590ef53aac40ba0e29dda941a02b097892c44fa3357e706e5/grpcio-1.71.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:85da336e3649a3d2171e82f696b5cad2c6231fdd5bad52616476235681bee5b3", size = 11310747 }, + { url = "https://files.pythonhosted.org/packages/57/a3/149615b247f321e13f60aa512d3509d4215173bdb982c9098d78484de216/grpcio-1.71.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f9a412f55bb6e8f3bb000e020dbc1e709627dcb3a56f6431fa7076b4c1aab0db", size = 5653991 }, + { url = "https://files.pythonhosted.org/packages/ca/56/29432a3e8d951b5e4e520a40cd93bebaa824a14033ea8e65b0ece1da6167/grpcio-1.71.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47be9584729534660416f6d2a3108aaeac1122f6b5bdbf9fd823e11fe6fbaa29", size = 6312781 }, + { url = "https://files.pythonhosted.org/packages/a3/f8/286e81a62964ceb6ac10b10925261d4871a762d2a763fbf354115f9afc98/grpcio-1.71.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9c80ac6091c916db81131d50926a93ab162a7e97e4428ffc186b6e80d6dda4", size = 5910479 }, + { url = "https://files.pythonhosted.org/packages/35/67/d1febb49ec0f599b9e6d4d0d44c2d4afdbed9c3e80deb7587ec788fcf252/grpcio-1.71.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:789d5e2a3a15419374b7b45cd680b1e83bbc1e52b9086e49308e2c0b5bbae6e3", size = 6013262 }, + { url = "https://files.pythonhosted.org/packages/a1/04/f9ceda11755f0104a075ad7163fc0d96e2e3a9fe25ef38adfc74c5790daf/grpcio-1.71.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:1be857615e26a86d7363e8a163fade914595c81fec962b3d514a4b1e8760467b", size = 6643356 }, + { url = "https://files.pythonhosted.org/packages/fb/ce/236dbc3dc77cf9a9242adcf1f62538734ad64727fabf39e1346ad4bd5c75/grpcio-1.71.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a76d39b5fafd79ed604c4be0a869ec3581a172a707e2a8d7a4858cb05a5a7637", size = 6186564 }, + { url = "https://files.pythonhosted.org/packages/10/fd/b3348fce9dd4280e221f513dd54024e765b21c348bc475516672da4218e9/grpcio-1.71.0-cp313-cp313-win32.whl", hash = "sha256:74258dce215cb1995083daa17b379a1a5a87d275387b7ffe137f1d5131e2cfbb", size = 3601890 }, + { url = "https://files.pythonhosted.org/packages/be/f8/db5d5f3fc7e296166286c2a397836b8b042f7ad1e11028d82b061701f0f7/grpcio-1.71.0-cp313-cp313-win_amd64.whl", hash = "sha256:22c3bc8d488c039a199f7a003a38cb7635db6656fa96437a8accde8322ce2366", size = 4273308 }, +] + +[[package]] +name = "huggingface-hub" +version = "0.30.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/be/049689a7197630e75c4bb53021cb209a56617c9bf39b3a0950650d1f96e1/huggingface_hub-0.30.1.tar.gz", hash = "sha256:f379e8b8d0791295602538856638460ae3cf679c7f304201eb80fb98c771950e", size = 400784 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/e3/2232d0e726d4d6ea69643b9593d97d0e7e6ea69c2fe9ed5de34d476c1c47/huggingface_hub-0.30.1-py3-none-any.whl", hash = "sha256:0f6aa5ec5a4e68e5b9e45d556b4e5ea180c58f5a5ffa734e7f38c9d573028959", size = 481170 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "irec" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "faiss-cpu" }, + { name = "pandas" }, + { name = "scipy" }, + { name = "seaborn" }, + { name = "tensorboard" }, + { name = "torch" }, + { name = "transformers" }, +] + +[package.dev-dependencies] +dev = [ + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "faiss-cpu", specifier = ">=1.10.0" }, + { name = "pandas", specifier = ">=2.2.3" }, + { name = "scipy", specifier = ">=1.15.2" }, + { name = "seaborn", specifier = ">=0.13.2" }, + { name = "tensorboard", specifier = ">=2.19.0" }, + { name = "torch", specifier = ">=2.6.0", index = "https://download.pytorch.org/whl/cu124" }, + { name = "transformers", specifier = ">=4.51.0" }, +] + +[package.metadata.requires-dev] +dev = [{ name = "ruff", specifier = ">=0.11.4" }] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, +] + +[[package]] +name = "markdown" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/28/3af612670f82f4c056911fbbbb42760255801b3068c48de792d354ff4472/markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", size = 357086 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803", size = 106349 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, +] + +[[package]] +name = "numpy" +version = "2.2.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, + { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, + { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, + { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, + { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, + { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, + { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, + { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, + { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, + { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, + { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, + { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, + { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, + { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, + { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, + { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, + { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, + { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, + { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, + { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, +] + +[[package]] +name = "nvidia-cublas-cu12" +version = "12.4.5.8" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/71/1c91302526c45ab494c23f61c7a84aa568b8c1f9d196efa5993957faf906/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b", size = 363438805 }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/42/f4f60238e8194a3106d06a058d494b18e006c10bb2b915655bd9f6ea4cb1/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb", size = 13813957 }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/14/91ae57cd4db3f9ef7aa99f4019cfa8d54cb4caa7e00975df6467e9725a9f/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338", size = 24640306 }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/27/1795d86fe88ef397885f2e580ac37628ed058a92ed2c39dc8eac3adf0619/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5", size = 883737 }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.1.0.70" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/fd/713452cd72343f682b1c7b9321e23829f00b842ceaedcda96e742ea0b0b3/nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f", size = 664752741 }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.2.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/94/3266821f65b92b3138631e9c8e7fe1fb513804ac934485a8d05776e1dd43/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9", size = 211459117 }, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.5.147" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/6d/44ad094874c6f1b9c654f8ed939590bdc408349f137f9b98a3a23ccec411/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b", size = 56305206 }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.6.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cusparse-cu12" }, + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/e1/5b9089a4b2a4790dfdea8b3a006052cfecff58139d5a4e34cb1a51df8d6f/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260", size = 127936057 }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.3.1.170" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/f7/97a9ea26ed4bbbfc2d470994b8b4f338ef663be97b8f677519ac195e113d/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1", size = 207454763 }, +] + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/a8/bcbb63b53a4b1234feeafb65544ee55495e1bb37ec31b999b963cbccfd1d/nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:df2c24502fd76ebafe7457dbc4716b2fec071aabaed4fb7691a201cde03704d9", size = 150057751 }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.21.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/99/12cd266d6233f47d00daf3a72739872bdc10267d0383508b0b9c84a18bb6/nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0", size = 188654414 }, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 }, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.4.127" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "pillow" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +] + +[[package]] +name = "protobuf" +version = "6.30.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/8c/cf2ac658216eebe49eaedf1e06bc06cbf6a143469236294a1171a51357c3/protobuf-6.30.2.tar.gz", hash = "sha256:35c859ae076d8c56054c25b59e5e59638d86545ed6e2b6efac6be0b6ea3ba048", size = 429315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/85/cd53abe6a6cbf2e0029243d6ae5fb4335da2996f6c177bb2ce685068e43d/protobuf-6.30.2-cp310-abi3-win32.whl", hash = "sha256:b12ef7df7b9329886e66404bef5e9ce6a26b54069d7f7436a0853ccdeb91c103", size = 419148 }, + { url = "https://files.pythonhosted.org/packages/97/e9/7b9f1b259d509aef2b833c29a1f3c39185e2bf21c9c1be1cd11c22cb2149/protobuf-6.30.2-cp310-abi3-win_amd64.whl", hash = "sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9", size = 431003 }, + { url = "https://files.pythonhosted.org/packages/8e/66/7f3b121f59097c93267e7f497f10e52ced7161b38295137a12a266b6c149/protobuf-6.30.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:0eb523c550a66a09a0c20f86dd554afbf4d32b02af34ae53d93268c1f73bc65b", size = 417579 }, + { url = "https://files.pythonhosted.org/packages/d0/89/bbb1bff09600e662ad5b384420ad92de61cab2ed0f12ace1fd081fd4c295/protobuf-6.30.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:50f32cc9fd9cb09c783ebc275611b4f19dfdfb68d1ee55d2f0c7fa040df96815", size = 317319 }, + { url = "https://files.pythonhosted.org/packages/28/50/1925de813499546bc8ab3ae857e3ec84efe7d2f19b34529d0c7c3d02d11d/protobuf-6.30.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4f6c687ae8efae6cf6093389a596548214467778146b7245e886f35e1485315d", size = 316212 }, + { url = "https://files.pythonhosted.org/packages/e5/a1/93c2acf4ade3c5b557d02d500b06798f4ed2c176fa03e3c34973ca92df7f/protobuf-6.30.2-py3-none-any.whl", hash = "sha256:ae86b030e69a98e08c77beab574cbcb9fff6d031d57209f574a5aea1445f4b51", size = 167062 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "regex" +version = "2024.11.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 }, + { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 }, + { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 }, + { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 }, + { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 }, + { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 }, + { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 }, + { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 }, + { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 }, + { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 }, + { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 }, + { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 }, + { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 }, + { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 }, + { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "ruff" +version = "0.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/5b/3ae20f89777115944e89c2d8c2e795dcc5b9e04052f76d5347e35e0da66e/ruff-0.11.4.tar.gz", hash = "sha256:f45bd2fb1a56a5a85fae3b95add03fb185a0b30cf47f5edc92aa0355ca1d7407", size = 3933063 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/db/baee59ac88f57527fcbaad3a7b309994e42329c6bc4d4d2b681a3d7b5426/ruff-0.11.4-py3-none-linux_armv6l.whl", hash = "sha256:d9f4a761ecbde448a2d3e12fb398647c7f0bf526dbc354a643ec505965824ed2", size = 10106493 }, + { url = "https://files.pythonhosted.org/packages/c1/d6/9a0962cbb347f4ff98b33d699bf1193ff04ca93bed4b4222fd881b502154/ruff-0.11.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8c1747d903447d45ca3d40c794d1a56458c51e5cc1bc77b7b64bd2cf0b1626cc", size = 10876382 }, + { url = "https://files.pythonhosted.org/packages/3a/8f/62bab0c7d7e1ae3707b69b157701b41c1ccab8f83e8501734d12ea8a839f/ruff-0.11.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:51a6494209cacca79e121e9b244dc30d3414dac8cc5afb93f852173a2ecfc906", size = 10237050 }, + { url = "https://files.pythonhosted.org/packages/09/96/e296965ae9705af19c265d4d441958ed65c0c58fc4ec340c27cc9d2a1f5b/ruff-0.11.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f171605f65f4fc49c87f41b456e882cd0c89e4ac9d58e149a2b07930e1d466f", size = 10424984 }, + { url = "https://files.pythonhosted.org/packages/e5/56/644595eb57d855afed6e54b852e2df8cd5ca94c78043b2f29bdfb29882d5/ruff-0.11.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebf99ea9af918878e6ce42098981fc8c1db3850fef2f1ada69fb1dcdb0f8e79e", size = 9957438 }, + { url = "https://files.pythonhosted.org/packages/86/83/9d3f3bed0118aef3e871ded9e5687fb8c5776bde233427fd9ce0a45db2d4/ruff-0.11.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edad2eac42279df12e176564a23fc6f4aaeeb09abba840627780b1bb11a9d223", size = 11547282 }, + { url = "https://files.pythonhosted.org/packages/40/e6/0c6e4f5ae72fac5ccb44d72c0111f294a5c2c8cc5024afcb38e6bda5f4b3/ruff-0.11.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f103a848be9ff379fc19b5d656c1f911d0a0b4e3e0424f9532ececf319a4296e", size = 12182020 }, + { url = "https://files.pythonhosted.org/packages/b5/92/4aed0e460aeb1df5ea0c2fbe8d04f9725cccdb25d8da09a0d3f5b8764bf8/ruff-0.11.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:193e6fac6eb60cc97b9f728e953c21cc38a20077ed64f912e9d62b97487f3f2d", size = 11679154 }, + { url = "https://files.pythonhosted.org/packages/1b/d3/7316aa2609f2c592038e2543483eafbc62a0e1a6a6965178e284808c095c/ruff-0.11.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7af4e5f69b7c138be8dcffa5b4a061bf6ba6a3301f632a6bce25d45daff9bc99", size = 13905985 }, + { url = "https://files.pythonhosted.org/packages/63/80/734d3d17546e47ff99871f44ea7540ad2bbd7a480ed197fe8a1c8a261075/ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126b1bf13154aa18ae2d6c3c5efe144ec14b97c60844cfa6eb960c2a05188222", size = 11348343 }, + { url = "https://files.pythonhosted.org/packages/04/7b/70fc7f09a0161dce9613a4671d198f609e653d6f4ff9eee14d64c4c240fb/ruff-0.11.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8806daaf9dfa881a0ed603f8a0e364e4f11b6ed461b56cae2b1c0cab0645304", size = 10308487 }, + { url = "https://files.pythonhosted.org/packages/1a/22/1cdd62dabd678d75842bf4944fd889cf794dc9e58c18cc547f9eb28f95ed/ruff-0.11.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5d94bb1cc2fc94a769b0eb975344f1b1f3d294da1da9ddbb5a77665feb3a3019", size = 9929091 }, + { url = "https://files.pythonhosted.org/packages/9f/20/40e0563506332313148e783bbc1e4276d657962cc370657b2fff20e6e058/ruff-0.11.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:995071203d0fe2183fc7a268766fd7603afb9996785f086b0d76edee8755c896", size = 10924659 }, + { url = "https://files.pythonhosted.org/packages/b5/41/eef9b7aac8819d9e942f617f9db296f13d2c4576806d604aba8db5a753f1/ruff-0.11.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a37ca937e307ea18156e775a6ac6e02f34b99e8c23fe63c1996185a4efe0751", size = 11428160 }, + { url = "https://files.pythonhosted.org/packages/ff/61/c488943414fb2b8754c02f3879de003e26efdd20f38167ded3fb3fc1cda3/ruff-0.11.4-py3-none-win32.whl", hash = "sha256:0e9365a7dff9b93af933dab8aebce53b72d8f815e131796268709890b4a83270", size = 10311496 }, + { url = "https://files.pythonhosted.org/packages/b6/2b/2a1c8deb5f5dfa3871eb7daa41492c4d2b2824a74d2b38e788617612a66d/ruff-0.11.4-py3-none-win_amd64.whl", hash = "sha256:5a9fa1c69c7815e39fcfb3646bbfd7f528fa8e2d4bebdcf4c2bd0fa037a255fb", size = 11399146 }, + { url = "https://files.pythonhosted.org/packages/4f/03/3aec4846226d54a37822e4c7ea39489e4abd6f88388fba74e3d4abe77300/ruff-0.11.4-py3-none-win_arm64.whl", hash = "sha256:d435db6b9b93d02934cf61ef332e66af82da6d8c69aefdea5994c89997c7a0fc", size = 10450306 }, +] + +[[package]] +name = "safetensors" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 }, + { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 }, + { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 }, + { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 }, + { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 }, + { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 }, + { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 }, + { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 }, + { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 }, + { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 }, + { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 }, + { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 }, + { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 }, + { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 }, +] + +[[package]] +name = "scipy" +version = "1.15.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, +] + +[[package]] +name = "setuptools" +version = "78.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/5a/0db4da3bc908df06e5efae42b44e75c81dd52716e10192ff36d0c1c8e379/setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", size = 1367827 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8", size = 1256108 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "sympy" +version = "1.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/99/5a5b6f19ff9f083671ddf7b9632028436167cd3d33e11015754e41b249a4/sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f", size = 7533040 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177 }, +] + +[[package]] +name = "tensorboard" +version = "2.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "grpcio" }, + { name = "markdown" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, + { name = "setuptools" }, + { name = "six" }, + { name = "tensorboard-data-server" }, + { name = "werkzeug" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl", hash = "sha256:5e71b98663a641a7ce8a6e70b0be8e1a4c0c45d48760b076383ac4755c35b9a0", size = 5503412 }, +] + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356 }, + { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598 }, + { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363 }, +] + +[[package]] +name = "tokenizers" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767 }, + { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555 }, + { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541 }, + { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058 }, + { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278 }, + { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253 }, + { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225 }, + { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874 }, + { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448 }, + { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877 }, + { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645 }, + { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380 }, + { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506 }, + { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481 }, +] + +[[package]] +name = "torch" +version = "2.6.0+cu124" +source = { registry = "https://download.pytorch.org/whl/cu124" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx" }, + { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313-linux_x86_64.whl", hash = "sha256:0f3bc53c988ce9568cd876a2a5316761e84a8704135ec8068f5f81b4417979cb" }, + { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313-win_amd64.whl", hash = "sha256:519330eef09534acad8110b6f423d2fe58c1d8e9ada999ed077a637a0021f908" }, + { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313t-linux_x86_64.whl", hash = "sha256:35cba404c0d742406cdcba1609085874bc60facdfbc50e910c47a92405fef44c" }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "transformers" +version = "4.51.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "huggingface-hub" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "requests" }, + { name = "safetensors" }, + { name = "tokenizers" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/75/6ebdae4d6f4574f47139a070445245537e43482d006f615af8e23d5bf05e/transformers-4.51.0.tar.gz", hash = "sha256:2d302563ff6c2cc2d0e88ef352cf059f9a21ce18102fd43662bb1246f70b8a84", size = 8925571 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/db/7ee15028d5130929aa0b1b85bab6d8bafe806254d3b5c56c42a0066cceb8/transformers-4.51.0-py3-none-any.whl", hash = "sha256:2e6baa476735ab8adccbaee6961525a0d1ce8c21d49293af30ef5ee4b082f64d", size = 10362017 }, +] + +[[package]] +name = "triton" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/30/37a3384d1e2e9320331baca41e835e90a3767303642c7a80d4510152cbcf/triton-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5dfa23ba84541d7c0a531dfce76d8bcd19159d50a4a8b14ad01e91734a5c1b0", size = 253154278 }, +] + +[[package]] +name = "typing-extensions" +version = "4.13.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/ad/cd3e3465232ec2416ae9b983f27b9e94dc8171d56ac99b345319a9475967/typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff", size = 106633 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/c5/e7a0b0f5ed69f94c8ab7379c599e6036886bffcde609969a5325f47f1332/typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", size = 45739 }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, +] From 92f28b33a9fb9b8f0c2f35e03e78bac94dd642da Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 22:17:55 +0300 Subject: [PATCH 164/175] Revert "ruff format" This reverts commit 4077b0579fa1ee0a938e635ee8e7e0ad1603a7bc. --- modeling/callbacks/__init__.py | 8 +- modeling/callbacks/base.py | 293 ++++---- modeling/dataloader/base.py | 24 +- modeling/dataloader/batch_processors.py | 34 +- modeling/dataset/base.py | 639 ++++++++---------- .../dataset/negative_samplers/__init__.py | 6 +- modeling/dataset/negative_samplers/base.py | 12 +- modeling/dataset/negative_samplers/popular.py | 28 +- modeling/dataset/negative_samplers/random.py | 12 +- modeling/dataset/samplers/__init__.py | 29 +- modeling/dataset/samplers/base.py | 24 +- modeling/dataset/samplers/cl4srec.py | 110 ++- modeling/dataset/samplers/duorec.py | 44 +- modeling/dataset/samplers/identity.py | 19 +- .../dataset/samplers/last_item_prediction.py | 16 +- .../samplers/masked_item_prediction.py | 59 +- modeling/dataset/samplers/mclsr.py | 45 +- .../dataset/samplers/next_item_prediction.py | 69 +- modeling/dataset/samplers/pop.py | 52 +- modeling/dataset/samplers/s3rec.py | 92 ++- modeling/infer.py | 69 +- modeling/loss/base.py | 394 ++++++----- modeling/metric/base.py | 65 +- modeling/models/__init__.py | 2 +- modeling/models/base.py | 111 ++- modeling/models/bert4rec.py | 94 ++- modeling/models/bert4rec_cls.py | 91 +-- modeling/models/cl4srec.py | 127 ++-- modeling/models/duorec.py | 123 ++-- modeling/models/graph_seq_rec.py | 225 +++--- modeling/models/gru4rec.py | 172 +++-- modeling/models/gtorec.py | 475 +++++-------- modeling/models/lightgcn.py | 129 ++-- modeling/models/mclsr.py | 274 ++++---- modeling/models/mrgsrec.py | 115 ++-- modeling/models/ngcf.py | 133 ++-- modeling/models/pop.py | 36 +- modeling/models/pure_mf.py | 107 ++- modeling/models/pure_svd.py | 6 +- modeling/models/random.py | 29 +- modeling/models/rqvae.py | 81 ++- modeling/models/s3rec.py | 214 +++--- modeling/models/sasrec_ce.py | 85 ++- modeling/models/sasrec_semantic.py | 4 +- modeling/models/tiger.py | 11 +- modeling/optimizer/base.py | 41 +- modeling/pretrain.py | 65 +- modeling/rqvae_utils/__init__.py | 4 +- modeling/rqvae_utils/collision_solver.py | 156 ++--- modeling/rqvae_utils/rqvae_data.py | 13 +- modeling/rqvae_utils/rqvae_test.py | 25 +- modeling/rqvae_utils/simplified_tree.py | 70 +- modeling/rqvae_utils/tree.py | 191 ++---- modeling/rqvae_utils/tree_comparing.py | 18 +- modeling/rqvae_utils/trie.py | 1 - modeling/train.py | 106 ++- modeling/train_multiple.py | 103 ++- modeling/utils/__init__.py | 93 ++- modeling/utils/grid_search.py | 25 +- modeling/utils/registry.py | 31 +- modeling/utils/tensorboards/__init__.py | 2 +- .../utils/tensorboards/tensorboard_writers.py | 11 +- 62 files changed, 2579 insertions(+), 3163 deletions(-) diff --git a/modeling/callbacks/__init__.py b/modeling/callbacks/__init__.py index 81d5054e..a23d5ba3 100644 --- a/modeling/callbacks/__init__.py +++ b/modeling/callbacks/__init__.py @@ -1,7 +1 @@ -from .base import ( - BaseCallback, - CompositeCallback, - EvalCallback, - InferenceCallback, - ValidationCallback, -) +from .base import BaseCallback, CompositeCallback, EvalCallback, InferenceCallback, ValidationCallback diff --git a/modeling/callbacks/base.py b/modeling/callbacks/base.py index 900b492e..1ae26267 100644 --- a/modeling/callbacks/base.py +++ b/modeling/callbacks/base.py @@ -1,19 +1,25 @@ -import os -from pathlib import Path - -import numpy as np -import torch +from metric import BaseMetric, StatefullMetric import utils -from metric import BaseMetric, StatefullMetric from utils import MetaParent, create_logger +import numpy as np +import os +import torch +from pathlib import Path + logger = create_logger(name=__name__) class BaseCallback(metaclass=MetaParent): + def __init__( - self, model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ): self._model = model self._train_dataloader = train_dataloader @@ -25,20 +31,25 @@ def __call__(self, inputs, step_num): raise NotImplementedError -class MetricCallback(BaseCallback, config_name="metric"): +class MetricCallback(BaseCallback, config_name='metric'): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - metrics, - loss_prefix, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + metrics, + loss_prefix ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._loss_prefix = loss_prefix @@ -47,103 +58,113 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], - metrics=config.get("metrics", None), - loss_prefix=config["loss_prefix"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], + metrics=config.get('metrics', None), + loss_prefix=config['loss_prefix'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: for metric_name, metric_function in self._metrics.items(): metric_value = metric_function( - ground_truth=inputs[self._model.schema["ground_truth_prefix"]], - predictions=inputs[self._model.schema["predictions_prefix"]], + ground_truth=inputs[self._model.schema['ground_truth_prefix']], + predictions=inputs[self._model.schema['predictions_prefix']] ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - "train/{}".format(metric_name), metric_value, step_num + 'train/{}'.format(metric_name), + metric_value, + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - "train/{}".format(self._loss_prefix), + 'train/{}'.format(self._loss_prefix), inputs[self._loss_prefix], - step_num, + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() -class CheckpointCallback(BaseCallback, config_name="checkpoint"): +class CheckpointCallback(BaseCallback, config_name='checkpoint'): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - save_path, - model_name, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + save_path, + model_name ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._save_path = Path(os.path.join(save_path, model_name)) if self._save_path.exists(): - logger.warning( - "Checkpoint path `{}` is already exists!".format(self._save_path) - ) + logger.warning('Checkpoint path `{}` is already exists!'.format(self._save_path)) else: self._save_path.mkdir(parents=True, exist_ok=True) @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], - save_path=config["save_path"], - model_name=config["model_name"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], + save_path=config['save_path'], + model_name=config['model_name'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: - logger.debug("Saving model state on step {}...".format(step_num)) + logger.debug('Saving model state on step {}...'.format(step_num)) torch.save( { - "step_num": step_num, - "model_state_dict": self._model.state_dict(), - "optimizer_state_dict": self._optimizer.state_dict(), + 'step_num': step_num, + 'model_state_dict': self._model.state_dict(), + 'optimizer_state_dict': self._optimizer.state_dict(), }, - os.path.join(self._save_path, "checkpoint_{}.pth".format(step_num)), + os.path.join(self._save_path, 'checkpoint_{}.pth'.format(step_num)) ) - logger.debug("Saving done!") + logger.debug('Saving done!') class InferenceCallback(BaseCallback): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - pred_prefix, - labels_prefix, - metrics=None, - loss_prefix=None, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + pred_prefix, + labels_prefix, + metrics=None, + loss_prefix=None, ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._metrics = metrics if metrics is not None else {} @@ -155,24 +176,24 @@ def __init__( def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: # TODO Add time monitoring - logger.debug(f"Running {self._get_name()} on step {step_num}...") + logger.debug(f'Running {self._get_name()} on step {step_num}...') running_params = {} for metric_name, metric_function in self._metrics.items(): running_params[metric_name] = [] @@ -191,34 +212,30 @@ def __call__(self, inputs, step_num): batch[key] = values.cpu() for metric_name, metric_function in self._metrics.items(): - running_params[metric_name].extend( - metric_function( - inputs=batch, - pred_prefix=self._pred_prefix, - labels_prefix=self._labels_prefix, - ) - ) + running_params[metric_name].extend(metric_function( + inputs=batch, + pred_prefix=self._pred_prefix, + labels_prefix=self._labels_prefix, + )) if self._loss_prefix is not None: - running_params[self._loss_prefix] += batch[ - self._loss_prefix - ].item() - + running_params[self._loss_prefix] += batch[self._loss_prefix].item() + for metric_name, metric_function in self._metrics.items(): if isinstance(metric_function, StatefullMetric): - running_params[metric_name] = metric_function.reduce( - running_params[metric_name] - ) + running_params[metric_name] = metric_function.reduce(running_params[metric_name]) for label, value in running_params.items(): - inputs[f"{self._get_name()}/{label}"] = np.mean(value) + inputs[f'{self._get_name()}/{label}'] = np.mean(value) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - f"{self._get_name()}/{label}", np.mean(value), step_num + f'{self._get_name()}/{label}', + np.mean(value), + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() - logger.debug(f"Running {self._get_name()} on step {step_num} is done!") - + logger.debug(f'Running {self._get_name()} on step {step_num} is done!') + def _get_name(self): return self.config_name @@ -226,81 +243,87 @@ def _get_dataloader(self): raise NotImplementedError -class ValidationCallback(InferenceCallback, config_name="validation"): +class ValidationCallback(InferenceCallback, config_name='validation'): + @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def _get_dataloader(self): return self._validation_dataloader -class EvalCallback(InferenceCallback, config_name="eval"): +class EvalCallback(InferenceCallback, config_name='eval'): + @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def _get_dataloader(self): return self._eval_dataloader -class CompositeCallback(BaseCallback, config_name="composite"): +class CompositeCallback(BaseCallback, config_name='composite'): def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - callbacks, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + callbacks ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._callbacks = callbacks @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], callbacks=[ BaseCallback.create_from_config(cfg, **kwargs) - for cfg in config["callbacks"] - ], + for cfg in config['callbacks'] + ] ) def __call__(self, inputs, step_num): diff --git a/modeling/dataloader/base.py b/modeling/dataloader/base.py index 71e7f6e7..2e23876d 100644 --- a/modeling/dataloader/base.py +++ b/modeling/dataloader/base.py @@ -1,13 +1,12 @@ import copy -import logging - -import numpy as np -from torch.utils.data import DataLoader, random_split from utils import MetaParent - from .batch_processors import BaseBatchProcessor +import logging +import numpy as np +from torch.utils.data import DataLoader, random_split + logger = logging.getLogger(__name__) @@ -15,7 +14,8 @@ class BaseDataloader(metaclass=MetaParent): pass -class TorchDataloader(BaseDataloader, config_name="torch"): +class TorchDataloader(BaseDataloader, config_name='torch'): + def __init__(self, dataloader): self._dataloader = dataloader @@ -29,13 +29,7 @@ def __len__(self): def create_from_config(cls, config, **kwargs): create_config = copy.deepcopy(config) batch_processor = BaseBatchProcessor.create_from_config( - create_config.pop("batch_processor") - if "batch_processor" in create_config - else {"type": "identity"} - ) - create_config.pop("type") # For passing as **config in torch DataLoader - return cls( - dataloader=DataLoader( - kwargs["dataset"], collate_fn=batch_processor, **create_config - ) + create_config.pop('batch_processor') if 'batch_processor' in create_config else {'type': 'identity'} ) + create_config.pop('type') # For passing as **config in torch DataLoader + return cls(dataloader=DataLoader(kwargs['dataset'], collate_fn=batch_processor, **create_config)) diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index bd45c86c..9991a073 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,43 +1,43 @@ import torch - from utils import MetaParent class BaseBatchProcessor(metaclass=MetaParent): + def __call__(self, batch): raise NotImplementedError -class IdentityBatchProcessor(BaseBatchProcessor, config_name="identity"): +class IdentityBatchProcessor(BaseBatchProcessor, config_name='identity'): + def __call__(self, batch): return torch.tensor(batch) + +class EmbedBatchProcessor(BaseBatchProcessor, config_name='embed'): - -class EmbedBatchProcessor(BaseBatchProcessor, config_name="embed"): def __call__(self, batch): - ids = torch.tensor([entry["item.id"] for entry in batch]) - embeds = torch.stack([entry["item.embed"] for entry in batch]) + ids = torch.tensor([entry['item.id'] for entry in batch]) + embeds = torch.stack([entry['item.embed'] for entry in batch]) + + return {'ids': ids, 'embeddings': embeds} - return {"ids": ids, "embeddings": embeds} +class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): -class BasicBatchProcessor(BaseBatchProcessor, config_name="basic"): def __call__(self, batch): processed_batch = {} for key in batch[0].keys(): - if key.endswith(".ids"): - prefix = key.split(".")[0] - assert "{}.length".format(prefix) in batch[0] + if key.endswith('.ids'): + prefix = key.split('.')[0] + assert '{}.length'.format(prefix) in batch[0] - processed_batch[f"{prefix}.ids"] = [] - processed_batch[f"{prefix}.length"] = [] + processed_batch[f'{prefix}.ids'] = [] + processed_batch[f'{prefix}.length'] = [] for sample in batch: - processed_batch[f"{prefix}.ids"].extend(sample[f"{prefix}.ids"]) - processed_batch[f"{prefix}.length"].append( - sample[f"{prefix}.length"] - ) + processed_batch[f'{prefix}.ids'].extend(sample[f'{prefix}.ids']) + processed_batch[f'{prefix}.length'].append(sample[f'{prefix}.length']) for part, values in processed_batch.items(): processed_batch[part] = torch.tensor(values, dtype=torch.long) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index b2e53b3e..ff040d6e 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -1,35 +1,40 @@ -import json -import logging -import os -import pickle from collections import defaultdict +import json +from tqdm import tqdm + +from dataset.samplers import TrainSampler, EvalSampler + +from utils import MetaParent, DEVICE + +import pickle +import torch import numpy as np import scipy.sparse as sp -import torch from scipy.sparse import csr_matrix -from tqdm import tqdm -from dataset.samplers import EvalSampler, TrainSampler -from utils import DEVICE, MetaParent +import os +import logging logger = logging.getLogger(__name__) class BaseDataset(metaclass=MetaParent): + def get_samplers(self): raise NotImplementedError -class SequenceDataset(BaseDataset, config_name="sequence"): +class SequenceDataset(BaseDataset, config_name='sequence'): + def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -40,74 +45,61 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="train", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='train', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="valid", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='valid', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="test", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='test', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_seq_len)) + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_seq_len)) - train_interactions = sum( - list(map(lambda x: len(x), train_dataset)) - ) # whole user history as a sample + train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (train_interactions + valid_interactions + test_interactions) - / max_user_id - / max_item_id, - ) - ) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info('{} dataset sparsity: {}'.format( + config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -116,72 +108,45 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len, + max_sequence_length=max_seq_len ) @classmethod - def _create_dataset( - cls, dir_path, part, max_sequence_length=None, use_cached=False - ): + def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): - logger.info( - f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" - ) + if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): + logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "rb" - ) as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( - dataset_file - ) + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) else: - logger.info( - "Cache is forecefully ignored." - if not use_cached - else "No cached dataset has been found." - ) - logger.info( - f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." - ) + logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') + logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') - dataset_path = os.path.join(dir_path, "{}.txt".format(part)) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) + with open(dataset_path, 'r') as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_len, - ) = sequence_info + user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): - dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids, - "item.length": len(item_ids), - } - ) + dataset.append({ + 'user.ids': [user_id], 'user.length': 1, + 'item.ids': item_ids, 'item.length': len(item_ids) + }) - logger.info("{} dataset size: {}".format(part, len(dataset))) - logger.info( - "{} dataset max sequence length: {}".format(part, max_sequence_len) - ) + logger.info('{} dataset size: {}'.format(part, len(dataset))) + logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "wb" - ) as dataset_file: + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), + dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len @@ -196,7 +161,7 @@ def _create_sequences(data, max_sample_len): max_sequence_length = 0 for sample in data: - sample = sample.strip("\n").split(" ") + sample = sample.strip('\n').split(' ') item_ids = [int(item_id) for item_id in sample[1:]][-max_sample_len:] user_id = int(sample[0]) @@ -207,13 +172,7 @@ def _create_sequences(data, max_sample_len): user_sequences.append(user_id) item_sequences.append(item_ids) - return ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_length, - ) + return user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_length def get_samplers(self): return self._train_sampler, self._validation_sampler, self._test_sampler @@ -233,84 +192,71 @@ def max_sequence_length(self): @property def meta(self): return { - "num_users": self.num_users, - "num_items": self.num_items, - "max_sequence_length": self.max_sequence_length, + 'num_users': self.num_users, + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length } - - -class SequenceFullDataset(SequenceDataset, config_name="sequence_full"): + + +class SequenceFullDataset(SequenceDataset, config_name='sequence_full'): @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="train", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='train', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="valid", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='valid', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="test", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='test', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info('Train dataset size: {}'.format(len(train_dataset))) logger.info("Validation dataset size: {}".format(len(validation_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_seq_len)) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_seq_len)) - train_interactions = sum( - list(map(lambda x: len(x), train_dataset)) - ) # whole user history as a sample + train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (train_interactions + valid_interactions + test_interactions) - / max_user_id - / max_item_id, - ) - ) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info('{} dataset sparsity: {}'.format( + config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -319,59 +265,40 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len, + max_sequence_length=max_seq_len ) - + @classmethod def flatten_item_sequence(cls, item_ids): - min_history_length = 3 + min_history_length = 3 # TODOPK make this configurable histories = [] - for i in range(min_history_length - 1, len(item_ids)): - histories.append(item_ids[: i + 1]) + for i in range(min_history_length-1, len(item_ids)): + histories.append(item_ids[:i+1]) return histories - + @classmethod - def _create_dataset( - cls, dir_path, part, max_sequence_length=None, use_cached=False - ): + def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): - logger.info( - f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" - ) + if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): + logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "rb" - ) as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( - dataset_file - ) + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) else: - logger.info( - "Cache is forecefully ignored." - if not use_cached - else "No cached dataset has been found." - ) - logger.info( - f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." - ) + logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') + logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') - dataset_path = os.path.join(dir_path, "{}.txt".format(part)) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) + with open(dataset_path, 'r') as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_len, - ) = sequence_info + user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info + # TODOPK check dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): if part == "train": @@ -395,29 +322,26 @@ def _create_dataset( } ) - logger.info("{} dataset size: {}".format(part, len(dataset))) - logger.info( - "{} dataset max sequence length: {}".format(part, max_sequence_len) - ) + logger.info('{} dataset size: {}'.format(part, len(dataset))) + logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "wb" - ) as dataset_file: + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), + dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len +class GraphDataset(BaseDataset, config_name='graph'): -class GraphDataset(BaseDataset, config_name="graph"): def __init__( - self, - dataset, - graph_dir_path, - use_train_data_only=True, - use_user_graph=False, - use_item_graph=False, + self, + dataset, + graph_dir_path, + use_train_data_only=True, + use_user_graph=False, + use_item_graph=False ): self._dataset = dataset self._graph_dir_path = graph_dir_path @@ -430,19 +354,15 @@ def __init__( train_sampler, validation_sampler, test_sampler = dataset.get_samplers() - train_interactions, train_user_interactions, train_item_interactions = ( - [], - [], - [], - ) + train_interactions, train_user_interactions, train_item_interactions = [], [], [] train_user_2_items = defaultdict(set) train_item_2_users = defaultdict(set) visited_user_item_pairs = set() for sample in train_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -458,8 +378,8 @@ def __init__( # TODO create separated function if not self._use_train_data_only: for sample in validation_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -473,8 +393,8 @@ def __init__( visited_user_item_pairs.add((user_id, item_id)) for sample in test_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -491,32 +411,27 @@ def __init__( self._train_user_interactions = np.array(train_user_interactions) self._train_item_interactions = np.array(train_item_interactions) - path_to_graph = os.path.join(graph_dir_path, "general_graph.npz") + path_to_graph = os.path.join(graph_dir_path, 'general_graph.npz') if os.path.exists(path_to_graph): self._graph = sp.load_npz(path_to_graph) else: # place ones only when co-occurrence happens user2item_connections = csr_matrix( - ( - np.ones(len(train_user_interactions)), - (train_user_interactions, train_item_interactions), - ), - shape=(self._num_users + 2, self._num_items + 2), + (np.ones(len(train_user_interactions)), (train_user_interactions, train_item_interactions)), + shape=(self._num_users + 2, self._num_items + 2) ) # (num_users + 2, num_items + 2), bipartite graph self._graph = self.get_sparse_graph_layer( user2item_connections, self._num_users + 2, self._num_items + 2, - biparite=True, + biparite=True ) sp.save_npz(path_to_graph, self._graph) - self._graph = ( - self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) - ) + self._graph = self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) if self._use_user_graph: - path_to_user_graph = os.path.join(graph_dir_path, "user_graph.npz") + path_to_user_graph = os.path.join(graph_dir_path, 'user_graph.npz') if os.path.exists(path_to_user_graph): self._user_graph = sp.load_npz(path_to_user_graph) else: @@ -525,18 +440,13 @@ def __init__( visited_user_item_pairs = set() visited_user_user_pairs = set() - for user_id, item_id in tqdm( - zip(self._train_user_interactions, self._train_item_interactions) - ): + for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_user_id in train_item_2_users[item_id]: - if ( - user_id, - connected_user_id, - ) in visited_user_user_pairs or user_id == connected_user_id: + if (user_id, connected_user_id) in visited_user_user_pairs or user_id == connected_user_id: continue # add (user, user) to graph connections pair only once visited_user_user_pairs.add((user_id, connected_user_id)) @@ -546,30 +456,24 @@ def __init__( # (user, user) graph user2user_connections = csr_matrix( ( - np.ones(len(user2user_interactions_fst)), - (user2user_interactions_fst, user2user_interactions_snd), - ), - shape=(self._num_users + 2, self._num_users + 2), + np.ones(len(user2user_interactions_fst)), (user2user_interactions_fst, user2user_interactions_snd)), + shape=(self._num_users + 2, self._num_users + 2) ) self._user_graph = self.get_sparse_graph_layer( user2user_connections, self._num_users + 2, self._num_users + 2, - biparite=False, + biparite=False ) sp.save_npz(path_to_user_graph, self._user_graph) - self._user_graph = ( - self._convert_sp_mat_to_sp_tensor(self._user_graph) - .coalesce() - .to(DEVICE) - ) + self._user_graph = self._convert_sp_mat_to_sp_tensor(self._user_graph).coalesce().to(DEVICE) else: self._user_graph = None if self._use_item_graph: - path_to_item_graph = os.path.join(graph_dir_path, "item_graph.npz") + path_to_item_graph = os.path.join(graph_dir_path, 'item_graph.npz') if os.path.exists(path_to_item_graph): self._item_graph = sp.load_npz(path_to_item_graph) else: @@ -578,18 +482,13 @@ def __init__( visited_user_item_pairs = set() visited_item_item_pairs = set() - for user_id, item_id in tqdm( - zip(self._train_user_interactions, self._train_item_interactions) - ): + for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_item_id in train_user_2_items[user_id]: - if ( - item_id, - connected_item_id, - ) in visited_item_item_pairs or item_id == connected_item_id: + if (item_id, connected_item_id) in visited_item_item_pairs or item_id == connected_item_id: continue # add (item, item) to graph connections pair only once visited_item_item_pairs.add((item_id, connected_item_id)) @@ -599,42 +498,39 @@ def __init__( # (item, item) graph item2item_connections = csr_matrix( ( - np.ones(len(item2item_interactions_fst)), - (item2item_interactions_fst, item2item_interactions_snd), - ), - shape=(self._num_items + 2, self._num_items + 2), + np.ones(len(item2item_interactions_fst)), (item2item_interactions_fst, item2item_interactions_snd)), + shape=(self._num_items + 2, self._num_items + 2) ) self._item_graph = self.get_sparse_graph_layer( item2item_connections, self._num_items + 2, self._num_items + 2, - biparite=False, + biparite=False ) sp.save_npz(path_to_item_graph, self._item_graph) - self._item_graph = ( - self._convert_sp_mat_to_sp_tensor(self._item_graph) - .coalesce() - .to(DEVICE) - ) + self._item_graph = self._convert_sp_mat_to_sp_tensor(self._item_graph).coalesce().to(DEVICE) else: self._item_graph = None @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) return cls( dataset=dataset, - graph_dir_path=config["graph_dir_path"], - use_user_graph=config.get("use_user_graph", False), - use_item_graph=config.get("use_item_graph", False), + graph_dir_path=config['graph_dir_path'], + use_user_graph=config.get('use_user_graph', False), + use_item_graph=config.get('use_item_graph', False) ) @staticmethod def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): mat_dim_size = fst_dim + snd_dim if biparite else fst_dim - adj_mat = sp.dok_matrix((mat_dim_size, mat_dim_size), dtype=np.float32) + adj_mat = sp.dok_matrix( + (mat_dim_size, mat_dim_size), + dtype=np.float32 + ) adj_mat = adj_mat.tolil() R = sparse_matrix.tolil() # list of lists (fst_dim, snd_dim) @@ -652,11 +548,11 @@ def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): rowsum = np.array(adj_mat.sum(1)) d_inv = np.power(rowsum, -1).flatten() - d_inv[np.isinf(d_inv)] = 0.0 + d_inv[np.isinf(d_inv)] = 0. d_mat_inv = sp.diags(d_inv) d_inv = np.power(edges_degree, -0.5).flatten() # D^(-0.5) - d_inv[np.isinf(d_inv)] = 0.0 # fix NaNs in case if row with zero connections + d_inv[np.isinf(d_inv)] = 0. # fix NaNs in case if row with zero connections d_mat = sp.diags(d_inv) # make it square matrix # D^(-0.5) @ A @ D^(-0.5) @@ -687,15 +583,16 @@ def get_samplers(self): @property def meta(self): meta = { - "user_graph": self._user_graph, - "item_graph": self._item_graph, - "graph": self._graph, - **self._dataset.meta, + 'user_graph': self._user_graph, + 'item_graph': self._item_graph, + 'graph': self._graph, + **self._dataset.meta } return meta -class DuorecDataset(BaseDataset, config_name="duorec"): +class DuorecDataset(BaseDataset, config_name='duorec'): + def __init__(self, dataset): self._dataset = dataset self._num_users = dataset.num_users @@ -705,7 +602,7 @@ def __init__(self, dataset): target_2_sequences = defaultdict(list) for sample in train_sampler.dataset: - item_ids = sample["item.ids"] + item_ids = sample['item.ids'] target_item = item_ids[-1] semantic_similar_item_ids = item_ids[:-1] @@ -716,7 +613,7 @@ def __init__(self, dataset): @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) return cls(dataset) @property @@ -735,15 +632,16 @@ def meta(self): return self._dataset.meta -class ScientificDataset(BaseDataset, config_name="scientific"): +class ScientificDataset(BaseDataset, config_name='scientific'): + def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -754,17 +652,17 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) - max_sequence_length = config["max_sequence_length"] + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + max_sequence_length = config['max_sequence_length'] max_user_id, max_item_id = 0, 0 train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, "{}.txt".format("all_data")) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(data_dir_path, '{}.txt'.format('all_data')) + with open(dataset_path, 'r') as f: data = f.readlines() for sample in data: - sample = sample.strip("\n").split(" ") + sample = sample.strip('\n').split(' ') user_id = int(sample[0]) item_ids = [int(item_id) for item_id in sample[1:]] @@ -773,69 +671,54 @@ def create_from_config(cls, config, **kwargs): assert len(item_ids) >= 5 - train_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[:-2][-max_sequence_length:], - "item.length": len(item_ids[:-2][-max_sequence_length:]), - } - ) - assert len(item_ids[:-2][-max_sequence_length:]) == len( - set(item_ids[:-2][-max_sequence_length:]) - ) - validation_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[:-1][-max_sequence_length:], - "item.length": len(item_ids[:-1][-max_sequence_length:]), - } - ) - assert len(item_ids[:-1][-max_sequence_length:]) == len( - set(item_ids[:-1][-max_sequence_length:]) - ) - test_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[-max_sequence_length:], - "item.length": len(item_ids[-max_sequence_length:]), - } - ) - assert len(item_ids[-max_sequence_length:]) == len( - set(item_ids[-max_sequence_length:]) - ) - - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_sequence_length)) - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id, - ) - ) + train_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[:-2][-max_sequence_length:], + 'item.length': len(item_ids[:-2][-max_sequence_length:]) + }) + assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) + validation_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[:-1][-max_sequence_length:], + 'item.length': len(item_ids[:-1][-max_sequence_length:]) + }) + assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) + test_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[-max_sequence_length:], + 'item.length': len(item_ids[-max_sequence_length:]) + }) + assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_sequence_length)) + logger.info('{} dataset sparsity: {}'.format( + config['name'], (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -844,7 +727,7 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_sequence_length, + max_sequence_length=max_sequence_length ) def get_samplers(self): @@ -865,9 +748,9 @@ def max_sequence_length(self): @property def meta(self): return { - "num_users": self.num_users, - "num_items": self.num_items, - "max_sequence_length": self.max_sequence_length, + 'num_users': self.num_users, + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length } @@ -991,8 +874,15 @@ def create_from_config(cls, config, **kwargs): ) -class RqVaeDataset(BaseDataset, config_name="rqvae"): - def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): +class RqVaeDataset(BaseDataset, config_name='rqvae'): + + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_items + ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler self._test_sampler = test_sampler @@ -1000,33 +890,39 @@ def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, "{}.pt".format("data_full")) + dataset_path = os.path.join(data_dir_path, '{}.pt'.format('data_full')) df = torch.load(dataset_path, weights_only=False) for idx, sample in df.iterrows(): - train_dataset.append({"item.id": idx, "item.embed": sample["embeddings"]}) - - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) + train_dataset.append({ + 'item.id': idx, + 'item.embed': sample["embeddings"] + }) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) train_sampler = TrainSampler.create_from_config( - config["samplers"], dataset=train_dataset + config['samplers'], + dataset=train_dataset ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], dataset=validation_dataset + config['samplers'], + dataset=validation_dataset ) test_sampler = EvalSampler.create_from_config( - config["samplers"], dataset=test_dataset + config['samplers'], + dataset=test_dataset ) return cls( train_sampler=train_sampler, validation_sampler=validation_sampler, test_sampler=test_sampler, - num_items=len(df), + num_items=len(df) ) def get_samplers(self): @@ -1042,4 +938,7 @@ def max_sequence_length(self): @property def meta(self): - return {"num_items": self.num_items, "train_sampler": self._train_sampler} + return { + 'num_items': self.num_items, + 'train_sampler': self._train_sampler + } diff --git a/modeling/dataset/negative_samplers/__init__.py b/modeling/dataset/negative_samplers/__init__.py index 6cac99af..498de21f 100644 --- a/modeling/dataset/negative_samplers/__init__.py +++ b/modeling/dataset/negative_samplers/__init__.py @@ -2,4 +2,8 @@ from .popular import PopularNegativeSampler from .random import RandomNegativeSampler -__all__ = ["BaseNegativeSampler", "PopularNegativeSampler", "RandomNegativeSampler"] +__all__ = [ + 'BaseNegativeSampler', + 'PopularNegativeSampler', + 'RandomNegativeSampler' +] diff --git a/modeling/dataset/negative_samplers/base.py b/modeling/dataset/negative_samplers/base.py index ebaef60c..5483bd29 100644 --- a/modeling/dataset/negative_samplers/base.py +++ b/modeling/dataset/negative_samplers/base.py @@ -4,15 +4,21 @@ class BaseNegativeSampler(metaclass=MetaParent): - def __init__(self, dataset, num_users, num_items): + + def __init__( + self, + dataset, + num_users, + num_items + ): self._dataset = dataset self._num_users = num_users self._num_items = num_items self._seen_items = defaultdict(set) for sample in self._dataset: - user_id = sample["user.ids"][0] - items = list(sample["item.ids"]) + user_id = sample['user.ids'][0] + items = list(sample['item.ids']) self._seen_items[user_id].update(items) def generate_negative_samples(self, sample, num_negatives): diff --git a/modeling/dataset/negative_samplers/popular.py b/modeling/dataset/negative_samplers/popular.py index 6e478e0c..68476651 100644 --- a/modeling/dataset/negative_samplers/popular.py +++ b/modeling/dataset/negative_samplers/popular.py @@ -1,34 +1,44 @@ +from dataset.negative_samplers.base import BaseNegativeSampler + from collections import Counter -from dataset.negative_samplers.base import BaseNegativeSampler +class PopularNegativeSampler(BaseNegativeSampler, config_name='popular'): -class PopularNegativeSampler(BaseNegativeSampler, config_name="popular"): - def __init__(self, dataset, num_users, num_items): - super().__init__(dataset=dataset, num_users=num_users, num_items=num_items) + def __init__( + self, + dataset, + num_users, + num_items + ): + super().__init__( + dataset=dataset, + num_users=num_users, + num_items=num_items + ) self._popular_items = self._items_by_popularity() @classmethod def create_from_config(cls, _, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def _items_by_popularity(self): popularity = Counter() for sample in self._dataset: - for item_id in sample["item.ids"]: + for item_id in sample['item.ids']: popularity[item_id] += 1 popular_items = sorted(popularity, key=popularity.get, reverse=True) return popular_items def generate_negative_samples(self, sample, num_negatives): - user_id = sample["user.ids"][0] + user_id = sample['user.ids'][0] popularity_idx = 0 negatives = [] while len(negatives) < num_negatives: diff --git a/modeling/dataset/negative_samplers/random.py b/modeling/dataset/negative_samplers/random.py index 24055217..cf8e24e9 100644 --- a/modeling/dataset/negative_samplers/random.py +++ b/modeling/dataset/negative_samplers/random.py @@ -1,18 +1,20 @@ from collections import defaultdict -import numpy as np from tqdm import tqdm from dataset.negative_samplers.base import BaseNegativeSampler +import numpy as np + + +class RandomNegativeSampler(BaseNegativeSampler, config_name='random'): -class RandomNegativeSampler(BaseNegativeSampler, config_name="random"): @classmethod def create_from_config(cls, _, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def generate_negative_samples(self, sample, num_negatives): diff --git a/modeling/dataset/samplers/__init__.py b/modeling/dataset/samplers/__init__.py index 40ffd454..6ed31eed 100644 --- a/modeling/dataset/samplers/__init__.py +++ b/modeling/dataset/samplers/__init__.py @@ -1,19 +1,10 @@ -from .base import EvalSampler, TrainSampler -from .cl4srec import Cl4SRecEvalSampler, Cl4SRecTrainSampler -from .duorec import DuoRecEvalSampler, DuorecTrainSampler -from .identity import IdentityEvalSampler, IdentityTrainSampler -from .last_item_prediction import ( - LastItemPredictionEvalSampler, - LastItemPredictionTrainSampler, -) -from .masked_item_prediction import ( - MaskedItemPredictionEvalSampler, - MaskedItemPredictionTrainSampler, -) -from .mclsr import MCLSRPredictionEvalSampler, MCLSRTrainSampler -from .next_item_prediction import ( - NextItemPredictionEvalSampler, - NextItemPredictionTrainSampler, -) -from .pop import PopEvalSampler, PopTrainSampler -from .s3rec import S3RecPretrainEvalSampler, S3RecPretrainTrainSampler +from .base import TrainSampler, EvalSampler +from .cl4srec import Cl4SRecTrainSampler, Cl4SRecEvalSampler +from .duorec import DuorecTrainSampler, DuoRecEvalSampler +from .next_item_prediction import NextItemPredictionTrainSampler, NextItemPredictionEvalSampler +from .last_item_prediction import LastItemPredictionTrainSampler, LastItemPredictionEvalSampler +from .masked_item_prediction import MaskedItemPredictionTrainSampler, MaskedItemPredictionEvalSampler +from .mclsr import MCLSRTrainSampler, MCLSRPredictionEvalSampler +from .pop import PopTrainSampler, PopEvalSampler +from .s3rec import S3RecPretrainTrainSampler, S3RecPretrainEvalSampler +from .identity import IdentityTrainSampler, IdentityEvalSampler diff --git a/modeling/dataset/samplers/base.py b/modeling/dataset/samplers/base.py index 723abb0a..2dbfa705 100644 --- a/modeling/dataset/samplers/base.py +++ b/modeling/dataset/samplers/base.py @@ -1,9 +1,10 @@ -import copy - from utils import MetaParent +import copy + class TrainSampler(metaclass=MetaParent): + def __init__(self): self._dataset = None @@ -19,6 +20,7 @@ def __getitem__(self, index): class EvalSampler(metaclass=MetaParent): + def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -35,14 +37,16 @@ def __len__(self): def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [next_item], - "labels.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1 } diff --git a/modeling/dataset/samplers/cl4srec.py b/modeling/dataset/samplers/cl4srec.py index 6fbcd143..8aba1de1 100644 --- a/modeling/dataset/samplers/cl4srec.py +++ b/modeling/dataset/samplers/cl4srec.py @@ -1,19 +1,20 @@ -import copy - import numpy as np -from dataset.samplers.base import EvalSampler, TrainSampler +from dataset.samplers.base import TrainSampler, EvalSampler + +import copy + +class Cl4SRecTrainSampler(TrainSampler, config_name='cl4srec'): -class Cl4SRecTrainSampler(TrainSampler, config_name="cl4srec"): def __init__( - self, - dataset, - num_users, - num_items, - item_crop_portion, - item_mask_portion, - item_reorder_portion, + self, + dataset, + num_users, + num_items, + item_crop_portion, + item_mask_portion, + item_reorder_portion ): super().__init__() self._dataset = dataset @@ -27,23 +28,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - item_crop_portion=config["item_crop_portion"], - item_mask_portion=config["item_mask_portion"], - item_reorder_portion=config["item_reorder_portion"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + item_crop_portion=config['item_crop_portion'], + item_mask_portion=config['item_mask_portion'], + item_reorder_portion=config['item_reorder_portion'] ) def _apply_crop_augmentation(self, item_sequence): num_elements_to_crop = max(1, int(self._item_crop_portion * len(item_sequence))) - crop_start_index = np.random.randint( - low=0, high=len(item_sequence) - num_elements_to_crop + 1 - ) + crop_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_crop + 1) assert 0 <= crop_start_index <= len(item_sequence) - num_elements_to_crop - item_sequence = item_sequence[ - crop_start_index : crop_start_index + num_elements_to_crop - ] + item_sequence = item_sequence[crop_start_index: crop_start_index + num_elements_to_crop] return item_sequence def _apply_mask_augmentation(self, item_sequence): @@ -68,28 +65,22 @@ def _apply_mask_augmentation(self, item_sequence): def _apply_reorder_augmentation(self, item_sequence): num_elements_to_reorder = int(self._item_reorder_portion * len(item_sequence)) - reorder_start_index = np.random.randint( - low=0, high=len(item_sequence) - num_elements_to_reorder + 1 - ) + reorder_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_reorder + 1) assert 0 <= reorder_start_index <= len(item_sequence) - num_elements_to_reorder - reordered_subsequence = item_sequence[ - reorder_start_index : reorder_start_index + num_elements_to_reorder - ] + reordered_subsequence = item_sequence[reorder_start_index: reorder_start_index + num_elements_to_reorder] np.random.shuffle(reordered_subsequence) # This works in-place - item_sequence = ( - item_sequence[:reorder_start_index] - + reordered_subsequence - + item_sequence[reorder_start_index + num_elements_to_reorder :] - ) + item_sequence = item_sequence[:reorder_start_index] \ + + reordered_subsequence \ + + item_sequence[reorder_start_index + num_elements_to_reorder:] return item_sequence def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] - sample_items = set(sample["item.ids"]) + sample_items = set(sample['item.ids']) negative = np.random.randint(low=1, high=self._num_items + 1) while negative in sample_items: negative = np.random.randint(low=1, high=self._num_items + 1) @@ -97,7 +88,7 @@ def __getitem__(self, index): augmentation_list = [ self._apply_crop_augmentation, self._apply_mask_augmentation, - self._apply_reorder_augmentation, + self._apply_reorder_augmentation ] fst_augmentation = np.random.choice(augmentation_list) @@ -107,28 +98,35 @@ def __getitem__(self, index): snd_augmented_sequence = snd_augmentation(item_sequence) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "fst_augmented_item.ids": fst_augmented_sequence, - "fst_augmented_item.length": len(fst_augmented_sequence), - "snd_augmented_item.ids": snd_augmented_sequence, - "snd_augmented_item.length": len(snd_augmented_sequence), - "labels.ids": [next_item], - "labels.length": 1, - "positive.ids": [next_item], - "positive.length": 1, - "negative.ids": [negative], - "negative.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'fst_augmented_item.ids': fst_augmented_sequence, + 'fst_augmented_item.length': len(fst_augmented_sequence), + + 'snd_augmented_item.ids': snd_augmented_sequence, + 'snd_augmented_item.length': len(snd_augmented_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1, + + 'positive.ids': [next_item], + 'positive.length': 1, + + 'negative.ids': [negative], + 'negative.length': 1 } -class Cl4SRecEvalSampler(EvalSampler, config_name="cl4srec"): +class Cl4SRecEvalSampler(EvalSampler, config_name='cl4srec'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/duorec.py b/modeling/dataset/samplers/duorec.py index f45ae100..a3067fdd 100644 --- a/modeling/dataset/samplers/duorec.py +++ b/modeling/dataset/samplers/duorec.py @@ -1,10 +1,12 @@ -import copy import random -from dataset.samplers.base import EvalSampler, TrainSampler +from dataset.samplers.base import TrainSampler, EvalSampler + +import copy + +class DuorecTrainSampler(TrainSampler, config_name='duorec'): -class DuorecTrainSampler(TrainSampler, config_name="duorec"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -14,15 +16,15 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] target_item = item_sequence[-1] item_sequence = item_sequence[:-1] @@ -31,22 +33,26 @@ def __getitem__(self, index): semantic_similar_sequence = random.choice(self._target_2_sequences[target_item]) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [target_item], - "labels.length": 1, - "semantic_similar_item.ids": semantic_similar_sequence, - "semantic_similar_item.length": len(semantic_similar_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'labels.ids': [target_item], + 'labels.length': 1, + + 'semantic_similar_item.ids': semantic_similar_sequence, + 'semantic_similar_item.length': len(semantic_similar_sequence) } -class DuoRecEvalSampler(EvalSampler, config_name="duorec"): +class DuoRecEvalSampler(EvalSampler, config_name='duorec'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/identity.py b/modeling/dataset/samplers/identity.py index 4b34b03e..ffe01e23 100644 --- a/modeling/dataset/samplers/identity.py +++ b/modeling/dataset/samplers/identity.py @@ -1,30 +1,35 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy -from dataset.samplers.base import EvalSampler, TrainSampler +class IdentityTrainSampler(TrainSampler, config_name='identity'): -class IdentityTrainSampler(TrainSampler, config_name="identity"): def __init__(self, dataset): super().__init__() self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"]) + return cls( + dataset=kwargs['dataset'] + ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) return sample -class IdentityEvalSampler(EvalSampler, config_name="identity"): +class IdentityEvalSampler(EvalSampler, config_name='identity'): def __init__(self, dataset): self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"]) - + return cls( + dataset=kwargs['dataset'] + ) + def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - return sample + return sample \ No newline at end of file diff --git a/modeling/dataset/samplers/last_item_prediction.py b/modeling/dataset/samplers/last_item_prediction.py index c9da6570..e6f9ba73 100644 --- a/modeling/dataset/samplers/last_item_prediction.py +++ b/modeling/dataset/samplers/last_item_prediction.py @@ -1,8 +1,11 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy from dataset.samplers.base import EvalSampler, TrainSampler from dataset.negative_samplers.base import BaseNegativeSampler +class LastItemPredictionTrainSampler(TrainSampler, config_name='last_item_prediction'): class LastItemPredictionTrainSampler(TrainSampler, config_name="last_item_prediction"): def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives): @@ -30,8 +33,8 @@ def create_from_config(cls, config, **kwargs): def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - last_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + last_item = sample['item.ids'][-1] if self._num_negatives == 0: return { @@ -59,11 +62,12 @@ def __getitem__(self, index): } -class LastItemPredictionEvalSampler(EvalSampler, config_name="last_item_prediction"): +class LastItemPredictionEvalSampler(EvalSampler, config_name='last_item_prediction'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/masked_item_prediction.py b/modeling/dataset/samplers/masked_item_prediction.py index 2243e7ca..0100f731 100644 --- a/modeling/dataset/samplers/masked_item_prediction.py +++ b/modeling/dataset/samplers/masked_item_prediction.py @@ -1,13 +1,11 @@ -import copy +from dataset.samplers.base import TrainSampler, EvalSampler +import copy import numpy as np -from dataset.samplers.base import EvalSampler, TrainSampler +class MaskedItemPredictionTrainSampler(TrainSampler, config_name='masked_item_prediction'): -class MaskedItemPredictionTrainSampler( - TrainSampler, config_name="masked_item_prediction" -): def __init__(self, dataset, num_users, num_items, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -19,16 +17,16 @@ def __init__(self, dataset, num_users, num_items, mask_prob=0.0): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - mask_prob=config.get("mask_prob", 0.0), + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + mask_prob=config.get('mask_prob', 0.0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] masked_sequence = [] labels = [] @@ -56,18 +54,19 @@ def __getitem__(self, index): labels[-1] = item_sequence[-1] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": masked_sequence, - "item.length": len(masked_sequence), - "labels.ids": labels, - "labels.length": len(labels), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': masked_sequence, + 'item.length': len(masked_sequence), + + 'labels.ids': labels, + 'labels.length': len(labels) } -class MaskedItemPredictionEvalSampler( - EvalSampler, config_name="masked_item_prediction" -): +class MaskedItemPredictionEvalSampler(EvalSampler, config_name='masked_item_prediction'): + def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) self._mask_item_idx = self._num_items + 1 @@ -75,22 +74,24 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] labels = [item_sequence[-1]] sequence = item_sequence[:-1] + [self._mask_item_idx] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": sequence, - "item.length": len(sequence), - "labels.ids": labels, - "labels.length": len(labels), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': sequence, + 'item.length': len(sequence), + + 'labels.ids': labels, + 'labels.length': len(labels) } diff --git a/modeling/dataset/samplers/mclsr.py b/modeling/dataset/samplers/mclsr.py index e3610547..2da0986c 100644 --- a/modeling/dataset/samplers/mclsr.py +++ b/modeling/dataset/samplers/mclsr.py @@ -1,9 +1,10 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy -from dataset.samplers.base import EvalSampler, TrainSampler +class MCLSRTrainSampler(TrainSampler, config_name='mclsr'): -class MCLSRTrainSampler(TrainSampler, config_name="mclsr"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -13,35 +14,39 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] - next_item_sequence = sample["item.ids"][1:] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] + next_item_sequence = sample['item.ids'][1:] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), - "labels.ids": [next_item], - "labels.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1 } -class MCLSRPredictionEvalSampler(EvalSampler, config_name="mclsr"): +class MCLSRPredictionEvalSampler(EvalSampler, config_name='mclsr'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/next_item_prediction.py b/modeling/dataset/samplers/next_item_prediction.py index cf9321ad..c141b065 100644 --- a/modeling/dataset/samplers/next_item_prediction.py +++ b/modeling/dataset/samplers/next_item_prediction.py @@ -1,13 +1,12 @@ +from dataset.samplers.base import TrainSampler, EvalSampler +from dataset.negative_samplers.base import BaseNegativeSampler + import copy -from dataset.negative_samplers.base import BaseNegativeSampler -from dataset.samplers.base import EvalSampler, TrainSampler +class NextItemPredictionTrainSampler(TrainSampler, config_name='next_item_prediction'): -class NextItemPredictionTrainSampler(TrainSampler, config_name="next_item_prediction"): - def __init__( - self, dataset, num_users, num_items, negative_sampler, num_negatives=0 - ): + def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives=0): super().__init__() self._dataset = dataset self._num_users = num_users @@ -17,32 +16,32 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config( - {"type": config["negative_sampler_type"]}, **kwargs - ) + negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], negative_sampler=negative_sampler, - num_negatives=config.get("num_negatives_train", 0), + num_negatives=config.get('num_negatives_train', 0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item_sequence = sample["item.ids"][1:] + item_sequence = sample['item.ids'][:-1] + next_item_sequence = sample['item.ids'][1:] if self._num_negatives == 0: return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence) } else: negative_sequence = self._negative_sampler.generate_negative_samples( @@ -50,22 +49,26 @@ def __getitem__(self, index): ) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), - "negative.ids": negative_sequence, - "negative.length": len(negative_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence), + + 'negative.ids': negative_sequence, + 'negative.length': len(negative_sequence) } -class NextItemPredictionEvalSampler(EvalSampler, config_name="next_item_prediction"): +class NextItemPredictionEvalSampler(EvalSampler, config_name='next_item_prediction'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/pop.py b/modeling/dataset/samplers/pop.py index 1d3ace34..afd8b208 100644 --- a/modeling/dataset/samplers/pop.py +++ b/modeling/dataset/samplers/pop.py @@ -1,12 +1,15 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy + from collections import Counter -from dataset.samplers.base import EvalSampler, TrainSampler CANDIDATE_COUNTS = None -class PopTrainSampler(TrainSampler, config_name="pop"): +class PopTrainSampler(TrainSampler, config_name='pop'): + def __init__(self, dataset, num_items): super().__init__() @@ -16,48 +19,49 @@ def __init__(self, dataset, num_items): item_2_count = Counter() for sample in dataset: - items = sample["item.ids"] + items = sample['item.ids'] for item in items: item_2_count[item] += 1 - CANDIDATE_COUNTS = ( - [0] - + [ - self._item_2_count[item_id] - for item_id in range(1, self._num_items + 1) - ] - + [0] - ) # Mask + items + padding - + CANDIDATE_COUNTS = [0] + [ + self._item_2_count[item_id] for item_id in range(1, self._num_items + 1) + ] + [0] # Mask + items + padding + @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"], num_items=kwargs["num_items"]) + return cls( + dataset=kwargs['dataset'], + num_items=kwargs['num_items'] + ) + +class PopEvalSampler(EvalSampler, config_name='pop'): -class PopEvalSampler(EvalSampler, config_name="pop"): def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - labels = [sample["item.ids"][-1]] + labels = [sample['item.ids'][-1]] global CANDIDATE_COUNTS assert CANDIDATE_COUNTS is not None return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "labels.ids": labels, - "labels.length": len(labels), - "candidates_counts.ids": CANDIDATE_COUNTS, - "candidates_counts.length": len(CANDIDATE_COUNTS), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'labels.ids': labels, + 'labels.length': len(labels), + + 'candidates_counts.ids': CANDIDATE_COUNTS, + 'candidates_counts.length': len(CANDIDATE_COUNTS) } diff --git a/modeling/dataset/samplers/s3rec.py b/modeling/dataset/samplers/s3rec.py index 73bf9ff4..d1b424cf 100644 --- a/modeling/dataset/samplers/s3rec.py +++ b/modeling/dataset/samplers/s3rec.py @@ -1,12 +1,12 @@ -import copy +from dataset.samplers.base import TrainSampler, EvalSampler +from dataset.negative_samplers.base import BaseNegativeSampler +import copy import numpy as np -from dataset.negative_samplers.base import BaseNegativeSampler -from dataset.samplers.base import EvalSampler, TrainSampler +class S3RecPretrainTrainSampler(TrainSampler, config_name='s3rec_pretrain'): -class S3RecPretrainTrainSampler(TrainSampler, config_name="s3rec_pretrain"): def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -18,29 +18,27 @@ def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0. self._long_sequence = [] for sample in self._dataset: - self._long_sequence.extend(copy.deepcopy(sample["item.ids"])) + self._long_sequence.extend(copy.deepcopy(sample['item.ids'])) @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config( - {"type": config["negative_sampler_type"]}, **kwargs - ) + negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], negative_sampler=negative_sampler, - mask_prob=config.get("mask_prob", 0.0), + mask_prob=config.get('mask_prob', 0.0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] if len(item_sequence) < 3: - assert False, "Something strange is happening" + assert False, 'Something strange is happening' # Masked Item Prediction masked_sequence = [] @@ -65,56 +63,48 @@ def __getitem__(self, index): # Mask last item masked_sequence[-1] = self._mask_item_idx positive_sequence[-1] = item_sequence[-1] - negative_sequence[-1] = self._negative_sampler.generate_negative_samples( - sample, 1 - )[0] - assert ( - len(positive_sequence) - == len(negative_sequence) - == len(masked_sequence) - == len(item_sequence) - ) + negative_sequence[-1] = self._negative_sampler.generate_negative_samples(sample, 1)[0] + assert len(positive_sequence) == len(negative_sequence) == len(masked_sequence) == len(item_sequence) # Segment Prediction sample_length = np.random.randint(1, (len(item_sequence) + 1) // 2) start_id = np.random.randint(0, len(item_sequence) - sample_length) - negative_start_id = np.random.randint( - 0, len(self._long_sequence) - sample_length - ) - masked_segment_sequence = ( - item_sequence[:start_id] - + [self._mask_item_idx] * sample_length - + item_sequence[start_id + sample_length :] - ) - positive_segment = item_sequence[start_id : start_id + sample_length] - negative_segment = self._long_sequence[ - negative_start_id : negative_start_id + sample_length - ] + negative_start_id = np.random.randint(0, len(self._long_sequence) - sample_length) + masked_segment_sequence = item_sequence[:start_id] + [self._mask_item_idx] * sample_length + item_sequence[start_id + sample_length:] + positive_segment = item_sequence[start_id: start_id + sample_length] + negative_segment = self._long_sequence[negative_start_id:negative_start_id + sample_length] assert len(positive_segment) == len(negative_segment) == sample_length return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": masked_sequence, - "item.length": len(masked_sequence), - "positive.ids": item_sequence, - "positive.length": len(item_sequence), - "negative.ids": negative_sequence, - "negative.length": len(negative_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': masked_sequence, + 'item.length': len(masked_sequence), + + 'positive.ids': item_sequence, + 'positive.length': len(item_sequence), + + 'negative.ids': negative_sequence, + 'negative.length': len(negative_sequence), + "item_segment.ids": masked_segment_sequence, "item_segment.length": len(masked_segment_sequence), - "positive_segment.ids": positive_segment, - "positive_segment.length": len(positive_segment), - "negative_segment.ids": negative_segment, - "negative_segment.length": len(negative_segment), + + 'positive_segment.ids': positive_segment, + 'positive_segment.length': len(positive_segment), + + 'negative_segment.ids': negative_segment, + 'negative_segment.length': len(negative_segment) } -class S3RecPretrainEvalSampler(EvalSampler, config_name="s3rec_pretrain"): +class S3RecPretrainEvalSampler(EvalSampler, config_name='s3rec_pretrain'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/infer.py b/modeling/infer.py index 5bd4664e..c3abe16c 100644 --- a/modeling/infer.py +++ b/modeling/infer.py @@ -1,14 +1,15 @@ -import datetime -import json +from utils import parse_args, create_logger, fix_random_seed, DEVICE + +from dataset import BaseDataset +from dataloader import BaseDataloader +from models import BaseModel, TorchModel +from metric import BaseMetric, StatefullMetric +import json import numpy as np import torch +import datetime -from dataloader import BaseDataloader -from dataset import BaseDataset -from metric import BaseMetric, StatefullMetric -from models import BaseModel, TorchModel -from utils import DEVICE, create_logger, fix_random_seed, parse_args logger = create_logger(name=__name__) seed_val = 42 @@ -24,6 +25,7 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): with torch.no_grad(): for idx, batch in enumerate(dataloader): + for key, value in batch.items(): batch[key] = value.to(DEVICE) batch[pred_prefix] = model(batch) @@ -32,62 +34,57 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): batch[key] = values.cpu() for metric_name, metric_function in metrics.items(): - running_metrics[metric_name].extend( - metric_function( - inputs=batch, - pred_prefix=pred_prefix, - labels_prefix=labels_prefix, - ) - ) - + running_metrics[metric_name].extend(metric_function( + inputs=batch, + pred_prefix=pred_prefix, + labels_prefix=labels_prefix, + )) + for metric_name, metric_function in metrics.items(): if isinstance(metric_function, StatefullMetric): - running_metrics[metric_name] = metric_function.reduce( - running_metrics[metric_name] - ) + running_metrics[metric_name] = metric_function.reduce(running_metrics[metric_name]) - logger.debug("Inference procedure has been finished!") - logger.debug("Metrics are the following:") + logger.debug('Inference procedure has been finished!') + logger.debug('Metrics are the following:') for metric_name, metric_value in running_metrics.items(): - logger.info("{}: {}".format(metric_name, np.mean(metric_value))) + logger.info('{}: {}'.format(metric_name, np.mean(metric_value))) def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug("Inference config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Inference config: \n{}'.format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) _, _, eval_dataset = dataset.get_samplers() eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=eval_dataset + config['dataloader']['validation'], + dataset=eval_dataset ) - model = BaseModel.create_from_config(config["model"], **dataset.meta) + model = BaseModel.create_from_config(config['model'], **dataset.meta) if isinstance(model, TorchModel): model = model.to(DEVICE) - checkpoint_path = "../checkpoints/{}_final_state.pth".format( - config["experiment_name"] - ) + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) model.load_state_dict(torch.load(checkpoint_path)) metrics = { - metric_name: BaseMetric.create_from_config(metric_cfg, **dataset.meta) - for metric_name, metric_cfg in config["metrics"].items() + metric_name: BaseMetric.create_from_config(metric_cfg , **dataset.meta) + for metric_name, metric_cfg in config['metrics'].items() } _ = inference( - dataloader=eval_dataloader, - model=model, - metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["label_prefix"], + dataloader=eval_dataloader, + model=model, + metrics=metrics, + pred_prefix=config['pred_prefix'], + labels_prefix=config['label_prefix'] ) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/loss/base.py b/modeling/loss/base.py index e5a6ce5c..8ec91326 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -1,11 +1,11 @@ import copy +from utils import MetaParent, get_activation_function, maybe_to_list, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from utils import DEVICE, MetaParent, get_activation_function, maybe_to_list - class BaseLoss(metaclass=MetaParent): pass @@ -15,12 +15,14 @@ class TorchLoss(BaseLoss, nn.Module): pass -class IdentityLoss(BaseLoss, config_name="identity"): +class IdentityLoss(BaseLoss, config_name='identity'): + def __call__(self, inputs): return inputs -class CompositeLoss(TorchLoss, config_name="composite"): +class CompositeLoss(TorchLoss, config_name='composite'): + def __init__(self, losses, weights=None, output_prefix=None): super().__init__() self._losses = losses @@ -32,16 +34,14 @@ def create_from_config(cls, config, **kwargs): losses = [] weights = [] - for loss_cfg in copy.deepcopy(config)["losses"]: - weight = loss_cfg.pop("weight") if "weight" in loss_cfg else 1.0 + for loss_cfg in copy.deepcopy(config)['losses']: + weight = loss_cfg.pop('weight') if 'weight' in loss_cfg else 1.0 loss_function = BaseLoss.create_from_config(loss_cfg) weights.append(weight) losses.append(loss_function) - return cls( - losses=losses, weights=weights, output_prefix=config.get("output_prefix") - ) + return cls(losses=losses, weights=weights, output_prefix=config.get('output_prefix')) def forward(self, inputs): total_loss = 0.0 @@ -53,8 +53,7 @@ def forward(self, inputs): return total_loss - -class SampleLogSoftmaxLoss(TorchLoss, config_name="sample_logsoftmax"): +class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): def __init__(self, predictions_prefix, labels): super().__init__() self._predictions_prefix = predictions_prefix @@ -63,38 +62,37 @@ def __init__(self, predictions_prefix, labels): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get("predictions_prefix"), - labels=config.get("labels"), + predictions_prefix=config.get('predictions_prefix'), + labels=config.get('labels') ) def forward(self, inputs): # use log soft max logits = inputs[self._predictions_prefix] candidates = inputs[self._labels] - + assert len(logits.shape) in [2, 3] - + batch_size = logits.shape[0] seq_len = logits.shape[1] - + if len(logits.shape) == 3: loss = -torch.gather( - torch.log_softmax(logits, dim=-1).reshape( - batch_size * seq_len, logits.shape[-1] - ), - dim=-1, - index=candidates.reshape(batch_size * seq_len, 1), + torch.log_softmax(logits, dim=-1).reshape(batch_size * seq_len, logits.shape[-1]), + dim=-1, + index=candidates.reshape(batch_size * seq_len, 1) ).mean() else: loss = -torch.gather( torch.log_softmax(logits, dim=-1), - dim=-1, - index=candidates.reshape(batch_size, 1), + dim=-1, + index=candidates.reshape(batch_size, 1) ).mean() - + return loss -class BatchLogSoftmaxLoss(TorchLoss, config_name="batch_logsoftmax"): +class BatchLogSoftmaxLoss(TorchLoss, config_name='batch_logsoftmax'): + def __init__(self, predictions_prefix, candidates_prefix): super().__init__() self._predictions_prefix = predictions_prefix @@ -103,8 +101,8 @@ def __init__(self, predictions_prefix, candidates_prefix): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get("predictions_prefix"), - candidates_prefix=config.get("candidates_prefix"), + predictions_prefix=config.get('predictions_prefix'), + candidates_prefix=config.get('candidates_prefix') ) def forward(self, inputs): # use log soft max @@ -123,7 +121,8 @@ def forward(self, inputs): # use log soft max return loss -class CrossEntropyLoss(TorchLoss, config_name="ce"): +class CrossEntropyLoss(TorchLoss, config_name='ce'): + def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): super().__init__() self._pred_prefix = predictions_prefix @@ -134,7 +133,7 @@ def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): def forward(self, inputs): all_logits = inputs[self._pred_prefix] # (all_items, num_classes) - all_labels = inputs["{}.ids".format(self._labels_prefix)] # (all_items) + all_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_items) assert all_logits.shape[0] == all_labels.shape[0] loss = self._loss(all_logits, all_labels) # (1) @@ -142,48 +141,55 @@ def forward(self, inputs): inputs[self._output_prefix] = loss.cpu().item() return loss + +class RqVaeLoss(TorchLoss, config_name='rqvae_loss'): - -class RqVaeLoss(TorchLoss, config_name="rqvae_loss"): def __init__(self, beta, output_prefix=None): super().__init__() self.beta = beta self._output_prefix = output_prefix - + self._loss = nn.MSELoss() - + @classmethod def create_from_config(cls, config, **kwargs): # 0.25 is default Beta in paper return cls( - beta=config.get("beta", 0.25), - output_prefix=config["output_prefix"], + beta = config.get('beta', 0.25), + output_prefix = config['output_prefix'], ) - + def forward(self, inputs): embeddings = inputs["embeddings"] embeddings_restored = inputs["embeddings_restored"] remainders = inputs["remainders"] codebooks_vectors = inputs["codebooks_vectors"] - + rqvae_loss = 0 - + for remainder, codebook_vectors in zip(remainders, codebooks_vectors): - rqvae_loss += self.beta * self._loss(remainder, codebook_vectors.detach()) + rqvae_loss += self.beta * self._loss( + remainder, codebook_vectors.detach() + ) rqvae_loss += self._loss(codebook_vectors, remainder.detach()) - + recon_loss = self._loss(embeddings_restored, embeddings) loss = (recon_loss + rqvae_loss).mean(dim=0) - + if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() - + return loss -class BinaryCrossEntropyLoss(TorchLoss, config_name="bce"): +class BinaryCrossEntropyLoss(TorchLoss, config_name='bce'): + def __init__( - self, predictions_prefix, labels_prefix, with_logits=True, output_prefix=None + self, + predictions_prefix, + labels_prefix, + with_logits=True, + output_prefix=None ): super().__init__() self._pred_prefix = predictions_prefix @@ -207,8 +213,14 @@ def forward(self, inputs): return loss -class BPRLoss(TorchLoss, config_name="bpr"): - def __init__(self, positive_prefix, negative_prefix, output_prefix=None): +class BPRLoss(TorchLoss, config_name='bpr'): + + def __init__( + self, + positive_prefix, + negative_prefix, + output_prefix=None + ): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -225,7 +237,8 @@ def forward(self, inputs): return loss -class RegularizationLoss(TorchLoss, config_name="regularization"): +class RegularizationLoss(TorchLoss, config_name='regularization'): + def __init__(self, prefix, output_prefix=None): super().__init__() self._prefix = maybe_to_list(prefix) @@ -234,7 +247,7 @@ def __init__(self, prefix, output_prefix=None): def forward(self, inputs): loss = 0.0 for prefix in self._prefix: - loss += (1 / 2) * inputs[prefix].pow(2).mean() + loss += (1/2) * inputs[prefix].pow(2).mean() if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() @@ -242,23 +255,22 @@ def forward(self, inputs): return loss -class FpsLoss(TorchLoss, config_name="fps"): +class FpsLoss(TorchLoss, config_name='fps'): + def __init__( - self, - fst_embeddings_prefix, - snd_embeddings_prefix, - tau=1.0, - normalize_embeddings=False, - use_mean=True, - output_prefix=None, + self, + fst_embeddings_prefix, + snd_embeddings_prefix, + tau=1.0, + normalize_embeddings=False, + use_mean=True, + output_prefix=None ): super().__init__() self._fst_embeddings_prefix = fst_embeddings_prefix self._snd_embeddings_prefix = snd_embeddings_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss( - reduction="mean" if use_mean else "sum" - ) + self._loss_function = nn.CrossEntropyLoss(reduction='mean' if use_mean else 'sum') self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix @@ -268,49 +280,34 @@ def forward(self, inputs): batch_size = fst_embeddings.shape[0] - combined_embeddings = torch.cat( - (fst_embeddings, snd_embeddings), dim=0 - ) # (2 * x, embedding_dim) + combined_embeddings = torch.cat((fst_embeddings, snd_embeddings), dim=0) # (2 * x, embedding_dim) if self._normalize_embeddings: combined_embeddings = torch.nn.functional.normalize( combined_embeddings, p=2, dim=-1, eps=1e-6 ) # (2 * x, embedding_dim) - similarity_scores = ( - torch.mm(combined_embeddings, combined_embeddings.T) / self._tau - ) # (2 * x, 2 * x) + similarity_scores = torch.mm( + combined_embeddings, + combined_embeddings.T + ) / self._tau # (2 * x, 2 * x) positive_samples = torch.cat( - ( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ), - dim=0, + (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), + dim=0 ).reshape(2 * batch_size, 1) # (2 * x, 1) - assert torch.allclose( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ) + assert torch.allclose(torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)) - mask = torch.ones( - 2 * batch_size, 2 * batch_size, dtype=torch.bool - ) # (2 * x, 2 * x) + mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape( - 2 * batch_size, -1 - ) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) - labels = ( - torch.zeros(2 * batch_size).to(positive_samples.device).long() - ) # (2 * x) - logits = torch.cat( - (positive_samples, negative_samples), dim=1 - ) # (2 * x, 2 * x - 1) + labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) + logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) @@ -343,8 +340,14 @@ def forward(self, inputs): return loss -class SASRecLoss(TorchLoss, config_name="sasrec"): - def __init__(self, positive_prefix, negative_prefix, output_prefix=None): +class SASRecLoss(TorchLoss, config_name='sasrec'): + + def __init__( + self, + positive_prefix, + negative_prefix, + output_prefix=None + ): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -354,40 +357,27 @@ def forward(self, inputs): positive_scores = inputs[self._positive_prefix] # (x, embedding_dim) negative_scores = inputs[self._negative_prefix] # (x, embedding_dim) sample_ids = inputs["sample_ids"] - + num_items = negative_scores.shape[1] - 2 - - possible_indices = torch.arange( - 1, num_items + 1, device=negative_scores.device - ) # 1, 2, ... num_items - mask = torch.ones_like( - possible_indices, dtype=torch.bool - ) # True, True, ... True - mask[sample_ids - 1] = False # True, False, ... False, True, ... True - valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids - - rand_idx = torch.randint( - 0, - len(valid_indices), - size=(negative_scores.shape[0], 1), - device=negative_scores.device, - ) + + possible_indices = torch.arange(1, num_items + 1, device=negative_scores.device) # 1, 2, ... num_items + mask = torch.ones_like(possible_indices, dtype=torch.bool) # True, True, ... True + mask[sample_ids - 1] = False # True, False, ... False, True, ... True + valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids + + rand_idx = torch.randint(0, len(valid_indices), size=(negative_scores.shape[0], 1), device=negative_scores.device) index = valid_indices[rand_idx] - + negative_scores = torch.gather( input=negative_scores, dim=1, index=index, ) - + assert positive_scores.shape[0] == negative_scores.shape[0] - positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum( - dim=-1 - ) # (x) - negative_loss = torch.log( - 1.0 - nn.functional.sigmoid(negative_scores) + 1e-9 - ).sum(dim=-1) # (x), added 1e-9 for Tiger baseline + positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum(dim=-1) # (x) + negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores) + 1e-9).sum(dim=-1) # (x), added 1e-9 for Tiger baseline loss = positive_loss + negative_loss # (x) loss = -loss.sum() # (1) @@ -397,9 +387,14 @@ def forward(self, inputs): return loss -class SamplesSoftmaxLoss(TorchLoss, config_name="sampled_softmax"): +class SamplesSoftmaxLoss(TorchLoss, config_name='sampled_softmax'): + def __init__( - self, queries_prefix, positive_prefix, negative_prefix, output_prefix=None + self, + queries_prefix, + positive_prefix, + negative_prefix, + output_prefix=None ): super().__init__() self._queries_prefix = queries_prefix @@ -409,6 +404,7 @@ def __init__( def forward(self, inputs): queries_embeddings = inputs[self._queries_prefix] # (batch_size, embedding_dim) + # TODOPK check positive_ids, positive_embeddings = inputs[ self._positive_prefix ] # (batch_size, embedding_dim) @@ -418,13 +414,17 @@ def forward(self, inputs): # b -- batch_size, d -- embedding_dim positive_scores = torch.einsum( - "bd,bd->b", queries_embeddings, positive_embeddings + 'bd,bd->b', + queries_embeddings, + positive_embeddings ).unsqueeze(-1) # (batch_size, 1) if negative_embeddings.dim() == 2: # (num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - "bd,nd->bn", queries_embeddings, negative_embeddings + 'bd,nd->bn', + queries_embeddings, + negative_embeddings ) # (batch_size, num_negatives) all_scores = torch.cat( @@ -436,12 +436,12 @@ def forward(self, inputs): loss = (-logits)[:, 0] # (batch_size) loss = loss.mean() # (1) else: - assert ( - negative_embeddings.dim() == 3 - ) # (batch_size, num_negatives, embedding_dim) + assert negative_embeddings.dim() == 3 # (batch_size, num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - "bd,bnd->bn", queries_embeddings, negative_embeddings + 'bd,bnd->bn', + queries_embeddings, + negative_embeddings ) # (batch_size, num_negatives) assert False, "ask Vladimir wtf is it " @@ -452,13 +452,14 @@ def forward(self, inputs): return loss -class S3RecPretrainLoss(TorchLoss, config_name="s3rec_pretrain"): +class S3RecPretrainLoss(TorchLoss, config_name='s3rec_pretrain'): + def __init__( - self, - positive_prefix, - negative_prefix, - representation_prefix, - output_prefix=None, + self, + positive_prefix, + negative_prefix, + representation_prefix, + output_prefix=None ): super().__init__() self._positive_prefix = positive_prefix @@ -471,39 +472,36 @@ def forward(self, inputs): positive_embeddings = inputs[self._positive_prefix] # (x, embedding_dim) negative_embeddings = inputs[self._negative_prefix] # (x, embedding_dim) current_embeddings = inputs[self._representation_prefix] # (x, embedding_dim) - assert ( - positive_embeddings.shape[0] - == negative_embeddings.shape[0] - == current_embeddings.shape[0] - ) + assert positive_embeddings.shape[0] == negative_embeddings.shape[0] == current_embeddings.shape[0] positive_scores = torch.einsum( - "bd,bd->b", positive_embeddings, current_embeddings + 'bd,bd->b', + positive_embeddings, + current_embeddings ) # (x) negative_scores = torch.einsum( - "bd,bd->b", negative_embeddings, current_embeddings + 'bd,bd->b', + negative_embeddings, + current_embeddings ) # (x) - distance = torch.sigmoid(positive_scores) - torch.sigmoid( - negative_scores - ) # (x) - loss = torch.sum( - self._criterion(distance, torch.ones_like(distance, dtype=torch.float32)) - ) # (1) + distance = torch.sigmoid(positive_scores) - torch.sigmoid(negative_scores) # (x) + loss = torch.sum(self._criterion(distance, torch.ones_like(distance, dtype=torch.float32))) # (1) if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() return loss -class Cl4sRecLoss(TorchLoss, config_name="cl4srec"): +class Cl4sRecLoss(TorchLoss, config_name='cl4srec'): + def __init__( - self, - current_representation, - all_items_representation, - tau=1.0, - output_prefix=None, + self, + current_representation, + all_items_representation, + tau=1.0, + output_prefix=None ): super().__init__() self._current_representation = current_representation @@ -513,9 +511,7 @@ def __init__( self._output_prefix = output_prefix def forward(self, inputs): - current_representation = inputs[ - self._current_representation - ] # (batch_size, embedding_dim) + current_representation = inputs[self._current_representation] # (batch_size, embedding_dim) all_items_representation = inputs[ self._all_items_representation ] # (batch_size, num_negatives + 1, embedding_dim) @@ -523,7 +519,9 @@ def forward(self, inputs): batch_size = current_representation.shape[0] logits = torch.einsum( - "bnd,bd->bn", all_items_representation, current_representation + 'bnd,bd->bn', + all_items_representation, + current_representation ) # (batch_size, num_negatives + 1) labels = logits.new_zeros(batch_size) # (batch_size) @@ -535,15 +533,16 @@ def forward(self, inputs): return loss -class DuorecSSLLoss(TorchLoss, config_name="duorec_ssl"): +class DuorecSSLLoss(TorchLoss, config_name='duorec_ssl'): + def __init__( - self, - original_embedding_prefix, - dropout_embedding_prefix, - similar_embedding_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None, + self, + original_embedding_prefix, + dropout_embedding_prefix, + similar_embedding_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None ): super().__init__() self._original_embedding_prefix = original_embedding_prefix @@ -552,13 +551,14 @@ def __init__( self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss(reduction="mean") + self._loss_function = nn.CrossEntropyLoss(reduction='mean') def _compute_partial_loss(self, fst_embeddings, snd_embeddings): batch_size = fst_embeddings.shape[0] combined_embeddings = torch.cat( - (fst_embeddings, snd_embeddings), dim=0 + (fst_embeddings, snd_embeddings), + dim=0 ) # (2 * x, embedding_dim) if self._normalize_embeddings: @@ -566,76 +566,59 @@ def _compute_partial_loss(self, fst_embeddings, snd_embeddings): combined_embeddings, p=2, dim=-1, eps=1e-6 ) - similarity_scores = ( - torch.mm(combined_embeddings, combined_embeddings.T) / self._tau - ) # (2 * x, 2 * x) + similarity_scores = torch.mm( + combined_embeddings, + combined_embeddings.T + ) / self._tau # (2 * x, 2 * x) positive_samples = torch.cat( - ( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ), - dim=0, + (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), + dim=0 ).reshape(2 * batch_size, 1) # (2 * x, 1) # TODO optimize - mask = torch.ones( - 2 * batch_size, 2 * batch_size, dtype=torch.bool - ) # (2 * x, 2 * x) + mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape( - 2 * batch_size, -1 - ) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) - labels = ( - torch.zeros(2 * batch_size).to(positive_samples.device).long() - ) # (2 * x) - logits = torch.cat( - (positive_samples, negative_samples), dim=1 - ) # (2 * x, 2 * x - 1) + labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) + logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) return loss def forward(self, inputs): - original_embeddings = inputs[ - self._original_embedding_prefix - ] # (x, embedding_dim) - dropout_embeddings = inputs[ - self._dropout_embedding_prefix - ] # (x, embedding_dim) - similar_embeddings = inputs[ - self._similar_embedding_prefix - ] # (x, embedding_dim) - - dropout_loss = self._compute_partial_loss( - original_embeddings, dropout_embeddings - ) + original_embeddings = inputs[self._original_embedding_prefix] # (x, embedding_dim) + dropout_embeddings = inputs[self._dropout_embedding_prefix] # (x, embedding_dim) + similar_embeddings = inputs[self._similar_embedding_prefix] # (x, embedding_dim) + + dropout_loss = self._compute_partial_loss(original_embeddings, dropout_embeddings) ssl_loss = self._compute_partial_loss(original_embeddings, similar_embeddings) loss = dropout_loss + ssl_loss if self._output_prefix is not None: - inputs[f"{self._output_prefix}_dropout"] = dropout_loss.cpu().item() - inputs[f"{self._output_prefix}_ssl"] = ssl_loss.cpu().item() + inputs[f'{self._output_prefix}_dropout'] = dropout_loss.cpu().item() + inputs[f'{self._output_prefix}_ssl'] = ssl_loss.cpu().item() inputs[self._output_prefix] = loss.cpu().item() return loss -class MCLSRLoss(TorchLoss, config_name="mclsr"): +class MCLSRLoss(TorchLoss, config_name='mclsr'): + def __init__( - self, - all_scores_prefix, - mask_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None, + self, + all_scores_prefix, + mask_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None ): super().__init__() self._all_scores_prefix = all_scores_prefix @@ -645,9 +628,7 @@ def __init__( self._tau = tau def forward(self, inputs): - all_scores = inputs[ - self._all_scores_prefix - ] # (batch_size, batch_size, seq_len) + all_scores = inputs[self._all_scores_prefix] # (batch_size, batch_size, seq_len) mask = inputs[self._mask_prefix] # (batch_size) batch_size = mask.shape[0] @@ -657,7 +638,8 @@ def forward(self, inputs): positive_scores = all_scores[positive_mask] # (batch_size, seq_len) negative_scores = torch.reshape( - all_scores[~positive_mask], shape=(batch_size, batch_size - 1, seq_len) + all_scores[~positive_mask], + shape=(batch_size, batch_size - 1, seq_len) ) # (batch_size, batch_size - 1, seq_len) assert torch.allclose(all_scores[0, 1], negative_scores[0, 0]) assert torch.allclose(all_scores[-1, -2], negative_scores[-1, -1]) diff --git a/modeling/metric/base.py b/modeling/metric/base.py index e22c1d20..677f9086 100644 --- a/modeling/metric/base.py +++ b/modeling/metric/base.py @@ -1,18 +1,19 @@ -import torch - from utils import MetaParent +import torch + class BaseMetric(metaclass=MetaParent): pass class StatefullMetric(BaseMetric): + def reduce(self): raise NotImplementedError -class StaticMetric(BaseMetric, config_name="dummy"): +class StaticMetric(BaseMetric, config_name='dummy'): def __init__(self, name, value): self._name = name self._value = value @@ -23,15 +24,17 @@ def __call__(self, inputs): return inputs -class CompositeMetric(BaseMetric, config_name="composite"): +class CompositeMetric(BaseMetric, config_name='composite'): + def __init__(self, metrics): self._metrics = metrics @classmethod def create_from_config(cls, config): - return cls( - metrics=[BaseMetric.create_from_config(cfg) for cfg in config["metrics"]] - ) + return cls(metrics=[ + BaseMetric.create_from_config(cfg) + for cfg in config['metrics'] + ]) def __call__(self, inputs): for metric in self._metrics: @@ -39,63 +42,57 @@ def __call__(self, inputs): return inputs -class NDCGMetric(BaseMetric, config_name="ndcg"): +class NDCGMetric(BaseMetric, config_name='ndcg'): + def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) - labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) + labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq( - predictions, labels[..., None] - ).float() # (batch_size, top_k_indices) - discount_factor = 1 / torch.log2( - torch.arange(1, self._k + 1, 1).float() + 1.0 - ).to(hits.device) # (k) - dcg = torch.einsum("bk,k->b", hits, discount_factor) # (batch_size) + hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) + discount_factor = 1 / torch.log2(torch.arange(1, self._k + 1, 1).float() + 1.).to(hits.device) # (k) + dcg = torch.einsum('bk,k->b', hits, discount_factor) # (batch_size) return dcg.cpu().tolist() -class RecallMetric(BaseMetric, config_name="recall"): +class RecallMetric(BaseMetric, config_name='recall'): + def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) - labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) + labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq( - predictions, labels[..., None] - ).float() # (batch_size, top_k_indices) + hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) recall = hits.sum(dim=-1) # (batch_size) return recall.cpu().tolist() -class CoverageMetric(StatefullMetric, config_name="coverage"): +class CoverageMetric(StatefullMetric, config_name='coverage'): + def __init__(self, k, num_items): self._k = k self._num_items = num_items - + @classmethod def create_from_config(cls, config, **kwargs): - return cls(k=config["k"], num_items=kwargs["num_items"]) + return cls( + k=config['k'], + num_items=kwargs['num_items'] + ) def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) return predictions.view(-1).long().cpu().detach().tolist() # (batch_size * k) - + def reduce(self, values): return len(set(values)) / self._num_items diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 377a703d..71fc9643 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -14,9 +14,9 @@ from .random import RandomModel from .rqvae import RqVaeModel from .s3rec import S3RecModel -from .sasrec_in_batch import SasRecInBatchModel from .sasrec_ce import SasRecCeModel from .sasrec_full import SasRecFullModel +from .sasrec_in_batch import SasRecInBatchModel from .sasrec_real import SasRecRealModel from .sasrec_semantic import SasRecSemanticModel from .tiger import TigerModel diff --git a/modeling/models/base.py b/modeling/models/base.py index 786ef12c..a1384384 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn - from utils import DEVICE, MetaParent, create_masked_tensor, get_activation_function @@ -9,42 +8,39 @@ class BaseModel(metaclass=MetaParent): class TorchModel(nn.Module, BaseModel): + @torch.no_grad() def _init_weights(self, initializer_range): for key, value in self.named_parameters(): - if "weight" in key: - if "norm" in key: + if 'weight' in key: + if 'norm' in key: nn.init.ones_(value.data) else: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range, + b=2 * initializer_range ) - elif "bias" in key: + elif 'bias' in key: nn.init.zeros_(value.data) - elif "codebook" in key: + elif 'codebook' in key: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range, + b=2 * initializer_range ) else: - raise ValueError(f"Unknown transformer weight: {key}") + raise ValueError(f'Unknown transformer weight: {key}') @staticmethod def _get_last_embedding(embeddings, mask): lengths = torch.sum(mask, dim=-1) # (batch_size) - lengths = lengths - 1 # (batch_size) + lengths = (lengths - 1) # (batch_size) last_masks = mask.gather(dim=1, index=lengths[:, None]) # (batch_size, 1) - lengths = torch.tile( - lengths[:, None, None], (1, 1, embeddings.shape[-1]) - ) # (batch_size, 1, emb_dim) - last_embeddings = embeddings.gather( - dim=1, index=lengths - ) # (batch_size, 1, emb_dim) + lengths = torch.tile(lengths[:, None, None], (1, 1, embeddings.shape[-1])) # (batch_size, 1, emb_dim) + last_embeddings = embeddings.gather(dim=1, index=lengths) # (batch_size, 1, emb_dim) last_embeddings = last_embeddings[last_masks] # (batch_size, emb_dim) if not torch.allclose(embeddings[mask][-1], last_embeddings[-1]): print(embeddings) @@ -56,18 +52,19 @@ def _get_last_embedding(embeddings, mask): class SequentialTorchModel(TorchModel): + def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - is_causal=True, + self, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + is_causal=True ): super().__init__() self._is_causal = is_causal @@ -77,12 +74,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -95,10 +91,10 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True, + batch_first=True ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - + def get_item_embeddings(self, events): return self._item_embeddings(events) @@ -112,7 +108,8 @@ def _apply_sequential_encoder( assert embeddings.shape[0] == sum(lengths) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] @@ -121,9 +118,7 @@ def _apply_sequential_encoder( position_embeddings = self._encoder_pos_embeddings(lengths, mask) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -134,10 +129,7 @@ def _apply_sequential_encoder( cls_token_tensor = self._cls_token.unsqueeze(0).unsqueeze(0) cls_token_expanded = torch.tile(cls_token_tensor, (batch_size, 1, 1)) embeddings = torch.cat((cls_token_expanded, embeddings), dim=1) - mask = torch.cat( - (torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), - dim=1, - ) + mask = torch.cat((torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), dim=1) if user_embeddings is not None: embeddings = torch.cat((user_embeddings.unsqueeze(1), embeddings), dim=1) @@ -148,15 +140,16 @@ def _apply_sequential_encoder( seq_len += 1 # TODOPK ask if this is correct if self._is_causal: - causal_mask = ( - torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) - ) # (seq_len, seq_len) + causal_mask = torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( - src=embeddings, mask=~causal_mask, src_key_padding_mask=~mask + src=embeddings, + mask=~causal_mask, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, src_key_padding_mask=~mask + src=embeddings, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) return embeddings, mask @@ -165,19 +158,16 @@ def _encoder_pos_embeddings(self, lengths, mask): batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) return position_embeddings @@ -187,18 +177,17 @@ def _add_cls_token(items, lengths, cls_token_id=0): batch_size = lengths.shape[0] num_new_items = num_items + batch_size - new_items = ( - torch.ones(num_new_items, dtype=items.dtype, device=items.device) - * cls_token_id - ) # (num_new_items) + new_items = torch.ones( + num_new_items, + dtype=items.dtype, + device=items.device + ) * cls_token_id # (num_new_items) old_items_mask = torch.zeros_like(new_items).bool() # (num_new_items) old_items_mask = ~old_items_mask.scatter( src=torch.ones_like(lengths).bool(), dim=0, - index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum( - dim=0 - )[:-1], + index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum(dim=0)[:-1] ) # (num_new_items) new_items[old_items_mask] = items new_length = lengths + 1 diff --git a/modeling/models/bert4rec.py b/modeling/models/bert4rec.py index 69794fb6..40f1d331 100644 --- a/modeling/models/bert4rec.py +++ b/modeling/models/bert4rec.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class Bert4RecModel(SequentialTorchModel, config_name='bert4rec'): -class Bert4RecModel(SequentialTorchModel, config_name="bert4rec"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="gelu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='gelu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,77 +31,70 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False, + is_causal=False ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) if self.training: # training mode - all_sample_labels = inputs[ - "{}.ids".format(self._labels_prefix) - ] # (all_batch_events) + all_sample_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_batch_events) embeddings = embeddings[mask] # (all_batch_events, num_items) labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) needed_logits = embeddings[labels_mask] # (non_zero_events, num_items) needed_labels = all_sample_labels[labels_mask] # (non_zero_events) - return {"logits": needed_logits, "labels.ids": needed_labels} + return {'logits': needed_logits, 'labels.ids': needed_labels} else: # eval mode - candidate_scores = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items) + candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/bert4rec_cls.py b/modeling/models/bert4rec_cls.py index c0bbc61a..d6e59b0a 100644 --- a/modeling/models/bert4rec_cls.py +++ b/modeling/models/bert4rec_cls.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class Bert4RecModelCLS(SequentialTorchModel, config_name='bert4rec_cls'): -class Bert4RecModelCLS(SequentialTorchModel, config_name="bert4rec_cls"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="gelu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='gelu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,16 +31,20 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False, + is_causal=False ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @@ -48,50 +53,48 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, lengths=all_sample_lengths, add_cls_token=True + events=all_sample_events, + lengths=all_sample_lengths, + add_cls_token=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) predictions = embeddings[:, 0, :] # (batch_size, embedding_dim) if self.training: # training mode candidates = self._item_embeddings( - inputs["{}.ids".format(self._labels_prefix)] - ) # (batch_size, embedding_dim) + inputs['{}.ids'.format(self._labels_prefix)]) # (batch_size, embedding_dim) - return {"predictions": predictions, "candidates": candidates} + return {'predictions': predictions, 'candidates': candidates} else: # eval mode candidate_scores = torch.einsum( - "bd,nd->bn", predictions, self._item_embeddings.weight + 'bd,nd->bn', + predictions, + self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/cl4srec.py b/modeling/models/cl4srec.py index e1bf7152..945c2a92 100644 --- a/modeling/models/cl4srec.py +++ b/modeling/models/cl4srec.py @@ -1,27 +1,28 @@ +from models.base import SequentialTorchModel + import torch -from models.base import SequentialTorchModel +class Cl4SRecModel(SequentialTorchModel, config_name='cl4srec'): -class Cl4SRecModel(SequentialTorchModel, config_name="cl4srec"): def __init__( - self, - sequence_prefix, - fst_augmented_sequence_prefix, - snd_augmented_sequence_prefix, - positive_prefix, - negative_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + fst_augmented_sequence_prefix, + snd_augmented_sequence_prefix, + positive_prefix, + negative_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -33,7 +34,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._fst_augmented_sequence_prefix = fst_augmented_sequence_prefix @@ -46,56 +47,51 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - fst_augmented_sequence_prefix=config["fst_augmented_sequence_prefix"], - snd_augmented_sequence_prefix=config["snd_augmented_sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - num_layers=config["num_layers"], - num_heads=config["num_heads"], - embedding_dim=config["embedding_dim"], - dim_feedforward=config["dim_feedforward"], - dropout=config["dropout"], - activation=config["activation"], - layer_norm_eps=config["layer_norm_eps"], - initializer_range=config["initializer_range"], + sequence_prefix=config['sequence_prefix'], + fst_augmented_sequence_prefix=config['fst_augmented_sequence_prefix'], + snd_augmented_sequence_prefix=config['snd_augmented_sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + num_layers=config['num_layers'], + num_heads=config['num_heads'], + embedding_dim=config['embedding_dim'], + dim_feedforward=config['dim_feedforward'], + dropout=config['dropout'], + activation=config['activation'], + layer_norm_eps=config['layer_norm_eps'], + initializer_range=config['initializer_range'] ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) # TODO remove this check - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), self._item_embeddings.weight[labels] + self._item_embeddings(labels), + self._item_embeddings.weight[labels] ) all_fst_aug_sample_events = inputs[ - "{}.ids".format(self._fst_augmented_sequence_prefix) + '{}.ids'.format(self._fst_augmented_sequence_prefix) ] # (all_batch_events) - all_fst_aug_sample_lengths = inputs[ - "{}.length".format(self._fst_augmented_sequence_prefix) - ] # (batch_size) + all_fst_aug_sample_lengths = inputs['{}.length'.format(self._fst_augmented_sequence_prefix)] # (batch_size) fst_aug_embeddings, fst_aug_mask = self._apply_sequential_encoder( all_fst_aug_sample_events, all_fst_aug_sample_lengths ) # (batch_size, fst_aug_seq_len, embedding_dim), (batch_size, fst_aug_seq_len) @@ -104,11 +100,9 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) all_snd_aug_sample_events = inputs[ - "{}.ids".format(self._snd_augmented_sequence_prefix) + '{}.ids'.format(self._snd_augmented_sequence_prefix) ] # (all_batch_events) - all_snd_aug_sample_lengths = inputs[ - "{}.length".format(self._snd_augmented_sequence_prefix) - ] # (batch_size) + all_snd_aug_sample_lengths = inputs['{}.length'.format(self._snd_augmented_sequence_prefix)] # (batch_size) snd_aug_embeddings, snd_aug_mask = self._apply_sequential_encoder( all_snd_aug_sample_events, all_snd_aug_sample_lengths ) # (batch_size, snd_aug_seq_len, embedding_dim), (batch_size, snd_aug_seq_len) @@ -117,23 +111,24 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) return { - "logits": items_logits, - "sequence_representation": last_embeddings, - "fst_aug_sequence_representation": last_fst_aug_embeddings, - "snd_aug_sequence_representation": last_snd_aug_embeddings, + 'logits': items_logits, + 'sequence_representation': last_embeddings, + 'fst_aug_sequence_representation': last_fst_aug_embeddings, + 'snd_aug_sequence_representation': last_snd_aug_embeddings } else: # eval mode - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/duorec.py b/modeling/models/duorec.py index 68f9df33..380a6675 100644 --- a/modeling/models/duorec.py +++ b/modeling/models/duorec.py @@ -1,27 +1,29 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel from utils import create_masked_tensor -class DuoRecModel(SequentialTorchModel, config_name="duorec"): +class DuoRecModel(SequentialTorchModel, config_name='duorec'): + def __init__( - self, - sequence_prefix, - augmented_sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, - is_causal=True, + self, + sequence_prefix, + augmented_sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02, + is_causal=True ): super().__init__( num_items=num_items, @@ -33,7 +35,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_causal, + is_causal=is_causal ) self._sequence_prefix = sequence_prefix self._augmented_sequence_prefix = augmented_sequence_prefix @@ -47,19 +49,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - augmented_sequence_prefix=config["augmented_sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - num_layers=config["num_layers"], - num_heads=config["num_heads"], - embedding_dim=config["embedding_dim"], - dim_feedforward=config["dim_feedforward"], - dropout=config["dropout"], - activation=config["activation"], - layer_norm_eps=config["layer_norm_eps"], - initializer_range=config["initializer_range"], + sequence_prefix=config['sequence_prefix'], + augmented_sequence_prefix=config['augmented_sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + num_layers=config['num_layers'], + num_heads=config['num_heads'], + embedding_dim=config['embedding_dim'], + dim_feedforward=config['dim_feedforward'], + dropout=config['dropout'], + activation=config['activation'], + layer_norm_eps=config['layer_norm_eps'], + initializer_range=config['initializer_range'] ) # TODO taken from duorec github @@ -75,53 +77,47 @@ def _init_weights(self, module): module.bias.data.zero_() def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) training_output = { - "logits": items_logits, - "sequence_representation": last_embeddings, + 'logits': items_logits, + 'sequence_representation': last_embeddings } # TODO remove this check - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), self._item_embeddings.weight[labels] + self._item_embeddings(labels), + self._item_embeddings.weight[labels] ) # Unsupervised Augmentation embeddings_, mask_ = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings_ = self._get_last_embedding( - embeddings_, mask_ - ) # (batch_size, embedding_dim) - training_output["similar_sequence_representation"] = last_embeddings_ - assert not torch.allclose(last_embeddings, last_embeddings_), ( - "Embedding must be different because of dropout" - ) + last_embeddings_ = self._get_last_embedding(embeddings_, mask_) # (batch_size, embedding_dim) + training_output['similar_sequence_representation'] = last_embeddings_ + assert not torch.allclose(last_embeddings, last_embeddings_), \ + 'Embedding must be different because of dropout' # Semantic Similarity all_sample_augmented_events = inputs[ - "{}.ids".format(self._augmented_sequence_prefix) + '{}.ids'.format(self._augmented_sequence_prefix) ] # (all_batch_events) all_sample_augmented_lengths = inputs[ - "{}.length".format(self._augmented_sequence_prefix) + '{}.length'.format(self._augmented_sequence_prefix) ] # (batch_size) augmented_embeddings, augmented_mask = self._apply_sequential_encoder( @@ -130,23 +126,22 @@ def forward(self, inputs): last_augmented_embeddings = self._get_last_embedding( augmented_embeddings, augmented_mask ) # (batch_size, embedding_dim) - training_output["augmented_sequence_representation"] = ( - last_augmented_embeddings - ) + training_output['augmented_sequence_representation'] = last_augmented_embeddings return training_output else: # eval mode - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + return indices \ No newline at end of file diff --git a/modeling/models/graph_seq_rec.py b/modeling/models/graph_seq_rec.py index caa7e2e0..b227f184 100644 --- a/modeling/models/graph_seq_rec.py +++ b/modeling/models/graph_seq_rec.py @@ -1,33 +1,35 @@ +from models.base import SequentialTorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn -from models.base import SequentialTorchModel -from utils import DEVICE, create_masked_tensor +class GraphSeqRecModel(SequentialTorchModel, config_name='graph_seq_rec'): -class GraphSeqRecModel(SequentialTorchModel, config_name="graph_seq_rec"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - common_graph, - user_graph, - item_graph, - num_hops, - graph_dropout, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - use_ce=False, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + common_graph, + user_graph, + item_graph, + num_hops, + graph_dropout, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + use_ce=False, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -39,7 +41,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -55,34 +57,38 @@ def __init__( self._graph_dropout = graph_dropout self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - common_graph=kwargs["graph"], - user_graph=kwargs["user_graph"], - item_graph=kwargs["item_graph"], - num_hops=config["num_hops"], - graph_dropout=config["graph_dropout"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - use_ce=config.get("use_ce", False), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + common_graph=kwargs['graph'], + user_graph=kwargs['user_graph'], + item_graph=kwargs['item_graph'], + num_hops=config['num_hops'], + graph_dropout=config['graph_dropout'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + use_ce=config.get('use_ce', False), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self, embeddings, graph): @@ -104,45 +110,38 @@ def _apply_graph_encoder(self, embeddings, graph): return embeddings def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - lengths = inputs["{}.length".format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) common_graph_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, graph=self._item_graph + embeddings=self._item_embeddings.weight, + graph=self._item_graph ) # (num_items + 2, embedding_dim) - embeddings = common_graph_embeddings[ - all_sample_events - ] # (all_batch_events, embedding_dim) + embeddings = common_graph_embeddings[all_sample_events] # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -150,52 +149,35 @@ def forward(self, inputs): embeddings[~mask] = 0 if self._is_causal: - causal_mask = ( - torch.tril( - torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1]) - ) - .bool() - .to(DEVICE) - ) # (seq_len, seq_len) + causal_mask = torch.tril(torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1])).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( src=embeddings, mask=~causal_mask, ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, src_key_padding_mask=~mask + src=embeddings, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) if self._use_ce: - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) else: - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode if self._use_ce: - return {"logits": embeddings[mask]} + return {'logits': embeddings[mask]} else: - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -204,27 +186,21 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings } else: # eval mode if self._use_ce: - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items) - - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) + + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_ids = torch.reshape( candidate_events, - (candidate_lengths.shape[0], candidate_lengths[0]), + (candidate_lengths.shape[0], candidate_lengths[0]) ) # (batch_size, num_candidates) candidate_scores = last_embeddings.gather( dim=1, index=candidate_ids @@ -232,35 +208,34 @@ def forward(self, inputs): else: candidate_scores = last_embeddings # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf else: - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", last_embeddings, candidate_embeddings + 'bd,bnd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf return candidate_scores diff --git a/modeling/models/gru4rec.py b/modeling/models/gru4rec.py index 474743df..927445ac 100644 --- a/modeling/models/gru4rec.py +++ b/modeling/models/gru4rec.py @@ -1,20 +1,22 @@ -import torch -from torch import nn - from models.base import TorchModel + from utils import create_masked_tensor, get_activation_function +import torch +from torch import nn + class GRUModel(TorchModel): + def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, + self, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5 ): super().__init__() self._num_items = num_items @@ -23,12 +25,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -40,7 +41,7 @@ def __init__( num_layers=num_layers, batch_first=True, dropout=dropout, - bidirectional=False, + bidirectional=False ) self._hidden_to_output_projection = nn.Linear(embedding_dim, num_items) @@ -50,31 +51,27 @@ def _apply_sequential_encoder(self, events, lengths): embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -85,16 +82,14 @@ def _apply_sequential_encoder(self, events, lengths): input=embeddings, lengths=lengths.cpu(), batch_first=True, - enforce_sorted=False, + enforce_sorted=False ) hidden = torch.zeros( - self._num_layers, - batch_size, - self._embedding_dim, + self._num_layers, batch_size, self._embedding_dim, dtype=embeddings.dtype, device=embeddings.device, - requires_grad=True, + requires_grad=True ) # (num_layers, batch_size, embedding_dim) out, hidden = self._encoder(packed_embeddings, hidden) embeddings, embedding_lengths = torch.nn.utils.rnn.pad_packed_sequence( @@ -107,20 +102,21 @@ def _apply_sequential_encoder(self, events, lengths): return embeddings, mask -class GRU4RecModel(GRUModel, config_name="gru4rec"): +class GRU4RecModel(GRUModel, config_name='gru4rec'): + def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -129,7 +125,7 @@ def __init__( num_layers=num_layers, dropout=dropout, activation=activation, - layer_norm_eps=layer_norm_eps, + layer_norm_eps=layer_norm_eps ) self._sequence_prefix = sequence_prefix @@ -140,42 +136,35 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - activation=config.get("activation", "tanh"), - layer_norm_eps=config.get("layer_norm_eps", 1e-5), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + activation=config.get('activation', 'tanh'), + layer_norm_eps=config.get('layer_norm_eps', 1e-5), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, lengths=all_sample_lengths + events=all_sample_events, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) sample_end_idx = torch.cumsum(all_sample_lengths, dim=0) # (batch_size) sample_begin_idx = sample_end_idx - all_sample_lengths # (batch_size) @@ -184,47 +173,44 @@ def forward(self, inputs): sample_begin_idx = sample_begin_idx[:, None] # (batch_size, 1) negative_indices = torch.tile( - torch.arange( - start=0, - end=all_positive_sample_events.shape[0], - device=all_sample_lengths.device, - ).long()[None], - dims=[all_sample_lengths.shape[0], 1], + torch.arange(start=0, end=all_positive_sample_events.shape[0], device=all_sample_lengths.device).long()[None], + dims=[all_sample_lengths.shape[0], 1] ) # (batch_size, all_batch_events) - negative_mask = (negative_indices >= sample_begin_idx) & ( - negative_indices < sample_end_idx - ) + negative_mask = (negative_indices >= sample_begin_idx) & (negative_indices < sample_end_idx) negative_mask = torch.repeat_interleave( negative_mask, all_sample_lengths, dim=0 ) negative_scores = torch.einsum( - "ad,bd->ab", + 'ad,bd->ab', all_sample_embeddings, - self._item_embeddings(all_sample_events), + self._item_embeddings(all_sample_events) ) # (all_batch_events, all_batch_events) - + positive_scores = torch.einsum( - "ad,ad->a", all_sample_embeddings, all_positive_sample_embeddings + 'ad,ad->a', + all_sample_embeddings, + all_positive_sample_embeddings ) # (all_batch_events) return { - "positive_scores": positive_scores[..., None], - "negative_scores": negative_scores, + 'positive_scores': positive_scores[..., None], + 'negative_scores': negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/gtorec.py b/modeling/models/gtorec.py index d30e4616..dc29435f 100644 --- a/modeling/models/gtorec.py +++ b/modeling/models/gtorec.py @@ -1,39 +1,40 @@ +from models.base import SequentialTorchModel, TorchModel + +from utils import create_masked_tensor, get_activation_function + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import SequentialTorchModel, TorchModel -from utils import create_masked_tensor, get_activation_function - -class GTOModel(SequentialTorchModel, config_name="gtorec"): +class GTOModel(SequentialTorchModel, config_name='gtorec'): def __init__( - self, - # sequential params - sequence_prefix, # =item_prefix - positive_prefix, - negative_prefix, - candidate_prefix, - source_domain, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - # graph params - user_prefix, - graph, - graph_embedding_dim, - graph_num_layers, - # params with default values - dropout=0.0, - graph_dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - norm_first=True, + self, + # sequential params + sequence_prefix, # =item_prefix + positive_prefix, + negative_prefix, + candidate_prefix, + source_domain, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + # graph params + user_prefix, + graph, + graph_embedding_dim, + graph_num_layers, + # params with default values + dropout=0.0, + graph_dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02, + norm_first=True ): super().__init__( num_items=num_items, @@ -45,9 +46,9 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) - # sequential part + # sequential part self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -55,9 +56,13 @@ def __init__( self._source_domain = source_domain self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim + ) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) # graph part self._user_prefix = user_prefix @@ -68,13 +73,15 @@ def __init__( self._graph_dropout = graph_dropout self._graph_user_embeddings = nn.Embedding( - num_embeddings=num_users + 2, embedding_dim=self._graph_embedding_dim + num_embeddings=num_users + 2, + embedding_dim=self._graph_embedding_dim ) self._graph_item_embeddings = nn.Embedding( - num_embeddings=num_items + 2, embedding_dim=self._graph_embedding_dim + num_embeddings=num_items + 2, + embedding_dim=self._graph_embedding_dim ) - # cross_attention part + # cross_attention part self._mha = nn.MultiheadAttention( embed_dim=embedding_dim, num_heads=num_heads, @@ -100,39 +107,36 @@ def __init__( in_features=2 * embedding_dim, out_features=embedding_dim, ) - + self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( # sequential part - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - norm_first=config.get("norm_first", True), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02), + norm_first=config.get('norm_first', True), # graph part - user_prefix=config["user_prefix"], - num_users=kwargs["num_users"], + user_prefix=config['user_prefix'], + num_users=kwargs['num_users'], graph_embedding_dim=config["graph_embedding_dim"], graph_num_layers=config["graph_num_layers"], - graph_dropout=config.get("graph_dropout", 0.0), + graph_dropout=config.get("graph_dropout", 0.0) ) - + def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), - dim=0, - ) + ego_embeddings = torch.cat((self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._graph_dropout > 0: # drop some edges @@ -163,8 +167,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (batch_size) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (batch_size) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (batch_size, emb_dim) ego_embeddings = ego_embeddings(ids) # (batch_size, emb_dim) @@ -175,15 +179,13 @@ def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings assert torch.all(mask == ego_mask) return padded_embeddings, padded_ego_embeddings, mask - + def _ca_block(self, q, k, v, attn_mask=None, key_padding_mask=None): x = self._mha( - q, - k, - v, + q, k, v, attn_mask=attn_mask, key_padding_mask=key_padding_mask, - need_weights=False, + need_weights=False )[0] # (batch_size, seq_len, embedding_dim) return self.dropout1(x) # (batch_size, seq_len, embedding_dim) @@ -193,19 +195,11 @@ def _ff_block(self, x): def forward(self, inputs): # target domain item sequence - all_sample_events_target = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths_target = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events_target = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths_target = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) # source domain item sequence - all_sample_events_source = inputs[ - "{}.{}.ids".format(self._sequence_prefix, self._source_domain) - ] # (all_batch_events) - all_sample_lengths_source = inputs[ - "{}.{}.length".format(self._sequence_prefix, self._source_domain) - ] # (batch_size) + all_sample_events_source = inputs['{}.{}.ids'.format(self._sequence_prefix, self._source_domain)] # (all_batch_events) + all_sample_lengths_source = inputs['{}.{}.length'.format(self._sequence_prefix, self._source_domain)] # (batch_size) # sequential model encoder and target domain items embeddings from sequential model seq_embeddings_target, seq_mask_target = self._apply_sequential_encoder( @@ -213,137 +207,81 @@ def forward(self, inputs): ) # (batch_size, target_seq_len, embedding_dim), (batch_size, target_seq_len) # target domain items encoder for graph model - all_final_user_embeddings_target, all_final_item_embeddings_target = ( - self._apply_graph_encoder( - all_sample_events_target, all_sample_lengths_target - ) - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings_target, all_final_item_embeddings_target = \ + self._apply_graph_encoder(all_sample_events_target, all_sample_lengths_target) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) # source domain items encoder for graph model - all_final_user_embeddings_source, all_final_item_embeddings_source = ( - self._apply_graph_encoder( - all_sample_events_source, all_sample_lengths_source - ) - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - + all_final_user_embeddings_source, all_final_item_embeddings_source = \ + self._apply_graph_encoder(all_sample_events_source, all_sample_lengths_source) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + # target domain items embeddings from graph model - ( - graph_embeddings_target, - graph_item_ego_embeddings_target, - graph_item_mask_target, - ) = self._get_graph_embeddings( - inputs, - self._sequence_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, + graph_embeddings_target, graph_item_ego_embeddings_target, graph_item_mask_target = self._get_graph_embeddings( + inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) - graph_item_embeddings_target = graph_embeddings_target[ - graph_item_mask_target - ] # (batch_size, target_seq_len, embedding_dim) + graph_item_embeddings_target = graph_embeddings_target[graph_item_mask_target] # (batch_size, target_seq_len, embedding_dim) # source domain items embeddings from graph model - ( - graph_embeddings_source, - graph_item_ego_embeddings_source, - graph_item_mask_source, - ) = self._get_graph_embeddings( - inputs, - self._sequence_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, + graph_embeddings_source, graph_item_ego_embeddings_source, graph_item_mask_source = self._get_graph_embeddings( + inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) - graph_item_embeddings_source = graph_embeddings_source[ - graph_item_mask_source - ] # (batch_size, source_seq_len, embedding_dim) - + graph_item_embeddings_source = graph_embeddings_source[graph_item_mask_source] # (batch_size, source_seq_len, embedding_dim) + # embeddings + graph_embeddings_target -> cross-attention # query = embeddings # keys = graph_embeddings_target # values = graph_embeddings_target - if self.norm_first: - graph_embeddings_target = graph_embeddings_target + self.norm1( - self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target, - ) - ) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = graph_embeddings_target + self.norm2( - self._ff_block(graph_embeddings_target) - ) + if self.norm_first: + graph_embeddings_target = graph_embeddings_target + self.norm1(self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target + )) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = graph_embeddings_target + self.norm2(self._ff_block(graph_embeddings_target)) else: - graph_embeddings_target = self.norm1( - graph_embeddings_target - + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target, - ) - ) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = self.norm2( - graph_embeddings_target + self._ff_block(graph_embeddings_target) - ) + graph_embeddings_target = self.norm1(graph_embeddings_target + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target + )) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = self.norm2(graph_embeddings_target + self._ff_block(graph_embeddings_target)) # target-target cross-attention result - mha_embeddings_target = torch.cat( - [seq_embeddings_target, graph_embeddings_target], dim=-1 - ) - mha_embeddings_target = self._mha_output_projection( - mha_embeddings_target - ) # (batch_size, target_seq_len, embedding_dim) + mha_embeddings_target = torch.cat([seq_embeddings_target, graph_embeddings_target], dim=-1) + mha_embeddings_target = self._mha_output_projection(mha_embeddings_target) # (batch_size, target_seq_len, embedding_dim) # embeddings + graph_embeddings_source -> cross-attention # query = embeddings # keys = graph_embeddings_source # values = graph_embeddings_source - if self.norm_first: - graph_embeddings_source = graph_embeddings_source + self.norm1( - self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source, - ) - ) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = graph_embeddings_source + self.norm2( - self._ff_block(graph_embeddings_source) - ) + if self.norm_first: + graph_embeddings_source = graph_embeddings_source + self.norm1(self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source + )) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = graph_embeddings_source + self.norm2(self._ff_block(graph_embeddings_source)) else: - graph_embeddings_source = self.norm1( - graph_embeddings_source - + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source, - ) - ) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = self.norm2( - graph_embeddings_source + self._ff_block(graph_embeddings_source) - ) + graph_embeddings_source = self.norm1(graph_embeddings_source + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source + )) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = self.norm2(graph_embeddings_source + self._ff_block(graph_embeddings_source)) # source-target cross-attention result - mha_embeddings_source = torch.cat( - [seq_embeddings_target, graph_embeddings_source], dim=-1 - ) - mha_embeddings_source = self._mha_output_projection( - mha_embeddings_source - ) # (batch_size, seq_len, embedding_dim) + mha_embeddings_source = torch.cat([seq_embeddings_target, graph_embeddings_source], dim=-1) + mha_embeddings_source = self._mha_output_projection(mha_embeddings_source) # (batch_size, seq_len, embedding_dim) if self.training: # training mode # sequential part - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = seq_embeddings_target[ - seq_mask_target - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = seq_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -352,150 +290,96 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) # graph part, target domain item embeddings - graph_positive_embeddings_target, _, graph_positive_mask_target = ( - self._get_graph_embeddings( - inputs, - self._positive_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, - ) + graph_positive_embeddings_target, _, graph_positive_mask_target = self._get_graph_embeddings( + inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) - graph_negative_embeddings_target, _, graph_negative_mask_target = ( - self._get_graph_embeddings( - inputs, - self._negative_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, - ) + graph_negative_embeddings_target, _, graph_negative_mask_target = self._get_graph_embeddings( + inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_target = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_target, - graph_positive_embeddings_target, + 'bd,bsd->bs', graph_item_embeddings_target, graph_positive_embeddings_target ) # (batch_size, target_seq_len) graph_negative_scores_target = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_target, - graph_negative_embeddings_target, + 'bd,bsd->bs', graph_item_embeddings_target, graph_negative_embeddings_target ) # (batch_size, target_seq_len) - graph_positive_scores_target = graph_positive_scores_target[ - graph_positive_mask_target - ] # (all_batch_events) - graph_negative_scores_target = graph_negative_scores_target[ - graph_negative_mask_target - ] # (all_batch_events) + graph_positive_scores_target = graph_positive_scores_target[graph_positive_mask_target] # (all_batch_events) + graph_negative_scores_target = graph_negative_scores_target[graph_negative_mask_target] # (all_batch_events) # graph part, source domain item embeddings - graph_positive_embeddings_source, _, graph_positive_mask_source = ( - self._get_graph_embeddings( - inputs, - self._positive_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, - ) + graph_positive_embeddings_source, _, graph_positive_mask_source = self._get_graph_embeddings( + inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) - graph_negative_embeddings_source, _, graph_negative_mask_source = ( - self._get_graph_embeddings( - inputs, - self._negative_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, - ) + graph_negative_embeddings_source, _, graph_negative_mask_source = self._get_graph_embeddings( + inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_source = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_source, - graph_positive_embeddings_source, + 'bd,bsd->bs', graph_item_embeddings_source, graph_positive_embeddings_source ) # (batch_size, source_seq_len) graph_negative_scores_source = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_source, - graph_negative_embeddings_source, + 'bd,bsd->bs', graph_item_embeddings_source, graph_negative_embeddings_source ) # (batch_size, source_seq_len) - graph_positive_scores_source = graph_positive_scores_source[ - graph_positive_mask_source - ] # (all_batch_events) - graph_negative_scores_source = graph_negative_scores_source[ - graph_negative_mask_source - ] # (all_batch_events) + graph_positive_scores_source = graph_positive_scores_source[graph_positive_mask_source] # (all_batch_events) + graph_negative_scores_source = graph_negative_scores_source[graph_negative_mask_source] # (all_batch_events) # mha part - mha_all_sample_embeddings_target = mha_embeddings_target[ - seq_mask_target - ] # (all_batch_events, embedding_dim) - mha_all_sample_embeddings_source = mha_embeddings_source[ - seq_mask_target - ] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_target = mha_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_source = mha_embeddings_source[seq_mask_target] # (all_batch_events, embedding_dim) return { # sequential part # target domain item embeddings - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings, + # graph part # target domain item embeddings - "graph_positive_embeddings_target": graph_positive_embeddings_target[ - graph_positive_mask_target - ], - "graph_negative_embeddings_target": graph_negative_embeddings_target[ - graph_negative_mask_target - ], - "graph_positive_scores_target": graph_positive_scores_target, - "graph_negative_scores_target": graph_negative_scores_target, - "graph_item_embeddings_target": graph_item_embeddings_target, + 'graph_positive_embeddings_target': graph_positive_embeddings_target[graph_positive_mask_target], + 'graph_negative_embeddings_target': graph_negative_embeddings_target[graph_negative_mask_target], + 'graph_positive_scores_target': graph_positive_scores_target, + 'graph_negative_scores_target': graph_negative_scores_target, + 'graph_item_embeddings_target': graph_item_embeddings_target, # source domain item embeddings - "graph_positive_embeddings_source": graph_positive_embeddings_source[ - graph_positive_mask_source - ], - "graph_negative_embeddings_source": graph_negative_embeddings_source[ - graph_negative_mask_source - ], - "graph_positive_scores_source": graph_positive_scores_source, - "graph_negative_scores_source": graph_negative_scores_source, - "graph_item_embeddings_source": graph_item_embeddings_source, + 'graph_positive_embeddings_source': graph_positive_embeddings_source[graph_positive_mask_source], + 'graph_negative_embeddings_source': graph_negative_embeddings_source[graph_negative_mask_source], + 'graph_positive_scores_source': graph_positive_scores_source, + 'graph_negative_scores_source': graph_negative_scores_source, + 'graph_item_embeddings_source': graph_item_embeddings_source, + # mha part # target domain item embeddings - "mha_embeddings_target": mha_all_sample_embeddings_target, - "mha_positive_embeddings_target": all_positive_sample_embeddings, - "mha_negative_embeddings_target": all_negative_sample_embeddings, + 'mha_embeddings_target': mha_all_sample_embeddings_target, + 'mha_positive_embeddings_target': all_positive_sample_embeddings, + 'mha_negative_embeddings_target': all_negative_sample_embeddings, # source domain item embeddings - "mha_embeddings_source": mha_all_sample_embeddings_source, - "mha_positive_embeddings_source": all_positive_sample_embeddings, - "mha_negative_embeddings_source": all_negative_sample_embeddings, + 'mha_embeddings_source': mha_all_sample_embeddings_source, + 'mha_positive_embeddings_source': all_positive_sample_embeddings, + 'mha_negative_embeddings_source': all_negative_sample_embeddings } else: # eval mode - seq_last_embeddings_target = self._get_last_embedding( - seq_embeddings_target, seq_mask_target - ) # (batch_size, embedding_dim) - mha_last_embeddings_target = self._get_last_embedding( - mha_embeddings_target, seq_mask_target - ) # (batch_size, embedding_dim) - mha_last_embeddings_source = self._get_last_embedding( - mha_embeddings_source, seq_mask_target - ) # (batch_size, embedding_dim) + seq_last_embeddings_target = self._get_last_embedding(seq_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) + mha_last_embeddings_target = self._get_last_embedding(mha_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) + mha_last_embeddings_source = self._get_last_embedding(mha_embeddings_source, seq_mask_target) # (batch_size, embedding_dim) aggregated_last_embeddings = torch.maximum( - seq_last_embeddings_target, - torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source), + seq_last_embeddings_target, + torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source) ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", aggregated_last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + aggregated_last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) batch_size = candidate_lengths.shape[0] num_candidates = candidate_lengths[0] @@ -503,11 +387,12 @@ def forward(self, inputs): candidate_scores = torch.gather( input=candidate_scores, dim=1, - index=torch.reshape(candidate_events, [batch_size, num_candidates]), + index=torch.reshape(candidate_events, [batch_size, num_candidates]) ) # (batch_size, num_candidates) _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20), (batch_size, 20) return indices diff --git a/modeling/models/lightgcn.py b/modeling/models/lightgcn.py index 19d79b80..79e5f788 100644 --- a/modeling/models/lightgcn.py +++ b/modeling/models/lightgcn.py @@ -1,23 +1,25 @@ +from models.base import TorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import TorchModel -from utils import DEVICE, create_masked_tensor +class LightGCNModel(TorchModel, config_name='light_gcn'): -class LightGCNModel(TorchModel, config_name="light_gcn"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02, + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02 ): super().__init__() self._user_prefix = user_prefix @@ -30,11 +32,13 @@ def __init__( self._dropout_rate = dropout self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -42,21 +46,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - graph=kwargs["graph"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + graph=kwargs['graph'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ) + ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -87,8 +89,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (all_batch_events) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -106,9 +108,8 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = ( - self._apply_graph_encoder() - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = \ + self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings @@ -116,69 +117,63 @@ def forward(self, inputs): user_embeddings = user_embeddings[user_mask] # (batch_size, embedding_dim) if self.training: # training mode - positive_item_ids = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - positive_item_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) + positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( - [batch_size, 1] - ) - < positive_item_lengths[:, None] - ) # (batch_size, max_seq_len) - - positive_user_ids = ( - torch.arange(batch_size, device=DEVICE)[None] - .tile([max_sequence_length, 1]) - .T - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) + + positive_user_ids = torch.arange( + batch_size, + device=DEVICE + )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[ - positive_user_ids - ] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - "ad,nd->an", user_embeddings, all_final_item_embeddings + 'ad,nd->an', + user_embeddings, + all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros( - self._num_items + 2, dtype=torch.bool, device=DEVICE - ) # (num_items + 2) + negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, dim=1, index=positive_item_ids[..., None] + input=all_scores, + dim=1, + index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float(), + src=torch.ones_like(positive_item_ids[..., None]).float() ) # (all_batch_items, num_items + 2) return { - "positive_scores": positive_scores, - "negative_scores": all_scores, - "item_embeddings": torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ), + 'positive_scores': positive_scores, + 'negative_scores': all_scores, + 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) } else: # eval mode candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, all_final_item_embeddings + 'bd,nd->bn', + user_embeddings, + all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/mclsr.py b/modeling/models/mclsr.py index c7fefd3c..8f78cda4 100644 --- a/modeling/models/mclsr.py +++ b/modeling/models/mclsr.py @@ -1,30 +1,32 @@ +from models.base import TorchModel + import torch import torch.nn as nn -from models.base import TorchModel from utils import create_masked_tensor -class MCLSRModel(TorchModel, config_name="mclsr"): +class MCLSRModel(TorchModel, config_name='mclsr'): + def __init__( - self, - sequence_prefix, - user_prefix, - labels_prefix, - candidate_prefix, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_graph_layers, - common_graph, - user_graph, - item_graph, - dropout=0.0, - layer_norm_eps=1e-5, - graph_dropout=0.0, - alpha=0.5, - initializer_range=0.02, + self, + sequence_prefix, + user_prefix, + labels_prefix, + candidate_prefix, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_graph_layers, + common_graph, + user_graph, + item_graph, + dropout=0.0, + layer_norm_eps=1e-5, + graph_dropout=0.0, + alpha=0.5, + initializer_range=0.02 ): super().__init__() self._sequence_prefix = sequence_prefix @@ -48,17 +50,16 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._user_embeddings = nn.Embedding( num_embeddings=num_users + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -66,43 +67,39 @@ def __init__( # Current interest learning self._current_interest_learning_encoder = nn.Sequential( - nn.Linear( - in_features=embedding_dim, out_features=4 * embedding_dim, bias=False - ), + nn.Linear(in_features=embedding_dim, out_features=4 * embedding_dim, bias=False), nn.Tanh(), - nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False), + nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False) ) # General interest learning self._general_interest_learning_encoder = nn.Sequential( - nn.Linear( - in_features=embedding_dim, out_features=embedding_dim, bias=False - ), - nn.Tanh(), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=False), + nn.Tanh() ) # Cross-view contrastive learning self._sequential_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._graph_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._user_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._item_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._init_weights(initializer_range) @@ -110,22 +107,22 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - user_prefix=config["user_prefix"], - labels_prefix=config["labels_prefix"], - candidate_prefix=config["candidate_prefix"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_graph_layers=config["num_graph_layers"], - common_graph=kwargs["graph"], - user_graph=kwargs["user_graph"], - item_graph=kwargs["item_graph"], - dropout=config.get("dropout", 0.0), - layer_norm_eps=config.get("layer_norm_eps", 1e-5), - graph_dropout=config.get("graph_dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + user_prefix=config['user_prefix'], + labels_prefix=config['labels_prefix'], + candidate_prefix=config['candidate_prefix'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_graph_layers=config['num_graph_layers'], + common_graph=kwargs['graph'], + user_graph=kwargs['user_graph'], + item_graph=kwargs['item_graph'], + dropout=config.get('dropout', 0.0), + layer_norm_eps=config.get('layer_norm_eps', 1e-5), + graph_dropout=config.get('graph_dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self, embeddings, graph, use_mean=False): @@ -152,19 +149,14 @@ def _apply_graph_encoder(self, embeddings, graph, use_mean=False): return all_embeddings[-1] def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) - - embeddings = self._item_embeddings( - all_sample_events - ) # (all_batch_events, embedding_dim) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) + + embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=all_sample_lengths + data=embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) batch_size = mask.shape[0] @@ -172,108 +164,88 @@ def forward(self, inputs): # Current interest learning # 1) get embeddings with positions - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) - positions_mask = ( - positions < all_sample_lengths[:, None] - ) # (batch_size, max_seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=all_sample_lengths + data=position_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - positioned_embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._layernorm( - positioned_embeddings - ) # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._dropout( - positioned_embeddings - ) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._layernorm(positioned_embeddings) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._dropout(positioned_embeddings) # (batch_size, seq_len, embedding_dim) positioned_embeddings[~mask] = 0 sequential_attention_matrix = self._current_interest_learning_encoder( positioned_embeddings ).squeeze() # (batch_size, seq_len) sequential_attention_matrix[~mask] = -torch.inf - sequential_attention_matrix = torch.softmax( - sequential_attention_matrix, dim=1 - ) # (batch_size, seq_len) + sequential_attention_matrix = torch.softmax(sequential_attention_matrix, dim=1) # (batch_size, seq_len) sequential_representation = torch.einsum( - "bs,bsd->bd", sequential_attention_matrix, embeddings + 'bs,bsd->bd', sequential_attention_matrix, embeddings ) # (batch_size, embedding_dim) if self.training: # training mode # General interest learning all_embeddings = torch.cat( - [self._user_embeddings.weight, self._item_embeddings.weight], dim=0 + [self._user_embeddings.weight, self._item_embeddings.weight], + dim=0 ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_embeddings = self._apply_graph_encoder( - embeddings=all_embeddings, graph=self._graph + embeddings=all_embeddings, + graph=self._graph ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_user_embeddings, common_graph_item_embeddings = torch.split( - common_graph_embeddings, [self._num_users + 2, self._num_items + 2] + common_graph_embeddings, + [self._num_users + 2, self._num_items + 2] ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - common_graph_user_embeddings = common_graph_user_embeddings[ - user_ids - ] # (batch_size, embedding_dim) - common_graph_item_embeddings = common_graph_item_embeddings[ - all_sample_events - ] # (all_batch_events, embedding_dim) + common_graph_user_embeddings = common_graph_user_embeddings[user_ids] # (batch_size, embedding_dim) + common_graph_item_embeddings = common_graph_item_embeddings[all_sample_events] # (all_batch_events, embedding_dim) common_graph_item_embeddings, _ = create_masked_tensor( - data=common_graph_item_embeddings, lengths=all_sample_lengths + data=common_graph_item_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) graph_attention_matrix = torch.einsum( - "bd,bsd->bs", + 'bd,bsd->bs', self._general_interest_learning_encoder(common_graph_user_embeddings), - common_graph_item_embeddings, + common_graph_item_embeddings ) # (batch_size, seq_len) graph_attention_matrix[~mask] = -torch.inf - graph_attention_matrix = torch.softmax( - graph_attention_matrix, dim=1 - ) # (batch_size, seq_len) + graph_attention_matrix = torch.softmax(graph_attention_matrix, dim=1) # (batch_size, seq_len) graph_representation = torch.einsum( - "bs,bsd->bd", graph_attention_matrix, common_graph_item_embeddings + 'bs,bsd->bd', graph_attention_matrix, common_graph_item_embeddings ) # (batch_size, embedding_dim) # Get final representation - combined_representation = ( - self._alpha * sequential_representation - + (1 - self._alpha) * graph_representation - ) # (batch_size, embedding_dim) + combined_representation = \ + self._alpha * sequential_representation + \ + (1 - self._alpha) * graph_representation # (batch_size, embedding_dim) - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) - labels_embeddings = self._item_embeddings( - labels - ) # (batch_size, embedding_dim) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) + labels_embeddings = self._item_embeddings(labels) # (batch_size, embedding_dim) # Cross-view contrastive learning sequential_representation = self._sequential_projector( - sequential_representation - ) # (batch_size, embedding_dim) - graph_representation = self._graph_projector( - graph_representation - ) # (batch_size, embedding_dim) + sequential_representation) # (batch_size, embedding_dim) + graph_representation = self._graph_projector(graph_representation) # (batch_size, embedding_dim) # Feature-level Contrastive Learning user_graph_user_embeddings = self._apply_graph_encoder( - embeddings=self._user_embeddings.weight, graph=self._user_graph + embeddings=self._user_embeddings.weight, + graph=self._user_graph ) # (num_users + 2, embedding_dim) user_graph_user_embeddings = torch.gather( user_graph_user_embeddings, dim=0, - index=user_ids[..., None].tile(1, self._embedding_dim), + index=user_ids[..., None].tile(1, self._embedding_dim) ) # (batch_size, embedding_dim) user_graph_user_embeddings = self._user_projection( @@ -284,12 +256,13 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) item_graph_item_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, graph=self._item_graph + embeddings=self._item_embeddings.weight, + graph=self._item_graph ) # (num_items + 2, embedding_dim) item_graph_item_embeddings = torch.gather( item_graph_item_embeddings, dim=0, - index=all_sample_events[..., None].tile(1, self._embedding_dim), + index=all_sample_events[..., None].tile(1, self._embedding_dim) ) # (all_sample_events, embedding_dim) item_graph_item_embeddings = self._item_projection( @@ -301,50 +274,51 @@ def forward(self, inputs): return { # Downstream task - "combined_representation": combined_representation, - "label_representation": labels_embeddings, + 'combined_representation': combined_representation, + 'label_representation': labels_embeddings, + # Interest-level Contrastive Learning - "sequential_representation": sequential_representation, - "graph_representation": graph_representation, + 'sequential_representation': sequential_representation, + 'graph_representation': graph_representation, + # Feature-level Contrastive Learning (users) - "user_graph_user_embeddings": user_graph_user_embeddings, - "common_graph_user_embeddings": common_graph_user_embeddings, + 'user_graph_user_embeddings': user_graph_user_embeddings, + 'common_graph_user_embeddings': common_graph_user_embeddings, + # Feature-level Contrastive Learning (items) - "item_graph_item_embeddings": item_graph_item_embeddings, - "common_graph_item_embeddings": common_graph_item_embeddings, + 'item_graph_item_embeddings': item_graph_item_embeddings, + 'common_graph_item_embeddings': common_graph_item_embeddings } else: # eval mode - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) - - candidate_embeddings = self._item_embeddings( - candidate_events - ) # (all_batch_candidates, embedding_dim) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + + candidate_embeddings = self._item_embeddings(candidate_events) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", sequential_representation, candidate_embeddings + 'bd,bnd->bn', + sequential_representation, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", sequential_representation, candidate_embeddings + 'bd,nd->bn', + sequential_representation, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf values, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 100), (batch_size, 100) return indices diff --git a/modeling/models/mrgsrec.py b/modeling/models/mrgsrec.py index f53861a0..488c580a 100644 --- a/modeling/models/mrgsrec.py +++ b/modeling/models/mrgsrec.py @@ -1,29 +1,32 @@ -import torch -import torch.nn as nn from torch.nn import MultiheadAttention from models.base import TorchModel + from utils import create_masked_tensor, get_activation_function +import torch +import torch.nn as nn + + +class MRGSRecModel(TorchModel, config_name='mrgsrec'): -class MRGSRecModel(TorchModel, config_name="mrgsrec"): def __init__( - self, - sequence_prefix, - user_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + user_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__() self._sequence_prefix = sequence_prefix @@ -37,12 +40,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -55,69 +57,60 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True, + batch_first=True ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) - embeddings = self._item_embeddings( - all_sample_events - ) # (all_batch_events, embedding_dim) + embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=all_sample_lengths + data=embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) - positions_mask = ( - positions < all_sample_lengths[:, None] - ) # (batch_size, max_seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=all_sample_lengths + data=position_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) embeddings[~mask] = 0 + + + diff --git a/modeling/models/ngcf.py b/modeling/models/ngcf.py index 8df917eb..2fcc9081 100644 --- a/modeling/models/ngcf.py +++ b/modeling/models/ngcf.py @@ -1,23 +1,25 @@ +from models.base import TorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import TorchModel -from utils import DEVICE, create_masked_tensor +class NgcfModel(TorchModel, config_name='ngcf'): -class NgcfModel(TorchModel, config_name="ngcf"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02, + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02 ): super().__init__() self._user_prefix = user_prefix @@ -38,11 +40,13 @@ def __init__( self.Bi_Linear_list.append(nn.Linear(embedding_dim, embedding_dim)) self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -50,20 +54,20 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - graph=kwargs["graph"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + graph=kwargs['graph'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (all_batch_events) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -81,9 +85,7 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ) + ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -120,82 +122,73 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = ( - self._apply_graph_encoder() - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = \ + self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings ) - user_embeddings = user_embeddings[ - user_mask - ] # (all_batch_events, embedding_dim) + user_embeddings = user_embeddings[user_mask] # (all_batch_events, embedding_dim) if self.training: # training mode - positive_item_ids = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - positive_item_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) + positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( - [batch_size, 1] - ) - < positive_item_lengths[:, None] - ) # (batch_size, max_seq_len) - - positive_user_ids = ( - torch.arange(batch_size, device=DEVICE)[None] - .tile([max_sequence_length, 1]) - .T - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) + + positive_user_ids = torch.arange( + batch_size, + device=DEVICE + )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[ - positive_user_ids - ] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - "ad,nd->an", user_embeddings, all_final_item_embeddings + 'ad,nd->an', + user_embeddings, + all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros( - self._num_items + 2, dtype=torch.bool, device=DEVICE - ) # (num_items + 2) + negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, dim=1, index=positive_item_ids[..., None] + input=all_scores, + dim=1, + index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float(), + src=torch.ones_like(positive_item_ids[..., None]).float() ) # (all_batch_items, num_items + 2) return { - "positive_scores": positive_scores, - "negative_scores": all_scores, - "item_embeddings": torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ), + 'positive_scores': positive_scores, + 'negative_scores': all_scores, + 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) } else: # eval mode # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, all_final_item_embeddings + 'bd,nd->bn', + user_embeddings, + all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pop.py b/modeling/models/pop.py index ddf26881..bb0b6774 100644 --- a/modeling/models/pop.py +++ b/modeling/models/pop.py @@ -1,10 +1,16 @@ +from models.base import BaseModel + import torch -from models.base import BaseModel +class PopModel(BaseModel, config_name='pop'): -class PopModel(BaseModel, config_name="pop"): - def __init__(self, label_prefix, counts_prefix, num_items): + def __init__( + self, + label_prefix, + counts_prefix, + num_items + ): self._label_prefix = label_prefix self._counts_prefix = counts_prefix self._num_items = num_items @@ -12,30 +18,26 @@ def __init__(self, label_prefix, counts_prefix, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - label_prefix=config["label_prefix"], - counts_prefix=config["counts_prefix"], - num_items=kwargs["num_items"], + label_prefix=config['label_prefix'], + counts_prefix=config['counts_prefix'], + num_items=kwargs['num_items'] ) def __call__(self, inputs): - candidate_counts = inputs[ - "{}.ids".format(self._counts_prefix) - ] # (all_batch_candidates) - candidate_counts_lengths = inputs[ - "{}.length".format(self._counts_prefix) - ] # (batch_size) + candidate_counts = inputs['{}.ids'.format(self._counts_prefix)] # (all_batch_candidates) + candidate_counts_lengths = inputs['{}.length'.format(self._counts_prefix)] # (batch_size) batch_size = candidate_counts_lengths.shape[0] candidate_scores = torch.reshape( - candidate_counts, shape=(batch_size, self._num_items + 2) + candidate_counts, + shape=(batch_size, self._num_items + 2) ).float() # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[ - :, self._num_items + 1 : - ] = -torch.inf # all not real items-related things + candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_mf.py b/modeling/models/pure_mf.py index dc0b691c..6cbe8dc5 100644 --- a/modeling/models/pure_mf.py +++ b/modeling/models/pure_mf.py @@ -1,20 +1,22 @@ +from models.base import TorchModel + import torch import torch.nn as nn -from models.base import TorchModel from utils import create_masked_tensor -class PureMF(TorchModel, config_name="pure_mf"): +class PureMF(TorchModel, config_name='pure_mf'): + def __init__( - self, - user_prefix, - positive_prefix, - negative_prefix, - num_users, - num_items, - embedding_dim, - initializer_range, + self, + user_prefix, + positive_prefix, + negative_prefix, + num_users, + num_items, + embedding_dim, + initializer_range ): super().__init__() @@ -27,11 +29,13 @@ def __init__( self._embedding_dim = embedding_dim self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -39,73 +43,54 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) + user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) user_embeddings = self._user_embeddings(user_ids) # (batch_size, embedding_dim) if self.training: # training mode - all_positive = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_positive_embeddings = self._item_embeddings( - all_positive - ) # (all_batch_events, embedding_dim) - positive_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) - - all_negative = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - all_negative_embeddings = self._item_embeddings( - all_negative - ) # (all_batch_events, embedding_dim) - negative_lengths = inputs[ - "{}.length".format(self._negative_prefix) - ] # (batch_size) - - positive_embeddings, positive_mask = create_masked_tensor( - all_positive_embeddings, positive_lengths - ) - negative_embeddings, negative_mask = create_masked_tensor( - all_negative_embeddings, negative_lengths - ) - - positive_scores = torch.einsum( - "bd,bsd->bs", user_embeddings, positive_embeddings - ) # (batch_size, seq_len) - negative_scores = torch.einsum( - "bd,bsd->bs", user_embeddings, negative_embeddings - ) # (batch_size, seq_len) + all_positive = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_positive_embeddings = self._item_embeddings(all_positive) # (all_batch_events, embedding_dim) + positive_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) + + all_negative = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + all_negative_embeddings = self._item_embeddings(all_negative) # (all_batch_events, embedding_dim) + negative_lengths = inputs['{}.length'.format(self._negative_prefix)] # (batch_size) + + positive_embeddings, positive_mask = create_masked_tensor(all_positive_embeddings, positive_lengths) + negative_embeddings, negative_mask = create_masked_tensor(all_negative_embeddings, negative_lengths) + + positive_scores = torch.einsum('bd,bsd->bs', user_embeddings, positive_embeddings) # (batch_size, seq_len) + negative_scores = torch.einsum('bd,bsd->bs', user_embeddings, negative_embeddings) # (batch_size, seq_len) positive_scores = positive_scores[positive_mask] # (all_batch_events) negative_scores = negative_scores[negative_mask] # (all_batch_events) return { - "positive_scores": positive_scores, - "negative_scores": negative_scores, + 'positive_scores': positive_scores, + 'negative_scores': negative_scores } else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, candidate_embeddings + 'bd,nd->bn', + user_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_svd.py b/modeling/models/pure_svd.py index fcb55a49..f705543b 100644 --- a/modeling/models/pure_svd.py +++ b/modeling/models/pure_svd.py @@ -1,14 +1,16 @@ from models.base import BaseModel -class SVDModel(BaseModel, config_name="pure_svd"): +class SVDModel(BaseModel, config_name='pure_svd'): + def __init__(self, rank): super().__init__() self._rank = rank - self._method = "PureSVD" + self._method = 'PureSVD' self._factors = {} @property def rank(self): return self._rank + diff --git a/modeling/models/random.py b/modeling/models/random.py index cfa8d5fa..d5fae7c5 100644 --- a/modeling/models/random.py +++ b/modeling/models/random.py @@ -1,31 +1,36 @@ +from models.base import BaseModel + import torch -from models.base import BaseModel +class RandomModel(BaseModel, config_name='random'): -class RandomModel(BaseModel, config_name="random"): - def __init__(self, label_prefix, num_items): + def __init__( + self, + label_prefix, + num_items + ): self._label_prefix = label_prefix self._num_items = num_items @classmethod def create_from_config(cls, config, **kwargs): - return cls(label_prefix=config["label_prefix"], num_items=kwargs["num_items"]) + return cls( + label_prefix=config['label_prefix'], + num_items=kwargs['num_items'] + ) def __call__(self, inputs): - labels_lengths = inputs["{}.length".format(self._label_prefix)] # (batch_size) + labels_lengths = inputs['{}.length'.format(self._label_prefix)] # (batch_size) batch_size = labels_lengths.shape[0] - candidate_scores = torch.rand( - batch_size, self._num_items + 1 - ) # (batch_size, num_items) + candidate_scores = torch.rand(batch_size, self._num_items + 1) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[ - :, self._num_items + 1 : - ] = -torch.inf # all not real items-related things + candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index d7d1606e..7e150421 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,23 +1,22 @@ import functools +from utils import DEVICE +from models.base import TorchModel -import faiss import torch +import faiss -from models.base import TorchModel -from utils import DEVICE - +class RqVaeModel(TorchModel, config_name='rqvae'): -class RqVaeModel(TorchModel, config_name="rqvae"): def __init__( - self, - train_sampler, - input_dim: int, - hidden_dim: int, - n_iter: int, - codebook_sizes: list[int], - should_init_codebooks, - should_reinit_unused_clusters, - initializer_range, + self, + train_sampler, + input_dim: int, + hidden_dim: int, + n_iter: int, + codebook_sizes: list[int], + should_init_codebooks, + should_reinit_unused_clusters, + initializer_range ): super().__init__() @@ -35,39 +34,35 @@ def __init__( # Default initialization of codebook self.codebooks = torch.nn.ParameterList() - + self.codebook_sizes = codebook_sizes - + for codebook_size in codebook_sizes: cb = torch.FloatTensor(codebook_size, hidden_dim) self.codebooks.append(cb) - + self._init_weights(initializer_range) - + if self.should_init_codebooks: if train_sampler is None: raise AttributeError("Train sampler is None") - - embeddings = torch.stack( - [entry["item.embed"] for entry in train_sampler._dataset] - ) + + embeddings = torch.stack([entry['item.embed'] for entry in train_sampler._dataset]) self.init_codebooks(embeddings) - print("Codebooks initialized with Faiss Kmeans") + print('Codebooks initialized with Faiss Kmeans') self.should_init_codebooks = False @classmethod def create_from_config(cls, config, **kwargs): return cls( - train_sampler=kwargs.get("train_sampler"), - input_dim=config["embedding_dim"], - hidden_dim=config["hidden_dim"], - n_iter=config["n_iter"], - codebook_sizes=config["codebook_sizes"], - should_init_codebooks=config.get("should_init_codebooks", False), - should_reinit_unused_clusters=config.get( - "should_reinit_unused_clusters", False - ), - initializer_range=config.get("initializer_range", 0.02), + train_sampler=kwargs.get('train_sampler'), + input_dim=config['embedding_dim'], + hidden_dim=config['hidden_dim'], + n_iter=config['n_iter'], + codebook_sizes=config['codebook_sizes'], + should_init_codebooks=config.get('should_init_codebooks', False), + should_reinit_unused_clusters=config.get('should_reinit_unused_clusters', False), + initializer_range=config.get('initializer_range', 0.02) ) def make_encoding_tower(self, d1: int, d2: int): @@ -107,21 +102,21 @@ def reinit_unused_clusters(remainder, codebook, codebook_indices): is_used[unique_indices] = True rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) codebook[~is_used] = remainder[rand_input] - + def train_pass(self, embeddings): latent_vector = self.encoder(embeddings) latent_restored = 0 - + num_unique_clusters = [] remainder = latent_vector - + remainders = [] codebooks_vectors = [] - + for codebook in self.codebooks: remainders.append(remainder) - + codebook_indices = self.get_codebook_indices(remainder, codebook) codebook_vectors = codebook[codebook_indices] @@ -129,7 +124,7 @@ def train_pass(self, embeddings): self.reinit_unused_clusters(remainder, codebook, codebook_indices) num_unique_clusters.append(codebook_indices.unique().shape[0]) - + codebooks_vectors.append(codebook_vectors) latent_restored = latent_restored + codebook_vectors @@ -143,9 +138,9 @@ def train_pass(self, embeddings): "embeddings": embeddings, "embeddings_restored": embeddings_restored, "remainders": remainders, - "codebooks_vectors": codebooks_vectors, + "codebooks_vectors": codebooks_vectors } - + def eval_pass(self, embeddings): ind_lists = [] remainder = self.encoder(embeddings) @@ -158,12 +153,12 @@ def eval_pass(self, embeddings): def forward(self, inputs): embeddings = inputs["embeddings"] - + if self.training: # training mode return self.train_pass(embeddings) else: # eval mode return self.eval_pass(embeddings) - + @functools.cache def get_single_embedding(self, codebook_idx: int, codebook_id: int): return self.codebooks[codebook_idx][codebook_id] diff --git a/modeling/models/s3rec.py b/modeling/models/s3rec.py index f9f361d4..e1fcffb4 100644 --- a/modeling/models/s3rec.py +++ b/modeling/models/s3rec.py @@ -1,31 +1,33 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel from utils import create_masked_tensor -class S3RecModel(SequentialTorchModel, config_name="s3rec"): +class S3RecModel(SequentialTorchModel, config_name='s3rec'): + def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - sequence_segment_prefix, - positive_segment_prefix, - negative_segment_prefix, - candidate_prefix, - num_items, - max_sequence_length, - is_training, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + sequence_segment_prefix, + positive_segment_prefix, + negative_segment_prefix, + candidate_prefix, + num_items, + max_sequence_length, + is_training, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -37,7 +39,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_training, + is_causal=is_training ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -59,60 +61,50 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - sequence_segment_prefix=config["sequence_segment_prefix"], - positive_segment_prefix=config["positive_segment_prefix"], - negative_segment_prefix=config["negative_segment_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - is_training=config["is_training"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + sequence_segment_prefix=config['sequence_segment_prefix'], + positive_segment_prefix=config['positive_segment_prefix'], + negative_segment_prefix=config['negative_segment_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + is_training=config['is_training'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def masked_item_prediction(self, sequence_embeddings, sequence_mask, target_item): all_items = sequence_embeddings[sequence_mask] # (all_batch_items, emb_dim) - score = torch.einsum("ad,ad->a", all_items, target_item) # (all_batch_items) + score = torch.einsum( + 'ad,ad->a', all_items, target_item + ) # (all_batch_items) return torch.sigmoid(score) # (all_batch_items) def segment_prediction(self, context, segment): - score = torch.einsum("bd,bd->b", self.sp_norm(context), segment) # (batch_size) + score = torch.einsum('bd,bd->b', self.sp_norm(context), segment) # (batch_size) return torch.sigmoid(score) # (batch_size) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self._is_training: if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -121,68 +113,53 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings } else: # eval mode - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", last_embeddings, candidate_embeddings + 'bd,bnd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf return candidate_scores else: # Masked Item Prediction - mip_mask = ( - all_sample_events == self._mask_item_idx - ).bool() # (all_batch_events) + mip_mask = (all_sample_events == self._mask_item_idx).bool() # (all_batch_events) embeddings = embeddings[mask][mip_mask] # (all_batch_events, embedding_dim) - positive_item_events = inputs["{}.ids".format(self._positive_prefix)][ - mip_mask - ] # (all_batch_events) - negative_item_events = inputs["{}.ids".format(self._negative_prefix)][ - mip_mask - ] # (all_batch_events) - - positive_item_embeddings = self._item_embeddings( - positive_item_events - ) # (all_batch_events, embedding_dim) - negative_item_embeddings = self._item_embeddings( - negative_item_events - ) # (all_batch_events, embedding_dim) + positive_item_events = inputs['{}.ids'.format(self._positive_prefix)][mip_mask] # (all_batch_events) + negative_item_events = inputs['{}.ids'.format(self._negative_prefix)][mip_mask] # (all_batch_events) + + positive_item_embeddings = self._item_embeddings(positive_item_events) # (all_batch_events, embedding_dim) + negative_item_embeddings = self._item_embeddings(negative_item_events) # (all_batch_events, embedding_dim) # Sequence Prediction - all_segment_events = inputs[ - "{}.ids".format(self._sequence_segment_prefix) - ] # (all_batch_events) - all_segment_lengths = inputs[ - "{}.length".format(self._sequence_segment_prefix) - ] # (batch_size) + all_segment_events = inputs['{}.ids'.format(self._sequence_segment_prefix)] # (all_batch_events) + all_segment_lengths = inputs['{}.length'.format(self._sequence_segment_prefix)] # (batch_size) segment_embeddings, segment_mask = self._apply_sequential_encoder( all_segment_events, all_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) @@ -190,41 +167,30 @@ def forward(self, inputs): segment_embeddings, segment_mask ) # (batch_size, embedding_dim) - positive_segment_events = inputs[ - "{}.ids".format(self._positive_segment_prefix) - ] # (all_batch_events) - positive_segment_lengths = inputs[ - "{}.length".format(self._positive_segment_prefix) - ] # (batch_size) - positive_segment_embeddings, positive_segment_mask = ( - self._apply_sequential_encoder( - positive_segment_events, positive_segment_lengths - ) + positive_segment_events = inputs['{}.ids'.format(self._positive_segment_prefix)] # (all_batch_events) + positive_segment_lengths = inputs['{}.length'.format(self._positive_segment_prefix)] # (batch_size) + positive_segment_embeddings, positive_segment_mask = self._apply_sequential_encoder( + positive_segment_events, positive_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_positive_segment_embeddings = self._get_last_embedding( positive_segment_embeddings, positive_segment_mask ) # (batch_size, embedding_dim) - negative_segment_events = inputs[ - "{}.ids".format(self._negative_segment_prefix) - ] # (all_batch_events) - negative_segment_lengths = inputs[ - "{}.length".format(self._negative_segment_prefix) - ] # (batch_size) - negative_segment_embeddings, negative_segment_mask = ( - self._apply_sequential_encoder( - negative_segment_events, negative_segment_lengths - ) + negative_segment_events = inputs['{}.ids'.format(self._negative_segment_prefix)] # (all_batch_events) + negative_segment_lengths = inputs['{}.length'.format(self._negative_segment_prefix)] # (batch_size) + negative_segment_embeddings, negative_segment_mask = self._apply_sequential_encoder( + negative_segment_events, negative_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_negative_segment_embeddings = self._get_last_embedding( negative_segment_embeddings, negative_segment_mask ) # (batch_size, embedding_dim) return { - "positive_representation": positive_item_embeddings, - "negative_representation": negative_item_embeddings, - "current_representation": embeddings, - "positive_segment_representation": last_positive_segment_embeddings, - "negative_segment_representation": last_negative_segment_embeddings, - "current_segment_representation": last_segment_embeddings, + 'positive_representation': positive_item_embeddings, + 'negative_representation': negative_item_embeddings, + 'current_representation': embeddings, + + 'positive_segment_representation': last_positive_segment_embeddings, + 'negative_segment_representation': last_negative_segment_embeddings, + 'current_segment_representation': last_segment_embeddings } diff --git a/modeling/models/sasrec_ce.py b/modeling/models/sasrec_ce.py index d9eb882b..a0316853 100644 --- a/modeling/models/sasrec_ce.py +++ b/modeling/models/sasrec_ce.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class SasRecCeModel(SequentialTorchModel, config_name='sasrec_ce'): -class SasRecCeModel(SequentialTorchModel, config_name="sasrec_ce"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,13 +31,14 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) self._init_weights(initializer_range) @@ -44,51 +46,42 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items + 2) if self.training: # training mode - return {"logits": embeddings[mask]} + return {'logits': embeddings[mask]} else: # eval mode - candidate_scores = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items + 2) + candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index c1089e23..0230f41e 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -1,9 +1,9 @@ import torch +from .tiger import TigerModel from models import SequentialTorchModel from torch import nn from utils import DEVICE, create_masked_tensor - -from .tiger import TigerModel +from torch import nn class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index c44c13f3..2e527bf8 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,10 +1,9 @@ import json import torch -from torch import nn - from models.base import SequentialTorchModel from rqvae_utils import CollisionSolver, SimplifiedTree +from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function from .rqvae import RqVaeModel @@ -353,17 +352,13 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): ) assert last_position_embedding.shape == tgt_embeddings[:, -1, :].shape - assert tgt_embeddings.shape == torch.Size( - [batch_size, step + 1, embedding_dim] - ) + assert tgt_embeddings.shape == torch.Size([batch_size, step + 1, embedding_dim]) curr_step_embeddings = tgt_embeddings.clone() curr_step_embeddings[:, -1, :] = ( tgt_embeddings[:, -1, :] + last_position_embedding ) - assert torch.allclose( - tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :] - ) + assert torch.allclose(tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :]) tgt_embeddings = curr_step_embeddings # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings[:, -1, :]) diff --git a/modeling/optimizer/base.py b/modeling/optimizer/base.py index 0e85cab8..86c63537 100644 --- a/modeling/optimizer/base.py +++ b/modeling/optimizer/base.py @@ -1,18 +1,17 @@ import copy import torch - from utils import MetaParent OPTIMIZERS = { - "sgd": torch.optim.SGD, - "adam": torch.optim.Adam, - "adamw": torch.optim.AdamW, + 'sgd': torch.optim.SGD, + 'adam': torch.optim.Adam, + 'adamw': torch.optim.AdamW } SCHEDULERS = { - "step": torch.optim.lr_scheduler.StepLR, - "cyclic": torch.optim.lr_scheduler.CyclicLR, + 'step': torch.optim.lr_scheduler.StepLR, + 'cyclic': torch.optim.lr_scheduler.CyclicLR } @@ -20,7 +19,7 @@ class BaseOptimizer(metaclass=MetaParent): pass -class BasicOptimizer(BaseOptimizer, config_name="basic"): +class BasicOptimizer(BaseOptimizer, config_name='basic'): def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): self._model = model self._optimizer = optimizer @@ -29,24 +28,26 @@ def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): @classmethod def create_from_config(cls, config, **kwargs): - optimizer_cfg = copy.deepcopy(config["optimizer"]) - optimizer = OPTIMIZERS[optimizer_cfg.pop("type")]( - kwargs["model"].parameters(), **optimizer_cfg + optimizer_cfg = copy.deepcopy(config['optimizer']) + optimizer = OPTIMIZERS[optimizer_cfg.pop('type')]( + kwargs['model'].parameters(), + **optimizer_cfg ) - if "scheduler" in config: - scheduler_cfg = copy.deepcopy(config["scheduler"]) - scheduler = SCHEDULERS[scheduler_cfg.pop("type")]( - optimizer, **scheduler_cfg + if 'scheduler' in config: + scheduler_cfg = copy.deepcopy(config['scheduler']) + scheduler = SCHEDULERS[scheduler_cfg.pop('type')]( + optimizer, + **scheduler_cfg ) else: scheduler = None return cls( - model=kwargs["model"], + model=kwargs['model'], optimizer=optimizer, scheduler=scheduler, - clip_grad_threshold=config.get("clip_grad_threshold", None), + clip_grad_threshold=config.get('clip_grad_threshold', None) ) def step(self, loss): @@ -54,16 +55,14 @@ def step(self, loss): loss.backward() if self._clip_grad_threshold is not None: - torch.nn.utils.clip_grad_norm_( - self._model.parameters(), self._clip_grad_threshold - ) + torch.nn.utils.clip_grad_norm_(self._model.parameters(), self._clip_grad_threshold) self._optimizer.step() if self._scheduler is not None: self._scheduler.step() def state_dict(self): - state_dict = {"optimizer": self._optimizer.state_dict()} + state_dict = {'optimizer': self._optimizer.state_dict()} if self._scheduler is not None: - state_dict.update({"scheduler": self._scheduler.state_dict()}) + state_dict.update({'scheduler': self._scheduler.state_dict()}) return state_dict diff --git a/modeling/pretrain.py b/modeling/pretrain.py index 4221e62c..4597e3e8 100644 --- a/modeling/pretrain.py +++ b/modeling/pretrain.py @@ -1,16 +1,16 @@ -import copy -import json - -import torch - import utils -from callbacks import BaseCallback -from dataloader import BaseDataloader +from utils import parse_args, create_logger, fix_random_seed, DEVICE + from dataset import BaseDataset -from loss import BaseLoss +from dataloader import BaseDataloader from models import BaseModel from optimizer import BaseOptimizer -from utils import DEVICE, create_logger, fix_random_seed, parse_args +from loss import BaseLoss +from callbacks import BaseCallback + +import copy +import json +import torch logger = create_logger(name=__name__) seed_val = 42 @@ -20,10 +20,10 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): step_num = 0 best_checkpoint = None - logger.debug("Start pretraining...") + logger.debug('Start pretraining...') for epoch in range(epoch_cnt): - logger.debug(f"Start epoch {epoch}") + logger.debug(f'Start epoch {epoch}') for step, batch in enumerate(dataloader): model.train() @@ -39,7 +39,7 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): best_checkpoint = copy.deepcopy(model.state_dict()) - logger.debug("Pretraining procedure has been finished!") + logger.debug('Pretraining procedure has been finished!') return best_checkpoint @@ -47,38 +47,41 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( - config["experiment_name"] - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ + utils.tensorboards.TensorboardWriter(config['experiment_name']) - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) train_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=test_sampler, + **dataset.meta ) - model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) + model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) - loss_function = BaseLoss.create_from_config(config["loss"]) + loss_function = BaseLoss.create_from_config(config['loss']) - optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) + optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, dataloader=validation_dataloader, - optimizer=optimizer, + optimizer=optimizer ) - logger.debug("Everything is ready for pretraining process!") + logger.debug('Everything is ready for pretraining process!') # Pretrain process pretrain( @@ -87,16 +90,14 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config["pretrain_epochs_num"], + epoch_cnt=config['pretrain_epochs_num'] ) - logger.debug("Saving model...") - checkpoint_path = "../checkpoints/pretrain_{}_final_state.pth".format( - config["experiment_name"] - ) + logger.debug('Saving model...') + checkpoint_path = '../checkpoints/pretrain_{}_final_state.pth'.format(config['experiment_name']) torch.save(model.state_dict(), checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index 33c649b9..2722515a 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,4 +1,4 @@ from .collision_solver import CollisionSolver -from .simplified_tree import SimplifiedTree -from .tree import Tree from .trie import Trie +from .tree import Tree +from .simplified_tree import SimplifiedTree \ No newline at end of file diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index 426cf1bf..f673c6dd 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -6,45 +6,32 @@ class CollisionSolver: - def __init__( - self, - emb_dim: int, - sem_id_len: int, - codebook_size: int, - device: torch.device = DEVICE, - ): + def __init__(self, + emb_dim: int, + sem_id_len: int, + codebook_size: int, + device: torch.device=DEVICE): """ :param emb_dim: Длина остатка :param codebook_size: Количество элементов в одном кодбуке :param sem_id_len: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._sem_ids_sparse_tensor: torch.Tensor = torch.empty( - (0, 0) - ) # тензор группирирующий остатки по semantic_id + self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) # тензор группирирующий остатки по semantic_id self.item_ids_sparse_tensor: torch.Tensor = torch.empty( - (0, 0) - ) # тензор группирирующий реальные айди айтемов по semantic_id - self.counts_dict: dict[int, int] = defaultdict( - int - ) # тензор храняющий количество коллизий по semantic_id + (0, 0)) # тензор группирирующий реальные айди айтемов по semantic_id + self.counts_dict: dict[int, int] = defaultdict(int) # тензор храняющий количество коллизий по semantic_id self.emb_dim: int = emb_dim # длина остатка self.sem_id_len: int = sem_id_len # длина semantic_id self.codebook_size: int = codebook_size # количество элементов в одном кодбуке self.device: torch.device = device # девайс - self.key: torch.Tensor = torch.tensor( - [self.codebook_size**i for i in range(self.sem_id_len)], - dtype=torch.long, - device=self.device, - ) # ключ для сопоставления числа каждому semantic_id - - def create_query_candidates_dict( - self, - item_ids: torch.Tensor, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - ) -> None: + self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len)], + dtype=torch.long, + device=self.device) # ключ для сопоставления числа каждому semantic_id + + def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, + residuals: torch.Tensor) -> None: """ Создает разреженный тензор, который содержит сгруппированные по semantic id элементы @@ -65,53 +52,35 @@ def create_query_candidates_dict( semantic_ids = semantic_ids.to(self.device) unique_id = (semantic_ids * self.key).sum(dim=1) # хэши - unique_ids, inverse_indices, counts = torch.unique( - unique_id, return_inverse=True, return_counts=True - ) - sorted_indices = torch.argsort( - inverse_indices - ) # сортированные индексы чтобы совпадающие хэши шли подряд + unique_ids, inverse_indices, counts = torch.unique(unique_id, return_inverse=True, return_counts=True) + sorted_indices = torch.argsort(inverse_indices) # сортированные индексы чтобы совпадающие хэши шли подряд row_indices = inverse_indices[sorted_indices] # отсортированные хэши offsets = torch.cumsum(counts, dim=0) - counts - col_indices = ( - torch.arange(semantic_ids_count, device=self.device) - offsets[row_indices] - ) # индексы от 0 до k внутри каждого набора из совпадающих хэшей - - indices = torch.stack( - [unique_ids[row_indices], col_indices], dim=0 - ) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша - - max_residuals_count = int( - counts.max().item() - ) # максимальное количество коллизий для одного sem_id - max_sid = int( - self.codebook_size**self.sem_id_len - ) # максимальный хэш sem_id который может быть - - self._sem_ids_sparse_tensor = torch.sparse_coo_tensor( - indices, - residuals[sorted_indices], - size=(max_sid, max_residuals_count, self.emb_dim), - device=self.device, - ) # (max_sid, max_residuals_count, emb_dim) - - self.counts_dict = defaultdict( - int, zip(unique_ids.tolist(), counts.tolist()) - ) # sid -> collision count - - self.item_ids_sparse_tensor = torch.sparse_coo_tensor( - indices, - item_ids[sorted_indices], - size=(max_sid, max_residuals_count), - device=self.device, - dtype=torch.int32, - ) # (max_sid, max_residuals_count) - - def get_residuals_by_semantic_id_batch( - self, semantic_ids: torch.Tensor - ) -> tuple[torch.Tensor, torch.Tensor]: + col_indices = torch.arange(semantic_ids_count, device=self.device) - offsets[ + row_indices] # индексы от 0 до k внутри каждого набора из совпадающих хэшей + + indices = torch.stack([ + unique_ids[row_indices], + col_indices + ], + dim=0) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша + + max_residuals_count = int(counts.max().item()) # максимальное количество коллизий для одного sem_id + max_sid = int(self.codebook_size ** self.sem_id_len) # максимальный хэш sem_id который может быть + + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], + size=(max_sid, max_residuals_count, self.emb_dim), + device=self.device) # (max_sid, max_residuals_count, emb_dim) + + self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) # sid -> collision count + + self.item_ids_sparse_tensor = torch.sparse_coo_tensor(indices, item_ids[sorted_indices], + size=(max_sid, max_residuals_count), device=self.device, + dtype=torch.int32) # (max_sid, max_residuals_count) + + def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: """ :param semantic_ids батч из semantic ids (batch_size, sem_id_len) @@ -124,21 +93,13 @@ def get_residuals_by_semantic_id_batch( semantic_ids = semantic_ids.to(self.device) unique_ids = (semantic_ids * self.key).sum(dim=1) - candidates = torch.stack( - [self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids] - ) - counts = torch.tensor( - [self.counts_dict[key.item()] for key in unique_ids], device=self.device - ) - mask = torch.arange(candidates.shape[1], device=self.device).expand( - len(unique_ids), -1 - ) < counts.view(-1, 1) + candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) + counts = torch.tensor([self.counts_dict[key.item()] for key in unique_ids], device=self.device) + mask = torch.arange(candidates.shape[1], device=self.device).expand(len(unique_ids), -1) < counts.view(-1, 1) return candidates, mask - def get_pred_scores( - self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor - ) -> dict[str, torch.Tensor]: + def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param pred_residuals: [batch_size, emb_dim] предсказанные остатки @@ -159,26 +120,19 @@ def get_pred_scores( candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) - pred_scores = torch.einsum( - "njk,nk->nj", candidates, pred_residuals - ).masked_fill(~mask, -torch.inf) + pred_scores = torch.einsum('njk,nk->nj', candidates, pred_residuals).masked_fill(~mask, -torch.inf) pred_indices = torch.argmax(pred_scores, dim=1) pred_item_ids = torch.stack( - [ - self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] - for i in range(semantic_ids.shape[0]) - ] - ) + [self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) return { "pred_scores_mask": mask, "pred_scores": pred_scores, - "pred_item_ids": pred_item_ids, + "pred_item_ids": pred_item_ids } - def get_true_dedup_tokens( - self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor - ) -> dict[str, torch.Tensor]: + def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[ + str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param true_residuals: [batch_size, emb_dim] реальные остатки @@ -200,11 +154,11 @@ def get_true_dedup_tokens( assert matches.any(dim=1).all(), "Не у всех батчей есть совпадение" - return {"true_dedup_tokens": true_dedup_tokens} + return { + "true_dedup_tokens": true_dedup_tokens + } - def get_item_ids_batch( - self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor - ) -> torch.Tensor: + def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токенов решающего коллизии) :param dedup_tokens: [batch_size] токены решающие коллизии @@ -220,10 +174,6 @@ def get_item_ids_batch( unique_ids = (semantic_ids * self.key).sum(dim=1) item_ids = torch.stack( - [ - self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] - for i in range(semantic_ids.shape[0]) - ] - ) + [self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) return item_ids diff --git a/modeling/rqvae_utils/rqvae_data.py b/modeling/rqvae_utils/rqvae_data.py index 5ffec08e..47692cae 100644 --- a/modeling/rqvae_utils/rqvae_data.py +++ b/modeling/rqvae_utils/rqvae_data.py @@ -1,11 +1,11 @@ -import gzip +import pandas as pd import json +import gzip +from transformers import AutoTokenizer, AutoModelForSeq2SeqLM +import torch import random -import pandas as pd -import torch from tqdm import tqdm -from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tqdm.pandas() @@ -76,7 +76,7 @@ def get_data(cached=True): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: df = torch.load("../data/Beauty/data_full.pt", weights_only=False) - + return df @@ -91,3 +91,6 @@ def search_similar_items(items_with_tuples, clust2search, max_cnt=5): if cnt >= max_cnt: return similars return similars + + + diff --git a/modeling/rqvae_utils/rqvae_test.py b/modeling/rqvae_utils/rqvae_test.py index 03f8e3e8..611e7739 100644 --- a/modeling/rqvae_utils/rqvae_test.py +++ b/modeling/rqvae_utils/rqvae_test.py @@ -6,7 +6,6 @@ from models import RqVaeModel from utils import DEVICE - def test(a, b): cos_sim = torch.nn.functional.cosine_similarity(a, b, dim=0) norm_a = torch.norm(a, p=2) @@ -14,7 +13,6 @@ def test(a, b): l2_dist = torch.norm(a - b, p=2) / (norm_a + norm_b + 1e-8) return cos_sim, l2_dist - if __name__ == "__main__": config = json.load(open("../configs/train/tiger_train_config.json")) config = config["model"] @@ -26,16 +24,14 @@ def test(a, b): ) df = torch.load(config["embs_extractor_path"], weights_only=False) embeddings_array = np.stack(df["embeddings"].values) - tensor_embeddings = torch.tensor( - embeddings_array, dtype=torch.float32, device=DEVICE - ) - inputs = {"embeddings": tensor_embeddings} + tensor_embeddings = torch.tensor(embeddings_array, dtype=torch.float32, device=DEVICE) + inputs = {'embeddings': tensor_embeddings} rqvae_model.eval() sem_ids, residuals = rqvae_model.forward(inputs) scores = residuals.detach() print(torch.norm(residuals, p=2, dim=1).median()) - for i, codebook in enumerate(rqvae_model.codebooks): + for (i, codebook) in enumerate(rqvae_model.codebooks): scores += codebook[sem_ids[:, i]].detach() decoder_output = rqvae_model.decoder(scores.detach()).detach() @@ -45,14 +41,11 @@ def test(a, b): print("косинусное расстояние", cos_sim) print("евклидово расстояние", l2_dist) - cos_sim = torch.nn.functional.cosine_similarity( - tensor_embeddings, decoder_output, dim=1 - ) + cos_sim = torch.nn.functional.cosine_similarity(tensor_embeddings, decoder_output, dim=1) print("косинусное расстояние", cos_sim.mean(), cos_sim.min(), cos_sim.max()) - norm_a = torch.norm(tensor_embeddings, p=2, dim=1) - norm_b = torch.norm(decoder_output, p=2, dim=1) - l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim=1) / ( - norm_a + norm_b + 1e-8 - ) - print("евклидово расстояние", l2_dist.median(), l2_dist.min(), l2_dist.max()) + norm_a = torch.norm(tensor_embeddings, p=2, dim = 1) + norm_b = torch.norm(decoder_output, p=2, dim = 1) + l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim = 1) / (norm_a + norm_b + 1e-8) + print("евклидово расстояние",l2_dist.median(), l2_dist.min(), l2_dist.max()) + diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 120f9a80..5a09dcb4 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -10,21 +10,14 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = ( - embedding_table # (semantic_id_len, codebook_size, emb_dim) - ) + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure( - self, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - item_ids: torch.Tensor, - sum_with_residuals: bool = True, - ) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, + sum_with_residuals: bool = True) -> None: """ :param sum_with_residuals: флаг, отвечающий за то учитывать ли остатки при выборе кандидатов :param semantic_ids: (sem_ids_count, sem_id_len) @@ -37,11 +30,9 @@ def build_tree_structure( assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) - residuals = ( - residuals.to(self.device).float() - if sum_with_residuals - else torch.zeros_like(residuals, device=self.device, dtype=torch.float) - ) + residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, + device=self.device, + dtype=torch.float) self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals self.item_ids = item_ids @@ -53,17 +44,14 @@ def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: assert sem_ids.shape[1] == self.sem_id_len sem_ids = sem_ids.to(self.device) - expanded_emb_table = self.embedding_table.unsqueeze(0).expand( - sem_ids.shape[0], -1, -1, -1 - ) # (count, sem_id_len, codebook_size, emb_dim) + expanded_emb_table = (self.embedding_table.unsqueeze(0) + .expand(sem_ids.shape[0], -1, -1, -1)) # (count, sem_id_len, codebook_size, emb_dim) - index = ( - sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) - ) # (count, sem_id_len, 1, emb_dim) + index = (sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (count, sem_id_len, 1, emb_dim) - return ( - torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) - ) # (count, emb_dim) + return torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) # (count, emb_dim) def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Tensor: """ @@ -75,21 +63,14 @@ def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Ten assert 0 < items_to_query <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - request_embeddings = self.calculate_full( - request_sem_ids - ) # (batch_size, emb_dim) + request_embeddings = self.calculate_full(request_sem_ids) # (batch_size, emb_dim) - request_embeddings = request_embeddings.unsqueeze(1).expand( - -1, self.sem_ids_count, -1 - ) # (batch_size, sem_ids_count, emb_dim) + request_embeddings = (request_embeddings.unsqueeze(1) + .expand(-1, self.sem_ids_count, -1)) # (batch_size, sem_ids_count, emb_dim) - diff_norm = torch.norm( - self.full_embeddings - request_embeddings, p=2, dim=2 - ) # (batch_size, sem_ids_count) + diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) - indices = torch.argsort(diff_norm, descending=False, dim=1)[ - :, :items_to_query - ] # (batch_size, k) + indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :items_to_query] # (batch_size, k) return self.item_ids[indices] def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: @@ -103,21 +84,18 @@ def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: assert 0 < k <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - index = ( - request_sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) - ) # (batch_size, sem_id_len, 1, emb_dim) + index = (request_sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) request_embeddings = torch.gather( - input=self.embedding_table.unsqueeze(0).expand( - request_sem_ids.shape[0], -1, -1, -1 - ), + input=self.embedding_table.unsqueeze(0).expand(request_sem_ids.shape[0], -1, -1, -1), dim=2, - index=index, + index=index ).sum(1) # (batch_size, emb_dim) - diff_norm = torch.cdist( - self.full_embeddings, request_embeddings.unsqueeze(1), p=2 - ).squeeze(1) # (batch_size, sem_ids_count) + diff_norm = torch.cdist(self.full_embeddings, request_embeddings.unsqueeze(1), p=2).squeeze( + 1) # (batch_size, sem_ids_count) _, indices = torch.topk(diff_norm, k=k, dim=1, largest=False) # (batch_size, k) return self.item_ids[indices.squeeze(-1)] diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 336f6dbe..b09cd049 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -11,9 +11,7 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = ( - embedding_table # (semantic_id_len, codebook_size, emb_dim) - ) + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.key: torch.Tensor = torch.empty((0, 0)) self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) @@ -22,12 +20,7 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure( - self, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - item_ids: torch.Tensor, - ): + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor): """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) @@ -41,41 +34,22 @@ def build_tree_structure( assert item_ids.shape == (self.sem_ids_count,) self.item_ids = item_ids - self.key = torch.tensor( - [self.codebook_size**i for i in range(self.sem_id_len - 1, -1, -1)], - dtype=torch.long, - device=self.device, - ) + self.key = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len - 1, -1, -1)], + dtype=torch.long, device=self.device) self.sids = self.get_sids(semantic_ids.float()) # (sem_id_len, ) self.sem_ids_embs = self.calculate_full(semantic_ids, residuals) - result = torch.full( - size=[self.codebook_size**self.sem_id_len], - fill_value=0, - dtype=torch.int64, - device=self.device, - ) + result = torch.full(size=[self.codebook_size ** self.sem_id_len], fill_value=0, dtype=torch.int64, + device=self.device) temp_unique_id = self.sids * self.codebook_size - temp_sem_ids = torch.concat( - [ - semantic_ids, - torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1), - ], - dim=-1, - ) + temp_sem_ids = torch.concat([semantic_ids, torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1)], + dim=-1) for i in range(0, self.sem_id_len + 1): - temp_unique_id = ( - temp_unique_id - - (self.codebook_size**i) * temp_sem_ids[:, self.sem_id_len - i] - ) - temp_unique_ids, temp_inverse_indices = torch.unique( - temp_unique_id, return_inverse=True - ) + temp_unique_id = temp_unique_id - (self.codebook_size ** i) * temp_sem_ids[:, self.sem_id_len - i] + temp_unique_ids, temp_inverse_indices = torch.unique(temp_unique_id, return_inverse=True) temp_counts = torch.bincount(temp_inverse_indices) - truncated_ids = torch.floor_divide( - input=temp_unique_id, other=(self.codebook_size ** (i + 1)) - ).long() + truncated_ids = torch.floor_divide(input=temp_unique_id, other=(self.codebook_size ** (i + 1))).long() result[truncated_ids] = temp_counts[temp_inverse_indices] self.A = result @@ -90,21 +64,13 @@ def get_counts(self, sem_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor] offsets = torch.arange(self.sem_id_len + 1, device=self.device) i = torch.arange(self.sem_id_len, device=self.device) - mask_sem = ( - i < (self.sem_id_len - offsets.unsqueeze(1)) - ).long() # (sem_id_len + 1, sem_id_len) + mask_sem = (i < (self.sem_id_len - offsets.unsqueeze(1))).long() # (sem_id_len + 1, sem_id_len) divs = torch.pow(self.codebook_size, offsets) # (sem_id_len + 1,) - C = ( - sem_ids.unsqueeze(1) - * mask_sem.unsqueeze(0) - * self.key.unsqueeze(0).unsqueeze(1) - ).sum(dim=-1) + C = (sem_ids.unsqueeze(1) * mask_sem.unsqueeze(0) * self.key.unsqueeze(0).unsqueeze(1)).sum(dim=-1) B = C // divs.unsqueeze(0) - return C, self.A[ - B - ] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) + return C, self.A[B] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: """ @@ -112,11 +78,9 @@ def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: :return: хэши sem_ids (sem_id_count,) """ assert sem_ids.shape[1] == self.sem_id_len - return torch.einsum("nc,c->n", sem_ids, self.key.float()) # (sem_ids_count,) + return torch.einsum('nc,c->n', sem_ids, self.key.float()) # (sem_ids_count,) - def calc_ol( - self, batch_ids: torch.Tensor, k: int - ) -> tuple[torch.Tensor, torch.Tensor]: + def calc_ol(self, batch_ids: torch.Tensor, k: int) -> tuple[torch.Tensor, torch.Tensor]: """ :param batch_ids: (batch_size, sem_id_len) :param k: int @@ -130,8 +94,7 @@ def calc_ol( gather_ol = torch.gather(c, dim=1, index=ol.unsqueeze(1)).squeeze() # (bs,) mask_ol = (gather_ol.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1) - ) + self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1)) return ol, mask_ol # (bs,) (bs, sem_ids_count) def calc_il(self, batch_ids, k): @@ -145,27 +108,19 @@ def calc_il(self, batch_ids, k): batch_dim = batch_ids.shape[0] c, a = self.get_counts(batch_ids) - extended_c = torch.concat( - [torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], - dim=1, - ) + extended_c = torch.concat([torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], dim=1) il = torch.argmax((a > k).long(), dim=-1) - 1 # (bs,) - gather_il = torch.gather( - extended_c, dim=1, index=(il + 1).unsqueeze(1) - ).squeeze() # (bs,) + gather_il = torch.gather(extended_c, dim=1, index=(il + 1).unsqueeze(1)).squeeze() # (bs,) mask_il = (gather_il.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1) - ) + self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1)) return il, mask_il # (bs,) (bs, sem_ids_count) def get_repeated_sids(self, k: int) -> torch.Tensor: return self.sids.repeat(k, 1) # (k, sem_ids_count) - def get_request_embeddings( - self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor - ) -> torch.Tensor: + def get_request_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) @@ -174,16 +129,11 @@ def get_request_embeddings( assert decomposed_embeddings.shape[1:] == (self.sem_id_len + 1, self.emb_dim) assert levels.shape == (decomposed_embeddings.shape[0],) - mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange( - self.sem_id_len + 2, 0, -1, device=self.device - ).unsqueeze(1) - return torch.sum( - decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1 - ) # (bs, emb_dim) + mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange(self.sem_id_len + 2, 0, -1, + device=self.device).unsqueeze(1) + return torch.sum(decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1) # (bs, emb_dim) - def calculate_full( - self, sem_ids: torch.Tensor, residuals: torch.Tensor - ) -> torch.Tensor: + def calculate_full(self, sem_ids: torch.Tensor, residuals: torch.Tensor) -> torch.Tensor: """ :param sem_ids: sem_ids (count, sem_id_len) :param residuals: остатки для каждого sem_id (count, emb_dim) @@ -195,56 +145,31 @@ def calculate_full( count = residuals.shape[0] index = sem_ids.view(count, -1, 1, 1).expand(-1, -1, -1, self.emb_dim) - embs = torch.gather( - input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), - dim=2, - index=index, - ) # expand бесплатный по памяти - decomposed_embs = torch.concat( - [embs.squeeze(2), residuals.unsqueeze(1)], dim=1 - ) # (sem_ids_count, emb_dim) - - assert decomposed_embs.shape == ( - sem_ids.shape[0], - self.sem_id_len + 1, - self.emb_dim, - ) + embs = torch.gather(input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), dim=2, + index=index) # expand бесплатный по памяти + decomposed_embs = torch.concat([embs.squeeze(2), residuals.unsqueeze(1)], dim=1) # (sem_ids_count, emb_dim) + + assert decomposed_embs.shape == (sem_ids.shape[0], self.sem_id_len + 1, self.emb_dim) return decomposed_embs - def calculate_level_embeddings( - self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor - ) -> torch.Tensor: + def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) :return: эмбеддинги для всех sem_ids для нужных глубин (batch_size, sem_ids_count, emb_dim) """ - assert decomposed_embeddings.shape == ( - self.sem_ids_count, - self.sem_id_len + 1, - self.emb_dim, - ) - - mask = ( - torch.arange(1, self.sem_id_len + 2, device=self.device) - >= torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1) - ).float() + assert decomposed_embeddings.shape == (self.sem_ids_count, self.sem_id_len + 1, self.emb_dim) + + mask = (torch.arange(1, self.sem_id_len + 2, device=self.device) >= + torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1)).float() sids_mask = mask[levels + 1].unsqueeze(-1) # (batch_size, sem_id_len + 1, 1) - return torch.einsum( - "nld,bld->bnd", decomposed_embeddings, sids_mask - ) # (batch_size, sem_ids_count, emb_dim) + return torch.einsum('nld,bld->bnd', decomposed_embeddings, sids_mask) # (batch_size, sem_ids_count, emb_dim) def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: - return torch.where( - mask, result, torch.tensor(float("-inf"), device=self.device) - ) - - def query( - self, - request_sem_ids: torch.Tensor, - request_residuals: torch.Tensor, - items_to_query: int, - ) -> torch.Tensor: + return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) + + def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, + items_to_query: int) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) @@ -272,31 +197,13 @@ def query( ol_request_embeddings = self.get_request_embeddings(request_embs, ol) il_request_embeddings = self.get_request_embeddings(request_embs, il) - ol_scores = ( - torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)) - .squeeze(-1) - .detach() - .cpu() - ) - - il_scores = ( - torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)) - .squeeze(-1) - .detach() - .cpu() - ) - - ids = np.lexsort( - keys=( - -torch.cat([il_scores, ol_scores], dim=1), - ~torch.cat( - [torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1 - ), - ~torch.cat([il_mask, ol_mask], dim=1), - ) - ) - - ids = (ids % self.sem_ids_count)[:, : self.sem_ids_count][ - :, :items_to_query - ] # (batch_size, k) + ol_scores = torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + il_scores = torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + ids = np.lexsort(keys=(-torch.cat([il_scores, ol_scores], dim=1), + ~torch.cat([torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1), + ~torch.cat([il_mask, ol_mask], dim=1))) + + ids = (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :items_to_query] # (batch_size, k) return self.item_ids[ids] diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index f73db7c6..3f1d3f38 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -6,20 +6,20 @@ import torch from models.rqvae import RqVaeModel -from rqvae_utils import SimplifiedTree, Tree, Trie +from rqvae_utils import Trie, SimplifiedTree, Tree from utils import DEVICE def memory_stats(k): process = psutil.Process(os.getpid()) - memory_usage = process.memory_info().rss / 1024**2 + memory_usage = process.memory_info().rss / 1024 ** 2 print(f"{k}. Использование памяти: {memory_usage:.2f} MB") def calc_sid(sid, codebook_size): res = sid[-1] for i in range(1, sid.shape[0]): - res += sid[-i - 1] * (codebook_size**i) + res += sid[-i - 1] * (codebook_size ** i) return res @@ -41,7 +41,9 @@ def stats(query_sem_id, codebook_size, sids, item_ids): ) rqvae_model.eval() - emb_table = torch.stack([cb for cb in rqvae_model.codebooks]).to(DEVICE) + emb_table = torch.stack( + [cb for cb in rqvae_model.codebooks] + ).to(DEVICE) trie = Trie(rqvae_model) tree = Tree(rqvae_model, DEVICE) @@ -71,18 +73,14 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_wr.build_tree_structure(semantic_ids, residuals, item_ids, False) - print( - f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms" - ) + print(f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms") full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) print(torch.all((full_embeddings == simplified_tree.full_embeddings) == True)) items_to_query = 20 batch_size = 256 - q_semantic_ids = torch.randint( - 0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE - ) + q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE) q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) total_time = 0 diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 4a4ca5b7..b7971e86 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -2,7 +2,6 @@ import time import torch - from models.rqvae import RqVaeModel from utils import DEVICE diff --git a/modeling/train.py b/modeling/train.py index 4919be6f..d865620d 100644 --- a/modeling/train.py +++ b/modeling/train.py @@ -1,32 +1,23 @@ -import copy -import json -import os - -import torch - import utils +from utils import parse_args, create_logger, DEVICE, fix_random_seed + from callbacks import BaseCallback -from dataloader import BaseDataloader from dataset import BaseDataset +from dataloader import BaseDataloader from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer -from utils import DEVICE, create_logger, fix_random_seed, parse_args + +import copy +import json +import os +import torch logger = create_logger(name=__name__) seed_val = 42 -def train( - dataloader, - model, - optimizer, - loss_function, - callback, - epoch_cnt=None, - step_cnt=None, - best_metric=None, -): +def train(dataloader, model, optimizer, loss_function, callback, epoch_cnt=None, step_cnt=None, best_metric=None): step_num = 0 epoch_num = 0 current_metric = 0 @@ -36,20 +27,14 @@ def train( best_epoch = 0 best_checkpoint = None - logger.debug("Start training...") + logger.debug('Start training...') - while (epoch_cnt is None or epoch_num < epoch_cnt) and ( - step_cnt is None or step_num < step_cnt - ): + while (epoch_cnt is None or epoch_num < epoch_cnt) and (step_cnt is None or step_num < step_cnt): if best_epoch + epochs_threshold < epoch_num: - logger.debug( - "There is no progress during {} epochs. Finish training".format( - epochs_threshold - ) - ) + logger.debug('There is no progress during {} epochs. Finish training'.format(epochs_threshold)) break - logger.debug(f"Start epoch {epoch_num}") + logger.debug(f'Start epoch {epoch_num}') for step, batch in enumerate(dataloader): batch_ = copy.deepcopy(batch) @@ -69,18 +54,14 @@ def train( # Take the last model best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num - elif ( - best_checkpoint is None - or best_metric in batch_ - and current_metric <= batch_[best_metric] - ): + elif best_checkpoint is None or best_metric in batch_ and current_metric <= batch_[best_metric]: # If it is the first checkpoint, or it is the best checkpoint current_metric = batch_[best_metric] best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num epoch_num += 1 - logger.debug("Training procedure has been finished!") + logger.debug('Training procedure has been finished!') return best_checkpoint @@ -88,54 +69,59 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( - config["experiment_name"] - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ + utils.tensorboards.TensorboardWriter(config['experiment_name']) - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) - logger.debug("Current DEVICE: {}".format(DEVICE)) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) + logger.debug('Current DEVICE: {}'.format(DEVICE)) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) train_sampler, validation_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=validation_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=validation_sampler, + **dataset.meta ) eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=test_sampler, + **dataset.meta ) - model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) - if "checkpoint" in config: - checkpoint_path = os.path.join("../checkpoints", f"{config['checkpoint']}.pth") - logger.debug("Loading checkpoint from {}".format(checkpoint_path)) + model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) + if 'checkpoint' in config: + checkpoint_path = os.path.join('../checkpoints', f'{config["checkpoint"]}.pth') + logger.debug('Loading checkpoint from {}'.format(checkpoint_path)) checkpoint = torch.load(checkpoint_path) print(checkpoint.keys()) model.load_state_dict(checkpoint) - loss_function = BaseLoss.create_from_config(config["loss"]) + loss_function = BaseLoss.create_from_config(config['loss']) - optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) + optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta, + **dataset.meta ) # TODO add verbose option for all callbacks, multiple optimizer options (???) # TODO create pre/post callbacks - logger.debug("Everything is ready for training process!") + logger.debug('Everything is ready for training process!') # Train process _ = train( @@ -144,18 +130,16 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get("train_epochs_num"), - step_cnt=config.get("train_steps_num"), - best_metric=config.get("best_metric"), + epoch_cnt=config.get('train_epochs_num'), + step_cnt=config.get('train_steps_num'), + best_metric=config.get('best_metric') ) - logger.debug("Saving model...") - checkpoint_path = "../checkpoints/{}_final_state.pth".format( - config["experiment_name"] - ) + logger.debug('Saving model...') + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) torch.save(model.state_dict(), checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/train_multiple.py b/modeling/train_multiple.py index 8c118584..c42f77a6 100644 --- a/modeling/train_multiple.py +++ b/modeling/train_multiple.py @@ -1,26 +1,20 @@ import itertools import json import random - import torch import utils +from utils import parse_args, create_logger, DEVICE, Params, dict_to_str, fix_random_seed + +from train import train +from infer import inference + from callbacks import BaseCallback, EvalCallback, ValidationCallback -from dataloader import BaseDataloader from dataset import BaseDataset -from infer import inference +from dataloader import BaseDataloader from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer -from train import train -from utils import ( - DEVICE, - Params, - create_logger, - dict_to_str, - fix_random_seed, - parse_args, -) logger = create_logger(name=__name__) seed_val = 42 @@ -30,23 +24,24 @@ def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) - dataset_params = Params(config["dataset"], config["dataset_params"]) - model_params = Params(config["model"], config["model_params"]) - loss_function_params = Params(config["loss"], config["loss_params"]) - optimizer_params = Params(config["optimizer"], config["optimizer_params"]) + dataset_params = Params(config['dataset'], config['dataset_params']) + model_params = Params(config['model'], config['model_params']) + loss_function_params = Params(config['loss'], config['loss_params']) + optimizer_params = Params(config['optimizer'], config['optimizer_params']) - logger.debug("Everything is ready for training process!") + logger.debug('Everything is ready for training process!') - start_from = config.get("start_from", 0) - num = config.get("num_exps", None) + start_from = config.get('start_from', 0) + num = config.get('num_exps', None) - list_of_params = list( - itertools.product( - dataset_params, model_params, loss_function_params, optimizer_params - ) - ) + list_of_params = list(itertools.product( + dataset_params, + model_params, + loss_function_params, + optimizer_params + )) if num is None: num = len(list_of_params) @@ -55,61 +50,59 @@ def main(): cnt = 0 - for dataset_param, model_param, loss_param, optimizer_param in list_of_params[ - start_from:num - ]: + for dataset_param, model_param, loss_param, optimizer_param in list_of_params[start_from:num]: cnt += 1 if cnt < start_from: continue - model_name = "_".join( - [ - config["experiment_name"], - dict_to_str(dataset_param, config["dataset_params"]), - dict_to_str(model_param, config["model_params"]), - dict_to_str(loss_param, config["loss_params"]), - dict_to_str(optimizer_param, config["optimizer_params"]), - ] - ) + model_name = '_'.join([ + config['experiment_name'], + dict_to_str(dataset_param, config['dataset_params']), + dict_to_str(model_param, config['model_params']), + dict_to_str(loss_param, config['loss_params']), + dict_to_str(optimizer_param, config['optimizer_params']) + ]) - logger.debug("Starting {}".format(model_name)) + logger.debug('Starting {}'.format(model_name)) dataset = BaseDataset.create_from_config(dataset_param) train_sampler, validation_sampler, eval_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], + config['dataloader']['validation'], dataset=validation_sampler, - **dataset.meta, + **dataset.meta ) eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=eval_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=eval_sampler, + **dataset.meta ) if utils.tensorboards.GLOBAL_TENSORBOARD_WRITER is not None: utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.close() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = ( - utils.tensorboards.TensorboardWriter(model_name, use_time=False) - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter(model_name, use_time=False) model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) loss_function = BaseLoss.create_from_config(loss_param) optimizer = BaseOptimizer.create_from_config(optimizer_param, model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta, + **dataset.meta ) best_model_checkpoint = train( @@ -118,13 +111,11 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get("train_epochs_num"), - best_metric=config.get("best_metric"), + epoch_cnt=config.get('train_epochs_num'), + best_metric=config.get('best_metric') ) - eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to( - DEVICE - ) + eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) eval_model.load_state_dict(best_model_checkpoint) for cl in callback._callbacks: @@ -145,11 +136,11 @@ def main(): inference(eval_dataloader, eval_model, metrics, pred_prefix, labels_prefix) - logger.debug("Saving best model checkpoint...") - checkpoint_path = "../checkpoints/{}_final_state.pth".format(model_name) + logger.debug('Saving best model checkpoint...') + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(model_name) torch.save(best_model_checkpoint, checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 1d62369e..8b96ac52 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -1,37 +1,39 @@ -import argparse +from utils.registry import MetaParent +from utils.grid_search import Params +import utils.tensorboards + import json -import logging import random - +import logging +import argparse import numpy as np -import torch -import utils.tensorboards -from utils.grid_search import Params -from utils.registry import MetaParent +import torch if torch.cuda.is_available(): - DEVICE = torch.device("cuda") + DEVICE = torch.device('cuda:0') +# elif torch.backends.mps.is_available(): +# DEVICE = torch.device("mps:0") else: - DEVICE = torch.device("cpu") + DEVICE = torch.device('cpu') def parse_args(): parser = argparse.ArgumentParser() - parser.add_argument("--params", required=True) + parser.add_argument('--params', required=True) args = parser.parse_args() with open(args.params) as f: params = json.load(f) - + return params def create_logger( - name, - level=logging.DEBUG, - format="[%(asctime)s] [%(levelname)s]: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", + name, + level=logging.DEBUG, + format='[%(asctime)s] [%(levelname)s]: %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' ): logging.basicConfig(level=level, format=format, datefmt=datefmt) logger = logging.getLogger(name) @@ -52,31 +54,26 @@ def maybe_to_list(values): def get_activation_function(name, **kwargs): - if name == "relu": + if name == 'relu': return torch.nn.ReLU() - elif name == "gelu": + elif name == 'gelu': return torch.nn.GELU() - elif name == "elu": - return torch.nn.ELU(alpha=float(kwargs.get("alpha", 1.0))) - elif name == "leaky": - return torch.nn.LeakyReLU( - negative_slope=float(kwargs.get("negative_slope", 1e-2)) - ) - elif name == "sigmoid": + elif name == 'elu': + return torch.nn.ELU(alpha=float(kwargs.get('alpha', 1.0))) + elif name == 'leaky': + return torch.nn.LeakyReLU(negative_slope=float(kwargs.get('negative_slope', 1e-2))) + elif name == 'sigmoid': return torch.nn.Sigmoid() - elif name == "tanh": + elif name == 'tanh': return torch.nn.Tanh() - elif name == "softmax": + elif name == 'softmax': return torch.nn.Softmax() - elif name == "softplus": - return torch.nn.Softplus( - beta=int(kwargs.get("beta", 1.0)), - threshold=int(kwargs.get("threshold", 20)), - ) - elif name == "softmax_logit": + elif name == 'softplus': + return torch.nn.Softplus(beta=int(kwargs.get('beta', 1.0)), threshold=int(kwargs.get('threshold', 20))) + elif name == 'softmax_logit': return torch.nn.LogSoftmax() else: - raise ValueError("Unknown activation function name `{}`".format(name)) + raise ValueError('Unknown activation function name `{}`'.format(name)) def dict_to_str(x, params): @@ -85,21 +82,19 @@ def dict_to_str(x, params): if k in params: if isinstance(v, dict): # part = '_'.join([f'{k}-{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) - part = "_".join( - [f"{sub_part}" for sub_part in dict_to_str(v, params[k]).split("_")] - ) + part = '_'.join([f'{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) elif isinstance(v, tuple) or isinstance(v, list): sub_strings = [] for i, sub_value in enumerate(v): - sub_strings.append(f"({i})_{dict_to_str(v[i], params[k][i])}") - part = f"({'_'.join(sub_strings)})" + sub_strings.append(f'({i})_{dict_to_str(v[i], params[k][i])}') + part = f'({"_".join(sub_strings)})' else: # part = f'{k}-{v}' - part = f"{v}" + part = f'{v}' parts.append(part) else: continue - return "_".join(parts).replace(".", "-") + return '_'.join(parts).replace('.', '-') def create_masked_tensor(data, lengths): @@ -108,22 +103,20 @@ def create_masked_tensor(data, lengths): if len(data.shape) == 1: # only indices padded_tensor = torch.zeros( - batch_size, max_sequence_length, dtype=data.dtype, device=DEVICE + batch_size, max_sequence_length, + dtype=data.dtype, device=DEVICE ) # (batch_size, max_seq_len) else: assert len(data.shape) == 2 # embeddings padded_tensor = torch.zeros( - batch_size, - max_sequence_length, - data.shape[-1], - dtype=data.dtype, - device=DEVICE, + batch_size, max_sequence_length, data.shape[-1], + dtype=data.dtype, device=DEVICE ) # (batch_size, max_seq_len, emb_dim) - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile([batch_size, 1]) - < lengths[:, None] - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < lengths[:, None] # (batch_size, max_seq_len) padded_tensor[mask] = data diff --git a/modeling/utils/grid_search.py b/modeling/utils/grid_search.py index d7330421..268d9458 100644 --- a/modeling/utils/grid_search.py +++ b/modeling/utils/grid_search.py @@ -3,6 +3,7 @@ class Params: + def __init__(self, config, params): self._initial_config = copy.deepcopy(config) self._initial_params = copy.deepcopy(params) @@ -11,9 +12,7 @@ def __iter__(self): keys = [] values = [] - all_keys = set(self._initial_config.keys()).union( - set(self._initial_params.keys()) - ) + all_keys = set(self._initial_config.keys()).union(set(self._initial_params.keys())) for field_name in all_keys: keys.append(field_name) @@ -22,28 +21,18 @@ def __iter__(self): params_fields_value = self._initial_params.get(field_name) if initial_field_value: - if ( - params_fields_value is None - ): # We don't want to iterate through this field + if params_fields_value is None: # We don't want to iterate through this field values.append([initial_field_value]) - elif isinstance(initial_field_value, list) and isinstance( - initial_field_value, list - ): + elif isinstance(initial_field_value, list) and isinstance(initial_field_value, list): assert len(initial_field_value) == len(params_fields_value) list_values = [] for i in range(len(initial_field_value)): - field_variations = list( - Params(initial_field_value[i], params_fields_value[i]) - ) + field_variations = list(Params(initial_field_value[i], params_fields_value[i])) list_values.append(field_variations) list_values = [p for p in product(*list_values)] values.append(list_values) - elif isinstance( - initial_field_value, dict - ): # It is composite param, need to go inside - field_variations = list( - Params(initial_field_value, params_fields_value) - ) + elif isinstance(initial_field_value, dict): # It is composite param, need to go inside + field_variations = list(Params(initial_field_value, params_fields_value)) values.append(field_variations) else: # Simple param, can take as it is values.append([initial_field_value] + params_fields_value) diff --git a/modeling/utils/registry.py b/modeling/utils/registry.py index 3942269b..c2225480 100644 --- a/modeling/utils/registry.py +++ b/modeling/utils/registry.py @@ -2,6 +2,7 @@ class MetaParent(type): + def __init__(cls, name, base, params, **kwargs): super().__init__(name, base, params) is_base_class = cls.mro()[1] is object @@ -11,10 +12,10 @@ def __init__(cls, name, base, params, **kwargs): base_class_found = False for key in cls.mro(): if isinstance(key, MetaParent) and key.mro()[1] is object: - assert base_class_found is False, "multiple base classes(bug)" + assert base_class_found is False, 'multiple base classes(bug)' base_class = key base_class_found = True - assert base_class_found is True, f"no base class for {name}" + assert base_class_found is True, f'no base class for {name}' if is_base_class: cls._subclasses = {} @@ -24,9 +25,7 @@ def __init_subclass__(scls, config_name=None): super().__init_subclass__() if config_name is not None: if config_name in base_class._subclasses: - raise ValueError( - "Class with name `{}` is already registered".format(config_name) - ) + raise ValueError("Class with name `{}` is already registered".format(config_name)) scls.config_name = config_name base_class._subclasses[config_name] = scls @@ -34,19 +33,15 @@ def __init_subclass__(scls, config_name=None): @classmethod def parent_create_from_config(cls, config, **kwargs): - if "type" in config: - return cls._subclasses[config["type"]].create_from_config( - config, **kwargs - ) + if 'type' in config: + return cls._subclasses[config['type']].create_from_config(config, **kwargs) else: - raise ValueError( - "There is no `type` provided for the `{}` class".format(name) - ) + raise ValueError('There is no `type` provided for the `{}` class'.format(name)) # Take kwargs for the last initialized baseclass init_kwargs = {} for bcls in cls.mro()[:-1]: # Look into all base classes except object - if "__init__" not in bcls.__dict__: + if '__init__' not in bcls.__dict__: continue init_kwargs = inspect.signature(bcls.__init__).parameters break @@ -55,16 +50,14 @@ def parent_create_from_config(cls, config, **kwargs): def child_create_from_config(cls, config, **kwargs): kwargs = {} for key, argspec in init_kwargs.items(): - if key == "self": + if key == 'self': continue value = config.get(key, argspec.default) if value is inspect.Parameter.empty: - msg = "There is no value for `{}.__init__` required field `{}` in config `{}`" + msg = 'There is no value for `{}.__init__` required field `{}` in config `{}`' raise ValueError(msg.format(cls, key, config)) kwargs[key] = value return cls(**kwargs) - if "create_from_config" not in cls.__dict__: - cls.create_from_config = ( - parent_create_from_config if is_base_class else child_create_from_config - ) + if 'create_from_config' not in cls.__dict__: + cls.create_from_config = parent_create_from_config if is_base_class else child_create_from_config diff --git a/modeling/utils/tensorboards/__init__.py b/modeling/utils/tensorboards/__init__.py index a2f8f279..6c470341 100644 --- a/modeling/utils/tensorboards/__init__.py +++ b/modeling/utils/tensorboards/__init__.py @@ -1 +1 @@ -from .tensorboard_writers import GLOBAL_TENSORBOARD_WRITER, LOGS_DIR, TensorboardWriter +from .tensorboard_writers import TensorboardWriter, GLOBAL_TENSORBOARD_WRITER, LOGS_DIR diff --git a/modeling/utils/tensorboards/tensorboard_writers.py b/modeling/utils/tensorboards/tensorboard_writers.py index e788a6f8..770fae63 100644 --- a/modeling/utils/tensorboards/tensorboard_writers.py +++ b/modeling/utils/tensorboards/tensorboard_writers.py @@ -1,21 +1,19 @@ -import datetime import os import time +import datetime from torch.utils.tensorboard import SummaryWriter -LOGS_DIR = "../tensorboard_logs" +LOGS_DIR = '../tensorboard_logs' GLOBAL_TENSORBOARD_WRITER = None class TensorboardWriter(SummaryWriter): + def __init__(self, experiment_name, use_time=True): self._experiment_name = experiment_name super().__init__( - log_dir=os.path.join( - LOGS_DIR, - f"{experiment_name}_{datetime.datetime.now().strftime('%Y-%m-%dT%H:%M' if use_time else '')}", - ) + log_dir=os.path.join(LOGS_DIR, f'{experiment_name}_{datetime.datetime.now().strftime("%Y-%m-%dT%H:%M" if use_time else "")}') ) def add_scalar(self, *args, **kwargs): @@ -23,6 +21,7 @@ def add_scalar(self, *args, **kwargs): class TensorboardTimer: + def __init__(self, scope): super().__init__(LOGS_DIR) self._scope = scope From a1e6f103503cabdfda3c366804efd760e21c6c59 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 22:24:52 +0300 Subject: [PATCH 165/175] Revert "ruff format" This reverts commit 4077b0579fa1ee0a938e635ee8e7e0ad1603a7bc. --- modeling/callbacks/__init__.py | 8 +- modeling/callbacks/base.py | 293 ++++---- modeling/dataloader/base.py | 24 +- modeling/dataloader/batch_processors.py | 34 +- modeling/dataset/base.py | 639 ++++++++---------- .../dataset/negative_samplers/__init__.py | 6 +- modeling/dataset/negative_samplers/base.py | 12 +- modeling/dataset/negative_samplers/popular.py | 28 +- modeling/dataset/negative_samplers/random.py | 3 +- modeling/dataset/samplers/__init__.py | 29 +- modeling/dataset/samplers/base.py | 24 +- modeling/dataset/samplers/cl4srec.py | 110 ++- modeling/dataset/samplers/duorec.py | 44 +- modeling/dataset/samplers/identity.py | 19 +- .../dataset/samplers/last_item_prediction.py | 16 +- .../samplers/masked_item_prediction.py | 59 +- modeling/dataset/samplers/mclsr.py | 45 +- .../dataset/samplers/next_item_prediction.py | 69 +- modeling/dataset/samplers/pop.py | 52 +- modeling/dataset/samplers/s3rec.py | 92 ++- modeling/infer.py | 69 +- modeling/loss/base.py | 394 ++++++----- modeling/metric/base.py | 65 +- modeling/models/__init__.py | 2 +- modeling/models/base.py | 111 ++- modeling/models/bert4rec.py | 94 ++- modeling/models/bert4rec_cls.py | 91 +-- modeling/models/cl4srec.py | 127 ++-- modeling/models/duorec.py | 123 ++-- modeling/models/graph_seq_rec.py | 225 +++--- modeling/models/gru4rec.py | 172 +++-- modeling/models/gtorec.py | 475 +++++-------- modeling/models/lightgcn.py | 129 ++-- modeling/models/mclsr.py | 274 ++++---- modeling/models/mrgsrec.py | 115 ++-- modeling/models/ngcf.py | 133 ++-- modeling/models/pop.py | 36 +- modeling/models/pure_mf.py | 107 ++- modeling/models/pure_svd.py | 6 +- modeling/models/random.py | 29 +- modeling/models/rqvae.py | 81 ++- modeling/models/s3rec.py | 214 +++--- modeling/models/sasrec_ce.py | 85 ++- modeling/models/sasrec_semantic.py | 4 +- modeling/models/tiger.py | 13 +- modeling/optimizer/base.py | 41 +- modeling/pretrain.py | 65 +- modeling/rqvae_utils/__init__.py | 4 +- modeling/rqvae_utils/collision_solver.py | 156 ++--- modeling/rqvae_utils/rqvae_data.py | 13 +- modeling/rqvae_utils/rqvae_test.py | 25 +- modeling/rqvae_utils/simplified_tree.py | 70 +- modeling/rqvae_utils/tree.py | 191 ++---- modeling/rqvae_utils/tree_comparing.py | 18 +- modeling/rqvae_utils/trie.py | 1 - modeling/train.py | 106 ++- modeling/train_multiple.py | 103 ++- modeling/utils/__init__.py | 93 ++- modeling/utils/grid_search.py | 25 +- modeling/utils/registry.py | 31 +- modeling/utils/tensorboards/__init__.py | 2 +- .../utils/tensorboards/tensorboard_writers.py | 11 +- 62 files changed, 2574 insertions(+), 3161 deletions(-) diff --git a/modeling/callbacks/__init__.py b/modeling/callbacks/__init__.py index 81d5054e..a23d5ba3 100644 --- a/modeling/callbacks/__init__.py +++ b/modeling/callbacks/__init__.py @@ -1,7 +1 @@ -from .base import ( - BaseCallback, - CompositeCallback, - EvalCallback, - InferenceCallback, - ValidationCallback, -) +from .base import BaseCallback, CompositeCallback, EvalCallback, InferenceCallback, ValidationCallback diff --git a/modeling/callbacks/base.py b/modeling/callbacks/base.py index 900b492e..1ae26267 100644 --- a/modeling/callbacks/base.py +++ b/modeling/callbacks/base.py @@ -1,19 +1,25 @@ -import os -from pathlib import Path - -import numpy as np -import torch +from metric import BaseMetric, StatefullMetric import utils -from metric import BaseMetric, StatefullMetric from utils import MetaParent, create_logger +import numpy as np +import os +import torch +from pathlib import Path + logger = create_logger(name=__name__) class BaseCallback(metaclass=MetaParent): + def __init__( - self, model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ): self._model = model self._train_dataloader = train_dataloader @@ -25,20 +31,25 @@ def __call__(self, inputs, step_num): raise NotImplementedError -class MetricCallback(BaseCallback, config_name="metric"): +class MetricCallback(BaseCallback, config_name='metric'): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - metrics, - loss_prefix, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + metrics, + loss_prefix ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._loss_prefix = loss_prefix @@ -47,103 +58,113 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], - metrics=config.get("metrics", None), - loss_prefix=config["loss_prefix"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], + metrics=config.get('metrics', None), + loss_prefix=config['loss_prefix'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: for metric_name, metric_function in self._metrics.items(): metric_value = metric_function( - ground_truth=inputs[self._model.schema["ground_truth_prefix"]], - predictions=inputs[self._model.schema["predictions_prefix"]], + ground_truth=inputs[self._model.schema['ground_truth_prefix']], + predictions=inputs[self._model.schema['predictions_prefix']] ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - "train/{}".format(metric_name), metric_value, step_num + 'train/{}'.format(metric_name), + metric_value, + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - "train/{}".format(self._loss_prefix), + 'train/{}'.format(self._loss_prefix), inputs[self._loss_prefix], - step_num, + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() -class CheckpointCallback(BaseCallback, config_name="checkpoint"): +class CheckpointCallback(BaseCallback, config_name='checkpoint'): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - save_path, - model_name, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + save_path, + model_name ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._save_path = Path(os.path.join(save_path, model_name)) if self._save_path.exists(): - logger.warning( - "Checkpoint path `{}` is already exists!".format(self._save_path) - ) + logger.warning('Checkpoint path `{}` is already exists!'.format(self._save_path)) else: self._save_path.mkdir(parents=True, exist_ok=True) @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], - save_path=config["save_path"], - model_name=config["model_name"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], + save_path=config['save_path'], + model_name=config['model_name'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: - logger.debug("Saving model state on step {}...".format(step_num)) + logger.debug('Saving model state on step {}...'.format(step_num)) torch.save( { - "step_num": step_num, - "model_state_dict": self._model.state_dict(), - "optimizer_state_dict": self._optimizer.state_dict(), + 'step_num': step_num, + 'model_state_dict': self._model.state_dict(), + 'optimizer_state_dict': self._optimizer.state_dict(), }, - os.path.join(self._save_path, "checkpoint_{}.pth".format(step_num)), + os.path.join(self._save_path, 'checkpoint_{}.pth'.format(step_num)) ) - logger.debug("Saving done!") + logger.debug('Saving done!') class InferenceCallback(BaseCallback): + def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - on_step, - pred_prefix, - labels_prefix, - metrics=None, - loss_prefix=None, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + on_step, + pred_prefix, + labels_prefix, + metrics=None, + loss_prefix=None, ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._on_step = on_step self._metrics = metrics if metrics is not None else {} @@ -155,24 +176,24 @@ def __init__( def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def __call__(self, inputs, step_num): if step_num % self._on_step == 0: # TODO Add time monitoring - logger.debug(f"Running {self._get_name()} on step {step_num}...") + logger.debug(f'Running {self._get_name()} on step {step_num}...') running_params = {} for metric_name, metric_function in self._metrics.items(): running_params[metric_name] = [] @@ -191,34 +212,30 @@ def __call__(self, inputs, step_num): batch[key] = values.cpu() for metric_name, metric_function in self._metrics.items(): - running_params[metric_name].extend( - metric_function( - inputs=batch, - pred_prefix=self._pred_prefix, - labels_prefix=self._labels_prefix, - ) - ) + running_params[metric_name].extend(metric_function( + inputs=batch, + pred_prefix=self._pred_prefix, + labels_prefix=self._labels_prefix, + )) if self._loss_prefix is not None: - running_params[self._loss_prefix] += batch[ - self._loss_prefix - ].item() - + running_params[self._loss_prefix] += batch[self._loss_prefix].item() + for metric_name, metric_function in self._metrics.items(): if isinstance(metric_function, StatefullMetric): - running_params[metric_name] = metric_function.reduce( - running_params[metric_name] - ) + running_params[metric_name] = metric_function.reduce(running_params[metric_name]) for label, value in running_params.items(): - inputs[f"{self._get_name()}/{label}"] = np.mean(value) + inputs[f'{self._get_name()}/{label}'] = np.mean(value) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.add_scalar( - f"{self._get_name()}/{label}", np.mean(value), step_num + f'{self._get_name()}/{label}', + np.mean(value), + step_num ) utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.flush() - logger.debug(f"Running {self._get_name()} on step {step_num} is done!") - + logger.debug(f'Running {self._get_name()} on step {step_num} is done!') + def _get_name(self): return self.config_name @@ -226,81 +243,87 @@ def _get_dataloader(self): raise NotImplementedError -class ValidationCallback(InferenceCallback, config_name="validation"): +class ValidationCallback(InferenceCallback, config_name='validation'): + @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def _get_dataloader(self): return self._validation_dataloader -class EvalCallback(InferenceCallback, config_name="eval"): +class EvalCallback(InferenceCallback, config_name='eval'): + @classmethod def create_from_config(cls, config, **kwargs): metrics = { metric_name: BaseMetric.create_from_config(metric_cfg, **kwargs) - for metric_name, metric_cfg in config["metrics"].items() + for metric_name, metric_cfg in config['metrics'].items() } return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], - on_step=config["on_step"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], + on_step=config['on_step'], metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["labels_prefix"], + pred_prefix=config['pred_prefix'], + labels_prefix=config['labels_prefix'] ) def _get_dataloader(self): return self._eval_dataloader -class CompositeCallback(BaseCallback, config_name="composite"): +class CompositeCallback(BaseCallback, config_name='composite'): def __init__( - self, - model, - train_dataloader, - validation_dataloader, - eval_dataloader, - optimizer, - callbacks, + self, + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer, + callbacks ): super().__init__( - model, train_dataloader, validation_dataloader, eval_dataloader, optimizer + model, + train_dataloader, + validation_dataloader, + eval_dataloader, + optimizer ) self._callbacks = callbacks @classmethod def create_from_config(cls, config, **kwargs): return cls( - model=kwargs["model"], - train_dataloader=kwargs["train_dataloader"], - validation_dataloader=kwargs["validation_dataloader"], - eval_dataloader=kwargs["eval_dataloader"], - optimizer=kwargs["optimizer"], + model=kwargs['model'], + train_dataloader=kwargs['train_dataloader'], + validation_dataloader=kwargs['validation_dataloader'], + eval_dataloader=kwargs['eval_dataloader'], + optimizer=kwargs['optimizer'], callbacks=[ BaseCallback.create_from_config(cfg, **kwargs) - for cfg in config["callbacks"] - ], + for cfg in config['callbacks'] + ] ) def __call__(self, inputs, step_num): diff --git a/modeling/dataloader/base.py b/modeling/dataloader/base.py index 71e7f6e7..2e23876d 100644 --- a/modeling/dataloader/base.py +++ b/modeling/dataloader/base.py @@ -1,13 +1,12 @@ import copy -import logging - -import numpy as np -from torch.utils.data import DataLoader, random_split from utils import MetaParent - from .batch_processors import BaseBatchProcessor +import logging +import numpy as np +from torch.utils.data import DataLoader, random_split + logger = logging.getLogger(__name__) @@ -15,7 +14,8 @@ class BaseDataloader(metaclass=MetaParent): pass -class TorchDataloader(BaseDataloader, config_name="torch"): +class TorchDataloader(BaseDataloader, config_name='torch'): + def __init__(self, dataloader): self._dataloader = dataloader @@ -29,13 +29,7 @@ def __len__(self): def create_from_config(cls, config, **kwargs): create_config = copy.deepcopy(config) batch_processor = BaseBatchProcessor.create_from_config( - create_config.pop("batch_processor") - if "batch_processor" in create_config - else {"type": "identity"} - ) - create_config.pop("type") # For passing as **config in torch DataLoader - return cls( - dataloader=DataLoader( - kwargs["dataset"], collate_fn=batch_processor, **create_config - ) + create_config.pop('batch_processor') if 'batch_processor' in create_config else {'type': 'identity'} ) + create_config.pop('type') # For passing as **config in torch DataLoader + return cls(dataloader=DataLoader(kwargs['dataset'], collate_fn=batch_processor, **create_config)) diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index bd45c86c..9991a073 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,43 +1,43 @@ import torch - from utils import MetaParent class BaseBatchProcessor(metaclass=MetaParent): + def __call__(self, batch): raise NotImplementedError -class IdentityBatchProcessor(BaseBatchProcessor, config_name="identity"): +class IdentityBatchProcessor(BaseBatchProcessor, config_name='identity'): + def __call__(self, batch): return torch.tensor(batch) + +class EmbedBatchProcessor(BaseBatchProcessor, config_name='embed'): - -class EmbedBatchProcessor(BaseBatchProcessor, config_name="embed"): def __call__(self, batch): - ids = torch.tensor([entry["item.id"] for entry in batch]) - embeds = torch.stack([entry["item.embed"] for entry in batch]) + ids = torch.tensor([entry['item.id'] for entry in batch]) + embeds = torch.stack([entry['item.embed'] for entry in batch]) + + return {'ids': ids, 'embeddings': embeds} - return {"ids": ids, "embeddings": embeds} +class BasicBatchProcessor(BaseBatchProcessor, config_name='basic'): -class BasicBatchProcessor(BaseBatchProcessor, config_name="basic"): def __call__(self, batch): processed_batch = {} for key in batch[0].keys(): - if key.endswith(".ids"): - prefix = key.split(".")[0] - assert "{}.length".format(prefix) in batch[0] + if key.endswith('.ids'): + prefix = key.split('.')[0] + assert '{}.length'.format(prefix) in batch[0] - processed_batch[f"{prefix}.ids"] = [] - processed_batch[f"{prefix}.length"] = [] + processed_batch[f'{prefix}.ids'] = [] + processed_batch[f'{prefix}.length'] = [] for sample in batch: - processed_batch[f"{prefix}.ids"].extend(sample[f"{prefix}.ids"]) - processed_batch[f"{prefix}.length"].append( - sample[f"{prefix}.length"] - ) + processed_batch[f'{prefix}.ids'].extend(sample[f'{prefix}.ids']) + processed_batch[f'{prefix}.length'].append(sample[f'{prefix}.length']) for part, values in processed_batch.items(): processed_batch[part] = torch.tensor(values, dtype=torch.long) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index b2e53b3e..ff040d6e 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -1,35 +1,40 @@ -import json -import logging -import os -import pickle from collections import defaultdict +import json +from tqdm import tqdm + +from dataset.samplers import TrainSampler, EvalSampler + +from utils import MetaParent, DEVICE + +import pickle +import torch import numpy as np import scipy.sparse as sp -import torch from scipy.sparse import csr_matrix -from tqdm import tqdm -from dataset.samplers import EvalSampler, TrainSampler -from utils import DEVICE, MetaParent +import os +import logging logger = logging.getLogger(__name__) class BaseDataset(metaclass=MetaParent): + def get_samplers(self): raise NotImplementedError -class SequenceDataset(BaseDataset, config_name="sequence"): +class SequenceDataset(BaseDataset, config_name='sequence'): + def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -40,74 +45,61 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="train", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='train', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="valid", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='valid', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="test", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='test', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_seq_len)) + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_seq_len)) - train_interactions = sum( - list(map(lambda x: len(x), train_dataset)) - ) # whole user history as a sample + train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (train_interactions + valid_interactions + test_interactions) - / max_user_id - / max_item_id, - ) - ) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info('{} dataset sparsity: {}'.format( + config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -116,72 +108,45 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len, + max_sequence_length=max_seq_len ) @classmethod - def _create_dataset( - cls, dir_path, part, max_sequence_length=None, use_cached=False - ): + def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): - logger.info( - f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" - ) + if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): + logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "rb" - ) as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( - dataset_file - ) + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) else: - logger.info( - "Cache is forecefully ignored." - if not use_cached - else "No cached dataset has been found." - ) - logger.info( - f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." - ) + logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') + logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') - dataset_path = os.path.join(dir_path, "{}.txt".format(part)) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) + with open(dataset_path, 'r') as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_len, - ) = sequence_info + user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): - dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids, - "item.length": len(item_ids), - } - ) + dataset.append({ + 'user.ids': [user_id], 'user.length': 1, + 'item.ids': item_ids, 'item.length': len(item_ids) + }) - logger.info("{} dataset size: {}".format(part, len(dataset))) - logger.info( - "{} dataset max sequence length: {}".format(part, max_sequence_len) - ) + logger.info('{} dataset size: {}'.format(part, len(dataset))) + logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "wb" - ) as dataset_file: + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), + dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len @@ -196,7 +161,7 @@ def _create_sequences(data, max_sample_len): max_sequence_length = 0 for sample in data: - sample = sample.strip("\n").split(" ") + sample = sample.strip('\n').split(' ') item_ids = [int(item_id) for item_id in sample[1:]][-max_sample_len:] user_id = int(sample[0]) @@ -207,13 +172,7 @@ def _create_sequences(data, max_sample_len): user_sequences.append(user_id) item_sequences.append(item_ids) - return ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_length, - ) + return user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_length def get_samplers(self): return self._train_sampler, self._validation_sampler, self._test_sampler @@ -233,84 +192,71 @@ def max_sequence_length(self): @property def meta(self): return { - "num_users": self.num_users, - "num_items": self.num_items, - "max_sequence_length": self.max_sequence_length, + 'num_users': self.num_users, + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length } - - -class SequenceFullDataset(SequenceDataset, config_name="sequence_full"): + + +class SequenceFullDataset(SequenceDataset, config_name='sequence_full'): @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) - train_dataset, train_max_user_id, train_max_item_id, train_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="train", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + train_dataset, train_max_user_id, train_max_item_id, train_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='train', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="valid", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + validation_dataset, valid_max_user_id, valid_max_item_id, valid_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='valid', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) - test_dataset, test_max_user_id, test_max_item_id, test_seq_len = ( - cls._create_dataset( - dir_path=data_dir_path, - part="test", - max_sequence_length=config["max_sequence_length"], - use_cached=config.get("use_cached", False), - ) + test_dataset, test_max_user_id, test_max_item_id, test_seq_len = cls._create_dataset( + dir_path=data_dir_path, + part='test', + max_sequence_length=config['max_sequence_length'], + use_cached=config.get('use_cached', False) ) max_user_id = max([train_max_user_id, valid_max_user_id, test_max_user_id]) max_item_id = max([train_max_item_id, valid_max_item_id, test_max_item_id]) max_seq_len = max([train_seq_len, valid_seq_len, test_seq_len]) - logger.info("Train dataset size: {}".format(len(train_dataset))) + logger.info('Train dataset size: {}'.format(len(train_dataset))) logger.info("Validation dataset size: {}".format(len(validation_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_seq_len)) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_seq_len)) - train_interactions = sum( - list(map(lambda x: len(x), train_dataset)) - ) # whole user history as a sample + train_interactions = sum(list(map(lambda x: len(x), train_dataset))) # whole user history as a sample valid_interactions = len(validation_dataset) # each new interaction as a sample - test_interactions = len(test_dataset) # each new interaction as a sample - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (train_interactions + valid_interactions + test_interactions) - / max_user_id - / max_item_id, - ) - ) + test_interactions = len(test_dataset) # each new interaction as a sample + logger.info('{} dataset sparsity: {}'.format( + config['name'], (train_interactions + valid_interactions + test_interactions) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -319,59 +265,40 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_seq_len, + max_sequence_length=max_seq_len ) - + @classmethod def flatten_item_sequence(cls, item_ids): - min_history_length = 3 + min_history_length = 3 # TODOPK make this configurable histories = [] - for i in range(min_history_length - 1, len(item_ids)): - histories.append(item_ids[: i + 1]) + for i in range(min_history_length-1, len(item_ids)): + histories.append(item_ids[:i+1]) return histories - + @classmethod - def _create_dataset( - cls, dir_path, part, max_sequence_length=None, use_cached=False - ): + def _create_dataset(cls, dir_path, part, max_sequence_length=None, use_cached=False): max_user_id = 0 max_item_id = 0 max_sequence_len = 0 - if use_cached and os.path.exists(os.path.join(dir_path, "{}.pkl".format(part))): - logger.info( - f"Take cached dataset from {os.path.join(dir_path, '{}.pkl'.format(part))}" - ) + if use_cached and os.path.exists(os.path.join(dir_path, '{}.pkl'.format(part))): + logger.info(f'Take cached dataset from {os.path.join(dir_path, "{}.pkl".format(part))}') - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "rb" - ) as dataset_file: - dataset, max_user_id, max_item_id, max_sequence_len = pickle.load( - dataset_file - ) + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'rb') as dataset_file: + dataset, max_user_id, max_item_id, max_sequence_len = pickle.load(dataset_file) else: - logger.info( - "Cache is forecefully ignored." - if not use_cached - else "No cached dataset has been found." - ) - logger.info( - f"Creating a dataset {os.path.join(dir_path, '{}.txt'.format(part))}..." - ) + logger.info('Cache is forecefully ignored.' if not use_cached else 'No cached dataset has been found.') + logger.info(f'Creating a dataset {os.path.join(dir_path, "{}.txt".format(part))}...') - dataset_path = os.path.join(dir_path, "{}.txt".format(part)) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(dir_path, '{}.txt'.format(part)) + with open(dataset_path, 'r') as f: data = f.readlines() sequence_info = cls._create_sequences(data, max_sequence_length) - ( - user_sequences, - item_sequences, - max_user_id, - max_item_id, - max_sequence_len, - ) = sequence_info + user_sequences, item_sequences, max_user_id, max_item_id, max_sequence_len = sequence_info + # TODOPK check dataset = [] for user_id, item_ids in zip(user_sequences, item_sequences): if part == "train": @@ -395,29 +322,26 @@ def _create_dataset( } ) - logger.info("{} dataset size: {}".format(part, len(dataset))) - logger.info( - "{} dataset max sequence length: {}".format(part, max_sequence_len) - ) + logger.info('{} dataset size: {}'.format(part, len(dataset))) + logger.info('{} dataset max sequence length: {}'.format(part, max_sequence_len)) - with open( - os.path.join(dir_path, "{}.pkl".format(part)), "wb" - ) as dataset_file: + with open(os.path.join(dir_path, '{}.pkl'.format(part)), 'wb') as dataset_file: pickle.dump( - (dataset, max_user_id, max_item_id, max_sequence_len), dataset_file + (dataset, max_user_id, max_item_id, max_sequence_len), + dataset_file ) return dataset, max_user_id, max_item_id, max_sequence_len +class GraphDataset(BaseDataset, config_name='graph'): -class GraphDataset(BaseDataset, config_name="graph"): def __init__( - self, - dataset, - graph_dir_path, - use_train_data_only=True, - use_user_graph=False, - use_item_graph=False, + self, + dataset, + graph_dir_path, + use_train_data_only=True, + use_user_graph=False, + use_item_graph=False ): self._dataset = dataset self._graph_dir_path = graph_dir_path @@ -430,19 +354,15 @@ def __init__( train_sampler, validation_sampler, test_sampler = dataset.get_samplers() - train_interactions, train_user_interactions, train_item_interactions = ( - [], - [], - [], - ) + train_interactions, train_user_interactions, train_item_interactions = [], [], [] train_user_2_items = defaultdict(set) train_item_2_users = defaultdict(set) visited_user_item_pairs = set() for sample in train_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -458,8 +378,8 @@ def __init__( # TODO create separated function if not self._use_train_data_only: for sample in validation_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -473,8 +393,8 @@ def __init__( visited_user_item_pairs.add((user_id, item_id)) for sample in test_sampler.dataset: - user_id = sample["user.ids"][0] - item_ids = sample["item.ids"] + user_id = sample['user.ids'][0] + item_ids = sample['item.ids'] for item_id in item_ids: if (user_id, item_id) not in visited_user_item_pairs: @@ -491,32 +411,27 @@ def __init__( self._train_user_interactions = np.array(train_user_interactions) self._train_item_interactions = np.array(train_item_interactions) - path_to_graph = os.path.join(graph_dir_path, "general_graph.npz") + path_to_graph = os.path.join(graph_dir_path, 'general_graph.npz') if os.path.exists(path_to_graph): self._graph = sp.load_npz(path_to_graph) else: # place ones only when co-occurrence happens user2item_connections = csr_matrix( - ( - np.ones(len(train_user_interactions)), - (train_user_interactions, train_item_interactions), - ), - shape=(self._num_users + 2, self._num_items + 2), + (np.ones(len(train_user_interactions)), (train_user_interactions, train_item_interactions)), + shape=(self._num_users + 2, self._num_items + 2) ) # (num_users + 2, num_items + 2), bipartite graph self._graph = self.get_sparse_graph_layer( user2item_connections, self._num_users + 2, self._num_items + 2, - biparite=True, + biparite=True ) sp.save_npz(path_to_graph, self._graph) - self._graph = ( - self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) - ) + self._graph = self._convert_sp_mat_to_sp_tensor(self._graph).coalesce().to(DEVICE) if self._use_user_graph: - path_to_user_graph = os.path.join(graph_dir_path, "user_graph.npz") + path_to_user_graph = os.path.join(graph_dir_path, 'user_graph.npz') if os.path.exists(path_to_user_graph): self._user_graph = sp.load_npz(path_to_user_graph) else: @@ -525,18 +440,13 @@ def __init__( visited_user_item_pairs = set() visited_user_user_pairs = set() - for user_id, item_id in tqdm( - zip(self._train_user_interactions, self._train_item_interactions) - ): + for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_user_id in train_item_2_users[item_id]: - if ( - user_id, - connected_user_id, - ) in visited_user_user_pairs or user_id == connected_user_id: + if (user_id, connected_user_id) in visited_user_user_pairs or user_id == connected_user_id: continue # add (user, user) to graph connections pair only once visited_user_user_pairs.add((user_id, connected_user_id)) @@ -546,30 +456,24 @@ def __init__( # (user, user) graph user2user_connections = csr_matrix( ( - np.ones(len(user2user_interactions_fst)), - (user2user_interactions_fst, user2user_interactions_snd), - ), - shape=(self._num_users + 2, self._num_users + 2), + np.ones(len(user2user_interactions_fst)), (user2user_interactions_fst, user2user_interactions_snd)), + shape=(self._num_users + 2, self._num_users + 2) ) self._user_graph = self.get_sparse_graph_layer( user2user_connections, self._num_users + 2, self._num_users + 2, - biparite=False, + biparite=False ) sp.save_npz(path_to_user_graph, self._user_graph) - self._user_graph = ( - self._convert_sp_mat_to_sp_tensor(self._user_graph) - .coalesce() - .to(DEVICE) - ) + self._user_graph = self._convert_sp_mat_to_sp_tensor(self._user_graph).coalesce().to(DEVICE) else: self._user_graph = None if self._use_item_graph: - path_to_item_graph = os.path.join(graph_dir_path, "item_graph.npz") + path_to_item_graph = os.path.join(graph_dir_path, 'item_graph.npz') if os.path.exists(path_to_item_graph): self._item_graph = sp.load_npz(path_to_item_graph) else: @@ -578,18 +482,13 @@ def __init__( visited_user_item_pairs = set() visited_item_item_pairs = set() - for user_id, item_id in tqdm( - zip(self._train_user_interactions, self._train_item_interactions) - ): + for user_id, item_id in tqdm(zip(self._train_user_interactions, self._train_item_interactions)): if (user_id, item_id) in visited_user_item_pairs: continue # process (user, item) pair only once visited_user_item_pairs.add((user_id, item_id)) for connected_item_id in train_user_2_items[user_id]: - if ( - item_id, - connected_item_id, - ) in visited_item_item_pairs or item_id == connected_item_id: + if (item_id, connected_item_id) in visited_item_item_pairs or item_id == connected_item_id: continue # add (item, item) to graph connections pair only once visited_item_item_pairs.add((item_id, connected_item_id)) @@ -599,42 +498,39 @@ def __init__( # (item, item) graph item2item_connections = csr_matrix( ( - np.ones(len(item2item_interactions_fst)), - (item2item_interactions_fst, item2item_interactions_snd), - ), - shape=(self._num_items + 2, self._num_items + 2), + np.ones(len(item2item_interactions_fst)), (item2item_interactions_fst, item2item_interactions_snd)), + shape=(self._num_items + 2, self._num_items + 2) ) self._item_graph = self.get_sparse_graph_layer( item2item_connections, self._num_items + 2, self._num_items + 2, - biparite=False, + biparite=False ) sp.save_npz(path_to_item_graph, self._item_graph) - self._item_graph = ( - self._convert_sp_mat_to_sp_tensor(self._item_graph) - .coalesce() - .to(DEVICE) - ) + self._item_graph = self._convert_sp_mat_to_sp_tensor(self._item_graph).coalesce().to(DEVICE) else: self._item_graph = None @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) return cls( dataset=dataset, - graph_dir_path=config["graph_dir_path"], - use_user_graph=config.get("use_user_graph", False), - use_item_graph=config.get("use_item_graph", False), + graph_dir_path=config['graph_dir_path'], + use_user_graph=config.get('use_user_graph', False), + use_item_graph=config.get('use_item_graph', False) ) @staticmethod def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): mat_dim_size = fst_dim + snd_dim if biparite else fst_dim - adj_mat = sp.dok_matrix((mat_dim_size, mat_dim_size), dtype=np.float32) + adj_mat = sp.dok_matrix( + (mat_dim_size, mat_dim_size), + dtype=np.float32 + ) adj_mat = adj_mat.tolil() R = sparse_matrix.tolil() # list of lists (fst_dim, snd_dim) @@ -652,11 +548,11 @@ def get_sparse_graph_layer(sparse_matrix, fst_dim, snd_dim, biparite=False): rowsum = np.array(adj_mat.sum(1)) d_inv = np.power(rowsum, -1).flatten() - d_inv[np.isinf(d_inv)] = 0.0 + d_inv[np.isinf(d_inv)] = 0. d_mat_inv = sp.diags(d_inv) d_inv = np.power(edges_degree, -0.5).flatten() # D^(-0.5) - d_inv[np.isinf(d_inv)] = 0.0 # fix NaNs in case if row with zero connections + d_inv[np.isinf(d_inv)] = 0. # fix NaNs in case if row with zero connections d_mat = sp.diags(d_inv) # make it square matrix # D^(-0.5) @ A @ D^(-0.5) @@ -687,15 +583,16 @@ def get_samplers(self): @property def meta(self): meta = { - "user_graph": self._user_graph, - "item_graph": self._item_graph, - "graph": self._graph, - **self._dataset.meta, + 'user_graph': self._user_graph, + 'item_graph': self._item_graph, + 'graph': self._graph, + **self._dataset.meta } return meta -class DuorecDataset(BaseDataset, config_name="duorec"): +class DuorecDataset(BaseDataset, config_name='duorec'): + def __init__(self, dataset): self._dataset = dataset self._num_users = dataset.num_users @@ -705,7 +602,7 @@ def __init__(self, dataset): target_2_sequences = defaultdict(list) for sample in train_sampler.dataset: - item_ids = sample["item.ids"] + item_ids = sample['item.ids'] target_item = item_ids[-1] semantic_similar_item_ids = item_ids[:-1] @@ -716,7 +613,7 @@ def __init__(self, dataset): @classmethod def create_from_config(cls, config): - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) return cls(dataset) @property @@ -735,15 +632,16 @@ def meta(self): return self._dataset.meta -class ScientificDataset(BaseDataset, config_name="scientific"): +class ScientificDataset(BaseDataset, config_name='scientific'): + def __init__( - self, - train_sampler, - validation_sampler, - test_sampler, - num_users, - num_items, - max_sequence_length, + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler @@ -754,17 +652,17 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) - max_sequence_length = config["max_sequence_length"] + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) + max_sequence_length = config['max_sequence_length'] max_user_id, max_item_id = 0, 0 train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, "{}.txt".format("all_data")) - with open(dataset_path, "r") as f: + dataset_path = os.path.join(data_dir_path, '{}.txt'.format('all_data')) + with open(dataset_path, 'r') as f: data = f.readlines() for sample in data: - sample = sample.strip("\n").split(" ") + sample = sample.strip('\n').split(' ') user_id = int(sample[0]) item_ids = [int(item_id) for item_id in sample[1:]] @@ -773,69 +671,54 @@ def create_from_config(cls, config, **kwargs): assert len(item_ids) >= 5 - train_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[:-2][-max_sequence_length:], - "item.length": len(item_ids[:-2][-max_sequence_length:]), - } - ) - assert len(item_ids[:-2][-max_sequence_length:]) == len( - set(item_ids[:-2][-max_sequence_length:]) - ) - validation_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[:-1][-max_sequence_length:], - "item.length": len(item_ids[:-1][-max_sequence_length:]), - } - ) - assert len(item_ids[:-1][-max_sequence_length:]) == len( - set(item_ids[:-1][-max_sequence_length:]) - ) - test_dataset.append( - { - "user.ids": [user_id], - "user.length": 1, - "item.ids": item_ids[-max_sequence_length:], - "item.length": len(item_ids[-max_sequence_length:]), - } - ) - assert len(item_ids[-max_sequence_length:]) == len( - set(item_ids[-max_sequence_length:]) - ) - - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) - logger.info("Max user id: {}".format(max_user_id)) - logger.info("Max item id: {}".format(max_item_id)) - logger.info("Max sequence length: {}".format(max_sequence_length)) - logger.info( - "{} dataset sparsity: {}".format( - config["name"], - (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id, - ) - ) + train_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[:-2][-max_sequence_length:], + 'item.length': len(item_ids[:-2][-max_sequence_length:]) + }) + assert len(item_ids[:-2][-max_sequence_length:]) == len(set(item_ids[:-2][-max_sequence_length:])) + validation_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[:-1][-max_sequence_length:], + 'item.length': len(item_ids[:-1][-max_sequence_length:]) + }) + assert len(item_ids[:-1][-max_sequence_length:]) == len(set(item_ids[:-1][-max_sequence_length:])) + test_dataset.append({ + 'user.ids': [user_id], + 'user.length': 1, + 'item.ids': item_ids[-max_sequence_length:], + 'item.length': len(item_ids[-max_sequence_length:]) + }) + assert len(item_ids[-max_sequence_length:]) == len(set(item_ids[-max_sequence_length:])) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) + logger.info('Max user id: {}'.format(max_user_id)) + logger.info('Max item id: {}'.format(max_item_id)) + logger.info('Max sequence length: {}'.format(max_sequence_length)) + logger.info('{} dataset sparsity: {}'.format( + config['name'], (len(train_dataset) + len(test_dataset)) / max_user_id / max_item_id + )) train_sampler = TrainSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=train_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=validation_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) test_sampler = EvalSampler.create_from_config( - config["samplers"], + config['samplers'], dataset=test_dataset, num_users=max_user_id, - num_items=max_item_id, + num_items=max_item_id ) return cls( @@ -844,7 +727,7 @@ def create_from_config(cls, config, **kwargs): test_sampler=test_sampler, num_users=max_user_id, num_items=max_item_id, - max_sequence_length=max_sequence_length, + max_sequence_length=max_sequence_length ) def get_samplers(self): @@ -865,9 +748,9 @@ def max_sequence_length(self): @property def meta(self): return { - "num_users": self.num_users, - "num_items": self.num_items, - "max_sequence_length": self.max_sequence_length, + 'num_users': self.num_users, + 'num_items': self.num_items, + 'max_sequence_length': self.max_sequence_length } @@ -991,8 +874,15 @@ def create_from_config(cls, config, **kwargs): ) -class RqVaeDataset(BaseDataset, config_name="rqvae"): - def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): +class RqVaeDataset(BaseDataset, config_name='rqvae'): + + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_items + ): self._train_sampler = train_sampler self._validation_sampler = validation_sampler self._test_sampler = test_sampler @@ -1000,33 +890,39 @@ def __init__(self, train_sampler, validation_sampler, test_sampler, num_items): @classmethod def create_from_config(cls, config, **kwargs): - data_dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + data_dir_path = os.path.join(config['path_to_data_dir'], config['name']) train_dataset, validation_dataset, test_dataset = [], [], [] - dataset_path = os.path.join(data_dir_path, "{}.pt".format("data_full")) + dataset_path = os.path.join(data_dir_path, '{}.pt'.format('data_full')) df = torch.load(dataset_path, weights_only=False) for idx, sample in df.iterrows(): - train_dataset.append({"item.id": idx, "item.embed": sample["embeddings"]}) - - logger.info("Train dataset size: {}".format(len(train_dataset))) - logger.info("Test dataset size: {}".format(len(test_dataset))) + train_dataset.append({ + 'item.id': idx, + 'item.embed': sample["embeddings"] + }) + + logger.info('Train dataset size: {}'.format(len(train_dataset))) + logger.info('Test dataset size: {}'.format(len(test_dataset))) train_sampler = TrainSampler.create_from_config( - config["samplers"], dataset=train_dataset + config['samplers'], + dataset=train_dataset ) validation_sampler = EvalSampler.create_from_config( - config["samplers"], dataset=validation_dataset + config['samplers'], + dataset=validation_dataset ) test_sampler = EvalSampler.create_from_config( - config["samplers"], dataset=test_dataset + config['samplers'], + dataset=test_dataset ) return cls( train_sampler=train_sampler, validation_sampler=validation_sampler, test_sampler=test_sampler, - num_items=len(df), + num_items=len(df) ) def get_samplers(self): @@ -1042,4 +938,7 @@ def max_sequence_length(self): @property def meta(self): - return {"num_items": self.num_items, "train_sampler": self._train_sampler} + return { + 'num_items': self.num_items, + 'train_sampler': self._train_sampler + } diff --git a/modeling/dataset/negative_samplers/__init__.py b/modeling/dataset/negative_samplers/__init__.py index 6cac99af..498de21f 100644 --- a/modeling/dataset/negative_samplers/__init__.py +++ b/modeling/dataset/negative_samplers/__init__.py @@ -2,4 +2,8 @@ from .popular import PopularNegativeSampler from .random import RandomNegativeSampler -__all__ = ["BaseNegativeSampler", "PopularNegativeSampler", "RandomNegativeSampler"] +__all__ = [ + 'BaseNegativeSampler', + 'PopularNegativeSampler', + 'RandomNegativeSampler' +] diff --git a/modeling/dataset/negative_samplers/base.py b/modeling/dataset/negative_samplers/base.py index ebaef60c..5483bd29 100644 --- a/modeling/dataset/negative_samplers/base.py +++ b/modeling/dataset/negative_samplers/base.py @@ -4,15 +4,21 @@ class BaseNegativeSampler(metaclass=MetaParent): - def __init__(self, dataset, num_users, num_items): + + def __init__( + self, + dataset, + num_users, + num_items + ): self._dataset = dataset self._num_users = num_users self._num_items = num_items self._seen_items = defaultdict(set) for sample in self._dataset: - user_id = sample["user.ids"][0] - items = list(sample["item.ids"]) + user_id = sample['user.ids'][0] + items = list(sample['item.ids']) self._seen_items[user_id].update(items) def generate_negative_samples(self, sample, num_negatives): diff --git a/modeling/dataset/negative_samplers/popular.py b/modeling/dataset/negative_samplers/popular.py index 6e478e0c..68476651 100644 --- a/modeling/dataset/negative_samplers/popular.py +++ b/modeling/dataset/negative_samplers/popular.py @@ -1,34 +1,44 @@ +from dataset.negative_samplers.base import BaseNegativeSampler + from collections import Counter -from dataset.negative_samplers.base import BaseNegativeSampler +class PopularNegativeSampler(BaseNegativeSampler, config_name='popular'): -class PopularNegativeSampler(BaseNegativeSampler, config_name="popular"): - def __init__(self, dataset, num_users, num_items): - super().__init__(dataset=dataset, num_users=num_users, num_items=num_items) + def __init__( + self, + dataset, + num_users, + num_items + ): + super().__init__( + dataset=dataset, + num_users=num_users, + num_items=num_items + ) self._popular_items = self._items_by_popularity() @classmethod def create_from_config(cls, _, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def _items_by_popularity(self): popularity = Counter() for sample in self._dataset: - for item_id in sample["item.ids"]: + for item_id in sample['item.ids']: popularity[item_id] += 1 popular_items = sorted(popularity, key=popularity.get, reverse=True) return popular_items def generate_negative_samples(self, sample, num_negatives): - user_id = sample["user.ids"][0] + user_id = sample['user.ids'][0] popularity_idx = 0 negatives = [] while len(negatives) < num_negatives: diff --git a/modeling/dataset/negative_samplers/random.py b/modeling/dataset/negative_samplers/random.py index 24055217..a816280c 100644 --- a/modeling/dataset/negative_samplers/random.py +++ b/modeling/dataset/negative_samplers/random.py @@ -1,9 +1,8 @@ from collections import defaultdict import numpy as np -from tqdm import tqdm - from dataset.negative_samplers.base import BaseNegativeSampler +from tqdm import tqdm class RandomNegativeSampler(BaseNegativeSampler, config_name="random"): diff --git a/modeling/dataset/samplers/__init__.py b/modeling/dataset/samplers/__init__.py index 40ffd454..6ed31eed 100644 --- a/modeling/dataset/samplers/__init__.py +++ b/modeling/dataset/samplers/__init__.py @@ -1,19 +1,10 @@ -from .base import EvalSampler, TrainSampler -from .cl4srec import Cl4SRecEvalSampler, Cl4SRecTrainSampler -from .duorec import DuoRecEvalSampler, DuorecTrainSampler -from .identity import IdentityEvalSampler, IdentityTrainSampler -from .last_item_prediction import ( - LastItemPredictionEvalSampler, - LastItemPredictionTrainSampler, -) -from .masked_item_prediction import ( - MaskedItemPredictionEvalSampler, - MaskedItemPredictionTrainSampler, -) -from .mclsr import MCLSRPredictionEvalSampler, MCLSRTrainSampler -from .next_item_prediction import ( - NextItemPredictionEvalSampler, - NextItemPredictionTrainSampler, -) -from .pop import PopEvalSampler, PopTrainSampler -from .s3rec import S3RecPretrainEvalSampler, S3RecPretrainTrainSampler +from .base import TrainSampler, EvalSampler +from .cl4srec import Cl4SRecTrainSampler, Cl4SRecEvalSampler +from .duorec import DuorecTrainSampler, DuoRecEvalSampler +from .next_item_prediction import NextItemPredictionTrainSampler, NextItemPredictionEvalSampler +from .last_item_prediction import LastItemPredictionTrainSampler, LastItemPredictionEvalSampler +from .masked_item_prediction import MaskedItemPredictionTrainSampler, MaskedItemPredictionEvalSampler +from .mclsr import MCLSRTrainSampler, MCLSRPredictionEvalSampler +from .pop import PopTrainSampler, PopEvalSampler +from .s3rec import S3RecPretrainTrainSampler, S3RecPretrainEvalSampler +from .identity import IdentityTrainSampler, IdentityEvalSampler diff --git a/modeling/dataset/samplers/base.py b/modeling/dataset/samplers/base.py index 723abb0a..2dbfa705 100644 --- a/modeling/dataset/samplers/base.py +++ b/modeling/dataset/samplers/base.py @@ -1,9 +1,10 @@ -import copy - from utils import MetaParent +import copy + class TrainSampler(metaclass=MetaParent): + def __init__(self): self._dataset = None @@ -19,6 +20,7 @@ def __getitem__(self, index): class EvalSampler(metaclass=MetaParent): + def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -35,14 +37,16 @@ def __len__(self): def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [next_item], - "labels.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1 } diff --git a/modeling/dataset/samplers/cl4srec.py b/modeling/dataset/samplers/cl4srec.py index 6fbcd143..8aba1de1 100644 --- a/modeling/dataset/samplers/cl4srec.py +++ b/modeling/dataset/samplers/cl4srec.py @@ -1,19 +1,20 @@ -import copy - import numpy as np -from dataset.samplers.base import EvalSampler, TrainSampler +from dataset.samplers.base import TrainSampler, EvalSampler + +import copy + +class Cl4SRecTrainSampler(TrainSampler, config_name='cl4srec'): -class Cl4SRecTrainSampler(TrainSampler, config_name="cl4srec"): def __init__( - self, - dataset, - num_users, - num_items, - item_crop_portion, - item_mask_portion, - item_reorder_portion, + self, + dataset, + num_users, + num_items, + item_crop_portion, + item_mask_portion, + item_reorder_portion ): super().__init__() self._dataset = dataset @@ -27,23 +28,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - item_crop_portion=config["item_crop_portion"], - item_mask_portion=config["item_mask_portion"], - item_reorder_portion=config["item_reorder_portion"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + item_crop_portion=config['item_crop_portion'], + item_mask_portion=config['item_mask_portion'], + item_reorder_portion=config['item_reorder_portion'] ) def _apply_crop_augmentation(self, item_sequence): num_elements_to_crop = max(1, int(self._item_crop_portion * len(item_sequence))) - crop_start_index = np.random.randint( - low=0, high=len(item_sequence) - num_elements_to_crop + 1 - ) + crop_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_crop + 1) assert 0 <= crop_start_index <= len(item_sequence) - num_elements_to_crop - item_sequence = item_sequence[ - crop_start_index : crop_start_index + num_elements_to_crop - ] + item_sequence = item_sequence[crop_start_index: crop_start_index + num_elements_to_crop] return item_sequence def _apply_mask_augmentation(self, item_sequence): @@ -68,28 +65,22 @@ def _apply_mask_augmentation(self, item_sequence): def _apply_reorder_augmentation(self, item_sequence): num_elements_to_reorder = int(self._item_reorder_portion * len(item_sequence)) - reorder_start_index = np.random.randint( - low=0, high=len(item_sequence) - num_elements_to_reorder + 1 - ) + reorder_start_index = np.random.randint(low=0, high=len(item_sequence) - num_elements_to_reorder + 1) assert 0 <= reorder_start_index <= len(item_sequence) - num_elements_to_reorder - reordered_subsequence = item_sequence[ - reorder_start_index : reorder_start_index + num_elements_to_reorder - ] + reordered_subsequence = item_sequence[reorder_start_index: reorder_start_index + num_elements_to_reorder] np.random.shuffle(reordered_subsequence) # This works in-place - item_sequence = ( - item_sequence[:reorder_start_index] - + reordered_subsequence - + item_sequence[reorder_start_index + num_elements_to_reorder :] - ) + item_sequence = item_sequence[:reorder_start_index] \ + + reordered_subsequence \ + + item_sequence[reorder_start_index + num_elements_to_reorder:] return item_sequence def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] - sample_items = set(sample["item.ids"]) + sample_items = set(sample['item.ids']) negative = np.random.randint(low=1, high=self._num_items + 1) while negative in sample_items: negative = np.random.randint(low=1, high=self._num_items + 1) @@ -97,7 +88,7 @@ def __getitem__(self, index): augmentation_list = [ self._apply_crop_augmentation, self._apply_mask_augmentation, - self._apply_reorder_augmentation, + self._apply_reorder_augmentation ] fst_augmentation = np.random.choice(augmentation_list) @@ -107,28 +98,35 @@ def __getitem__(self, index): snd_augmented_sequence = snd_augmentation(item_sequence) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "fst_augmented_item.ids": fst_augmented_sequence, - "fst_augmented_item.length": len(fst_augmented_sequence), - "snd_augmented_item.ids": snd_augmented_sequence, - "snd_augmented_item.length": len(snd_augmented_sequence), - "labels.ids": [next_item], - "labels.length": 1, - "positive.ids": [next_item], - "positive.length": 1, - "negative.ids": [negative], - "negative.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'fst_augmented_item.ids': fst_augmented_sequence, + 'fst_augmented_item.length': len(fst_augmented_sequence), + + 'snd_augmented_item.ids': snd_augmented_sequence, + 'snd_augmented_item.length': len(snd_augmented_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1, + + 'positive.ids': [next_item], + 'positive.length': 1, + + 'negative.ids': [negative], + 'negative.length': 1 } -class Cl4SRecEvalSampler(EvalSampler, config_name="cl4srec"): +class Cl4SRecEvalSampler(EvalSampler, config_name='cl4srec'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/duorec.py b/modeling/dataset/samplers/duorec.py index f45ae100..a3067fdd 100644 --- a/modeling/dataset/samplers/duorec.py +++ b/modeling/dataset/samplers/duorec.py @@ -1,10 +1,12 @@ -import copy import random -from dataset.samplers.base import EvalSampler, TrainSampler +from dataset.samplers.base import TrainSampler, EvalSampler + +import copy + +class DuorecTrainSampler(TrainSampler, config_name='duorec'): -class DuorecTrainSampler(TrainSampler, config_name="duorec"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -14,15 +16,15 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] target_item = item_sequence[-1] item_sequence = item_sequence[:-1] @@ -31,22 +33,26 @@ def __getitem__(self, index): semantic_similar_sequence = random.choice(self._target_2_sequences[target_item]) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "labels.ids": [target_item], - "labels.length": 1, - "semantic_similar_item.ids": semantic_similar_sequence, - "semantic_similar_item.length": len(semantic_similar_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'labels.ids': [target_item], + 'labels.length': 1, + + 'semantic_similar_item.ids': semantic_similar_sequence, + 'semantic_similar_item.length': len(semantic_similar_sequence) } -class DuoRecEvalSampler(EvalSampler, config_name="duorec"): +class DuoRecEvalSampler(EvalSampler, config_name='duorec'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/identity.py b/modeling/dataset/samplers/identity.py index 4b34b03e..ffe01e23 100644 --- a/modeling/dataset/samplers/identity.py +++ b/modeling/dataset/samplers/identity.py @@ -1,30 +1,35 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy -from dataset.samplers.base import EvalSampler, TrainSampler +class IdentityTrainSampler(TrainSampler, config_name='identity'): -class IdentityTrainSampler(TrainSampler, config_name="identity"): def __init__(self, dataset): super().__init__() self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"]) + return cls( + dataset=kwargs['dataset'] + ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) return sample -class IdentityEvalSampler(EvalSampler, config_name="identity"): +class IdentityEvalSampler(EvalSampler, config_name='identity'): def __init__(self, dataset): self._dataset = dataset @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"]) - + return cls( + dataset=kwargs['dataset'] + ) + def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - return sample + return sample \ No newline at end of file diff --git a/modeling/dataset/samplers/last_item_prediction.py b/modeling/dataset/samplers/last_item_prediction.py index c9da6570..e6f9ba73 100644 --- a/modeling/dataset/samplers/last_item_prediction.py +++ b/modeling/dataset/samplers/last_item_prediction.py @@ -1,8 +1,11 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy from dataset.samplers.base import EvalSampler, TrainSampler from dataset.negative_samplers.base import BaseNegativeSampler +class LastItemPredictionTrainSampler(TrainSampler, config_name='last_item_prediction'): class LastItemPredictionTrainSampler(TrainSampler, config_name="last_item_prediction"): def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives): @@ -30,8 +33,8 @@ def create_from_config(cls, config, **kwargs): def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - last_item = sample["item.ids"][-1] + item_sequence = sample['item.ids'][:-1] + last_item = sample['item.ids'][-1] if self._num_negatives == 0: return { @@ -59,11 +62,12 @@ def __getitem__(self, index): } -class LastItemPredictionEvalSampler(EvalSampler, config_name="last_item_prediction"): +class LastItemPredictionEvalSampler(EvalSampler, config_name='last_item_prediction'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/masked_item_prediction.py b/modeling/dataset/samplers/masked_item_prediction.py index 2243e7ca..0100f731 100644 --- a/modeling/dataset/samplers/masked_item_prediction.py +++ b/modeling/dataset/samplers/masked_item_prediction.py @@ -1,13 +1,11 @@ -import copy +from dataset.samplers.base import TrainSampler, EvalSampler +import copy import numpy as np -from dataset.samplers.base import EvalSampler, TrainSampler +class MaskedItemPredictionTrainSampler(TrainSampler, config_name='masked_item_prediction'): -class MaskedItemPredictionTrainSampler( - TrainSampler, config_name="masked_item_prediction" -): def __init__(self, dataset, num_users, num_items, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -19,16 +17,16 @@ def __init__(self, dataset, num_users, num_items, mask_prob=0.0): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - mask_prob=config.get("mask_prob", 0.0), + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + mask_prob=config.get('mask_prob', 0.0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] masked_sequence = [] labels = [] @@ -56,18 +54,19 @@ def __getitem__(self, index): labels[-1] = item_sequence[-1] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": masked_sequence, - "item.length": len(masked_sequence), - "labels.ids": labels, - "labels.length": len(labels), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': masked_sequence, + 'item.length': len(masked_sequence), + + 'labels.ids': labels, + 'labels.length': len(labels) } -class MaskedItemPredictionEvalSampler( - EvalSampler, config_name="masked_item_prediction" -): +class MaskedItemPredictionEvalSampler(EvalSampler, config_name='masked_item_prediction'): + def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) self._mask_item_idx = self._num_items + 1 @@ -75,22 +74,24 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] labels = [item_sequence[-1]] sequence = item_sequence[:-1] + [self._mask_item_idx] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": sequence, - "item.length": len(sequence), - "labels.ids": labels, - "labels.length": len(labels), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': sequence, + 'item.length': len(sequence), + + 'labels.ids': labels, + 'labels.length': len(labels) } diff --git a/modeling/dataset/samplers/mclsr.py b/modeling/dataset/samplers/mclsr.py index e3610547..2da0986c 100644 --- a/modeling/dataset/samplers/mclsr.py +++ b/modeling/dataset/samplers/mclsr.py @@ -1,9 +1,10 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy -from dataset.samplers.base import EvalSampler, TrainSampler +class MCLSRTrainSampler(TrainSampler, config_name='mclsr'): -class MCLSRTrainSampler(TrainSampler, config_name="mclsr"): def __init__(self, dataset, num_users, num_items): super().__init__() self._dataset = dataset @@ -13,35 +14,39 @@ def __init__(self, dataset, num_users, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item = sample["item.ids"][-1] - next_item_sequence = sample["item.ids"][1:] + item_sequence = sample['item.ids'][:-1] + next_item = sample['item.ids'][-1] + next_item_sequence = sample['item.ids'][1:] return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), - "labels.ids": [next_item], - "labels.length": 1, + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence), + + 'labels.ids': [next_item], + 'labels.length': 1 } -class MCLSRPredictionEvalSampler(EvalSampler, config_name="mclsr"): +class MCLSRPredictionEvalSampler(EvalSampler, config_name='mclsr'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/next_item_prediction.py b/modeling/dataset/samplers/next_item_prediction.py index cf9321ad..c141b065 100644 --- a/modeling/dataset/samplers/next_item_prediction.py +++ b/modeling/dataset/samplers/next_item_prediction.py @@ -1,13 +1,12 @@ +from dataset.samplers.base import TrainSampler, EvalSampler +from dataset.negative_samplers.base import BaseNegativeSampler + import copy -from dataset.negative_samplers.base import BaseNegativeSampler -from dataset.samplers.base import EvalSampler, TrainSampler +class NextItemPredictionTrainSampler(TrainSampler, config_name='next_item_prediction'): -class NextItemPredictionTrainSampler(TrainSampler, config_name="next_item_prediction"): - def __init__( - self, dataset, num_users, num_items, negative_sampler, num_negatives=0 - ): + def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives=0): super().__init__() self._dataset = dataset self._num_users = num_users @@ -17,32 +16,32 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config( - {"type": config["negative_sampler_type"]}, **kwargs - ) + negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], negative_sampler=negative_sampler, - num_negatives=config.get("num_negatives_train", 0), + num_negatives=config.get('num_negatives_train', 0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"][:-1] - next_item_sequence = sample["item.ids"][1:] + item_sequence = sample['item.ids'][:-1] + next_item_sequence = sample['item.ids'][1:] if self._num_negatives == 0: return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence) } else: negative_sequence = self._negative_sampler.generate_negative_samples( @@ -50,22 +49,26 @@ def __getitem__(self, index): ) return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": item_sequence, - "item.length": len(item_sequence), - "positive.ids": next_item_sequence, - "positive.length": len(next_item_sequence), - "negative.ids": negative_sequence, - "negative.length": len(negative_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': item_sequence, + 'item.length': len(item_sequence), + + 'positive.ids': next_item_sequence, + 'positive.length': len(next_item_sequence), + + 'negative.ids': negative_sequence, + 'negative.length': len(negative_sequence) } -class NextItemPredictionEvalSampler(EvalSampler, config_name="next_item_prediction"): +class NextItemPredictionEvalSampler(EvalSampler, config_name='next_item_prediction'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/dataset/samplers/pop.py b/modeling/dataset/samplers/pop.py index 1d3ace34..afd8b208 100644 --- a/modeling/dataset/samplers/pop.py +++ b/modeling/dataset/samplers/pop.py @@ -1,12 +1,15 @@ +from dataset.samplers.base import TrainSampler, EvalSampler + import copy + from collections import Counter -from dataset.samplers.base import EvalSampler, TrainSampler CANDIDATE_COUNTS = None -class PopTrainSampler(TrainSampler, config_name="pop"): +class PopTrainSampler(TrainSampler, config_name='pop'): + def __init__(self, dataset, num_items): super().__init__() @@ -16,48 +19,49 @@ def __init__(self, dataset, num_items): item_2_count = Counter() for sample in dataset: - items = sample["item.ids"] + items = sample['item.ids'] for item in items: item_2_count[item] += 1 - CANDIDATE_COUNTS = ( - [0] - + [ - self._item_2_count[item_id] - for item_id in range(1, self._num_items + 1) - ] - + [0] - ) # Mask + items + padding - + CANDIDATE_COUNTS = [0] + [ + self._item_2_count[item_id] for item_id in range(1, self._num_items + 1) + ] + [0] # Mask + items + padding + @classmethod def create_from_config(cls, config, **kwargs): - return cls(dataset=kwargs["dataset"], num_items=kwargs["num_items"]) + return cls( + dataset=kwargs['dataset'], + num_items=kwargs['num_items'] + ) + +class PopEvalSampler(EvalSampler, config_name='pop'): -class PopEvalSampler(EvalSampler, config_name="pop"): def __init__(self, dataset, num_users, num_items): super().__init__(dataset, num_users, num_items) @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - labels = [sample["item.ids"][-1]] + labels = [sample['item.ids'][-1]] global CANDIDATE_COUNTS assert CANDIDATE_COUNTS is not None return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "labels.ids": labels, - "labels.length": len(labels), - "candidates_counts.ids": CANDIDATE_COUNTS, - "candidates_counts.length": len(CANDIDATE_COUNTS), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'labels.ids': labels, + 'labels.length': len(labels), + + 'candidates_counts.ids': CANDIDATE_COUNTS, + 'candidates_counts.length': len(CANDIDATE_COUNTS) } diff --git a/modeling/dataset/samplers/s3rec.py b/modeling/dataset/samplers/s3rec.py index 73bf9ff4..d1b424cf 100644 --- a/modeling/dataset/samplers/s3rec.py +++ b/modeling/dataset/samplers/s3rec.py @@ -1,12 +1,12 @@ -import copy +from dataset.samplers.base import TrainSampler, EvalSampler +from dataset.negative_samplers.base import BaseNegativeSampler +import copy import numpy as np -from dataset.negative_samplers.base import BaseNegativeSampler -from dataset.samplers.base import EvalSampler, TrainSampler +class S3RecPretrainTrainSampler(TrainSampler, config_name='s3rec_pretrain'): -class S3RecPretrainTrainSampler(TrainSampler, config_name="s3rec_pretrain"): def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0.0): super().__init__() self._dataset = dataset @@ -18,29 +18,27 @@ def __init__(self, dataset, num_users, num_items, negative_sampler, mask_prob=0. self._long_sequence = [] for sample in self._dataset: - self._long_sequence.extend(copy.deepcopy(sample["item.ids"])) + self._long_sequence.extend(copy.deepcopy(sample['item.ids'])) @classmethod def create_from_config(cls, config, **kwargs): - negative_sampler = BaseNegativeSampler.create_from_config( - {"type": config["negative_sampler_type"]}, **kwargs - ) + negative_sampler = BaseNegativeSampler.create_from_config({'type': config['negative_sampler_type']}, **kwargs) return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], negative_sampler=negative_sampler, - mask_prob=config.get("mask_prob", 0.0), + mask_prob=config.get('mask_prob', 0.0) ) def __getitem__(self, index): sample = copy.deepcopy(self._dataset[index]) - item_sequence = sample["item.ids"] + item_sequence = sample['item.ids'] if len(item_sequence) < 3: - assert False, "Something strange is happening" + assert False, 'Something strange is happening' # Masked Item Prediction masked_sequence = [] @@ -65,56 +63,48 @@ def __getitem__(self, index): # Mask last item masked_sequence[-1] = self._mask_item_idx positive_sequence[-1] = item_sequence[-1] - negative_sequence[-1] = self._negative_sampler.generate_negative_samples( - sample, 1 - )[0] - assert ( - len(positive_sequence) - == len(negative_sequence) - == len(masked_sequence) - == len(item_sequence) - ) + negative_sequence[-1] = self._negative_sampler.generate_negative_samples(sample, 1)[0] + assert len(positive_sequence) == len(negative_sequence) == len(masked_sequence) == len(item_sequence) # Segment Prediction sample_length = np.random.randint(1, (len(item_sequence) + 1) // 2) start_id = np.random.randint(0, len(item_sequence) - sample_length) - negative_start_id = np.random.randint( - 0, len(self._long_sequence) - sample_length - ) - masked_segment_sequence = ( - item_sequence[:start_id] - + [self._mask_item_idx] * sample_length - + item_sequence[start_id + sample_length :] - ) - positive_segment = item_sequence[start_id : start_id + sample_length] - negative_segment = self._long_sequence[ - negative_start_id : negative_start_id + sample_length - ] + negative_start_id = np.random.randint(0, len(self._long_sequence) - sample_length) + masked_segment_sequence = item_sequence[:start_id] + [self._mask_item_idx] * sample_length + item_sequence[start_id + sample_length:] + positive_segment = item_sequence[start_id: start_id + sample_length] + negative_segment = self._long_sequence[negative_start_id:negative_start_id + sample_length] assert len(positive_segment) == len(negative_segment) == sample_length return { - "user.ids": sample["user.ids"], - "user.length": sample["user.length"], - "item.ids": masked_sequence, - "item.length": len(masked_sequence), - "positive.ids": item_sequence, - "positive.length": len(item_sequence), - "negative.ids": negative_sequence, - "negative.length": len(negative_sequence), + 'user.ids': sample['user.ids'], + 'user.length': sample['user.length'], + + 'item.ids': masked_sequence, + 'item.length': len(masked_sequence), + + 'positive.ids': item_sequence, + 'positive.length': len(item_sequence), + + 'negative.ids': negative_sequence, + 'negative.length': len(negative_sequence), + "item_segment.ids": masked_segment_sequence, "item_segment.length": len(masked_segment_sequence), - "positive_segment.ids": positive_segment, - "positive_segment.length": len(positive_segment), - "negative_segment.ids": negative_segment, - "negative_segment.length": len(negative_segment), + + 'positive_segment.ids': positive_segment, + 'positive_segment.length': len(positive_segment), + + 'negative_segment.ids': negative_segment, + 'negative_segment.length': len(negative_segment) } -class S3RecPretrainEvalSampler(EvalSampler, config_name="s3rec_pretrain"): +class S3RecPretrainEvalSampler(EvalSampler, config_name='s3rec_pretrain'): + @classmethod def create_from_config(cls, config, **kwargs): return cls( - dataset=kwargs["dataset"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], + dataset=kwargs['dataset'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'] ) diff --git a/modeling/infer.py b/modeling/infer.py index 5bd4664e..c3abe16c 100644 --- a/modeling/infer.py +++ b/modeling/infer.py @@ -1,14 +1,15 @@ -import datetime -import json +from utils import parse_args, create_logger, fix_random_seed, DEVICE + +from dataset import BaseDataset +from dataloader import BaseDataloader +from models import BaseModel, TorchModel +from metric import BaseMetric, StatefullMetric +import json import numpy as np import torch +import datetime -from dataloader import BaseDataloader -from dataset import BaseDataset -from metric import BaseMetric, StatefullMetric -from models import BaseModel, TorchModel -from utils import DEVICE, create_logger, fix_random_seed, parse_args logger = create_logger(name=__name__) seed_val = 42 @@ -24,6 +25,7 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): with torch.no_grad(): for idx, batch in enumerate(dataloader): + for key, value in batch.items(): batch[key] = value.to(DEVICE) batch[pred_prefix] = model(batch) @@ -32,62 +34,57 @@ def inference(dataloader, model, metrics, pred_prefix, labels_prefix): batch[key] = values.cpu() for metric_name, metric_function in metrics.items(): - running_metrics[metric_name].extend( - metric_function( - inputs=batch, - pred_prefix=pred_prefix, - labels_prefix=labels_prefix, - ) - ) - + running_metrics[metric_name].extend(metric_function( + inputs=batch, + pred_prefix=pred_prefix, + labels_prefix=labels_prefix, + )) + for metric_name, metric_function in metrics.items(): if isinstance(metric_function, StatefullMetric): - running_metrics[metric_name] = metric_function.reduce( - running_metrics[metric_name] - ) + running_metrics[metric_name] = metric_function.reduce(running_metrics[metric_name]) - logger.debug("Inference procedure has been finished!") - logger.debug("Metrics are the following:") + logger.debug('Inference procedure has been finished!') + logger.debug('Metrics are the following:') for metric_name, metric_value in running_metrics.items(): - logger.info("{}: {}".format(metric_name, np.mean(metric_value))) + logger.info('{}: {}'.format(metric_name, np.mean(metric_value))) def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug("Inference config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Inference config: \n{}'.format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) _, _, eval_dataset = dataset.get_samplers() eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=eval_dataset + config['dataloader']['validation'], + dataset=eval_dataset ) - model = BaseModel.create_from_config(config["model"], **dataset.meta) + model = BaseModel.create_from_config(config['model'], **dataset.meta) if isinstance(model, TorchModel): model = model.to(DEVICE) - checkpoint_path = "../checkpoints/{}_final_state.pth".format( - config["experiment_name"] - ) + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) model.load_state_dict(torch.load(checkpoint_path)) metrics = { - metric_name: BaseMetric.create_from_config(metric_cfg, **dataset.meta) - for metric_name, metric_cfg in config["metrics"].items() + metric_name: BaseMetric.create_from_config(metric_cfg , **dataset.meta) + for metric_name, metric_cfg in config['metrics'].items() } _ = inference( - dataloader=eval_dataloader, - model=model, - metrics=metrics, - pred_prefix=config["pred_prefix"], - labels_prefix=config["label_prefix"], + dataloader=eval_dataloader, + model=model, + metrics=metrics, + pred_prefix=config['pred_prefix'], + labels_prefix=config['label_prefix'] ) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/loss/base.py b/modeling/loss/base.py index e5a6ce5c..8ec91326 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -1,11 +1,11 @@ import copy +from utils import MetaParent, get_activation_function, maybe_to_list, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from utils import DEVICE, MetaParent, get_activation_function, maybe_to_list - class BaseLoss(metaclass=MetaParent): pass @@ -15,12 +15,14 @@ class TorchLoss(BaseLoss, nn.Module): pass -class IdentityLoss(BaseLoss, config_name="identity"): +class IdentityLoss(BaseLoss, config_name='identity'): + def __call__(self, inputs): return inputs -class CompositeLoss(TorchLoss, config_name="composite"): +class CompositeLoss(TorchLoss, config_name='composite'): + def __init__(self, losses, weights=None, output_prefix=None): super().__init__() self._losses = losses @@ -32,16 +34,14 @@ def create_from_config(cls, config, **kwargs): losses = [] weights = [] - for loss_cfg in copy.deepcopy(config)["losses"]: - weight = loss_cfg.pop("weight") if "weight" in loss_cfg else 1.0 + for loss_cfg in copy.deepcopy(config)['losses']: + weight = loss_cfg.pop('weight') if 'weight' in loss_cfg else 1.0 loss_function = BaseLoss.create_from_config(loss_cfg) weights.append(weight) losses.append(loss_function) - return cls( - losses=losses, weights=weights, output_prefix=config.get("output_prefix") - ) + return cls(losses=losses, weights=weights, output_prefix=config.get('output_prefix')) def forward(self, inputs): total_loss = 0.0 @@ -53,8 +53,7 @@ def forward(self, inputs): return total_loss - -class SampleLogSoftmaxLoss(TorchLoss, config_name="sample_logsoftmax"): +class SampleLogSoftmaxLoss(TorchLoss, config_name='sample_logsoftmax'): def __init__(self, predictions_prefix, labels): super().__init__() self._predictions_prefix = predictions_prefix @@ -63,38 +62,37 @@ def __init__(self, predictions_prefix, labels): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get("predictions_prefix"), - labels=config.get("labels"), + predictions_prefix=config.get('predictions_prefix'), + labels=config.get('labels') ) def forward(self, inputs): # use log soft max logits = inputs[self._predictions_prefix] candidates = inputs[self._labels] - + assert len(logits.shape) in [2, 3] - + batch_size = logits.shape[0] seq_len = logits.shape[1] - + if len(logits.shape) == 3: loss = -torch.gather( - torch.log_softmax(logits, dim=-1).reshape( - batch_size * seq_len, logits.shape[-1] - ), - dim=-1, - index=candidates.reshape(batch_size * seq_len, 1), + torch.log_softmax(logits, dim=-1).reshape(batch_size * seq_len, logits.shape[-1]), + dim=-1, + index=candidates.reshape(batch_size * seq_len, 1) ).mean() else: loss = -torch.gather( torch.log_softmax(logits, dim=-1), - dim=-1, - index=candidates.reshape(batch_size, 1), + dim=-1, + index=candidates.reshape(batch_size, 1) ).mean() - + return loss -class BatchLogSoftmaxLoss(TorchLoss, config_name="batch_logsoftmax"): +class BatchLogSoftmaxLoss(TorchLoss, config_name='batch_logsoftmax'): + def __init__(self, predictions_prefix, candidates_prefix): super().__init__() self._predictions_prefix = predictions_prefix @@ -103,8 +101,8 @@ def __init__(self, predictions_prefix, candidates_prefix): @classmethod def create_from_config(cls, config, **kwargs): return cls( - predictions_prefix=config.get("predictions_prefix"), - candidates_prefix=config.get("candidates_prefix"), + predictions_prefix=config.get('predictions_prefix'), + candidates_prefix=config.get('candidates_prefix') ) def forward(self, inputs): # use log soft max @@ -123,7 +121,8 @@ def forward(self, inputs): # use log soft max return loss -class CrossEntropyLoss(TorchLoss, config_name="ce"): +class CrossEntropyLoss(TorchLoss, config_name='ce'): + def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): super().__init__() self._pred_prefix = predictions_prefix @@ -134,7 +133,7 @@ def __init__(self, predictions_prefix, labels_prefix, output_prefix=None): def forward(self, inputs): all_logits = inputs[self._pred_prefix] # (all_items, num_classes) - all_labels = inputs["{}.ids".format(self._labels_prefix)] # (all_items) + all_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_items) assert all_logits.shape[0] == all_labels.shape[0] loss = self._loss(all_logits, all_labels) # (1) @@ -142,48 +141,55 @@ def forward(self, inputs): inputs[self._output_prefix] = loss.cpu().item() return loss + +class RqVaeLoss(TorchLoss, config_name='rqvae_loss'): - -class RqVaeLoss(TorchLoss, config_name="rqvae_loss"): def __init__(self, beta, output_prefix=None): super().__init__() self.beta = beta self._output_prefix = output_prefix - + self._loss = nn.MSELoss() - + @classmethod def create_from_config(cls, config, **kwargs): # 0.25 is default Beta in paper return cls( - beta=config.get("beta", 0.25), - output_prefix=config["output_prefix"], + beta = config.get('beta', 0.25), + output_prefix = config['output_prefix'], ) - + def forward(self, inputs): embeddings = inputs["embeddings"] embeddings_restored = inputs["embeddings_restored"] remainders = inputs["remainders"] codebooks_vectors = inputs["codebooks_vectors"] - + rqvae_loss = 0 - + for remainder, codebook_vectors in zip(remainders, codebooks_vectors): - rqvae_loss += self.beta * self._loss(remainder, codebook_vectors.detach()) + rqvae_loss += self.beta * self._loss( + remainder, codebook_vectors.detach() + ) rqvae_loss += self._loss(codebook_vectors, remainder.detach()) - + recon_loss = self._loss(embeddings_restored, embeddings) loss = (recon_loss + rqvae_loss).mean(dim=0) - + if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() - + return loss -class BinaryCrossEntropyLoss(TorchLoss, config_name="bce"): +class BinaryCrossEntropyLoss(TorchLoss, config_name='bce'): + def __init__( - self, predictions_prefix, labels_prefix, with_logits=True, output_prefix=None + self, + predictions_prefix, + labels_prefix, + with_logits=True, + output_prefix=None ): super().__init__() self._pred_prefix = predictions_prefix @@ -207,8 +213,14 @@ def forward(self, inputs): return loss -class BPRLoss(TorchLoss, config_name="bpr"): - def __init__(self, positive_prefix, negative_prefix, output_prefix=None): +class BPRLoss(TorchLoss, config_name='bpr'): + + def __init__( + self, + positive_prefix, + negative_prefix, + output_prefix=None + ): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -225,7 +237,8 @@ def forward(self, inputs): return loss -class RegularizationLoss(TorchLoss, config_name="regularization"): +class RegularizationLoss(TorchLoss, config_name='regularization'): + def __init__(self, prefix, output_prefix=None): super().__init__() self._prefix = maybe_to_list(prefix) @@ -234,7 +247,7 @@ def __init__(self, prefix, output_prefix=None): def forward(self, inputs): loss = 0.0 for prefix in self._prefix: - loss += (1 / 2) * inputs[prefix].pow(2).mean() + loss += (1/2) * inputs[prefix].pow(2).mean() if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() @@ -242,23 +255,22 @@ def forward(self, inputs): return loss -class FpsLoss(TorchLoss, config_name="fps"): +class FpsLoss(TorchLoss, config_name='fps'): + def __init__( - self, - fst_embeddings_prefix, - snd_embeddings_prefix, - tau=1.0, - normalize_embeddings=False, - use_mean=True, - output_prefix=None, + self, + fst_embeddings_prefix, + snd_embeddings_prefix, + tau=1.0, + normalize_embeddings=False, + use_mean=True, + output_prefix=None ): super().__init__() self._fst_embeddings_prefix = fst_embeddings_prefix self._snd_embeddings_prefix = snd_embeddings_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss( - reduction="mean" if use_mean else "sum" - ) + self._loss_function = nn.CrossEntropyLoss(reduction='mean' if use_mean else 'sum') self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix @@ -268,49 +280,34 @@ def forward(self, inputs): batch_size = fst_embeddings.shape[0] - combined_embeddings = torch.cat( - (fst_embeddings, snd_embeddings), dim=0 - ) # (2 * x, embedding_dim) + combined_embeddings = torch.cat((fst_embeddings, snd_embeddings), dim=0) # (2 * x, embedding_dim) if self._normalize_embeddings: combined_embeddings = torch.nn.functional.normalize( combined_embeddings, p=2, dim=-1, eps=1e-6 ) # (2 * x, embedding_dim) - similarity_scores = ( - torch.mm(combined_embeddings, combined_embeddings.T) / self._tau - ) # (2 * x, 2 * x) + similarity_scores = torch.mm( + combined_embeddings, + combined_embeddings.T + ) / self._tau # (2 * x, 2 * x) positive_samples = torch.cat( - ( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ), - dim=0, + (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), + dim=0 ).reshape(2 * batch_size, 1) # (2 * x, 1) - assert torch.allclose( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ) + assert torch.allclose(torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)) - mask = torch.ones( - 2 * batch_size, 2 * batch_size, dtype=torch.bool - ) # (2 * x, 2 * x) + mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape( - 2 * batch_size, -1 - ) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) - labels = ( - torch.zeros(2 * batch_size).to(positive_samples.device).long() - ) # (2 * x) - logits = torch.cat( - (positive_samples, negative_samples), dim=1 - ) # (2 * x, 2 * x - 1) + labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) + logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) @@ -343,8 +340,14 @@ def forward(self, inputs): return loss -class SASRecLoss(TorchLoss, config_name="sasrec"): - def __init__(self, positive_prefix, negative_prefix, output_prefix=None): +class SASRecLoss(TorchLoss, config_name='sasrec'): + + def __init__( + self, + positive_prefix, + negative_prefix, + output_prefix=None + ): super().__init__() self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -354,40 +357,27 @@ def forward(self, inputs): positive_scores = inputs[self._positive_prefix] # (x, embedding_dim) negative_scores = inputs[self._negative_prefix] # (x, embedding_dim) sample_ids = inputs["sample_ids"] - + num_items = negative_scores.shape[1] - 2 - - possible_indices = torch.arange( - 1, num_items + 1, device=negative_scores.device - ) # 1, 2, ... num_items - mask = torch.ones_like( - possible_indices, dtype=torch.bool - ) # True, True, ... True - mask[sample_ids - 1] = False # True, False, ... False, True, ... True - valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids - - rand_idx = torch.randint( - 0, - len(valid_indices), - size=(negative_scores.shape[0], 1), - device=negative_scores.device, - ) + + possible_indices = torch.arange(1, num_items + 1, device=negative_scores.device) # 1, 2, ... num_items + mask = torch.ones_like(possible_indices, dtype=torch.bool) # True, True, ... True + mask[sample_ids - 1] = False # True, False, ... False, True, ... True + valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids + + rand_idx = torch.randint(0, len(valid_indices), size=(negative_scores.shape[0], 1), device=negative_scores.device) index = valid_indices[rand_idx] - + negative_scores = torch.gather( input=negative_scores, dim=1, index=index, ) - + assert positive_scores.shape[0] == negative_scores.shape[0] - positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum( - dim=-1 - ) # (x) - negative_loss = torch.log( - 1.0 - nn.functional.sigmoid(negative_scores) + 1e-9 - ).sum(dim=-1) # (x), added 1e-9 for Tiger baseline + positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum(dim=-1) # (x) + negative_loss = torch.log(1.0 - nn.functional.sigmoid(negative_scores) + 1e-9).sum(dim=-1) # (x), added 1e-9 for Tiger baseline loss = positive_loss + negative_loss # (x) loss = -loss.sum() # (1) @@ -397,9 +387,14 @@ def forward(self, inputs): return loss -class SamplesSoftmaxLoss(TorchLoss, config_name="sampled_softmax"): +class SamplesSoftmaxLoss(TorchLoss, config_name='sampled_softmax'): + def __init__( - self, queries_prefix, positive_prefix, negative_prefix, output_prefix=None + self, + queries_prefix, + positive_prefix, + negative_prefix, + output_prefix=None ): super().__init__() self._queries_prefix = queries_prefix @@ -409,6 +404,7 @@ def __init__( def forward(self, inputs): queries_embeddings = inputs[self._queries_prefix] # (batch_size, embedding_dim) + # TODOPK check positive_ids, positive_embeddings = inputs[ self._positive_prefix ] # (batch_size, embedding_dim) @@ -418,13 +414,17 @@ def forward(self, inputs): # b -- batch_size, d -- embedding_dim positive_scores = torch.einsum( - "bd,bd->b", queries_embeddings, positive_embeddings + 'bd,bd->b', + queries_embeddings, + positive_embeddings ).unsqueeze(-1) # (batch_size, 1) if negative_embeddings.dim() == 2: # (num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - "bd,nd->bn", queries_embeddings, negative_embeddings + 'bd,nd->bn', + queries_embeddings, + negative_embeddings ) # (batch_size, num_negatives) all_scores = torch.cat( @@ -436,12 +436,12 @@ def forward(self, inputs): loss = (-logits)[:, 0] # (batch_size) loss = loss.mean() # (1) else: - assert ( - negative_embeddings.dim() == 3 - ) # (batch_size, num_negatives, embedding_dim) + assert negative_embeddings.dim() == 3 # (batch_size, num_negatives, embedding_dim) # b -- batch_size, n -- num_negatives, d -- embedding_dim negative_scores = torch.einsum( - "bd,bnd->bn", queries_embeddings, negative_embeddings + 'bd,bnd->bn', + queries_embeddings, + negative_embeddings ) # (batch_size, num_negatives) assert False, "ask Vladimir wtf is it " @@ -452,13 +452,14 @@ def forward(self, inputs): return loss -class S3RecPretrainLoss(TorchLoss, config_name="s3rec_pretrain"): +class S3RecPretrainLoss(TorchLoss, config_name='s3rec_pretrain'): + def __init__( - self, - positive_prefix, - negative_prefix, - representation_prefix, - output_prefix=None, + self, + positive_prefix, + negative_prefix, + representation_prefix, + output_prefix=None ): super().__init__() self._positive_prefix = positive_prefix @@ -471,39 +472,36 @@ def forward(self, inputs): positive_embeddings = inputs[self._positive_prefix] # (x, embedding_dim) negative_embeddings = inputs[self._negative_prefix] # (x, embedding_dim) current_embeddings = inputs[self._representation_prefix] # (x, embedding_dim) - assert ( - positive_embeddings.shape[0] - == negative_embeddings.shape[0] - == current_embeddings.shape[0] - ) + assert positive_embeddings.shape[0] == negative_embeddings.shape[0] == current_embeddings.shape[0] positive_scores = torch.einsum( - "bd,bd->b", positive_embeddings, current_embeddings + 'bd,bd->b', + positive_embeddings, + current_embeddings ) # (x) negative_scores = torch.einsum( - "bd,bd->b", negative_embeddings, current_embeddings + 'bd,bd->b', + negative_embeddings, + current_embeddings ) # (x) - distance = torch.sigmoid(positive_scores) - torch.sigmoid( - negative_scores - ) # (x) - loss = torch.sum( - self._criterion(distance, torch.ones_like(distance, dtype=torch.float32)) - ) # (1) + distance = torch.sigmoid(positive_scores) - torch.sigmoid(negative_scores) # (x) + loss = torch.sum(self._criterion(distance, torch.ones_like(distance, dtype=torch.float32))) # (1) if self._output_prefix is not None: inputs[self._output_prefix] = loss.cpu().item() return loss -class Cl4sRecLoss(TorchLoss, config_name="cl4srec"): +class Cl4sRecLoss(TorchLoss, config_name='cl4srec'): + def __init__( - self, - current_representation, - all_items_representation, - tau=1.0, - output_prefix=None, + self, + current_representation, + all_items_representation, + tau=1.0, + output_prefix=None ): super().__init__() self._current_representation = current_representation @@ -513,9 +511,7 @@ def __init__( self._output_prefix = output_prefix def forward(self, inputs): - current_representation = inputs[ - self._current_representation - ] # (batch_size, embedding_dim) + current_representation = inputs[self._current_representation] # (batch_size, embedding_dim) all_items_representation = inputs[ self._all_items_representation ] # (batch_size, num_negatives + 1, embedding_dim) @@ -523,7 +519,9 @@ def forward(self, inputs): batch_size = current_representation.shape[0] logits = torch.einsum( - "bnd,bd->bn", all_items_representation, current_representation + 'bnd,bd->bn', + all_items_representation, + current_representation ) # (batch_size, num_negatives + 1) labels = logits.new_zeros(batch_size) # (batch_size) @@ -535,15 +533,16 @@ def forward(self, inputs): return loss -class DuorecSSLLoss(TorchLoss, config_name="duorec_ssl"): +class DuorecSSLLoss(TorchLoss, config_name='duorec_ssl'): + def __init__( - self, - original_embedding_prefix, - dropout_embedding_prefix, - similar_embedding_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None, + self, + original_embedding_prefix, + dropout_embedding_prefix, + similar_embedding_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None ): super().__init__() self._original_embedding_prefix = original_embedding_prefix @@ -552,13 +551,14 @@ def __init__( self._normalize_embeddings = normalize_embeddings self._output_prefix = output_prefix self._tau = tau - self._loss_function = nn.CrossEntropyLoss(reduction="mean") + self._loss_function = nn.CrossEntropyLoss(reduction='mean') def _compute_partial_loss(self, fst_embeddings, snd_embeddings): batch_size = fst_embeddings.shape[0] combined_embeddings = torch.cat( - (fst_embeddings, snd_embeddings), dim=0 + (fst_embeddings, snd_embeddings), + dim=0 ) # (2 * x, embedding_dim) if self._normalize_embeddings: @@ -566,76 +566,59 @@ def _compute_partial_loss(self, fst_embeddings, snd_embeddings): combined_embeddings, p=2, dim=-1, eps=1e-6 ) - similarity_scores = ( - torch.mm(combined_embeddings, combined_embeddings.T) / self._tau - ) # (2 * x, 2 * x) + similarity_scores = torch.mm( + combined_embeddings, + combined_embeddings.T + ) / self._tau # (2 * x, 2 * x) positive_samples = torch.cat( - ( - torch.diag(similarity_scores, batch_size), - torch.diag(similarity_scores, -batch_size), - ), - dim=0, + (torch.diag(similarity_scores, batch_size), torch.diag(similarity_scores, -batch_size)), + dim=0 ).reshape(2 * batch_size, 1) # (2 * x, 1) # TODO optimize - mask = torch.ones( - 2 * batch_size, 2 * batch_size, dtype=torch.bool - ) # (2 * x, 2 * x) + mask = torch.ones(2 * batch_size, 2 * batch_size, dtype=torch.bool) # (2 * x, 2 * x) mask = mask.fill_diagonal_(0) # Remove equal embeddings scores for i in range(batch_size): # Remove positives mask[i, batch_size + i] = 0 mask[batch_size + i, i] = 0 - negative_samples = similarity_scores[mask].reshape( - 2 * batch_size, -1 - ) # (2 * x, 2 * x - 2) + negative_samples = similarity_scores[mask].reshape(2 * batch_size, -1) # (2 * x, 2 * x - 2) - labels = ( - torch.zeros(2 * batch_size).to(positive_samples.device).long() - ) # (2 * x) - logits = torch.cat( - (positive_samples, negative_samples), dim=1 - ) # (2 * x, 2 * x - 1) + labels = torch.zeros(2 * batch_size).to(positive_samples.device).long() # (2 * x) + logits = torch.cat((positive_samples, negative_samples), dim=1) # (2 * x, 2 * x - 1) loss = self._loss_function(logits, labels) / 2 # (1) return loss def forward(self, inputs): - original_embeddings = inputs[ - self._original_embedding_prefix - ] # (x, embedding_dim) - dropout_embeddings = inputs[ - self._dropout_embedding_prefix - ] # (x, embedding_dim) - similar_embeddings = inputs[ - self._similar_embedding_prefix - ] # (x, embedding_dim) - - dropout_loss = self._compute_partial_loss( - original_embeddings, dropout_embeddings - ) + original_embeddings = inputs[self._original_embedding_prefix] # (x, embedding_dim) + dropout_embeddings = inputs[self._dropout_embedding_prefix] # (x, embedding_dim) + similar_embeddings = inputs[self._similar_embedding_prefix] # (x, embedding_dim) + + dropout_loss = self._compute_partial_loss(original_embeddings, dropout_embeddings) ssl_loss = self._compute_partial_loss(original_embeddings, similar_embeddings) loss = dropout_loss + ssl_loss if self._output_prefix is not None: - inputs[f"{self._output_prefix}_dropout"] = dropout_loss.cpu().item() - inputs[f"{self._output_prefix}_ssl"] = ssl_loss.cpu().item() + inputs[f'{self._output_prefix}_dropout'] = dropout_loss.cpu().item() + inputs[f'{self._output_prefix}_ssl'] = ssl_loss.cpu().item() inputs[self._output_prefix] = loss.cpu().item() return loss -class MCLSRLoss(TorchLoss, config_name="mclsr"): +class MCLSRLoss(TorchLoss, config_name='mclsr'): + def __init__( - self, - all_scores_prefix, - mask_prefix, - normalize_embeddings=False, - tau=1.0, - output_prefix=None, + self, + all_scores_prefix, + mask_prefix, + normalize_embeddings=False, + tau=1.0, + output_prefix=None ): super().__init__() self._all_scores_prefix = all_scores_prefix @@ -645,9 +628,7 @@ def __init__( self._tau = tau def forward(self, inputs): - all_scores = inputs[ - self._all_scores_prefix - ] # (batch_size, batch_size, seq_len) + all_scores = inputs[self._all_scores_prefix] # (batch_size, batch_size, seq_len) mask = inputs[self._mask_prefix] # (batch_size) batch_size = mask.shape[0] @@ -657,7 +638,8 @@ def forward(self, inputs): positive_scores = all_scores[positive_mask] # (batch_size, seq_len) negative_scores = torch.reshape( - all_scores[~positive_mask], shape=(batch_size, batch_size - 1, seq_len) + all_scores[~positive_mask], + shape=(batch_size, batch_size - 1, seq_len) ) # (batch_size, batch_size - 1, seq_len) assert torch.allclose(all_scores[0, 1], negative_scores[0, 0]) assert torch.allclose(all_scores[-1, -2], negative_scores[-1, -1]) diff --git a/modeling/metric/base.py b/modeling/metric/base.py index e22c1d20..677f9086 100644 --- a/modeling/metric/base.py +++ b/modeling/metric/base.py @@ -1,18 +1,19 @@ -import torch - from utils import MetaParent +import torch + class BaseMetric(metaclass=MetaParent): pass class StatefullMetric(BaseMetric): + def reduce(self): raise NotImplementedError -class StaticMetric(BaseMetric, config_name="dummy"): +class StaticMetric(BaseMetric, config_name='dummy'): def __init__(self, name, value): self._name = name self._value = value @@ -23,15 +24,17 @@ def __call__(self, inputs): return inputs -class CompositeMetric(BaseMetric, config_name="composite"): +class CompositeMetric(BaseMetric, config_name='composite'): + def __init__(self, metrics): self._metrics = metrics @classmethod def create_from_config(cls, config): - return cls( - metrics=[BaseMetric.create_from_config(cfg) for cfg in config["metrics"]] - ) + return cls(metrics=[ + BaseMetric.create_from_config(cfg) + for cfg in config['metrics'] + ]) def __call__(self, inputs): for metric in self._metrics: @@ -39,63 +42,57 @@ def __call__(self, inputs): return inputs -class NDCGMetric(BaseMetric, config_name="ndcg"): +class NDCGMetric(BaseMetric, config_name='ndcg'): + def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) - labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) + labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq( - predictions, labels[..., None] - ).float() # (batch_size, top_k_indices) - discount_factor = 1 / torch.log2( - torch.arange(1, self._k + 1, 1).float() + 1.0 - ).to(hits.device) # (k) - dcg = torch.einsum("bk,k->b", hits, discount_factor) # (batch_size) + hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) + discount_factor = 1 / torch.log2(torch.arange(1, self._k + 1, 1).float() + 1.).to(hits.device) # (k) + dcg = torch.einsum('bk,k->b', hits, discount_factor) # (batch_size) return dcg.cpu().tolist() -class RecallMetric(BaseMetric, config_name="recall"): +class RecallMetric(BaseMetric, config_name='recall'): + def __init__(self, k): self._k = k def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) - labels = inputs["{}.ids".format(labels_prefix)].float() # (batch_size) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) + labels = inputs['{}.ids'.format(labels_prefix)].float() # (batch_size) assert labels.shape[0] == predictions.shape[0] - hits = torch.eq( - predictions, labels[..., None] - ).float() # (batch_size, top_k_indices) + hits = torch.eq(predictions, labels[..., None]).float() # (batch_size, top_k_indices) recall = hits.sum(dim=-1) # (batch_size) return recall.cpu().tolist() -class CoverageMetric(StatefullMetric, config_name="coverage"): +class CoverageMetric(StatefullMetric, config_name='coverage'): + def __init__(self, k, num_items): self._k = k self._num_items = num_items - + @classmethod def create_from_config(cls, config, **kwargs): - return cls(k=config["k"], num_items=kwargs["num_items"]) + return cls( + k=config['k'], + num_items=kwargs['num_items'] + ) def __call__(self, inputs, pred_prefix, labels_prefix): - predictions = inputs[pred_prefix][ - :, : self._k - ].float() # (batch_size, top_k_indices) + predictions = inputs[pred_prefix][:, :self._k].float() # (batch_size, top_k_indices) return predictions.view(-1).long().cpu().detach().tolist() # (batch_size * k) - + def reduce(self, values): return len(set(values)) / self._num_items diff --git a/modeling/models/__init__.py b/modeling/models/__init__.py index 377a703d..71fc9643 100644 --- a/modeling/models/__init__.py +++ b/modeling/models/__init__.py @@ -14,9 +14,9 @@ from .random import RandomModel from .rqvae import RqVaeModel from .s3rec import S3RecModel -from .sasrec_in_batch import SasRecInBatchModel from .sasrec_ce import SasRecCeModel from .sasrec_full import SasRecFullModel +from .sasrec_in_batch import SasRecInBatchModel from .sasrec_real import SasRecRealModel from .sasrec_semantic import SasRecSemanticModel from .tiger import TigerModel diff --git a/modeling/models/base.py b/modeling/models/base.py index 786ef12c..a1384384 100644 --- a/modeling/models/base.py +++ b/modeling/models/base.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn - from utils import DEVICE, MetaParent, create_masked_tensor, get_activation_function @@ -9,42 +8,39 @@ class BaseModel(metaclass=MetaParent): class TorchModel(nn.Module, BaseModel): + @torch.no_grad() def _init_weights(self, initializer_range): for key, value in self.named_parameters(): - if "weight" in key: - if "norm" in key: + if 'weight' in key: + if 'norm' in key: nn.init.ones_(value.data) else: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range, + b=2 * initializer_range ) - elif "bias" in key: + elif 'bias' in key: nn.init.zeros_(value.data) - elif "codebook" in key: + elif 'codebook' in key: nn.init.trunc_normal_( value.data, std=initializer_range, a=-2 * initializer_range, - b=2 * initializer_range, + b=2 * initializer_range ) else: - raise ValueError(f"Unknown transformer weight: {key}") + raise ValueError(f'Unknown transformer weight: {key}') @staticmethod def _get_last_embedding(embeddings, mask): lengths = torch.sum(mask, dim=-1) # (batch_size) - lengths = lengths - 1 # (batch_size) + lengths = (lengths - 1) # (batch_size) last_masks = mask.gather(dim=1, index=lengths[:, None]) # (batch_size, 1) - lengths = torch.tile( - lengths[:, None, None], (1, 1, embeddings.shape[-1]) - ) # (batch_size, 1, emb_dim) - last_embeddings = embeddings.gather( - dim=1, index=lengths - ) # (batch_size, 1, emb_dim) + lengths = torch.tile(lengths[:, None, None], (1, 1, embeddings.shape[-1])) # (batch_size, 1, emb_dim) + last_embeddings = embeddings.gather(dim=1, index=lengths) # (batch_size, 1, emb_dim) last_embeddings = last_embeddings[last_masks] # (batch_size, emb_dim) if not torch.allclose(embeddings[mask][-1], last_embeddings[-1]): print(embeddings) @@ -56,18 +52,19 @@ def _get_last_embedding(embeddings, mask): class SequentialTorchModel(TorchModel): + def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - is_causal=True, + self, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + is_causal=True ): super().__init__() self._is_causal = is_causal @@ -77,12 +74,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -95,10 +91,10 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True, + batch_first=True ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) - + def get_item_embeddings(self, events): return self._item_embeddings(events) @@ -112,7 +108,8 @@ def _apply_sequential_encoder( assert embeddings.shape[0] == sum(lengths) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] @@ -121,9 +118,7 @@ def _apply_sequential_encoder( position_embeddings = self._encoder_pos_embeddings(lengths, mask) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -134,10 +129,7 @@ def _apply_sequential_encoder( cls_token_tensor = self._cls_token.unsqueeze(0).unsqueeze(0) cls_token_expanded = torch.tile(cls_token_tensor, (batch_size, 1, 1)) embeddings = torch.cat((cls_token_expanded, embeddings), dim=1) - mask = torch.cat( - (torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), - dim=1, - ) + mask = torch.cat((torch.ones((batch_size, 1), dtype=torch.bool, device=DEVICE), mask), dim=1) if user_embeddings is not None: embeddings = torch.cat((user_embeddings.unsqueeze(1), embeddings), dim=1) @@ -148,15 +140,16 @@ def _apply_sequential_encoder( seq_len += 1 # TODOPK ask if this is correct if self._is_causal: - causal_mask = ( - torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) - ) # (seq_len, seq_len) + causal_mask = torch.tril(torch.ones(seq_len, seq_len)).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( - src=embeddings, mask=~causal_mask, src_key_padding_mask=~mask + src=embeddings, + mask=~causal_mask, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, src_key_padding_mask=~mask + src=embeddings, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) return embeddings, mask @@ -165,19 +158,16 @@ def _encoder_pos_embeddings(self, lengths, mask): batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) return position_embeddings @@ -187,18 +177,17 @@ def _add_cls_token(items, lengths, cls_token_id=0): batch_size = lengths.shape[0] num_new_items = num_items + batch_size - new_items = ( - torch.ones(num_new_items, dtype=items.dtype, device=items.device) - * cls_token_id - ) # (num_new_items) + new_items = torch.ones( + num_new_items, + dtype=items.dtype, + device=items.device + ) * cls_token_id # (num_new_items) old_items_mask = torch.zeros_like(new_items).bool() # (num_new_items) old_items_mask = ~old_items_mask.scatter( src=torch.ones_like(lengths).bool(), dim=0, - index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum( - dim=0 - )[:-1], + index=torch.cat([torch.LongTensor([0]).to(DEVICE), lengths + 1]).cumsum(dim=0)[:-1] ) # (num_new_items) new_items[old_items_mask] = items new_length = lengths + 1 diff --git a/modeling/models/bert4rec.py b/modeling/models/bert4rec.py index 69794fb6..40f1d331 100644 --- a/modeling/models/bert4rec.py +++ b/modeling/models/bert4rec.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class Bert4RecModel(SequentialTorchModel, config_name='bert4rec'): -class Bert4RecModel(SequentialTorchModel, config_name="bert4rec"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="gelu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='gelu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,77 +31,70 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False, + is_causal=False ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) if self.training: # training mode - all_sample_labels = inputs[ - "{}.ids".format(self._labels_prefix) - ] # (all_batch_events) + all_sample_labels = inputs['{}.ids'.format(self._labels_prefix)] # (all_batch_events) embeddings = embeddings[mask] # (all_batch_events, num_items) labels_mask = (all_sample_labels != 0).bool() # (all_batch_events) needed_logits = embeddings[labels_mask] # (non_zero_events, num_items) needed_labels = all_sample_labels[labels_mask] # (non_zero_events) - return {"logits": needed_logits, "labels.ids": needed_labels} + return {'logits': needed_logits, 'labels.ids': needed_labels} else: # eval mode - candidate_scores = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items) + candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/bert4rec_cls.py b/modeling/models/bert4rec_cls.py index c0bbc61a..d6e59b0a 100644 --- a/modeling/models/bert4rec_cls.py +++ b/modeling/models/bert4rec_cls.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class Bert4RecModelCLS(SequentialTorchModel, config_name='bert4rec_cls'): -class Bert4RecModelCLS(SequentialTorchModel, config_name="bert4rec_cls"): def __init__( - self, - sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="gelu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='gelu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,16 +31,20 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=False, + is_causal=False ) self._sequence_prefix = sequence_prefix self._labels_prefix = labels_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @@ -48,50 +53,48 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, lengths=all_sample_lengths, add_cls_token=True + events=all_sample_events, + lengths=all_sample_lengths, + add_cls_token=True ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) predictions = embeddings[:, 0, :] # (batch_size, embedding_dim) if self.training: # training mode candidates = self._item_embeddings( - inputs["{}.ids".format(self._labels_prefix)] - ) # (batch_size, embedding_dim) + inputs['{}.ids'.format(self._labels_prefix)]) # (batch_size, embedding_dim) - return {"predictions": predictions, "candidates": candidates} + return {'predictions': predictions, 'candidates': candidates} else: # eval mode candidate_scores = torch.einsum( - "bd,nd->bn", predictions, self._item_embeddings.weight + 'bd,nd->bn', + predictions, + self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/cl4srec.py b/modeling/models/cl4srec.py index e1bf7152..945c2a92 100644 --- a/modeling/models/cl4srec.py +++ b/modeling/models/cl4srec.py @@ -1,27 +1,28 @@ +from models.base import SequentialTorchModel + import torch -from models.base import SequentialTorchModel +class Cl4SRecModel(SequentialTorchModel, config_name='cl4srec'): -class Cl4SRecModel(SequentialTorchModel, config_name="cl4srec"): def __init__( - self, - sequence_prefix, - fst_augmented_sequence_prefix, - snd_augmented_sequence_prefix, - positive_prefix, - negative_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + fst_augmented_sequence_prefix, + snd_augmented_sequence_prefix, + positive_prefix, + negative_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -33,7 +34,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._fst_augmented_sequence_prefix = fst_augmented_sequence_prefix @@ -46,56 +47,51 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - fst_augmented_sequence_prefix=config["fst_augmented_sequence_prefix"], - snd_augmented_sequence_prefix=config["snd_augmented_sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - num_layers=config["num_layers"], - num_heads=config["num_heads"], - embedding_dim=config["embedding_dim"], - dim_feedforward=config["dim_feedforward"], - dropout=config["dropout"], - activation=config["activation"], - layer_norm_eps=config["layer_norm_eps"], - initializer_range=config["initializer_range"], + sequence_prefix=config['sequence_prefix'], + fst_augmented_sequence_prefix=config['fst_augmented_sequence_prefix'], + snd_augmented_sequence_prefix=config['snd_augmented_sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + num_layers=config['num_layers'], + num_heads=config['num_heads'], + embedding_dim=config['embedding_dim'], + dim_feedforward=config['dim_feedforward'], + dropout=config['dropout'], + activation=config['activation'], + layer_norm_eps=config['layer_norm_eps'], + initializer_range=config['initializer_range'] ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) # TODO remove this check - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), self._item_embeddings.weight[labels] + self._item_embeddings(labels), + self._item_embeddings.weight[labels] ) all_fst_aug_sample_events = inputs[ - "{}.ids".format(self._fst_augmented_sequence_prefix) + '{}.ids'.format(self._fst_augmented_sequence_prefix) ] # (all_batch_events) - all_fst_aug_sample_lengths = inputs[ - "{}.length".format(self._fst_augmented_sequence_prefix) - ] # (batch_size) + all_fst_aug_sample_lengths = inputs['{}.length'.format(self._fst_augmented_sequence_prefix)] # (batch_size) fst_aug_embeddings, fst_aug_mask = self._apply_sequential_encoder( all_fst_aug_sample_events, all_fst_aug_sample_lengths ) # (batch_size, fst_aug_seq_len, embedding_dim), (batch_size, fst_aug_seq_len) @@ -104,11 +100,9 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) all_snd_aug_sample_events = inputs[ - "{}.ids".format(self._snd_augmented_sequence_prefix) + '{}.ids'.format(self._snd_augmented_sequence_prefix) ] # (all_batch_events) - all_snd_aug_sample_lengths = inputs[ - "{}.length".format(self._snd_augmented_sequence_prefix) - ] # (batch_size) + all_snd_aug_sample_lengths = inputs['{}.length'.format(self._snd_augmented_sequence_prefix)] # (batch_size) snd_aug_embeddings, snd_aug_mask = self._apply_sequential_encoder( all_snd_aug_sample_events, all_snd_aug_sample_lengths ) # (batch_size, snd_aug_seq_len, embedding_dim), (batch_size, snd_aug_seq_len) @@ -117,23 +111,24 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) return { - "logits": items_logits, - "sequence_representation": last_embeddings, - "fst_aug_sequence_representation": last_fst_aug_embeddings, - "snd_aug_sequence_representation": last_snd_aug_embeddings, + 'logits': items_logits, + 'sequence_representation': last_embeddings, + 'fst_aug_sequence_representation': last_fst_aug_embeddings, + 'snd_aug_sequence_representation': last_snd_aug_embeddings } else: # eval mode - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/duorec.py b/modeling/models/duorec.py index 68f9df33..380a6675 100644 --- a/modeling/models/duorec.py +++ b/modeling/models/duorec.py @@ -1,27 +1,29 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel from utils import create_masked_tensor -class DuoRecModel(SequentialTorchModel, config_name="duorec"): +class DuoRecModel(SequentialTorchModel, config_name='duorec'): + def __init__( - self, - sequence_prefix, - augmented_sequence_prefix, - labels_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, - is_causal=True, + self, + sequence_prefix, + augmented_sequence_prefix, + labels_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02, + is_causal=True ): super().__init__( num_items=num_items, @@ -33,7 +35,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_causal, + is_causal=is_causal ) self._sequence_prefix = sequence_prefix self._augmented_sequence_prefix = augmented_sequence_prefix @@ -47,19 +49,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - augmented_sequence_prefix=config["augmented_sequence_prefix"], - labels_prefix=config["labels_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - num_layers=config["num_layers"], - num_heads=config["num_heads"], - embedding_dim=config["embedding_dim"], - dim_feedforward=config["dim_feedforward"], - dropout=config["dropout"], - activation=config["activation"], - layer_norm_eps=config["layer_norm_eps"], - initializer_range=config["initializer_range"], + sequence_prefix=config['sequence_prefix'], + augmented_sequence_prefix=config['augmented_sequence_prefix'], + labels_prefix=config['labels_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + num_layers=config['num_layers'], + num_heads=config['num_heads'], + embedding_dim=config['embedding_dim'], + dim_feedforward=config['dim_feedforward'], + dropout=config['dropout'], + activation=config['activation'], + layer_norm_eps=config['layer_norm_eps'], + initializer_range=config['initializer_range'] ) # TODO taken from duorec github @@ -75,53 +77,47 @@ def _init_weights(self, module): module.bias.data.zero_() def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode items_logits = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) training_output = { - "logits": items_logits, - "sequence_representation": last_embeddings, + 'logits': items_logits, + 'sequence_representation': last_embeddings } # TODO remove this check - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) assert torch.allclose( - self._item_embeddings(labels), self._item_embeddings.weight[labels] + self._item_embeddings(labels), + self._item_embeddings.weight[labels] ) # Unsupervised Augmentation embeddings_, mask_ = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings_ = self._get_last_embedding( - embeddings_, mask_ - ) # (batch_size, embedding_dim) - training_output["similar_sequence_representation"] = last_embeddings_ - assert not torch.allclose(last_embeddings, last_embeddings_), ( - "Embedding must be different because of dropout" - ) + last_embeddings_ = self._get_last_embedding(embeddings_, mask_) # (batch_size, embedding_dim) + training_output['similar_sequence_representation'] = last_embeddings_ + assert not torch.allclose(last_embeddings, last_embeddings_), \ + 'Embedding must be different because of dropout' # Semantic Similarity all_sample_augmented_events = inputs[ - "{}.ids".format(self._augmented_sequence_prefix) + '{}.ids'.format(self._augmented_sequence_prefix) ] # (all_batch_events) all_sample_augmented_lengths = inputs[ - "{}.length".format(self._augmented_sequence_prefix) + '{}.length'.format(self._augmented_sequence_prefix) ] # (batch_size) augmented_embeddings, augmented_mask = self._apply_sequential_encoder( @@ -130,23 +126,22 @@ def forward(self, inputs): last_augmented_embeddings = self._get_last_embedding( augmented_embeddings, augmented_mask ) # (batch_size, embedding_dim) - training_output["augmented_sequence_representation"] = ( - last_augmented_embeddings - ) + training_output['augmented_sequence_representation'] = last_augmented_embeddings return training_output else: # eval mode - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) - return indices + return indices \ No newline at end of file diff --git a/modeling/models/graph_seq_rec.py b/modeling/models/graph_seq_rec.py index caa7e2e0..b227f184 100644 --- a/modeling/models/graph_seq_rec.py +++ b/modeling/models/graph_seq_rec.py @@ -1,33 +1,35 @@ +from models.base import SequentialTorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn -from models.base import SequentialTorchModel -from utils import DEVICE, create_masked_tensor +class GraphSeqRecModel(SequentialTorchModel, config_name='graph_seq_rec'): -class GraphSeqRecModel(SequentialTorchModel, config_name="graph_seq_rec"): def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - common_graph, - user_graph, - item_graph, - num_hops, - graph_dropout, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - use_ce=False, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + common_graph, + user_graph, + item_graph, + num_hops, + graph_dropout, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + use_ce=False, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -39,7 +41,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -55,34 +57,38 @@ def __init__( self._graph_dropout = graph_dropout self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True + ) self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - common_graph=kwargs["graph"], - user_graph=kwargs["user_graph"], - item_graph=kwargs["item_graph"], - num_hops=config["num_hops"], - graph_dropout=config["graph_dropout"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - use_ce=config.get("use_ce", False), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + common_graph=kwargs['graph'], + user_graph=kwargs['user_graph'], + item_graph=kwargs['item_graph'], + num_hops=config['num_hops'], + graph_dropout=config['graph_dropout'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + use_ce=config.get('use_ce', False), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self, embeddings, graph): @@ -104,45 +110,38 @@ def _apply_graph_encoder(self, embeddings, graph): return embeddings def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - lengths = inputs["{}.length".format(self._sequence_prefix)] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) common_graph_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, graph=self._item_graph + embeddings=self._item_embeddings.weight, + graph=self._item_graph ) # (num_items + 2, embedding_dim) - embeddings = common_graph_embeddings[ - all_sample_events - ] # (all_batch_events, embedding_dim) + embeddings = common_graph_embeddings[all_sample_events] # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -150,52 +149,35 @@ def forward(self, inputs): embeddings[~mask] = 0 if self._is_causal: - causal_mask = ( - torch.tril( - torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1]) - ) - .bool() - .to(DEVICE) - ) # (seq_len, seq_len) + causal_mask = torch.tril(torch.tile(mask.unsqueeze(1), dims=[self._num_heads, seq_len, 1])).bool().to(DEVICE) # (seq_len, seq_len) embeddings = self._encoder( src=embeddings, mask=~causal_mask, ) # (batch_size, seq_len, embedding_dim) else: embeddings = self._encoder( - src=embeddings, src_key_padding_mask=~mask + src=embeddings, + src_key_padding_mask=~mask ) # (batch_size, seq_len, embedding_dim) if self._use_ce: - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items) embeddings += self._bias[None, None, :] # (batch_size, seq_len, num_items) else: - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self.training: # training mode if self._use_ce: - return {"logits": embeddings[mask]} + return {'logits': embeddings[mask]} else: - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -204,27 +186,21 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings } else: # eval mode if self._use_ce: - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items) - - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, num_items) + + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_ids = torch.reshape( candidate_events, - (candidate_lengths.shape[0], candidate_lengths[0]), + (candidate_lengths.shape[0], candidate_lengths[0]) ) # (batch_size, num_candidates) candidate_scores = last_embeddings.gather( dim=1, index=candidate_ids @@ -232,35 +208,34 @@ def forward(self, inputs): else: candidate_scores = last_embeddings # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf else: - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", last_embeddings, candidate_embeddings + 'bd,bnd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf return candidate_scores diff --git a/modeling/models/gru4rec.py b/modeling/models/gru4rec.py index 474743df..927445ac 100644 --- a/modeling/models/gru4rec.py +++ b/modeling/models/gru4rec.py @@ -1,20 +1,22 @@ -import torch -from torch import nn - from models.base import TorchModel + from utils import create_masked_tensor, get_activation_function +import torch +from torch import nn + class GRUModel(TorchModel): + def __init__( - self, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, + self, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5 ): super().__init__() self._num_items = num_items @@ -23,12 +25,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -40,7 +41,7 @@ def __init__( num_layers=num_layers, batch_first=True, dropout=dropout, - bidirectional=False, + bidirectional=False ) self._hidden_to_output_projection = nn.Linear(embedding_dim, num_items) @@ -50,31 +51,27 @@ def _apply_sequential_encoder(self, events, lengths): embeddings = self._item_embeddings(events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=lengths + data=embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) positions_mask = positions < lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=lengths + data=position_embeddings, + lengths=lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) @@ -85,16 +82,14 @@ def _apply_sequential_encoder(self, events, lengths): input=embeddings, lengths=lengths.cpu(), batch_first=True, - enforce_sorted=False, + enforce_sorted=False ) hidden = torch.zeros( - self._num_layers, - batch_size, - self._embedding_dim, + self._num_layers, batch_size, self._embedding_dim, dtype=embeddings.dtype, device=embeddings.device, - requires_grad=True, + requires_grad=True ) # (num_layers, batch_size, embedding_dim) out, hidden = self._encoder(packed_embeddings, hidden) embeddings, embedding_lengths = torch.nn.utils.rnn.pad_packed_sequence( @@ -107,20 +102,21 @@ def _apply_sequential_encoder(self, events, lengths): return embeddings, mask -class GRU4RecModel(GRUModel, config_name="gru4rec"): +class GRU4RecModel(GRUModel, config_name='gru4rec'): + def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_layers, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_layers, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -129,7 +125,7 @@ def __init__( num_layers=num_layers, dropout=dropout, activation=activation, - layer_norm_eps=layer_norm_eps, + layer_norm_eps=layer_norm_eps ) self._sequence_prefix = sequence_prefix @@ -140,42 +136,35 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - activation=config.get("activation", "tanh"), - layer_norm_eps=config.get("layer_norm_eps", 1e-5), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + activation=config.get('activation', 'tanh'), + layer_norm_eps=config.get('layer_norm_eps', 1e-5), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( - events=all_sample_events, lengths=all_sample_lengths + events=all_sample_events, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) (batch_size, seq_len) if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) sample_end_idx = torch.cumsum(all_sample_lengths, dim=0) # (batch_size) sample_begin_idx = sample_end_idx - all_sample_lengths # (batch_size) @@ -184,47 +173,44 @@ def forward(self, inputs): sample_begin_idx = sample_begin_idx[:, None] # (batch_size, 1) negative_indices = torch.tile( - torch.arange( - start=0, - end=all_positive_sample_events.shape[0], - device=all_sample_lengths.device, - ).long()[None], - dims=[all_sample_lengths.shape[0], 1], + torch.arange(start=0, end=all_positive_sample_events.shape[0], device=all_sample_lengths.device).long()[None], + dims=[all_sample_lengths.shape[0], 1] ) # (batch_size, all_batch_events) - negative_mask = (negative_indices >= sample_begin_idx) & ( - negative_indices < sample_end_idx - ) + negative_mask = (negative_indices >= sample_begin_idx) & (negative_indices < sample_end_idx) negative_mask = torch.repeat_interleave( negative_mask, all_sample_lengths, dim=0 ) negative_scores = torch.einsum( - "ad,bd->ab", + 'ad,bd->ab', all_sample_embeddings, - self._item_embeddings(all_sample_events), + self._item_embeddings(all_sample_events) ) # (all_batch_events, all_batch_events) - + positive_scores = torch.einsum( - "ad,ad->a", all_sample_embeddings, all_positive_sample_embeddings + 'ad,ad->a', + all_sample_embeddings, + all_positive_sample_embeddings ) # (all_batch_events) return { - "positive_scores": positive_scores[..., None], - "negative_scores": negative_scores, + 'positive_scores': positive_scores[..., None], + 'negative_scores': negative_scores, } else: # eval mode - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/gtorec.py b/modeling/models/gtorec.py index d30e4616..dc29435f 100644 --- a/modeling/models/gtorec.py +++ b/modeling/models/gtorec.py @@ -1,39 +1,40 @@ +from models.base import SequentialTorchModel, TorchModel + +from utils import create_masked_tensor, get_activation_function + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import SequentialTorchModel, TorchModel -from utils import create_masked_tensor, get_activation_function - -class GTOModel(SequentialTorchModel, config_name="gtorec"): +class GTOModel(SequentialTorchModel, config_name='gtorec'): def __init__( - self, - # sequential params - sequence_prefix, # =item_prefix - positive_prefix, - negative_prefix, - candidate_prefix, - source_domain, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - # graph params - user_prefix, - graph, - graph_embedding_dim, - graph_num_layers, - # params with default values - dropout=0.0, - graph_dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, - norm_first=True, + self, + # sequential params + sequence_prefix, # =item_prefix + positive_prefix, + negative_prefix, + candidate_prefix, + source_domain, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + # graph params + user_prefix, + graph, + graph_embedding_dim, + graph_num_layers, + # params with default values + dropout=0.0, + graph_dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02, + norm_first=True ): super().__init__( num_items=num_items, @@ -45,9 +46,9 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) - # sequential part + # sequential part self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._negative_prefix = negative_prefix @@ -55,9 +56,13 @@ def __init__( self._source_domain = source_domain self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim + ) + self._bias = nn.Parameter( + data=torch.zeros(num_items + 2), + requires_grad=True ) - self._bias = nn.Parameter(data=torch.zeros(num_items + 2), requires_grad=True) # graph part self._user_prefix = user_prefix @@ -68,13 +73,15 @@ def __init__( self._graph_dropout = graph_dropout self._graph_user_embeddings = nn.Embedding( - num_embeddings=num_users + 2, embedding_dim=self._graph_embedding_dim + num_embeddings=num_users + 2, + embedding_dim=self._graph_embedding_dim ) self._graph_item_embeddings = nn.Embedding( - num_embeddings=num_items + 2, embedding_dim=self._graph_embedding_dim + num_embeddings=num_items + 2, + embedding_dim=self._graph_embedding_dim ) - # cross_attention part + # cross_attention part self._mha = nn.MultiheadAttention( embed_dim=embedding_dim, num_heads=num_heads, @@ -100,39 +107,36 @@ def __init__( in_features=2 * embedding_dim, out_features=embedding_dim, ) - + self._init_weights(initializer_range) @classmethod def create_from_config(cls, config, **kwargs): return cls( # sequential part - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), - norm_first=config.get("norm_first", True), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02), + norm_first=config.get('norm_first', True), # graph part - user_prefix=config["user_prefix"], - num_users=kwargs["num_users"], + user_prefix=config['user_prefix'], + num_users=kwargs['num_users'], graph_embedding_dim=config["graph_embedding_dim"], graph_num_layers=config["graph_num_layers"], - graph_dropout=config.get("graph_dropout", 0.0), + graph_dropout=config.get("graph_dropout", 0.0) ) - + def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), - dim=0, - ) + ego_embeddings = torch.cat((self._graph_user_embeddings.weight, self._graph_item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._graph_dropout > 0: # drop some edges @@ -163,8 +167,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (batch_size) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (batch_size) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (batch_size, emb_dim) ego_embeddings = ego_embeddings(ids) # (batch_size, emb_dim) @@ -175,15 +179,13 @@ def _get_graph_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings assert torch.all(mask == ego_mask) return padded_embeddings, padded_ego_embeddings, mask - + def _ca_block(self, q, k, v, attn_mask=None, key_padding_mask=None): x = self._mha( - q, - k, - v, + q, k, v, attn_mask=attn_mask, key_padding_mask=key_padding_mask, - need_weights=False, + need_weights=False )[0] # (batch_size, seq_len, embedding_dim) return self.dropout1(x) # (batch_size, seq_len, embedding_dim) @@ -193,19 +195,11 @@ def _ff_block(self, x): def forward(self, inputs): # target domain item sequence - all_sample_events_target = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths_target = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events_target = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths_target = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) # source domain item sequence - all_sample_events_source = inputs[ - "{}.{}.ids".format(self._sequence_prefix, self._source_domain) - ] # (all_batch_events) - all_sample_lengths_source = inputs[ - "{}.{}.length".format(self._sequence_prefix, self._source_domain) - ] # (batch_size) + all_sample_events_source = inputs['{}.{}.ids'.format(self._sequence_prefix, self._source_domain)] # (all_batch_events) + all_sample_lengths_source = inputs['{}.{}.length'.format(self._sequence_prefix, self._source_domain)] # (batch_size) # sequential model encoder and target domain items embeddings from sequential model seq_embeddings_target, seq_mask_target = self._apply_sequential_encoder( @@ -213,137 +207,81 @@ def forward(self, inputs): ) # (batch_size, target_seq_len, embedding_dim), (batch_size, target_seq_len) # target domain items encoder for graph model - all_final_user_embeddings_target, all_final_item_embeddings_target = ( - self._apply_graph_encoder( - all_sample_events_target, all_sample_lengths_target - ) - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings_target, all_final_item_embeddings_target = \ + self._apply_graph_encoder(all_sample_events_target, all_sample_lengths_target) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) # source domain items encoder for graph model - all_final_user_embeddings_source, all_final_item_embeddings_source = ( - self._apply_graph_encoder( - all_sample_events_source, all_sample_lengths_source - ) - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - + all_final_user_embeddings_source, all_final_item_embeddings_source = \ + self._apply_graph_encoder(all_sample_events_source, all_sample_lengths_source) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + # target domain items embeddings from graph model - ( - graph_embeddings_target, - graph_item_ego_embeddings_target, - graph_item_mask_target, - ) = self._get_graph_embeddings( - inputs, - self._sequence_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, + graph_embeddings_target, graph_item_ego_embeddings_target, graph_item_mask_target = self._get_graph_embeddings( + inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) - graph_item_embeddings_target = graph_embeddings_target[ - graph_item_mask_target - ] # (batch_size, target_seq_len, embedding_dim) + graph_item_embeddings_target = graph_embeddings_target[graph_item_mask_target] # (batch_size, target_seq_len, embedding_dim) # source domain items embeddings from graph model - ( - graph_embeddings_source, - graph_item_ego_embeddings_source, - graph_item_mask_source, - ) = self._get_graph_embeddings( - inputs, - self._sequence_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, + graph_embeddings_source, graph_item_ego_embeddings_source, graph_item_mask_source = self._get_graph_embeddings( + inputs, self._sequence_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) - graph_item_embeddings_source = graph_embeddings_source[ - graph_item_mask_source - ] # (batch_size, source_seq_len, embedding_dim) - + graph_item_embeddings_source = graph_embeddings_source[graph_item_mask_source] # (batch_size, source_seq_len, embedding_dim) + # embeddings + graph_embeddings_target -> cross-attention # query = embeddings # keys = graph_embeddings_target # values = graph_embeddings_target - if self.norm_first: - graph_embeddings_target = graph_embeddings_target + self.norm1( - self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target, - ) - ) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = graph_embeddings_target + self.norm2( - self._ff_block(graph_embeddings_target) - ) + if self.norm_first: + graph_embeddings_target = graph_embeddings_target + self.norm1(self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target + )) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = graph_embeddings_target + self.norm2(self._ff_block(graph_embeddings_target)) else: - graph_embeddings_target = self.norm1( - graph_embeddings_target - + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_target, - v=graph_embeddings_target, - attn_mask=None, - key_padding_mask=~graph_item_mask_target, - ) - ) # (batch_size, target_seq_len, embedding_dim) - graph_embeddings_target = self.norm2( - graph_embeddings_target + self._ff_block(graph_embeddings_target) - ) + graph_embeddings_target = self.norm1(graph_embeddings_target + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_target, + v=graph_embeddings_target, + attn_mask=None, + key_padding_mask=~graph_item_mask_target + )) # (batch_size, target_seq_len, embedding_dim) + graph_embeddings_target = self.norm2(graph_embeddings_target + self._ff_block(graph_embeddings_target)) # target-target cross-attention result - mha_embeddings_target = torch.cat( - [seq_embeddings_target, graph_embeddings_target], dim=-1 - ) - mha_embeddings_target = self._mha_output_projection( - mha_embeddings_target - ) # (batch_size, target_seq_len, embedding_dim) + mha_embeddings_target = torch.cat([seq_embeddings_target, graph_embeddings_target], dim=-1) + mha_embeddings_target = self._mha_output_projection(mha_embeddings_target) # (batch_size, target_seq_len, embedding_dim) # embeddings + graph_embeddings_source -> cross-attention # query = embeddings # keys = graph_embeddings_source # values = graph_embeddings_source - if self.norm_first: - graph_embeddings_source = graph_embeddings_source + self.norm1( - self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source, - ) - ) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = graph_embeddings_source + self.norm2( - self._ff_block(graph_embeddings_source) - ) + if self.norm_first: + graph_embeddings_source = graph_embeddings_source + self.norm1(self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source + )) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = graph_embeddings_source + self.norm2(self._ff_block(graph_embeddings_source)) else: - graph_embeddings_source = self.norm1( - graph_embeddings_source - + self._ca_block( - q=seq_embeddings_target, - k=graph_embeddings_source, - v=graph_embeddings_source, - attn_mask=None, - key_padding_mask=~graph_item_mask_source, - ) - ) # (batch_size, seq_len, embedding_dim) - graph_embeddings_source = self.norm2( - graph_embeddings_source + self._ff_block(graph_embeddings_source) - ) + graph_embeddings_source = self.norm1(graph_embeddings_source + self._ca_block( + q=seq_embeddings_target, + k=graph_embeddings_source, + v=graph_embeddings_source, + attn_mask=None, + key_padding_mask=~graph_item_mask_source + )) # (batch_size, seq_len, embedding_dim) + graph_embeddings_source = self.norm2(graph_embeddings_source + self._ff_block(graph_embeddings_source)) # source-target cross-attention result - mha_embeddings_source = torch.cat( - [seq_embeddings_target, graph_embeddings_source], dim=-1 - ) - mha_embeddings_source = self._mha_output_projection( - mha_embeddings_source - ) # (batch_size, seq_len, embedding_dim) + mha_embeddings_source = torch.cat([seq_embeddings_target, graph_embeddings_source], dim=-1) + mha_embeddings_source = self._mha_output_projection(mha_embeddings_source) # (batch_size, seq_len, embedding_dim) if self.training: # training mode # sequential part - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = seq_embeddings_target[ - seq_mask_target - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = seq_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -352,150 +290,96 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) # graph part, target domain item embeddings - graph_positive_embeddings_target, _, graph_positive_mask_target = ( - self._get_graph_embeddings( - inputs, - self._positive_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, - ) + graph_positive_embeddings_target, _, graph_positive_mask_target = self._get_graph_embeddings( + inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) - graph_negative_embeddings_target, _, graph_negative_mask_target = ( - self._get_graph_embeddings( - inputs, - self._negative_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_target, - ) + graph_negative_embeddings_target, _, graph_negative_mask_target = self._get_graph_embeddings( + inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_target ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_target = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_target, - graph_positive_embeddings_target, + 'bd,bsd->bs', graph_item_embeddings_target, graph_positive_embeddings_target ) # (batch_size, target_seq_len) graph_negative_scores_target = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_target, - graph_negative_embeddings_target, + 'bd,bsd->bs', graph_item_embeddings_target, graph_negative_embeddings_target ) # (batch_size, target_seq_len) - graph_positive_scores_target = graph_positive_scores_target[ - graph_positive_mask_target - ] # (all_batch_events) - graph_negative_scores_target = graph_negative_scores_target[ - graph_negative_mask_target - ] # (all_batch_events) + graph_positive_scores_target = graph_positive_scores_target[graph_positive_mask_target] # (all_batch_events) + graph_negative_scores_target = graph_negative_scores_target[graph_negative_mask_target] # (all_batch_events) # graph part, source domain item embeddings - graph_positive_embeddings_source, _, graph_positive_mask_source = ( - self._get_graph_embeddings( - inputs, - self._positive_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, - ) + graph_positive_embeddings_source, _, graph_positive_mask_source = self._get_graph_embeddings( + inputs, self._positive_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) - graph_negative_embeddings_source, _, graph_negative_mask_source = ( - self._get_graph_embeddings( - inputs, - self._negative_prefix, - self._graph_item_embeddings, - all_final_item_embeddings_source, - ) + graph_negative_embeddings_source, _, graph_negative_mask_source = self._get_graph_embeddings( + inputs, self._negative_prefix, self._graph_item_embeddings, all_final_item_embeddings_source ) # b - batch_size, s - seq_len, d - embedding_dim graph_positive_scores_source = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_source, - graph_positive_embeddings_source, + 'bd,bsd->bs', graph_item_embeddings_source, graph_positive_embeddings_source ) # (batch_size, source_seq_len) graph_negative_scores_source = torch.einsum( - "bd,bsd->bs", - graph_item_embeddings_source, - graph_negative_embeddings_source, + 'bd,bsd->bs', graph_item_embeddings_source, graph_negative_embeddings_source ) # (batch_size, source_seq_len) - graph_positive_scores_source = graph_positive_scores_source[ - graph_positive_mask_source - ] # (all_batch_events) - graph_negative_scores_source = graph_negative_scores_source[ - graph_negative_mask_source - ] # (all_batch_events) + graph_positive_scores_source = graph_positive_scores_source[graph_positive_mask_source] # (all_batch_events) + graph_negative_scores_source = graph_negative_scores_source[graph_negative_mask_source] # (all_batch_events) # mha part - mha_all_sample_embeddings_target = mha_embeddings_target[ - seq_mask_target - ] # (all_batch_events, embedding_dim) - mha_all_sample_embeddings_source = mha_embeddings_source[ - seq_mask_target - ] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_target = mha_embeddings_target[seq_mask_target] # (all_batch_events, embedding_dim) + mha_all_sample_embeddings_source = mha_embeddings_source[seq_mask_target] # (all_batch_events, embedding_dim) return { # sequential part # target domain item embeddings - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings, + # graph part # target domain item embeddings - "graph_positive_embeddings_target": graph_positive_embeddings_target[ - graph_positive_mask_target - ], - "graph_negative_embeddings_target": graph_negative_embeddings_target[ - graph_negative_mask_target - ], - "graph_positive_scores_target": graph_positive_scores_target, - "graph_negative_scores_target": graph_negative_scores_target, - "graph_item_embeddings_target": graph_item_embeddings_target, + 'graph_positive_embeddings_target': graph_positive_embeddings_target[graph_positive_mask_target], + 'graph_negative_embeddings_target': graph_negative_embeddings_target[graph_negative_mask_target], + 'graph_positive_scores_target': graph_positive_scores_target, + 'graph_negative_scores_target': graph_negative_scores_target, + 'graph_item_embeddings_target': graph_item_embeddings_target, # source domain item embeddings - "graph_positive_embeddings_source": graph_positive_embeddings_source[ - graph_positive_mask_source - ], - "graph_negative_embeddings_source": graph_negative_embeddings_source[ - graph_negative_mask_source - ], - "graph_positive_scores_source": graph_positive_scores_source, - "graph_negative_scores_source": graph_negative_scores_source, - "graph_item_embeddings_source": graph_item_embeddings_source, + 'graph_positive_embeddings_source': graph_positive_embeddings_source[graph_positive_mask_source], + 'graph_negative_embeddings_source': graph_negative_embeddings_source[graph_negative_mask_source], + 'graph_positive_scores_source': graph_positive_scores_source, + 'graph_negative_scores_source': graph_negative_scores_source, + 'graph_item_embeddings_source': graph_item_embeddings_source, + # mha part # target domain item embeddings - "mha_embeddings_target": mha_all_sample_embeddings_target, - "mha_positive_embeddings_target": all_positive_sample_embeddings, - "mha_negative_embeddings_target": all_negative_sample_embeddings, + 'mha_embeddings_target': mha_all_sample_embeddings_target, + 'mha_positive_embeddings_target': all_positive_sample_embeddings, + 'mha_negative_embeddings_target': all_negative_sample_embeddings, # source domain item embeddings - "mha_embeddings_source": mha_all_sample_embeddings_source, - "mha_positive_embeddings_source": all_positive_sample_embeddings, - "mha_negative_embeddings_source": all_negative_sample_embeddings, + 'mha_embeddings_source': mha_all_sample_embeddings_source, + 'mha_positive_embeddings_source': all_positive_sample_embeddings, + 'mha_negative_embeddings_source': all_negative_sample_embeddings } else: # eval mode - seq_last_embeddings_target = self._get_last_embedding( - seq_embeddings_target, seq_mask_target - ) # (batch_size, embedding_dim) - mha_last_embeddings_target = self._get_last_embedding( - mha_embeddings_target, seq_mask_target - ) # (batch_size, embedding_dim) - mha_last_embeddings_source = self._get_last_embedding( - mha_embeddings_source, seq_mask_target - ) # (batch_size, embedding_dim) + seq_last_embeddings_target = self._get_last_embedding(seq_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) + mha_last_embeddings_target = self._get_last_embedding(mha_embeddings_target, seq_mask_target) # (batch_size, embedding_dim) + mha_last_embeddings_source = self._get_last_embedding(mha_embeddings_source, seq_mask_target) # (batch_size, embedding_dim) aggregated_last_embeddings = torch.maximum( - seq_last_embeddings_target, - torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source), + seq_last_embeddings_target, + torch.maximum(mha_last_embeddings_target, mha_last_embeddings_source) ) # (batch_size, embedding_dim) # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", aggregated_last_embeddings, self._item_embeddings.weight + 'bd,nd->bn', + aggregated_last_embeddings, + self._item_embeddings.weight ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) batch_size = candidate_lengths.shape[0] num_candidates = candidate_lengths[0] @@ -503,11 +387,12 @@ def forward(self, inputs): candidate_scores = torch.gather( input=candidate_scores, dim=1, - index=torch.reshape(candidate_events, [batch_size, num_candidates]), + index=torch.reshape(candidate_events, [batch_size, num_candidates]) ) # (batch_size, num_candidates) _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20), (batch_size, 20) return indices diff --git a/modeling/models/lightgcn.py b/modeling/models/lightgcn.py index 19d79b80..79e5f788 100644 --- a/modeling/models/lightgcn.py +++ b/modeling/models/lightgcn.py @@ -1,23 +1,25 @@ +from models.base import TorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import TorchModel -from utils import DEVICE, create_masked_tensor +class LightGCNModel(TorchModel, config_name='light_gcn'): -class LightGCNModel(TorchModel, config_name="light_gcn"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02, + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02 ): super().__init__() self._user_prefix = user_prefix @@ -30,11 +32,13 @@ def __init__( self._dropout_rate = dropout self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -42,21 +46,19 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - graph=kwargs["graph"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + graph=kwargs['graph'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ) + ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -87,8 +89,8 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (all_batch_events) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -106,9 +108,8 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = ( - self._apply_graph_encoder() - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = \ + self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings @@ -116,69 +117,63 @@ def forward(self, inputs): user_embeddings = user_embeddings[user_mask] # (batch_size, embedding_dim) if self.training: # training mode - positive_item_ids = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - positive_item_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) + positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( - [batch_size, 1] - ) - < positive_item_lengths[:, None] - ) # (batch_size, max_seq_len) - - positive_user_ids = ( - torch.arange(batch_size, device=DEVICE)[None] - .tile([max_sequence_length, 1]) - .T - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) + + positive_user_ids = torch.arange( + batch_size, + device=DEVICE + )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[ - positive_user_ids - ] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - "ad,nd->an", user_embeddings, all_final_item_embeddings + 'ad,nd->an', + user_embeddings, + all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros( - self._num_items + 2, dtype=torch.bool, device=DEVICE - ) # (num_items + 2) + negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, dim=1, index=positive_item_ids[..., None] + input=all_scores, + dim=1, + index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float(), + src=torch.ones_like(positive_item_ids[..., None]).float() ) # (all_batch_items, num_items + 2) return { - "positive_scores": positive_scores, - "negative_scores": all_scores, - "item_embeddings": torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ), + 'positive_scores': positive_scores, + 'negative_scores': all_scores, + 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) } else: # eval mode candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, all_final_item_embeddings + 'bd,nd->bn', + user_embeddings, + all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/mclsr.py b/modeling/models/mclsr.py index c7fefd3c..8f78cda4 100644 --- a/modeling/models/mclsr.py +++ b/modeling/models/mclsr.py @@ -1,30 +1,32 @@ +from models.base import TorchModel + import torch import torch.nn as nn -from models.base import TorchModel from utils import create_masked_tensor -class MCLSRModel(TorchModel, config_name="mclsr"): +class MCLSRModel(TorchModel, config_name='mclsr'): + def __init__( - self, - sequence_prefix, - user_prefix, - labels_prefix, - candidate_prefix, - num_users, - num_items, - max_sequence_length, - embedding_dim, - num_graph_layers, - common_graph, - user_graph, - item_graph, - dropout=0.0, - layer_norm_eps=1e-5, - graph_dropout=0.0, - alpha=0.5, - initializer_range=0.02, + self, + sequence_prefix, + user_prefix, + labels_prefix, + candidate_prefix, + num_users, + num_items, + max_sequence_length, + embedding_dim, + num_graph_layers, + common_graph, + user_graph, + item_graph, + dropout=0.0, + layer_norm_eps=1e-5, + graph_dropout=0.0, + alpha=0.5, + initializer_range=0.02 ): super().__init__() self._sequence_prefix = sequence_prefix @@ -48,17 +50,16 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._user_embeddings = nn.Embedding( num_embeddings=num_users + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -66,43 +67,39 @@ def __init__( # Current interest learning self._current_interest_learning_encoder = nn.Sequential( - nn.Linear( - in_features=embedding_dim, out_features=4 * embedding_dim, bias=False - ), + nn.Linear(in_features=embedding_dim, out_features=4 * embedding_dim, bias=False), nn.Tanh(), - nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False), + nn.Linear(in_features=4 * embedding_dim, out_features=1, bias=False) ) # General interest learning self._general_interest_learning_encoder = nn.Sequential( - nn.Linear( - in_features=embedding_dim, out_features=embedding_dim, bias=False - ), - nn.Tanh(), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=False), + nn.Tanh() ) # Cross-view contrastive learning self._sequential_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._graph_projector = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._user_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._item_projection = nn.Sequential( nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), nn.ELU(), - nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True), + nn.Linear(in_features=embedding_dim, out_features=embedding_dim, bias=True) ) self._init_weights(initializer_range) @@ -110,22 +107,22 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - user_prefix=config["user_prefix"], - labels_prefix=config["labels_prefix"], - candidate_prefix=config["candidate_prefix"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_graph_layers=config["num_graph_layers"], - common_graph=kwargs["graph"], - user_graph=kwargs["user_graph"], - item_graph=kwargs["item_graph"], - dropout=config.get("dropout", 0.0), - layer_norm_eps=config.get("layer_norm_eps", 1e-5), - graph_dropout=config.get("graph_dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + user_prefix=config['user_prefix'], + labels_prefix=config['labels_prefix'], + candidate_prefix=config['candidate_prefix'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_graph_layers=config['num_graph_layers'], + common_graph=kwargs['graph'], + user_graph=kwargs['user_graph'], + item_graph=kwargs['item_graph'], + dropout=config.get('dropout', 0.0), + layer_norm_eps=config.get('layer_norm_eps', 1e-5), + graph_dropout=config.get('graph_dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _apply_graph_encoder(self, embeddings, graph, use_mean=False): @@ -152,19 +149,14 @@ def _apply_graph_encoder(self, embeddings, graph, use_mean=False): return all_embeddings[-1] def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) - user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) - - embeddings = self._item_embeddings( - all_sample_events - ) # (all_batch_events, embedding_dim) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) + user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) + + embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=all_sample_lengths + data=embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) batch_size = mask.shape[0] @@ -172,108 +164,88 @@ def forward(self, inputs): # Current interest learning # 1) get embeddings with positions - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) - positions_mask = ( - positions < all_sample_lengths[:, None] - ) # (batch_size, max_seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=all_sample_lengths + data=position_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - positioned_embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._layernorm( - positioned_embeddings - ) # (batch_size, seq_len, embedding_dim) - positioned_embeddings = self._dropout( - positioned_embeddings - ) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._layernorm(positioned_embeddings) # (batch_size, seq_len, embedding_dim) + positioned_embeddings = self._dropout(positioned_embeddings) # (batch_size, seq_len, embedding_dim) positioned_embeddings[~mask] = 0 sequential_attention_matrix = self._current_interest_learning_encoder( positioned_embeddings ).squeeze() # (batch_size, seq_len) sequential_attention_matrix[~mask] = -torch.inf - sequential_attention_matrix = torch.softmax( - sequential_attention_matrix, dim=1 - ) # (batch_size, seq_len) + sequential_attention_matrix = torch.softmax(sequential_attention_matrix, dim=1) # (batch_size, seq_len) sequential_representation = torch.einsum( - "bs,bsd->bd", sequential_attention_matrix, embeddings + 'bs,bsd->bd', sequential_attention_matrix, embeddings ) # (batch_size, embedding_dim) if self.training: # training mode # General interest learning all_embeddings = torch.cat( - [self._user_embeddings.weight, self._item_embeddings.weight], dim=0 + [self._user_embeddings.weight, self._item_embeddings.weight], + dim=0 ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_embeddings = self._apply_graph_encoder( - embeddings=all_embeddings, graph=self._graph + embeddings=all_embeddings, + graph=self._graph ) # (num_users + 2 + num_items + 2, embedding_dim) common_graph_user_embeddings, common_graph_item_embeddings = torch.split( - common_graph_embeddings, [self._num_users + 2, self._num_items + 2] + common_graph_embeddings, + [self._num_users + 2, self._num_items + 2] ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) - common_graph_user_embeddings = common_graph_user_embeddings[ - user_ids - ] # (batch_size, embedding_dim) - common_graph_item_embeddings = common_graph_item_embeddings[ - all_sample_events - ] # (all_batch_events, embedding_dim) + common_graph_user_embeddings = common_graph_user_embeddings[user_ids] # (batch_size, embedding_dim) + common_graph_item_embeddings = common_graph_item_embeddings[all_sample_events] # (all_batch_events, embedding_dim) common_graph_item_embeddings, _ = create_masked_tensor( - data=common_graph_item_embeddings, lengths=all_sample_lengths + data=common_graph_item_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) graph_attention_matrix = torch.einsum( - "bd,bsd->bs", + 'bd,bsd->bs', self._general_interest_learning_encoder(common_graph_user_embeddings), - common_graph_item_embeddings, + common_graph_item_embeddings ) # (batch_size, seq_len) graph_attention_matrix[~mask] = -torch.inf - graph_attention_matrix = torch.softmax( - graph_attention_matrix, dim=1 - ) # (batch_size, seq_len) + graph_attention_matrix = torch.softmax(graph_attention_matrix, dim=1) # (batch_size, seq_len) graph_representation = torch.einsum( - "bs,bsd->bd", graph_attention_matrix, common_graph_item_embeddings + 'bs,bsd->bd', graph_attention_matrix, common_graph_item_embeddings ) # (batch_size, embedding_dim) # Get final representation - combined_representation = ( - self._alpha * sequential_representation - + (1 - self._alpha) * graph_representation - ) # (batch_size, embedding_dim) + combined_representation = \ + self._alpha * sequential_representation + \ + (1 - self._alpha) * graph_representation # (batch_size, embedding_dim) - labels = inputs["{}.ids".format(self._labels_prefix)] # (batch_size) - labels_embeddings = self._item_embeddings( - labels - ) # (batch_size, embedding_dim) + labels = inputs['{}.ids'.format(self._labels_prefix)] # (batch_size) + labels_embeddings = self._item_embeddings(labels) # (batch_size, embedding_dim) # Cross-view contrastive learning sequential_representation = self._sequential_projector( - sequential_representation - ) # (batch_size, embedding_dim) - graph_representation = self._graph_projector( - graph_representation - ) # (batch_size, embedding_dim) + sequential_representation) # (batch_size, embedding_dim) + graph_representation = self._graph_projector(graph_representation) # (batch_size, embedding_dim) # Feature-level Contrastive Learning user_graph_user_embeddings = self._apply_graph_encoder( - embeddings=self._user_embeddings.weight, graph=self._user_graph + embeddings=self._user_embeddings.weight, + graph=self._user_graph ) # (num_users + 2, embedding_dim) user_graph_user_embeddings = torch.gather( user_graph_user_embeddings, dim=0, - index=user_ids[..., None].tile(1, self._embedding_dim), + index=user_ids[..., None].tile(1, self._embedding_dim) ) # (batch_size, embedding_dim) user_graph_user_embeddings = self._user_projection( @@ -284,12 +256,13 @@ def forward(self, inputs): ) # (batch_size, embedding_dim) item_graph_item_embeddings = self._apply_graph_encoder( - embeddings=self._item_embeddings.weight, graph=self._item_graph + embeddings=self._item_embeddings.weight, + graph=self._item_graph ) # (num_items + 2, embedding_dim) item_graph_item_embeddings = torch.gather( item_graph_item_embeddings, dim=0, - index=all_sample_events[..., None].tile(1, self._embedding_dim), + index=all_sample_events[..., None].tile(1, self._embedding_dim) ) # (all_sample_events, embedding_dim) item_graph_item_embeddings = self._item_projection( @@ -301,50 +274,51 @@ def forward(self, inputs): return { # Downstream task - "combined_representation": combined_representation, - "label_representation": labels_embeddings, + 'combined_representation': combined_representation, + 'label_representation': labels_embeddings, + # Interest-level Contrastive Learning - "sequential_representation": sequential_representation, - "graph_representation": graph_representation, + 'sequential_representation': sequential_representation, + 'graph_representation': graph_representation, + # Feature-level Contrastive Learning (users) - "user_graph_user_embeddings": user_graph_user_embeddings, - "common_graph_user_embeddings": common_graph_user_embeddings, + 'user_graph_user_embeddings': user_graph_user_embeddings, + 'common_graph_user_embeddings': common_graph_user_embeddings, + # Feature-level Contrastive Learning (items) - "item_graph_item_embeddings": item_graph_item_embeddings, - "common_graph_item_embeddings": common_graph_item_embeddings, + 'item_graph_item_embeddings': item_graph_item_embeddings, + 'common_graph_item_embeddings': common_graph_item_embeddings } else: # eval mode - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) - - candidate_embeddings = self._item_embeddings( - candidate_events - ) # (all_batch_candidates, embedding_dim) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) + + candidate_embeddings = self._item_embeddings(candidate_events) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", sequential_representation, candidate_embeddings + 'bd,bnd->bn', + sequential_representation, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", sequential_representation, candidate_embeddings + 'bd,nd->bn', + sequential_representation, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf values, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 100), (batch_size, 100) return indices diff --git a/modeling/models/mrgsrec.py b/modeling/models/mrgsrec.py index f53861a0..488c580a 100644 --- a/modeling/models/mrgsrec.py +++ b/modeling/models/mrgsrec.py @@ -1,29 +1,32 @@ -import torch -import torch.nn as nn from torch.nn import MultiheadAttention from models.base import TorchModel + from utils import create_masked_tensor, get_activation_function +import torch +import torch.nn as nn + + +class MRGSRecModel(TorchModel, config_name='mrgsrec'): -class MRGSRecModel(TorchModel, config_name="mrgsrec"): def __init__( - self, - sequence_prefix, - user_prefix, - positive_prefix, - negative_prefix, - candidate_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + user_prefix, + positive_prefix, + negative_prefix, + candidate_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__() self._sequence_prefix = sequence_prefix @@ -37,12 +40,11 @@ def __init__( self._item_embeddings = nn.Embedding( num_embeddings=num_items + 2, # add zero embedding + mask embedding - embedding_dim=embedding_dim, + embedding_dim=embedding_dim ) self._position_embeddings = nn.Embedding( - num_embeddings=max_sequence_length - + 1, # in order to include `max_sequence_length` value - embedding_dim=embedding_dim, + num_embeddings=max_sequence_length + 1, # in order to include `max_sequence_length` value + embedding_dim=embedding_dim ) self._layernorm = nn.LayerNorm(embedding_dim, eps=layer_norm_eps) @@ -55,69 +57,60 @@ def __init__( dropout=dropout, activation=get_activation_function(activation), layer_norm_eps=layer_norm_eps, - batch_first=True, + batch_first=True ) self._encoder = nn.TransformerEncoder(transformer_encoder_layer, num_layers) @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) - embeddings = self._item_embeddings( - all_sample_events - ) # (all_batch_events, embedding_dim) + embeddings = self._item_embeddings(all_sample_events) # (all_batch_events, embedding_dim) embeddings, mask = create_masked_tensor( - data=embeddings, lengths=all_sample_lengths + data=embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) batch_size = mask.shape[0] seq_len = mask.shape[1] - positions = ( - torch.arange(start=seq_len - 1, end=-1, step=-1, device=mask.device)[None] - .tile([batch_size, 1]) - .long() - ) # (batch_size, seq_len) - positions_mask = ( - positions < all_sample_lengths[:, None] - ) # (batch_size, max_seq_len) + positions = torch.arange( + start=seq_len - 1, end=-1, step=-1, device=mask.device + )[None].tile([batch_size, 1]).long() # (batch_size, seq_len) + positions_mask = positions < all_sample_lengths[:, None] # (batch_size, max_seq_len) positions = positions[positions_mask] # (all_batch_events) - position_embeddings = self._position_embeddings( - positions - ) # (all_batch_events, embedding_dim) + position_embeddings = self._position_embeddings(positions) # (all_batch_events, embedding_dim) position_embeddings, _ = create_masked_tensor( - data=position_embeddings, lengths=all_sample_lengths + data=position_embeddings, + lengths=all_sample_lengths ) # (batch_size, seq_len, embedding_dim) assert torch.allclose(position_embeddings[~mask], embeddings[~mask]) - embeddings = ( - embeddings + position_embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = embeddings + position_embeddings # (batch_size, seq_len, embedding_dim) embeddings = self._layernorm(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = self._dropout(embeddings) # (batch_size, seq_len, embedding_dim) embeddings[~mask] = 0 + + + diff --git a/modeling/models/ngcf.py b/modeling/models/ngcf.py index 8df917eb..2fcc9081 100644 --- a/modeling/models/ngcf.py +++ b/modeling/models/ngcf.py @@ -1,23 +1,25 @@ +from models.base import TorchModel + +from utils import create_masked_tensor, DEVICE + import torch import torch.nn as nn import torch.nn.functional as F -from models.base import TorchModel -from utils import DEVICE, create_masked_tensor +class NgcfModel(TorchModel, config_name='ngcf'): -class NgcfModel(TorchModel, config_name="ngcf"): def __init__( - self, - user_prefix, - positive_prefix, - graph, - num_users, - num_items, - embedding_dim, - num_layers, - dropout=0.0, - initializer_range=0.02, + self, + user_prefix, + positive_prefix, + graph, + num_users, + num_items, + embedding_dim, + num_layers, + dropout=0.0, + initializer_range=0.02 ): super().__init__() self._user_prefix = user_prefix @@ -38,11 +40,13 @@ def __init__( self.Bi_Linear_list.append(nn.Linear(embedding_dim, embedding_dim)) self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -50,20 +54,20 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - graph=kwargs["graph"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - num_layers=config["num_layers"], - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + graph=kwargs['graph'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + num_layers=config['num_layers'], + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): - ids = inputs["{}.ids".format(prefix)] # (all_batch_events) - lengths = inputs["{}.length".format(prefix)] # (batch_size) + ids = inputs['{}.ids'.format(prefix)] # (all_batch_events) + lengths = inputs['{}.length'.format(prefix)] # (batch_size) final_embeddings = final_embeddings[ids] # (all_batch_events, embedding_dim) ego_embeddings = ego_embeddings(ids) # (all_batch_events, embedding_dim) @@ -81,9 +85,7 @@ def _get_embeddings(self, inputs, prefix, ego_embeddings, final_embeddings): return padded_embeddings, padded_ego_embeddings, mask def _apply_graph_encoder(self): - ego_embeddings = torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ) + ego_embeddings = torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) all_embeddings = [ego_embeddings] if self._dropout_rate > 0: # drop some edges @@ -120,82 +122,73 @@ def _apply_graph_encoder(self): return user_final_embeddings, item_final_embeddings def forward(self, inputs): - all_final_user_embeddings, all_final_item_embeddings = ( - self._apply_graph_encoder() - ) # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) + all_final_user_embeddings, all_final_item_embeddings = \ + self._apply_graph_encoder() # (num_users + 2, embedding_dim), (num_items + 2, embedding_dim) user_embeddings, user_ego_embeddings, user_mask = self._get_embeddings( inputs, self._user_prefix, self._user_embeddings, all_final_user_embeddings ) - user_embeddings = user_embeddings[ - user_mask - ] # (all_batch_events, embedding_dim) + user_embeddings = user_embeddings[user_mask] # (all_batch_events, embedding_dim) if self.training: # training mode - positive_item_ids = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - positive_item_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) + positive_item_ids = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + positive_item_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) batch_size = positive_item_lengths.shape[0] max_sequence_length = positive_item_lengths.max().item() - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile( - [batch_size, 1] - ) - < positive_item_lengths[:, None] - ) # (batch_size, max_seq_len) - - positive_user_ids = ( - torch.arange(batch_size, device=DEVICE)[None] - .tile([max_sequence_length, 1]) - .T - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < positive_item_lengths[:, None] # (batch_size, max_seq_len) + + positive_user_ids = torch.arange( + batch_size, + device=DEVICE + )[None].tile([max_sequence_length, 1]).T # (batch_size, max_seq_len) positive_user_ids = positive_user_ids[mask] # (all_batch_items) - user_embeddings = user_embeddings[ - positive_user_ids - ] # (all_batch_items, embedding_dim) + user_embeddings = user_embeddings[positive_user_ids] # (all_batch_items, embedding_dim) all_scores = torch.einsum( - "ad,nd->an", user_embeddings, all_final_item_embeddings + 'ad,nd->an', + user_embeddings, + all_final_item_embeddings ) # (all_batch_items, num_items + 2) - negative_mask = torch.zeros( - self._num_items + 2, dtype=torch.bool, device=DEVICE - ) # (num_items + 2) + negative_mask = torch.zeros(self._num_items + 2, dtype=torch.bool, device=DEVICE) # (num_items + 2) negative_mask[positive_item_ids] = 1 positive_scores = torch.gather( - input=all_scores, dim=1, index=positive_item_ids[..., None] + input=all_scores, + dim=1, + index=positive_item_ids[..., None] ) # (all_batch_items, 1) all_scores = torch.scatter_add( input=all_scores, dim=1, index=positive_item_ids[..., None], - src=torch.ones_like(positive_item_ids[..., None]).float(), + src=torch.ones_like(positive_item_ids[..., None]).float() ) # (all_batch_items, num_items + 2) return { - "positive_scores": positive_scores, - "negative_scores": all_scores, - "item_embeddings": torch.cat( - (self._user_embeddings.weight, self._item_embeddings.weight), dim=0 - ), + 'positive_scores': positive_scores, + 'negative_scores': all_scores, + 'item_embeddings': torch.cat((self._user_embeddings.weight, self._item_embeddings.weight), dim=0) } else: # eval mode # b - batch_size, n - num_candidates, d - embedding_dim candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, all_final_item_embeddings + 'bd,nd->bn', + user_embeddings, + all_final_item_embeddings ) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pop.py b/modeling/models/pop.py index ddf26881..bb0b6774 100644 --- a/modeling/models/pop.py +++ b/modeling/models/pop.py @@ -1,10 +1,16 @@ +from models.base import BaseModel + import torch -from models.base import BaseModel +class PopModel(BaseModel, config_name='pop'): -class PopModel(BaseModel, config_name="pop"): - def __init__(self, label_prefix, counts_prefix, num_items): + def __init__( + self, + label_prefix, + counts_prefix, + num_items + ): self._label_prefix = label_prefix self._counts_prefix = counts_prefix self._num_items = num_items @@ -12,30 +18,26 @@ def __init__(self, label_prefix, counts_prefix, num_items): @classmethod def create_from_config(cls, config, **kwargs): return cls( - label_prefix=config["label_prefix"], - counts_prefix=config["counts_prefix"], - num_items=kwargs["num_items"], + label_prefix=config['label_prefix'], + counts_prefix=config['counts_prefix'], + num_items=kwargs['num_items'] ) def __call__(self, inputs): - candidate_counts = inputs[ - "{}.ids".format(self._counts_prefix) - ] # (all_batch_candidates) - candidate_counts_lengths = inputs[ - "{}.length".format(self._counts_prefix) - ] # (batch_size) + candidate_counts = inputs['{}.ids'.format(self._counts_prefix)] # (all_batch_candidates) + candidate_counts_lengths = inputs['{}.length'.format(self._counts_prefix)] # (batch_size) batch_size = candidate_counts_lengths.shape[0] candidate_scores = torch.reshape( - candidate_counts, shape=(batch_size, self._num_items + 2) + candidate_counts, + shape=(batch_size, self._num_items + 2) ).float() # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[ - :, self._num_items + 1 : - ] = -torch.inf # all not real items-related things + candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_mf.py b/modeling/models/pure_mf.py index dc0b691c..6cbe8dc5 100644 --- a/modeling/models/pure_mf.py +++ b/modeling/models/pure_mf.py @@ -1,20 +1,22 @@ +from models.base import TorchModel + import torch import torch.nn as nn -from models.base import TorchModel from utils import create_masked_tensor -class PureMF(TorchModel, config_name="pure_mf"): +class PureMF(TorchModel, config_name='pure_mf'): + def __init__( - self, - user_prefix, - positive_prefix, - negative_prefix, - num_users, - num_items, - embedding_dim, - initializer_range, + self, + user_prefix, + positive_prefix, + negative_prefix, + num_users, + num_items, + embedding_dim, + initializer_range ): super().__init__() @@ -27,11 +29,13 @@ def __init__( self._embedding_dim = embedding_dim self._user_embeddings = nn.Embedding( - num_embeddings=self._num_users + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_users + 2, + embedding_dim=self._embedding_dim ) self._item_embeddings = nn.Embedding( - num_embeddings=self._num_items + 2, embedding_dim=self._embedding_dim + num_embeddings=self._num_items + 2, + embedding_dim=self._embedding_dim ) self._init_weights(initializer_range) @@ -39,73 +43,54 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - user_prefix=config["user_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - num_users=kwargs["num_users"], - num_items=kwargs["num_items"], - embedding_dim=config["embedding_dim"], - initializer_range=config.get("initializer_range", 0.02), + user_prefix=config['user_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + num_users=kwargs['num_users'], + num_items=kwargs['num_items'], + embedding_dim=config['embedding_dim'], + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - user_ids = inputs["{}.ids".format(self._user_prefix)] # (batch_size) + user_ids = inputs['{}.ids'.format(self._user_prefix)] # (batch_size) user_embeddings = self._user_embeddings(user_ids) # (batch_size, embedding_dim) if self.training: # training mode - all_positive = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_positive_embeddings = self._item_embeddings( - all_positive - ) # (all_batch_events, embedding_dim) - positive_lengths = inputs[ - "{}.length".format(self._positive_prefix) - ] # (batch_size) - - all_negative = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - all_negative_embeddings = self._item_embeddings( - all_negative - ) # (all_batch_events, embedding_dim) - negative_lengths = inputs[ - "{}.length".format(self._negative_prefix) - ] # (batch_size) - - positive_embeddings, positive_mask = create_masked_tensor( - all_positive_embeddings, positive_lengths - ) - negative_embeddings, negative_mask = create_masked_tensor( - all_negative_embeddings, negative_lengths - ) - - positive_scores = torch.einsum( - "bd,bsd->bs", user_embeddings, positive_embeddings - ) # (batch_size, seq_len) - negative_scores = torch.einsum( - "bd,bsd->bs", user_embeddings, negative_embeddings - ) # (batch_size, seq_len) + all_positive = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_positive_embeddings = self._item_embeddings(all_positive) # (all_batch_events, embedding_dim) + positive_lengths = inputs['{}.length'.format(self._positive_prefix)] # (batch_size) + + all_negative = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + all_negative_embeddings = self._item_embeddings(all_negative) # (all_batch_events, embedding_dim) + negative_lengths = inputs['{}.length'.format(self._negative_prefix)] # (batch_size) + + positive_embeddings, positive_mask = create_masked_tensor(all_positive_embeddings, positive_lengths) + negative_embeddings, negative_mask = create_masked_tensor(all_negative_embeddings, negative_lengths) + + positive_scores = torch.einsum('bd,bsd->bs', user_embeddings, positive_embeddings) # (batch_size, seq_len) + negative_scores = torch.einsum('bd,bsd->bs', user_embeddings, negative_embeddings) # (batch_size, seq_len) positive_scores = positive_scores[positive_mask] # (all_batch_events) negative_scores = negative_scores[negative_mask] # (all_batch_events) return { - "positive_scores": positive_scores, - "negative_scores": negative_scores, + 'positive_scores': positive_scores, + 'negative_scores': negative_scores } else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", user_embeddings, candidate_embeddings + 'bd,nd->bn', + user_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/pure_svd.py b/modeling/models/pure_svd.py index fcb55a49..f705543b 100644 --- a/modeling/models/pure_svd.py +++ b/modeling/models/pure_svd.py @@ -1,14 +1,16 @@ from models.base import BaseModel -class SVDModel(BaseModel, config_name="pure_svd"): +class SVDModel(BaseModel, config_name='pure_svd'): + def __init__(self, rank): super().__init__() self._rank = rank - self._method = "PureSVD" + self._method = 'PureSVD' self._factors = {} @property def rank(self): return self._rank + diff --git a/modeling/models/random.py b/modeling/models/random.py index cfa8d5fa..d5fae7c5 100644 --- a/modeling/models/random.py +++ b/modeling/models/random.py @@ -1,31 +1,36 @@ +from models.base import BaseModel + import torch -from models.base import BaseModel +class RandomModel(BaseModel, config_name='random'): -class RandomModel(BaseModel, config_name="random"): - def __init__(self, label_prefix, num_items): + def __init__( + self, + label_prefix, + num_items + ): self._label_prefix = label_prefix self._num_items = num_items @classmethod def create_from_config(cls, config, **kwargs): - return cls(label_prefix=config["label_prefix"], num_items=kwargs["num_items"]) + return cls( + label_prefix=config['label_prefix'], + num_items=kwargs['num_items'] + ) def __call__(self, inputs): - labels_lengths = inputs["{}.length".format(self._label_prefix)] # (batch_size) + labels_lengths = inputs['{}.length'.format(self._label_prefix)] # (batch_size) batch_size = labels_lengths.shape[0] - candidate_scores = torch.rand( - batch_size, self._num_items + 1 - ) # (batch_size, num_items) + candidate_scores = torch.rand(batch_size, self._num_items + 1) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf # zero (padding) token - candidate_scores[ - :, self._num_items + 1 : - ] = -torch.inf # all not real items-related things + candidate_scores[:, self._num_items + 1:] = -torch.inf # all not real items-related things _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index d7d1606e..7e150421 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -1,23 +1,22 @@ import functools +from utils import DEVICE +from models.base import TorchModel -import faiss import torch +import faiss -from models.base import TorchModel -from utils import DEVICE - +class RqVaeModel(TorchModel, config_name='rqvae'): -class RqVaeModel(TorchModel, config_name="rqvae"): def __init__( - self, - train_sampler, - input_dim: int, - hidden_dim: int, - n_iter: int, - codebook_sizes: list[int], - should_init_codebooks, - should_reinit_unused_clusters, - initializer_range, + self, + train_sampler, + input_dim: int, + hidden_dim: int, + n_iter: int, + codebook_sizes: list[int], + should_init_codebooks, + should_reinit_unused_clusters, + initializer_range ): super().__init__() @@ -35,39 +34,35 @@ def __init__( # Default initialization of codebook self.codebooks = torch.nn.ParameterList() - + self.codebook_sizes = codebook_sizes - + for codebook_size in codebook_sizes: cb = torch.FloatTensor(codebook_size, hidden_dim) self.codebooks.append(cb) - + self._init_weights(initializer_range) - + if self.should_init_codebooks: if train_sampler is None: raise AttributeError("Train sampler is None") - - embeddings = torch.stack( - [entry["item.embed"] for entry in train_sampler._dataset] - ) + + embeddings = torch.stack([entry['item.embed'] for entry in train_sampler._dataset]) self.init_codebooks(embeddings) - print("Codebooks initialized with Faiss Kmeans") + print('Codebooks initialized with Faiss Kmeans') self.should_init_codebooks = False @classmethod def create_from_config(cls, config, **kwargs): return cls( - train_sampler=kwargs.get("train_sampler"), - input_dim=config["embedding_dim"], - hidden_dim=config["hidden_dim"], - n_iter=config["n_iter"], - codebook_sizes=config["codebook_sizes"], - should_init_codebooks=config.get("should_init_codebooks", False), - should_reinit_unused_clusters=config.get( - "should_reinit_unused_clusters", False - ), - initializer_range=config.get("initializer_range", 0.02), + train_sampler=kwargs.get('train_sampler'), + input_dim=config['embedding_dim'], + hidden_dim=config['hidden_dim'], + n_iter=config['n_iter'], + codebook_sizes=config['codebook_sizes'], + should_init_codebooks=config.get('should_init_codebooks', False), + should_reinit_unused_clusters=config.get('should_reinit_unused_clusters', False), + initializer_range=config.get('initializer_range', 0.02) ) def make_encoding_tower(self, d1: int, d2: int): @@ -107,21 +102,21 @@ def reinit_unused_clusters(remainder, codebook, codebook_indices): is_used[unique_indices] = True rand_input = torch.randint(0, remainder.shape[0], ((~is_used).sum(),)) codebook[~is_used] = remainder[rand_input] - + def train_pass(self, embeddings): latent_vector = self.encoder(embeddings) latent_restored = 0 - + num_unique_clusters = [] remainder = latent_vector - + remainders = [] codebooks_vectors = [] - + for codebook in self.codebooks: remainders.append(remainder) - + codebook_indices = self.get_codebook_indices(remainder, codebook) codebook_vectors = codebook[codebook_indices] @@ -129,7 +124,7 @@ def train_pass(self, embeddings): self.reinit_unused_clusters(remainder, codebook, codebook_indices) num_unique_clusters.append(codebook_indices.unique().shape[0]) - + codebooks_vectors.append(codebook_vectors) latent_restored = latent_restored + codebook_vectors @@ -143,9 +138,9 @@ def train_pass(self, embeddings): "embeddings": embeddings, "embeddings_restored": embeddings_restored, "remainders": remainders, - "codebooks_vectors": codebooks_vectors, + "codebooks_vectors": codebooks_vectors } - + def eval_pass(self, embeddings): ind_lists = [] remainder = self.encoder(embeddings) @@ -158,12 +153,12 @@ def eval_pass(self, embeddings): def forward(self, inputs): embeddings = inputs["embeddings"] - + if self.training: # training mode return self.train_pass(embeddings) else: # eval mode return self.eval_pass(embeddings) - + @functools.cache def get_single_embedding(self, codebook_idx: int, codebook_id: int): return self.codebooks[codebook_idx][codebook_id] diff --git a/modeling/models/s3rec.py b/modeling/models/s3rec.py index f9f361d4..e1fcffb4 100644 --- a/modeling/models/s3rec.py +++ b/modeling/models/s3rec.py @@ -1,31 +1,33 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel from utils import create_masked_tensor -class S3RecModel(SequentialTorchModel, config_name="s3rec"): +class S3RecModel(SequentialTorchModel, config_name='s3rec'): + def __init__( - self, - sequence_prefix, - positive_prefix, - negative_prefix, - sequence_segment_prefix, - positive_segment_prefix, - negative_segment_prefix, - candidate_prefix, - num_items, - max_sequence_length, - is_training, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-5, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + negative_prefix, + sequence_segment_prefix, + positive_segment_prefix, + negative_segment_prefix, + candidate_prefix, + num_items, + max_sequence_length, + is_training, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-5, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -37,7 +39,7 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=is_training, + is_causal=is_training ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix @@ -59,60 +61,50 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - negative_prefix=config["negative_prefix"], - sequence_segment_prefix=config["sequence_segment_prefix"], - positive_segment_prefix=config["positive_segment_prefix"], - negative_segment_prefix=config["negative_segment_prefix"], - candidate_prefix=config["candidate_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - is_training=config["is_training"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + negative_prefix=config['negative_prefix'], + sequence_segment_prefix=config['sequence_segment_prefix'], + positive_segment_prefix=config['positive_segment_prefix'], + negative_segment_prefix=config['negative_segment_prefix'], + candidate_prefix=config['candidate_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + is_training=config['is_training'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def masked_item_prediction(self, sequence_embeddings, sequence_mask, target_item): all_items = sequence_embeddings[sequence_mask] # (all_batch_items, emb_dim) - score = torch.einsum("ad,ad->a", all_items, target_item) # (all_batch_items) + score = torch.einsum( + 'ad,ad->a', all_items, target_item + ) # (all_batch_items) return torch.sigmoid(score) # (all_batch_items) def segment_prediction(self, context, segment): - score = torch.einsum("bd,bd->b", self.sp_norm(context), segment) # (batch_size) + score = torch.einsum('bd,bd->b', self.sp_norm(context), segment) # (batch_size) return torch.sigmoid(score) # (batch_size) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - last_embeddings = self._get_last_embedding( - embeddings, mask - ) # (batch_size, embedding_dim) + last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) if self._is_training: if self.training: # training mode - all_positive_sample_events = inputs[ - "{}.ids".format(self._positive_prefix) - ] # (all_batch_events) - all_negative_sample_events = inputs[ - "{}.ids".format(self._negative_prefix) - ] # (all_batch_events) - - all_sample_embeddings = embeddings[ - mask - ] # (all_batch_events, embedding_dim) + all_positive_sample_events = inputs['{}.ids'.format(self._positive_prefix)] # (all_batch_events) + all_negative_sample_events = inputs['{}.ids'.format(self._negative_prefix)] # (all_batch_events) + + all_sample_embeddings = embeddings[mask] # (all_batch_events, embedding_dim) all_positive_sample_embeddings = self._item_embeddings( all_positive_sample_events ) # (all_batch_events, embedding_dim) @@ -121,68 +113,53 @@ def forward(self, inputs): ) # (all_batch_events, embedding_dim) return { - "current_embeddings": all_sample_embeddings, - "positive_embeddings": all_positive_sample_embeddings, - "negative_embeddings": all_negative_sample_embeddings, + 'current_embeddings': all_sample_embeddings, + 'positive_embeddings': all_positive_sample_embeddings, + 'negative_embeddings': all_negative_sample_embeddings } else: # eval mode - if "{}.ids".format(self._candidate_prefix) in inputs: - candidate_events = inputs[ - "{}.ids".format(self._candidate_prefix) - ] # (all_batch_candidates) - candidate_lengths = inputs[ - "{}.length".format(self._candidate_prefix) - ] # (batch_size) + if '{}.ids'.format(self._candidate_prefix) in inputs: + candidate_events = inputs['{}.ids'.format(self._candidate_prefix)] # (all_batch_candidates) + candidate_lengths = inputs['{}.length'.format(self._candidate_prefix)] # (batch_size) candidate_embeddings = self._item_embeddings( candidate_events ) # (all_batch_candidates, embedding_dim) candidate_embeddings, _ = create_masked_tensor( - data=candidate_embeddings, lengths=candidate_lengths + data=candidate_embeddings, + lengths=candidate_lengths ) # (batch_size, num_candidates, embedding_dim) candidate_scores = torch.einsum( - "bd,bnd->bn", last_embeddings, candidate_embeddings + 'bd,bnd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_candidates) else: - candidate_embeddings = ( - self._item_embeddings.weight - ) # (num_items, embedding_dim) + candidate_embeddings = self._item_embeddings.weight # (num_items, embedding_dim) candidate_scores = torch.einsum( - "bd,nd->bn", last_embeddings, candidate_embeddings + 'bd,nd->bn', + last_embeddings, + candidate_embeddings ) # (batch_size, num_items) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf return candidate_scores else: # Masked Item Prediction - mip_mask = ( - all_sample_events == self._mask_item_idx - ).bool() # (all_batch_events) + mip_mask = (all_sample_events == self._mask_item_idx).bool() # (all_batch_events) embeddings = embeddings[mask][mip_mask] # (all_batch_events, embedding_dim) - positive_item_events = inputs["{}.ids".format(self._positive_prefix)][ - mip_mask - ] # (all_batch_events) - negative_item_events = inputs["{}.ids".format(self._negative_prefix)][ - mip_mask - ] # (all_batch_events) - - positive_item_embeddings = self._item_embeddings( - positive_item_events - ) # (all_batch_events, embedding_dim) - negative_item_embeddings = self._item_embeddings( - negative_item_events - ) # (all_batch_events, embedding_dim) + positive_item_events = inputs['{}.ids'.format(self._positive_prefix)][mip_mask] # (all_batch_events) + negative_item_events = inputs['{}.ids'.format(self._negative_prefix)][mip_mask] # (all_batch_events) + + positive_item_embeddings = self._item_embeddings(positive_item_events) # (all_batch_events, embedding_dim) + negative_item_embeddings = self._item_embeddings(negative_item_events) # (all_batch_events, embedding_dim) # Sequence Prediction - all_segment_events = inputs[ - "{}.ids".format(self._sequence_segment_prefix) - ] # (all_batch_events) - all_segment_lengths = inputs[ - "{}.length".format(self._sequence_segment_prefix) - ] # (batch_size) + all_segment_events = inputs['{}.ids'.format(self._sequence_segment_prefix)] # (all_batch_events) + all_segment_lengths = inputs['{}.length'.format(self._sequence_segment_prefix)] # (batch_size) segment_embeddings, segment_mask = self._apply_sequential_encoder( all_segment_events, all_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) @@ -190,41 +167,30 @@ def forward(self, inputs): segment_embeddings, segment_mask ) # (batch_size, embedding_dim) - positive_segment_events = inputs[ - "{}.ids".format(self._positive_segment_prefix) - ] # (all_batch_events) - positive_segment_lengths = inputs[ - "{}.length".format(self._positive_segment_prefix) - ] # (batch_size) - positive_segment_embeddings, positive_segment_mask = ( - self._apply_sequential_encoder( - positive_segment_events, positive_segment_lengths - ) + positive_segment_events = inputs['{}.ids'.format(self._positive_segment_prefix)] # (all_batch_events) + positive_segment_lengths = inputs['{}.length'.format(self._positive_segment_prefix)] # (batch_size) + positive_segment_embeddings, positive_segment_mask = self._apply_sequential_encoder( + positive_segment_events, positive_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_positive_segment_embeddings = self._get_last_embedding( positive_segment_embeddings, positive_segment_mask ) # (batch_size, embedding_dim) - negative_segment_events = inputs[ - "{}.ids".format(self._negative_segment_prefix) - ] # (all_batch_events) - negative_segment_lengths = inputs[ - "{}.length".format(self._negative_segment_prefix) - ] # (batch_size) - negative_segment_embeddings, negative_segment_mask = ( - self._apply_sequential_encoder( - negative_segment_events, negative_segment_lengths - ) + negative_segment_events = inputs['{}.ids'.format(self._negative_segment_prefix)] # (all_batch_events) + negative_segment_lengths = inputs['{}.length'.format(self._negative_segment_prefix)] # (batch_size) + negative_segment_embeddings, negative_segment_mask = self._apply_sequential_encoder( + negative_segment_events, negative_segment_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) last_negative_segment_embeddings = self._get_last_embedding( negative_segment_embeddings, negative_segment_mask ) # (batch_size, embedding_dim) return { - "positive_representation": positive_item_embeddings, - "negative_representation": negative_item_embeddings, - "current_representation": embeddings, - "positive_segment_representation": last_positive_segment_embeddings, - "negative_segment_representation": last_negative_segment_embeddings, - "current_segment_representation": last_segment_embeddings, + 'positive_representation': positive_item_embeddings, + 'negative_representation': negative_item_embeddings, + 'current_representation': embeddings, + + 'positive_segment_representation': last_positive_segment_embeddings, + 'negative_segment_representation': last_negative_segment_embeddings, + 'current_segment_representation': last_segment_embeddings } diff --git a/modeling/models/sasrec_ce.py b/modeling/models/sasrec_ce.py index d9eb882b..a0316853 100644 --- a/modeling/models/sasrec_ce.py +++ b/modeling/models/sasrec_ce.py @@ -1,24 +1,25 @@ +from models.base import SequentialTorchModel + import torch import torch.nn as nn -from models.base import SequentialTorchModel +class SasRecCeModel(SequentialTorchModel, config_name='sasrec_ce'): -class SasRecCeModel(SequentialTorchModel, config_name="sasrec_ce"): def __init__( - self, - sequence_prefix, - positive_prefix, - num_items, - max_sequence_length, - embedding_dim, - num_heads, - num_layers, - dim_feedforward, - dropout=0.0, - activation="relu", - layer_norm_eps=1e-9, - initializer_range=0.02, + self, + sequence_prefix, + positive_prefix, + num_items, + max_sequence_length, + embedding_dim, + num_heads, + num_layers, + dim_feedforward, + dropout=0.0, + activation='relu', + layer_norm_eps=1e-9, + initializer_range=0.02 ): super().__init__( num_items=num_items, @@ -30,13 +31,14 @@ def __init__( dropout=dropout, activation=activation, layer_norm_eps=layer_norm_eps, - is_causal=True, + is_causal=True ) self._sequence_prefix = sequence_prefix self._positive_prefix = positive_prefix self._output_projection = nn.Linear( - in_features=embedding_dim, out_features=embedding_dim + in_features=embedding_dim, + out_features=embedding_dim ) self._init_weights(initializer_range) @@ -44,51 +46,42 @@ def __init__( @classmethod def create_from_config(cls, config, **kwargs): return cls( - sequence_prefix=config["sequence_prefix"], - positive_prefix=config["positive_prefix"], - num_items=kwargs["num_items"], - max_sequence_length=kwargs["max_sequence_length"], - embedding_dim=config["embedding_dim"], - num_heads=config.get("num_heads", int(config["embedding_dim"] // 64)), - num_layers=config["num_layers"], - dim_feedforward=config.get("dim_feedforward", 4 * config["embedding_dim"]), - dropout=config.get("dropout", 0.0), - initializer_range=config.get("initializer_range", 0.02), + sequence_prefix=config['sequence_prefix'], + positive_prefix=config['positive_prefix'], + num_items=kwargs['num_items'], + max_sequence_length=kwargs['max_sequence_length'], + embedding_dim=config['embedding_dim'], + num_heads=config.get('num_heads', int(config['embedding_dim'] // 64)), + num_layers=config['num_layers'], + dim_feedforward=config.get('dim_feedforward', 4 * config['embedding_dim']), + dropout=config.get('dropout', 0.0), + initializer_range=config.get('initializer_range', 0.02) ) def forward(self, inputs): - all_sample_events = inputs[ - "{}.ids".format(self._sequence_prefix) - ] # (all_batch_events) - all_sample_lengths = inputs[ - "{}.length".format(self._sequence_prefix) - ] # (batch_size) + all_sample_events = inputs['{}.ids'.format(self._sequence_prefix)] # (all_batch_events) + all_sample_lengths = inputs['{}.length'.format(self._sequence_prefix)] # (batch_size) embeddings, mask = self._apply_sequential_encoder( all_sample_events, all_sample_lengths ) # (batch_size, seq_len, embedding_dim), (batch_size, seq_len) - embeddings = self._output_projection( - embeddings - ) # (batch_size, seq_len, embedding_dim) - embeddings = torch.nn.functional.gelu( - embeddings - ) # (batch_size, seq_len, embedding_dim) + embeddings = self._output_projection(embeddings) # (batch_size, seq_len, embedding_dim) + embeddings = torch.nn.functional.gelu(embeddings) # (batch_size, seq_len, embedding_dim) embeddings = torch.einsum( - "bsd,nd->bsn", embeddings, self._item_embeddings.weight + 'bsd,nd->bsn', embeddings, self._item_embeddings.weight ) # (batch_size, seq_len, num_items + 2) if self.training: # training mode - return {"logits": embeddings[mask]} + return {'logits': embeddings[mask]} else: # eval mode - candidate_scores = self._get_last_embedding( - embeddings, mask - ) # (batch_size, num_items + 2) + candidate_scores = self._get_last_embedding(embeddings, mask) # (batch_size, num_items + 2) candidate_scores[:, 0] = -torch.inf - candidate_scores[:, self._num_items + 1 :] = -torch.inf + candidate_scores[:, self._num_items + 1:] = -torch.inf _, indices = torch.topk( - candidate_scores, k=20, dim=-1, largest=True + candidate_scores, + k=20, dim=-1, largest=True ) # (batch_size, 20) return indices diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index c1089e23..0230f41e 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -1,9 +1,9 @@ import torch +from .tiger import TigerModel from models import SequentialTorchModel from torch import nn from utils import DEVICE, create_masked_tensor - -from .tiger import TigerModel +from torch import nn class SasRecSemanticModel(SequentialTorchModel, config_name="sasrec_semantic"): diff --git a/modeling/models/tiger.py b/modeling/models/tiger.py index c44c13f3..81d5825d 100644 --- a/modeling/models/tiger.py +++ b/modeling/models/tiger.py @@ -1,10 +1,9 @@ import json import torch -from torch import nn - from models.base import SequentialTorchModel from rqvae_utils import CollisionSolver, SimplifiedTree +from torch import nn from utils import DEVICE, create_masked_tensor, get_activation_function from .rqvae import RqVaeModel @@ -78,7 +77,7 @@ def __init__( a=-2 * initializer_range, b=2 * initializer_range, ), - requires_grad=True, + requires_grad=True, # TODOPK added for bos ) self._codebook_embeddings = nn.Embedding( @@ -353,17 +352,13 @@ def _apply_decoder_autoregressive(self, encoder_embeddings, encoder_mask): ) assert last_position_embedding.shape == tgt_embeddings[:, -1, :].shape - assert tgt_embeddings.shape == torch.Size( - [batch_size, step + 1, embedding_dim] - ) + assert tgt_embeddings.shape == torch.Size([batch_size, step + 1, embedding_dim]) curr_step_embeddings = tgt_embeddings.clone() curr_step_embeddings[:, -1, :] = ( tgt_embeddings[:, -1, :] + last_position_embedding ) - assert torch.allclose( - tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :] - ) + assert torch.allclose(tgt_embeddings[:, :-1, :], curr_step_embeddings[:, :-1, :]) tgt_embeddings = curr_step_embeddings # curr_embeddings[:, -1, :] = self._decoder_layernorm(curr_embeddings[:, -1, :]) diff --git a/modeling/optimizer/base.py b/modeling/optimizer/base.py index 0e85cab8..86c63537 100644 --- a/modeling/optimizer/base.py +++ b/modeling/optimizer/base.py @@ -1,18 +1,17 @@ import copy import torch - from utils import MetaParent OPTIMIZERS = { - "sgd": torch.optim.SGD, - "adam": torch.optim.Adam, - "adamw": torch.optim.AdamW, + 'sgd': torch.optim.SGD, + 'adam': torch.optim.Adam, + 'adamw': torch.optim.AdamW } SCHEDULERS = { - "step": torch.optim.lr_scheduler.StepLR, - "cyclic": torch.optim.lr_scheduler.CyclicLR, + 'step': torch.optim.lr_scheduler.StepLR, + 'cyclic': torch.optim.lr_scheduler.CyclicLR } @@ -20,7 +19,7 @@ class BaseOptimizer(metaclass=MetaParent): pass -class BasicOptimizer(BaseOptimizer, config_name="basic"): +class BasicOptimizer(BaseOptimizer, config_name='basic'): def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): self._model = model self._optimizer = optimizer @@ -29,24 +28,26 @@ def __init__(self, model, optimizer, scheduler=None, clip_grad_threshold=None): @classmethod def create_from_config(cls, config, **kwargs): - optimizer_cfg = copy.deepcopy(config["optimizer"]) - optimizer = OPTIMIZERS[optimizer_cfg.pop("type")]( - kwargs["model"].parameters(), **optimizer_cfg + optimizer_cfg = copy.deepcopy(config['optimizer']) + optimizer = OPTIMIZERS[optimizer_cfg.pop('type')]( + kwargs['model'].parameters(), + **optimizer_cfg ) - if "scheduler" in config: - scheduler_cfg = copy.deepcopy(config["scheduler"]) - scheduler = SCHEDULERS[scheduler_cfg.pop("type")]( - optimizer, **scheduler_cfg + if 'scheduler' in config: + scheduler_cfg = copy.deepcopy(config['scheduler']) + scheduler = SCHEDULERS[scheduler_cfg.pop('type')]( + optimizer, + **scheduler_cfg ) else: scheduler = None return cls( - model=kwargs["model"], + model=kwargs['model'], optimizer=optimizer, scheduler=scheduler, - clip_grad_threshold=config.get("clip_grad_threshold", None), + clip_grad_threshold=config.get('clip_grad_threshold', None) ) def step(self, loss): @@ -54,16 +55,14 @@ def step(self, loss): loss.backward() if self._clip_grad_threshold is not None: - torch.nn.utils.clip_grad_norm_( - self._model.parameters(), self._clip_grad_threshold - ) + torch.nn.utils.clip_grad_norm_(self._model.parameters(), self._clip_grad_threshold) self._optimizer.step() if self._scheduler is not None: self._scheduler.step() def state_dict(self): - state_dict = {"optimizer": self._optimizer.state_dict()} + state_dict = {'optimizer': self._optimizer.state_dict()} if self._scheduler is not None: - state_dict.update({"scheduler": self._scheduler.state_dict()}) + state_dict.update({'scheduler': self._scheduler.state_dict()}) return state_dict diff --git a/modeling/pretrain.py b/modeling/pretrain.py index 4221e62c..4597e3e8 100644 --- a/modeling/pretrain.py +++ b/modeling/pretrain.py @@ -1,16 +1,16 @@ -import copy -import json - -import torch - import utils -from callbacks import BaseCallback -from dataloader import BaseDataloader +from utils import parse_args, create_logger, fix_random_seed, DEVICE + from dataset import BaseDataset -from loss import BaseLoss +from dataloader import BaseDataloader from models import BaseModel from optimizer import BaseOptimizer -from utils import DEVICE, create_logger, fix_random_seed, parse_args +from loss import BaseLoss +from callbacks import BaseCallback + +import copy +import json +import torch logger = create_logger(name=__name__) seed_val = 42 @@ -20,10 +20,10 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): step_num = 0 best_checkpoint = None - logger.debug("Start pretraining...") + logger.debug('Start pretraining...') for epoch in range(epoch_cnt): - logger.debug(f"Start epoch {epoch}") + logger.debug(f'Start epoch {epoch}') for step, batch in enumerate(dataloader): model.train() @@ -39,7 +39,7 @@ def pretrain(dataloader, model, optimizer, loss_function, callback, epoch_cnt): best_checkpoint = copy.deepcopy(model.state_dict()) - logger.debug("Pretraining procedure has been finished!") + logger.debug('Pretraining procedure has been finished!') return best_checkpoint @@ -47,38 +47,41 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( - config["experiment_name"] - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ + utils.tensorboards.TensorboardWriter(config['experiment_name']) - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) train_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=test_sampler, + **dataset.meta ) - model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) + model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) - loss_function = BaseLoss.create_from_config(config["loss"]) + loss_function = BaseLoss.create_from_config(config['loss']) - optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) + optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, dataloader=validation_dataloader, - optimizer=optimizer, + optimizer=optimizer ) - logger.debug("Everything is ready for pretraining process!") + logger.debug('Everything is ready for pretraining process!') # Pretrain process pretrain( @@ -87,16 +90,14 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config["pretrain_epochs_num"], + epoch_cnt=config['pretrain_epochs_num'] ) - logger.debug("Saving model...") - checkpoint_path = "../checkpoints/pretrain_{}_final_state.pth".format( - config["experiment_name"] - ) + logger.debug('Saving model...') + checkpoint_path = '../checkpoints/pretrain_{}_final_state.pth'.format(config['experiment_name']) torch.save(model.state_dict(), checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/rqvae_utils/__init__.py b/modeling/rqvae_utils/__init__.py index 33c649b9..2722515a 100644 --- a/modeling/rqvae_utils/__init__.py +++ b/modeling/rqvae_utils/__init__.py @@ -1,4 +1,4 @@ from .collision_solver import CollisionSolver -from .simplified_tree import SimplifiedTree -from .tree import Tree from .trie import Trie +from .tree import Tree +from .simplified_tree import SimplifiedTree \ No newline at end of file diff --git a/modeling/rqvae_utils/collision_solver.py b/modeling/rqvae_utils/collision_solver.py index 426cf1bf..f673c6dd 100644 --- a/modeling/rqvae_utils/collision_solver.py +++ b/modeling/rqvae_utils/collision_solver.py @@ -6,45 +6,32 @@ class CollisionSolver: - def __init__( - self, - emb_dim: int, - sem_id_len: int, - codebook_size: int, - device: torch.device = DEVICE, - ): + def __init__(self, + emb_dim: int, + sem_id_len: int, + codebook_size: int, + device: torch.device=DEVICE): """ :param emb_dim: Длина остатка :param codebook_size: Количество элементов в одном кодбуке :param sem_id_len: Длина semantic_id (без токена решающего коллизии) :param device: Устройство """ - self._sem_ids_sparse_tensor: torch.Tensor = torch.empty( - (0, 0) - ) # тензор группирирующий остатки по semantic_id + self._sem_ids_sparse_tensor: torch.Tensor = torch.empty((0, 0)) # тензор группирирующий остатки по semantic_id self.item_ids_sparse_tensor: torch.Tensor = torch.empty( - (0, 0) - ) # тензор группирирующий реальные айди айтемов по semantic_id - self.counts_dict: dict[int, int] = defaultdict( - int - ) # тензор храняющий количество коллизий по semantic_id + (0, 0)) # тензор группирирующий реальные айди айтемов по semantic_id + self.counts_dict: dict[int, int] = defaultdict(int) # тензор храняющий количество коллизий по semantic_id self.emb_dim: int = emb_dim # длина остатка self.sem_id_len: int = sem_id_len # длина semantic_id self.codebook_size: int = codebook_size # количество элементов в одном кодбуке self.device: torch.device = device # девайс - self.key: torch.Tensor = torch.tensor( - [self.codebook_size**i for i in range(self.sem_id_len)], - dtype=torch.long, - device=self.device, - ) # ключ для сопоставления числа каждому semantic_id - - def create_query_candidates_dict( - self, - item_ids: torch.Tensor, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - ) -> None: + self.key: torch.Tensor = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len)], + dtype=torch.long, + device=self.device) # ключ для сопоставления числа каждому semantic_id + + def create_query_candidates_dict(self, item_ids: torch.Tensor, semantic_ids: torch.Tensor, + residuals: torch.Tensor) -> None: """ Создает разреженный тензор, который содержит сгруппированные по semantic id элементы @@ -65,53 +52,35 @@ def create_query_candidates_dict( semantic_ids = semantic_ids.to(self.device) unique_id = (semantic_ids * self.key).sum(dim=1) # хэши - unique_ids, inverse_indices, counts = torch.unique( - unique_id, return_inverse=True, return_counts=True - ) - sorted_indices = torch.argsort( - inverse_indices - ) # сортированные индексы чтобы совпадающие хэши шли подряд + unique_ids, inverse_indices, counts = torch.unique(unique_id, return_inverse=True, return_counts=True) + sorted_indices = torch.argsort(inverse_indices) # сортированные индексы чтобы совпадающие хэши шли подряд row_indices = inverse_indices[sorted_indices] # отсортированные хэши offsets = torch.cumsum(counts, dim=0) - counts - col_indices = ( - torch.arange(semantic_ids_count, device=self.device) - offsets[row_indices] - ) # индексы от 0 до k внутри каждого набора из совпадающих хэшей - - indices = torch.stack( - [unique_ids[row_indices], col_indices], dim=0 - ) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша - - max_residuals_count = int( - counts.max().item() - ) # максимальное количество коллизий для одного sem_id - max_sid = int( - self.codebook_size**self.sem_id_len - ) # максимальный хэш sem_id который может быть - - self._sem_ids_sparse_tensor = torch.sparse_coo_tensor( - indices, - residuals[sorted_indices], - size=(max_sid, max_residuals_count, self.emb_dim), - device=self.device, - ) # (max_sid, max_residuals_count, emb_dim) - - self.counts_dict = defaultdict( - int, zip(unique_ids.tolist(), counts.tolist()) - ) # sid -> collision count - - self.item_ids_sparse_tensor = torch.sparse_coo_tensor( - indices, - item_ids[sorted_indices], - size=(max_sid, max_residuals_count), - device=self.device, - dtype=torch.int32, - ) # (max_sid, max_residuals_count) - - def get_residuals_by_semantic_id_batch( - self, semantic_ids: torch.Tensor - ) -> tuple[torch.Tensor, torch.Tensor]: + col_indices = torch.arange(semantic_ids_count, device=self.device) - offsets[ + row_indices] # индексы от 0 до k внутри каждого набора из совпадающих хэшей + + indices = torch.stack([ + unique_ids[row_indices], + col_indices + ], + dim=0) # индексы для разреженного тензора: 1 размерность хэш, 2 размерность индексы от 0 до k для коллизий каждого хэша + + max_residuals_count = int(counts.max().item()) # максимальное количество коллизий для одного sem_id + max_sid = int(self.codebook_size ** self.sem_id_len) # максимальный хэш sem_id который может быть + + self._sem_ids_sparse_tensor = torch.sparse_coo_tensor(indices, residuals[sorted_indices], + size=(max_sid, max_residuals_count, self.emb_dim), + device=self.device) # (max_sid, max_residuals_count, emb_dim) + + self.counts_dict = defaultdict(int, zip(unique_ids.tolist(), counts.tolist())) # sid -> collision count + + self.item_ids_sparse_tensor = torch.sparse_coo_tensor(indices, item_ids[sorted_indices], + size=(max_sid, max_residuals_count), device=self.device, + dtype=torch.int32) # (max_sid, max_residuals_count) + + def get_residuals_by_semantic_id_batch(self, semantic_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: """ :param semantic_ids батч из semantic ids (batch_size, sem_id_len) @@ -124,21 +93,13 @@ def get_residuals_by_semantic_id_batch( semantic_ids = semantic_ids.to(self.device) unique_ids = (semantic_ids * self.key).sum(dim=1) - candidates = torch.stack( - [self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids] - ) - counts = torch.tensor( - [self.counts_dict[key.item()] for key in unique_ids], device=self.device - ) - mask = torch.arange(candidates.shape[1], device=self.device).expand( - len(unique_ids), -1 - ) < counts.view(-1, 1) + candidates = torch.stack([self._sem_ids_sparse_tensor[key].to_dense() for key in unique_ids]) + counts = torch.tensor([self.counts_dict[key.item()] for key in unique_ids], device=self.device) + mask = torch.arange(candidates.shape[1], device=self.device).expand(len(unique_ids), -1) < counts.view(-1, 1) return candidates, mask - def get_pred_scores( - self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor - ) -> dict[str, torch.Tensor]: + def get_pred_scores(self, semantic_ids: torch.Tensor, pred_residuals: torch.Tensor) -> dict[str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param pred_residuals: [batch_size, emb_dim] предсказанные остатки @@ -159,26 +120,19 @@ def get_pred_scores( candidates, mask = self.get_residuals_by_semantic_id_batch(semantic_ids) - pred_scores = torch.einsum( - "njk,nk->nj", candidates, pred_residuals - ).masked_fill(~mask, -torch.inf) + pred_scores = torch.einsum('njk,nk->nj', candidates, pred_residuals).masked_fill(~mask, -torch.inf) pred_indices = torch.argmax(pred_scores, dim=1) pred_item_ids = torch.stack( - [ - self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] - for i in range(semantic_ids.shape[0]) - ] - ) + [self.item_ids_sparse_tensor[unique_ids[i]][pred_indices[i]] for i in range(semantic_ids.shape[0])]) return { "pred_scores_mask": mask, "pred_scores": pred_scores, - "pred_item_ids": pred_item_ids, + "pred_item_ids": pred_item_ids } - def get_true_dedup_tokens( - self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor - ) -> dict[str, torch.Tensor]: + def get_true_dedup_tokens(self, semantic_ids: torch.Tensor, true_residuals: torch.Tensor) -> dict[ + str, torch.Tensor]: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токена решающего коллизии) :param true_residuals: [batch_size, emb_dim] реальные остатки @@ -200,11 +154,11 @@ def get_true_dedup_tokens( assert matches.any(dim=1).all(), "Не у всех батчей есть совпадение" - return {"true_dedup_tokens": true_dedup_tokens} + return { + "true_dedup_tokens": true_dedup_tokens + } - def get_item_ids_batch( - self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor - ) -> torch.Tensor: + def get_item_ids_batch(self, semantic_ids: torch.Tensor, dedup_tokens: torch.Tensor) -> torch.Tensor: """ :param semantic_id: [batch_size, sem_id_len] semantic ids (без токенов решающего коллизии) :param dedup_tokens: [batch_size] токены решающие коллизии @@ -220,10 +174,6 @@ def get_item_ids_batch( unique_ids = (semantic_ids * self.key).sum(dim=1) item_ids = torch.stack( - [ - self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] - for i in range(semantic_ids.shape[0]) - ] - ) + [self.item_ids_sparse_tensor[unique_ids[i]][dedup_tokens[i]] for i in range(semantic_ids.shape[0])]) return item_ids diff --git a/modeling/rqvae_utils/rqvae_data.py b/modeling/rqvae_utils/rqvae_data.py index 5ffec08e..47692cae 100644 --- a/modeling/rqvae_utils/rqvae_data.py +++ b/modeling/rqvae_utils/rqvae_data.py @@ -1,11 +1,11 @@ -import gzip +import pandas as pd import json +import gzip +from transformers import AutoTokenizer, AutoModelForSeq2SeqLM +import torch import random -import pandas as pd -import torch from tqdm import tqdm -from transformers import AutoModelForSeq2SeqLM, AutoTokenizer tqdm.pandas() @@ -76,7 +76,7 @@ def get_data(cached=True): df["embeddings"] = df["combined_text"].progress_apply(encode_text) else: df = torch.load("../data/Beauty/data_full.pt", weights_only=False) - + return df @@ -91,3 +91,6 @@ def search_similar_items(items_with_tuples, clust2search, max_cnt=5): if cnt >= max_cnt: return similars return similars + + + diff --git a/modeling/rqvae_utils/rqvae_test.py b/modeling/rqvae_utils/rqvae_test.py index 03f8e3e8..611e7739 100644 --- a/modeling/rqvae_utils/rqvae_test.py +++ b/modeling/rqvae_utils/rqvae_test.py @@ -6,7 +6,6 @@ from models import RqVaeModel from utils import DEVICE - def test(a, b): cos_sim = torch.nn.functional.cosine_similarity(a, b, dim=0) norm_a = torch.norm(a, p=2) @@ -14,7 +13,6 @@ def test(a, b): l2_dist = torch.norm(a - b, p=2) / (norm_a + norm_b + 1e-8) return cos_sim, l2_dist - if __name__ == "__main__": config = json.load(open("../configs/train/tiger_train_config.json")) config = config["model"] @@ -26,16 +24,14 @@ def test(a, b): ) df = torch.load(config["embs_extractor_path"], weights_only=False) embeddings_array = np.stack(df["embeddings"].values) - tensor_embeddings = torch.tensor( - embeddings_array, dtype=torch.float32, device=DEVICE - ) - inputs = {"embeddings": tensor_embeddings} + tensor_embeddings = torch.tensor(embeddings_array, dtype=torch.float32, device=DEVICE) + inputs = {'embeddings': tensor_embeddings} rqvae_model.eval() sem_ids, residuals = rqvae_model.forward(inputs) scores = residuals.detach() print(torch.norm(residuals, p=2, dim=1).median()) - for i, codebook in enumerate(rqvae_model.codebooks): + for (i, codebook) in enumerate(rqvae_model.codebooks): scores += codebook[sem_ids[:, i]].detach() decoder_output = rqvae_model.decoder(scores.detach()).detach() @@ -45,14 +41,11 @@ def test(a, b): print("косинусное расстояние", cos_sim) print("евклидово расстояние", l2_dist) - cos_sim = torch.nn.functional.cosine_similarity( - tensor_embeddings, decoder_output, dim=1 - ) + cos_sim = torch.nn.functional.cosine_similarity(tensor_embeddings, decoder_output, dim=1) print("косинусное расстояние", cos_sim.mean(), cos_sim.min(), cos_sim.max()) - norm_a = torch.norm(tensor_embeddings, p=2, dim=1) - norm_b = torch.norm(decoder_output, p=2, dim=1) - l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim=1) / ( - norm_a + norm_b + 1e-8 - ) - print("евклидово расстояние", l2_dist.median(), l2_dist.min(), l2_dist.max()) + norm_a = torch.norm(tensor_embeddings, p=2, dim = 1) + norm_b = torch.norm(decoder_output, p=2, dim = 1) + l2_dist = torch.norm(decoder_output - tensor_embeddings, p=2, dim = 1) / (norm_a + norm_b + 1e-8) + print("евклидово расстояние",l2_dist.median(), l2_dist.min(), l2_dist.max()) + diff --git a/modeling/rqvae_utils/simplified_tree.py b/modeling/rqvae_utils/simplified_tree.py index 120f9a80..5a09dcb4 100644 --- a/modeling/rqvae_utils/simplified_tree.py +++ b/modeling/rqvae_utils/simplified_tree.py @@ -10,21 +10,14 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = ( - embedding_table # (semantic_id_len, codebook_size, emb_dim) - ) + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.sem_ids_count: int = 0 self.full_embeddings: torch.Tensor = torch.empty((0, 0)) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure( - self, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - item_ids: torch.Tensor, - sum_with_residuals: bool = True, - ) -> None: + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor, + sum_with_residuals: bool = True) -> None: """ :param sum_with_residuals: флаг, отвечающий за то учитывать ли остатки при выборе кандидатов :param semantic_ids: (sem_ids_count, sem_id_len) @@ -37,11 +30,9 @@ def build_tree_structure( assert item_ids.shape == (self.sem_ids_count,) semantic_ids = semantic_ids.to(self.device) - residuals = ( - residuals.to(self.device).float() - if sum_with_residuals - else torch.zeros_like(residuals, device=self.device, dtype=torch.float) - ) + residuals = residuals.to(self.device).float() if sum_with_residuals else torch.zeros_like(residuals, + device=self.device, + dtype=torch.float) self.full_embeddings = self.calculate_full(semantic_ids).float() + residuals self.item_ids = item_ids @@ -53,17 +44,14 @@ def calculate_full(self, sem_ids: torch.Tensor) -> torch.Tensor: assert sem_ids.shape[1] == self.sem_id_len sem_ids = sem_ids.to(self.device) - expanded_emb_table = self.embedding_table.unsqueeze(0).expand( - sem_ids.shape[0], -1, -1, -1 - ) # (count, sem_id_len, codebook_size, emb_dim) + expanded_emb_table = (self.embedding_table.unsqueeze(0) + .expand(sem_ids.shape[0], -1, -1, -1)) # (count, sem_id_len, codebook_size, emb_dim) - index = ( - sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) - ) # (count, sem_id_len, 1, emb_dim) + index = (sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (count, sem_id_len, 1, emb_dim) - return ( - torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) - ) # (count, emb_dim) + return torch.gather(input=expanded_emb_table, index=index, dim=2).sum(1).squeeze(1) # (count, emb_dim) def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Tensor: """ @@ -75,21 +63,14 @@ def query(self, request_sem_ids: torch.Tensor, items_to_query: int) -> torch.Ten assert 0 < items_to_query <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - request_embeddings = self.calculate_full( - request_sem_ids - ) # (batch_size, emb_dim) + request_embeddings = self.calculate_full(request_sem_ids) # (batch_size, emb_dim) - request_embeddings = request_embeddings.unsqueeze(1).expand( - -1, self.sem_ids_count, -1 - ) # (batch_size, sem_ids_count, emb_dim) + request_embeddings = (request_embeddings.unsqueeze(1) + .expand(-1, self.sem_ids_count, -1)) # (batch_size, sem_ids_count, emb_dim) - diff_norm = torch.norm( - self.full_embeddings - request_embeddings, p=2, dim=2 - ) # (batch_size, sem_ids_count) + diff_norm = torch.norm(self.full_embeddings - request_embeddings, p=2, dim=2) # (batch_size, sem_ids_count) - indices = torch.argsort(diff_norm, descending=False, dim=1)[ - :, :items_to_query - ] # (batch_size, k) + indices = torch.argsort(diff_norm, descending=False, dim=1)[:, :items_to_query] # (batch_size, k) return self.item_ids[indices] def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: @@ -103,21 +84,18 @@ def _query(self, request_sem_ids: torch.Tensor, k: int) -> torch.Tensor: assert 0 < k <= self.sem_ids_count request_sem_ids = request_sem_ids.to(self.device) - index = ( - request_sem_ids.unsqueeze(-1).expand(-1, -1, self.emb_dim).unsqueeze(2) - ) # (batch_size, sem_id_len, 1, emb_dim) + index = (request_sem_ids.unsqueeze(-1) + .expand(-1, -1, self.emb_dim) + .unsqueeze(2)) # (batch_size, sem_id_len, 1, emb_dim) request_embeddings = torch.gather( - input=self.embedding_table.unsqueeze(0).expand( - request_sem_ids.shape[0], -1, -1, -1 - ), + input=self.embedding_table.unsqueeze(0).expand(request_sem_ids.shape[0], -1, -1, -1), dim=2, - index=index, + index=index ).sum(1) # (batch_size, emb_dim) - diff_norm = torch.cdist( - self.full_embeddings, request_embeddings.unsqueeze(1), p=2 - ).squeeze(1) # (batch_size, sem_ids_count) + diff_norm = torch.cdist(self.full_embeddings, request_embeddings.unsqueeze(1), p=2).squeeze( + 1) # (batch_size, sem_ids_count) _, indices = torch.topk(diff_norm, k=k, dim=1, largest=False) # (batch_size, k) return self.item_ids[indices.squeeze(-1)] diff --git a/modeling/rqvae_utils/tree.py b/modeling/rqvae_utils/tree.py index 336f6dbe..b09cd049 100644 --- a/modeling/rqvae_utils/tree.py +++ b/modeling/rqvae_utils/tree.py @@ -11,9 +11,7 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) :param device: устройство """ self.device: torch.device = device - self.embedding_table: torch.Tensor = ( - embedding_table # (semantic_id_len, codebook_size, emb_dim) - ) + self.embedding_table: torch.Tensor = embedding_table # (semantic_id_len, codebook_size, emb_dim) self.sem_id_len, self.codebook_size, self.emb_dim = self.embedding_table.shape self.key: torch.Tensor = torch.empty((0, 0)) self.A: torch.Tensor = torch.empty((0, 0)) # будет (max_sem_id, ) @@ -22,12 +20,7 @@ def __init__(self, embedding_table: torch.Tensor, device: torch.device = DEVICE) self.sids: torch.Tensor = torch.empty((0, 0)) # будет (sem_id_len, ) self.item_ids: torch.Tensor = torch.empty((0, 0)) - def build_tree_structure( - self, - semantic_ids: torch.Tensor, - residuals: torch.Tensor, - item_ids: torch.Tensor, - ): + def build_tree_structure(self, semantic_ids: torch.Tensor, residuals: torch.Tensor, item_ids: torch.Tensor): """ :param semantic_ids: (sem_ids_count, sem_id_len) :param residuals: (sem_ids_count, emb_dim) @@ -41,41 +34,22 @@ def build_tree_structure( assert item_ids.shape == (self.sem_ids_count,) self.item_ids = item_ids - self.key = torch.tensor( - [self.codebook_size**i for i in range(self.sem_id_len - 1, -1, -1)], - dtype=torch.long, - device=self.device, - ) + self.key = torch.tensor([self.codebook_size ** i for i in range(self.sem_id_len - 1, -1, -1)], + dtype=torch.long, device=self.device) self.sids = self.get_sids(semantic_ids.float()) # (sem_id_len, ) self.sem_ids_embs = self.calculate_full(semantic_ids, residuals) - result = torch.full( - size=[self.codebook_size**self.sem_id_len], - fill_value=0, - dtype=torch.int64, - device=self.device, - ) + result = torch.full(size=[self.codebook_size ** self.sem_id_len], fill_value=0, dtype=torch.int64, + device=self.device) temp_unique_id = self.sids * self.codebook_size - temp_sem_ids = torch.concat( - [ - semantic_ids, - torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1), - ], - dim=-1, - ) + temp_sem_ids = torch.concat([semantic_ids, torch.zeros(self.sem_ids_count, device=self.device).unsqueeze(1)], + dim=-1) for i in range(0, self.sem_id_len + 1): - temp_unique_id = ( - temp_unique_id - - (self.codebook_size**i) * temp_sem_ids[:, self.sem_id_len - i] - ) - temp_unique_ids, temp_inverse_indices = torch.unique( - temp_unique_id, return_inverse=True - ) + temp_unique_id = temp_unique_id - (self.codebook_size ** i) * temp_sem_ids[:, self.sem_id_len - i] + temp_unique_ids, temp_inverse_indices = torch.unique(temp_unique_id, return_inverse=True) temp_counts = torch.bincount(temp_inverse_indices) - truncated_ids = torch.floor_divide( - input=temp_unique_id, other=(self.codebook_size ** (i + 1)) - ).long() + truncated_ids = torch.floor_divide(input=temp_unique_id, other=(self.codebook_size ** (i + 1))).long() result[truncated_ids] = temp_counts[temp_inverse_indices] self.A = result @@ -90,21 +64,13 @@ def get_counts(self, sem_ids: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor] offsets = torch.arange(self.sem_id_len + 1, device=self.device) i = torch.arange(self.sem_id_len, device=self.device) - mask_sem = ( - i < (self.sem_id_len - offsets.unsqueeze(1)) - ).long() # (sem_id_len + 1, sem_id_len) + mask_sem = (i < (self.sem_id_len - offsets.unsqueeze(1))).long() # (sem_id_len + 1, sem_id_len) divs = torch.pow(self.codebook_size, offsets) # (sem_id_len + 1,) - C = ( - sem_ids.unsqueeze(1) - * mask_sem.unsqueeze(0) - * self.key.unsqueeze(0).unsqueeze(1) - ).sum(dim=-1) + C = (sem_ids.unsqueeze(1) * mask_sem.unsqueeze(0) * self.key.unsqueeze(0).unsqueeze(1)).sum(dim=-1) B = C // divs.unsqueeze(0) - return C, self.A[ - B - ] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) + return C, self.A[B] # (batch_size, sem_id_len + 1), (batch_size, sem_id_len + 1) def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: """ @@ -112,11 +78,9 @@ def get_sids(self, sem_ids: torch.Tensor) -> torch.Tensor: :return: хэши sem_ids (sem_id_count,) """ assert sem_ids.shape[1] == self.sem_id_len - return torch.einsum("nc,c->n", sem_ids, self.key.float()) # (sem_ids_count,) + return torch.einsum('nc,c->n', sem_ids, self.key.float()) # (sem_ids_count,) - def calc_ol( - self, batch_ids: torch.Tensor, k: int - ) -> tuple[torch.Tensor, torch.Tensor]: + def calc_ol(self, batch_ids: torch.Tensor, k: int) -> tuple[torch.Tensor, torch.Tensor]: """ :param batch_ids: (batch_size, sem_id_len) :param k: int @@ -130,8 +94,7 @@ def calc_ol( gather_ol = torch.gather(c, dim=1, index=ol.unsqueeze(1)).squeeze() # (bs,) mask_ol = (gather_ol.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1) - ) + self.sids < (gather_ol + torch.pow(self.codebook_size, ol)).unsqueeze(-1)) return ol, mask_ol # (bs,) (bs, sem_ids_count) def calc_il(self, batch_ids, k): @@ -145,27 +108,19 @@ def calc_il(self, batch_ids, k): batch_dim = batch_ids.shape[0] c, a = self.get_counts(batch_ids) - extended_c = torch.concat( - [torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], - dim=1, - ) + extended_c = torch.concat([torch.tensor(float("inf"), device=self.device).expand(batch_dim, 1), c], dim=1) il = torch.argmax((a > k).long(), dim=-1) - 1 # (bs,) - gather_il = torch.gather( - extended_c, dim=1, index=(il + 1).unsqueeze(1) - ).squeeze() # (bs,) + gather_il = torch.gather(extended_c, dim=1, index=(il + 1).unsqueeze(1)).squeeze() # (bs,) mask_il = (gather_il.unsqueeze(-1) <= self.sids) & ( - self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1) - ) + self.sids < (gather_il + torch.pow(self.codebook_size, il)).unsqueeze(-1)) return il, mask_il # (bs,) (bs, sem_ids_count) def get_repeated_sids(self, k: int) -> torch.Tensor: return self.sids.repeat(k, 1) # (k, sem_ids_count) - def get_request_embeddings( - self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor - ) -> torch.Tensor: + def get_request_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) @@ -174,16 +129,11 @@ def get_request_embeddings( assert decomposed_embeddings.shape[1:] == (self.sem_id_len + 1, self.emb_dim) assert levels.shape == (decomposed_embeddings.shape[0],) - mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange( - self.sem_id_len + 2, 0, -1, device=self.device - ).unsqueeze(1) - return torch.sum( - decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1 - ) # (bs, emb_dim) + mask = torch.arange(1, self.sem_id_len + 2, device=self.device) >= torch.arange(self.sem_id_len + 2, 0, -1, + device=self.device).unsqueeze(1) + return torch.sum(decomposed_embeddings * mask[levels + 1].unsqueeze(-1), dim=1) # (bs, emb_dim) - def calculate_full( - self, sem_ids: torch.Tensor, residuals: torch.Tensor - ) -> torch.Tensor: + def calculate_full(self, sem_ids: torch.Tensor, residuals: torch.Tensor) -> torch.Tensor: """ :param sem_ids: sem_ids (count, sem_id_len) :param residuals: остатки для каждого sem_id (count, emb_dim) @@ -195,56 +145,31 @@ def calculate_full( count = residuals.shape[0] index = sem_ids.view(count, -1, 1, 1).expand(-1, -1, -1, self.emb_dim) - embs = torch.gather( - input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), - dim=2, - index=index, - ) # expand бесплатный по памяти - decomposed_embs = torch.concat( - [embs.squeeze(2), residuals.unsqueeze(1)], dim=1 - ) # (sem_ids_count, emb_dim) - - assert decomposed_embs.shape == ( - sem_ids.shape[0], - self.sem_id_len + 1, - self.emb_dim, - ) + embs = torch.gather(input=self.embedding_table.unsqueeze(0).expand(count, -1, -1, -1), dim=2, + index=index) # expand бесплатный по памяти + decomposed_embs = torch.concat([embs.squeeze(2), residuals.unsqueeze(1)], dim=1) # (sem_ids_count, emb_dim) + + assert decomposed_embs.shape == (sem_ids.shape[0], self.sem_id_len + 1, self.emb_dim) return decomposed_embs - def calculate_level_embeddings( - self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor - ) -> torch.Tensor: + def calculate_level_embeddings(self, decomposed_embeddings: torch.Tensor, levels: torch.Tensor) -> torch.Tensor: """ :param decomposed_embeddings: разложение sem_ids на эмбеддинги (count, sem_id_len +1, emb_dim) :param levels: сколько нужно взять эмбеддингов для суммы для каждого sem_id (count,) :return: эмбеддинги для всех sem_ids для нужных глубин (batch_size, sem_ids_count, emb_dim) """ - assert decomposed_embeddings.shape == ( - self.sem_ids_count, - self.sem_id_len + 1, - self.emb_dim, - ) - - mask = ( - torch.arange(1, self.sem_id_len + 2, device=self.device) - >= torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1) - ).float() + assert decomposed_embeddings.shape == (self.sem_ids_count, self.sem_id_len + 1, self.emb_dim) + + mask = (torch.arange(1, self.sem_id_len + 2, device=self.device) >= + torch.arange(self.sem_id_len + 2, 0, -1, device=self.device).unsqueeze(1)).float() sids_mask = mask[levels + 1].unsqueeze(-1) # (batch_size, sem_id_len + 1, 1) - return torch.einsum( - "nld,bld->bnd", decomposed_embeddings, sids_mask - ) # (batch_size, sem_ids_count, emb_dim) + return torch.einsum('nld,bld->bnd', decomposed_embeddings, sids_mask) # (batch_size, sem_ids_count, emb_dim) def mask_result(self, result: torch.Tensor, mask: torch.Tensor) -> torch.Tensor: - return torch.where( - mask, result, torch.tensor(float("-inf"), device=self.device) - ) - - def query( - self, - request_sem_ids: torch.Tensor, - request_residuals: torch.Tensor, - items_to_query: int, - ) -> torch.Tensor: + return torch.where(mask, result, torch.tensor(float('-inf'), device=self.device)) + + def query(self, request_sem_ids: torch.Tensor, request_residuals: torch.Tensor, + items_to_query: int) -> torch.Tensor: """ :param request_sem_ids: батч из sem_ids (batch_size, sem_id_len) :param request_residuals: батч из остатков (batch_size, emb_dim) @@ -272,31 +197,13 @@ def query( ol_request_embeddings = self.get_request_embeddings(request_embs, ol) il_request_embeddings = self.get_request_embeddings(request_embs, il) - ol_scores = ( - torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)) - .squeeze(-1) - .detach() - .cpu() - ) - - il_scores = ( - torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)) - .squeeze(-1) - .detach() - .cpu() - ) - - ids = np.lexsort( - keys=( - -torch.cat([il_scores, ol_scores], dim=1), - ~torch.cat( - [torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1 - ), - ~torch.cat([il_mask, ol_mask], dim=1), - ) - ) - - ids = (ids % self.sem_ids_count)[:, : self.sem_ids_count][ - :, :items_to_query - ] # (batch_size, k) + ol_scores = torch.matmul(ol_sids_embeddings, ol_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + il_scores = torch.matmul(il_sids_embeddings, il_request_embeddings.unsqueeze(-1)).squeeze(-1).detach().cpu() + + ids = np.lexsort(keys=(-torch.cat([il_scores, ol_scores], dim=1), + ~torch.cat([torch.ones_like(il_mask), torch.zeros_like(ol_mask)], dim=1), + ~torch.cat([il_mask, ol_mask], dim=1))) + + ids = (ids % self.sem_ids_count)[:, :self.sem_ids_count][:, :items_to_query] # (batch_size, k) return self.item_ids[ids] diff --git a/modeling/rqvae_utils/tree_comparing.py b/modeling/rqvae_utils/tree_comparing.py index f73db7c6..3f1d3f38 100644 --- a/modeling/rqvae_utils/tree_comparing.py +++ b/modeling/rqvae_utils/tree_comparing.py @@ -6,20 +6,20 @@ import torch from models.rqvae import RqVaeModel -from rqvae_utils import SimplifiedTree, Tree, Trie +from rqvae_utils import Trie, SimplifiedTree, Tree from utils import DEVICE def memory_stats(k): process = psutil.Process(os.getpid()) - memory_usage = process.memory_info().rss / 1024**2 + memory_usage = process.memory_info().rss / 1024 ** 2 print(f"{k}. Использование памяти: {memory_usage:.2f} MB") def calc_sid(sid, codebook_size): res = sid[-1] for i in range(1, sid.shape[0]): - res += sid[-i - 1] * (codebook_size**i) + res += sid[-i - 1] * (codebook_size ** i) return res @@ -41,7 +41,9 @@ def stats(query_sem_id, codebook_size, sids, item_ids): ) rqvae_model.eval() - emb_table = torch.stack([cb for cb in rqvae_model.codebooks]).to(DEVICE) + emb_table = torch.stack( + [cb for cb in rqvae_model.codebooks] + ).to(DEVICE) trie = Trie(rqvae_model) tree = Tree(rqvae_model, DEVICE) @@ -71,18 +73,14 @@ def stats(query_sem_id, codebook_size, sids, item_ids): now = time.time() simplified_tree_wr.build_tree_structure(semantic_ids, residuals, item_ids, False) - print( - f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms" - ) + print(f"Time for simplified tree without residuals init: {(time.time() - now) * 1000:.2f} ms") full_embeddings = tree.calculate_full(semantic_ids, residuals).sum(1) print(torch.all((full_embeddings == simplified_tree.full_embeddings) == True)) items_to_query = 20 batch_size = 256 - q_semantic_ids = torch.randint( - 0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE - ) + q_semantic_ids = torch.randint(0, alphabet_size, (batch_size, K), dtype=torch.int64, device=DEVICE) q_residuals = torch.randn(batch_size, embedding_dim).to(DEVICE) total_time = 0 diff --git a/modeling/rqvae_utils/trie.py b/modeling/rqvae_utils/trie.py index 4a4ca5b7..b7971e86 100644 --- a/modeling/rqvae_utils/trie.py +++ b/modeling/rqvae_utils/trie.py @@ -2,7 +2,6 @@ import time import torch - from models.rqvae import RqVaeModel from utils import DEVICE diff --git a/modeling/train.py b/modeling/train.py index 4919be6f..d865620d 100644 --- a/modeling/train.py +++ b/modeling/train.py @@ -1,32 +1,23 @@ -import copy -import json -import os - -import torch - import utils +from utils import parse_args, create_logger, DEVICE, fix_random_seed + from callbacks import BaseCallback -from dataloader import BaseDataloader from dataset import BaseDataset +from dataloader import BaseDataloader from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer -from utils import DEVICE, create_logger, fix_random_seed, parse_args + +import copy +import json +import os +import torch logger = create_logger(name=__name__) seed_val = 42 -def train( - dataloader, - model, - optimizer, - loss_function, - callback, - epoch_cnt=None, - step_cnt=None, - best_metric=None, -): +def train(dataloader, model, optimizer, loss_function, callback, epoch_cnt=None, step_cnt=None, best_metric=None): step_num = 0 epoch_num = 0 current_metric = 0 @@ -36,20 +27,14 @@ def train( best_epoch = 0 best_checkpoint = None - logger.debug("Start training...") + logger.debug('Start training...') - while (epoch_cnt is None or epoch_num < epoch_cnt) and ( - step_cnt is None or step_num < step_cnt - ): + while (epoch_cnt is None or epoch_num < epoch_cnt) and (step_cnt is None or step_num < step_cnt): if best_epoch + epochs_threshold < epoch_num: - logger.debug( - "There is no progress during {} epochs. Finish training".format( - epochs_threshold - ) - ) + logger.debug('There is no progress during {} epochs. Finish training'.format(epochs_threshold)) break - logger.debug(f"Start epoch {epoch_num}") + logger.debug(f'Start epoch {epoch_num}') for step, batch in enumerate(dataloader): batch_ = copy.deepcopy(batch) @@ -69,18 +54,14 @@ def train( # Take the last model best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num - elif ( - best_checkpoint is None - or best_metric in batch_ - and current_metric <= batch_[best_metric] - ): + elif best_checkpoint is None or best_metric in batch_ and current_metric <= batch_[best_metric]: # If it is the first checkpoint, or it is the best checkpoint current_metric = batch_[best_metric] best_checkpoint = copy.deepcopy(model.state_dict()) best_epoch = epoch_num epoch_num += 1 - logger.debug("Training procedure has been finished!") + logger.debug('Training procedure has been finished!') return best_checkpoint @@ -88,54 +69,59 @@ def main(): fix_random_seed(seed_val) config = parse_args() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter( - config["experiment_name"] - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = \ + utils.tensorboards.TensorboardWriter(config['experiment_name']) - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) - logger.debug("Current DEVICE: {}".format(DEVICE)) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) + logger.debug('Current DEVICE: {}'.format(DEVICE)) - dataset = BaseDataset.create_from_config(config["dataset"]) + dataset = BaseDataset.create_from_config(config['dataset']) train_sampler, validation_sampler, test_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=validation_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=validation_sampler, + **dataset.meta ) eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=test_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=test_sampler, + **dataset.meta ) - model = BaseModel.create_from_config(config["model"], **dataset.meta).to(DEVICE) - if "checkpoint" in config: - checkpoint_path = os.path.join("../checkpoints", f"{config['checkpoint']}.pth") - logger.debug("Loading checkpoint from {}".format(checkpoint_path)) + model = BaseModel.create_from_config(config['model'], **dataset.meta).to(DEVICE) + if 'checkpoint' in config: + checkpoint_path = os.path.join('../checkpoints', f'{config["checkpoint"]}.pth') + logger.debug('Loading checkpoint from {}'.format(checkpoint_path)) checkpoint = torch.load(checkpoint_path) print(checkpoint.keys()) model.load_state_dict(checkpoint) - loss_function = BaseLoss.create_from_config(config["loss"]) + loss_function = BaseLoss.create_from_config(config['loss']) - optimizer = BaseOptimizer.create_from_config(config["optimizer"], model=model) + optimizer = BaseOptimizer.create_from_config(config['optimizer'], model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta, + **dataset.meta ) # TODO add verbose option for all callbacks, multiple optimizer options (???) # TODO create pre/post callbacks - logger.debug("Everything is ready for training process!") + logger.debug('Everything is ready for training process!') # Train process _ = train( @@ -144,18 +130,16 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get("train_epochs_num"), - step_cnt=config.get("train_steps_num"), - best_metric=config.get("best_metric"), + epoch_cnt=config.get('train_epochs_num'), + step_cnt=config.get('train_steps_num'), + best_metric=config.get('best_metric') ) - logger.debug("Saving model...") - checkpoint_path = "../checkpoints/{}_final_state.pth".format( - config["experiment_name"] - ) + logger.debug('Saving model...') + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(config['experiment_name']) torch.save(model.state_dict(), checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/train_multiple.py b/modeling/train_multiple.py index 8c118584..c42f77a6 100644 --- a/modeling/train_multiple.py +++ b/modeling/train_multiple.py @@ -1,26 +1,20 @@ import itertools import json import random - import torch import utils +from utils import parse_args, create_logger, DEVICE, Params, dict_to_str, fix_random_seed + +from train import train +from infer import inference + from callbacks import BaseCallback, EvalCallback, ValidationCallback -from dataloader import BaseDataloader from dataset import BaseDataset -from infer import inference +from dataloader import BaseDataloader from loss import BaseLoss from models import BaseModel from optimizer import BaseOptimizer -from train import train -from utils import ( - DEVICE, - Params, - create_logger, - dict_to_str, - fix_random_seed, - parse_args, -) logger = create_logger(name=__name__) seed_val = 42 @@ -30,23 +24,24 @@ def main(): fix_random_seed(seed_val) config = parse_args() - logger.debug("Training config: \n{}".format(json.dumps(config, indent=2))) + logger.debug('Training config: \n{}'.format(json.dumps(config, indent=2))) - dataset_params = Params(config["dataset"], config["dataset_params"]) - model_params = Params(config["model"], config["model_params"]) - loss_function_params = Params(config["loss"], config["loss_params"]) - optimizer_params = Params(config["optimizer"], config["optimizer_params"]) + dataset_params = Params(config['dataset'], config['dataset_params']) + model_params = Params(config['model'], config['model_params']) + loss_function_params = Params(config['loss'], config['loss_params']) + optimizer_params = Params(config['optimizer'], config['optimizer_params']) - logger.debug("Everything is ready for training process!") + logger.debug('Everything is ready for training process!') - start_from = config.get("start_from", 0) - num = config.get("num_exps", None) + start_from = config.get('start_from', 0) + num = config.get('num_exps', None) - list_of_params = list( - itertools.product( - dataset_params, model_params, loss_function_params, optimizer_params - ) - ) + list_of_params = list(itertools.product( + dataset_params, + model_params, + loss_function_params, + optimizer_params + )) if num is None: num = len(list_of_params) @@ -55,61 +50,59 @@ def main(): cnt = 0 - for dataset_param, model_param, loss_param, optimizer_param in list_of_params[ - start_from:num - ]: + for dataset_param, model_param, loss_param, optimizer_param in list_of_params[start_from:num]: cnt += 1 if cnt < start_from: continue - model_name = "_".join( - [ - config["experiment_name"], - dict_to_str(dataset_param, config["dataset_params"]), - dict_to_str(model_param, config["model_params"]), - dict_to_str(loss_param, config["loss_params"]), - dict_to_str(optimizer_param, config["optimizer_params"]), - ] - ) + model_name = '_'.join([ + config['experiment_name'], + dict_to_str(dataset_param, config['dataset_params']), + dict_to_str(model_param, config['model_params']), + dict_to_str(loss_param, config['loss_params']), + dict_to_str(optimizer_param, config['optimizer_params']) + ]) - logger.debug("Starting {}".format(model_name)) + logger.debug('Starting {}'.format(model_name)) dataset = BaseDataset.create_from_config(dataset_param) train_sampler, validation_sampler, eval_sampler = dataset.get_samplers() train_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["train"], dataset=train_sampler, **dataset.meta + config['dataloader']['train'], + dataset=train_sampler, + **dataset.meta ) validation_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], + config['dataloader']['validation'], dataset=validation_sampler, - **dataset.meta, + **dataset.meta ) eval_dataloader = BaseDataloader.create_from_config( - config["dataloader"]["validation"], dataset=eval_sampler, **dataset.meta + config['dataloader']['validation'], + dataset=eval_sampler, + **dataset.meta ) if utils.tensorboards.GLOBAL_TENSORBOARD_WRITER is not None: utils.tensorboards.GLOBAL_TENSORBOARD_WRITER.close() - utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = ( - utils.tensorboards.TensorboardWriter(model_name, use_time=False) - ) + utils.tensorboards.GLOBAL_TENSORBOARD_WRITER = utils.tensorboards.TensorboardWriter(model_name, use_time=False) model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) loss_function = BaseLoss.create_from_config(loss_param) optimizer = BaseOptimizer.create_from_config(optimizer_param, model=model) callback = BaseCallback.create_from_config( - config["callback"], + config['callback'], model=model, train_dataloader=train_dataloader, validation_dataloader=validation_dataloader, eval_dataloader=eval_dataloader, optimizer=optimizer, - **dataset.meta, + **dataset.meta ) best_model_checkpoint = train( @@ -118,13 +111,11 @@ def main(): optimizer=optimizer, loss_function=loss_function, callback=callback, - epoch_cnt=config.get("train_epochs_num"), - best_metric=config.get("best_metric"), + epoch_cnt=config.get('train_epochs_num'), + best_metric=config.get('best_metric') ) - eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to( - DEVICE - ) + eval_model = BaseModel.create_from_config(model_param, **dataset.meta).to(DEVICE) eval_model.load_state_dict(best_model_checkpoint) for cl in callback._callbacks: @@ -145,11 +136,11 @@ def main(): inference(eval_dataloader, eval_model, metrics, pred_prefix, labels_prefix) - logger.debug("Saving best model checkpoint...") - checkpoint_path = "../checkpoints/{}_final_state.pth".format(model_name) + logger.debug('Saving best model checkpoint...') + checkpoint_path = '../checkpoints/{}_final_state.pth'.format(model_name) torch.save(best_model_checkpoint, checkpoint_path) - logger.debug("Saved model as {}".format(checkpoint_path)) + logger.debug('Saved model as {}'.format(checkpoint_path)) -if __name__ == "__main__": +if __name__ == '__main__': main() diff --git a/modeling/utils/__init__.py b/modeling/utils/__init__.py index 1d62369e..8b96ac52 100644 --- a/modeling/utils/__init__.py +++ b/modeling/utils/__init__.py @@ -1,37 +1,39 @@ -import argparse +from utils.registry import MetaParent +from utils.grid_search import Params +import utils.tensorboards + import json -import logging import random - +import logging +import argparse import numpy as np -import torch -import utils.tensorboards -from utils.grid_search import Params -from utils.registry import MetaParent +import torch if torch.cuda.is_available(): - DEVICE = torch.device("cuda") + DEVICE = torch.device('cuda:0') +# elif torch.backends.mps.is_available(): +# DEVICE = torch.device("mps:0") else: - DEVICE = torch.device("cpu") + DEVICE = torch.device('cpu') def parse_args(): parser = argparse.ArgumentParser() - parser.add_argument("--params", required=True) + parser.add_argument('--params', required=True) args = parser.parse_args() with open(args.params) as f: params = json.load(f) - + return params def create_logger( - name, - level=logging.DEBUG, - format="[%(asctime)s] [%(levelname)s]: %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", + name, + level=logging.DEBUG, + format='[%(asctime)s] [%(levelname)s]: %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' ): logging.basicConfig(level=level, format=format, datefmt=datefmt) logger = logging.getLogger(name) @@ -52,31 +54,26 @@ def maybe_to_list(values): def get_activation_function(name, **kwargs): - if name == "relu": + if name == 'relu': return torch.nn.ReLU() - elif name == "gelu": + elif name == 'gelu': return torch.nn.GELU() - elif name == "elu": - return torch.nn.ELU(alpha=float(kwargs.get("alpha", 1.0))) - elif name == "leaky": - return torch.nn.LeakyReLU( - negative_slope=float(kwargs.get("negative_slope", 1e-2)) - ) - elif name == "sigmoid": + elif name == 'elu': + return torch.nn.ELU(alpha=float(kwargs.get('alpha', 1.0))) + elif name == 'leaky': + return torch.nn.LeakyReLU(negative_slope=float(kwargs.get('negative_slope', 1e-2))) + elif name == 'sigmoid': return torch.nn.Sigmoid() - elif name == "tanh": + elif name == 'tanh': return torch.nn.Tanh() - elif name == "softmax": + elif name == 'softmax': return torch.nn.Softmax() - elif name == "softplus": - return torch.nn.Softplus( - beta=int(kwargs.get("beta", 1.0)), - threshold=int(kwargs.get("threshold", 20)), - ) - elif name == "softmax_logit": + elif name == 'softplus': + return torch.nn.Softplus(beta=int(kwargs.get('beta', 1.0)), threshold=int(kwargs.get('threshold', 20))) + elif name == 'softmax_logit': return torch.nn.LogSoftmax() else: - raise ValueError("Unknown activation function name `{}`".format(name)) + raise ValueError('Unknown activation function name `{}`'.format(name)) def dict_to_str(x, params): @@ -85,21 +82,19 @@ def dict_to_str(x, params): if k in params: if isinstance(v, dict): # part = '_'.join([f'{k}-{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) - part = "_".join( - [f"{sub_part}" for sub_part in dict_to_str(v, params[k]).split("_")] - ) + part = '_'.join([f'{sub_part}' for sub_part in dict_to_str(v, params[k]).split('_')]) elif isinstance(v, tuple) or isinstance(v, list): sub_strings = [] for i, sub_value in enumerate(v): - sub_strings.append(f"({i})_{dict_to_str(v[i], params[k][i])}") - part = f"({'_'.join(sub_strings)})" + sub_strings.append(f'({i})_{dict_to_str(v[i], params[k][i])}') + part = f'({"_".join(sub_strings)})' else: # part = f'{k}-{v}' - part = f"{v}" + part = f'{v}' parts.append(part) else: continue - return "_".join(parts).replace(".", "-") + return '_'.join(parts).replace('.', '-') def create_masked_tensor(data, lengths): @@ -108,22 +103,20 @@ def create_masked_tensor(data, lengths): if len(data.shape) == 1: # only indices padded_tensor = torch.zeros( - batch_size, max_sequence_length, dtype=data.dtype, device=DEVICE + batch_size, max_sequence_length, + dtype=data.dtype, device=DEVICE ) # (batch_size, max_seq_len) else: assert len(data.shape) == 2 # embeddings padded_tensor = torch.zeros( - batch_size, - max_sequence_length, - data.shape[-1], - dtype=data.dtype, - device=DEVICE, + batch_size, max_sequence_length, data.shape[-1], + dtype=data.dtype, device=DEVICE ) # (batch_size, max_seq_len, emb_dim) - mask = ( - torch.arange(end=max_sequence_length, device=DEVICE)[None].tile([batch_size, 1]) - < lengths[:, None] - ) # (batch_size, max_seq_len) + mask = torch.arange( + end=max_sequence_length, + device=DEVICE + )[None].tile([batch_size, 1]) < lengths[:, None] # (batch_size, max_seq_len) padded_tensor[mask] = data diff --git a/modeling/utils/grid_search.py b/modeling/utils/grid_search.py index d7330421..268d9458 100644 --- a/modeling/utils/grid_search.py +++ b/modeling/utils/grid_search.py @@ -3,6 +3,7 @@ class Params: + def __init__(self, config, params): self._initial_config = copy.deepcopy(config) self._initial_params = copy.deepcopy(params) @@ -11,9 +12,7 @@ def __iter__(self): keys = [] values = [] - all_keys = set(self._initial_config.keys()).union( - set(self._initial_params.keys()) - ) + all_keys = set(self._initial_config.keys()).union(set(self._initial_params.keys())) for field_name in all_keys: keys.append(field_name) @@ -22,28 +21,18 @@ def __iter__(self): params_fields_value = self._initial_params.get(field_name) if initial_field_value: - if ( - params_fields_value is None - ): # We don't want to iterate through this field + if params_fields_value is None: # We don't want to iterate through this field values.append([initial_field_value]) - elif isinstance(initial_field_value, list) and isinstance( - initial_field_value, list - ): + elif isinstance(initial_field_value, list) and isinstance(initial_field_value, list): assert len(initial_field_value) == len(params_fields_value) list_values = [] for i in range(len(initial_field_value)): - field_variations = list( - Params(initial_field_value[i], params_fields_value[i]) - ) + field_variations = list(Params(initial_field_value[i], params_fields_value[i])) list_values.append(field_variations) list_values = [p for p in product(*list_values)] values.append(list_values) - elif isinstance( - initial_field_value, dict - ): # It is composite param, need to go inside - field_variations = list( - Params(initial_field_value, params_fields_value) - ) + elif isinstance(initial_field_value, dict): # It is composite param, need to go inside + field_variations = list(Params(initial_field_value, params_fields_value)) values.append(field_variations) else: # Simple param, can take as it is values.append([initial_field_value] + params_fields_value) diff --git a/modeling/utils/registry.py b/modeling/utils/registry.py index 3942269b..c2225480 100644 --- a/modeling/utils/registry.py +++ b/modeling/utils/registry.py @@ -2,6 +2,7 @@ class MetaParent(type): + def __init__(cls, name, base, params, **kwargs): super().__init__(name, base, params) is_base_class = cls.mro()[1] is object @@ -11,10 +12,10 @@ def __init__(cls, name, base, params, **kwargs): base_class_found = False for key in cls.mro(): if isinstance(key, MetaParent) and key.mro()[1] is object: - assert base_class_found is False, "multiple base classes(bug)" + assert base_class_found is False, 'multiple base classes(bug)' base_class = key base_class_found = True - assert base_class_found is True, f"no base class for {name}" + assert base_class_found is True, f'no base class for {name}' if is_base_class: cls._subclasses = {} @@ -24,9 +25,7 @@ def __init_subclass__(scls, config_name=None): super().__init_subclass__() if config_name is not None: if config_name in base_class._subclasses: - raise ValueError( - "Class with name `{}` is already registered".format(config_name) - ) + raise ValueError("Class with name `{}` is already registered".format(config_name)) scls.config_name = config_name base_class._subclasses[config_name] = scls @@ -34,19 +33,15 @@ def __init_subclass__(scls, config_name=None): @classmethod def parent_create_from_config(cls, config, **kwargs): - if "type" in config: - return cls._subclasses[config["type"]].create_from_config( - config, **kwargs - ) + if 'type' in config: + return cls._subclasses[config['type']].create_from_config(config, **kwargs) else: - raise ValueError( - "There is no `type` provided for the `{}` class".format(name) - ) + raise ValueError('There is no `type` provided for the `{}` class'.format(name)) # Take kwargs for the last initialized baseclass init_kwargs = {} for bcls in cls.mro()[:-1]: # Look into all base classes except object - if "__init__" not in bcls.__dict__: + if '__init__' not in bcls.__dict__: continue init_kwargs = inspect.signature(bcls.__init__).parameters break @@ -55,16 +50,14 @@ def parent_create_from_config(cls, config, **kwargs): def child_create_from_config(cls, config, **kwargs): kwargs = {} for key, argspec in init_kwargs.items(): - if key == "self": + if key == 'self': continue value = config.get(key, argspec.default) if value is inspect.Parameter.empty: - msg = "There is no value for `{}.__init__` required field `{}` in config `{}`" + msg = 'There is no value for `{}.__init__` required field `{}` in config `{}`' raise ValueError(msg.format(cls, key, config)) kwargs[key] = value return cls(**kwargs) - if "create_from_config" not in cls.__dict__: - cls.create_from_config = ( - parent_create_from_config if is_base_class else child_create_from_config - ) + if 'create_from_config' not in cls.__dict__: + cls.create_from_config = parent_create_from_config if is_base_class else child_create_from_config diff --git a/modeling/utils/tensorboards/__init__.py b/modeling/utils/tensorboards/__init__.py index a2f8f279..6c470341 100644 --- a/modeling/utils/tensorboards/__init__.py +++ b/modeling/utils/tensorboards/__init__.py @@ -1 +1 @@ -from .tensorboard_writers import GLOBAL_TENSORBOARD_WRITER, LOGS_DIR, TensorboardWriter +from .tensorboard_writers import TensorboardWriter, GLOBAL_TENSORBOARD_WRITER, LOGS_DIR diff --git a/modeling/utils/tensorboards/tensorboard_writers.py b/modeling/utils/tensorboards/tensorboard_writers.py index e788a6f8..770fae63 100644 --- a/modeling/utils/tensorboards/tensorboard_writers.py +++ b/modeling/utils/tensorboards/tensorboard_writers.py @@ -1,21 +1,19 @@ -import datetime import os import time +import datetime from torch.utils.tensorboard import SummaryWriter -LOGS_DIR = "../tensorboard_logs" +LOGS_DIR = '../tensorboard_logs' GLOBAL_TENSORBOARD_WRITER = None class TensorboardWriter(SummaryWriter): + def __init__(self, experiment_name, use_time=True): self._experiment_name = experiment_name super().__init__( - log_dir=os.path.join( - LOGS_DIR, - f"{experiment_name}_{datetime.datetime.now().strftime('%Y-%m-%dT%H:%M' if use_time else '')}", - ) + log_dir=os.path.join(LOGS_DIR, f'{experiment_name}_{datetime.datetime.now().strftime("%Y-%m-%dT%H:%M" if use_time else "")}') ) def add_scalar(self, *args, **kwargs): @@ -23,6 +21,7 @@ def add_scalar(self, *args, **kwargs): class TensorboardTimer: + def __init__(self, scope): super().__init__(LOGS_DIR) self._scope = scope From 91b3f694dcbfc425a3b0e85ca49e3e8870b04344 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 22:32:18 +0300 Subject: [PATCH 166/175] bump deps --- pyproject.toml | 18 +- uv.lock | 579 ++++++++++++++++++++++++++----------------------- 2 files changed, 317 insertions(+), 280 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 77289265..b342c5a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,23 +5,23 @@ description = "IRec framework" readme = "README.md" requires-python = ">=3.13" dependencies = [ - "faiss-cpu>=1.10.0", - "pandas>=2.2.3", - "scipy>=1.15.2", + "faiss-cpu>=1", + "pandas>=2", + "scipy>=1", "seaborn>=0.13.2", - "tensorboard>=2.19.0", - "torch>=2.6.0", - "transformers>=4.51.0", + "tensorboard>=2", + "torch>=2.7", + "transformers>=4.51", ] [tool.uv.sources] torch = [ - { index = "pytorch-cu124" }, + { index = "pytorch-cu128" }, ] [[tool.uv.index]] -name = "pytorch-cu124" -url = "https://download.pytorch.org/whl/cu124" +name = "pytorch-cu128" +url = "https://download.pytorch.org/whl/cu128" explicit = true [dependency-groups] diff --git a/uv.lock b/uv.lock index 24c7adf0..daa79a32 100644 --- a/uv.lock +++ b/uv.lock @@ -4,42 +4,42 @@ requires-python = ">=3.13" [[package]] name = "absl-py" -version = "2.2.2" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/f0/e6342091061ed3a46aadc116b13edd7bb5249c3ab1b3ef07f24b0c248fc3/absl_py-2.2.2.tar.gz", hash = "sha256:bf25b2c2eed013ca456918c453d687eab4e8309fba81ee2f4c1a6aa2494175eb", size = 119982 } +sdist = { url = "https://files.pythonhosted.org/packages/03/15/18693af986560a5c3cc0b84a8046b536ffb2cdb536e03cce897f2759e284/absl_py-2.3.0.tar.gz", hash = "sha256:d96fda5c884f1b22178852f30ffa85766d50b99e00775ea626c23304f582fc4f", size = 116400 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/d4/349f7f4bd5ea92dab34f5bb0fe31775ef6c311427a14d5a5b31ecb442341/absl_py-2.2.2-py3-none-any.whl", hash = "sha256:e5797bc6abe45f64fd95dc06394ca3f2bedf3b5d895e9da691c9ee3397d70092", size = 135565 }, + { url = "https://files.pythonhosted.org/packages/87/04/9d75e1d3bb4ab8ec67ff10919476ccdee06c098bcfcf3a352da5f985171d/absl_py-2.3.0-py3-none-any.whl", hash = "sha256:9824a48b654a306168f63e0d97714665f8490b8d89ec7bf2efc24bf67cf579b3", size = 135657 }, ] [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.4.26" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, + { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 }, ] [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, - { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, - { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, - { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, - { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, - { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, - { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, - { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, - { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, - { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, - { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, - { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, - { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, - { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, ] [[package]] @@ -53,33 +53,33 @@ wheels = [ [[package]] name = "contourpy" -version = "1.3.1" +version = "1.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, - { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, - { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, - { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, - { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, - { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, - { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, - { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, - { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, - { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, - { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, - { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, - { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, - { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, - { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, - { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, - { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, - { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, - { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, - { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, + { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, ] [[package]] @@ -93,19 +93,19 @@ wheels = [ [[package]] name = "faiss-cpu" -version = "1.10.0" +version = "1.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/1b/6fe5dbe5be0240cfd82b52bd7c186655c578d935c0ce2e713c100e6f8cce/faiss_cpu-1.10.0.tar.gz", hash = "sha256:5bdca555f24bc036f4d67f8a5a4d6cc91b8d2126d4e78de496ca23ccd46e479d", size = 69159 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/9a/e33fc563f007924dd4ec3c5101fe5320298d6c13c158a24a9ed849058569/faiss_cpu-1.11.0.tar.gz", hash = "sha256:44877b896a2b30a61e35ea4970d008e8822545cb340eca4eff223ac7f40a1db9", size = 70218 } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/25/23239a83142faa319c4f8c025e25fec6cccc7418995eba3515218a57a45b/faiss_cpu-1.10.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:cb8473d69c3964c1bf3f8eb3e04287bb3275f536e6d9635ef32242b5f506b45d", size = 7720240 }, - { url = "https://files.pythonhosted.org/packages/18/f1/0e979277831af337739dbacf386d8a359a05eef9642df23d36e6c7d1b1a9/faiss_cpu-1.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82ca5098de694e7b8495c1a8770e2c08df6e834922546dad0ae1284ff519ced6", size = 3239224 }, - { url = "https://files.pythonhosted.org/packages/bd/fa/c2ad85b017a5754f6cdb09c179f8c4f4198d2a264046a8daa7a4d080521f/faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:035e4d797e2db7fc0d0c90531d4a655d089ad5d1382b7a49358c1f2307b3a309", size = 3671236 }, - { url = "https://files.pythonhosted.org/packages/4f/9b/759962f2c34800058f6a76457df3b0ab93b24f383650ea1ef0231acd322c/faiss_cpu-1.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e02af3696a6b9e1f9072e502f48095a305de2163c42ceb1f6f6b1db9e7ffe574", size = 30663948 }, - { url = "https://files.pythonhosted.org/packages/2c/9a/6c496e0189897761978653177386452d62f4060579413d109bff05f458f2/faiss_cpu-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac", size = 13687212 }, + { url = "https://files.pythonhosted.org/packages/92/90/d2329ce56423cc61f4c20ae6b4db001c6f88f28bf5a7ef7f8bbc246fd485/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:0c98e5feff83b87348e44eac4d578d6f201780dae6f27f08a11d55536a20b3a8", size = 3313807 }, + { url = "https://files.pythonhosted.org/packages/24/14/8af8f996d54e6097a86e6048b1a2c958c52dc985eb4f935027615079939e/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:796e90389427b1c1fb06abdb0427bb343b6350f80112a2e6090ac8f176ff7416", size = 7913539 }, + { url = "https://files.pythonhosted.org/packages/b2/2b/437c2f36c3aa3cffe041479fced1c76420d3e92e1f434f1da3be3e6f32b1/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b6e355dda72b3050991bc32031b558b8f83a2b3537a2b9e905a84f28585b47e", size = 3785181 }, + { url = "https://files.pythonhosted.org/packages/66/75/955527414371843f558234df66fa0b62c6e86e71e4022b1be9333ac6004c/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6c482d07194638c169b4422774366e7472877d09181ea86835e782e6304d4185", size = 31287635 }, + { url = "https://files.pythonhosted.org/packages/50/51/35b7a3f47f7859363a367c344ae5d415ea9eda65db0a7d497c7ea2c0b576/faiss_cpu-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:13eac45299532b10e911bff1abbb19d1bf5211aa9e72afeade653c3f1e50e042", size = 15005455 }, ] [[package]] @@ -119,64 +119,80 @@ wheels = [ [[package]] name = "fonttools" -version = "4.57.0" +version = "4.58.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 } +sdist = { url = "https://files.pythonhosted.org/packages/b6/a9/3319c6ae07fd9dde51064ddc6d82a2b707efad8ed407d700a01091121bbc/fonttools-4.58.2.tar.gz", hash = "sha256:4b491ddbfd50b856e84b0648b5f7941af918f6d32f938f18e62b58426a8d50e2", size = 3524285 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 }, - { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 }, - { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 }, - { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 }, - { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 }, - { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 }, - { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 }, - { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 }, - { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 }, + { url = "https://files.pythonhosted.org/packages/ac/01/29f81970a508408af20b434ff5136cd1c7ef92198957eb8ddadfbb9ef177/fonttools-4.58.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:829048ef29dbefec35d95cc6811014720371c95bdc6ceb0afd2f8e407c41697c", size = 2732398 }, + { url = "https://files.pythonhosted.org/packages/0c/f1/095f2338359333adb2f1c51b8b2ad94bf9a2fa17e5fcbdf8a7b8e3672d2d/fonttools-4.58.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:64998c5993431e45b474ed5f579f18555f45309dd1cf8008b594d2fe0a94be59", size = 2306390 }, + { url = "https://files.pythonhosted.org/packages/bf/d4/9eba134c7666a26668c28945355cd86e5d57828b6b8d952a5489fe45d7e2/fonttools-4.58.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b887a1cf9fbcb920980460ee4a489c8aba7e81341f6cdaeefa08c0ab6529591c", size = 4795100 }, + { url = "https://files.pythonhosted.org/packages/2a/34/345f153a24c1340daa62340c3be2d1e5ee6c1ee57e13f6d15613209e688b/fonttools-4.58.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27d74b9f6970cefbcda33609a3bee1618e5e57176c8b972134c4e22461b9c791", size = 4864585 }, + { url = "https://files.pythonhosted.org/packages/01/5f/091979a25c9a6c4ba064716cfdfe9431f78ed6ffba4bd05ae01eee3532e9/fonttools-4.58.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec26784610056a770e15a60f9920cee26ae10d44d1e43271ea652dadf4e7a236", size = 4866191 }, + { url = "https://files.pythonhosted.org/packages/9d/09/3944d0ece4a39560918cba37c2e0453a5f826b665a6db0b43abbd9dbe7e1/fonttools-4.58.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed0a71d57dd427c0fb89febd08cac9b925284d2a8888e982a6c04714b82698d7", size = 5003867 }, + { url = "https://files.pythonhosted.org/packages/68/97/190b8f9ba22f8b7d07df2faa9fd7087b453776d0705d3cb5b0cbd89b8ef0/fonttools-4.58.2-cp313-cp313-win32.whl", hash = "sha256:994e362b01460aa863ef0cb41a29880bc1a498c546952df465deff7abf75587a", size = 2175688 }, + { url = "https://files.pythonhosted.org/packages/94/ea/0e6d4a39528dbb6e0f908c2ad219975be0a506ed440fddf5453b90f76981/fonttools-4.58.2-cp313-cp313-win_amd64.whl", hash = "sha256:f95dec862d7c395f2d4efe0535d9bdaf1e3811e51b86432fa2a77e73f8195756", size = 2226464 }, + { url = "https://files.pythonhosted.org/packages/e8/e5/c1cb8ebabb80be76d4d28995da9416816653f8f572920ab5e3d2e3ac8285/fonttools-4.58.2-py3-none-any.whl", hash = "sha256:84f4b0bcfa046254a65ee7117094b4907e22dc98097a220ef108030eb3c15596", size = 1114597 }, ] [[package]] name = "fsspec" -version = "2025.3.2" +version = "2025.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/d8/8425e6ba5fcec61a1d16e41b1b71d2bf9344f1fe48012c2b48b9620feae5/fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6", size = 299281 } +sdist = { url = "https://files.pythonhosted.org/packages/00/f7/27f15d41f0ed38e8fcc488584b57e902b331da7f7c6dcda53721b15838fc/fsspec-2025.5.1.tar.gz", hash = "sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475", size = 303033 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711", size = 194435 }, + { url = "https://files.pythonhosted.org/packages/bb/61/78c7b3851add1481b048b5fdc29067397a1784e2910592bc81bb3f608635/fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462", size = 199052 }, ] [[package]] name = "grpcio" -version = "1.71.0" +version = "1.72.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/45/ff8c80a5a2e7e520d9c4d3c41484a11d33508253f6f4dd06d2c4b4158999/grpcio-1.72.1.tar.gz", hash = "sha256:87f62c94a40947cec1a0f91f95f5ba0aa8f799f23a1d42ae5be667b6b27b959c", size = 12584286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/69/219b0df426cf187535254825b4d4eda8ed3d3bc7dc844725a1ed14f642bf/grpcio-1.72.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:294be6e9c323a197434569a41e0fb5b5aa0962fd5d55a3dc890ec5df985f611a", size = 5183578 }, + { url = "https://files.pythonhosted.org/packages/b2/34/a5a5e037a862b2e90c1465791e091d3d2965d893d90dda6c1e7c0a991eb8/grpcio-1.72.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:41ec164dac8df2862f67457d9cdf8d8f8b6a4ca475a3ed1ba6547fff98d93717", size = 10306253 }, + { url = "https://files.pythonhosted.org/packages/56/8a/8aa932e3833e45772015b2c4a2ebf61649633698f24a84bf55477230b019/grpcio-1.72.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:761736f75c6ddea3732d97eaabe70c616271f5f542a8be95515135fdd1a638f6", size = 5586381 }, + { url = "https://files.pythonhosted.org/packages/0e/43/aff1cc76f8e04a060ec8e733d3c91e198ea9f1602a2a26f05db4185aa2dd/grpcio-1.72.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082003cb93618964c111c70d69b60ac0dc6566d4c254c9b2a775faa2965ba8f8", size = 6231049 }, + { url = "https://files.pythonhosted.org/packages/64/6e/89e5692ee8b67cedcf802553c77538cc0e21c392b37dd51525d89884db17/grpcio-1.72.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8660f736da75424949c14f7c8b1ac60a25b2f37cabdec95181834b405373e8a7", size = 5826465 }, + { url = "https://files.pythonhosted.org/packages/b2/09/bc0b2ea40f797f413f1db4a33dc83c562918b8f970938144756bced82414/grpcio-1.72.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2ada1abe2ad122b42407b2bfd79d6706a4940d4797f44bd740f5c98ca1ecda9b", size = 5944393 }, + { url = "https://files.pythonhosted.org/packages/54/92/9aa2c0c8d855e5b16062ec023ac0a1500b502790bbd724262f188253e90b/grpcio-1.72.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:0db2766d0c482ee740abbe7d00a06cc4fb54f7e5a24d3cf27c3352be18a2b1e8", size = 6573460 }, + { url = "https://files.pythonhosted.org/packages/aa/27/9fdfd66f65ab7e6a4477f7d0b7adf25171d3425760f138f075bc548f6bf4/grpcio-1.72.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4bdb404d9c2187260b34e2b22783c204fba8a9023a166cf77376190d9cf5a08", size = 6120589 }, + { url = "https://files.pythonhosted.org/packages/c3/f3/630c7a00a29001e0b82763fbd50ddcaa7c656d521f29aa58a6c8dd2b7800/grpcio-1.72.1-cp313-cp313-win32.whl", hash = "sha256:bb64722c3124c906a5b66e50a90fd36442642f653ba88a24f67d08e94bca59f3", size = 3545905 }, + { url = "https://files.pythonhosted.org/packages/c4/10/b6186e92eba035315affc30dfeabf65594dd6f778b92627fae5f40e7beec/grpcio-1.72.1-cp313-cp313-win_amd64.whl", hash = "sha256:329cc6ff5b431df9614340d3825b066a1ff0a5809a01ba2e976ef48c65a0490b", size = 4221454 }, +] + +[[package]] +name = "hf-xet" +version = "1.1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/95/aa11fc09a85d91fbc7dd405dcb2a1e0256989d67bf89fa65ae24b3ba105a/grpcio-1.71.0.tar.gz", hash = "sha256:2b85f7820475ad3edec209d3d89a7909ada16caab05d3f2e08a7e8ae3200a55c", size = 12549828 } +sdist = { url = "https://files.pythonhosted.org/packages/75/dc/dc091aeeb671e71cbec30e84963f9c0202c17337b24b0a800e7d205543e8/hf_xet-1.1.3.tar.gz", hash = "sha256:a5f09b1dd24e6ff6bcedb4b0ddab2d81824098bb002cf8b4ffa780545fa348c3", size = 488127 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/dd/b00cbb45400d06b26126dcfdbdb34bb6c4f28c3ebbd7aea8228679103ef6/grpcio-1.71.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:cebc1b34ba40a312ab480ccdb396ff3c529377a2fce72c45a741f7215bfe8379", size = 5184138 }, - { url = "https://files.pythonhosted.org/packages/ed/0a/4651215983d590ef53aac40ba0e29dda941a02b097892c44fa3357e706e5/grpcio-1.71.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:85da336e3649a3d2171e82f696b5cad2c6231fdd5bad52616476235681bee5b3", size = 11310747 }, - { url = "https://files.pythonhosted.org/packages/57/a3/149615b247f321e13f60aa512d3509d4215173bdb982c9098d78484de216/grpcio-1.71.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f9a412f55bb6e8f3bb000e020dbc1e709627dcb3a56f6431fa7076b4c1aab0db", size = 5653991 }, - { url = "https://files.pythonhosted.org/packages/ca/56/29432a3e8d951b5e4e520a40cd93bebaa824a14033ea8e65b0ece1da6167/grpcio-1.71.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47be9584729534660416f6d2a3108aaeac1122f6b5bdbf9fd823e11fe6fbaa29", size = 6312781 }, - { url = "https://files.pythonhosted.org/packages/a3/f8/286e81a62964ceb6ac10b10925261d4871a762d2a763fbf354115f9afc98/grpcio-1.71.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9c80ac6091c916db81131d50926a93ab162a7e97e4428ffc186b6e80d6dda4", size = 5910479 }, - { url = "https://files.pythonhosted.org/packages/35/67/d1febb49ec0f599b9e6d4d0d44c2d4afdbed9c3e80deb7587ec788fcf252/grpcio-1.71.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:789d5e2a3a15419374b7b45cd680b1e83bbc1e52b9086e49308e2c0b5bbae6e3", size = 6013262 }, - { url = "https://files.pythonhosted.org/packages/a1/04/f9ceda11755f0104a075ad7163fc0d96e2e3a9fe25ef38adfc74c5790daf/grpcio-1.71.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:1be857615e26a86d7363e8a163fade914595c81fec962b3d514a4b1e8760467b", size = 6643356 }, - { url = "https://files.pythonhosted.org/packages/fb/ce/236dbc3dc77cf9a9242adcf1f62538734ad64727fabf39e1346ad4bd5c75/grpcio-1.71.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a76d39b5fafd79ed604c4be0a869ec3581a172a707e2a8d7a4858cb05a5a7637", size = 6186564 }, - { url = "https://files.pythonhosted.org/packages/10/fd/b3348fce9dd4280e221f513dd54024e765b21c348bc475516672da4218e9/grpcio-1.71.0-cp313-cp313-win32.whl", hash = "sha256:74258dce215cb1995083daa17b379a1a5a87d275387b7ffe137f1d5131e2cfbb", size = 3601890 }, - { url = "https://files.pythonhosted.org/packages/be/f8/db5d5f3fc7e296166286c2a397836b8b042f7ad1e11028d82b061701f0f7/grpcio-1.71.0-cp313-cp313-win_amd64.whl", hash = "sha256:22c3bc8d488c039a199f7a003a38cb7635db6656fa96437a8accde8322ce2366", size = 4273308 }, + { url = "https://files.pythonhosted.org/packages/9b/1f/bc01a4c0894973adebbcd4aa338a06815c76333ebb3921d94dcbd40dae6a/hf_xet-1.1.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c3b508b5f583a75641aebf732853deb058953370ce8184f5dabc49f803b0819b", size = 2256929 }, + { url = "https://files.pythonhosted.org/packages/78/07/6ef50851b5c6b45b77a6e018fa299c69a2db3b8bbd0d5af594c0238b1ceb/hf_xet-1.1.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b788a61977fbe6b5186e66239e2a329a3f0b7e7ff50dad38984c0c74f44aeca1", size = 2153719 }, + { url = "https://files.pythonhosted.org/packages/52/48/e929e6e3db6e4758c2adf0f2ca2c59287f1b76229d8bdc1a4c9cfc05212e/hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd2da210856444a34aad8ada2fc12f70dabed7cc20f37e90754d1d9b43bc0534", size = 4820519 }, + { url = "https://files.pythonhosted.org/packages/28/2e/03f89c5014a5aafaa9b150655f811798a317036646623bdaace25f485ae8/hf_xet-1.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8203f52827e3df65981984936654a5b390566336956f65765a8aa58c362bb841", size = 4964121 }, + { url = "https://files.pythonhosted.org/packages/47/8b/5cd399a92b47d98086f55fc72d69bc9ea5e5c6f27a9ed3e0cdd6be4e58a3/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:30c575a5306f8e6fda37edb866762140a435037365eba7a17ce7bd0bc0216a8b", size = 5283017 }, + { url = "https://files.pythonhosted.org/packages/53/e3/2fcec58d2fcfd25ff07feb876f466cfa11f8dcf9d3b742c07fe9dd51ee0a/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7c1a6aa6abed1f696f8099aa9796ca04c9ee778a58728a115607de9cc4638ff1", size = 4970349 }, + { url = "https://files.pythonhosted.org/packages/53/bf/10ca917e335861101017ff46044c90e517b574fbb37219347b83be1952f6/hf_xet-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3", size = 2310934 }, ] [[package]] name = "huggingface-hub" -version = "0.30.1" +version = "0.32.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, { name = "packaging" }, { name = "pyyaml" }, { name = "requests" }, { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/be/049689a7197630e75c4bb53021cb209a56617c9bf39b3a0950650d1f96e1/huggingface_hub-0.30.1.tar.gz", hash = "sha256:f379e8b8d0791295602538856638460ae3cf679c7f304201eb80fb98c771950e", size = 400784 } +sdist = { url = "https://files.pythonhosted.org/packages/60/c8/4f7d270285c46324fd66f62159eb16739aa5696f422dba57678a8c6b78e9/huggingface_hub-0.32.4.tar.gz", hash = "sha256:f61d45cd338736f59fb0e97550b74c24ee771bcc92c05ae0766b9116abe720be", size = 424494 } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/e3/2232d0e726d4d6ea69643b9593d97d0e7e6ea69c2fe9ed5de34d476c1c47/huggingface_hub-0.30.1-py3-none-any.whl", hash = "sha256:0f6aa5ec5a4e68e5b9e45d556b4e5ea180c58f5a5ffa734e7f38c9d573028959", size = 481170 }, + { url = "https://files.pythonhosted.org/packages/67/8b/222140f3cfb6f17b0dd8c4b9a0b36bd4ebefe9fb0098ba35d6960abcda0f/huggingface_hub-0.32.4-py3-none-any.whl", hash = "sha256:37abf8826b38d971f60d3625229221c36e53fe58060286db9baf619cfbf39767", size = 512101 }, ] [[package]] @@ -209,13 +225,13 @@ dev = [ [package.metadata] requires-dist = [ - { name = "faiss-cpu", specifier = ">=1.10.0" }, - { name = "pandas", specifier = ">=2.2.3" }, - { name = "scipy", specifier = ">=1.15.2" }, + { name = "faiss-cpu", specifier = ">=1" }, + { name = "pandas", specifier = ">=2" }, + { name = "scipy", specifier = ">=1" }, { name = "seaborn", specifier = ">=0.13.2" }, - { name = "tensorboard", specifier = ">=2.19.0" }, - { name = "torch", specifier = ">=2.6.0", index = "https://download.pytorch.org/whl/cu124" }, - { name = "transformers", specifier = ">=4.51.0" }, + { name = "tensorboard", specifier = ">=2" }, + { name = "torch", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, + { name = "transformers", specifier = ">=4.51" }, ] [package.metadata.requires-dev] @@ -271,11 +287,11 @@ wheels = [ [[package]] name = "markdown" -version = "3.7" +version = "3.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/28/3af612670f82f4c056911fbbbb42760255801b3068c48de792d354ff4472/markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", size = 357086 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/15/222b423b0b88689c266d9eac4e61396fe2cc53464459d6a37618ac863b24/markdown-3.8.tar.gz", hash = "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f", size = 360906 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803", size = 106349 }, + { url = "https://files.pythonhosted.org/packages/51/3f/afe76f8e2246ffbc867440cbcf90525264df0e658f8a5ca1f872b3f6192a/markdown-3.8-py3-none-any.whl", hash = "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc", size = 106210 }, ] [[package]] @@ -308,7 +324,7 @@ wheels = [ [[package]] name = "matplotlib" -version = "3.10.1" +version = "3.10.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "contourpy" }, @@ -321,20 +337,20 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811 } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, - { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, - { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, - { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, - { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, - { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, - { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, - { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, - { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, - { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, - { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, - { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, + { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318 }, + { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132 }, + { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633 }, + { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031 }, + { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988 }, + { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034 }, + { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223 }, + { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985 }, + { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109 }, + { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082 }, + { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699 }, + { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044 }, ] [[package]] @@ -348,106 +364,116 @@ wheels = [ [[package]] name = "networkx" -version = "3.4.2" +version = "3.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, ] [[package]] name = "numpy" -version = "2.2.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, - { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, - { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, - { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, - { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, - { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, - { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, - { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, - { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, - { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, - { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, - { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, - { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, - { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, - { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, - { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, - { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, - { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, - { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, - { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633 }, + { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683 }, + { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683 }, + { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253 }, + { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658 }, + { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765 }, + { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335 }, + { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608 }, + { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005 }, + { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093 }, + { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689 }, + { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612 }, + { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953 }, + { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806 }, + { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169 }, + { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701 }, + { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983 }, + { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435 }, + { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798 }, + { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632 }, + { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491 }, + { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 }, ] [[package]] name = "nvidia-cublas-cu12" -version = "12.4.5.8" +version = "12.8.3.14" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/71/1c91302526c45ab494c23f61c7a84aa568b8c1f9d196efa5993957faf906/nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b", size = 363438805 }, + { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630 }, ] [[package]] name = "nvidia-cuda-cupti-cu12" -version = "12.4.127" +version = "12.8.57" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/42/f4f60238e8194a3106d06a058d494b18e006c10bb2b915655bd9f6ea4cb1/nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb", size = 13813957 }, + { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547 }, ] [[package]] name = "nvidia-cuda-nvrtc-cu12" -version = "12.4.127" +version = "12.8.61" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/14/91ae57cd4db3f9ef7aa99f4019cfa8d54cb4caa7e00975df6467e9725a9f/nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338", size = 24640306 }, + { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585 }, ] [[package]] name = "nvidia-cuda-runtime-cu12" -version = "12.4.127" +version = "12.8.57" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/27/1795d86fe88ef397885f2e580ac37628ed058a92ed2c39dc8eac3adf0619/nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5", size = 883737 }, + { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762 }, ] [[package]] name = "nvidia-cudnn-cu12" -version = "9.1.0.70" +version = "9.7.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-cublas-cu12" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/fd/713452cd72343f682b1c7b9321e23829f00b842ceaedcda96e742ea0b0b3/nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f", size = 664752741 }, + { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421 }, ] [[package]] name = "nvidia-cufft-cu12" -version = "11.2.1.3" +version = "11.3.3.41" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/27/94/3266821f65b92b3138631e9c8e7fe1fb513804ac934485a8d05776e1dd43/nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9", size = 211459117 }, + { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795 }, +] + +[[package]] +name = "nvidia-cufile-cu12" +version = "1.13.0.11" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801 }, ] [[package]] name = "nvidia-curand-cu12" -version = "10.3.5.147" +version = "10.3.9.55" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/6d/44ad094874c6f1b9c654f8ed939590bdc408349f137f9b98a3a23ccec411/nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b", size = 56305206 }, + { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038 }, ] [[package]] name = "nvidia-cusolver-cu12" -version = "11.6.1.9" +version = "11.7.2.55" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-cublas-cu12" }, @@ -455,64 +481,64 @@ dependencies = [ { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/e1/5b9089a4b2a4790dfdea8b3a006052cfecff58139d5a4e34cb1a51df8d6f/nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260", size = 127936057 }, + { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 }, ] [[package]] name = "nvidia-cusparse-cu12" -version = "12.3.1.170" +version = "12.5.7.53" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/db/f7/97a9ea26ed4bbbfc2d470994b8b4f338ef663be97b8f677519ac195e113d/nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1", size = 207454763 }, + { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 }, ] [[package]] name = "nvidia-cusparselt-cu12" -version = "0.6.2" +version = "0.6.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/a8/bcbb63b53a4b1234feeafb65544ee55495e1bb37ec31b999b963cbccfd1d/nvidia_cusparselt_cu12-0.6.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:df2c24502fd76ebafe7457dbc4716b2fec071aabaed4fb7691a201cde03704d9", size = 150057751 }, + { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796 }, ] [[package]] name = "nvidia-nccl-cu12" -version = "2.21.5" +version = "2.26.2" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/99/12cd266d6233f47d00daf3a72739872bdc10267d0383508b0b9c84a18bb6/nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0", size = 188654414 }, + { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755 }, ] [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.4.127" +version = "12.8.61" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/ff/847841bacfbefc97a00036e0fce5a0f086b640756dc38caea5e1bb002655/nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57", size = 21066810 }, + { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473 }, ] [[package]] name = "nvidia-nvtx-cu12" -version = "12.4.127" +version = "12.8.55" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 }, + { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896 }, ] [[package]] name = "packaging" -version = "24.2" +version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] name = "pandas" -version = "2.2.3" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, @@ -520,62 +546,65 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490 } wheels = [ - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, + { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913 }, + { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249 }, + { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359 }, + { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789 }, + { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734 }, + { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381 }, + { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135 }, + { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356 }, + { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674 }, + { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876 }, + { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182 }, + { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686 }, + { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, ] [[package]] name = "pillow" -version = "11.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, - { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, - { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, - { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, - { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, - { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, - { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, - { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, - { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, - { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, - { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, - { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, - { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, - { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, - { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, - { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, - { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, - { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, - { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +version = "11.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/cb/bb5c01fcd2a69335b86c22142b2bccfc3464087efb7fd382eee5ffc7fdf7/pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", size = 47026707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/9c/447528ee3776e7ab8897fe33697a7ff3f0475bb490c5ac1456a03dc57956/pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", size = 3190098 }, + { url = "https://files.pythonhosted.org/packages/b5/09/29d5cd052f7566a63e5b506fac9c60526e9ecc553825551333e1e18a4858/pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", size = 3030166 }, + { url = "https://files.pythonhosted.org/packages/71/5d/446ee132ad35e7600652133f9c2840b4799bbd8e4adba881284860da0a36/pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", size = 4408674 }, + { url = "https://files.pythonhosted.org/packages/69/5f/cbe509c0ddf91cc3a03bbacf40e5c2339c4912d16458fcb797bb47bcb269/pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", size = 4496005 }, + { url = "https://files.pythonhosted.org/packages/f9/b3/dd4338d8fb8a5f312021f2977fb8198a1184893f9b00b02b75d565c33b51/pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", size = 4518707 }, + { url = "https://files.pythonhosted.org/packages/13/eb/2552ecebc0b887f539111c2cd241f538b8ff5891b8903dfe672e997529be/pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", size = 4610008 }, + { url = "https://files.pythonhosted.org/packages/72/d1/924ce51bea494cb6e7959522d69d7b1c7e74f6821d84c63c3dc430cbbf3b/pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", size = 4585420 }, + { url = "https://files.pythonhosted.org/packages/43/ab/8f81312d255d713b99ca37479a4cb4b0f48195e530cdc1611990eb8fd04b/pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b", size = 4667655 }, + { url = "https://files.pythonhosted.org/packages/94/86/8f2e9d2dc3d308dfd137a07fe1cc478df0a23d42a6c4093b087e738e4827/pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", size = 2332329 }, + { url = "https://files.pythonhosted.org/packages/6d/ec/1179083b8d6067a613e4d595359b5fdea65d0a3b7ad623fee906e1b3c4d2/pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", size = 2676388 }, + { url = "https://files.pythonhosted.org/packages/23/f1/2fc1e1e294de897df39fa8622d829b8828ddad938b0eaea256d65b84dd72/pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", size = 2414950 }, + { url = "https://files.pythonhosted.org/packages/c4/3e/c328c48b3f0ead7bab765a84b4977acb29f101d10e4ef57a5e3400447c03/pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", size = 3192759 }, + { url = "https://files.pythonhosted.org/packages/18/0e/1c68532d833fc8b9f404d3a642991441d9058eccd5606eab31617f29b6d4/pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", size = 3033284 }, + { url = "https://files.pythonhosted.org/packages/b7/cb/6faf3fb1e7705fd2db74e070f3bf6f88693601b0ed8e81049a8266de4754/pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", size = 4445826 }, + { url = "https://files.pythonhosted.org/packages/07/94/8be03d50b70ca47fb434a358919d6a8d6580f282bbb7af7e4aa40103461d/pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", size = 4527329 }, + { url = "https://files.pythonhosted.org/packages/fd/a4/bfe78777076dc405e3bd2080bc32da5ab3945b5a25dc5d8acaa9de64a162/pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", size = 4549049 }, + { url = "https://files.pythonhosted.org/packages/65/4d/eaf9068dc687c24979e977ce5677e253624bd8b616b286f543f0c1b91662/pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", size = 4635408 }, + { url = "https://files.pythonhosted.org/packages/1d/26/0fd443365d9c63bc79feb219f97d935cd4b93af28353cba78d8e77b61719/pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", size = 4614863 }, + { url = "https://files.pythonhosted.org/packages/49/65/dca4d2506be482c2c6641cacdba5c602bc76d8ceb618fd37de855653a419/pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", size = 4692938 }, + { url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774 }, + { url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895 }, + { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 }, ] [[package]] name = "protobuf" -version = "6.30.2" +version = "6.31.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c8/8c/cf2ac658216eebe49eaedf1e06bc06cbf6a143469236294a1171a51357c3/protobuf-6.30.2.tar.gz", hash = "sha256:35c859ae076d8c56054c25b59e5e59638d86545ed6e2b6efac6be0b6ea3ba048", size = 429315 } +sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797 } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/85/cd53abe6a6cbf2e0029243d6ae5fb4335da2996f6c177bb2ce685068e43d/protobuf-6.30.2-cp310-abi3-win32.whl", hash = "sha256:b12ef7df7b9329886e66404bef5e9ce6a26b54069d7f7436a0853ccdeb91c103", size = 419148 }, - { url = "https://files.pythonhosted.org/packages/97/e9/7b9f1b259d509aef2b833c29a1f3c39185e2bf21c9c1be1cd11c22cb2149/protobuf-6.30.2-cp310-abi3-win_amd64.whl", hash = "sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9", size = 431003 }, - { url = "https://files.pythonhosted.org/packages/8e/66/7f3b121f59097c93267e7f497f10e52ced7161b38295137a12a266b6c149/protobuf-6.30.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:0eb523c550a66a09a0c20f86dd554afbf4d32b02af34ae53d93268c1f73bc65b", size = 417579 }, - { url = "https://files.pythonhosted.org/packages/d0/89/bbb1bff09600e662ad5b384420ad92de61cab2ed0f12ace1fd081fd4c295/protobuf-6.30.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:50f32cc9fd9cb09c783ebc275611b4f19dfdfb68d1ee55d2f0c7fa040df96815", size = 317319 }, - { url = "https://files.pythonhosted.org/packages/28/50/1925de813499546bc8ab3ae857e3ec84efe7d2f19b34529d0c7c3d02d11d/protobuf-6.30.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4f6c687ae8efae6cf6093389a596548214467778146b7245e886f35e1485315d", size = 316212 }, - { url = "https://files.pythonhosted.org/packages/e5/a1/93c2acf4ade3c5b557d02d500b06798f4ed2c176fa03e3c34973ca92df7f/protobuf-6.30.2-py3-none-any.whl", hash = "sha256:ae86b030e69a98e08c77beab574cbcb9fff6d031d57209f574a5aea1445f4b51", size = 167062 }, + { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603 }, + { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283 }, + { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604 }, + { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115 }, + { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070 }, + { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724 }, ] [[package]] @@ -665,27 +694,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.11.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/5b/3ae20f89777115944e89c2d8c2e795dcc5b9e04052f76d5347e35e0da66e/ruff-0.11.4.tar.gz", hash = "sha256:f45bd2fb1a56a5a85fae3b95add03fb185a0b30cf47f5edc92aa0355ca1d7407", size = 3933063 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/db/baee59ac88f57527fcbaad3a7b309994e42329c6bc4d4d2b681a3d7b5426/ruff-0.11.4-py3-none-linux_armv6l.whl", hash = "sha256:d9f4a761ecbde448a2d3e12fb398647c7f0bf526dbc354a643ec505965824ed2", size = 10106493 }, - { url = "https://files.pythonhosted.org/packages/c1/d6/9a0962cbb347f4ff98b33d699bf1193ff04ca93bed4b4222fd881b502154/ruff-0.11.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8c1747d903447d45ca3d40c794d1a56458c51e5cc1bc77b7b64bd2cf0b1626cc", size = 10876382 }, - { url = "https://files.pythonhosted.org/packages/3a/8f/62bab0c7d7e1ae3707b69b157701b41c1ccab8f83e8501734d12ea8a839f/ruff-0.11.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:51a6494209cacca79e121e9b244dc30d3414dac8cc5afb93f852173a2ecfc906", size = 10237050 }, - { url = "https://files.pythonhosted.org/packages/09/96/e296965ae9705af19c265d4d441958ed65c0c58fc4ec340c27cc9d2a1f5b/ruff-0.11.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f171605f65f4fc49c87f41b456e882cd0c89e4ac9d58e149a2b07930e1d466f", size = 10424984 }, - { url = "https://files.pythonhosted.org/packages/e5/56/644595eb57d855afed6e54b852e2df8cd5ca94c78043b2f29bdfb29882d5/ruff-0.11.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ebf99ea9af918878e6ce42098981fc8c1db3850fef2f1ada69fb1dcdb0f8e79e", size = 9957438 }, - { url = "https://files.pythonhosted.org/packages/86/83/9d3f3bed0118aef3e871ded9e5687fb8c5776bde233427fd9ce0a45db2d4/ruff-0.11.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edad2eac42279df12e176564a23fc6f4aaeeb09abba840627780b1bb11a9d223", size = 11547282 }, - { url = "https://files.pythonhosted.org/packages/40/e6/0c6e4f5ae72fac5ccb44d72c0111f294a5c2c8cc5024afcb38e6bda5f4b3/ruff-0.11.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f103a848be9ff379fc19b5d656c1f911d0a0b4e3e0424f9532ececf319a4296e", size = 12182020 }, - { url = "https://files.pythonhosted.org/packages/b5/92/4aed0e460aeb1df5ea0c2fbe8d04f9725cccdb25d8da09a0d3f5b8764bf8/ruff-0.11.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:193e6fac6eb60cc97b9f728e953c21cc38a20077ed64f912e9d62b97487f3f2d", size = 11679154 }, - { url = "https://files.pythonhosted.org/packages/1b/d3/7316aa2609f2c592038e2543483eafbc62a0e1a6a6965178e284808c095c/ruff-0.11.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7af4e5f69b7c138be8dcffa5b4a061bf6ba6a3301f632a6bce25d45daff9bc99", size = 13905985 }, - { url = "https://files.pythonhosted.org/packages/63/80/734d3d17546e47ff99871f44ea7540ad2bbd7a480ed197fe8a1c8a261075/ruff-0.11.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126b1bf13154aa18ae2d6c3c5efe144ec14b97c60844cfa6eb960c2a05188222", size = 11348343 }, - { url = "https://files.pythonhosted.org/packages/04/7b/70fc7f09a0161dce9613a4671d198f609e653d6f4ff9eee14d64c4c240fb/ruff-0.11.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8806daaf9dfa881a0ed603f8a0e364e4f11b6ed461b56cae2b1c0cab0645304", size = 10308487 }, - { url = "https://files.pythonhosted.org/packages/1a/22/1cdd62dabd678d75842bf4944fd889cf794dc9e58c18cc547f9eb28f95ed/ruff-0.11.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5d94bb1cc2fc94a769b0eb975344f1b1f3d294da1da9ddbb5a77665feb3a3019", size = 9929091 }, - { url = "https://files.pythonhosted.org/packages/9f/20/40e0563506332313148e783bbc1e4276d657962cc370657b2fff20e6e058/ruff-0.11.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:995071203d0fe2183fc7a268766fd7603afb9996785f086b0d76edee8755c896", size = 10924659 }, - { url = "https://files.pythonhosted.org/packages/b5/41/eef9b7aac8819d9e942f617f9db296f13d2c4576806d604aba8db5a753f1/ruff-0.11.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7a37ca937e307ea18156e775a6ac6e02f34b99e8c23fe63c1996185a4efe0751", size = 11428160 }, - { url = "https://files.pythonhosted.org/packages/ff/61/c488943414fb2b8754c02f3879de003e26efdd20f38167ded3fb3fc1cda3/ruff-0.11.4-py3-none-win32.whl", hash = "sha256:0e9365a7dff9b93af933dab8aebce53b72d8f815e131796268709890b4a83270", size = 10311496 }, - { url = "https://files.pythonhosted.org/packages/b6/2b/2a1c8deb5f5dfa3871eb7daa41492c4d2b2824a74d2b38e788617612a66d/ruff-0.11.4-py3-none-win_amd64.whl", hash = "sha256:5a9fa1c69c7815e39fcfb3646bbfd7f528fa8e2d4bebdcf4c2bd0fa037a255fb", size = 11399146 }, - { url = "https://files.pythonhosted.org/packages/4f/03/3aec4846226d54a37822e4c7ea39489e4abd6f88388fba74e3d4abe77300/ruff-0.11.4-py3-none-win_arm64.whl", hash = "sha256:d435db6b9b93d02934cf61ef332e66af82da6d8c69aefdea5994c89997c7a0fc", size = 10450306 }, +version = "0.11.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/da/9c6f995903b4d9474b39da91d2d626659af3ff1eeb43e9ae7c119349dba6/ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514", size = 4282054 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/ce/a11d381192966e0b4290842cc8d4fac7dc9214ddf627c11c1afff87da29b/ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46", size = 10292516 }, + { url = "https://files.pythonhosted.org/packages/78/db/87c3b59b0d4e753e40b6a3b4a2642dfd1dcaefbff121ddc64d6c8b47ba00/ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48", size = 11106083 }, + { url = "https://files.pythonhosted.org/packages/77/79/d8cec175856ff810a19825d09ce700265f905c643c69f45d2b737e4a470a/ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b", size = 10436024 }, + { url = "https://files.pythonhosted.org/packages/8b/5b/f6d94f2980fa1ee854b41568368a2e1252681b9238ab2895e133d303538f/ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a", size = 10646324 }, + { url = "https://files.pythonhosted.org/packages/6c/9c/b4c2acf24ea4426016d511dfdc787f4ce1ceb835f3c5fbdbcb32b1c63bda/ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc", size = 10174416 }, + { url = "https://files.pythonhosted.org/packages/f3/10/e2e62f77c65ede8cd032c2ca39c41f48feabedb6e282bfd6073d81bb671d/ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629", size = 11724197 }, + { url = "https://files.pythonhosted.org/packages/bb/f0/466fe8469b85c561e081d798c45f8a1d21e0b4a5ef795a1d7f1a9a9ec182/ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933", size = 12511615 }, + { url = "https://files.pythonhosted.org/packages/17/0e/cefe778b46dbd0cbcb03a839946c8f80a06f7968eb298aa4d1a4293f3448/ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165", size = 12117080 }, + { url = "https://files.pythonhosted.org/packages/5d/2c/caaeda564cbe103bed145ea557cb86795b18651b0f6b3ff6a10e84e5a33f/ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71", size = 11326315 }, + { url = "https://files.pythonhosted.org/packages/75/f0/782e7d681d660eda8c536962920c41309e6dd4ebcea9a2714ed5127d44bd/ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9", size = 11555640 }, + { url = "https://files.pythonhosted.org/packages/5d/d4/3d580c616316c7f07fb3c99dbecfe01fbaea7b6fd9a82b801e72e5de742a/ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc", size = 10507364 }, + { url = "https://files.pythonhosted.org/packages/5a/dc/195e6f17d7b3ea6b12dc4f3e9de575db7983db187c378d44606e5d503319/ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7", size = 10141462 }, + { url = "https://files.pythonhosted.org/packages/f4/8e/39a094af6967faa57ecdeacb91bedfb232474ff8c3d20f16a5514e6b3534/ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432", size = 11121028 }, + { url = "https://files.pythonhosted.org/packages/5a/c0/b0b508193b0e8a1654ec683ebab18d309861f8bd64e3a2f9648b80d392cb/ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492", size = 11602992 }, + { url = "https://files.pythonhosted.org/packages/7c/91/263e33ab93ab09ca06ce4f8f8547a858cc198072f873ebc9be7466790bae/ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250", size = 10474944 }, + { url = "https://files.pythonhosted.org/packages/46/f4/7c27734ac2073aae8efb0119cae6931b6fb48017adf048fdf85c19337afc/ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3", size = 11548669 }, + { url = "https://files.pythonhosted.org/packages/ec/bf/b273dd11673fed8a6bd46032c0ea2a04b2ac9bfa9c628756a5856ba113b0/ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b", size = 10683928 }, ] [[package]] @@ -712,31 +741,31 @@ wheels = [ [[package]] name = "scipy" -version = "1.15.2" +version = "1.15.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, - { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, - { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, - { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, - { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, - { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, - { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, - { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, - { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, - { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, - { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, - { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, - { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, - { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, - { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, - { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, - { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, - { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, ] [[package]] @@ -755,11 +784,11 @@ wheels = [ [[package]] name = "setuptools" -version = "78.1.0" +version = "80.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/5a/0db4da3bc908df06e5efae42b44e75c81dd52716e10192ff36d0c1c8e379/setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54", size = 1367827 } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8", size = 1256108 }, + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486 }, ] [[package]] @@ -773,14 +802,14 @@ wheels = [ [[package]] name = "sympy" -version = "1.13.1" +version = "1.14.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mpmath" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ca/99/5a5b6f19ff9f083671ddf7b9632028436167cd3d33e11015754e41b249a4/sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f", size = 7533040 } +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8", size = 6189177 }, + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 }, ] [[package]] @@ -840,8 +869,8 @@ wheels = [ [[package]] name = "torch" -version = "2.6.0+cu124" -source = { registry = "https://download.pytorch.org/whl/cu124" } +version = "2.7.1+cu128" +source = { registry = "https://download.pytorch.org/whl/cu128" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, @@ -853,6 +882,7 @@ dependencies = [ { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -862,13 +892,16 @@ dependencies = [ { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "setuptools" }, { name = "sympy" }, - { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "triton", marker = "sys_platform == 'linux'" }, { name = "typing-extensions" }, ] wheels = [ - { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313-linux_x86_64.whl", hash = "sha256:0f3bc53c988ce9568cd876a2a5316761e84a8704135ec8068f5f81b4417979cb" }, - { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313-win_amd64.whl", hash = "sha256:519330eef09534acad8110b6f423d2fe58c1d8e9ada999ed077a637a0021f908" }, - { url = "https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp313-cp313t-linux_x86_64.whl", hash = "sha256:35cba404c0d742406cdcba1609085874bc60facdfbc50e910c47a92405fef44c" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d56d29a6ad7758ba5173cc2b0c51c93e126e2b0a918e874101dc66545283967f" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9560425f9ea1af1791507e8ca70d5b9ecf62fed7ca226a95fcd58d0eb2cca78f" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:500ad5b670483f62d4052e41948a3fb19e8c8de65b99f8d418d879cbb15a82d6" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:f112465fdf42eb1297c6dddda1a8b7f411914428b704e1b8a47870c52e290909" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c355db49c218ada70321d5c5c9bb3077312738b99113c8f3723ef596b554a7b9" }, + { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:e27e5f7e74179fb5d814a0412e5026e4b50c9e0081e9050bc4c28c992a276eb1" }, ] [[package]] @@ -885,7 +918,7 @@ wheels = [ [[package]] name = "transformers" -version = "4.51.0" +version = "4.52.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, @@ -899,26 +932,30 @@ dependencies = [ { name = "tokenizers" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/75/6ebdae4d6f4574f47139a070445245537e43482d006f615af8e23d5bf05e/transformers-4.51.0.tar.gz", hash = "sha256:2d302563ff6c2cc2d0e88ef352cf059f9a21ce18102fd43662bb1246f70b8a84", size = 8925571 } +sdist = { url = "https://files.pythonhosted.org/packages/da/a9/275037087f9d846580b02f2d7cae0e0a6955d46f84583d0151d6227bd416/transformers-4.52.4.tar.gz", hash = "sha256:aff3764441c1adc192a08dba49740d3cbbcb72d850586075aed6bd89b98203e6", size = 8945376 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/db/7ee15028d5130929aa0b1b85bab6d8bafe806254d3b5c56c42a0066cceb8/transformers-4.51.0-py3-none-any.whl", hash = "sha256:2e6baa476735ab8adccbaee6961525a0d1ce8c21d49293af30ef5ee4b082f64d", size = 10362017 }, + { url = "https://files.pythonhosted.org/packages/96/f2/25b27b396af03d5b64e61976b14f7209e2939e9e806c10749b6d277c273e/transformers-4.52.4-py3-none-any.whl", hash = "sha256:203f5c19416d5877e36e88633943761719538a25d9775977a24fe77a1e5adfc7", size = 10460375 }, ] [[package]] name = "triton" -version = "3.2.0" +version = "3.3.1" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "setuptools" }, +] wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/30/37a3384d1e2e9320331baca41e835e90a3767303642c7a80d4510152cbcf/triton-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5dfa23ba84541d7c0a531dfce76d8bcd19159d50a4a8b14ad01e91734a5c1b0", size = 253154278 }, + { url = "https://files.pythonhosted.org/packages/74/1f/dfb531f90a2d367d914adfee771babbd3f1a5b26c3f5fbc458dee21daa78/triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b89d846b5a4198317fec27a5d3a609ea96b6d557ff44b56c23176546023c4240", size = 155673035 }, + { url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832 }, ] [[package]] name = "typing-extensions" -version = "4.13.1" +version = "4.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/ad/cd3e3465232ec2416ae9b983f27b9e94dc8171d56ac99b345319a9475967/typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff", size = 106633 } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/c5/e7a0b0f5ed69f94c8ab7379c599e6036886bffcde609969a5325f47f1332/typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69", size = 45739 }, + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, ] [[package]] @@ -932,11 +969,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, ] [[package]] From d5c4abb7f2dc8a477551984f70bad7417f9055fd Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 22:35:12 +0300 Subject: [PATCH 167/175] add conditional torch cuda deps --- pyproject.toml | 8 ++++++- uv.lock | 62 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b342c5a5..9cd165d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,8 @@ dependencies = [ [tool.uv.sources] torch = [ - { index = "pytorch-cu128" }, + { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" }, + { index = "pytorch-cpu", marker = "sys_platform == 'darwin'" }, ] [[tool.uv.index]] @@ -24,6 +25,11 @@ name = "pytorch-cu128" url = "https://download.pytorch.org/whl/cu128" explicit = true +[[tool.uv.index]] +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true + [dependency-groups] dev = [ "ruff>=0.11.4", diff --git a/uv.lock b/uv.lock index daa79a32..9e71d015 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,10 @@ version = 1 revision = 1 requires-python = ">=3.13" +resolution-markers = [ + "sys_platform != 'darwin'", + "sys_platform == 'darwin'", +] [[package]] name = "absl-py" @@ -214,7 +218,8 @@ dependencies = [ { name = "scipy" }, { name = "seaborn" }, { name = "tensorboard" }, - { name = "torch" }, + { name = "torch", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'darwin'" }, + { name = "torch", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform != 'darwin'" }, { name = "transformers" }, ] @@ -230,7 +235,8 @@ requires-dist = [ { name = "scipy", specifier = ">=1" }, { name = "seaborn", specifier = ">=0.13.2" }, { name = "tensorboard", specifier = ">=2" }, - { name = "torch", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, + { name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, + { name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cpu" }, { name = "transformers", specifier = ">=4.51" }, ] @@ -438,7 +444,7 @@ name = "nvidia-cudnn-cu12" version = "9.7.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421 }, @@ -449,7 +455,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.41" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795 }, @@ -476,9 +482,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.2.55" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12" }, - { name = "nvidia-cusparse-cu12" }, - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, + { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'darwin'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 }, @@ -489,7 +495,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.7.53" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 }, @@ -867,15 +873,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481 }, ] +[[package]] +name = "torch" +version = "2.7.1" +source = { registry = "https://download.pytorch.org/whl/cpu" } +resolution-markers = [ + "sys_platform == 'darwin'", +] +dependencies = [ + { name = "filelock", marker = "sys_platform == 'darwin'" }, + { name = "fsspec", marker = "sys_platform == 'darwin'" }, + { name = "jinja2", marker = "sys_platform == 'darwin'" }, + { name = "networkx", marker = "sys_platform == 'darwin'" }, + { name = "setuptools", marker = "sys_platform == 'darwin'" }, + { name = "sympy", marker = "sys_platform == 'darwin'" }, + { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, +] +wheels = [ + { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:95af97e7b2cecdc89edc0558962a51921bf9c61538597dbec6b7cc48d31e2e13" }, + { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7ecd868a086468e1bcf74b91db425c1c2951a9cfcd0592c4c73377b7e42485ae" }, +] + [[package]] name = "torch" version = "2.7.1+cu128" source = { registry = "https://download.pytorch.org/whl/cu128" } +resolution-markers = [ + "sys_platform != 'darwin'", +] dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx" }, + { name = "filelock", marker = "sys_platform != 'darwin'" }, + { name = "fsspec", marker = "sys_platform != 'darwin'" }, + { name = "jinja2", marker = "sys_platform != 'darwin'" }, + { name = "networkx", marker = "sys_platform != 'darwin'" }, { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, @@ -890,10 +920,10 @@ dependencies = [ { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools" }, - { name = "sympy" }, + { name = "setuptools", marker = "sys_platform != 'darwin'" }, + { name = "sympy", marker = "sys_platform != 'darwin'" }, { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d56d29a6ad7758ba5173cc2b0c51c93e126e2b0a918e874101dc66545283967f" }, @@ -942,7 +972,7 @@ name = "triton" version = "3.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "setuptools" }, + { name = "setuptools", marker = "sys_platform != 'darwin'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/74/1f/dfb531f90a2d367d914adfee771babbd3f1a5b26c3f5fbc458dee21daa78/triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b89d846b5a4198317fec27a5d3a609ea96b6d557ff44b56c23176546023c4240", size = 155673035 }, From ad67f7fe1c58ebc3f6add83c7822e212819ec1b3 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 22:51:20 +0300 Subject: [PATCH 168/175] fix small issues after merge --- modeling/dataset/samplers/last_item_prediction.py | 4 ---- modeling/models/rqvae.py | 1 - 2 files changed, 5 deletions(-) diff --git a/modeling/dataset/samplers/last_item_prediction.py b/modeling/dataset/samplers/last_item_prediction.py index e6f9ba73..474ef4c5 100644 --- a/modeling/dataset/samplers/last_item_prediction.py +++ b/modeling/dataset/samplers/last_item_prediction.py @@ -1,12 +1,8 @@ -from dataset.samplers.base import TrainSampler, EvalSampler - import copy from dataset.samplers.base import EvalSampler, TrainSampler from dataset.negative_samplers.base import BaseNegativeSampler -class LastItemPredictionTrainSampler(TrainSampler, config_name='last_item_prediction'): - class LastItemPredictionTrainSampler(TrainSampler, config_name="last_item_prediction"): def __init__(self, dataset, num_users, num_items, negative_sampler, num_negatives): super().__init__() diff --git a/modeling/models/rqvae.py b/modeling/models/rqvae.py index 7e150421..fc70b890 100644 --- a/modeling/models/rqvae.py +++ b/modeling/models/rqvae.py @@ -84,7 +84,6 @@ def init_codebooks(self, embeddings): d=embeddings_np.shape[1], k=n_clusters, niter=self.n_iter, - gpu=1, ) kmeans.train(embeddings_np) From a1b5b4553fbb4ea4d0c150b61dad04a7700ea004 Mon Sep 17 00:00:00 2001 From: peterochek Date: Sun, 8 Jun 2025 23:26:38 +0300 Subject: [PATCH 169/175] add debug lines for scientific dataset --- modeling/dataset/base.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index ff040d6e..39bd47dd 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -272,8 +272,8 @@ def create_from_config(cls, config, **kwargs): def flatten_item_sequence(cls, item_ids): min_history_length = 3 # TODOPK make this configurable histories = [] - for i in range(min_history_length-1, len(item_ids)): - histories.append(item_ids[:i+1]) + for i in range(min_history_length, len(item_ids) + 1): + histories.append(item_ids[:i]) return histories @classmethod @@ -791,12 +791,31 @@ def create_from_config(cls, config, **kwargs): max_item_id = max(max_item_id, max(item_ids)) assert len(item_ids) >= 5 + + # item_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + # prefix_length: 5, 6, 7, 8, 9, 10 for prefix_length in range(5, len(item_ids) + 1): + # prefix = [1, 2, 3, 4, 5] + # prefix = [1, 2, 3, 4, 5, 6] + # prefix = [1, 2, 3, 4, 5, 6, 7] + # prefix = [1, 2, 3, 4, 5, 6, 7, 8] + # prefix = [1, 2, 3, 4, 5, 6, 7, 8, 9] + # prefix = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + + prefix = item_ids[ :prefix_length ] # TODOPK no sliding window, only incrmenting sequence from last 50 items + # prefix[:-2] = [1, 2, 3] + # prefix[:-2] = [1, 2, 3, 4] + # prefix[:-2] = [1, 2, 3, 4, 5] + # prefix[:-2] = [1, 2, 3, 4, 5, 6] + # prefix[:-2] = [1, 2, 3, 4, 5, 6, 7] + # prefix[:-2] = [1, 2, 3, 4, 5, 6, 7, 8] + train_dataset.append( { "user.ids": [user_id], @@ -809,6 +828,7 @@ def create_from_config(cls, config, **kwargs): set(prefix[:-2][-max_sequence_length:]) ) + # item_ids[:-1] = [1, 2, 3, 4, 5, 6, 7, 8, 9] validation_dataset.append( { "user.ids": [user_id], @@ -820,6 +840,8 @@ def create_from_config(cls, config, **kwargs): assert len(item_ids[:-1][-max_sequence_length:]) == len( set(item_ids[:-1][-max_sequence_length:]) ) + + # item_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] test_dataset.append( { "user.ids": [user_id], From 26d724705c00191fa20d908bd5c43063a467887c Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 9 Jun 2025 17:12:51 +0300 Subject: [PATCH 170/175] add letter dataset --- configs/train/letter.json | 182 ++++++ modeling/dataset/base.py | 49 ++ pyproject.toml | 2 + uv.lock | 1174 ++++++++++++++++++++++++++++++++++++- 4 files changed, 1390 insertions(+), 17 deletions(-) create mode 100644 configs/train/letter.json diff --git a/configs/train/letter.json b/configs/train/letter.json new file mode 100644 index 00000000..7a4aa5ae --- /dev/null +++ b/configs/train/letter.json @@ -0,0 +1,182 @@ +{ + "experiment_name": "letter_data", + "best_metric": "validation/ndcg@20", + "train_epochs_num": 100, + "dataset": { + "type": "letter_full", + "path_to_data_dir": "../data", + "name": "Beauty_letter", + "max_sequence_length": 50, + "samplers": { + "type": "letter_last_item_prediction", + "beauty_index_json": "../../LETTER/data/Beauty/Beauty.index.json" + }, + "beauty_inter_json": "../../LETTER/data/Beauty/Beauty.inter.json" + }, + "dataloader": { + "train": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": true, + "shuffle": true + }, + "validation": { + "type": "torch", + "batch_size": 256, + "batch_processor": { + "type": "basic" + }, + "drop_last": false, + "shuffle": false + } + }, + "model": { + "type": "tiger", + "rqvae_train_config_path": "../configs/train/rqvae_train_config.json", + "rqvae_checkpoint_path": "../checkpoints/rqvae_beauty_final_state.pth", + "embs_extractor_path": "../data/Beauty/rqvae/data_full.pt", + "sequence_prefix": "item", + "predictions_prefix": "logits", + "positive_prefix": "labels", + "labels_prefix": "labels", + "embedding_dim": 64, + "num_heads": 2, + "num_encoder_layers": 2, + "num_decoder_layers": 2, + "dim_feedforward": 256, + "dropout": 0.3, + "activation": "gelu", + "layer_norm_eps": 1e-9, + "initializer_range": 0.02 + }, + "optimizer": { + "type": "basic", + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "clip_grad_threshold": 5.0 + }, + "loss": { + "type": "composite", + "losses": [ + { + "type": "ce", + "predictions_prefix": "logits", + "labels_prefix": "semantic.labels", + "weight": 1.0, + "output_prefix": "semantic_loss" + }, + { + "type": "ce", + "predictions_prefix": "dedup.logits", + "labels_prefix": "dedup.labels", + "weight": 1.0, + "output_prefix": "dedup_loss" + } + ], + "output_prefix": "loss" + }, + "callback": { + "type": "composite", + "callbacks": [ + { + "type": "metric", + "on_step": 1, + "loss_prefix": "loss" + }, + { + "type": "validation", + "on_step": 1024, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + }, + { + "type": "eval", + "on_step": 2048, + "pred_prefix": "logits", + "labels_prefix": "labels", + "metrics": { + "ndcg@5": { + "type": "ndcg", + "k": 5 + }, + "ndcg@10": { + "type": "ndcg", + "k": 10 + }, + "ndcg@20": { + "type": "ndcg", + "k": 20 + }, + "recall@5": { + "type": "recall", + "k": 5 + }, + "recall@10": { + "type": "recall", + "k": 10 + }, + "recall@20": { + "type": "recall", + "k": 20 + }, + "coverage@5": { + "type": "coverage", + "k": 5 + }, + "coverage@10": { + "type": "coverage", + "k": 10 + }, + "coverage@20": { + "type": "coverage", + "k": 20 + } + } + } + ] + } + } + \ No newline at end of file diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index 39bd47dd..a7983393 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -896,6 +896,55 @@ def create_from_config(cls, config, **kwargs): ) +class LetterFullDataset(ScientificFullDataset, config_name="letter_full"): + def __init__( + self, + train_sampler, + validation_sampler, + test_sampler, + num_users, + num_items, + max_sequence_length, + ): + self._train_sampler = train_sampler + self._validation_sampler = validation_sampler + self._test_sampler = test_sampler + self._num_users = num_users + self._num_items = num_items + self._max_sequence_length = max_sequence_length + + @classmethod + def create_from_config(cls, config, **kwargs): + user_interactions_path = os.path.join(config["beauty_inter_json"]) + with open(user_interactions_path, "r") as f: + user_interactions = json.load(f) + + dir_path = os.path.join(config["path_to_data_dir"], config["name"]) + + os.makedirs(dir_path, exist_ok=True) + dataset_path = os.path.join(dir_path, "all_data.txt") + + logger.info(f"Saving data to {dataset_path}") + + # Map from LETTER format to Our format + with open(dataset_path, "w") as f: + for user_id, item_ids in user_interactions.items(): + items_repr = map(str, item_ids) + f.write(f"{user_id} {' '.join(items_repr)}\n") + + dataset = ScientificFullDataset.create_from_config(config, **kwargs) + + return cls( + train_sampler=dataset._train_sampler, + validation_sampler=dataset._validation_sampler, + test_sampler=dataset._test_sampler, + num_users=dataset._num_users, + num_items=dataset._num_items, + max_sequence_length=dataset._max_sequence_length, + ) + + + class RqVaeDataset(BaseDataset, config_name='rqvae'): def __init__( diff --git a/pyproject.toml b/pyproject.toml index 9cd165d8..f32390d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,8 @@ dependencies = [ "tensorboard>=2", "torch>=2.7", "transformers>=4.51", + "tqdm>=4", + "jupyter>=1", ] [tool.uv.sources] diff --git a/uv.lock b/uv.lock index 9e71d015..af2a3e74 100644 --- a/uv.lock +++ b/uv.lock @@ -15,6 +15,140 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/04/9d75e1d3bb4ab8ec67ff10919476ccdee06c098bcfcf3a352da5f985171d/absl_py-2.3.0-py3-none-any.whl", hash = "sha256:9824a48b654a306168f63e0d97714665f8490b8d89ec7bf2efc24bf67cf579b3", size = 135657 }, ] +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, +] + +[[package]] +name = "argon2-cffi" +version = "25.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "argon2-cffi-bindings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, +] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658 }, + { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583 }, + { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168 }, + { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709 }, + { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613 }, + { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583 }, + { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475 }, + { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698 }, + { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817 }, + { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104 }, +] + +[[package]] +name = "arrow" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "types-python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419 }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, +] + +[[package]] +name = "async-lru" +version = "2.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, +] + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[package.optional-dependencies] +css = [ + { name = "tinycss2" }, +] + [[package]] name = "certifi" version = "2025.4.26" @@ -24,6 +158,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 }, ] +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + [[package]] name = "charset-normalizer" version = "3.4.2" @@ -55,6 +211,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "comm" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, +] + [[package]] name = "contourpy" version = "1.3.2" @@ -95,6 +263,46 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, ] +[[package]] +name = "debugpy" +version = "1.8.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676 }, + { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514 }, + { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756 }, + { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119 }, + { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230 }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, +] + [[package]] name = "faiss-cpu" version = "1.11.0" @@ -112,6 +320,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/51/35b7a3f47f7859363a367c344ae5d415ea9eda65db0a7d497c7ea2c0b576/faiss_cpu-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:13eac45299532b10e911bff1abbb19d1bf5211aa9e72afeade653c3f1e50e042", size = 15005455 }, ] +[[package]] +name = "fastjsonschema" +version = "2.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, +] + [[package]] name = "filelock" version = "3.18.0" @@ -138,6 +355,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/e5/c1cb8ebabb80be76d4d28995da9416816653f8f572920ab5e3d2e3ac8285/fonttools-4.58.2-py3-none-any.whl", hash = "sha256:84f4b0bcfa046254a65ee7117094b4907e22dc98097a220ef108030eb3c15596", size = 1114597 }, ] +[[package]] +name = "fqdn" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, +] + [[package]] name = "fsspec" version = "2025.5.1" @@ -149,20 +375,29 @@ wheels = [ [[package]] name = "grpcio" -version = "1.72.1" +version = "1.73.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/7b/ca3f561aeecf0c846d15e1b38921a60dffffd5d4113931198fbf455334ee/grpcio-1.73.0.tar.gz", hash = "sha256:3af4c30918a7f0d39de500d11255f8d9da4f30e94a2033e70fe2a720e184bd8e", size = 12786424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/da/6f3f7a78e5455c4cbe87c85063cc6da05d65d25264f9d4aed800ece46294/grpcio-1.73.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:da1d677018ef423202aca6d73a8d3b2cb245699eb7f50eb5f74cae15a8e1f724", size = 5335867 }, + { url = "https://files.pythonhosted.org/packages/53/14/7d1f2526b98b9658d7be0bb163fd78d681587de6709d8b0c74b4b481b013/grpcio-1.73.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:36bf93f6a657f37c131d9dd2c391b867abf1426a86727c3575393e9e11dadb0d", size = 10595587 }, + { url = "https://files.pythonhosted.org/packages/02/24/a293c398ae44e741da1ed4b29638edbb002258797b07a783f65506165b4c/grpcio-1.73.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:d84000367508ade791d90c2bafbd905574b5ced8056397027a77a215d601ba15", size = 5765793 }, + { url = "https://files.pythonhosted.org/packages/e1/24/d84dbd0b5bf36fb44922798d525a85cefa2ffee7b7110e61406e9750ed15/grpcio-1.73.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c98ba1d928a178ce33f3425ff823318040a2b7ef875d30a0073565e5ceb058d9", size = 6415494 }, + { url = "https://files.pythonhosted.org/packages/5e/85/c80dc65aed8e9dce3d54688864bac45331d9c7600985541f18bd5cb301d4/grpcio-1.73.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a73c72922dfd30b396a5f25bb3a4590195ee45ecde7ee068acb0892d2900cf07", size = 6007279 }, + { url = "https://files.pythonhosted.org/packages/37/fc/207c00a4c6fa303d26e2cbd62fbdb0582facdfd08f55500fd83bf6b0f8db/grpcio-1.73.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:10e8edc035724aba0346a432060fd192b42bd03675d083c01553cab071a28da5", size = 6105505 }, + { url = "https://files.pythonhosted.org/packages/72/35/8fe69af820667b87ebfcb24214e42a1d53da53cb39edd6b4f84f6b36da86/grpcio-1.73.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f5cdc332b503c33b1643b12ea933582c7b081957c8bc2ea4cc4bc58054a09288", size = 6753792 }, + { url = "https://files.pythonhosted.org/packages/e2/d8/738c77c1e821e350da4a048849f695ff88a02b291f8c69db23908867aea6/grpcio-1.73.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:07ad7c57233c2109e4ac999cb9c2710c3b8e3f491a73b058b0ce431f31ed8145", size = 6287593 }, + { url = "https://files.pythonhosted.org/packages/09/ec/8498eabc018fa39ae8efe5e47e3f4c1bc9ed6281056713871895dc998807/grpcio-1.73.0-cp313-cp313-win32.whl", hash = "sha256:0eb5df4f41ea10bda99a802b2a292d85be28958ede2a50f2beb8c7fc9a738419", size = 3668637 }, + { url = "https://files.pythonhosted.org/packages/d7/35/347db7d2e7674b621afd21b12022e7f48c7b0861b5577134b4e939536141/grpcio-1.73.0-cp313-cp313-win_amd64.whl", hash = "sha256:38cf518cc54cd0c47c9539cefa8888549fcc067db0b0c66a46535ca8032020c4", size = 4335872 }, +] + +[[package]] +name = "h11" +version = "0.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/45/ff8c80a5a2e7e520d9c4d3c41484a11d33508253f6f4dd06d2c4b4158999/grpcio-1.72.1.tar.gz", hash = "sha256:87f62c94a40947cec1a0f91f95f5ba0aa8f799f23a1d42ae5be667b6b27b959c", size = 12584286 } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/69/219b0df426cf187535254825b4d4eda8ed3d3bc7dc844725a1ed14f642bf/grpcio-1.72.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:294be6e9c323a197434569a41e0fb5b5aa0962fd5d55a3dc890ec5df985f611a", size = 5183578 }, - { url = "https://files.pythonhosted.org/packages/b2/34/a5a5e037a862b2e90c1465791e091d3d2965d893d90dda6c1e7c0a991eb8/grpcio-1.72.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:41ec164dac8df2862f67457d9cdf8d8f8b6a4ca475a3ed1ba6547fff98d93717", size = 10306253 }, - { url = "https://files.pythonhosted.org/packages/56/8a/8aa932e3833e45772015b2c4a2ebf61649633698f24a84bf55477230b019/grpcio-1.72.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:761736f75c6ddea3732d97eaabe70c616271f5f542a8be95515135fdd1a638f6", size = 5586381 }, - { url = "https://files.pythonhosted.org/packages/0e/43/aff1cc76f8e04a060ec8e733d3c91e198ea9f1602a2a26f05db4185aa2dd/grpcio-1.72.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082003cb93618964c111c70d69b60ac0dc6566d4c254c9b2a775faa2965ba8f8", size = 6231049 }, - { url = "https://files.pythonhosted.org/packages/64/6e/89e5692ee8b67cedcf802553c77538cc0e21c392b37dd51525d89884db17/grpcio-1.72.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8660f736da75424949c14f7c8b1ac60a25b2f37cabdec95181834b405373e8a7", size = 5826465 }, - { url = "https://files.pythonhosted.org/packages/b2/09/bc0b2ea40f797f413f1db4a33dc83c562918b8f970938144756bced82414/grpcio-1.72.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2ada1abe2ad122b42407b2bfd79d6706a4940d4797f44bd740f5c98ca1ecda9b", size = 5944393 }, - { url = "https://files.pythonhosted.org/packages/54/92/9aa2c0c8d855e5b16062ec023ac0a1500b502790bbd724262f188253e90b/grpcio-1.72.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:0db2766d0c482ee740abbe7d00a06cc4fb54f7e5a24d3cf27c3352be18a2b1e8", size = 6573460 }, - { url = "https://files.pythonhosted.org/packages/aa/27/9fdfd66f65ab7e6a4477f7d0b7adf25171d3425760f138f075bc548f6bf4/grpcio-1.72.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4bdb404d9c2187260b34e2b22783c204fba8a9023a166cf77376190d9cf5a08", size = 6120589 }, - { url = "https://files.pythonhosted.org/packages/c3/f3/630c7a00a29001e0b82763fbd50ddcaa7c656d521f29aa58a6c8dd2b7800/grpcio-1.72.1-cp313-cp313-win32.whl", hash = "sha256:bb64722c3124c906a5b66e50a90fd36442642f653ba88a24f67d08e94bca59f3", size = 3545905 }, - { url = "https://files.pythonhosted.org/packages/c4/10/b6186e92eba035315affc30dfeabf65594dd6f778b92627fae5f40e7beec/grpcio-1.72.1-cp313-cp313-win_amd64.whl", hash = "sha256:329cc6ff5b431df9614340d3825b066a1ff0a5809a01ba2e976ef48c65a0490b", size = 4221454 }, + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, ] [[package]] @@ -180,6 +415,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/53/bf/10ca917e335861101017ff46044c90e517b574fbb37219347b83be1952f6/hf_xet-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3", size = 2310934 }, ] +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + [[package]] name = "huggingface-hub" version = "0.32.4" @@ -208,18 +471,93 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] +[[package]] +name = "ipykernel" +version = "6.29.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, +] + +[[package]] +name = "ipython" +version = "9.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/09/4c7e06b96fbd203e06567b60fb41b06db606b6a82db6db7b2c85bb72a15c/ipython-9.3.0.tar.gz", hash = "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8", size = 4426460 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/99/9ed3d52d00f1846679e3aa12e2326ac7044b5e7f90dc822b60115fa533ca/ipython-9.3.0-py3-none-any.whl", hash = "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04", size = 605320 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, +] + +[[package]] +name = "ipywidgets" +version = "8.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806 }, +] + [[package]] name = "irec" version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "faiss-cpu" }, + { name = "jupyter" }, { name = "pandas" }, { name = "scipy" }, { name = "seaborn" }, { name = "tensorboard" }, { name = "torch", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'darwin'" }, { name = "torch", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform != 'darwin'" }, + { name = "tqdm" }, { name = "transformers" }, ] @@ -231,12 +569,14 @@ dev = [ [package.metadata] requires-dist = [ { name = "faiss-cpu", specifier = ">=1" }, + { name = "jupyter", specifier = ">=1" }, { name = "pandas", specifier = ">=2" }, { name = "scipy", specifier = ">=1" }, { name = "seaborn", specifier = ">=0.13.2" }, { name = "tensorboard", specifier = ">=2" }, { name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, { name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cpu" }, + { name = "tqdm", specifier = ">=4" }, { name = "transformers", specifier = ">=4.51" }, ] @@ -244,15 +584,296 @@ requires-dist = [ dev = [{ name = "ruff", specifier = ">=0.11.4" }] [[package]] -name = "jinja2" -version = "3.1.6" +name = "isoduration" +version = "20.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "arrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "json5" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/be/c6c745ec4c4539b25a278b70e29793f10382947df0d9efba2fa09120895d/json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", size = 51907 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/9f/3500910d5a98549e3098807493851eeef2b89cdd3032227558a104dfe926/json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db", size = 36079 }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, +] + +[[package]] +name = "jsonschema" +version = "4.24.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709 }, +] + +[package.optional-dependencies] +format-nongpl = [ + { name = "fqdn" }, + { name = "idna" }, + { name = "isoduration" }, + { name = "jsonpointer" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "uri-template" }, + { name = "webcolors" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 }, +] + +[[package]] +name = "jupyter" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipywidgets" }, + { name = "jupyter-console" }, + { name = "jupyterlab" }, + { name = "nbconvert" }, + { name = "notebook" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657 }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, +] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipykernel" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "pyzmq" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510 }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, +] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", extra = ["format-nongpl"] }, + { name = "packaging" }, + { name = "python-json-logger" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "rfc3339-validator" }, + { name = "rfc3986-validator" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, +] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/b4/3200b0b09c12bc3b72d943d923323c398eff382d1dcc7c0dbc8b74630e40/jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001", size = 48741 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da", size = 69146 }, +] + +[[package]] +name = "jupyter-server" +version = "2.16.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "argon2-cffi" }, + { name = "jinja2" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "jupyter-events" }, + { name = "jupyter-server-terminals" }, + { name = "nbconvert" }, + { name = "nbformat" }, + { name = "overrides" }, + { name = "packaging" }, + { name = "prometheus-client" }, + { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, + { name = "pyzmq" }, + { name = "send2trash" }, + { name = "terminado" }, + { name = "tornado" }, + { name = "traitlets" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904 }, +] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, + { name = "terminado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656 }, +] + +[[package]] +name = "jupyterlab" +version = "4.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-lru" }, + { name = "httpx" }, + { name = "ipykernel" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyter-lsp" }, + { name = "jupyter-server" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "packaging" }, + { name = "setuptools" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/2d/d1678dcf2db66cb4a38a80d9e5fcf48c349f3ac12f2d38882993353ae768/jupyterlab-4.4.3.tar.gz", hash = "sha256:a94c32fd7f8b93e82a49dc70a6ec45a5c18281ca2a7228d12765e4e210e5bca2", size = 23032376 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/4d/7dd5c2ffbb960930452a031dc8410746183c924580f2ab4e68ceb5b3043f/jupyterlab-4.4.3-py3-none-any.whl", hash = "sha256:164302f6d4b6c44773dfc38d585665a4db401a16e5296c37df5cba63904fbdea", size = 12295480 }, +] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markupsafe" }, + { name = "babel" }, + { name = "jinja2" }, + { name = "json5" }, + { name = "jsonschema" }, + { name = "jupyter-server" }, + { name = "packaging" }, + { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, + { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571 }, ] [[package]] @@ -359,6 +980,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044 }, ] +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + +[[package]] +name = "mistune" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410 }, +] + [[package]] name = "mpmath" version = "1.3.0" @@ -368,6 +1010,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, ] +[[package]] +name = "nbclient" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "nbformat" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, +] + +[[package]] +name = "nbconvert" +version = "7.16.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "bleach", extra = ["css"] }, + { name = "defusedxml" }, + { name = "jinja2" }, + { name = "jupyter-core" }, + { name = "jupyterlab-pygments" }, + { name = "markupsafe" }, + { name = "mistune" }, + { name = "nbclient" }, + { name = "nbformat" }, + { name = "packaging" }, + { name = "pandocfilters" }, + { name = "pygments" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, +] + +[[package]] +name = "nbformat" +version = "5.10.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastjsonschema" }, + { name = "jsonschema" }, + { name = "jupyter-core" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, +] + [[package]] name = "networkx" version = "3.5" @@ -377,6 +1083,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, ] +[[package]] +name = "notebook" +version = "7.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, + { name = "jupyterlab" }, + { name = "jupyterlab-server" }, + { name = "notebook-shim" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/21/4f83b15e483da4f4f63928edd0cb08b6e7d33f8a15c23b116a90c44c6235/notebook-7.4.3.tar.gz", hash = "sha256:a1567481cd3853f2610ee0ecf5dfa12bb508e878ee8f92152c134ef7f0568a76", size = 13881668 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/1b/16c809d799e3ddd7a97c8b43734f79624b74ddef9707e7d92275a13777bc/notebook-7.4.3-py3-none-any.whl", hash = "sha256:9cdeee954e04101cadb195d90e2ab62b7c9286c1d4f858bf3bb54e40df16c0c3", size = 14286402 }, +] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-server" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, +] + [[package]] name = "numpy" version = "2.3.0" @@ -533,6 +1267,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896 }, ] +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, +] + [[package]] name = "packaging" version = "25.0" @@ -569,6 +1312,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, ] +[[package]] +name = "pandocfilters" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + [[package]] name = "pillow" version = "11.2.1" @@ -599,6 +1372,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 }, ] +[[package]] +name = "platformdirs" +version = "4.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, +] + +[[package]] +name = "prometheus-client" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694 }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 }, +] + [[package]] name = "protobuf" version = "6.31.1" @@ -613,6 +1416,57 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724 }, ] +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + [[package]] name = "pyparsing" version = "3.2.3" @@ -634,6 +1488,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] +[[package]] +name = "python-json-logger" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163 }, +] + [[package]] name = "pytz" version = "2025.2" @@ -643,6 +1506,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, ] +[[package]] +name = "pywin32" +version = "310" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, +] + +[[package]] +name = "pywinpty" +version = "2.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/7c/917f9c4681bb8d34bfbe0b79d36bbcd902651aeab48790df3d30ba0202fb/pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2", size = 29017 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408", size = 1405020 }, + { url = "https://files.pythonhosted.org/packages/7c/16/edef3515dd2030db2795dbfbe392232c7a0f3dc41b98e92b38b42ba497c7/pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901", size = 1404151 }, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -660,6 +1543,49 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] +[[package]] +name = "pyzmq" +version = "26.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/11/b9213d25230ac18a71b39b3723494e57adebe36e066397b961657b3b41c1/pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d", size = 278293 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/20/fb2c92542488db70f833b92893769a569458311a76474bda89dc4264bd18/pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3", size = 1339484 }, + { url = "https://files.pythonhosted.org/packages/58/29/2f06b9cabda3a6ea2c10f43e67ded3e47fc25c54822e2506dfb8325155d4/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43", size = 666106 }, + { url = "https://files.pythonhosted.org/packages/77/e4/dcf62bd29e5e190bd21bfccaa4f3386e01bf40d948c239239c2f1e726729/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6", size = 902056 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/b36b3d7aea236087d20189bec1a87eeb2b66009731d7055e5c65f845cdba/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e", size = 860148 }, + { url = "https://files.pythonhosted.org/packages/18/a6/f048826bc87528c208e90604c3bf573801e54bd91e390cbd2dfa860e82dc/pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771", size = 855983 }, + { url = "https://files.pythonhosted.org/packages/0a/27/454d34ab6a1d9772a36add22f17f6b85baf7c16e14325fa29e7202ca8ee8/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30", size = 1197274 }, + { url = "https://files.pythonhosted.org/packages/f4/3d/7abfeab6b83ad38aa34cbd57c6fc29752c391e3954fd12848bd8d2ec0df6/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86", size = 1507120 }, + { url = "https://files.pythonhosted.org/packages/13/ff/bc8d21dbb9bc8705126e875438a1969c4f77e03fc8565d6901c7933a3d01/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101", size = 1406738 }, + { url = "https://files.pythonhosted.org/packages/f5/5d/d4cd85b24de71d84d81229e3bbb13392b2698432cf8fdcea5afda253d587/pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637", size = 577826 }, + { url = "https://files.pythonhosted.org/packages/c6/6c/f289c1789d7bb6e5a3b3bef7b2a55089b8561d17132be7d960d3ff33b14e/pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b", size = 640406 }, + { url = "https://files.pythonhosted.org/packages/b3/99/676b8851cb955eb5236a0c1e9ec679ea5ede092bf8bf2c8a68d7e965cac3/pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08", size = 556216 }, + { url = "https://files.pythonhosted.org/packages/65/c2/1fac340de9d7df71efc59d9c50fc7a635a77b103392d1842898dd023afcb/pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4", size = 1333769 }, + { url = "https://files.pythonhosted.org/packages/5c/c7/6c03637e8d742c3b00bec4f5e4cd9d1c01b2f3694c6f140742e93ca637ed/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a", size = 658826 }, + { url = "https://files.pythonhosted.org/packages/a5/97/a8dca65913c0f78e0545af2bb5078aebfc142ca7d91cdaffa1fbc73e5dbd/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b", size = 891650 }, + { url = "https://files.pythonhosted.org/packages/7d/7e/f63af1031eb060bf02d033732b910fe48548dcfdbe9c785e9f74a6cc6ae4/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d", size = 849776 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/1a009ce582802a895c0d5fe9413f029c940a0a8ee828657a3bb0acffd88b/pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf", size = 842516 }, + { url = "https://files.pythonhosted.org/packages/6e/bc/f88b0bad0f7a7f500547d71e99f10336f2314e525d4ebf576a1ea4a1d903/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c", size = 1189183 }, + { url = "https://files.pythonhosted.org/packages/d9/8c/db446a3dd9cf894406dec2e61eeffaa3c07c3abb783deaebb9812c4af6a5/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8", size = 1495501 }, + { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540 }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, +] + [[package]] name = "regex" version = "2024.11.6" @@ -698,6 +1624,62 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, +] + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, +] + +[[package]] +name = "rpds-py" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/a6/60184b7fc00dd3ca80ac635dd5b8577d444c57e8e8742cecabfacb829921/rpds_py-0.25.1.tar.gz", hash = "sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3", size = 27304 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/da/323848a2b62abe6a0fec16ebe199dc6889c5d0a332458da8985b2980dffe/rpds_py-0.25.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559", size = 364498 }, + { url = "https://files.pythonhosted.org/packages/1f/b4/4d3820f731c80fd0cd823b3e95b9963fec681ae45ba35b5281a42382c67d/rpds_py-0.25.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1", size = 350083 }, + { url = "https://files.pythonhosted.org/packages/d5/b1/3a8ee1c9d480e8493619a437dec685d005f706b69253286f50f498cbdbcf/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c", size = 389023 }, + { url = "https://files.pythonhosted.org/packages/3b/31/17293edcfc934dc62c3bf74a0cb449ecd549531f956b72287203e6880b87/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb", size = 403283 }, + { url = "https://files.pythonhosted.org/packages/d1/ca/e0f0bc1a75a8925024f343258c8ecbd8828f8997ea2ac71e02f67b6f5299/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40", size = 524634 }, + { url = "https://files.pythonhosted.org/packages/3e/03/5d0be919037178fff33a6672ffc0afa04ea1cfcb61afd4119d1b5280ff0f/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79", size = 416233 }, + { url = "https://files.pythonhosted.org/packages/05/7c/8abb70f9017a231c6c961a8941403ed6557664c0913e1bf413cbdc039e75/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325", size = 390375 }, + { url = "https://files.pythonhosted.org/packages/7a/ac/a87f339f0e066b9535074a9f403b9313fd3892d4a164d5d5f5875ac9f29f/rpds_py-0.25.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295", size = 424537 }, + { url = "https://files.pythonhosted.org/packages/1f/8f/8d5c1567eaf8c8afe98a838dd24de5013ce6e8f53a01bd47fe8bb06b5533/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b", size = 566425 }, + { url = "https://files.pythonhosted.org/packages/95/33/03016a6be5663b389c8ab0bbbcca68d9e96af14faeff0a04affcb587e776/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98", size = 595197 }, + { url = "https://files.pythonhosted.org/packages/33/8d/da9f4d3e208c82fda311bff0cf0a19579afceb77cf456e46c559a1c075ba/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd", size = 561244 }, + { url = "https://files.pythonhosted.org/packages/e2/b3/39d5dcf7c5f742ecd6dbc88f6f84ae54184b92f5f387a4053be2107b17f1/rpds_py-0.25.1-cp313-cp313-win32.whl", hash = "sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31", size = 222254 }, + { url = "https://files.pythonhosted.org/packages/5f/19/2d6772c8eeb8302c5f834e6d0dfd83935a884e7c5ce16340c7eaf89ce925/rpds_py-0.25.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500", size = 234741 }, + { url = "https://files.pythonhosted.org/packages/5b/5a/145ada26cfaf86018d0eb304fe55eafdd4f0b6b84530246bb4a7c4fb5c4b/rpds_py-0.25.1-cp313-cp313-win_arm64.whl", hash = "sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5", size = 224830 }, + { url = "https://files.pythonhosted.org/packages/4b/ca/d435844829c384fd2c22754ff65889c5c556a675d2ed9eb0e148435c6690/rpds_py-0.25.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129", size = 359668 }, + { url = "https://files.pythonhosted.org/packages/1f/01/b056f21db3a09f89410d493d2f6614d87bb162499f98b649d1dbd2a81988/rpds_py-0.25.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d", size = 345649 }, + { url = "https://files.pythonhosted.org/packages/e0/0f/e0d00dc991e3d40e03ca36383b44995126c36b3eafa0ccbbd19664709c88/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72", size = 384776 }, + { url = "https://files.pythonhosted.org/packages/9f/a2/59374837f105f2ca79bde3c3cd1065b2f8c01678900924949f6392eab66d/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34", size = 395131 }, + { url = "https://files.pythonhosted.org/packages/9c/dc/48e8d84887627a0fe0bac53f0b4631e90976fd5d35fff8be66b8e4f3916b/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9", size = 520942 }, + { url = "https://files.pythonhosted.org/packages/7c/f5/ee056966aeae401913d37befeeab57a4a43a4f00099e0a20297f17b8f00c/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5", size = 411330 }, + { url = "https://files.pythonhosted.org/packages/ab/74/b2cffb46a097cefe5d17f94ede7a174184b9d158a0aeb195f39f2c0361e8/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194", size = 387339 }, + { url = "https://files.pythonhosted.org/packages/7f/9a/0ff0b375dcb5161c2b7054e7d0b7575f1680127505945f5cabaac890bc07/rpds_py-0.25.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6", size = 418077 }, + { url = "https://files.pythonhosted.org/packages/0d/a1/fda629bf20d6b698ae84c7c840cfb0e9e4200f664fc96e1f456f00e4ad6e/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78", size = 562441 }, + { url = "https://files.pythonhosted.org/packages/20/15/ce4b5257f654132f326f4acd87268e1006cc071e2c59794c5bdf4bebbb51/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72", size = 590750 }, + { url = "https://files.pythonhosted.org/packages/fb/ab/e04bf58a8d375aeedb5268edcc835c6a660ebf79d4384d8e0889439448b0/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66", size = 558891 }, + { url = "https://files.pythonhosted.org/packages/90/82/cb8c6028a6ef6cd2b7991e2e4ced01c854b6236ecf51e81b64b569c43d73/rpds_py-0.25.1-cp313-cp313t-win32.whl", hash = "sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523", size = 218718 }, + { url = "https://files.pythonhosted.org/packages/b6/97/5a4b59697111c89477d20ba8a44df9ca16b41e737fa569d5ae8bff99e650/rpds_py-0.25.1-cp313-cp313t-win_amd64.whl", hash = "sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763", size = 232218 }, +] + [[package]] name = "ruff" version = "0.11.13" @@ -788,6 +1770,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, ] +[[package]] +name = "send2trash" +version = "1.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072 }, +] + [[package]] name = "setuptools" version = "80.9.0" @@ -806,6 +1797,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + [[package]] name = "sympy" version = "1.14.0" @@ -848,6 +1871,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363 }, ] +[[package]] +name = "terminado" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "os_name != 'nt'" }, + { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, + { name = "tornado" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, +] + +[[package]] +name = "tinycss2" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, +] + [[package]] name = "tokenizers" version = "0.21.1" @@ -934,6 +1983,25 @@ wheels = [ { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:e27e5f7e74179fb5d814a0412e5026e4b50c9e0081e9050bc4c28c992a276eb1" }, ] +[[package]] +name = "tornado" +version = "6.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948 }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112 }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672 }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019 }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252 }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930 }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351 }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328 }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396 }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840 }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596 }, +] + [[package]] name = "tqdm" version = "4.67.1" @@ -946,6 +2014,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, ] +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + [[package]] name = "transformers" version = "4.52.4" @@ -979,6 +2056,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832 }, ] +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20250516" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/88/d65ed807393285204ab6e2801e5d11fbbea811adcaa979a2ed3b67a5ef41/types_python_dateutil-2.9.0.20250516.tar.gz", hash = "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5", size = 13943 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/3f/b0e8db149896005adc938a1e7f371d6d7e9eca4053a29b108978ed15e0c2/types_python_dateutil-2.9.0.20250516-py3-none-any.whl", hash = "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93", size = 14356 }, +] + [[package]] name = "typing-extensions" version = "4.14.0" @@ -997,6 +2083,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, ] +[[package]] +name = "uri-template" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, +] + [[package]] name = "urllib3" version = "2.4.0" @@ -1006,6 +2101,42 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, ] +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, +] + [[package]] name = "werkzeug" version = "3.1.3" @@ -1017,3 +2148,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2 wheels = [ { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, ] + +[[package]] +name = "widgetsnbextension" +version = "4.0.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503 }, +] From 356c0721122e6d650d82d28b99cfe2a02ee5ef31 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 9 Jun 2025 20:02:58 +0300 Subject: [PATCH 171/175] add letter batch processor --- configs/train/letter.json | 12 +++-- modeling/dataloader/batch_processors.py | 60 +++++++++++++++++++++++++ run.sh | 5 +++ 3 files changed, 73 insertions(+), 4 deletions(-) create mode 100755 run.sh diff --git a/configs/train/letter.json b/configs/train/letter.json index 7a4aa5ae..576106b7 100644 --- a/configs/train/letter.json +++ b/configs/train/letter.json @@ -8,8 +8,8 @@ "name": "Beauty_letter", "max_sequence_length": 50, "samplers": { - "type": "letter_last_item_prediction", - "beauty_index_json": "../../LETTER/data/Beauty/Beauty.index.json" + "type": "last_item_prediction", + "negative_sampler_type": "random" }, "beauty_inter_json": "../../LETTER/data/Beauty/Beauty.inter.json" }, @@ -18,7 +18,9 @@ "type": "torch", "batch_size": 256, "batch_processor": { - "type": "basic" + "type": "letter", + "beauty_index_json": "../../LETTER/data/Beauty/Beauty.index.json", + "semantic_length": 4 }, "drop_last": true, "shuffle": true @@ -27,7 +29,9 @@ "type": "torch", "batch_size": 256, "batch_processor": { - "type": "basic" + "type": "letter", + "beauty_index_json": "../../LETTER/data/Beauty/Beauty.index.json", + "semantic_length": 4 }, "drop_last": false, "shuffle": false diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index 9991a073..c0134377 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,3 +1,6 @@ +import json +import re + import torch from utils import MetaParent @@ -43,3 +46,60 @@ def __call__(self, batch): processed_batch[part] = torch.tensor(values, dtype=torch.long) return processed_batch + + +class LetterBatchProcessor(BaseBatchProcessor, config_name='letter'): + def __init__(self, mapping, semantic_length): + self._mapping: dict[int, list[int]] = mapping + self._prefixes = ['item', 'labels', 'positive', 'negative'] + self._semantic_length = semantic_length + + @classmethod + def create_from_config(cls, config, **kwargs): + mapping_path = config["beauty_index_json"] + with open(mapping_path, "r") as f: + mapping = json.load(f) + + semantic_length = config["semantic_length"] + + parsed = {} + + for key, semantic_ids in mapping.items(): + numbers = [int(re.search(r'\d+', item).group()) for item in semantic_ids] + assert len(numbers) == semantic_length + parsed[int(key)] = numbers + + return cls(mapping=parsed, semantic_length=semantic_length) + + def __call__(self, batch): + processed_batch = {} + + for key in batch[0].keys(): + if key.endswith('.ids'): + prefix = key.split('.')[0] + assert '{}.length'.format(prefix) in batch[0] + + processed_batch[f'{prefix}.ids'] = [] + processed_batch[f'{prefix}.length'] = [] + + for sample in batch: + processed_batch[f'{prefix}.ids'].extend(sample[f'{prefix}.ids']) + processed_batch[f'{prefix}.length'].append(sample[f'{prefix}.length']) + + for prefix in self._prefixes: + if f"{prefix}.ids" in processed_batch: + ids = processed_batch[f"{prefix}.ids"] + lengths = processed_batch[f"{prefix}.length"] + + flattened_ids = [] + + for _id in ids: + flattened_ids.extend(self._mapping[_id]) + + processed_batch[f"semantic_{prefix}.ids"] = flattened_ids + processed_batch[f"semantic_{prefix}.length"] = [length * self._semantic_length for length in lengths] + + for part, values in processed_batch.items(): + processed_batch[part] = torch.tensor(values, dtype=torch.long) + + return processed_batch diff --git a/run.sh b/run.sh new file mode 100755 index 00000000..894a3727 --- /dev/null +++ b/run.sh @@ -0,0 +1,5 @@ +source .venv/bin/activate + +cd modeling + +python train.py --params ../configs/train/letter.json \ No newline at end of file From 488a94ca7fb3244378a507b0fc721af8e68439ef Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 9 Jun 2025 21:21:00 +0300 Subject: [PATCH 172/175] comment out dev thing --- .gitignore | 1 + run.sh | 5 - uv.lock | 2159 ---------------------------------------------------- 3 files changed, 1 insertion(+), 2164 deletions(-) delete mode 100755 run.sh delete mode 100644 uv.lock diff --git a/.gitignore b/.gitignore index 8e376638..ae0a51ea 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ saved_logs/* papers checkpoints/* *.prof +uv.lock diff --git a/run.sh b/run.sh deleted file mode 100755 index 894a3727..00000000 --- a/run.sh +++ /dev/null @@ -1,5 +0,0 @@ -source .venv/bin/activate - -cd modeling - -python train.py --params ../configs/train/letter.json \ No newline at end of file diff --git a/uv.lock b/uv.lock deleted file mode 100644 index af2a3e74..00000000 --- a/uv.lock +++ /dev/null @@ -1,2159 +0,0 @@ -version = 1 -revision = 1 -requires-python = ">=3.13" -resolution-markers = [ - "sys_platform != 'darwin'", - "sys_platform == 'darwin'", -] - -[[package]] -name = "absl-py" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/15/18693af986560a5c3cc0b84a8046b536ffb2cdb536e03cce897f2759e284/absl_py-2.3.0.tar.gz", hash = "sha256:d96fda5c884f1b22178852f30ffa85766d50b99e00775ea626c23304f582fc4f", size = 116400 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/04/9d75e1d3bb4ab8ec67ff10919476ccdee06c098bcfcf3a352da5f985171d/absl_py-2.3.0-py3-none-any.whl", hash = "sha256:9824a48b654a306168f63e0d97714665f8490b8d89ec7bf2efc24bf67cf579b3", size = 135657 }, -] - -[[package]] -name = "anyio" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "sniffio" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, -] - -[[package]] -name = "appnope" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, -] - -[[package]] -name = "argon2-cffi" -version = "25.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "argon2-cffi-bindings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657 }, -] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658 }, - { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583 }, - { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168 }, - { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709 }, - { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613 }, - { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583 }, - { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475 }, - { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698 }, - { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817 }, - { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104 }, -] - -[[package]] -name = "arrow" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, - { name = "types-python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419 }, -] - -[[package]] -name = "asttokens" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, -] - -[[package]] -name = "async-lru" -version = "2.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069 }, -] - -[[package]] -name = "attrs" -version = "25.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815 }, -] - -[[package]] -name = "babel" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.13.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285 }, -] - -[[package]] -name = "bleach" -version = "6.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, -] - -[package.optional-dependencies] -css = [ - { name = "tinycss2" }, -] - -[[package]] -name = "certifi" -version = "2025.4.26" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - -[[package]] -name = "comm" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, -] - -[[package]] -name = "contourpy" -version = "1.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 }, - { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 }, - { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, - { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, - { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, - { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, - { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, - { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, - { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, - { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, - { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 }, - { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 }, - { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, - { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, - { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, - { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, - { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, - { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, - { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, - { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, -] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, -] - -[[package]] -name = "debugpy" -version = "1.8.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/75/087fe07d40f490a78782ff3b0a30e3968936854105487decdb33446d4b0e/debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322", size = 1641444 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/e4/395c792b243f2367d84202dc33689aa3d910fb9826a7491ba20fc9e261f5/debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f", size = 2485676 }, - { url = "https://files.pythonhosted.org/packages/ba/f1/6f2ee3f991327ad9e4c2f8b82611a467052a0fb0e247390192580e89f7ff/debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15", size = 4217514 }, - { url = "https://files.pythonhosted.org/packages/79/28/b9d146f8f2dc535c236ee09ad3e5ac899adb39d7a19b49f03ac95d216beb/debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e", size = 5254756 }, - { url = "https://files.pythonhosted.org/packages/e0/62/a7b4a57013eac4ccaef6977966e6bec5c63906dd25a86e35f155952e29a1/debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e", size = 5297119 }, - { url = "https://files.pythonhosted.org/packages/97/1a/481f33c37ee3ac8040d3d51fc4c4e4e7e61cb08b8bc8971d6032acc2279f/debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20", size = 5256230 }, -] - -[[package]] -name = "decorator" -version = "5.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604 }, -] - -[[package]] -name = "executing" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, -] - -[[package]] -name = "faiss-cpu" -version = "1.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/9a/e33fc563f007924dd4ec3c5101fe5320298d6c13c158a24a9ed849058569/faiss_cpu-1.11.0.tar.gz", hash = "sha256:44877b896a2b30a61e35ea4970d008e8822545cb340eca4eff223ac7f40a1db9", size = 70218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/90/d2329ce56423cc61f4c20ae6b4db001c6f88f28bf5a7ef7f8bbc246fd485/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:0c98e5feff83b87348e44eac4d578d6f201780dae6f27f08a11d55536a20b3a8", size = 3313807 }, - { url = "https://files.pythonhosted.org/packages/24/14/8af8f996d54e6097a86e6048b1a2c958c52dc985eb4f935027615079939e/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:796e90389427b1c1fb06abdb0427bb343b6350f80112a2e6090ac8f176ff7416", size = 7913539 }, - { url = "https://files.pythonhosted.org/packages/b2/2b/437c2f36c3aa3cffe041479fced1c76420d3e92e1f434f1da3be3e6f32b1/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b6e355dda72b3050991bc32031b558b8f83a2b3537a2b9e905a84f28585b47e", size = 3785181 }, - { url = "https://files.pythonhosted.org/packages/66/75/955527414371843f558234df66fa0b62c6e86e71e4022b1be9333ac6004c/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6c482d07194638c169b4422774366e7472877d09181ea86835e782e6304d4185", size = 31287635 }, - { url = "https://files.pythonhosted.org/packages/50/51/35b7a3f47f7859363a367c344ae5d415ea9eda65db0a7d497c7ea2c0b576/faiss_cpu-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:13eac45299532b10e911bff1abbb19d1bf5211aa9e72afeade653c3f1e50e042", size = 15005455 }, -] - -[[package]] -name = "fastjsonschema" -version = "2.21.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/50/4b769ce1ac4071a1ef6d86b1a3fb56cdc3a37615e8c5519e1af96cdac366/fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4", size = 373939 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/2b/0817a2b257fe88725c25589d89aec060581aabf668707a8d03b2e9e0cb2a/fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667", size = 23924 }, -] - -[[package]] -name = "filelock" -version = "3.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, -] - -[[package]] -name = "fonttools" -version = "4.58.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/a9/3319c6ae07fd9dde51064ddc6d82a2b707efad8ed407d700a01091121bbc/fonttools-4.58.2.tar.gz", hash = "sha256:4b491ddbfd50b856e84b0648b5f7941af918f6d32f938f18e62b58426a8d50e2", size = 3524285 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/01/29f81970a508408af20b434ff5136cd1c7ef92198957eb8ddadfbb9ef177/fonttools-4.58.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:829048ef29dbefec35d95cc6811014720371c95bdc6ceb0afd2f8e407c41697c", size = 2732398 }, - { url = "https://files.pythonhosted.org/packages/0c/f1/095f2338359333adb2f1c51b8b2ad94bf9a2fa17e5fcbdf8a7b8e3672d2d/fonttools-4.58.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:64998c5993431e45b474ed5f579f18555f45309dd1cf8008b594d2fe0a94be59", size = 2306390 }, - { url = "https://files.pythonhosted.org/packages/bf/d4/9eba134c7666a26668c28945355cd86e5d57828b6b8d952a5489fe45d7e2/fonttools-4.58.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b887a1cf9fbcb920980460ee4a489c8aba7e81341f6cdaeefa08c0ab6529591c", size = 4795100 }, - { url = "https://files.pythonhosted.org/packages/2a/34/345f153a24c1340daa62340c3be2d1e5ee6c1ee57e13f6d15613209e688b/fonttools-4.58.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27d74b9f6970cefbcda33609a3bee1618e5e57176c8b972134c4e22461b9c791", size = 4864585 }, - { url = "https://files.pythonhosted.org/packages/01/5f/091979a25c9a6c4ba064716cfdfe9431f78ed6ffba4bd05ae01eee3532e9/fonttools-4.58.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec26784610056a770e15a60f9920cee26ae10d44d1e43271ea652dadf4e7a236", size = 4866191 }, - { url = "https://files.pythonhosted.org/packages/9d/09/3944d0ece4a39560918cba37c2e0453a5f826b665a6db0b43abbd9dbe7e1/fonttools-4.58.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed0a71d57dd427c0fb89febd08cac9b925284d2a8888e982a6c04714b82698d7", size = 5003867 }, - { url = "https://files.pythonhosted.org/packages/68/97/190b8f9ba22f8b7d07df2faa9fd7087b453776d0705d3cb5b0cbd89b8ef0/fonttools-4.58.2-cp313-cp313-win32.whl", hash = "sha256:994e362b01460aa863ef0cb41a29880bc1a498c546952df465deff7abf75587a", size = 2175688 }, - { url = "https://files.pythonhosted.org/packages/94/ea/0e6d4a39528dbb6e0f908c2ad219975be0a506ed440fddf5453b90f76981/fonttools-4.58.2-cp313-cp313-win_amd64.whl", hash = "sha256:f95dec862d7c395f2d4efe0535d9bdaf1e3811e51b86432fa2a77e73f8195756", size = 2226464 }, - { url = "https://files.pythonhosted.org/packages/e8/e5/c1cb8ebabb80be76d4d28995da9416816653f8f572920ab5e3d2e3ac8285/fonttools-4.58.2-py3-none-any.whl", hash = "sha256:84f4b0bcfa046254a65ee7117094b4907e22dc98097a220ef108030eb3c15596", size = 1114597 }, -] - -[[package]] -name = "fqdn" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 }, -] - -[[package]] -name = "fsspec" -version = "2025.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/f7/27f15d41f0ed38e8fcc488584b57e902b331da7f7c6dcda53721b15838fc/fsspec-2025.5.1.tar.gz", hash = "sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475", size = 303033 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/61/78c7b3851add1481b048b5fdc29067397a1784e2910592bc81bb3f608635/fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462", size = 199052 }, -] - -[[package]] -name = "grpcio" -version = "1.73.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/7b/ca3f561aeecf0c846d15e1b38921a60dffffd5d4113931198fbf455334ee/grpcio-1.73.0.tar.gz", hash = "sha256:3af4c30918a7f0d39de500d11255f8d9da4f30e94a2033e70fe2a720e184bd8e", size = 12786424 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/da/6f3f7a78e5455c4cbe87c85063cc6da05d65d25264f9d4aed800ece46294/grpcio-1.73.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:da1d677018ef423202aca6d73a8d3b2cb245699eb7f50eb5f74cae15a8e1f724", size = 5335867 }, - { url = "https://files.pythonhosted.org/packages/53/14/7d1f2526b98b9658d7be0bb163fd78d681587de6709d8b0c74b4b481b013/grpcio-1.73.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:36bf93f6a657f37c131d9dd2c391b867abf1426a86727c3575393e9e11dadb0d", size = 10595587 }, - { url = "https://files.pythonhosted.org/packages/02/24/a293c398ae44e741da1ed4b29638edbb002258797b07a783f65506165b4c/grpcio-1.73.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:d84000367508ade791d90c2bafbd905574b5ced8056397027a77a215d601ba15", size = 5765793 }, - { url = "https://files.pythonhosted.org/packages/e1/24/d84dbd0b5bf36fb44922798d525a85cefa2ffee7b7110e61406e9750ed15/grpcio-1.73.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c98ba1d928a178ce33f3425ff823318040a2b7ef875d30a0073565e5ceb058d9", size = 6415494 }, - { url = "https://files.pythonhosted.org/packages/5e/85/c80dc65aed8e9dce3d54688864bac45331d9c7600985541f18bd5cb301d4/grpcio-1.73.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a73c72922dfd30b396a5f25bb3a4590195ee45ecde7ee068acb0892d2900cf07", size = 6007279 }, - { url = "https://files.pythonhosted.org/packages/37/fc/207c00a4c6fa303d26e2cbd62fbdb0582facdfd08f55500fd83bf6b0f8db/grpcio-1.73.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:10e8edc035724aba0346a432060fd192b42bd03675d083c01553cab071a28da5", size = 6105505 }, - { url = "https://files.pythonhosted.org/packages/72/35/8fe69af820667b87ebfcb24214e42a1d53da53cb39edd6b4f84f6b36da86/grpcio-1.73.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f5cdc332b503c33b1643b12ea933582c7b081957c8bc2ea4cc4bc58054a09288", size = 6753792 }, - { url = "https://files.pythonhosted.org/packages/e2/d8/738c77c1e821e350da4a048849f695ff88a02b291f8c69db23908867aea6/grpcio-1.73.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:07ad7c57233c2109e4ac999cb9c2710c3b8e3f491a73b058b0ce431f31ed8145", size = 6287593 }, - { url = "https://files.pythonhosted.org/packages/09/ec/8498eabc018fa39ae8efe5e47e3f4c1bc9ed6281056713871895dc998807/grpcio-1.73.0-cp313-cp313-win32.whl", hash = "sha256:0eb5df4f41ea10bda99a802b2a292d85be28958ede2a50f2beb8c7fc9a738419", size = 3668637 }, - { url = "https://files.pythonhosted.org/packages/d7/35/347db7d2e7674b621afd21b12022e7f48c7b0861b5577134b4e939536141/grpcio-1.73.0-cp313-cp313-win_amd64.whl", hash = "sha256:38cf518cc54cd0c47c9539cefa8888549fcc067db0b0c66a46535ca8032020c4", size = 4335872 }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, -] - -[[package]] -name = "hf-xet" -version = "1.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/dc/dc091aeeb671e71cbec30e84963f9c0202c17337b24b0a800e7d205543e8/hf_xet-1.1.3.tar.gz", hash = "sha256:a5f09b1dd24e6ff6bcedb4b0ddab2d81824098bb002cf8b4ffa780545fa348c3", size = 488127 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/1f/bc01a4c0894973adebbcd4aa338a06815c76333ebb3921d94dcbd40dae6a/hf_xet-1.1.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c3b508b5f583a75641aebf732853deb058953370ce8184f5dabc49f803b0819b", size = 2256929 }, - { url = "https://files.pythonhosted.org/packages/78/07/6ef50851b5c6b45b77a6e018fa299c69a2db3b8bbd0d5af594c0238b1ceb/hf_xet-1.1.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b788a61977fbe6b5186e66239e2a329a3f0b7e7ff50dad38984c0c74f44aeca1", size = 2153719 }, - { url = "https://files.pythonhosted.org/packages/52/48/e929e6e3db6e4758c2adf0f2ca2c59287f1b76229d8bdc1a4c9cfc05212e/hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd2da210856444a34aad8ada2fc12f70dabed7cc20f37e90754d1d9b43bc0534", size = 4820519 }, - { url = "https://files.pythonhosted.org/packages/28/2e/03f89c5014a5aafaa9b150655f811798a317036646623bdaace25f485ae8/hf_xet-1.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8203f52827e3df65981984936654a5b390566336956f65765a8aa58c362bb841", size = 4964121 }, - { url = "https://files.pythonhosted.org/packages/47/8b/5cd399a92b47d98086f55fc72d69bc9ea5e5c6f27a9ed3e0cdd6be4e58a3/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:30c575a5306f8e6fda37edb866762140a435037365eba7a17ce7bd0bc0216a8b", size = 5283017 }, - { url = "https://files.pythonhosted.org/packages/53/e3/2fcec58d2fcfd25ff07feb876f466cfa11f8dcf9d3b742c07fe9dd51ee0a/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7c1a6aa6abed1f696f8099aa9796ca04c9ee778a58728a115607de9cc4638ff1", size = 4970349 }, - { url = "https://files.pythonhosted.org/packages/53/bf/10ca917e335861101017ff46044c90e517b574fbb37219347b83be1952f6/hf_xet-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3", size = 2310934 }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, -] - -[[package]] -name = "huggingface-hub" -version = "0.32.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/c8/4f7d270285c46324fd66f62159eb16739aa5696f422dba57678a8c6b78e9/huggingface_hub-0.32.4.tar.gz", hash = "sha256:f61d45cd338736f59fb0e97550b74c24ee771bcc92c05ae0766b9116abe720be", size = 424494 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/8b/222140f3cfb6f17b0dd8c4b9a0b36bd4ebefe9fb0098ba35d6960abcda0f/huggingface_hub-0.32.4-py3-none-any.whl", hash = "sha256:37abf8826b38d971f60d3625229221c36e53fe58060286db9baf619cfbf39767", size = 512101 }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, -] - -[[package]] -name = "ipykernel" -version = "6.29.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin'" }, - { name = "comm" }, - { name = "debugpy" }, - { name = "ipython" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, -] - -[[package]] -name = "ipython" -version = "9.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "ipython-pygments-lexers" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/09/4c7e06b96fbd203e06567b60fb41b06db606b6a82db6db7b2c85bb72a15c/ipython-9.3.0.tar.gz", hash = "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8", size = 4426460 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/99/9ed3d52d00f1846679e3aa12e2326ac7044b5e7f90dc822b60115fa533ca/ipython-9.3.0-py3-none-any.whl", hash = "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04", size = 605320 }, -] - -[[package]] -name = "ipython-pygments-lexers" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, -] - -[[package]] -name = "ipywidgets" -version = "8.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "comm" }, - { name = "ipython" }, - { name = "jupyterlab-widgets" }, - { name = "traitlets" }, - { name = "widgetsnbextension" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3e/48/d3dbac45c2814cb73812f98dd6b38bbcc957a4e7bb31d6ea9c03bf94ed87/ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376", size = 116721 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/58/6a/9166369a2f092bd286d24e6307de555d63616e8ddb373ebad2b5635ca4cd/ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb", size = 139806 }, -] - -[[package]] -name = "irec" -version = "0.1.0" -source = { virtual = "." } -dependencies = [ - { name = "faiss-cpu" }, - { name = "jupyter" }, - { name = "pandas" }, - { name = "scipy" }, - { name = "seaborn" }, - { name = "tensorboard" }, - { name = "torch", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'darwin'" }, - { name = "torch", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform != 'darwin'" }, - { name = "tqdm" }, - { name = "transformers" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "faiss-cpu", specifier = ">=1" }, - { name = "jupyter", specifier = ">=1" }, - { name = "pandas", specifier = ">=2" }, - { name = "scipy", specifier = ">=1" }, - { name = "seaborn", specifier = ">=0.13.2" }, - { name = "tensorboard", specifier = ">=2" }, - { name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cpu" }, - { name = "tqdm", specifier = ">=4" }, - { name = "transformers", specifier = ">=4.51" }, -] - -[package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.11.4" }] - -[[package]] -name = "isoduration" -version = "20.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "arrow" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321 }, -] - -[[package]] -name = "jedi" -version = "0.19.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "parso" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, -] - -[[package]] -name = "json5" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/be/c6c745ec4c4539b25a278b70e29793f10382947df0d9efba2fa09120895d/json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a", size = 51907 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/9f/3500910d5a98549e3098807493851eeef2b89cdd3032227558a104dfe926/json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db", size = 36079 }, -] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 }, -] - -[[package]] -name = "jsonschema" -version = "4.24.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/d3/1cf5326b923a53515d8f3a2cd442e6d7e94fcc444716e879ea70a0ce3177/jsonschema-4.24.0.tar.gz", hash = "sha256:0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196", size = 353480 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/3d/023389198f69c722d039351050738d6755376c8fd343e91dc493ea485905/jsonschema-4.24.0-py3-none-any.whl", hash = "sha256:a462455f19f5faf404a7902952b6f0e3ce868f3ee09a359b05eca6673bd8412d", size = 88709 }, -] - -[package.optional-dependencies] -format-nongpl = [ - { name = "fqdn" }, - { name = "idna" }, - { name = "isoduration" }, - { name = "jsonpointer" }, - { name = "rfc3339-validator" }, - { name = "rfc3986-validator" }, - { name = "uri-template" }, - { name = "webcolors" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437 }, -] - -[[package]] -name = "jupyter" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ipykernel" }, - { name = "ipywidgets" }, - { name = "jupyter-console" }, - { name = "jupyterlab" }, - { name = "nbconvert" }, - { name = "notebook" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/58/f3/af28ea964ab8bc1e472dba2e82627d36d470c51f5cd38c37502eeffaa25e/jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a", size = 5714959 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/64/285f20a31679bf547b75602702f7800e74dbabae36ef324f716c02804753/jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83", size = 2657 }, -] - -[[package]] -name = "jupyter-client" -version = "8.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-core" }, - { name = "python-dateutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, -] - -[[package]] -name = "jupyter-console" -version = "6.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ipykernel" }, - { name = "ipython" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "pyzmq" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bd/2d/e2fd31e2fc41c14e2bcb6c976ab732597e907523f6b2420305f9fc7fdbdb/jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539", size = 34363 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510 }, -] - -[[package]] -name = "jupyter-core" -version = "5.8.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "platformdirs" }, - { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880 }, -] - -[[package]] -name = "jupyter-events" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", extra = ["format-nongpl"] }, - { name = "packaging" }, - { name = "python-json-logger" }, - { name = "pyyaml" }, - { name = "referencing" }, - { name = "rfc3339-validator" }, - { name = "rfc3986-validator" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430 }, -] - -[[package]] -name = "jupyter-lsp" -version = "2.2.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/85/b4/3200b0b09c12bc3b72d943d923323c398eff382d1dcc7c0dbc8b74630e40/jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001", size = 48741 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/e0/7bd7cff65594fd9936e2f9385701e44574fc7d721331ff676ce440b14100/jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da", size = 69146 }, -] - -[[package]] -name = "jupyter-server" -version = "2.16.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "argon2-cffi" }, - { name = "jinja2" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "jupyter-events" }, - { name = "jupyter-server-terminals" }, - { name = "nbconvert" }, - { name = "nbformat" }, - { name = "overrides" }, - { name = "packaging" }, - { name = "prometheus-client" }, - { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, - { name = "pyzmq" }, - { name = "send2trash" }, - { name = "terminado" }, - { name = "tornado" }, - { name = "traitlets" }, - { name = "websocket-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/41/c8/ba2bbcd758c47f1124c4ca14061e8ce60d9c6fd537faee9534a95f83521a/jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6", size = 728177 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/1f/5ebbced977171d09a7b0c08a285ff9a20aafb9c51bde07e52349ff1ddd71/jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e", size = 386904 }, -] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, - { name = "terminado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656 }, -] - -[[package]] -name = "jupyterlab" -version = "4.4.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "async-lru" }, - { name = "httpx" }, - { name = "ipykernel" }, - { name = "jinja2" }, - { name = "jupyter-core" }, - { name = "jupyter-lsp" }, - { name = "jupyter-server" }, - { name = "jupyterlab-server" }, - { name = "notebook-shim" }, - { name = "packaging" }, - { name = "setuptools" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d3/2d/d1678dcf2db66cb4a38a80d9e5fcf48c349f3ac12f2d38882993353ae768/jupyterlab-4.4.3.tar.gz", hash = "sha256:a94c32fd7f8b93e82a49dc70a6ec45a5c18281ca2a7228d12765e4e210e5bca2", size = 23032376 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/4d/7dd5c2ffbb960930452a031dc8410746183c924580f2ab4e68ceb5b3043f/jupyterlab-4.4.3-py3-none-any.whl", hash = "sha256:164302f6d4b6c44773dfc38d585665a4db401a16e5296c37df5cba63904fbdea", size = 12295480 }, -] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884 }, -] - -[[package]] -name = "jupyterlab-server" -version = "2.27.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "jinja2" }, - { name = "json5" }, - { name = "jsonschema" }, - { name = "jupyter-server" }, - { name = "packaging" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, -] - -[[package]] -name = "jupyterlab-widgets" -version = "3.0.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/7d/160595ca88ee87ac6ba95d82177d29ec60aaa63821d3077babb22ce031a5/jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b", size = 213149 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571 }, -] - -[[package]] -name = "kiwisolver" -version = "1.4.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, - { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, - { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, - { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, - { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, - { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, - { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, - { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, - { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, - { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, - { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, - { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, - { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, - { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, - { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, - { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, - { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, - { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, - { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, - { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, - { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, - { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, - { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, - { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, - { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, - { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, - { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, - { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, -] - -[[package]] -name = "markdown" -version = "3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/15/222b423b0b88689c266d9eac4e61396fe2cc53464459d6a37618ac863b24/markdown-3.8.tar.gz", hash = "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f", size = 360906 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/3f/afe76f8e2246ffbc867440cbcf90525264df0e658f8a5ca1f872b3f6192a/markdown-3.8-py3-none-any.whl", hash = "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc", size = 106210 }, -] - -[[package]] -name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, -] - -[[package]] -name = "matplotlib" -version = "3.10.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318 }, - { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132 }, - { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633 }, - { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031 }, - { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988 }, - { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034 }, - { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223 }, - { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985 }, - { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109 }, - { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082 }, - { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699 }, - { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044 }, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, -] - -[[package]] -name = "mistune" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410 }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, -] - -[[package]] -name = "nbclient" -version = "0.10.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "nbformat" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434 }, -] - -[[package]] -name = "nbconvert" -version = "7.16.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "bleach", extra = ["css"] }, - { name = "defusedxml" }, - { name = "jinja2" }, - { name = "jupyter-core" }, - { name = "jupyterlab-pygments" }, - { name = "markupsafe" }, - { name = "mistune" }, - { name = "nbclient" }, - { name = "nbformat" }, - { name = "packaging" }, - { name = "pandocfilters" }, - { name = "pygments" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525 }, -] - -[[package]] -name = "nbformat" -version = "5.10.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastjsonschema" }, - { name = "jsonschema" }, - { name = "jupyter-core" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454 }, -] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, -] - -[[package]] -name = "networkx" -version = "3.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, -] - -[[package]] -name = "notebook" -version = "7.4.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, - { name = "jupyterlab" }, - { name = "jupyterlab-server" }, - { name = "notebook-shim" }, - { name = "tornado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/21/4f83b15e483da4f4f63928edd0cb08b6e7d33f8a15c23b116a90c44c6235/notebook-7.4.3.tar.gz", hash = "sha256:a1567481cd3853f2610ee0ecf5dfa12bb508e878ee8f92152c134ef7f0568a76", size = 13881668 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/1b/16c809d799e3ddd7a97c8b43734f79624b74ddef9707e7d92275a13777bc/notebook-7.4.3-py3-none-any.whl", hash = "sha256:9cdeee954e04101cadb195d90e2ab62b7c9286c1d4f858bf3bb54e40df16c0c3", size = 14286402 }, -] - -[[package]] -name = "notebook-shim" -version = "0.2.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, -] - -[[package]] -name = "numpy" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633 }, - { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683 }, - { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683 }, - { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253 }, - { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658 }, - { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765 }, - { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335 }, - { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608 }, - { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005 }, - { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093 }, - { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689 }, - { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612 }, - { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953 }, - { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806 }, - { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169 }, - { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701 }, - { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983 }, - { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798 }, - { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632 }, - { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491 }, - { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 }, -] - -[[package]] -name = "nvidia-cublas-cu12" -version = "12.8.3.14" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630 }, -] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.8.57" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547 }, -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.8.61" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585 }, -] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.8.57" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762 }, -] - -[[package]] -name = "nvidia-cudnn-cu12" -version = "9.7.1.26" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421 }, -] - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.3.3.41" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795 }, -] - -[[package]] -name = "nvidia-cufile-cu12" -version = "1.13.0.11" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801 }, -] - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.9.55" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038 }, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.7.2.55" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 }, -] - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.5.7.53" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 }, -] - -[[package]] -name = "nvidia-cusparselt-cu12" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796 }, -] - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.26.2" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755 }, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.8.61" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473 }, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.8.55" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896 }, -] - -[[package]] -name = "overrides" -version = "7.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832 }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, -] - -[[package]] -name = "pandas" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913 }, - { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249 }, - { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359 }, - { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789 }, - { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734 }, - { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381 }, - { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135 }, - { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356 }, - { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674 }, - { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876 }, - { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182 }, - { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686 }, - { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, -] - -[[package]] -name = "pandocfilters" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663 }, -] - -[[package]] -name = "parso" -version = "0.8.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, -] - -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, -] - -[[package]] -name = "pillow" -version = "11.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/cb/bb5c01fcd2a69335b86c22142b2bccfc3464087efb7fd382eee5ffc7fdf7/pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", size = 47026707 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/9c/447528ee3776e7ab8897fe33697a7ff3f0475bb490c5ac1456a03dc57956/pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", size = 3190098 }, - { url = "https://files.pythonhosted.org/packages/b5/09/29d5cd052f7566a63e5b506fac9c60526e9ecc553825551333e1e18a4858/pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", size = 3030166 }, - { url = "https://files.pythonhosted.org/packages/71/5d/446ee132ad35e7600652133f9c2840b4799bbd8e4adba881284860da0a36/pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", size = 4408674 }, - { url = "https://files.pythonhosted.org/packages/69/5f/cbe509c0ddf91cc3a03bbacf40e5c2339c4912d16458fcb797bb47bcb269/pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", size = 4496005 }, - { url = "https://files.pythonhosted.org/packages/f9/b3/dd4338d8fb8a5f312021f2977fb8198a1184893f9b00b02b75d565c33b51/pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", size = 4518707 }, - { url = "https://files.pythonhosted.org/packages/13/eb/2552ecebc0b887f539111c2cd241f538b8ff5891b8903dfe672e997529be/pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", size = 4610008 }, - { url = "https://files.pythonhosted.org/packages/72/d1/924ce51bea494cb6e7959522d69d7b1c7e74f6821d84c63c3dc430cbbf3b/pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", size = 4585420 }, - { url = "https://files.pythonhosted.org/packages/43/ab/8f81312d255d713b99ca37479a4cb4b0f48195e530cdc1611990eb8fd04b/pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b", size = 4667655 }, - { url = "https://files.pythonhosted.org/packages/94/86/8f2e9d2dc3d308dfd137a07fe1cc478df0a23d42a6c4093b087e738e4827/pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", size = 2332329 }, - { url = "https://files.pythonhosted.org/packages/6d/ec/1179083b8d6067a613e4d595359b5fdea65d0a3b7ad623fee906e1b3c4d2/pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", size = 2676388 }, - { url = "https://files.pythonhosted.org/packages/23/f1/2fc1e1e294de897df39fa8622d829b8828ddad938b0eaea256d65b84dd72/pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", size = 2414950 }, - { url = "https://files.pythonhosted.org/packages/c4/3e/c328c48b3f0ead7bab765a84b4977acb29f101d10e4ef57a5e3400447c03/pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", size = 3192759 }, - { url = "https://files.pythonhosted.org/packages/18/0e/1c68532d833fc8b9f404d3a642991441d9058eccd5606eab31617f29b6d4/pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", size = 3033284 }, - { url = "https://files.pythonhosted.org/packages/b7/cb/6faf3fb1e7705fd2db74e070f3bf6f88693601b0ed8e81049a8266de4754/pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", size = 4445826 }, - { url = "https://files.pythonhosted.org/packages/07/94/8be03d50b70ca47fb434a358919d6a8d6580f282bbb7af7e4aa40103461d/pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", size = 4527329 }, - { url = "https://files.pythonhosted.org/packages/fd/a4/bfe78777076dc405e3bd2080bc32da5ab3945b5a25dc5d8acaa9de64a162/pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", size = 4549049 }, - { url = "https://files.pythonhosted.org/packages/65/4d/eaf9068dc687c24979e977ce5677e253624bd8b616b286f543f0c1b91662/pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", size = 4635408 }, - { url = "https://files.pythonhosted.org/packages/1d/26/0fd443365d9c63bc79feb219f97d935cd4b93af28353cba78d8e77b61719/pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", size = 4614863 }, - { url = "https://files.pythonhosted.org/packages/49/65/dca4d2506be482c2c6641cacdba5c602bc76d8ceb618fd37de855653a419/pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", size = 4692938 }, - { url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774 }, - { url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895 }, - { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 }, -] - -[[package]] -name = "platformdirs" -version = "4.3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, -] - -[[package]] -name = "prometheus-client" -version = "0.22.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694 }, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.51" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wcwidth" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810 }, -] - -[[package]] -name = "protobuf" -version = "6.31.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603 }, - { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283 }, - { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604 }, - { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115 }, - { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070 }, - { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724 }, -] - -[[package]] -name = "psutil" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, -] - -[[package]] -name = "pycparser" -version = "2.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, -] - -[[package]] -name = "pygments" -version = "2.19.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, -] - -[[package]] -name = "pyparsing" -version = "3.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "python-json-logger" -version = "3.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163 }, -] - -[[package]] -name = "pytz" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, -] - -[[package]] -name = "pywin32" -version = "310" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, -] - -[[package]] -name = "pywinpty" -version = "2.0.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/7c/917f9c4681bb8d34bfbe0b79d36bbcd902651aeab48790df3d30ba0202fb/pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2", size = 29017 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/16/2ab7b3b7f55f3c6929e5f629e1a68362981e4e5fed592a2ed1cb4b4914a5/pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408", size = 1405020 }, - { url = "https://files.pythonhosted.org/packages/7c/16/edef3515dd2030db2795dbfbe392232c7a0f3dc41b98e92b38b42ba497c7/pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901", size = 1404151 }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, -] - -[[package]] -name = "pyzmq" -version = "26.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/11/b9213d25230ac18a71b39b3723494e57adebe36e066397b961657b3b41c1/pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d", size = 278293 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/20/fb2c92542488db70f833b92893769a569458311a76474bda89dc4264bd18/pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3", size = 1339484 }, - { url = "https://files.pythonhosted.org/packages/58/29/2f06b9cabda3a6ea2c10f43e67ded3e47fc25c54822e2506dfb8325155d4/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43", size = 666106 }, - { url = "https://files.pythonhosted.org/packages/77/e4/dcf62bd29e5e190bd21bfccaa4f3386e01bf40d948c239239c2f1e726729/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6", size = 902056 }, - { url = "https://files.pythonhosted.org/packages/1a/cf/b36b3d7aea236087d20189bec1a87eeb2b66009731d7055e5c65f845cdba/pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e", size = 860148 }, - { url = "https://files.pythonhosted.org/packages/18/a6/f048826bc87528c208e90604c3bf573801e54bd91e390cbd2dfa860e82dc/pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771", size = 855983 }, - { url = "https://files.pythonhosted.org/packages/0a/27/454d34ab6a1d9772a36add22f17f6b85baf7c16e14325fa29e7202ca8ee8/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30", size = 1197274 }, - { url = "https://files.pythonhosted.org/packages/f4/3d/7abfeab6b83ad38aa34cbd57c6fc29752c391e3954fd12848bd8d2ec0df6/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86", size = 1507120 }, - { url = "https://files.pythonhosted.org/packages/13/ff/bc8d21dbb9bc8705126e875438a1969c4f77e03fc8565d6901c7933a3d01/pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101", size = 1406738 }, - { url = "https://files.pythonhosted.org/packages/f5/5d/d4cd85b24de71d84d81229e3bbb13392b2698432cf8fdcea5afda253d587/pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637", size = 577826 }, - { url = "https://files.pythonhosted.org/packages/c6/6c/f289c1789d7bb6e5a3b3bef7b2a55089b8561d17132be7d960d3ff33b14e/pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b", size = 640406 }, - { url = "https://files.pythonhosted.org/packages/b3/99/676b8851cb955eb5236a0c1e9ec679ea5ede092bf8bf2c8a68d7e965cac3/pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08", size = 556216 }, - { url = "https://files.pythonhosted.org/packages/65/c2/1fac340de9d7df71efc59d9c50fc7a635a77b103392d1842898dd023afcb/pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4", size = 1333769 }, - { url = "https://files.pythonhosted.org/packages/5c/c7/6c03637e8d742c3b00bec4f5e4cd9d1c01b2f3694c6f140742e93ca637ed/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a", size = 658826 }, - { url = "https://files.pythonhosted.org/packages/a5/97/a8dca65913c0f78e0545af2bb5078aebfc142ca7d91cdaffa1fbc73e5dbd/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b", size = 891650 }, - { url = "https://files.pythonhosted.org/packages/7d/7e/f63af1031eb060bf02d033732b910fe48548dcfdbe9c785e9f74a6cc6ae4/pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d", size = 849776 }, - { url = "https://files.pythonhosted.org/packages/f6/fa/1a009ce582802a895c0d5fe9413f029c940a0a8ee828657a3bb0acffd88b/pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf", size = 842516 }, - { url = "https://files.pythonhosted.org/packages/6e/bc/f88b0bad0f7a7f500547d71e99f10336f2314e525d4ebf576a1ea4a1d903/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c", size = 1189183 }, - { url = "https://files.pythonhosted.org/packages/d9/8c/db446a3dd9cf894406dec2e61eeffaa3c07c3abb783deaebb9812c4af6a5/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8", size = 1495501 }, - { url = "https://files.pythonhosted.org/packages/05/4c/bf3cad0d64c3214ac881299c4562b815f05d503bccc513e3fd4fdc6f67e4/pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364", size = 1395540 }, -] - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 }, -] - -[[package]] -name = "regex" -version = "2024.11.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 }, - { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 }, - { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 }, - { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 }, - { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 }, - { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 }, - { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 }, - { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 }, - { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 }, - { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 }, - { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 }, - { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 }, - { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 }, - { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 }, - { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 }, -] - -[[package]] -name = "requests" -version = "2.32.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, -] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490 }, -] - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242 }, -] - -[[package]] -name = "rpds-py" -version = "0.25.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/a6/60184b7fc00dd3ca80ac635dd5b8577d444c57e8e8742cecabfacb829921/rpds_py-0.25.1.tar.gz", hash = "sha256:8960b6dac09b62dac26e75d7e2c4a22efb835d827a7278c34f72b2b84fa160e3", size = 27304 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/da/323848a2b62abe6a0fec16ebe199dc6889c5d0a332458da8985b2980dffe/rpds_py-0.25.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:659d87430a8c8c704d52d094f5ba6fa72ef13b4d385b7e542a08fc240cb4a559", size = 364498 }, - { url = "https://files.pythonhosted.org/packages/1f/b4/4d3820f731c80fd0cd823b3e95b9963fec681ae45ba35b5281a42382c67d/rpds_py-0.25.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68f6f060f0bbdfb0245267da014d3a6da9be127fe3e8cc4a68c6f833f8a23bb1", size = 350083 }, - { url = "https://files.pythonhosted.org/packages/d5/b1/3a8ee1c9d480e8493619a437dec685d005f706b69253286f50f498cbdbcf/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083a9513a33e0b92cf6e7a6366036c6bb43ea595332c1ab5c8ae329e4bcc0a9c", size = 389023 }, - { url = "https://files.pythonhosted.org/packages/3b/31/17293edcfc934dc62c3bf74a0cb449ecd549531f956b72287203e6880b87/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:816568614ecb22b18a010c7a12559c19f6fe993526af88e95a76d5a60b8b75fb", size = 403283 }, - { url = "https://files.pythonhosted.org/packages/d1/ca/e0f0bc1a75a8925024f343258c8ecbd8828f8997ea2ac71e02f67b6f5299/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c6564c0947a7f52e4792983f8e6cf9bac140438ebf81f527a21d944f2fd0a40", size = 524634 }, - { url = "https://files.pythonhosted.org/packages/3e/03/5d0be919037178fff33a6672ffc0afa04ea1cfcb61afd4119d1b5280ff0f/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c4a128527fe415d73cf1f70a9a688d06130d5810be69f3b553bf7b45e8acf79", size = 416233 }, - { url = "https://files.pythonhosted.org/packages/05/7c/8abb70f9017a231c6c961a8941403ed6557664c0913e1bf413cbdc039e75/rpds_py-0.25.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a49e1d7a4978ed554f095430b89ecc23f42014a50ac385eb0c4d163ce213c325", size = 390375 }, - { url = "https://files.pythonhosted.org/packages/7a/ac/a87f339f0e066b9535074a9f403b9313fd3892d4a164d5d5f5875ac9f29f/rpds_py-0.25.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d74ec9bc0e2feb81d3f16946b005748119c0f52a153f6db6a29e8cd68636f295", size = 424537 }, - { url = "https://files.pythonhosted.org/packages/1f/8f/8d5c1567eaf8c8afe98a838dd24de5013ce6e8f53a01bd47fe8bb06b5533/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3af5b4cc10fa41e5bc64e5c198a1b2d2864337f8fcbb9a67e747e34002ce812b", size = 566425 }, - { url = "https://files.pythonhosted.org/packages/95/33/03016a6be5663b389c8ab0bbbcca68d9e96af14faeff0a04affcb587e776/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79dc317a5f1c51fd9c6a0c4f48209c6b8526d0524a6904fc1076476e79b00f98", size = 595197 }, - { url = "https://files.pythonhosted.org/packages/33/8d/da9f4d3e208c82fda311bff0cf0a19579afceb77cf456e46c559a1c075ba/rpds_py-0.25.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1521031351865e0181bc585147624d66b3b00a84109b57fcb7a779c3ec3772cd", size = 561244 }, - { url = "https://files.pythonhosted.org/packages/e2/b3/39d5dcf7c5f742ecd6dbc88f6f84ae54184b92f5f387a4053be2107b17f1/rpds_py-0.25.1-cp313-cp313-win32.whl", hash = "sha256:5d473be2b13600b93a5675d78f59e63b51b1ba2d0476893415dfbb5477e65b31", size = 222254 }, - { url = "https://files.pythonhosted.org/packages/5f/19/2d6772c8eeb8302c5f834e6d0dfd83935a884e7c5ce16340c7eaf89ce925/rpds_py-0.25.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7b74e92a3b212390bdce1d93da9f6488c3878c1d434c5e751cbc202c5e09500", size = 234741 }, - { url = "https://files.pythonhosted.org/packages/5b/5a/145ada26cfaf86018d0eb304fe55eafdd4f0b6b84530246bb4a7c4fb5c4b/rpds_py-0.25.1-cp313-cp313-win_arm64.whl", hash = "sha256:dd326a81afe332ede08eb39ab75b301d5676802cdffd3a8f287a5f0b694dc3f5", size = 224830 }, - { url = "https://files.pythonhosted.org/packages/4b/ca/d435844829c384fd2c22754ff65889c5c556a675d2ed9eb0e148435c6690/rpds_py-0.25.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:a58d1ed49a94d4183483a3ce0af22f20318d4a1434acee255d683ad90bf78129", size = 359668 }, - { url = "https://files.pythonhosted.org/packages/1f/01/b056f21db3a09f89410d493d2f6614d87bb162499f98b649d1dbd2a81988/rpds_py-0.25.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f251bf23deb8332823aef1da169d5d89fa84c89f67bdfb566c49dea1fccfd50d", size = 345649 }, - { url = "https://files.pythonhosted.org/packages/e0/0f/e0d00dc991e3d40e03ca36383b44995126c36b3eafa0ccbbd19664709c88/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dbd586bfa270c1103ece2109314dd423df1fa3d9719928b5d09e4840cec0d72", size = 384776 }, - { url = "https://files.pythonhosted.org/packages/9f/a2/59374837f105f2ca79bde3c3cd1065b2f8c01678900924949f6392eab66d/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6d273f136e912aa101a9274c3145dcbddbe4bac560e77e6d5b3c9f6e0ed06d34", size = 395131 }, - { url = "https://files.pythonhosted.org/packages/9c/dc/48e8d84887627a0fe0bac53f0b4631e90976fd5d35fff8be66b8e4f3916b/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:666fa7b1bd0a3810a7f18f6d3a25ccd8866291fbbc3c9b912b917a6715874bb9", size = 520942 }, - { url = "https://files.pythonhosted.org/packages/7c/f5/ee056966aeae401913d37befeeab57a4a43a4f00099e0a20297f17b8f00c/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:921954d7fbf3fccc7de8f717799304b14b6d9a45bbeec5a8d7408ccbf531faf5", size = 411330 }, - { url = "https://files.pythonhosted.org/packages/ab/74/b2cffb46a097cefe5d17f94ede7a174184b9d158a0aeb195f39f2c0361e8/rpds_py-0.25.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d86373ff19ca0441ebeb696ef64cb58b8b5cbacffcda5a0ec2f3911732a194", size = 387339 }, - { url = "https://files.pythonhosted.org/packages/7f/9a/0ff0b375dcb5161c2b7054e7d0b7575f1680127505945f5cabaac890bc07/rpds_py-0.25.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c8980cde3bb8575e7c956a530f2c217c1d6aac453474bf3ea0f9c89868b531b6", size = 418077 }, - { url = "https://files.pythonhosted.org/packages/0d/a1/fda629bf20d6b698ae84c7c840cfb0e9e4200f664fc96e1f456f00e4ad6e/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8eb8c84ecea987a2523e057c0d950bcb3f789696c0499290b8d7b3107a719d78", size = 562441 }, - { url = "https://files.pythonhosted.org/packages/20/15/ce4b5257f654132f326f4acd87268e1006cc071e2c59794c5bdf4bebbb51/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e43a005671a9ed5a650f3bc39e4dbccd6d4326b24fb5ea8be5f3a43a6f576c72", size = 590750 }, - { url = "https://files.pythonhosted.org/packages/fb/ab/e04bf58a8d375aeedb5268edcc835c6a660ebf79d4384d8e0889439448b0/rpds_py-0.25.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58f77c60956501a4a627749a6dcb78dac522f249dd96b5c9f1c6af29bfacfb66", size = 558891 }, - { url = "https://files.pythonhosted.org/packages/90/82/cb8c6028a6ef6cd2b7991e2e4ced01c854b6236ecf51e81b64b569c43d73/rpds_py-0.25.1-cp313-cp313t-win32.whl", hash = "sha256:2cb9e5b5e26fc02c8a4345048cd9998c2aca7c2712bd1b36da0c72ee969a3523", size = 218718 }, - { url = "https://files.pythonhosted.org/packages/b6/97/5a4b59697111c89477d20ba8a44df9ca16b41e737fa569d5ae8bff99e650/rpds_py-0.25.1-cp313-cp313t-win_amd64.whl", hash = "sha256:401ca1c4a20cc0510d3435d89c069fe0a9ae2ee6495135ac46bdd49ec0495763", size = 232218 }, -] - -[[package]] -name = "ruff" -version = "0.11.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/da/9c6f995903b4d9474b39da91d2d626659af3ff1eeb43e9ae7c119349dba6/ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514", size = 4282054 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/ce/a11d381192966e0b4290842cc8d4fac7dc9214ddf627c11c1afff87da29b/ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46", size = 10292516 }, - { url = "https://files.pythonhosted.org/packages/78/db/87c3b59b0d4e753e40b6a3b4a2642dfd1dcaefbff121ddc64d6c8b47ba00/ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48", size = 11106083 }, - { url = "https://files.pythonhosted.org/packages/77/79/d8cec175856ff810a19825d09ce700265f905c643c69f45d2b737e4a470a/ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b", size = 10436024 }, - { url = "https://files.pythonhosted.org/packages/8b/5b/f6d94f2980fa1ee854b41568368a2e1252681b9238ab2895e133d303538f/ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a", size = 10646324 }, - { url = "https://files.pythonhosted.org/packages/6c/9c/b4c2acf24ea4426016d511dfdc787f4ce1ceb835f3c5fbdbcb32b1c63bda/ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc", size = 10174416 }, - { url = "https://files.pythonhosted.org/packages/f3/10/e2e62f77c65ede8cd032c2ca39c41f48feabedb6e282bfd6073d81bb671d/ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629", size = 11724197 }, - { url = "https://files.pythonhosted.org/packages/bb/f0/466fe8469b85c561e081d798c45f8a1d21e0b4a5ef795a1d7f1a9a9ec182/ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933", size = 12511615 }, - { url = "https://files.pythonhosted.org/packages/17/0e/cefe778b46dbd0cbcb03a839946c8f80a06f7968eb298aa4d1a4293f3448/ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165", size = 12117080 }, - { url = "https://files.pythonhosted.org/packages/5d/2c/caaeda564cbe103bed145ea557cb86795b18651b0f6b3ff6a10e84e5a33f/ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71", size = 11326315 }, - { url = "https://files.pythonhosted.org/packages/75/f0/782e7d681d660eda8c536962920c41309e6dd4ebcea9a2714ed5127d44bd/ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9", size = 11555640 }, - { url = "https://files.pythonhosted.org/packages/5d/d4/3d580c616316c7f07fb3c99dbecfe01fbaea7b6fd9a82b801e72e5de742a/ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc", size = 10507364 }, - { url = "https://files.pythonhosted.org/packages/5a/dc/195e6f17d7b3ea6b12dc4f3e9de575db7983db187c378d44606e5d503319/ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7", size = 10141462 }, - { url = "https://files.pythonhosted.org/packages/f4/8e/39a094af6967faa57ecdeacb91bedfb232474ff8c3d20f16a5514e6b3534/ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432", size = 11121028 }, - { url = "https://files.pythonhosted.org/packages/5a/c0/b0b508193b0e8a1654ec683ebab18d309861f8bd64e3a2f9648b80d392cb/ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492", size = 11602992 }, - { url = "https://files.pythonhosted.org/packages/7c/91/263e33ab93ab09ca06ce4f8f8547a858cc198072f873ebc9be7466790bae/ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250", size = 10474944 }, - { url = "https://files.pythonhosted.org/packages/46/f4/7c27734ac2073aae8efb0119cae6931b6fb48017adf048fdf85c19337afc/ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3", size = 11548669 }, - { url = "https://files.pythonhosted.org/packages/ec/bf/b273dd11673fed8a6bd46032c0ea2a04b2ac9bfa9c628756a5856ba113b0/ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b", size = 10683928 }, -] - -[[package]] -name = "safetensors" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 }, - { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 }, - { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 }, - { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 }, - { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 }, - { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 }, - { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 }, - { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 }, - { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 }, - { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 }, - { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 }, - { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 }, - { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 }, - { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 }, -] - -[[package]] -name = "scipy" -version = "1.15.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, -] - -[[package]] -name = "seaborn" -version = "0.13.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, -] - -[[package]] -name = "send2trash" -version = "1.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072 }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486 }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, -] - -[[package]] -name = "soupsieve" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677 }, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asttokens" }, - { name = "executing" }, - { name = "pure-eval" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, -] - -[[package]] -name = "sympy" -version = "1.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 }, -] - -[[package]] -name = "tensorboard" -version = "2.19.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "absl-py" }, - { name = "grpcio" }, - { name = "markdown" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "setuptools" }, - { name = "six" }, - { name = "tensorboard-data-server" }, - { name = "werkzeug" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl", hash = "sha256:5e71b98663a641a7ce8a6e70b0be8e1a4c0c45d48760b076383ac4755c35b9a0", size = 5503412 }, -] - -[[package]] -name = "tensorboard-data-server" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356 }, - { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598 }, - { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363 }, -] - -[[package]] -name = "terminado" -version = "0.18.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess", marker = "os_name != 'nt'" }, - { name = "pywinpty", marker = "os_name == 'nt' and sys_platform != 'darwin'" }, - { name = "tornado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154 }, -] - -[[package]] -name = "tinycss2" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610 }, -] - -[[package]] -name = "tokenizers" -version = "0.21.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767 }, - { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555 }, - { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541 }, - { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058 }, - { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278 }, - { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253 }, - { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225 }, - { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874 }, - { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448 }, - { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877 }, - { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645 }, - { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380 }, - { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506 }, - { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481 }, -] - -[[package]] -name = "torch" -version = "2.7.1" -source = { registry = "https://download.pytorch.org/whl/cpu" } -resolution-markers = [ - "sys_platform == 'darwin'", -] -dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "fsspec", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "networkx", marker = "sys_platform == 'darwin'" }, - { name = "setuptools", marker = "sys_platform == 'darwin'" }, - { name = "sympy", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, -] -wheels = [ - { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:95af97e7b2cecdc89edc0558962a51921bf9c61538597dbec6b7cc48d31e2e13" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7ecd868a086468e1bcf74b91db425c1c2951a9cfcd0592c4c73377b7e42485ae" }, -] - -[[package]] -name = "torch" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "sys_platform != 'darwin'", -] -dependencies = [ - { name = "filelock", marker = "sys_platform != 'darwin'" }, - { name = "fsspec", marker = "sys_platform != 'darwin'" }, - { name = "jinja2", marker = "sys_platform != 'darwin'" }, - { name = "networkx", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "sys_platform != 'darwin'" }, - { name = "sympy", marker = "sys_platform != 'darwin'" }, - { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d56d29a6ad7758ba5173cc2b0c51c93e126e2b0a918e874101dc66545283967f" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9560425f9ea1af1791507e8ca70d5b9ecf62fed7ca226a95fcd58d0eb2cca78f" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:500ad5b670483f62d4052e41948a3fb19e8c8de65b99f8d418d879cbb15a82d6" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:f112465fdf42eb1297c6dddda1a8b7f411914428b704e1b8a47870c52e290909" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c355db49c218ada70321d5c5c9bb3077312738b99113c8f3723ef596b554a7b9" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:e27e5f7e74179fb5d814a0412e5026e4b50c9e0081e9050bc4c28c992a276eb1" }, -] - -[[package]] -name = "tornado" -version = "6.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948 }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112 }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672 }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019 }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252 }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930 }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351 }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328 }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396 }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840 }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596 }, -] - -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, -] - -[[package]] -name = "transformers" -version = "4.52.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "requests" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/da/a9/275037087f9d846580b02f2d7cae0e0a6955d46f84583d0151d6227bd416/transformers-4.52.4.tar.gz", hash = "sha256:aff3764441c1adc192a08dba49740d3cbbcb72d850586075aed6bd89b98203e6", size = 8945376 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/f2/25b27b396af03d5b64e61976b14f7209e2939e9e806c10749b6d277c273e/transformers-4.52.4-py3-none-any.whl", hash = "sha256:203f5c19416d5877e36e88633943761719538a25d9775977a24fe77a1e5adfc7", size = 10460375 }, -] - -[[package]] -name = "triton" -version = "3.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/74/1f/dfb531f90a2d367d914adfee771babbd3f1a5b26c3f5fbc458dee21daa78/triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b89d846b5a4198317fec27a5d3a609ea96b6d557ff44b56c23176546023c4240", size = 155673035 }, - { url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832 }, -] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20250516" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/88/d65ed807393285204ab6e2801e5d11fbbea811adcaa979a2ed3b67a5ef41/types_python_dateutil-2.9.0.20250516.tar.gz", hash = "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5", size = 13943 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/3f/b0e8db149896005adc938a1e7f371d6d7e9eca4053a29b108978ed15e0c2/types_python_dateutil-2.9.0.20250516-py3-none-any.whl", hash = "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93", size = 14356 }, -] - -[[package]] -name = "typing-extensions" -version = "4.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, -] - -[[package]] -name = "tzdata" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140 }, -] - -[[package]] -name = "urllib3" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, -] - -[[package]] -name = "wcwidth" -version = "0.2.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, -] - -[[package]] -name = "webcolors" -version = "24.11.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934 }, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, -] - -[[package]] -name = "websocket-client" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, -] - -[[package]] -name = "werkzeug" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, -] - -[[package]] -name = "widgetsnbextension" -version = "4.0.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/53/2e0253c5efd69c9656b1843892052a31c36d37ad42812b5da45c62191f7e/widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af", size = 1097428 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/51/5447876806d1088a0f8f71e16542bf350918128d0a69437df26047c8e46f/widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575", size = 2196503 }, -] From 7ecb8d9a71b98fa51308e6a8a14a69d0df06e937 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 9 Jun 2025 21:22:20 +0300 Subject: [PATCH 173/175] remove uv.lock file --- .gitignore | 1 + uv.lock | 1019 ---------------------------------------------------- 2 files changed, 1 insertion(+), 1019 deletions(-) delete mode 100644 uv.lock diff --git a/.gitignore b/.gitignore index 8e376638..ae0a51ea 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ saved_logs/* papers checkpoints/* *.prof +uv.lock diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 9e71d015..00000000 --- a/uv.lock +++ /dev/null @@ -1,1019 +0,0 @@ -version = 1 -revision = 1 -requires-python = ">=3.13" -resolution-markers = [ - "sys_platform != 'darwin'", - "sys_platform == 'darwin'", -] - -[[package]] -name = "absl-py" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/15/18693af986560a5c3cc0b84a8046b536ffb2cdb536e03cce897f2759e284/absl_py-2.3.0.tar.gz", hash = "sha256:d96fda5c884f1b22178852f30ffa85766d50b99e00775ea626c23304f582fc4f", size = 116400 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/04/9d75e1d3bb4ab8ec67ff10919476ccdee06c098bcfcf3a352da5f985171d/absl_py-2.3.0-py3-none-any.whl", hash = "sha256:9824a48b654a306168f63e0d97714665f8490b8d89ec7bf2efc24bf67cf579b3", size = 135657 }, -] - -[[package]] -name = "certifi" -version = "2025.4.26" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/9e/c05b3920a3b7d20d3d3310465f50348e5b3694f4f88c6daf736eef3024c4/certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6", size = 160705 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/7e/3db2bd1b1f9e95f7cddca6d6e75e2f2bd9f51b1246e546d88addca0106bd/certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3", size = 159618 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622 }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435 }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653 }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231 }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243 }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442 }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147 }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057 }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454 }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174 }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166 }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064 }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641 }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626 }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - -[[package]] -name = "contourpy" -version = "1.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 }, - { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 }, - { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, - { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, - { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, - { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, - { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, - { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, - { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, - { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, - { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 }, - { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 }, - { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, - { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, - { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, - { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, - { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, - { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, - { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, - { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, -] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, -] - -[[package]] -name = "faiss-cpu" -version = "1.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/9a/e33fc563f007924dd4ec3c5101fe5320298d6c13c158a24a9ed849058569/faiss_cpu-1.11.0.tar.gz", hash = "sha256:44877b896a2b30a61e35ea4970d008e8822545cb340eca4eff223ac7f40a1db9", size = 70218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/90/d2329ce56423cc61f4c20ae6b4db001c6f88f28bf5a7ef7f8bbc246fd485/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:0c98e5feff83b87348e44eac4d578d6f201780dae6f27f08a11d55536a20b3a8", size = 3313807 }, - { url = "https://files.pythonhosted.org/packages/24/14/8af8f996d54e6097a86e6048b1a2c958c52dc985eb4f935027615079939e/faiss_cpu-1.11.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:796e90389427b1c1fb06abdb0427bb343b6350f80112a2e6090ac8f176ff7416", size = 7913539 }, - { url = "https://files.pythonhosted.org/packages/b2/2b/437c2f36c3aa3cffe041479fced1c76420d3e92e1f434f1da3be3e6f32b1/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b6e355dda72b3050991bc32031b558b8f83a2b3537a2b9e905a84f28585b47e", size = 3785181 }, - { url = "https://files.pythonhosted.org/packages/66/75/955527414371843f558234df66fa0b62c6e86e71e4022b1be9333ac6004c/faiss_cpu-1.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6c482d07194638c169b4422774366e7472877d09181ea86835e782e6304d4185", size = 31287635 }, - { url = "https://files.pythonhosted.org/packages/50/51/35b7a3f47f7859363a367c344ae5d415ea9eda65db0a7d497c7ea2c0b576/faiss_cpu-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:13eac45299532b10e911bff1abbb19d1bf5211aa9e72afeade653c3f1e50e042", size = 15005455 }, -] - -[[package]] -name = "filelock" -version = "3.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, -] - -[[package]] -name = "fonttools" -version = "4.58.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/a9/3319c6ae07fd9dde51064ddc6d82a2b707efad8ed407d700a01091121bbc/fonttools-4.58.2.tar.gz", hash = "sha256:4b491ddbfd50b856e84b0648b5f7941af918f6d32f938f18e62b58426a8d50e2", size = 3524285 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/01/29f81970a508408af20b434ff5136cd1c7ef92198957eb8ddadfbb9ef177/fonttools-4.58.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:829048ef29dbefec35d95cc6811014720371c95bdc6ceb0afd2f8e407c41697c", size = 2732398 }, - { url = "https://files.pythonhosted.org/packages/0c/f1/095f2338359333adb2f1c51b8b2ad94bf9a2fa17e5fcbdf8a7b8e3672d2d/fonttools-4.58.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:64998c5993431e45b474ed5f579f18555f45309dd1cf8008b594d2fe0a94be59", size = 2306390 }, - { url = "https://files.pythonhosted.org/packages/bf/d4/9eba134c7666a26668c28945355cd86e5d57828b6b8d952a5489fe45d7e2/fonttools-4.58.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b887a1cf9fbcb920980460ee4a489c8aba7e81341f6cdaeefa08c0ab6529591c", size = 4795100 }, - { url = "https://files.pythonhosted.org/packages/2a/34/345f153a24c1340daa62340c3be2d1e5ee6c1ee57e13f6d15613209e688b/fonttools-4.58.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27d74b9f6970cefbcda33609a3bee1618e5e57176c8b972134c4e22461b9c791", size = 4864585 }, - { url = "https://files.pythonhosted.org/packages/01/5f/091979a25c9a6c4ba064716cfdfe9431f78ed6ffba4bd05ae01eee3532e9/fonttools-4.58.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec26784610056a770e15a60f9920cee26ae10d44d1e43271ea652dadf4e7a236", size = 4866191 }, - { url = "https://files.pythonhosted.org/packages/9d/09/3944d0ece4a39560918cba37c2e0453a5f826b665a6db0b43abbd9dbe7e1/fonttools-4.58.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed0a71d57dd427c0fb89febd08cac9b925284d2a8888e982a6c04714b82698d7", size = 5003867 }, - { url = "https://files.pythonhosted.org/packages/68/97/190b8f9ba22f8b7d07df2faa9fd7087b453776d0705d3cb5b0cbd89b8ef0/fonttools-4.58.2-cp313-cp313-win32.whl", hash = "sha256:994e362b01460aa863ef0cb41a29880bc1a498c546952df465deff7abf75587a", size = 2175688 }, - { url = "https://files.pythonhosted.org/packages/94/ea/0e6d4a39528dbb6e0f908c2ad219975be0a506ed440fddf5453b90f76981/fonttools-4.58.2-cp313-cp313-win_amd64.whl", hash = "sha256:f95dec862d7c395f2d4efe0535d9bdaf1e3811e51b86432fa2a77e73f8195756", size = 2226464 }, - { url = "https://files.pythonhosted.org/packages/e8/e5/c1cb8ebabb80be76d4d28995da9416816653f8f572920ab5e3d2e3ac8285/fonttools-4.58.2-py3-none-any.whl", hash = "sha256:84f4b0bcfa046254a65ee7117094b4907e22dc98097a220ef108030eb3c15596", size = 1114597 }, -] - -[[package]] -name = "fsspec" -version = "2025.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/f7/27f15d41f0ed38e8fcc488584b57e902b331da7f7c6dcda53721b15838fc/fsspec-2025.5.1.tar.gz", hash = "sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475", size = 303033 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/61/78c7b3851add1481b048b5fdc29067397a1784e2910592bc81bb3f608635/fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462", size = 199052 }, -] - -[[package]] -name = "grpcio" -version = "1.72.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/45/ff8c80a5a2e7e520d9c4d3c41484a11d33508253f6f4dd06d2c4b4158999/grpcio-1.72.1.tar.gz", hash = "sha256:87f62c94a40947cec1a0f91f95f5ba0aa8f799f23a1d42ae5be667b6b27b959c", size = 12584286 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/69/219b0df426cf187535254825b4d4eda8ed3d3bc7dc844725a1ed14f642bf/grpcio-1.72.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:294be6e9c323a197434569a41e0fb5b5aa0962fd5d55a3dc890ec5df985f611a", size = 5183578 }, - { url = "https://files.pythonhosted.org/packages/b2/34/a5a5e037a862b2e90c1465791e091d3d2965d893d90dda6c1e7c0a991eb8/grpcio-1.72.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:41ec164dac8df2862f67457d9cdf8d8f8b6a4ca475a3ed1ba6547fff98d93717", size = 10306253 }, - { url = "https://files.pythonhosted.org/packages/56/8a/8aa932e3833e45772015b2c4a2ebf61649633698f24a84bf55477230b019/grpcio-1.72.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:761736f75c6ddea3732d97eaabe70c616271f5f542a8be95515135fdd1a638f6", size = 5586381 }, - { url = "https://files.pythonhosted.org/packages/0e/43/aff1cc76f8e04a060ec8e733d3c91e198ea9f1602a2a26f05db4185aa2dd/grpcio-1.72.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082003cb93618964c111c70d69b60ac0dc6566d4c254c9b2a775faa2965ba8f8", size = 6231049 }, - { url = "https://files.pythonhosted.org/packages/64/6e/89e5692ee8b67cedcf802553c77538cc0e21c392b37dd51525d89884db17/grpcio-1.72.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8660f736da75424949c14f7c8b1ac60a25b2f37cabdec95181834b405373e8a7", size = 5826465 }, - { url = "https://files.pythonhosted.org/packages/b2/09/bc0b2ea40f797f413f1db4a33dc83c562918b8f970938144756bced82414/grpcio-1.72.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2ada1abe2ad122b42407b2bfd79d6706a4940d4797f44bd740f5c98ca1ecda9b", size = 5944393 }, - { url = "https://files.pythonhosted.org/packages/54/92/9aa2c0c8d855e5b16062ec023ac0a1500b502790bbd724262f188253e90b/grpcio-1.72.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:0db2766d0c482ee740abbe7d00a06cc4fb54f7e5a24d3cf27c3352be18a2b1e8", size = 6573460 }, - { url = "https://files.pythonhosted.org/packages/aa/27/9fdfd66f65ab7e6a4477f7d0b7adf25171d3425760f138f075bc548f6bf4/grpcio-1.72.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4bdb404d9c2187260b34e2b22783c204fba8a9023a166cf77376190d9cf5a08", size = 6120589 }, - { url = "https://files.pythonhosted.org/packages/c3/f3/630c7a00a29001e0b82763fbd50ddcaa7c656d521f29aa58a6c8dd2b7800/grpcio-1.72.1-cp313-cp313-win32.whl", hash = "sha256:bb64722c3124c906a5b66e50a90fd36442642f653ba88a24f67d08e94bca59f3", size = 3545905 }, - { url = "https://files.pythonhosted.org/packages/c4/10/b6186e92eba035315affc30dfeabf65594dd6f778b92627fae5f40e7beec/grpcio-1.72.1-cp313-cp313-win_amd64.whl", hash = "sha256:329cc6ff5b431df9614340d3825b066a1ff0a5809a01ba2e976ef48c65a0490b", size = 4221454 }, -] - -[[package]] -name = "hf-xet" -version = "1.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/dc/dc091aeeb671e71cbec30e84963f9c0202c17337b24b0a800e7d205543e8/hf_xet-1.1.3.tar.gz", hash = "sha256:a5f09b1dd24e6ff6bcedb4b0ddab2d81824098bb002cf8b4ffa780545fa348c3", size = 488127 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/1f/bc01a4c0894973adebbcd4aa338a06815c76333ebb3921d94dcbd40dae6a/hf_xet-1.1.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c3b508b5f583a75641aebf732853deb058953370ce8184f5dabc49f803b0819b", size = 2256929 }, - { url = "https://files.pythonhosted.org/packages/78/07/6ef50851b5c6b45b77a6e018fa299c69a2db3b8bbd0d5af594c0238b1ceb/hf_xet-1.1.3-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:b788a61977fbe6b5186e66239e2a329a3f0b7e7ff50dad38984c0c74f44aeca1", size = 2153719 }, - { url = "https://files.pythonhosted.org/packages/52/48/e929e6e3db6e4758c2adf0f2ca2c59287f1b76229d8bdc1a4c9cfc05212e/hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd2da210856444a34aad8ada2fc12f70dabed7cc20f37e90754d1d9b43bc0534", size = 4820519 }, - { url = "https://files.pythonhosted.org/packages/28/2e/03f89c5014a5aafaa9b150655f811798a317036646623bdaace25f485ae8/hf_xet-1.1.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8203f52827e3df65981984936654a5b390566336956f65765a8aa58c362bb841", size = 4964121 }, - { url = "https://files.pythonhosted.org/packages/47/8b/5cd399a92b47d98086f55fc72d69bc9ea5e5c6f27a9ed3e0cdd6be4e58a3/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:30c575a5306f8e6fda37edb866762140a435037365eba7a17ce7bd0bc0216a8b", size = 5283017 }, - { url = "https://files.pythonhosted.org/packages/53/e3/2fcec58d2fcfd25ff07feb876f466cfa11f8dcf9d3b742c07fe9dd51ee0a/hf_xet-1.1.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7c1a6aa6abed1f696f8099aa9796ca04c9ee778a58728a115607de9cc4638ff1", size = 4970349 }, - { url = "https://files.pythonhosted.org/packages/53/bf/10ca917e335861101017ff46044c90e517b574fbb37219347b83be1952f6/hf_xet-1.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:b578ae5ac9c056296bb0df9d018e597c8dc6390c5266f35b5c44696003cde9f3", size = 2310934 }, -] - -[[package]] -name = "huggingface-hub" -version = "0.32.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/c8/4f7d270285c46324fd66f62159eb16739aa5696f422dba57678a8c6b78e9/huggingface_hub-0.32.4.tar.gz", hash = "sha256:f61d45cd338736f59fb0e97550b74c24ee771bcc92c05ae0766b9116abe720be", size = 424494 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/8b/222140f3cfb6f17b0dd8c4b9a0b36bd4ebefe9fb0098ba35d6960abcda0f/huggingface_hub-0.32.4-py3-none-any.whl", hash = "sha256:37abf8826b38d971f60d3625229221c36e53fe58060286db9baf619cfbf39767", size = 512101 }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, -] - -[[package]] -name = "irec" -version = "0.1.0" -source = { virtual = "." } -dependencies = [ - { name = "faiss-cpu" }, - { name = "pandas" }, - { name = "scipy" }, - { name = "seaborn" }, - { name = "tensorboard" }, - { name = "torch", version = "2.7.1", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "sys_platform == 'darwin'" }, - { name = "torch", version = "2.7.1+cu128", source = { registry = "https://download.pytorch.org/whl/cu128" }, marker = "sys_platform != 'darwin'" }, - { name = "transformers" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "faiss-cpu", specifier = ">=1" }, - { name = "pandas", specifier = ">=2" }, - { name = "scipy", specifier = ">=1" }, - { name = "seaborn", specifier = ">=0.13.2" }, - { name = "tensorboard", specifier = ">=2" }, - { name = "torch", marker = "sys_platform != 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cu128" }, - { name = "torch", marker = "sys_platform == 'darwin'", specifier = ">=2.7", index = "https://download.pytorch.org/whl/cpu" }, - { name = "transformers", specifier = ">=4.51" }, -] - -[package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.11.4" }] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, -] - -[[package]] -name = "kiwisolver" -version = "1.4.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, - { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, - { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, - { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, - { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, - { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, - { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, - { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, - { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, - { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, - { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, - { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, - { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, - { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, - { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, - { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, - { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, - { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, - { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, - { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, - { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, - { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, - { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, - { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, - { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, - { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, - { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, - { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, -] - -[[package]] -name = "markdown" -version = "3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/15/222b423b0b88689c266d9eac4e61396fe2cc53464459d6a37618ac863b24/markdown-3.8.tar.gz", hash = "sha256:7df81e63f0df5c4b24b7d156eb81e4690595239b7d70937d0409f1b0de319c6f", size = 360906 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/3f/afe76f8e2246ffbc867440cbcf90525264df0e658f8a5ca1f872b3f6192a/markdown-3.8-py3-none-any.whl", hash = "sha256:794a929b79c5af141ef5ab0f2f642d0f7b1872981250230e72682346f7cc90dc", size = 106210 }, -] - -[[package]] -name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, -] - -[[package]] -name = "matplotlib" -version = "3.10.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318 }, - { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132 }, - { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633 }, - { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031 }, - { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988 }, - { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034 }, - { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223 }, - { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985 }, - { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109 }, - { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082 }, - { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699 }, - { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044 }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, -] - -[[package]] -name = "networkx" -version = "3.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406 }, -] - -[[package]] -name = "numpy" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/db/8e12381333aea300890829a0a36bfa738cac95475d88982d538725143fd9/numpy-2.3.0.tar.gz", hash = "sha256:581f87f9e9e9db2cba2141400e160e9dd644ee248788d6f90636eeb8fd9260a6", size = 20382813 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/fc/1d67f751fd4dbafc5780244fe699bc4084268bad44b7c5deb0492473127b/numpy-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5754ab5595bfa2c2387d241296e0381c21f44a4b90a776c3c1d39eede13a746a", size = 20889633 }, - { url = "https://files.pythonhosted.org/packages/e8/95/73ffdb69e5c3f19ec4530f8924c4386e7ba097efc94b9c0aff607178ad94/numpy-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d11fa02f77752d8099573d64e5fe33de3229b6632036ec08f7080f46b6649959", size = 14151683 }, - { url = "https://files.pythonhosted.org/packages/64/d5/06d4bb31bb65a1d9c419eb5676173a2f90fd8da3c59f816cc54c640ce265/numpy-2.3.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:aba48d17e87688a765ab1cd557882052f238e2f36545dfa8e29e6a91aef77afe", size = 5102683 }, - { url = "https://files.pythonhosted.org/packages/12/8b/6c2cef44f8ccdc231f6b56013dff1d71138c48124334aded36b1a1b30c5a/numpy-2.3.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4dc58865623023b63b10d52f18abaac3729346a7a46a778381e0e3af4b7f3beb", size = 6640253 }, - { url = "https://files.pythonhosted.org/packages/62/aa/fca4bf8de3396ddb59544df9b75ffe5b73096174de97a9492d426f5cd4aa/numpy-2.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:df470d376f54e052c76517393fa443758fefcdd634645bc9c1f84eafc67087f0", size = 14258658 }, - { url = "https://files.pythonhosted.org/packages/1c/12/734dce1087eed1875f2297f687e671cfe53a091b6f2f55f0c7241aad041b/numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:87717eb24d4a8a64683b7a4e91ace04e2f5c7c77872f823f02a94feee186168f", size = 16628765 }, - { url = "https://files.pythonhosted.org/packages/48/03/ffa41ade0e825cbcd5606a5669962419528212a16082763fc051a7247d76/numpy-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fa264d56882b59dcb5ea4d6ab6f31d0c58a57b41aec605848b6eb2ef4a43e8", size = 15564335 }, - { url = "https://files.pythonhosted.org/packages/07/58/869398a11863310aee0ff85a3e13b4c12f20d032b90c4b3ee93c3b728393/numpy-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e651756066a0eaf900916497e20e02fe1ae544187cb0fe88de981671ee7f6270", size = 18360608 }, - { url = "https://files.pythonhosted.org/packages/2f/8a/5756935752ad278c17e8a061eb2127c9a3edf4ba2c31779548b336f23c8d/numpy-2.3.0-cp313-cp313-win32.whl", hash = "sha256:e43c3cce3b6ae5f94696669ff2a6eafd9a6b9332008bafa4117af70f4b88be6f", size = 6310005 }, - { url = "https://files.pythonhosted.org/packages/08/60/61d60cf0dfc0bf15381eaef46366ebc0c1a787856d1db0c80b006092af84/numpy-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:81ae0bf2564cf475f94be4a27ef7bcf8af0c3e28da46770fc904da9abd5279b5", size = 12729093 }, - { url = "https://files.pythonhosted.org/packages/66/31/2f2f2d2b3e3c32d5753d01437240feaa32220b73258c9eef2e42a0832866/numpy-2.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8738baa52505fa6e82778580b23f945e3578412554d937093eac9205e845e6e", size = 9885689 }, - { url = "https://files.pythonhosted.org/packages/f1/89/c7828f23cc50f607ceb912774bb4cff225ccae7131c431398ad8400e2c98/numpy-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:39b27d8b38942a647f048b675f134dd5a567f95bfff481f9109ec308515c51d8", size = 20986612 }, - { url = "https://files.pythonhosted.org/packages/dd/46/79ecf47da34c4c50eedec7511e53d57ffdfd31c742c00be7dc1d5ffdb917/numpy-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0eba4a1ea88f9a6f30f56fdafdeb8da3774349eacddab9581a21234b8535d3d3", size = 14298953 }, - { url = "https://files.pythonhosted.org/packages/59/44/f6caf50713d6ff4480640bccb2a534ce1d8e6e0960c8f864947439f0ee95/numpy-2.3.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0f1f11d0a1da54927436505a5a7670b154eac27f5672afc389661013dfe3d4f", size = 5225806 }, - { url = "https://files.pythonhosted.org/packages/a6/43/e1fd1aca7c97e234dd05e66de4ab7a5be54548257efcdd1bc33637e72102/numpy-2.3.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:690d0a5b60a47e1f9dcec7b77750a4854c0d690e9058b7bef3106e3ae9117808", size = 6735169 }, - { url = "https://files.pythonhosted.org/packages/84/89/f76f93b06a03177c0faa7ca94d0856c4e5c4bcaf3c5f77640c9ed0303e1c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8b51ead2b258284458e570942137155978583e407babc22e3d0ed7af33ce06f8", size = 14330701 }, - { url = "https://files.pythonhosted.org/packages/aa/f5/4858c3e9ff7a7d64561b20580cf7cc5d085794bd465a19604945d6501f6c/numpy-2.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:aaf81c7b82c73bd9b45e79cfb9476cb9c29e937494bfe9092c26aece812818ad", size = 16692983 }, - { url = "https://files.pythonhosted.org/packages/08/17/0e3b4182e691a10e9483bcc62b4bb8693dbf9ea5dc9ba0b77a60435074bb/numpy-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f420033a20b4f6a2a11f585f93c843ac40686a7c3fa514060a97d9de93e5e72b", size = 15641435 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/463279fda028d3c1efa74e7e8d507605ae87f33dbd0543cf4c4527c8b882/numpy-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d344ca32ab482bcf8735d8f95091ad081f97120546f3d250240868430ce52555", size = 18433798 }, - { url = "https://files.pythonhosted.org/packages/0e/1e/7a9d98c886d4c39a2b4d3a7c026bffcf8fbcaf518782132d12a301cfc47a/numpy-2.3.0-cp313-cp313t-win32.whl", hash = "sha256:48a2e8eaf76364c32a1feaa60d6925eaf32ed7a040183b807e02674305beef61", size = 6438632 }, - { url = "https://files.pythonhosted.org/packages/fe/ab/66fc909931d5eb230107d016861824f335ae2c0533f422e654e5ff556784/numpy-2.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ba17f93a94e503551f154de210e4d50c5e3ee20f7e7a1b5f6ce3f22d419b93bb", size = 12868491 }, - { url = "https://files.pythonhosted.org/packages/ee/e8/2c8a1c9e34d6f6d600c83d5ce5b71646c32a13f34ca5c518cc060639841c/numpy-2.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f14e016d9409680959691c109be98c436c6249eaf7f118b424679793607b5944", size = 9935345 }, -] - -[[package]] -name = "nvidia-cublas-cu12" -version = "12.8.3.14" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/df/4b01f10069e23c641f116c62fc31e31e8dc361a153175d81561d15c8143b/nvidia_cublas_cu12-12.8.3.14-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:3f0e05e7293598cf61933258b73e66a160c27d59c4422670bf0b79348c04be44", size = 609620630 }, -] - -[[package]] -name = "nvidia-cuda-cupti-cu12" -version = "12.8.57" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/6f/3683ecf4e38931971946777d231c2df00dd5c1c4c2c914c42ad8f9f4dca6/nvidia_cuda_cupti_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e0b2eb847de260739bee4a3f66fac31378f4ff49538ff527a38a01a9a39f950", size = 10237547 }, -] - -[[package]] -name = "nvidia-cuda-nvrtc-cu12" -version = "12.8.61" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/22/32029d4583f7b19cfe75c84399cbcfd23f2aaf41c66fc8db4da460104fff/nvidia_cuda_nvrtc_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a0fa9c2a21583105550ebd871bd76e2037205d56f33f128e69f6d2a55e0af9ed", size = 88024585 }, -] - -[[package]] -name = "nvidia-cuda-runtime-cu12" -version = "12.8.57" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/f6/0e1ef31f4753a44084310ba1a7f0abaf977ccd810a604035abb43421c057/nvidia_cuda_runtime_cu12-12.8.57-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75342e28567340b7428ce79a5d6bb6ca5ff9d07b69e7ce00d2c7b4dc23eff0be", size = 954762 }, -] - -[[package]] -name = "nvidia-cudnn-cu12" -version = "9.7.1.26" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/dc/dc825c4b1c83b538e207e34f48f86063c88deaa35d46c651c7c181364ba2/nvidia_cudnn_cu12-9.7.1.26-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:6d011159a158f3cfc47bf851aea79e31bcff60d530b70ef70474c84cac484d07", size = 726851421 }, -] - -[[package]] -name = "nvidia-cufft-cu12" -version = "11.3.3.41" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/26/b53c493c38dccb1f1a42e1a21dc12cba2a77fbe36c652f7726d9ec4aba28/nvidia_cufft_cu12-11.3.3.41-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:da650080ab79fcdf7a4b06aa1b460e99860646b176a43f6208099bdc17836b6a", size = 193118795 }, -] - -[[package]] -name = "nvidia-cufile-cu12" -version = "1.13.0.11" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/9c/1f3264d0a84c8a031487fb7f59780fc78fa6f1c97776233956780e3dc3ac/nvidia_cufile_cu12-1.13.0.11-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:483f434c541806936b98366f6d33caef5440572de8ddf38d453213729da3e7d4", size = 1197801 }, -] - -[[package]] -name = "nvidia-curand-cu12" -version = "10.3.9.55" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/fc/7be5d0082507269bb04ac07cc614c84b78749efb96e8cf4100a8a1178e98/nvidia_curand_cu12-10.3.9.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8387d974240c91f6a60b761b83d4b2f9b938b7e0b9617bae0f0dafe4f5c36b86", size = 63618038 }, -] - -[[package]] -name = "nvidia-cusolver-cu12" -version = "11.7.2.55" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/08/953675873a136d96bb12f93b49ba045d1107bc94d2551c52b12fa6c7dec3/nvidia_cusolver_cu12-11.7.2.55-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4d1354102f1e922cee9db51920dba9e2559877cf6ff5ad03a00d853adafb191b", size = 260373342 }, -] - -[[package]] -name = "nvidia-cusparse-cu12" -version = "12.5.7.53" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/ab/31e8149c66213b846c082a3b41b1365b831f41191f9f40c6ddbc8a7d550e/nvidia_cusparse_cu12-12.5.7.53-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c1b61eb8c85257ea07e9354606b26397612627fdcd327bfd91ccf6155e7c86d", size = 292064180 }, -] - -[[package]] -name = "nvidia-cusparselt-cu12" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/9a/72ef35b399b0e183bc2e8f6f558036922d453c4d8237dab26c666a04244b/nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e5c8a26c36445dd2e6812f1177978a24e2d37cacce7e090f297a688d1ec44f46", size = 156785796 }, -] - -[[package]] -name = "nvidia-nccl-cu12" -version = "2.26.2" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/67/ca/f42388aed0fddd64ade7493dbba36e1f534d4e6fdbdd355c6a90030ae028/nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:694cf3879a206553cc9d7dbda76b13efaf610fdb70a50cba303de1b0d1530ac6", size = 201319755 }, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.8.61" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/f8/9d85593582bd99b8d7c65634d2304780aefade049b2b94d96e44084be90b/nvidia_nvjitlink_cu12-12.8.61-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:45fd79f2ae20bd67e8bc411055939049873bfd8fac70ff13bd4865e0b9bdab17", size = 39243473 }, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.8.55" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/cd/0e8c51b2ae3a58f054f2e7fe91b82d201abfb30167f2431e9bd92d532f42/nvidia_nvtx_cu12-12.8.55-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2dd0780f1a55c21d8e06a743de5bd95653de630decfff40621dbde78cc307102", size = 89896 }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, -] - -[[package]] -name = "pandas" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/51/48f713c4c728d7c55ef7444ba5ea027c26998d96d1a40953b346438602fc/pandas-2.3.0.tar.gz", hash = "sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133", size = 4484490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/57/5cb75a56a4842bbd0511c3d1c79186d8315b82dac802118322b2de1194fe/pandas-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983", size = 11518913 }, - { url = "https://files.pythonhosted.org/packages/05/01/0c8785610e465e4948a01a059562176e4c8088aa257e2e074db868f86d4e/pandas-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd", size = 10655249 }, - { url = "https://files.pythonhosted.org/packages/e8/6a/47fd7517cd8abe72a58706aab2b99e9438360d36dcdb052cf917b7bf3bdc/pandas-2.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f", size = 11328359 }, - { url = "https://files.pythonhosted.org/packages/2a/b3/463bfe819ed60fb7e7ddffb4ae2ee04b887b3444feee6c19437b8f834837/pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3", size = 12024789 }, - { url = "https://files.pythonhosted.org/packages/04/0c/e0704ccdb0ac40aeb3434d1c641c43d05f75c92e67525df39575ace35468/pandas-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8", size = 12480734 }, - { url = "https://files.pythonhosted.org/packages/e9/df/815d6583967001153bb27f5cf075653d69d51ad887ebbf4cfe1173a1ac58/pandas-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9", size = 13223381 }, - { url = "https://files.pythonhosted.org/packages/79/88/ca5973ed07b7f484c493e941dbff990861ca55291ff7ac67c815ce347395/pandas-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390", size = 10970135 }, - { url = "https://files.pythonhosted.org/packages/24/fb/0994c14d1f7909ce83f0b1fb27958135513c4f3f2528bde216180aa73bfc/pandas-2.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575", size = 12141356 }, - { url = "https://files.pythonhosted.org/packages/9d/a2/9b903e5962134497ac4f8a96f862ee3081cb2506f69f8e4778ce3d9c9d82/pandas-2.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042", size = 11474674 }, - { url = "https://files.pythonhosted.org/packages/81/3a/3806d041bce032f8de44380f866059437fb79e36d6b22c82c187e65f765b/pandas-2.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c", size = 11439876 }, - { url = "https://files.pythonhosted.org/packages/15/aa/3fc3181d12b95da71f5c2537c3e3b3af6ab3a8c392ab41ebb766e0929bc6/pandas-2.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67", size = 11966182 }, - { url = "https://files.pythonhosted.org/packages/37/e7/e12f2d9b0a2c4a2cc86e2aabff7ccfd24f03e597d770abfa2acd313ee46b/pandas-2.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f", size = 12547686 }, - { url = "https://files.pythonhosted.org/packages/39/c2/646d2e93e0af70f4e5359d870a63584dacbc324b54d73e6b3267920ff117/pandas-2.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249", size = 13231847 }, -] - -[[package]] -name = "pillow" -version = "11.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/cb/bb5c01fcd2a69335b86c22142b2bccfc3464087efb7fd382eee5ffc7fdf7/pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", size = 47026707 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/9c/447528ee3776e7ab8897fe33697a7ff3f0475bb490c5ac1456a03dc57956/pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", size = 3190098 }, - { url = "https://files.pythonhosted.org/packages/b5/09/29d5cd052f7566a63e5b506fac9c60526e9ecc553825551333e1e18a4858/pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", size = 3030166 }, - { url = "https://files.pythonhosted.org/packages/71/5d/446ee132ad35e7600652133f9c2840b4799bbd8e4adba881284860da0a36/pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", size = 4408674 }, - { url = "https://files.pythonhosted.org/packages/69/5f/cbe509c0ddf91cc3a03bbacf40e5c2339c4912d16458fcb797bb47bcb269/pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", size = 4496005 }, - { url = "https://files.pythonhosted.org/packages/f9/b3/dd4338d8fb8a5f312021f2977fb8198a1184893f9b00b02b75d565c33b51/pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", size = 4518707 }, - { url = "https://files.pythonhosted.org/packages/13/eb/2552ecebc0b887f539111c2cd241f538b8ff5891b8903dfe672e997529be/pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", size = 4610008 }, - { url = "https://files.pythonhosted.org/packages/72/d1/924ce51bea494cb6e7959522d69d7b1c7e74f6821d84c63c3dc430cbbf3b/pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", size = 4585420 }, - { url = "https://files.pythonhosted.org/packages/43/ab/8f81312d255d713b99ca37479a4cb4b0f48195e530cdc1611990eb8fd04b/pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b", size = 4667655 }, - { url = "https://files.pythonhosted.org/packages/94/86/8f2e9d2dc3d308dfd137a07fe1cc478df0a23d42a6c4093b087e738e4827/pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", size = 2332329 }, - { url = "https://files.pythonhosted.org/packages/6d/ec/1179083b8d6067a613e4d595359b5fdea65d0a3b7ad623fee906e1b3c4d2/pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", size = 2676388 }, - { url = "https://files.pythonhosted.org/packages/23/f1/2fc1e1e294de897df39fa8622d829b8828ddad938b0eaea256d65b84dd72/pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", size = 2414950 }, - { url = "https://files.pythonhosted.org/packages/c4/3e/c328c48b3f0ead7bab765a84b4977acb29f101d10e4ef57a5e3400447c03/pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", size = 3192759 }, - { url = "https://files.pythonhosted.org/packages/18/0e/1c68532d833fc8b9f404d3a642991441d9058eccd5606eab31617f29b6d4/pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", size = 3033284 }, - { url = "https://files.pythonhosted.org/packages/b7/cb/6faf3fb1e7705fd2db74e070f3bf6f88693601b0ed8e81049a8266de4754/pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", size = 4445826 }, - { url = "https://files.pythonhosted.org/packages/07/94/8be03d50b70ca47fb434a358919d6a8d6580f282bbb7af7e4aa40103461d/pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", size = 4527329 }, - { url = "https://files.pythonhosted.org/packages/fd/a4/bfe78777076dc405e3bd2080bc32da5ab3945b5a25dc5d8acaa9de64a162/pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", size = 4549049 }, - { url = "https://files.pythonhosted.org/packages/65/4d/eaf9068dc687c24979e977ce5677e253624bd8b616b286f543f0c1b91662/pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", size = 4635408 }, - { url = "https://files.pythonhosted.org/packages/1d/26/0fd443365d9c63bc79feb219f97d935cd4b93af28353cba78d8e77b61719/pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", size = 4614863 }, - { url = "https://files.pythonhosted.org/packages/49/65/dca4d2506be482c2c6641cacdba5c602bc76d8ceb618fd37de855653a419/pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", size = 4692938 }, - { url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774 }, - { url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895 }, - { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 }, -] - -[[package]] -name = "protobuf" -version = "6.31.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/f3/b9655a711b32c19720253f6f06326faf90580834e2e83f840472d752bc8b/protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a", size = 441797 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/6f/6ab8e4bf962fd5570d3deaa2d5c38f0a363f57b4501047b5ebeb83ab1125/protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9", size = 423603 }, - { url = "https://files.pythonhosted.org/packages/44/3a/b15c4347dd4bf3a1b0ee882f384623e2063bb5cf9fa9d57990a4f7df2fb6/protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447", size = 435283 }, - { url = "https://files.pythonhosted.org/packages/6a/c9/b9689a2a250264a84e66c46d8862ba788ee7a641cdca39bccf64f59284b7/protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402", size = 425604 }, - { url = "https://files.pythonhosted.org/packages/76/a1/7a5a94032c83375e4fe7e7f56e3976ea6ac90c5e85fac8576409e25c39c3/protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39", size = 322115 }, - { url = "https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6", size = 321070 }, - { url = "https://files.pythonhosted.org/packages/f7/af/ab3c51ab7507a7325e98ffe691d9495ee3d3aa5f589afad65ec920d39821/protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e", size = 168724 }, -] - -[[package]] -name = "pyparsing" -version = "3.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "pytz" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, -] - -[[package]] -name = "regex" -version = "2024.11.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 }, - { url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 }, - { url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 }, - { url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 }, - { url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 }, - { url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 }, - { url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 }, - { url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 }, - { url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 }, - { url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 }, - { url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 }, - { url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 }, - { url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 }, - { url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 }, - { url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 }, -] - -[[package]] -name = "requests" -version = "2.32.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, -] - -[[package]] -name = "ruff" -version = "0.11.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/da/9c6f995903b4d9474b39da91d2d626659af3ff1eeb43e9ae7c119349dba6/ruff-0.11.13.tar.gz", hash = "sha256:26fa247dc68d1d4e72c179e08889a25ac0c7ba4d78aecfc835d49cbfd60bf514", size = 4282054 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/ce/a11d381192966e0b4290842cc8d4fac7dc9214ddf627c11c1afff87da29b/ruff-0.11.13-py3-none-linux_armv6l.whl", hash = "sha256:4bdfbf1240533f40042ec00c9e09a3aade6f8c10b6414cf11b519488d2635d46", size = 10292516 }, - { url = "https://files.pythonhosted.org/packages/78/db/87c3b59b0d4e753e40b6a3b4a2642dfd1dcaefbff121ddc64d6c8b47ba00/ruff-0.11.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aef9c9ed1b5ca28bb15c7eac83b8670cf3b20b478195bd49c8d756ba0a36cf48", size = 11106083 }, - { url = "https://files.pythonhosted.org/packages/77/79/d8cec175856ff810a19825d09ce700265f905c643c69f45d2b737e4a470a/ruff-0.11.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53b15a9dfdce029c842e9a5aebc3855e9ab7771395979ff85b7c1dedb53ddc2b", size = 10436024 }, - { url = "https://files.pythonhosted.org/packages/8b/5b/f6d94f2980fa1ee854b41568368a2e1252681b9238ab2895e133d303538f/ruff-0.11.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab153241400789138d13f362c43f7edecc0edfffce2afa6a68434000ecd8f69a", size = 10646324 }, - { url = "https://files.pythonhosted.org/packages/6c/9c/b4c2acf24ea4426016d511dfdc787f4ce1ceb835f3c5fbdbcb32b1c63bda/ruff-0.11.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c51f93029d54a910d3d24f7dd0bb909e31b6cd989a5e4ac513f4eb41629f0dc", size = 10174416 }, - { url = "https://files.pythonhosted.org/packages/f3/10/e2e62f77c65ede8cd032c2ca39c41f48feabedb6e282bfd6073d81bb671d/ruff-0.11.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1808b3ed53e1a777c2ef733aca9051dc9bf7c99b26ece15cb59a0320fbdbd629", size = 11724197 }, - { url = "https://files.pythonhosted.org/packages/bb/f0/466fe8469b85c561e081d798c45f8a1d21e0b4a5ef795a1d7f1a9a9ec182/ruff-0.11.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d28ce58b5ecf0f43c1b71edffabe6ed7f245d5336b17805803312ec9bc665933", size = 12511615 }, - { url = "https://files.pythonhosted.org/packages/17/0e/cefe778b46dbd0cbcb03a839946c8f80a06f7968eb298aa4d1a4293f3448/ruff-0.11.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55e4bc3a77842da33c16d55b32c6cac1ec5fb0fbec9c8c513bdce76c4f922165", size = 12117080 }, - { url = "https://files.pythonhosted.org/packages/5d/2c/caaeda564cbe103bed145ea557cb86795b18651b0f6b3ff6a10e84e5a33f/ruff-0.11.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:633bf2c6f35678c56ec73189ba6fa19ff1c5e4807a78bf60ef487b9dd272cc71", size = 11326315 }, - { url = "https://files.pythonhosted.org/packages/75/f0/782e7d681d660eda8c536962920c41309e6dd4ebcea9a2714ed5127d44bd/ruff-0.11.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ffbc82d70424b275b089166310448051afdc6e914fdab90e08df66c43bb5ca9", size = 11555640 }, - { url = "https://files.pythonhosted.org/packages/5d/d4/3d580c616316c7f07fb3c99dbecfe01fbaea7b6fd9a82b801e72e5de742a/ruff-0.11.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a9ddd3ec62a9a89578c85842b836e4ac832d4a2e0bfaad3b02243f930ceafcc", size = 10507364 }, - { url = "https://files.pythonhosted.org/packages/5a/dc/195e6f17d7b3ea6b12dc4f3e9de575db7983db187c378d44606e5d503319/ruff-0.11.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d237a496e0778d719efb05058c64d28b757c77824e04ffe8796c7436e26712b7", size = 10141462 }, - { url = "https://files.pythonhosted.org/packages/f4/8e/39a094af6967faa57ecdeacb91bedfb232474ff8c3d20f16a5514e6b3534/ruff-0.11.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26816a218ca6ef02142343fd24c70f7cd8c5aa6c203bca284407adf675984432", size = 11121028 }, - { url = "https://files.pythonhosted.org/packages/5a/c0/b0b508193b0e8a1654ec683ebab18d309861f8bd64e3a2f9648b80d392cb/ruff-0.11.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:51c3f95abd9331dc5b87c47ac7f376db5616041173826dfd556cfe3d4977f492", size = 11602992 }, - { url = "https://files.pythonhosted.org/packages/7c/91/263e33ab93ab09ca06ce4f8f8547a858cc198072f873ebc9be7466790bae/ruff-0.11.13-py3-none-win32.whl", hash = "sha256:96c27935418e4e8e77a26bb05962817f28b8ef3843a6c6cc49d8783b5507f250", size = 10474944 }, - { url = "https://files.pythonhosted.org/packages/46/f4/7c27734ac2073aae8efb0119cae6931b6fb48017adf048fdf85c19337afc/ruff-0.11.13-py3-none-win_amd64.whl", hash = "sha256:29c3189895a8a6a657b7af4e97d330c8a3afd2c9c8f46c81e2fc5a31866517e3", size = 11548669 }, - { url = "https://files.pythonhosted.org/packages/ec/bf/b273dd11673fed8a6bd46032c0ea2a04b2ac9bfa9c628756a5856ba113b0/ruff-0.11.13-py3-none-win_arm64.whl", hash = "sha256:b4385285e9179d608ff1d2fb9922062663c658605819a6876d8beef0c30b7f3b", size = 10683928 }, -] - -[[package]] -name = "safetensors" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/7e/2d5d6ee7b40c0682315367ec7475693d110f512922d582fef1bd4a63adc3/safetensors-0.5.3.tar.gz", hash = "sha256:b6b0d6ecacec39a4fdd99cc19f4576f5219ce858e6fd8dbe7609df0b8dc56965", size = 67210 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/ae/88f6c49dbd0cc4da0e08610019a3c78a7d390879a919411a410a1876d03a/safetensors-0.5.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd20eb133db8ed15b40110b7c00c6df51655a2998132193de2f75f72d99c7073", size = 436917 }, - { url = "https://files.pythonhosted.org/packages/b8/3b/11f1b4a2f5d2ab7da34ecc062b0bc301f2be024d110a6466726bec8c055c/safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:21d01c14ff6c415c485616b8b0bf961c46b3b343ca59110d38d744e577f9cce7", size = 418419 }, - { url = "https://files.pythonhosted.org/packages/5d/9a/add3e6fef267658075c5a41573c26d42d80c935cdc992384dfae435feaef/safetensors-0.5.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11bce6164887cd491ca75c2326a113ba934be596e22b28b1742ce27b1d076467", size = 459493 }, - { url = "https://files.pythonhosted.org/packages/df/5c/bf2cae92222513cc23b3ff85c4a1bb2811a2c3583ac0f8e8d502751de934/safetensors-0.5.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a243be3590bc3301c821da7a18d87224ef35cbd3e5f5727e4e0728b8172411e", size = 472400 }, - { url = "https://files.pythonhosted.org/packages/58/11/7456afb740bd45782d0f4c8e8e1bb9e572f1bf82899fb6ace58af47b4282/safetensors-0.5.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8bd84b12b1670a6f8e50f01e28156422a2bc07fb16fc4e98bded13039d688a0d", size = 522891 }, - { url = "https://files.pythonhosted.org/packages/57/3d/fe73a9d2ace487e7285f6e157afee2383bd1ddb911b7cb44a55cf812eae3/safetensors-0.5.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:391ac8cab7c829452175f871fcaf414aa1e292b5448bd02620f675a7f3e7abb9", size = 537694 }, - { url = "https://files.pythonhosted.org/packages/a6/f8/dae3421624fcc87a89d42e1898a798bc7ff72c61f38973a65d60df8f124c/safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cead1fa41fc54b1e61089fa57452e8834f798cb1dc7a09ba3524f1eb08e0317a", size = 471642 }, - { url = "https://files.pythonhosted.org/packages/ce/20/1fbe16f9b815f6c5a672f5b760951e20e17e43f67f231428f871909a37f6/safetensors-0.5.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1077f3e94182d72618357b04b5ced540ceb71c8a813d3319f1aba448e68a770d", size = 502241 }, - { url = "https://files.pythonhosted.org/packages/5f/18/8e108846b506487aa4629fe4116b27db65c3dde922de2c8e0cc1133f3f29/safetensors-0.5.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:799021e78287bac619c7b3f3606730a22da4cda27759ddf55d37c8db7511c74b", size = 638001 }, - { url = "https://files.pythonhosted.org/packages/82/5a/c116111d8291af6c8c8a8b40628fe833b9db97d8141c2a82359d14d9e078/safetensors-0.5.3-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:df26da01aaac504334644e1b7642fa000bfec820e7cef83aeac4e355e03195ff", size = 734013 }, - { url = "https://files.pythonhosted.org/packages/7d/ff/41fcc4d3b7de837963622e8610d998710705bbde9a8a17221d85e5d0baad/safetensors-0.5.3-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:32c3ef2d7af8b9f52ff685ed0bc43913cdcde135089ae322ee576de93eae5135", size = 670687 }, - { url = "https://files.pythonhosted.org/packages/40/ad/2b113098e69c985a3d8fbda4b902778eae4a35b7d5188859b4a63d30c161/safetensors-0.5.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:37f1521be045e56fc2b54c606d4455573e717b2d887c579ee1dbba5f868ece04", size = 643147 }, - { url = "https://files.pythonhosted.org/packages/0a/0c/95aeb51d4246bd9a3242d3d8349c1112b4ee7611a4b40f0c5c93b05f001d/safetensors-0.5.3-cp38-abi3-win32.whl", hash = "sha256:cfc0ec0846dcf6763b0ed3d1846ff36008c6e7290683b61616c4b040f6a54ace", size = 296677 }, - { url = "https://files.pythonhosted.org/packages/69/e2/b011c38e5394c4c18fb5500778a55ec43ad6106126e74723ffaee246f56e/safetensors-0.5.3-cp38-abi3-win_amd64.whl", hash = "sha256:836cbbc320b47e80acd40e44c8682db0e8ad7123209f69b093def21ec7cafd11", size = 308878 }, -] - -[[package]] -name = "scipy" -version = "1.15.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, -] - -[[package]] -name = "seaborn" -version = "0.13.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486 }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, -] - -[[package]] -name = "sympy" -version = "1.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353 }, -] - -[[package]] -name = "tensorboard" -version = "2.19.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "absl-py" }, - { name = "grpcio" }, - { name = "markdown" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "setuptools" }, - { name = "six" }, - { name = "tensorboard-data-server" }, - { name = "werkzeug" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl", hash = "sha256:5e71b98663a641a7ce8a6e70b0be8e1a4c0c45d48760b076383ac4755c35b9a0", size = 5503412 }, -] - -[[package]] -name = "tensorboard-data-server" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356 }, - { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598 }, - { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363 }, -] - -[[package]] -name = "tokenizers" -version = "0.21.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/76/5ac0c97f1117b91b7eb7323dcd61af80d72f790b4df71249a7850c195f30/tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab", size = 343256 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/1f/328aee25f9115bf04262e8b4e5a2050b7b7cf44b59c74e982db7270c7f30/tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41", size = 2780767 }, - { url = "https://files.pythonhosted.org/packages/ae/1a/4526797f3719b0287853f12c5ad563a9be09d446c44ac784cdd7c50f76ab/tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3", size = 2650555 }, - { url = "https://files.pythonhosted.org/packages/4d/7a/a209b29f971a9fdc1da86f917fe4524564924db50d13f0724feed37b2a4d/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f", size = 2937541 }, - { url = "https://files.pythonhosted.org/packages/3c/1e/b788b50ffc6191e0b1fc2b0d49df8cff16fe415302e5ceb89f619d12c5bc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf", size = 2819058 }, - { url = "https://files.pythonhosted.org/packages/36/aa/3626dfa09a0ecc5b57a8c58eeaeb7dd7ca9a37ad9dd681edab5acd55764c/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8", size = 3133278 }, - { url = "https://files.pythonhosted.org/packages/a4/4d/8fbc203838b3d26269f944a89459d94c858f5b3f9a9b6ee9728cdcf69161/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0", size = 3144253 }, - { url = "https://files.pythonhosted.org/packages/d8/1b/2bd062adeb7c7511b847b32e356024980c0ffcf35f28947792c2d8ad2288/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c", size = 3398225 }, - { url = "https://files.pythonhosted.org/packages/8a/63/38be071b0c8e06840bc6046991636bcb30c27f6bb1e670f4f4bc87cf49cc/tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a", size = 3038874 }, - { url = "https://files.pythonhosted.org/packages/ec/83/afa94193c09246417c23a3c75a8a0a96bf44ab5630a3015538d0c316dd4b/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf", size = 9014448 }, - { url = "https://files.pythonhosted.org/packages/ae/b3/0e1a37d4f84c0f014d43701c11eb8072704f6efe8d8fc2dcdb79c47d76de/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6", size = 8937877 }, - { url = "https://files.pythonhosted.org/packages/ac/33/ff08f50e6d615eb180a4a328c65907feb6ded0b8f990ec923969759dc379/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d", size = 9186645 }, - { url = "https://files.pythonhosted.org/packages/5f/aa/8ae85f69a9f6012c6f8011c6f4aa1c96154c816e9eea2e1b758601157833/tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f", size = 9384380 }, - { url = "https://files.pythonhosted.org/packages/e8/5b/a5d98c89f747455e8b7a9504910c865d5e51da55e825a7ae641fb5ff0a58/tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3", size = 2239506 }, - { url = "https://files.pythonhosted.org/packages/e6/b6/072a8e053ae600dcc2ac0da81a23548e3b523301a442a6ca900e92ac35be/tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382", size = 2435481 }, -] - -[[package]] -name = "torch" -version = "2.7.1" -source = { registry = "https://download.pytorch.org/whl/cpu" } -resolution-markers = [ - "sys_platform == 'darwin'", -] -dependencies = [ - { name = "filelock", marker = "sys_platform == 'darwin'" }, - { name = "fsspec", marker = "sys_platform == 'darwin'" }, - { name = "jinja2", marker = "sys_platform == 'darwin'" }, - { name = "networkx", marker = "sys_platform == 'darwin'" }, - { name = "setuptools", marker = "sys_platform == 'darwin'" }, - { name = "sympy", marker = "sys_platform == 'darwin'" }, - { name = "typing-extensions", marker = "sys_platform == 'darwin'" }, -] -wheels = [ - { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:95af97e7b2cecdc89edc0558962a51921bf9c61538597dbec6b7cc48d31e2e13" }, - { url = "https://download.pytorch.org/whl/cpu/torch-2.7.1-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7ecd868a086468e1bcf74b91db425c1c2951a9cfcd0592c4c73377b7e42485ae" }, -] - -[[package]] -name = "torch" -version = "2.7.1+cu128" -source = { registry = "https://download.pytorch.org/whl/cu128" } -resolution-markers = [ - "sys_platform != 'darwin'", -] -dependencies = [ - { name = "filelock", marker = "sys_platform != 'darwin'" }, - { name = "fsspec", marker = "sys_platform != 'darwin'" }, - { name = "jinja2", marker = "sys_platform != 'darwin'" }, - { name = "networkx", marker = "sys_platform != 'darwin'" }, - { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools", marker = "sys_platform != 'darwin'" }, - { name = "sympy", marker = "sys_platform != 'darwin'" }, - { name = "triton", marker = "sys_platform == 'linux'" }, - { name = "typing-extensions", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d56d29a6ad7758ba5173cc2b0c51c93e126e2b0a918e874101dc66545283967f" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9560425f9ea1af1791507e8ca70d5b9ecf62fed7ca226a95fcd58d0eb2cca78f" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313-win_amd64.whl", hash = "sha256:500ad5b670483f62d4052e41948a3fb19e8c8de65b99f8d418d879cbb15a82d6" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:f112465fdf42eb1297c6dddda1a8b7f411914428b704e1b8a47870c52e290909" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c355db49c218ada70321d5c5c9bb3077312738b99113c8f3723ef596b554a7b9" }, - { url = "https://download.pytorch.org/whl/cu128/torch-2.7.1%2Bcu128-cp313-cp313t-win_amd64.whl", hash = "sha256:e27e5f7e74179fb5d814a0412e5026e4b50c9e0081e9050bc4c28c992a276eb1" }, -] - -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, -] - -[[package]] -name = "transformers" -version = "4.52.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "requests" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/da/a9/275037087f9d846580b02f2d7cae0e0a6955d46f84583d0151d6227bd416/transformers-4.52.4.tar.gz", hash = "sha256:aff3764441c1adc192a08dba49740d3cbbcb72d850586075aed6bd89b98203e6", size = 8945376 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/f2/25b27b396af03d5b64e61976b14f7209e2939e9e806c10749b6d277c273e/transformers-4.52.4-py3-none-any.whl", hash = "sha256:203f5c19416d5877e36e88633943761719538a25d9775977a24fe77a1e5adfc7", size = 10460375 }, -] - -[[package]] -name = "triton" -version = "3.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools", marker = "sys_platform != 'darwin'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/74/1f/dfb531f90a2d367d914adfee771babbd3f1a5b26c3f5fbc458dee21daa78/triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b89d846b5a4198317fec27a5d3a609ea96b6d557ff44b56c23176546023c4240", size = 155673035 }, - { url = "https://files.pythonhosted.org/packages/28/71/bd20ffcb7a64c753dc2463489a61bf69d531f308e390ad06390268c4ea04/triton-3.3.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3198adb9d78b77818a5388bff89fa72ff36f9da0bc689db2f0a651a67ce6a42", size = 155735832 }, -] - -[[package]] -name = "typing-extensions" -version = "4.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839 }, -] - -[[package]] -name = "tzdata" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, -] - -[[package]] -name = "urllib3" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680 }, -] - -[[package]] -name = "werkzeug" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, -] From 165a996b33da1831e10be2c5e1e84026a8bd3a14 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 9 Jun 2025 21:26:27 +0300 Subject: [PATCH 174/175] remove unneeded +1 call in range --- modeling/dataset/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modeling/dataset/base.py b/modeling/dataset/base.py index a7983393..835c0578 100644 --- a/modeling/dataset/base.py +++ b/modeling/dataset/base.py @@ -272,7 +272,7 @@ def create_from_config(cls, config, **kwargs): def flatten_item_sequence(cls, item_ids): min_history_length = 3 # TODOPK make this configurable histories = [] - for i in range(min_history_length, len(item_ids) + 1): + for i in range(min_history_length, len(item_ids)): histories.append(item_ids[:i]) return histories From b0cd74d2599610f3ee7db30f437dce6def422206 Mon Sep 17 00:00:00 2001 From: peterochek Date: Mon, 16 Jun 2025 16:42:11 +0300 Subject: [PATCH 175/175] add mapped tensor --- modeling/dataloader/batch_processors.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modeling/dataloader/batch_processors.py b/modeling/dataloader/batch_processors.py index c0134377..d7567bd3 100644 --- a/modeling/dataloader/batch_processors.py +++ b/modeling/dataloader/batch_processors.py @@ -1,6 +1,6 @@ import json import re - +from itertools import chain import torch from utils import MetaParent @@ -91,12 +91,13 @@ def __call__(self, batch): ids = processed_batch[f"{prefix}.ids"] lengths = processed_batch[f"{prefix}.length"] - flattened_ids = [] + mapped_ids = [] for _id in ids: - flattened_ids.extend(self._mapping[_id]) + mapped_ids.append(self._mapping[_id]) - processed_batch[f"semantic_{prefix}.ids"] = flattened_ids + processed_batch[f"semantic_{prefix}.ids"] = list(chain.from_iterable(mapped_ids)) + processed_batch[f"semantic_{prefix}_tensor.ids"] = mapped_ids processed_batch[f"semantic_{prefix}.length"] = [length * self._semantic_length for length in lengths] for part, values in processed_batch.items():

-&NY)Zg5&CF+jzkDQ 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 Date: Sun, 23 Feb 2025 15:02:15 +0300 Subject: [PATCH 120/175] honest sasrec --- modeling/loss/base.py | 18 +++++++++++++++++ modeling/models/sasrec.py | 3 ++- modeling/models/sasrec_freezed.py | 1 + modeling/models/sasrec_semantic.py | 19 ++++++++++-------- ...s.out.tfevents.1740225602.laplas.2693646.0 | Bin 140105 -> 1072545 bytes ...s.out.tfevents.1740225602.laplas.2693646.0 | Bin 170512 -> 0 bytes 6 files changed, 32 insertions(+), 9 deletions(-) delete mode 100644 tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 diff --git a/modeling/loss/base.py b/modeling/loss/base.py index 80ca20d8..7827a7f7 100644 --- a/modeling/loss/base.py +++ b/modeling/loss/base.py @@ -333,6 +333,24 @@ def __init__( def forward(self, inputs): positive_scores = inputs[self._positive_prefix] # (x, embedding_dim) negative_scores = inputs[self._negative_prefix] # (x, embedding_dim) + sample_ids = inputs["sample_ids"] + + num_items = negative_scores.shape[1] - 2 + + possible_indices = torch.arange(1, num_items + 1, device=negative_scores.device) # 1, 2, ... num_items + mask = torch.ones_like(possible_indices, dtype=torch.bool) # True, True, ... True + mask[sample_ids - 1] = False # True, False, ... False, True, ... True + valid_indices = possible_indices[mask] # 1, 2, ... num_items, except sample_ids + + rand_idx = torch.randint(0, len(valid_indices), size=(negative_scores.shape[0], 1), device=negative_scores.device) + index = valid_indices[rand_idx] + + negative_scores = torch.gather( + input=negative_scores, + dim=1, + index=index, + ) + assert positive_scores.shape[0] == negative_scores.shape[0] positive_loss = torch.log(nn.functional.sigmoid(positive_scores)).sum(dim=-1) # (x) diff --git a/modeling/models/sasrec.py b/modeling/models/sasrec.py index 06dee724..4bf6dac3 100644 --- a/modeling/models/sasrec.py +++ b/modeling/models/sasrec.py @@ -97,7 +97,8 @@ def forward(self, inputs): return { 'positive_scores': positive_scores, - 'negative_scores': negative_scores + 'negative_scores': negative_scores, + "sample_ids": sample_ids, } else: # eval mode last_embeddings = self._get_last_embedding(embeddings, mask) # (batch_size, embedding_dim) diff --git a/modeling/models/sasrec_freezed.py b/modeling/models/sasrec_freezed.py index bbc20ab9..42194c1d 100644 --- a/modeling/models/sasrec_freezed.py +++ b/modeling/models/sasrec_freezed.py @@ -142,6 +142,7 @@ def forward(self, inputs): return { "positive_scores": positive_scores, "negative_scores": negative_scores, + "sample_ids": sample_ids, } else: # eval mode last_embeddings = self._get_last_embedding( diff --git a/modeling/models/sasrec_semantic.py b/modeling/models/sasrec_semantic.py index 0ea42d7e..e347018b 100644 --- a/modeling/models/sasrec_semantic.py +++ b/modeling/models/sasrec_semantic.py @@ -111,19 +111,19 @@ def forward(self, inputs): embeddings, mask ) # (batch_size, embedding_dim) - all_embeddings = ( - self._item_id_to_full_embedding - ) # (num_items, embedding_dim) - all_embeddings = torch.cat( - [torch.zeros(1, self._embedding_dim, device=DEVICE), all_embeddings], + [ + torch.zeros(1, self._embedding_dim, device=DEVICE), + self._item_id_to_full_embedding, + torch.zeros(1, self._embedding_dim, device=DEVICE), + ], dim=0, - ) # (num_items + 1, embedding_dim) + ) # (num_items + 2, embedding_dim) # a -- all_batch_events, n -- num_items, d -- embedding_dim all_scores = torch.einsum( "ad,nd->an", last_embeddings, all_embeddings - ) # (batch_size, num_items + 1) + ) # (batch_size, num_items + 2) positive_scores = torch.gather( input=all_scores, dim=1, index=all_positive_sample_events[..., None] @@ -138,11 +138,14 @@ def forward(self, inputs): dim=1, index=sample_ids, src=torch.ones_like(sample_ids) * (-torch.inf), - ) # (all_batch_events, num_items + 1) + ) # (all_batch_events, num_items + 2) + negative_scores[:, 0] = -torch.inf # Padding idx + negative_scores[:, self._num_items + 1:] = -torch.inf # Mask idx return { "positive_scores": positive_scores, "negative_scores": negative_scores, + "sample_ids": sample_ids, } else: # eval mode last_embeddings = self._get_last_embedding( diff --git a/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 b/tensorboard_logs_laplas/sasrec_semantic_beauty_2025-02-22T15:00/events.out.tfevents.1740225602.laplas.2693646.0 index 637b808a56a236557c37b76a5957c889dcae35b3..491325ba4688f634481874617804a01a007a10ff 100644 GIT binary patch literal 1072545 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 z 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 z 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

-&NY)Zg5&CF+jzkDQ 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